Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
1c929a0f
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 搜索 >>
提交
1c929a0f
编写于
12月 24, 2019
作者:
Z
Zihao Yu
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'asic' into 'master'
Asic See merge request projectn/noop!75
上级
4268653f
6c199c4e
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
33 addition
and
21 deletion
+33
-21
Makefile
Makefile
+4
-1
src/main/scala/noop/IDU2.scala
src/main/scala/noop/IDU2.scala
+6
-2
src/main/scala/noop/TLB.scala
src/main/scala/noop/TLB.scala
+2
-2
src/main/scala/system/SoC.scala
src/main/scala/system/SoC.scala
+14
-4
src/test/csrc/main.cpp
src/test/csrc/main.cpp
+3
-1
src/test/scala/top/NOOPSim.scala
src/test/scala/top/NOOPSim.scala
+0
-1
src/test/scala/top/SimMMIO.scala
src/test/scala/top/SimMMIO.scala
+4
-10
未找到文件。
Makefile
浏览文件 @
1c929a0f
...
...
@@ -58,6 +58,7 @@ VERILATOR_FLAGS = --top-module $(SIM_TOP) \
+define+VERILATOR
=
1
\
+define+PRINTF_COND
=
1
\
+define+RANDOMIZE_REG_INIT
\
+define+RANDOMIZE_MEM_INIT
\
--assert
\
--output-split
5000
\
--output-split-cfuncs
5000
\
...
...
@@ -86,8 +87,10 @@ ifdef mainargs
MAINARGS
=
-m
$(mainargs)
endif
SEED
=
-s
$(
shell
seq
1 10000 |
shuf
|
head
-n
1
)
emu
:
$(EMU)
@
$(EMU)
-i
$(IMAGE)
$(MAINARGS)
@
$(EMU)
-i
$(IMAGE)
$(
SEED)
$(
MAINARGS)
cache
:
$(MAKE)
emu
IMAGE
=
Makefile
...
...
src/main/scala/noop/IDU2.scala
浏览文件 @
1c929a0f
...
...
@@ -111,8 +111,12 @@ class IDU2(implicit val p: NOOPConfig) extends NOOPModule with HasInstrType {
io
.
out
.
bits
.
data
.
imm
:=
Mux
(
isRVC
,
immrvc
,
imm
)
when
(
fuType
===
FuType
.
alu
)
{
when
(
rfDest
===
1.
U
&&
fuOpType
===
ALUOpType
.
jal
)
{
io
.
out
.
bits
.
ctrl
.
fuOpType
:=
ALUOpType
.
call
}
when
(
rfSrc1
===
1.
U
&&
fuOpType
===
ALUOpType
.
jalr
)
{
io
.
out
.
bits
.
ctrl
.
fuOpType
:=
ALUOpType
.
ret
}
def
isLink
(
reg
:
UInt
)
=
(
reg
===
1.
U
||
reg
===
5.
U
)
when
(
isLink
(
rfDest
)
&&
fuOpType
===
ALUOpType
.
jal
)
{
io
.
out
.
bits
.
ctrl
.
fuOpType
:=
ALUOpType
.
call
}
when
(
fuOpType
===
ALUOpType
.
jalr
)
{
when
(
isLink
(
rfSrc1
))
{
io
.
out
.
bits
.
ctrl
.
fuOpType
:=
ALUOpType
.
ret
}
when
(
isLink
(
rfDest
))
{
io
.
out
.
bits
.
ctrl
.
fuOpType
:=
ALUOpType
.
call
}
}
}
// fix LUI
io
.
out
.
bits
.
ctrl
.
src1Type
:=
Mux
(
instr
(
6
,
0
)
===
"b0110111"
.
U
,
SrcType
.
reg
,
src1Type
)
...
...
src/main/scala/noop/TLB.scala
浏览文件 @
1c929a0f
...
...
@@ -504,7 +504,7 @@ class TLBExec(implicit val tlbConfig: TLBConfig) extends TlbModule{
val
permExec
=
permCheck
&&
missflag
.
x
val
permLoad
=
permCheck
&&
(
missflag
.
r
||
pf
.
status_mxr
&&
missflag
.
x
)
val
permStore
=
permCheck
&&
missflag
.
w
val
updateAD
=
false
.
B
//
!missflag.a || (!missflag.d && req.isWrite())
val
updateAD
=
!
missflag
.
a
||
(!
missflag
.
d
&&
req
.
isWrite
())
val
updateData
=
Cat
(
0.
U
(
56.
W
),
req
.
isWrite
(),
1.
U
(
1.
W
),
0.
U
(
6.
W
)
)
missRefillFlag
:=
Cat
(
req
.
isWrite
(),
1.
U
(
1.
W
),
0.
U
(
6.
W
))
|
missflag
.
asUInt
memRespStore
:=
io
.
mem
.
resp
.
bits
.
rdata
|
updateData
...
...
@@ -606,4 +606,4 @@ object TLB {
tlb
.
io
.
csrMMU
<>
csrMMU
tlb
}
}
}
\ No newline at end of file
src/main/scala/system/SoC.scala
浏览文件 @
1c929a0f
...
...
@@ -3,6 +3,7 @@ package system
import
noop._
import
bus.axi4.
{
AXI4
,
AXI4Lite
}
import
bus.simplebus._
import
device.AXI4Timer
import
chisel3._
import
chisel3.util._
...
...
@@ -28,7 +29,6 @@ class NOOPSoC(implicit val p: NOOPConfig) extends Module with HasSoCParameter {
val
mem
=
new
AXI4
val
mmio
=
(
if
(
p
.
FPGAPlatform
)
{
new
AXI4Lite
}
else
{
new
SimpleBusUC
})
val
frontend
=
Flipped
(
new
AXI4
)
val
mtip
=
Input
(
Bool
())
val
meip
=
Input
(
Bool
())
val
ila
=
if
(
p
.
FPGAPlatform
&&
EnableILA
)
Some
(
Output
(
new
ILABundle
))
else
None
})
...
...
@@ -70,10 +70,20 @@ class NOOPSoC(implicit val p: NOOPConfig) extends Module with HasSoCParameter {
noop
.
io
.
imem
.
coh
.
req
.
valid
:=
false
.
B
noop
.
io
.
imem
.
coh
.
req
.
bits
:=
DontCare
if
(
p
.
FPGAPlatform
)
io
.
mmio
<>
noop
.
io
.
mmio
.
toAXI4Lite
()
else
io
.
mmio
<>
noop
.
io
.
mmio
val
addrSpace
=
List
(
(
0x40000000
L
,
0x08000000
L
),
// external devices
(
0x48000000
L
,
0x00010000
L
)
// CLINT
)
val
mmioXbar
=
Module
(
new
SimpleBusCrossbar1toN
(
addrSpace
))
mmioXbar
.
io
.
in
<>
noop
.
io
.
mmio
val
mtipSync
=
RegNext
(
RegNext
(
io
.
mtip
))
val
extDev
=
mmioXbar
.
io
.
out
(
0
)
val
clint
=
Module
(
new
AXI4Timer
(
sim
=
!
p
.
FPGAPlatform
))
clint
.
io
.
in
<>
mmioXbar
.
io
.
out
(
1
).
toAXI4Lite
()
if
(
p
.
FPGAPlatform
)
io
.
mmio
<>
extDev
.
toAXI4Lite
()
else
io
.
mmio
<>
extDev
val
mtipSync
=
clint
.
io
.
extra
.
get
.
mtip
val
meipSync
=
RegNext
(
RegNext
(
io
.
meip
))
BoringUtils
.
addSource
(
mtipSync
,
"mtip"
)
BoringUtils
.
addSource
(
meipSync
,
"meip"
)
...
...
src/test/csrc/main.cpp
浏览文件 @
1c929a0f
...
...
@@ -42,8 +42,10 @@ std::vector<const char *> Emulator::parse_args(int argc, const char *argv[]) {
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"
)
if
(
std
::
string
(
optarg
)
!=
"NO_SEED"
)
{
seed
=
atoll
(
optarg
);
printf
(
"Using seed = %d
\n
"
,
seed
);
}
break
;
case
'C'
:
max_cycles
=
atoll
(
optarg
);
break
;
case
'i'
:
image
=
optarg
;
...
...
src/test/scala/top/NOOPSim.scala
浏览文件 @
1c929a0f
...
...
@@ -47,7 +47,6 @@ class NOOPSimTop extends Module {
mem
.
io
.
in
<>
memdelay
.
io
.
out
mmio
.
io
.
rw
<>
soc
.
io
.
mmio
soc
.
io
.
mtip
:=
mmio
.
io
.
mtip
// soc.io.meip := Counter(true.B, 9973)._2 // use prime here to not overlapped by mtip
soc
.
io
.
meip
:=
false
.
B
// use prime here to not overlapped by mtip
...
...
src/test/scala/top/SimMMIO.scala
浏览文件 @
1c929a0f
...
...
@@ -9,12 +9,10 @@ import device._
class
SimMMIO
extends
Module
{
val
io
=
IO
(
new
Bundle
{
val
rw
=
Flipped
(
new
SimpleBusUC
)
val
mtip
=
Output
(
Bool
())
})
val
devAddrSpace
=
List
(
(
0x40600000
L
,
0x10
L
),
// uart
(
0x40700000
L
,
0x10000
L
),
// timer
(
0x41000000
L
,
0x400000
L
),
// vmem
(
0x40800000
L
,
0x8
L
),
// vga ctrl
(
0x40000000
L
,
0x1000
L
),
// flash
...
...
@@ -25,17 +23,13 @@ class SimMMIO extends Module {
xbar
.
io
.
in
<>
io
.
rw
val
uart
=
Module
(
new
AXI4UART
)
val
timer
=
Module
(
new
AXI4Timer
(
sim
=
true
))
val
vga
=
Module
(
new
AXI4VGA
(
sim
=
true
))
val
flash
=
Module
(
new
AXI4Flash
)
val
sd
=
Module
(
new
AXI4DummySD
)
uart
.
io
.
in
<>
xbar
.
io
.
out
(
0
).
toAXI4Lite
()
timer
.
io
.
in
<>
xbar
.
io
.
out
(
1
).
toAXI4Lite
()
vga
.
io
.
in
.
fb
<>
xbar
.
io
.
out
(
2
).
toAXI4Lite
()
vga
.
io
.
in
.
ctrl
<>
xbar
.
io
.
out
(
3
).
toAXI4Lite
()
flash
.
io
.
in
<>
xbar
.
io
.
out
(
4
).
toAXI4Lite
()
sd
.
io
.
in
<>
xbar
.
io
.
out
(
5
).
toAXI4Lite
()
vga
.
io
.
in
.
fb
<>
xbar
.
io
.
out
(
1
).
toAXI4Lite
()
vga
.
io
.
in
.
ctrl
<>
xbar
.
io
.
out
(
2
).
toAXI4Lite
()
flash
.
io
.
in
<>
xbar
.
io
.
out
(
3
).
toAXI4Lite
()
sd
.
io
.
in
<>
xbar
.
io
.
out
(
4
).
toAXI4Lite
()
vga
.
io
.
vga
:=
DontCare
io
.
mtip
:=
timer
.
io
.
extra
.
get
.
mtip
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录