Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
a788562d
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 搜索 >>
未验证
提交
a788562d
编写于
2月 28, 2022
作者:
S
Steve Gou
提交者:
GitHub
2月 28, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ftb: update replacer state when update request is sent from ftq (#1479)
上级
6ee06c7a
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
29 addition
and
3 deletion
+29
-3
src/main/scala/xiangshan/frontend/FTB.scala
src/main/scala/xiangshan/frontend/FTB.scala
+29
-3
未找到文件。
src/main/scala/xiangshan/frontend/FTB.scala
浏览文件 @
a788562d
...
...
@@ -295,6 +295,9 @@ class FTB(implicit p: Parameters) extends BasePredictor with FTBParams with BPUU
val
update_write_data
=
Flipped
(
Valid
(
new
FTBEntryWithTag
))
val
update_write_way
=
Input
(
UInt
(
log2Ceil
(
numWays
).
W
))
val
update_write_alloc
=
Input
(
Bool
())
val
try_to_write_way
=
Flipped
(
Valid
(
UInt
(
log2Ceil
(
numWays
).
W
)))
val
try_to_write_pc
=
Input
(
UInt
(
VAddrBits
.
W
))
})
// Extract holdRead logic to fix bug that update read override predict read result
...
...
@@ -342,10 +345,20 @@ class FTB(implicit p: Parameters) extends BasePredictor with FTBParams with BPUU
val
touch_set
=
Seq
.
fill
(
1
)(
Wire
(
UInt
(
log2Ceil
(
numSets
).
W
)))
val
touch_way
=
Seq
.
fill
(
1
)(
Wire
(
Valid
(
UInt
(
log2Ceil
(
numWays
).
W
))))
touch_set
(
0
)
:=
req_idx
val
write_set
=
Wire
(
UInt
(
log2Ceil
(
numSets
).
W
))
val
write_way
=
Wire
(
Valid
(
UInt
(
log2Ceil
(
numWays
).
W
)))
val
read_set
=
Wire
(
UInt
(
log2Ceil
(
numSets
).
W
))
val
read_way
=
Wire
(
Valid
(
UInt
(
log2Ceil
(
numWays
).
W
)))
read_set
:=
req_idx
read_way
.
valid
:=
hit
read_way
.
bits
:=
hit_way
touch_set
(
0
)
:=
Mux
(
write_way
.
valid
,
write_set
,
read_set
)
touch_way
(
0
).
valid
:=
hit
touch_way
(
0
).
bits
:=
hit_way
touch_way
(
0
).
valid
:=
write_way
.
valid
||
read_way
.
valid
touch_way
(
0
).
bits
:=
Mux
(
write_way
.
valid
,
write_way
.
bits
,
read_way
.
bits
)
replacer
.
access
(
touch_set
,
touch_way
)
...
...
@@ -411,6 +424,14 @@ class FTB(implicit p: Parameters) extends BasePredictor with FTBParams with BPUU
ftb
.
io
.
w
.
apply
(
u_valid
,
u_data
,
u_idx
,
u_mask
)
// for replacer
write_set
:=
Mux
(
u_valid
,
u_idx
,
ftbAddr
.
getIdx
(
io
.
try_to_write_pc
))
write_way
.
valid
:=
u_valid
||
io
.
try_to_write_way
.
valid
write_way
.
bits
:=
Mux
(
u_valid
,
Mux
(
io
.
update_write_alloc
,
allocWriteWay
,
io
.
update_write_way
),
io
.
try_to_write_way
.
bits
)
// print hit entry info
Mux1H
(
total_hits
,
ftb
.
io
.
r
.
resp
.
data
).
display
(
true
.
B
)
}
// FTBBank
...
...
@@ -502,6 +523,11 @@ class FTB(implicit p: Parameters) extends BasePredictor with FTBParams with BPUU
ftbBank
.
io
.
update_access
:=
u_valid
&&
!
u_meta
.
hit
ftbBank
.
io
.
s1_fire
:=
io
.
s1_fire
// for replacer
ftbBank
.
io
.
try_to_write_way
.
valid
:=
RegNext
(
io
.
update
.
valid
)
&&
u_meta
.
hit
ftbBank
.
io
.
try_to_write_way
.
bits
:=
u_meta
.
writeWay
ftbBank
.
io
.
try_to_write_pc
:=
update
.
pc
XSDebug
(
"req_v=%b, req_pc=%x, ready=%b (resp at next cycle)\n"
,
io
.
s0_fire
,
s0_pc
,
ftbBank
.
io
.
req_pc
.
ready
)
XSDebug
(
"s2_hit=%b, hit_way=%b\n"
,
s2_hit
,
writeWay
.
asUInt
)
XSDebug
(
"s2_br_taken_mask=%b, s2_real_taken_mask=%b\n"
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录