Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
cdd42b76
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 搜索 >>
未验证
提交
cdd42b76
编写于
7月 18, 2021
作者:
Y
Yinan Xu
提交者:
GitHub
7月 18, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
backend,rs: add isFirstIssue flags in status entries (#888)
上级
b37cea47
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
14 addition
and
2 deletion
+14
-2
src/main/scala/xiangshan/backend/issue/ReservationStation.scala
...in/scala/xiangshan/backend/issue/ReservationStation.scala
+3
-2
src/main/scala/xiangshan/backend/issue/StatusArray.scala
src/main/scala/xiangshan/backend/issue/StatusArray.scala
+11
-0
未找到文件。
src/main/scala/xiangshan/backend/issue/ReservationStation.scala
浏览文件 @
cdd42b76
...
...
@@ -202,6 +202,7 @@ class ReservationStation(implicit p: Parameters) extends LazyModule with HasXSPa
statusArray
.
io
.
update
(
i
).
data
.
srcType
:=
VecInit
(
io
.
fromDispatch
(
i
).
bits
.
ctrl
.
srcType
.
take
(
params
.
numSrc
))
statusArray
.
io
.
update
(
i
).
data
.
roqIdx
:=
io
.
fromDispatch
(
i
).
bits
.
roqIdx
statusArray
.
io
.
update
(
i
).
data
.
sqIdx
:=
io
.
fromDispatch
(
i
).
bits
.
sqIdx
statusArray
.
io
.
update
(
i
).
data
.
isFirstIssue
:=
true
.
B
payloadArray
.
io
.
write
(
i
).
enable
:=
doEnqueue
(
i
)
payloadArray
.
io
.
write
(
i
).
addr
:=
select
.
io
.
allocate
(
i
).
bits
payloadArray
.
io
.
write
(
i
).
data
:=
io
.
fromDispatch
(
i
).
bits
...
...
@@ -370,7 +371,7 @@ class ReservationStation(implicit p: Parameters) extends LazyModule with HasXSPa
val
pipeline_fire
=
s1_out
(
i
).
valid
&&
io
.
deq
(
i
).
ready
if
(
params
.
hasFeedback
)
{
io_feedback
.
get
.
rsIdx
:=
RegEnable
(
OHToUInt
(
select
.
io
.
grant
(
i
).
bits
),
pipeline_fire
)
io_feedback
.
get
.
isFirstIssue
:=
false
.
B
io_feedback
.
get
.
isFirstIssue
:=
RegEnable
(
statusArray
.
io
.
isFirstIssue
.
head
,
pipeline_fire
)
}
for
(
j
<-
0
until
params
.
numSrc
)
{
...
...
@@ -406,4 +407,4 @@ class ReservationStation(implicit p: Parameters) extends LazyModule with HasXSPa
connectFastWakeup
(
u
,
d
)
}
}
}
\ No newline at end of file
}
src/main/scala/xiangshan/backend/issue/StatusArray.scala
浏览文件 @
cdd42b76
...
...
@@ -49,6 +49,8 @@ class StatusEntry(params: RSParams)(implicit p: Parameters) extends XSBundle {
val
srcType
=
Vec
(
params
.
numSrc
,
SrcType
())
val
roqIdx
=
new
RoqPtr
val
sqIdx
=
new
SqPtr
// misc
val
isFirstIssue
=
Bool
()
override
def
cloneType
:
StatusEntry.this.
type
=
new
StatusEntry
(
params
).
asInstanceOf
[
this.
type
]
...
...
@@ -70,6 +72,8 @@ class StatusArray(params: RSParams)(implicit p: Parameters) extends XSModule
val
wakeup
=
Vec
(
params
.
allWakeup
,
Flipped
(
ValidIO
(
new
MicroOp
)))
val
wakeupMatch
=
Vec
(
params
.
numEntries
,
Vec
(
params
.
numSrc
,
Output
(
UInt
(
params
.
allWakeup
.
W
))))
val
issueGranted
=
Vec
(
params
.
numDeq
,
Flipped
(
ValidIO
(
UInt
(
params
.
numEntries
.
W
))))
// TODO: if more info is needed, put them in a bundle
val
isFirstIssue
=
Vec
(
params
.
numDeq
,
Output
(
Bool
()))
val
deqResp
=
Vec
(
params
.
numDeq
,
Flipped
(
ValidIO
(
new
Bundle
{
val
rsMask
=
UInt
(
params
.
numEntries
.
W
)
val
success
=
Bool
()
...
...
@@ -123,6 +127,7 @@ class StatusArray(params: RSParams)(implicit p: Parameters) extends XSModule
statusNext
.
srcType
:=
updateStatus
.
srcType
statusNext
.
roqIdx
:=
updateStatus
.
roqIdx
statusNext
.
sqIdx
:=
updateStatus
.
sqIdx
statusNext
.
isFirstIssue
:=
true
.
B
XSError
(
status
.
valid
,
p
"should not update a valid entry\n"
)
}.
otherwise
{
val
hasIssued
=
VecInit
(
io
.
issueGranted
.
map
(
iss
=>
iss
.
valid
&&
iss
.
bits
(
i
))).
asUInt
.
orR
...
...
@@ -150,6 +155,10 @@ class StatusArray(params: RSParams)(implicit p: Parameters) extends XSModule
statusNext
.
srcState
:=
VecInit
(
status
.
srcState
.
zip
(
wakeupEn
).
map
{
case
(
current
,
wakeup
)
=>
current
||
wakeup
})
// when the entry is not granted to leave the RS, set isFirstIssue to false.B
when
(
deqResp
&&
!
deqGrant
)
{
statusNext
.
isFirstIssue
:=
false
.
B
}
}
XSDebug
(
status
.
valid
,
p
"entry[$i]: $status\n"
)
...
...
@@ -157,4 +166,6 @@ class StatusArray(params: RSParams)(implicit p: Parameters) extends XSModule
io
.
isValid
:=
VecInit
(
statusArray
.
map
(
_
.
valid
)).
asUInt
io
.
canIssue
:=
VecInit
(
statusArray
.
map
(
_
.
valid
).
zip
(
readyVec
).
map
{
case
(
v
,
r
)
=>
v
&&
r
}).
asUInt
io
.
isFirstIssue
:=
VecInit
(
io
.
issueGranted
.
map
(
iss
=>
Mux1H
(
iss
.
bits
,
statusArray
.
map
(
_
.
isFirstIssue
))))
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录