Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
0381ae5a
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 搜索 >>
提交
0381ae5a
编写于
10月 14, 2019
作者:
Z
Zihao Yu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
noop,IFU: change reset vector to 0x80000000
* also put mainargs at 0x80001000 to match AM
上级
54453403
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
22 addition
and
20 deletion
+22
-20
Makefile
Makefile
+1
-1
src/main/scala/noop/IFU.scala
src/main/scala/noop/IFU.scala
+1
-1
src/test/csrc/difftest.cpp
src/test/csrc/difftest.cpp
+3
-4
src/test/csrc/emu.h
src/test/csrc/emu.h
+4
-5
src/test/csrc/main.cpp
src/test/csrc/main.cpp
+7
-6
src/test/csrc/ram.cpp
src/test/csrc/ram.cpp
+6
-3
未找到文件。
Makefile
浏览文件 @
0381ae5a
...
...
@@ -66,7 +66,7 @@ $(EMU): $(EMU_MK) $(EMU_DEPS) $(EMU_HEADERS) $(REF_SO)
CPPFLAGS
=
-DREF_SO
=
\\\"
$(REF_SO)
\\\"
$(MAKE)
-C
$(
dir
$(EMU_MK)
)
-f
$(
abspath
$(EMU_MK)
)
ifdef
mainargs
MAINARGS
=
-
a
$(mainargs)
MAINARGS
=
-
m
$(mainargs)
endif
emu
:
$(EMU)
...
...
src/main/scala/noop/IFU.scala
浏览文件 @
0381ae5a
...
...
@@ -8,7 +8,7 @@ import utils._
import
bus.simplebus._
trait
HasResetVector
{
val
resetVector
=
0x80
1
00000
L
//TODO: set reset vec
val
resetVector
=
0x80
0
00000
L
//TODO: set reset vec
}
class
IFU
extends
NOOPModule
with
HasResetVector
{
...
...
src/test/csrc/difftest.cpp
浏览文件 @
0381ae5a
...
...
@@ -34,7 +34,7 @@ void difftest_skip_dut() {
is_skip_dut
=
true
;
}
void
init_difftest
(
uint64_t
*
reg
,
const
char
*
mainargs
)
{
void
init_difftest
(
uint64_t
*
reg
)
{
void
*
handle
;
handle
=
dlopen
(
REF_SO
,
RTLD_LAZY
|
RTLD_DEEPBIND
);
assert
(
handle
);
...
...
@@ -63,14 +63,13 @@ void init_difftest(uint64_t *reg, const char *mainargs) {
ref_difftest_init
();
void
*
get_img_start
();
long
get_img_size
();
ref_difftest_memcpy_from_dut
(
0x100000
,
get_img_start
(),
get_img_size
());
ref_difftest_memcpy_from_dut
(
0x0
,
(
void
*
)
mainargs
,
strlen
(
mainargs
)
+
1
);
ref_difftest_memcpy_from_dut
(
0x0
,
get_img_start
(),
get_img_size
());
ref_difftest_setregs
(
reg
);
}
int
difftest_step
(
uint64_t
*
reg_scala
,
uint64_t
this_pc
,
int
isMMIO
,
uint64_t
intrNO
)
{
uint64_t
ref_r
[
33
];
static
uint64_t
nemu_pc
=
0x80
1
00000
;
static
uint64_t
nemu_pc
=
0x80
0
00000
;
if
(
isMMIO
)
{
// printf("diff pc: %x\n", this_pc);
// MMIO accessing should not be a branch or jump, just +4 to get the next pc
...
...
src/test/csrc/emu.h
浏览文件 @
0381ae5a
...
...
@@ -9,7 +9,6 @@
#include "common.h"
#include "VNOOPSimTop.h"
class
Emulator
{
const
char
*
image
;
const
char
*
mainargs
;
...
...
@@ -37,7 +36,7 @@ class Emulator {
// argv decay to the secondary pointer
Emulator
(
int
argc
,
const
char
*
argv
[])
:
image
(
nullptr
),
mainargs
(
""
),
mainargs
(
NULL
),
dut_ptr
(
new
std
::
remove_reference
<
decltype
(
*
dut_ptr
)
>::
type
),
seed
(
0
),
max_cycles
(
-
1
),
cycles
(
0
)
{
...
...
@@ -60,11 +59,11 @@ class Emulator {
// init core
reset_ncycles
(
10
);
extern
void
init_difftest
(
uint64_t
*
reg
,
const
char
*
mainargs
);
extern
void
init_difftest
(
uint64_t
*
reg
);
uint64_t
reg
[
33
];
read_emu_regs
(
reg
);
reg
[
32
]
=
0x80
1
00000
;
init_difftest
(
reg
,
mainargs
);
reg
[
32
]
=
0x80
0
00000
;
init_difftest
(
reg
);
}
void
reset_ncycles
(
size_t
cycles
)
{
...
...
src/test/csrc/main.cpp
浏览文件 @
0381ae5a
...
...
@@ -20,8 +20,9 @@ const struct option Emulator::long_options[] = {
{
"seed"
,
1
,
NULL
,
's'
},
{
"max-cycles"
,
1
,
NULL
,
'C'
},
{
"image"
,
1
,
NULL
,
'i'
},
{
"mainargs"
,
1
,
NULL
,
'a'
},
{
"help"
,
0
,
NULL
,
'h'
}
{
"mainargs"
,
1
,
NULL
,
'm'
},
{
"help"
,
0
,
NULL
,
'h'
},
{
0
,
0
,
NULL
,
0
}
};
void
Emulator
::
print_help
(
const
char
*
file
)
{
...
...
@@ -30,15 +31,15 @@ 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
(
" -m, --mainargs=ARGS run with this mainargs (AM only)
\n
"
);
printf
(
" -h, --help print program help info
\n
"
);
printf
(
"
\n
"
);
printf
(
"Report bugs to 141242068@smail.nju.edu.cn.
\n
"
);
}
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:
a
:"
,
long_options
,
NULL
))
!=
-
1
)
{
while
(
(
o
=
getopt_long
(
argc
,
const_cast
<
char
*
const
*>
(
argv
),
"-s:C:hi:
m
:"
,
long_options
,
NULL
))
!=
-
1
)
{
switch
(
o
)
{
case
's'
:
if
(
std
::
string
(
optarg
)
!=
"NO_SEED"
)
...
...
@@ -49,8 +50,8 @@ std::vector<const char *> Emulator::parse_args(int argc, const char *argv[]) {
args
.
push_back
(
"-i"
);
args
.
push_back
(
optarg
);
break
;
case
'
a
'
:
mainargs
=
optarg
;
args
.
push_back
(
"-
a
"
);
case
'
m
'
:
mainargs
=
optarg
;
args
.
push_back
(
"-
m
"
);
args
.
push_back
(
optarg
);
break
;
default:
...
...
src/test/csrc/ram.cpp
浏览文件 @
0381ae5a
#include "common.h"
#define RAMSIZE (128 * 1024 * 1024)
#define MAINARGS_START 0x1000
static
uint64_t
ram
[
RAMSIZE
/
sizeof
(
uint64_t
)];
static
long
img_size
=
0
;
void
*
get_img_start
()
{
return
&
ram
[
0
x100000
/
sizeof
(
uint64_t
)
];
}
void
*
get_img_start
()
{
return
&
ram
[
0
];
}
long
get_img_size
()
{
return
img_size
;
}
void
init_ram
(
const
char
*
img
,
const
char
*
mainargs
)
{
...
...
@@ -21,11 +22,13 @@ void init_ram(const char *img, const char *mainargs) {
img_size
=
ftell
(
fp
);
fseek
(
fp
,
0
,
SEEK_SET
);
int
ret
=
fread
(
get_img_start
()
,
img_size
,
1
,
fp
);
int
ret
=
fread
(
ram
,
img_size
,
1
,
fp
);
assert
(
ret
==
1
);
fclose
(
fp
);
strcpy
((
char
*
)
ram
,
mainargs
);
if
(
mainargs
!=
NULL
)
{
strcpy
((
char
*
)
ram
+
MAINARGS_START
,
mainargs
);
}
}
extern
"C"
void
ram_helper
(
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录