Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
13ad8a8f
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 搜索 >>
提交
13ad8a8f
编写于
1月 27, 2021
作者:
D
Dan Tang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
roq: only update fflags when fmac,fmisc,i2f units write back
上级
b44dfbf5
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
28 addition
and
4 deletion
+28
-4
src/main/scala/xiangshan/backend/roq/Roq.scala
src/main/scala/xiangshan/backend/roq/Roq.scala
+28
-4
未找到文件。
src/main/scala/xiangshan/backend/roq/Roq.scala
浏览文件 @
13ad8a8f
...
...
@@ -57,7 +57,6 @@ class RoqDispatchData extends RoqCommitInfo {
}
class
RoqWbData
extends
XSBundle
{
val
fflags
=
UInt
(
5.
W
)
val
flushPipe
=
Bool
()
}
...
...
@@ -264,6 +263,7 @@ class Roq(numWbPorts: Int) extends XSModule with HasCircularQueuePtrHelper {
val
writebackDataRead
=
writebackData
.
io
.
rdata
val
exceptionDataRead
=
Wire
(
Vec
(
CommitWidth
,
ExceptionVec
()))
val
fflagsDataRead
=
Wire
(
Vec
(
CommitWidth
,
UInt
(
5.
W
)))
io
.
roqDeqPtr
:=
deqPtr
...
...
@@ -391,7 +391,7 @@ class Roq(numWbPorts: Int) extends XSModule with HasCircularQueuePtrHelper {
}).
unzip
val
fflags
=
Wire
(
Valid
(
UInt
(
5.
W
)))
fflags
.
valid
:=
Mux
(
io
.
commits
.
isWalk
,
false
.
B
,
Cat
(
wflags
).
orR
())
fflags
.
bits
:=
wflags
.
zip
(
writebackDataRead
.
map
(
_
.
fflags
)
).
map
({
fflags
.
bits
:=
wflags
.
zip
(
fflagsDataRead
).
map
({
case
(
w
,
f
)
=>
Mux
(
w
,
f
,
0.
U
)
}).
reduce
(
_
|
_
)
val
dirty_fs
=
Mux
(
io
.
commits
.
isWalk
,
false
.
B
,
Cat
(
fpWen
).
orR
())
...
...
@@ -425,7 +425,7 @@ class Roq(numWbPorts: Int) extends XSModule with HasCircularQueuePtrHelper {
io
.
commits
.
info
(
i
).
pdest
,
io
.
commits
.
info
(
i
).
old_pdest
,
debug_exuData
(
deqPtrVec
(
i
).
value
),
writebackDataRead
(
i
).
fflags
.
asUInt
fflagsDataRead
(
i
)
)
XSInfo
(
state
===
s_walk
&&
io
.
commits
.
valid
(
i
),
"walked pc %x wen %d ldst %d data %x\n"
,
debug_microOp
(
walkPtrVec
(
i
).
value
).
cf
.
pc
,
...
...
@@ -628,13 +628,13 @@ class Roq(numWbPorts: Int) extends XSModule with HasCircularQueuePtrHelper {
writebackData
.
io
.
wen
:=
io
.
exeWbResults
.
map
(
_
.
valid
)
writebackData
.
io
.
waddr
:=
io
.
exeWbResults
.
map
(
_
.
bits
.
uop
.
roqIdx
.
value
)
writebackData
.
io
.
wdata
.
zip
(
io
.
exeWbResults
.
map
(
_
.
bits
)).
map
{
case
(
wdata
,
wb
)
=>
wdata
.
fflags
:=
wb
.
fflags
wdata
.
flushPipe
:=
wb
.
uop
.
ctrl
.
flushPipe
}
writebackData
.
io
.
raddr
:=
commitReadAddr_next
for
(
i
<-
0
until
16
)
{
val
exceptionData
=
Module
(
new
SyncDataModuleTemplate
(
Bool
(),
RoqSize
,
CommitWidth
,
RenameWidth
+
writebackCount
(
i
)))
exceptionData
.
suggestName
(
"exceptionData"
)
var
wPortIdx
=
0
for
(
j
<-
0
until
RenameWidth
)
{
exceptionData
.
io
.
wen
(
wPortIdx
)
:=
canEnqueue
(
j
)
...
...
@@ -675,6 +675,30 @@ class Roq(numWbPorts: Int) extends XSModule with HasCircularQueuePtrHelper {
exceptionDataRead
.
zip
(
exceptionData
.
io
.
rdata
).
map
{
case
(
d
,
r
)
=>
d
(
i
)
:=
r
}
}
val
fflagsDataModule
=
Module
(
new
SyncDataModuleTemplate
(
UInt
(
5.
W
),
RoqSize
,
CommitWidth
,
7
))
var
wPortIdx
=
0
// 4 FMACs
for
(
i
<-
0
until
4
)
{
fflagsDataModule
.
io
.
wen
(
wPortIdx
)
:=
io
.
exeWbResults
(
8
+
i
).
valid
fflagsDataModule
.
io
.
waddr
(
wPortIdx
)
:=
io
.
exeWbResults
(
8
+
i
).
bits
.
uop
.
roqIdx
.
value
fflagsDataModule
.
io
.
wdata
(
wPortIdx
)
:=
io
.
exeWbResults
(
8
+
i
).
bits
.
fflags
wPortIdx
=
wPortIdx
+
1
}
// 2 FMISCs (the first one includes I2F from JumpUnit)
for
(
i
<-
0
until
2
)
{
fflagsDataModule
.
io
.
wen
(
wPortIdx
)
:=
io
.
exeWbResults
(
14
+
i
).
valid
fflagsDataModule
.
io
.
waddr
(
wPortIdx
)
:=
io
.
exeWbResults
(
14
+
i
).
bits
.
uop
.
roqIdx
.
value
fflagsDataModule
.
io
.
wdata
(
wPortIdx
)
:=
io
.
exeWbResults
(
14
+
i
).
bits
.
fflags
wPortIdx
=
wPortIdx
+
1
}
// 1 FMISC (Int Wb)
fflagsDataModule
.
io
.
wen
(
wPortIdx
)
:=
io
.
exeWbResults
(
7
).
valid
fflagsDataModule
.
io
.
waddr
(
wPortIdx
)
:=
io
.
exeWbResults
(
7
).
bits
.
uop
.
roqIdx
.
value
fflagsDataModule
.
io
.
wdata
(
wPortIdx
)
:=
io
.
exeWbResults
(
7
).
bits
.
fflags
fflagsDataModule
.
io
.
raddr
:=
VecInit
(
deqPtrVec_next
.
map
(
_
.
value
))
fflagsDataRead
:=
fflagsDataModule
.
io
.
rdata
/**
* debug info
*/
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录