Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
3671e214
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 搜索 >>
提交
3671e214
编写于
8月 11, 2022
作者:
L
Lingrui98
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
tage: should mask not_silent_update by update_mask, avoiding x state in w_req_valid
上级
3f785aa3
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
9 addition
and
8 deletion
+9
-8
src/main/scala/xiangshan/frontend/Tage.scala
src/main/scala/xiangshan/frontend/Tage.scala
+9
-8
未找到文件。
src/main/scala/xiangshan/frontend/Tage.scala
浏览文件 @
3671e214
...
...
@@ -312,10 +312,10 @@ class TageTable
val
(
s0_idx
,
s0_tag
)
=
compute_tag_and_hash
(
req_unhashed_idx
,
io
.
req
.
bits
.
folded_hist
)
val
s0_bank_req_1h
=
get_bank_mask
(
s0_idx
)
for
(
b
<-
0
until
nBanks
)
{
table_banks
(
b
).
io
.
r
.
req
.
valid
:=
io
.
req
.
fire
&&
s0_bank_req_1h
(
b
)
table_banks
(
b
).
io
.
r
.
req
.
bits
.
setIdx
:=
get_bank_idx
(
s0_idx
)
}
for
(
b
<-
0
until
nBanks
)
{
table_banks
(
b
).
io
.
r
.
req
.
valid
:=
io
.
req
.
fire
&&
s0_bank_req_1h
(
b
)
table_banks
(
b
).
io
.
r
.
req
.
bits
.
setIdx
:=
get_bank_idx
(
s0_idx
)
}
us
.
io
.
r
.
req
.
valid
:=
io
.
req
.
fire
us
.
io
.
r
.
req
.
bits
.
setIdx
:=
s0_idx
...
...
@@ -378,7 +378,7 @@ class TageTable
for
(
b
<-
0
until
nBanks
)
{
table_banks
(
b
).
io
.
w
.
apply
(
valid
=
io
.
update
.
mask
.
reduce
(
_
||
_
)
&&
update_req_bank_1h
(
b
)
&&
per_bank_not_silent_update
(
b
).
reduce
(
_
||
_
),
valid
=
per_bank_update_way_mask
(
b
).
orR
&&
update_req_bank_1h
(
b
),
data
=
per_bank_update_wdata
(
b
),
setIdx
=
update_idx_in_bank
,
waymask
=
per_bank_update_way_mask
(
b
)
...
...
@@ -414,7 +414,7 @@ class TageTable
}
val
bank_wrbypasses
=
Seq
.
fill
(
nBanks
)(
Seq
.
fill
(
numBr
)(
Module
(
new
WrBypass
(
UInt
(
TageCtrBits
.
W
),
perBankWrbypassEntries
,
log2Ceil
(
nRowsPerBr
/
nBanks
)
,
tagWidth
=
tagLen
))
Module
(
new
WrBypass
(
UInt
(
TageCtrBits
.
W
),
perBankWrbypassEntries
,
1
,
tagWidth
=
tagLen
))
))
// let it corresponds to logical brIdx
for
(
b
<-
0
until
nBanks
)
{
...
...
@@ -426,16 +426,17 @@ class TageTable
val
wrbypass_io
=
Mux1H
(
UIntToOH
(
br_lidx
,
numBr
),
bank_wrbypasses
(
b
).
map
(
_
.
io
))
val
wrbypass_hit
=
wrbypass_io
.
hit
val
wrbypass_ctr
=
wrbypass_io
.
hit_data
(
0
).
bits
val
wrbypass_data_valid
=
wrbypass_hit
&&
wrbypass_io
.
hit_data
(
0
).
valid
update_wdata
.
ctr
:=
Mux
(
io
.
update
.
alloc
(
br_lidx
),
Mux
(
io
.
update
.
takens
(
br_lidx
),
4.
U
,
3.
U
),
Mux
(
wrbypass_
hit
,
Mux
(
wrbypass_
data_valid
,
inc_ctr
(
wrbypass_ctr
,
io
.
update
.
takens
(
br_lidx
)),
inc_ctr
(
io
.
update
.
oldCtrs
(
br_lidx
),
io
.
update
.
takens
(
br_lidx
))
)
)
not_silent_update
(
pi
)
:=
Mux
(
wrbypass_
hit
,
Mux
(
wrbypass_
data_valid
,
!
silentUpdate
(
wrbypass_ctr
,
io
.
update
.
takens
(
br_lidx
)),
!
silentUpdate
(
io
.
update
.
oldCtrs
(
br_lidx
),
io
.
update
.
takens
(
br_lidx
)))
||
io
.
update
.
alloc
(
br_lidx
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录