Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
2151df3f
X
XiangShan
项目概览
OpenXiangShan
/
XiangShan
10 个月 前同步成功
通知
1183
Star
3914
Fork
526
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
X
XiangShan
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
2151df3f
编写于
6月 26, 2020
作者:
Y
Your Name
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' into ibuf
上级
95f23fe5
8a3d000a
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
48 addition
and
10 deletion
+48
-10
Makefile
Makefile
+5
-1
src/main/scala/xiangshan/utils/LogUtils.scala
src/main/scala/xiangshan/utils/LogUtils.scala
+17
-7
src/test/csrc/emu.h
src/test/csrc/emu.h
+7
-1
src/test/csrc/main.cpp
src/test/csrc/main.cpp
+7
-1
src/test/scala/top/XSSim.scala
src/test/scala/top/XSSim.scala
+12
-0
未找到文件。
Makefile
浏览文件 @
2151df3f
...
...
@@ -85,8 +85,12 @@ $(EMU): $(EMU_MK) $(EMU_DEPS) $(EMU_HEADERS) $(REF_SO)
SEED
=
-s
$(
shell
seq
1 10000 |
shuf
|
head
-n
1
)
B
?=
0
E
?=
-1
emu
:
$(EMU)
@
$(EMU)
-i
$(IMAGE)
$(SEED)
@
$(EMU)
-i
$(IMAGE)
$(SEED)
-b
$(B)
-e
$(E)
cache
:
$(MAKE)
emu
IMAGE
=
Makefile
...
...
src/main/scala/xiangshan/utils/LogUtils.scala
浏览文件 @
2151df3f
package
xiangshan.utils
import
chisel3._
import
chisel3.util.experimental.BoringUtils
import
xiangshan.HasXSParameter
import
xiangshan.utils.XSLogLevel.XSLogLevel
object
XSLogLevel
extends
Enumeration
{
type
XSLogLevel
=
Value
val
ALL
=
Value
(
"ALL"
)
val
ALL
=
Value
(
"ALL
"
)
val
DEBUG
=
Value
(
"DEBUG"
)
val
INFO
=
Value
(
"INFO"
)
val
WARN
=
Value
(
"WARN"
)
val
INFO
=
Value
(
"INFO
"
)
val
WARN
=
Value
(
"WARN
"
)
val
ERROR
=
Value
(
"ERROR"
)
val
OFF
=
Value
(
"OFF"
)
val
OFF
=
Value
(
"OFF
"
)
}
object
XSLog
extends
HasXSParameter
{
object
XSLog
extends
HasXSParameter
{
def
displayLog
()
:
Bool
=
{
val
disp_begin
,
disp_end
=
WireInit
(
0.
U
(
64.
W
))
BoringUtils
.
addSink
(
disp_begin
,
"DISPALY_LOG_START"
)
BoringUtils
.
addSink
(
disp_end
,
"DISPLAY_LOG_END"
)
assert
(
disp_begin
<=
disp_end
)
(
GTimer
()
>=
disp_begin
)
&&
(
GTimer
()
<=
disp_end
)
}
def
apply
(
debugLevel
:
XSLogLevel
)
(
cond
:
Bool
,
pable
:
Printable
)
(
implicit
m
:
Module
)
:
Any
=
{
if
(
debugLevel
>=
LogLevel
)
{
when
(
cond
)
{
when
(
cond
&&
displayLog
()
)
{
val
commonInfo
=
p
"[$debugLevel][time=${GTimer()}] ${m.name}: "
printf
(
commonInfo
+
pable
)
}
...
...
@@ -39,7 +49,7 @@ sealed abstract class LogHelper(val logLevel: XSLogLevel) extends HasXSParameter
// Do not use that unless you have valid reasons
def
apply
(
cond
:
Bool
=
true
.
B
)(
body
:
=>
Unit
)
:
Any
=
if
(
logLevel
>=
LogLevel
)
{
when
(
cond
)
{
body
}
}
if
(
logLevel
>=
LogLevel
)
{
when
(
cond
&&
XSLog
.
displayLog
()
)
{
body
}
}
}
object
XSDebug
extends
LogHelper
(
XSLogLevel
.
DEBUG
)
...
...
src/test/csrc/emu.h
浏览文件 @
2151df3f
...
...
@@ -25,6 +25,7 @@ class Emulator {
// emu control variable
uint32_t
seed
;
uint64_t
max_cycles
,
cycles
;
uint64_t
log_begin
,
log_end
;
std
::
vector
<
const
char
*>
parse_args
(
int
argc
,
const
char
*
argv
[]);
...
...
@@ -55,7 +56,8 @@ class Emulator {
Emulator
(
int
argc
,
const
char
*
argv
[])
:
image
(
nullptr
),
dut_ptr
(
new
std
::
remove_reference
<
decltype
(
*
dut_ptr
)
>::
type
),
seed
(
0
),
max_cycles
(
-
1
),
cycles
(
0
)
seed
(
0
),
max_cycles
(
-
1
),
cycles
(
0
),
log_begin
(
0
),
log_end
(
-
1
)
{
// init emu
auto
args
=
parse_args
(
argc
,
argv
);
...
...
@@ -65,6 +67,10 @@ class Emulator {
srand48
(
seed
);
Verilated
::
randReset
(
2
);
// set log time range
dut_ptr
->
io_logCtrl_log_begin
=
log_begin
;
dut_ptr
->
io_logCtrl_log_end
=
log_end
;
// init ram
extern
void
init_ram
(
const
char
*
img
);
init_ram
(
image
);
...
...
src/test/csrc/main.cpp
浏览文件 @
2151df3f
...
...
@@ -20,6 +20,8 @@ const struct option Emulator::long_options[] = {
{
"seed"
,
1
,
NULL
,
's'
},
{
"max-cycles"
,
1
,
NULL
,
'C'
},
{
"image"
,
1
,
NULL
,
'i'
},
{
"log-begin"
,
1
,
NULL
,
'b'
},
{
"log-end"
,
1
,
NULL
,
'e'
},
{
"help"
,
0
,
NULL
,
'h'
},
{
0
,
0
,
NULL
,
0
}
};
...
...
@@ -30,6 +32,8 @@ void Emulator::print_help(const char *file) {
printf
(
" -s, --seed=NUM use this seed
\n
"
);
printf
(
" -C, --max-cycles=NUM execute at most NUM cycles
\n
"
);
printf
(
" -i, --image=FILE run with this image file
\n
"
);
printf
(
" -b, --log-begin=NUM display log from NUM th cycle
\n
"
);
printf
(
" -e, --log-end=NUM stop display log at NUM th cycle
\n
"
);
printf
(
" -h, --help print program help info
\n
"
);
printf
(
"
\n
"
);
}
...
...
@@ -37,7 +41,7 @@ void Emulator::print_help(const char *file) {
std
::
vector
<
const
char
*>
Emulator
::
parse_args
(
int
argc
,
const
char
*
argv
[])
{
std
::
vector
<
const
char
*>
args
=
{
argv
[
0
]
};
int
o
;
while
(
(
o
=
getopt_long
(
argc
,
const_cast
<
char
*
const
*>
(
argv
),
"-s:C:hi:m:"
,
long_options
,
NULL
))
!=
-
1
)
{
while
(
(
o
=
getopt_long
(
argc
,
const_cast
<
char
*
const
*>
(
argv
),
"-s:C:hi:m:
b:e:
"
,
long_options
,
NULL
))
!=
-
1
)
{
switch
(
o
)
{
case
's'
:
if
(
std
::
string
(
optarg
)
!=
"NO_SEED"
)
{
...
...
@@ -50,6 +54,8 @@ std::vector<const char *> Emulator::parse_args(int argc, const char *argv[]) {
args
.
push_back
(
"-i"
);
args
.
push_back
(
optarg
);
break
;
case
'b'
:
log_begin
=
atoll
(
optarg
);
break
;
case
'e'
:
log_end
=
atoll
(
optarg
);
break
;
default:
print_help
(
argv
[
0
]);
exit
(
0
);
...
...
src/test/scala/top/XSSim.scala
浏览文件 @
2151df3f
...
...
@@ -27,9 +27,14 @@ class DiffTestIO extends Bundle {
val
scause
=
Output
(
UInt
(
64.
W
))
}
class
LogCtrlIO
extends
Bundle
{
val
log_begin
,
log_end
=
Input
(
UInt
(
32.
W
))
}
class
XSSimTop
extends
Module
{
val
io
=
IO
(
new
Bundle
{
val
difftest
=
new
DiffTestIO
val
logCtrl
=
new
LogCtrlIO
})
lazy
val
config
=
XSConfig
(
FPGAPlatform
=
false
)
...
...
@@ -66,6 +71,13 @@ class XSSimTop extends Module {
BoringUtils
.
addSink
(
difftest
.
mcause
,
"difftestMcause"
)
BoringUtils
.
addSink
(
difftest
.
scause
,
"difftestScause"
)
io
.
difftest
:=
difftest
val
log_begin
,
log_end
=
Wire
(
UInt
(
32.
W
))
log_begin
:=
io
.
logCtrl
.
log_begin
log_end
:=
io
.
logCtrl
.
log_end
BoringUtils
.
addSource
(
log_begin
,
"DISPALY_LOG_START"
)
BoringUtils
.
addSource
(
log_end
,
"DISPLAY_LOG_END"
)
}
object
TestMain
extends
App
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录