Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
09348ee5
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 搜索 >>
未验证
提交
09348ee5
编写于
3月 04, 2021
作者:
L
ljw
提交者:
GitHub
3月 04, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Ftq: save 'hist' and br_mask in regs (#629)
* Ftq: save 'hist' in regs * Ftq: save 'br_mask' in regs
上级
95b90209
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
15 addition
and
12 deletion
+15
-12
src/main/scala/xiangshan/backend/CtrlBlock.scala
src/main/scala/xiangshan/backend/CtrlBlock.scala
+7
-4
src/main/scala/xiangshan/backend/ftq/Ftq.scala
src/main/scala/xiangshan/backend/ftq/Ftq.scala
+8
-8
未找到文件。
src/main/scala/xiangshan/backend/CtrlBlock.scala
浏览文件 @
09348ee5
...
...
@@ -170,6 +170,11 @@ class RedirectGenerator extends XSModule with HasCircularQueuePtrHelper with Wai
io
.
stage2FtqRead
.
ptr
:=
s1_redirect_bits_reg
.
ftqIdx
val
s2_br_mask
=
RegEnable
(
ftqRead
.
br_mask
,
enable
=
s1_redirect_valid_reg
)
val
s2_sawNotTakenBranch
=
RegEnable
(
VecInit
((
0
until
PredictWidth
).
map
{
i
=>
if
(
i
==
0
)
false
.
B
else
Cat
(
ftqRead
.
br_mask
.
take
(
i
)).
orR
()
})(
s1_redirect_bits_reg
.
ftqOffset
),
enable
=
s1_redirect_valid_reg
)
val
s2_hist
=
RegEnable
(
ftqRead
.
hist
,
enable
=
s1_redirect_valid_reg
)
val
s2_target
=
RegEnable
(
target
,
enable
=
s1_redirect_valid_reg
)
val
s2_pd
=
RegEnable
(
s1_pd
,
enable
=
s1_redirect_valid_reg
)
val
s2_cfiUpdata_pc
=
RegEnable
(
cfiUpdate_pc
,
enable
=
s1_redirect_valid_reg
)
...
...
@@ -186,11 +191,9 @@ class RedirectGenerator extends XSModule with HasCircularQueuePtrHelper with Wai
stage3CfiUpdate
.
rasEntry
:=
s2_ftqRead
.
rasTop
stage3CfiUpdate
.
predHist
:=
s2_ftqRead
.
predHist
stage3CfiUpdate
.
specCnt
:=
s2_ftqRead
.
specCnt
stage3CfiUpdate
.
hist
:=
s2_
ftqRead
.
hist
stage3CfiUpdate
.
hist
:=
s2_hist
stage3CfiUpdate
.
predTaken
:=
s2_redirect_bits_reg
.
cfiUpdate
.
predTaken
stage3CfiUpdate
.
sawNotTakenBranch
:=
VecInit
((
0
until
PredictWidth
).
map
{
i
=>
if
(
i
==
0
)
false
.
B
else
Cat
(
s2_ftqRead
.
br_mask
.
take
(
i
)).
orR
()
})(
s2_redirect_bits_reg
.
ftqOffset
)
stage3CfiUpdate
.
sawNotTakenBranch
:=
s2_sawNotTakenBranch
stage3CfiUpdate
.
target
:=
s2_target
stage3CfiUpdate
.
taken
:=
s2_redirect_bits_reg
.
cfiUpdate
.
taken
stage3CfiUpdate
.
isMisPred
:=
s2_redirect_bits_reg
.
cfiUpdate
.
isMisPred
...
...
src/main/scala/xiangshan/backend/ftq/Ftq.scala
浏览文件 @
09348ee5
...
...
@@ -62,16 +62,16 @@ class FtqNRSRAM[T <: Data](gen: T, numRead: Int) extends XSModule {
class
Ftq_4R_SRAMEntry
extends
XSBundle
{
val
ftqPC
=
UInt
(
VAddrBits
.
W
)
val
lastPacketPC
=
ValidUndirectioned
(
UInt
(
VAddrBits
.
W
))
val
hist
=
new
GlobalHistory
val
br_mask
=
Vec
(
PredictWidth
,
Bool
())
}
// redirect and commit need read these infos
class
Ftq_2R_SRAMEntry
extends
XSBundle
{
val
rasSp
=
UInt
(
log2Ceil
(
RasSize
).
W
)
val
rasEntry
=
new
RASEntry
val
hist
=
new
GlobalHistory
val
predHist
=
new
GlobalHistory
val
specCnt
=
Vec
(
PredictWidth
,
UInt
(
10.
W
))
val
br_mask
=
Vec
(
PredictWidth
,
Bool
())
}
class
Ftq_1R_Commit_SRAMEntry
extends
XSBundle
{
...
...
@@ -127,15 +127,15 @@ class Ftq extends XSModule with HasCircularQueuePtrHelper {
ftq_pc_mem
.
io
.
waddr
(
0
)
:=
tailPtr
.
value
ftq_pc_mem
.
io
.
wdata
(
0
).
ftqPC
:=
io
.
enq
.
bits
.
ftqPC
ftq_pc_mem
.
io
.
wdata
(
0
).
lastPacketPC
:=
io
.
enq
.
bits
.
lastPacketPC
ftq_pc_mem
.
io
.
wdata
(
0
).
hist
:=
io
.
enq
.
bits
.
hist
ftq_pc_mem
.
io
.
wdata
(
0
).
br_mask
:=
io
.
enq
.
bits
.
br_mask
val
ftq_2r_sram
=
Module
(
new
FtqNRSRAM
(
new
Ftq_2R_SRAMEntry
,
2
))
ftq_2r_sram
.
io
.
wen
:=
real_fire
ftq_2r_sram
.
io
.
waddr
:=
tailPtr
.
value
ftq_2r_sram
.
io
.
wdata
.
rasSp
:=
io
.
enq
.
bits
.
rasSp
ftq_2r_sram
.
io
.
wdata
.
rasEntry
:=
io
.
enq
.
bits
.
rasTop
ftq_2r_sram
.
io
.
wdata
.
hist
:=
io
.
enq
.
bits
.
hist
ftq_2r_sram
.
io
.
wdata
.
predHist
:=
io
.
enq
.
bits
.
predHist
ftq_2r_sram
.
io
.
wdata
.
specCnt
:=
io
.
enq
.
bits
.
specCnt
ftq_2r_sram
.
io
.
wdata
.
br_mask
:=
io
.
enq
.
bits
.
br_mask
val
pred_target_sram
=
Module
(
new
FtqNRSRAM
(
UInt
(
VAddrBits
.
W
),
1
))
pred_target_sram
.
io
.
wen
:=
real_fire
pred_target_sram
.
io
.
waddr
:=
tailPtr
.
value
...
...
@@ -229,13 +229,13 @@ class Ftq extends XSModule with HasCircularQueuePtrHelper {
// from 4r sram
commitEntry
.
ftqPC
:=
RegNext
(
ftq_pc_mem
.
io
.
rdata
(
0
).
ftqPC
)
commitEntry
.
lastPacketPC
:=
RegNext
(
ftq_pc_mem
.
io
.
rdata
(
0
).
lastPacketPC
)
commitEntry
.
hist
:=
RegNext
(
ftq_pc_mem
.
io
.
rdata
(
0
).
hist
)
commitEntry
.
br_mask
:=
RegNext
(
ftq_pc_mem
.
io
.
rdata
(
0
).
br_mask
)
// from 2r sram
commitEntry
.
rasSp
:=
RegNext
(
ftq_2r_sram
.
io
.
rdata
(
0
).
rasSp
)
commitEntry
.
rasTop
:=
RegNext
(
ftq_2r_sram
.
io
.
rdata
(
0
).
rasEntry
)
commitEntry
.
hist
:=
RegNext
(
ftq_2r_sram
.
io
.
rdata
(
0
).
hist
)
commitEntry
.
predHist
:=
RegNext
(
ftq_2r_sram
.
io
.
rdata
(
0
).
predHist
)
commitEntry
.
specCnt
:=
RegNext
(
ftq_2r_sram
.
io
.
rdata
(
0
).
specCnt
)
commitEntry
.
br_mask
:=
RegNext
(
ftq_2r_sram
.
io
.
rdata
(
0
).
br_mask
)
// from 1r sram
commitEntry
.
metas
:=
RegNext
(
ftq_1r_sram
.
io
.
rdata
(
0
).
metas
)
commitEntry
.
rvc_mask
:=
RegNext
(
ftq_1r_sram
.
io
.
rdata
(
0
).
rvc_mask
)
...
...
@@ -258,6 +258,8 @@ class Ftq extends XSModule with HasCircularQueuePtrHelper {
ftq_pc_mem
.
io
.
raddr
(
1
+
i
)
:=
req
.
ptr
.
value
req
.
entry
.
ftqPC
:=
ftq_pc_mem
.
io
.
rdata
(
1
+
i
).
ftqPC
req
.
entry
.
lastPacketPC
:=
ftq_pc_mem
.
io
.
rdata
(
1
+
i
).
lastPacketPC
req
.
entry
.
hist
:=
ftq_pc_mem
.
io
.
rdata
(
1
+
i
).
hist
req
.
entry
.
br_mask
:=
ftq_pc_mem
.
io
.
rdata
(
1
+
i
).
br_mask
if
(
i
==
0
){
// jump, read npc
pred_target_sram
.
io
.
raddr
(
0
)
:=
req
.
ptr
.
value
pred_target_sram
.
io
.
ren
(
0
)
:=
true
.
B
...
...
@@ -269,10 +271,8 @@ class Ftq extends XSModule with HasCircularQueuePtrHelper {
io
.
cfiRead
.
entry
:=
DontCare
io
.
cfiRead
.
entry
.
rasTop
:=
ftq_2r_sram
.
io
.
rdata
(
1
).
rasEntry
io
.
cfiRead
.
entry
.
rasSp
:=
ftq_2r_sram
.
io
.
rdata
(
1
).
rasSp
io
.
cfiRead
.
entry
.
hist
:=
ftq_2r_sram
.
io
.
rdata
(
1
).
hist
io
.
cfiRead
.
entry
.
predHist
:=
ftq_2r_sram
.
io
.
rdata
(
1
).
predHist
io
.
cfiRead
.
entry
.
specCnt
:=
ftq_2r_sram
.
io
.
rdata
(
1
).
specCnt
io
.
cfiRead
.
entry
.
br_mask
:=
ftq_2r_sram
.
io
.
rdata
(
1
).
br_mask
// redirect, reset ptr
when
(
io
.
flush
||
io
.
redirect
.
valid
){
val
idx
=
Mux
(
io
.
flush
,
io
.
flushIdx
,
io
.
redirect
.
bits
.
ftqIdx
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录