Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
956965db
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 搜索 >>
提交
956965db
编写于
8月 16, 2020
作者:
L
linjiawei
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Move dcache,uncache from memend to xscore
上级
6e26e670
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
62 addition
and
31 deletion
+62
-31
src/main/scala/xiangshan/XSCore.scala
src/main/scala/xiangshan/XSCore.scala
+10
-5
src/main/scala/xiangshan/mem/Memend.scala
src/main/scala/xiangshan/mem/Memend.scala
+52
-26
未找到文件。
src/main/scala/xiangshan/XSCore.scala
浏览文件 @
956965db
...
...
@@ -10,7 +10,7 @@ import xiangshan.backend.dispatch.DispatchParameters
import
xiangshan.backend.exu.ExuParameters
import
xiangshan.frontend._
import
xiangshan.mem._
import
xiangshan.cache.
{
DCache
Parameters
,
ICacheParameters
}
import
xiangshan.cache.
{
DCache
,
DCacheParameters
,
ICacheParameters
,
Uncache
}
import
bus.tilelink.
{
TLArbiter
,
TLCached
,
TLMasterUtilities
,
TLParameters
}
import
utils._
...
...
@@ -239,16 +239,21 @@ class XSCore extends XSModule {
// val fakecache = Module(new TLReqProducer)
// io.mem <> fakecache.io
io
.
mmio
<>
DontCare
val
front
=
Module
(
new
Frontend
)
val
backend
=
Module
(
new
Backend
)
val
mem
=
Module
(
new
Memend
)
val
dcache
=
Module
(
new
DCache
)
val
uncache
=
Module
(
new
Uncache
)
front
.
io
.
backend
<>
backend
.
io
.
frontend
mem
.
io
.
backend
<>
backend
.
io
.
mem
mem
.
io
.
mem
<>
io
.
mem
mem
.
io
.
mmio
<>
io
.
mmio
dcache
.
io
.
lsu
.
load
<>
mem
.
io
.
loadUnitToDcacheVec
dcache
.
io
.
lsu
.
lsroq
<>
mem
.
io
.
miscToDcache
dcache
.
io
.
lsu
.
store
<>
mem
.
io
.
sbufferToDcache
uncache
.
io
.
lsroq
<>
mem
.
io
.
uncache
io
.
mmio
<>
uncache
.
io
.
bus
io
.
mem
<>
dcache
.
io
.
bus
backend
.
io
.
memMMU
.
imem
<>
DontCare
backend
.
io
.
memMMU
.
dmem
<>
DontCare
...
...
src/main/scala/xiangshan/mem/Memend.scala
浏览文件 @
956965db
...
...
@@ -113,24 +113,39 @@ class MemToBackendIO extends XSBundle {
class
Memend
extends
XSModule
{
val
io
=
IO
(
new
Bundle
{
val
backend
=
new
MemToBackendIO
val
mem
=
new
TLCached
(
l1BusParams
)
val
mmio
=
new
TLCached
(
l1BusParams
)
val
loadUnitToDcacheVec
=
Vec
(
exuParameters
.
LduCnt
,
new
DCacheLoadIO
)
val
miscToDcache
=
new
DCacheLoadIO
val
sbufferToDcache
=
new
DCacheStoreIO
val
uncache
=
new
UncacheIO
})
val
loadUnits
=
(
0
until
exuParameters
.
LduCnt
).
map
(
_
=>
Module
(
new
LoadUnit
))
val
storeUnits
=
(
0
until
exuParameters
.
StuCnt
).
map
(
_
=>
Module
(
new
StoreUnit
))
val
miscUnit
=
Module
(
new
MiscUnit
)
val
dcache
=
Module
(
new
DCache
)
val
uncache
=
Module
(
new
Uncache
)
// val mshq = Module(new MSHQ)
val
dtlb
=
Module
(
new
Dtlb
)
val
dtlb
=
Module
(
new
Dtlb
)
//TODO: move dtlb out
val
lsroq
=
Module
(
new
Lsroq
)
val
sbuffer
=
Module
(
new
FakeSbuffer
)
dtlb
.
io
:=
DontCare
dcache
.
io
.
bus
<>
io
.
mem
uncache
.
io
.
bus
<>
io
.
mmio
val
loadUnitToDcacheVec
=
Wire
(
Vec
(
exuParameters
.
LduCnt
,
new
DCacheLoadIO
))
val
sbufferToDcache
=
Wire
(
new
DCacheStoreIO
)
val
lsroqToUncache
=
Wire
(
new
DCacheLoadIO
)
// lsroq and miscUnit share one dcache port
val
lsroqToDcache
=
Wire
(
new
DCacheLoadIO
)
val
miscUnitToDcache
=
Wire
(
new
DCacheLoadIO
)
// misc + miss --> arbiter --> miscToDcache
val
miscToDcache
=
Wire
(
new
DCacheLoadIO
)
// connect dcache ports
io
.
loadUnitToDcacheVec
<>
loadUnitToDcacheVec
io
.
miscToDcache
<>
miscToDcache
io
.
sbufferToDcache
<>
sbufferToDcache
io
.
uncache
<>
lsroqToUncache
// LoadUnit
for
(
i
<-
0
until
exuParameters
.
LduCnt
)
{
...
...
@@ -138,15 +153,15 @@ class Memend extends XSModule {
loadUnits
(
i
).
io
.
ldout
<>
io
.
backend
.
ldout
(
i
)
loadUnits
(
i
).
io
.
redirect
<>
io
.
backend
.
redirect
loadUnits
(
i
).
io
.
tlbFeedback
<>
io
.
backend
.
tlbFeedback
(
i
)
loadUnits
(
i
).
io
.
dcache
<>
dcache
.
io
.
lsu
.
load
(
i
)
loadUnits
(
i
).
io
.
dcache
<>
loadUnitToDcacheVec
(
i
)
loadUnits
(
i
).
io
.
dtlb
<>
dtlb
.
io
.
lsu
(
i
)
loadUnits
(
i
).
io
.
sbuffer
<>
sbuffer
.
io
.
forward
(
i
)
lsroq
.
io
.
loadIn
(
i
)
<>
loadUnits
(
i
).
io
.
lsroq
.
loadIn
lsroq
.
io
.
ldout
(
i
)
<>
loadUnits
(
i
).
io
.
lsroq
.
ldout
lsroq
.
io
.
forward
(
i
)
<>
loadUnits
(
i
).
io
.
lsroq
.
forward
}
// StoreUnit
for
(
i
<-
0
until
exuParameters
.
StuCnt
)
{
storeUnits
(
i
).
io
.
stin
<>
io
.
backend
.
stin
(
i
)
...
...
@@ -156,7 +171,7 @@ class Memend extends XSModule {
storeUnits
(
i
).
io
.
lsroq
<>
lsroq
.
io
.
storeIn
(
i
)
}
sbuffer
.
io
.
dcache
<>
dcache
.
io
.
lsu
.
stor
e
sbuffer
.
io
.
dcache
<>
sbufferToDcach
e
lsroq
.
io
.
stout
<>
io
.
backend
.
stout
lsroq
.
io
.
commits
<>
io
.
backend
.
commits
...
...
@@ -164,28 +179,39 @@ class Memend extends XSModule {
lsroq
.
io
.
lsroqIdxs
<>
io
.
backend
.
lsroqIdxs
lsroq
.
io
.
brqRedirect
:=
io
.
backend
.
redirect
io
.
backend
.
replayAll
<>
lsroq
.
io
.
rollback
lsroq
.
io
.
dcache
<>
dcache
.
io
.
lsu
.
lsroq
// TODO: Add AMO
lsroq
.
io
.
uncache
<>
uncache
.
io
.
lsroq
lsroq
.
io
.
dcache
<>
lsroqToDcache
// TODO: Add AMO
lsroq
.
io
.
uncache
<>
lsroqToUncache
// LSROQ to store buffer
lsroq
.
io
.
sbuffer
<>
sbuffer
.
io
.
in
// MiscUnit
// MiscUnit will override other control signials,
// as misc insts (LR/SC/AMO) will block the pipeline
// as misc insts (LR/SC/AMO) will block the pipeline
miscUnit
.
io
<>
DontCare
miscUnit
.
io
.
in
.
bits
:=
Mux
(
io
.
backend
.
ldin
(
0
).
valid
,
io
.
backend
.
ldin
(
0
).
bits
,
io
.
backend
.
ldin
(
1
).
bits
)
miscUnit
.
io
.
in
.
valid
:=
io
.
backend
.
ldin
(
0
).
valid
&&
io
.
backend
.
ldin
(
0
).
bits
.
uop
.
ctrl
.
fuType
===
FuType
.
mou
||
miscUnit
.
io
.
in
.
bits
:=
Mux
(
io
.
backend
.
ldin
(
0
).
valid
,
io
.
backend
.
ldin
(
0
).
bits
,
io
.
backend
.
ldin
(
1
).
bits
)
miscUnit
.
io
.
in
.
valid
:=
io
.
backend
.
ldin
(
0
).
valid
&&
io
.
backend
.
ldin
(
0
).
bits
.
uop
.
ctrl
.
fuType
===
FuType
.
mou
||
io
.
backend
.
ldin
(
1
).
valid
&&
io
.
backend
.
ldin
(
1
).
bits
.
uop
.
ctrl
.
fuType
===
FuType
.
mou
when
(
miscUnit
.
io
.
dtlb
.
req
.
valid
){
dtlb
.
io
.
lsu
(
0
)
<>
miscUnit
.
io
.
dtlb
}
when
(
miscUnit
.
io
.
dcache
.
req
.
valid
){
dcache
.
io
.
lsu
.
lsroq
.
req
<>
miscUnit
.
io
.
dcache
.
req
}
when
(
dcache
.
io
.
lsu
.
lsroq
.
resp
.
valid
&&
dcache
.
io
.
lsu
.
lsroq
.
resp
.
bits
.
meta
.
id
(
1
,
0
)
===
DCacheMiscType
.
misc
){
dcache
.
io
.
lsu
.
lsroq
.
resp
<>
miscUnit
.
io
.
dcache
.
resp
dtlb
.
io
.
lsu
(
0
)
<>
miscUnit
.
io
.
dtlb
}
miscUnit
.
io
.
dcache
<>
miscUnitToDcache
assert
(!(
lsroqToDcache
.
req
.
valid
&&
miscUnitToDcache
.
req
.
valid
))
val
memReqArb
=
new
Arbiter
(
miscToDcache
.
req
,
2
)
memReqArb
.
io
.
in
(
0
)
:=
lsroqToDcache
.
req
memReqArb
.
io
.
in
(
1
)
:=
miscUnitToDcache
.
req
miscToDcache
.
req
<>
memReqArb
.
io
.
out
lsroqToDcache
.
resp
<>
miscToDcache
.
resp
miscUnitToDcache
.
resp
<>
miscToDcache
.
resp
// override resp's valid bit
lsroqToDcache
.
resp
.
valid
:=
miscToDcache
.
resp
.
valid
&&
miscToDcache
.
resp
.
bits
.
meta
.
id
(
1
,
0
)===
DCacheMiscType
.
miss
miscUnitToDcache
.
resp
.
valid
:=
miscToDcache
.
resp
.
valid
&&
miscToDcache
.
resp
.
bits
.
meta
.
id
(
1
,
0
)===
DCacheMiscType
.
misc
when
(
miscUnit
.
io
.
out
.
valid
){
io
.
backend
.
ldout
(
0
)
<>
miscUnit
.
io
.
out
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录