Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
6fd53686
X
XiangShan
项目概览
OpenXiangShan
/
XiangShan
11 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
6fd53686
编写于
10月 08, 2019
作者:
Z
Zihao Yu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
bus,simplebus: refactor bus requests with apply function
上级
1b7c5192
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
20 addition
and
21 deletion
+20
-21
src/main/scala/bus/simplebus/SimpleBus.scala
src/main/scala/bus/simplebus/SimpleBus.scala
+9
-0
src/main/scala/noop/Cache.scala
src/main/scala/noop/Cache.scala
+6
-11
src/main/scala/noop/IFU.scala
src/main/scala/noop/IFU.scala
+2
-5
src/main/scala/noop/fu/LSU.scala
src/main/scala/noop/fu/LSU.scala
+3
-5
未找到文件。
src/main/scala/bus/simplebus/SimpleBus.scala
浏览文件 @
6fd53686
...
...
@@ -40,6 +40,15 @@ class SimpleBusReqBundle(val userBits: Int = 0) extends SimpleBusBundle {
p
"wmask = 0x${Hexadecimal(wmask)}, wdata = 0x${Hexadecimal(wdata)}"
}
def
apply
(
addr
:
UInt
,
cmd
:
UInt
,
size
:
UInt
,
wdata
:
UInt
,
wmask
:
UInt
,
user
:
UInt
=
0.
U
)
{
this
.
addr
:=
addr
this
.
cmd
:=
cmd
this
.
size
:=
size
this
.
wdata
:=
wdata
this
.
wmask
:=
wmask
this
.
user
.
map
(
_
:=
user
)
}
def
isRead
()
=
!
cmd
(
0
)
&&
!
cmd
(
3
)
def
isWrite
()
=
cmd
(
0
)
def
isBurst
()
=
cmd
(
1
)
...
...
src/main/scala/noop/Cache.scala
浏览文件 @
6fd53686
...
...
@@ -170,10 +170,6 @@ sealed class CacheStage3(ro: Boolean, name: String, userBits: Int = 0) extends C
data
=
Wire
(
new
MetaBundle
).
apply
(
tag
=
meta
.
tag
,
valid
=
true
.
B
,
dirty
=
(!
ro
).
B
)
)
// if miss, access memory
io
.
mem
:=
DontCare
io
.
mem
.
req
.
bits
.
size
:=
(
if
(
XLEN
==
64
)
"b11"
.
U
else
"b10"
.
U
)
val
s_idle
::
s_memReadReq
::
s_memReadResp
::
s_memWriteReq
::
s_memWriteResp
::
s_wait_resp
::
Nil
=
Enum
(
6
)
val
state
=
RegInit
(
s_idle
)
val
needFlush
=
RegInit
(
false
.
B
)
...
...
@@ -198,17 +194,16 @@ sealed class CacheStage3(ro: Boolean, name: String, userBits: Int = 0) extends C
is
(
s2_memWriteReq
)
{
when
(
io
.
mem
.
req
.
fire
())
{
state2
:=
s2_idle
}
}
}
io
.
mem
.
req
.
bits
.
wdata
:=
Mux1H
(
io
.
in
.
bits
.
waymask
,
dataWay
).
data
io
.
mem
.
req
.
bits
.
wmask
:=
Fill
(
DataBytes
,
1.
U
)
io
.
mem
.
req
.
bits
.
cmd
:=
Mux
(
state
===
s_memReadReq
,
SimpleBusCmd
.
readBurst
,
Mux
((
writeBeatCnt
.
value
===
(
LineBeats
-
1
).
U
),
SimpleBusCmd
.
writeLast
,
SimpleBusCmd
.
writeBurst
))
// critical word first
// critical word first read
val
raddr
=
(
if
(
XLEN
==
64
)
Cat
(
req
.
addr
(
AddrBits
-
1
,
3
),
0.
U
(
3.
W
))
else
Cat
(
req
.
addr
(
AddrBits
-
1
,
2
),
0.
U
(
2.
W
)))
// dirty block addr
val
waddr
=
Cat
(
meta
.
tag
,
addr
.
index
,
0.
U
(
OffsetBits
.
W
))
io
.
mem
.
req
.
bits
.
addr
:=
Mux
(
state
===
s_memReadReq
,
raddr
,
waddr
)
val
cmd
=
Mux
(
state
===
s_memReadReq
,
SimpleBusCmd
.
readBurst
,
Mux
((
writeBeatCnt
.
value
===
(
LineBeats
-
1
).
U
),
SimpleBusCmd
.
writeLast
,
SimpleBusCmd
.
writeBurst
))
io
.
mem
.
req
.
bits
.
apply
(
addr
=
Mux
(
state
===
s_memReadReq
,
raddr
,
waddr
),
cmd
=
cmd
,
size
=
(
if
(
XLEN
==
64
)
"b11"
.
U
else
"b10"
.
U
),
wdata
=
Mux1H
(
io
.
in
.
bits
.
waymask
,
dataWay
).
data
,
wmask
=
Fill
(
DataBytes
,
1.
U
))
io
.
mem
.
resp
.
ready
:=
true
.
B
io
.
mem
.
req
.
valid
:=
(
state
===
s_memReadReq
)
||
((
state
===
s_memWriteReq
)
&&
(
state2
===
s2_memWriteReq
))
...
...
src/main/scala/noop/IFU.scala
浏览文件 @
6fd53686
...
...
@@ -40,12 +40,9 @@ class IFU extends NOOPModule with HasResetVector {
io
.
flushVec
:=
Mux
(
io
.
redirect
.
valid
,
"b1111"
.
U
,
0.
U
)
io
.
bpFlush
:=
false
.
B
io
.
imem
:=
DontCare
io
.
imem
.
req
.
bits
.
apply
(
addr
=
Cat
(
pc
(
AddrBits
-
1
,
2
),
0.
U
(
2.
W
)),
//cache will treat it as Cat(pc(63,3),0.U(3.W))
size
=
"b11"
.
U
,
cmd
=
SimpleBusCmd
.
read
,
wdata
=
0.
U
,
wmask
=
0.
U
,
user
=
npc
)
io
.
imem
.
req
.
valid
:=
io
.
out
.
ready
io
.
imem
.
req
.
bits
.
addr
:=
Cat
(
pc
(
AddrBits
-
1
,
2
),
0.
U
(
2.
W
))
//cache will treat it as Cat(pc(63,3),0.U(3.W))
io
.
imem
.
req
.
bits
.
size
:=
"b11"
.
U
io
.
imem
.
req
.
bits
.
cmd
:=
SimpleBusCmd
.
read
io
.
imem
.
req
.
bits
.
user
.
map
(
_
:=
npc
)
io
.
imem
.
resp
.
ready
:=
io
.
out
.
ready
||
io
.
flushVec
(
0
)
io
.
out
.
bits
:=
DontCare
...
...
src/main/scala/noop/fu/LSU.scala
浏览文件 @
6fd53686
...
...
@@ -80,12 +80,10 @@ class LSU extends NOOPModule {
is
(
s_partialLoad
)
{
state
:=
s_idle
}
}
dmem
.
req
.
bits
.
addr
:=
addr
dmem
.
req
.
bits
.
size
:=
func
(
1
,
0
)
val
size
=
func
(
1
,
0
)
dmem
.
req
.
bits
.
apply
(
addr
=
addr
,
size
=
size
,
wdata
=
genWdata
(
io
.
wdata
,
size
),
wmask
=
genWmask
(
addr
,
size
),
cmd
=
Mux
(
isStore
,
SimpleBusCmd
.
write
,
SimpleBusCmd
.
read
))
dmem
.
req
.
valid
:=
valid
&&
(
state
===
s_idle
)
&&
!
mmio
dmem
.
req
.
bits
.
cmd
:=
Mux
(
isStore
,
SimpleBusCmd
.
write
,
SimpleBusCmd
.
read
)
dmem
.
req
.
bits
.
wdata
:=
genWdata
(
io
.
wdata
,
func
(
1
,
0
))
dmem
.
req
.
bits
.
wmask
:=
genWmask
(
addr
,
func
(
1
,
0
))
dmem
.
resp
.
ready
:=
true
.
B
io
.
mmio
.
req
.
bits
:=
dmem
.
req
.
bits
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录