Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
b536da76
X
XiangShan
项目概览
OpenXiangShan
/
XiangShan
9 个月 前同步成功
通知
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 搜索 >>
提交
b536da76
编写于
6月 04, 2023
作者:
X
Xuan Hu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
backend,mem: fix feedback signals of load
上级
e450f9ec
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
20 addition
and
4 deletion
+20
-4
src/main/scala/xiangshan/Bundle.scala
src/main/scala/xiangshan/Bundle.scala
+1
-1
src/main/scala/xiangshan/backend/issue/IssueQueue.scala
src/main/scala/xiangshan/backend/issue/IssueQueue.scala
+1
-1
src/main/scala/xiangshan/backend/issue/StatusArray.scala
src/main/scala/xiangshan/backend/issue/StatusArray.scala
+8
-2
src/main/scala/xiangshan/mem/pipeline/LoadUnit.scala
src/main/scala/xiangshan/mem/pipeline/LoadUnit.scala
+10
-0
未找到文件。
src/main/scala/xiangshan/Bundle.scala
浏览文件 @
b536da76
...
...
@@ -83,7 +83,7 @@ object RSFeedbackType {
}
def
isBlocked
(
feedbackType
:
UInt
)
=
{
feedbackType
===
rfArbitFail
||
feedbackType
===
fuBusy
||
feedbackType
==
=
feedbackInvalid
feedbackType
===
rfArbitFail
||
feedbackType
===
fuBusy
||
feedbackType
>=
lrqFull
&&
feedbackType
<
=
feedbackInvalid
}
}
...
...
src/main/scala/xiangshan/backend/issue/IssueQueue.scala
浏览文件 @
b536da76
...
...
@@ -520,7 +520,7 @@ class IssueQueueMemAddrImp(override val wrapper: IssueQueue)(implicit p: Paramet
statusArray
.
io
.
fromMem
.
get
.
fastResp
.
zipWithIndex
.
foreach
{
case
(
fastResp
,
i
)
=>
fastResp
.
valid
:=
memIO
.
feedbackIO
(
i
).
feedbackFast
.
valid
fastResp
.
bits
.
addrOH
:=
UIntToOH
(
memIO
.
feedbackIO
(
i
).
feedbackFast
.
bits
.
rsIdx
)
fastResp
.
bits
.
success
:=
false
.
B
fastResp
.
bits
.
success
:=
memIO
.
feedbackIO
(
i
).
feedbackFast
.
bits
.
hit
fastResp
.
bits
.
respType
:=
memIO
.
feedbackIO
(
i
).
feedbackFast
.
bits
.
sourceType
fastResp
.
bits
.
dataInvalidSqIdx
:=
0.
U
.
asTypeOf
(
fastResp
.
bits
.
dataInvalidSqIdx
)
}
...
...
src/main/scala/xiangshan/backend/issue/StatusArray.scala
浏览文件 @
b536da76
...
...
@@ -202,9 +202,15 @@ class StatusArray()(implicit p: Parameters, params: IssueBlockParams) extends XS
class
StatusArrayMem
()(
implicit
p
:
Parameters
,
params
:
IssueBlockParams
)
extends
StatusArray
with
HasCircularQueuePtrHelper
{
private
val
needMemFeedback
=
params
.
StaCnt
>
0
||
params
.
LduCnt
>
0
val
fromMem
=
io
.
fromMem
.
get
val
memResps
=
resps
++
io
.
fromMem
.
get
.
slowResp
++
io
.
fromMem
.
get
.
fastResp
var
memResps
=
resps
if
(
needMemFeedback
)
{
memResps
++=
io
.
fromMem
.
get
.
slowResp
memResps
++=
io
.
fromMem
.
get
.
fastResp
}
deqRespVec
.
zipWithIndex
.
foreach
{
case
(
deqResp
,
i
)
=>
val
deqRespValidVec
=
VecInit
(
memResps
.
map
(
x
=>
x
.
valid
&&
x
.
bits
.
addrOH
(
i
)))
XSError
(
PopCount
(
deqRespValidVec
)
>
1.
U
,
p
"mem status deq resp ${Binary(deqRespValidVec.asUInt)} should be one-hot)\n"
)
...
...
@@ -216,7 +222,7 @@ class StatusArrayMem()(implicit p: Parameters, params: IssueBlockParams) extends
val
clearByFlush
=
(
enqStatusVec
(
i
).
valid
||
validVec
(
i
))
&&
flushedVec
(
i
)
val
clearByResp
=
deqRespVec
(
i
).
valid
&&
(
//do: special mem success
if
(
params
.
StaCnt
==
0
)
{
if
(
!
needMemFeedback
)
{
deqRespVec
(
i
).
bits
.
respType
===
RSFeedbackType
.
fuIdle
}
else
{
...
...
src/main/scala/xiangshan/mem/pipeline/LoadUnit.scala
浏览文件 @
b536da76
...
...
@@ -117,6 +117,7 @@ class LoadUnit_S0(implicit p: Parameters) extends XSModule with HasDCacheParamet
val
s0_mask
=
Wire
(
UInt
(
8.
W
))
val
s0_uop
=
Wire
(
new
DynInst
)
val
s0_isFirstIssue
=
Wire
(
Bool
())
val
s0_rsIdx
=
Wire
(
UInt
(
log2Up
(
MemIQSizeMax
).
W
))
val
s0_sqIdx
=
Wire
(
new
SqPtr
)
val
s0_tryFastpath
=
WireInit
(
false
.
B
)
val
s0_replayCarry
=
Wire
(
new
ReplayCarry
)
// way info for way predict related logic
...
...
@@ -255,6 +256,7 @@ class LoadUnit_S0(implicit p: Parameters) extends XSModule with HasDCacheParamet
s0_mask
:=
genWmask
(
io
.
replay
.
bits
.
vaddr
,
io
.
replay
.
bits
.
uop
.
fuOpType
(
1
,
0
))
s0_uop
:=
io
.
replay
.
bits
.
uop
s0_isFirstIssue
:=
io
.
replay
.
bits
.
isFirstIssue
s0_rsIdx
:=
io
.
replay
.
bits
.
rsIdx
s0_sqIdx
:=
io
.
replay
.
bits
.
uop
.
sqIdx
s0_replayCarry
:=
io
.
replay
.
bits
.
replayCarry
val
replayUopIsPrefetch
=
WireInit
(
LSUOpType
.
isPrefetch
(
io
.
replay
.
bits
.
uop
.
fuOpType
))
...
...
@@ -267,6 +269,7 @@ class LoadUnit_S0(implicit p: Parameters) extends XSModule with HasDCacheParamet
s0_mask
:=
0.
U
s0_uop
:=
DontCare
s0_isFirstIssue
:=
false
.
B
s0_rsIdx
:=
DontCare
s0_sqIdx
:=
DontCare
s0_replayCarry
:=
DontCare
// ctrl signal
...
...
@@ -279,6 +282,7 @@ class LoadUnit_S0(implicit p: Parameters) extends XSModule with HasDCacheParamet
s0_mask
:=
genWmask
(
s0_vaddr
,
io
.
in
.
bits
.
uop
.
fuOpType
(
1
,
0
))
s0_uop
:=
io
.
in
.
bits
.
uop
s0_isFirstIssue
:=
true
.
B
s0_rsIdx
:=
io
.
in
.
bits
.
iqIdx
s0_sqIdx
:=
io
.
in
.
bits
.
uop
.
sqIdx
val
issueUopIsPrefetch
=
WireInit
(
LSUOpType
.
isPrefetch
(
io
.
in
.
bits
.
uop
.
fuOpType
))
when
(
issueUopIsPrefetch
)
{
...
...
@@ -295,6 +299,7 @@ class LoadUnit_S0(implicit p: Parameters) extends XSModule with HasDCacheParamet
// we dont care s0_isFirstIssue and s0_rsIdx and s0_sqIdx in S0 when trying pointchasing
// because these signals will be updated in S1
s0_isFirstIssue
:=
true
.
B
s0_rsIdx
:=
DontCare
s0_sqIdx
:=
DontCare
}
}
...
...
@@ -316,6 +321,7 @@ class LoadUnit_S0(implicit p: Parameters) extends XSModule with HasDCacheParamet
io
.
out
.
bits
.
mask
:=
s0_mask
io
.
out
.
bits
.
uop
:=
s0_uop
io
.
out
.
bits
.
uop
.
exceptionVec
(
loadAddrMisaligned
)
:=
!
addrAligned
io
.
out
.
bits
.
rsIdx
:=
s0_rsIdx
io
.
out
.
bits
.
isFirstIssue
:=
s0_isFirstIssue
io
.
out
.
bits
.
isPrefetch
:=
isPrefetch
io
.
out
.
bits
.
isHWPrefetch
:=
isHWPrefetch
...
...
@@ -847,6 +853,10 @@ class LoadUnit(implicit p: Parameters) extends XSModule
val
load_s1
=
Module
(
new
LoadUnit_S1
)
val
load_s2
=
Module
(
new
LoadUnit_S2
)
dontTouch
(
load_s0
.
io
)
dontTouch
(
load_s1
.
io
)
dontTouch
(
load_s2
.
io
)
// load s0
load_s0
.
io
.
in
<>
io
.
loadIn
load_s0
.
io
.
dtlbReq
<>
io
.
tlb
.
req
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录