Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
4b9afaa3
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 搜索 >>
提交
4b9afaa3
编写于
8月 10, 2021
作者:
Z
zoujr
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
BPU: Add more perf counters
上级
e200ad89
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
26 addition
and
5 deletion
+26
-5
src/main/scala/xiangshan/decoupled-frontend/BPU.scala
src/main/scala/xiangshan/decoupled-frontend/BPU.scala
+12
-1
src/main/scala/xiangshan/decoupled-frontend/FTB.scala
src/main/scala/xiangshan/decoupled-frontend/FTB.scala
+3
-0
src/main/scala/xiangshan/decoupled-frontend/uBTB.scala
src/main/scala/xiangshan/decoupled-frontend/uBTB.scala
+11
-4
未找到文件。
src/main/scala/xiangshan/decoupled-frontend/BPU.scala
浏览文件 @
4b9afaa3
...
...
@@ -353,11 +353,14 @@ class Predictor(implicit p: Parameters) extends XSModule with HasBPUConst {
val
s1_takenOnBr
=
resp
.
s1
.
preds
.
real_br_taken_mask
.
asUInt
=/=
0.
U
val
s1_predicted_ghist
=
s1_ghist
.
update
(
s1_sawNTBr
,
s1_takenOnBr
)
XSDebug
(
p
"s1_sawNTBR=${s1_sawNTBr}, resp.s1.hit=${resp.s1.hit}, is_br=${Binary(resp.s1.preds.is_br.asUInt)}, taken_mask=${Binary(resp.s1.preds.taken_mask.asUInt)}\n"
)
XSDebug
(
p
"s1_takenOnBr=$s1_takenOnBr, real_taken_mask=${Binary(resp.s1.preds.real_taken_mask.asUInt)}\n"
)
XSDebug
(
p
"s1_predicted_ghist=${Binary(s1_predicted_ghist.asUInt)}\n"
)
// when(s1_valid) {
// s0_ghist := s1_predicted_ghist
// }
when
(
s1_
fire
)
{
when
(
s1_
valid
)
{
s0_pc
:=
resp
.
s1
.
preds
.
target
s0_ghist
:=
s1_predicted_ghist
}
...
...
@@ -375,9 +378,17 @@ class Predictor(implicit p: Parameters) extends XSModule with HasBPUConst {
s0_ghist
:=
s2_predicted_ghist
s2_redirect
:=
true
.
B
s0_pc
:=
resp
.
s2
.
preds
.
target
XSDebug
(
p
"s1_valid=$s1_valid, s1_pc=${Hexadecimal(s1_pc)}, s2_resp_target=${Hexadecimal(resp.s2.preds.target)}\n"
)
XSDebug
(
p
"s2_correct_s1_ghist=$s2_correct_s1_ghist\n"
)
XSDebug
(
p
"s1_ghist=${Binary(s1_ghist.predHist)}\n"
)
XSDebug
(
p
"s2_predicted_ghist=${Binary(s2_predicted_ghist.predHist)}\n"
)
}
}
XSPerfAccumulate
(
"s2_redirect_because_s1_not_valid"
,
s2_fire
&&
!
s1_valid
)
XSPerfAccumulate
(
"s2_redirect_because_target_diff"
,
s2_fire
&&
s1_valid
&&
s1_pc
=/=
resp
.
s2
.
preds
.
target
)
XSPerfAccumulate
(
"s2_redirect_because_ghist_diff"
,
s2_fire
&&
s1_valid
&&
s2_correct_s1_ghist
)
// s3
val
s3_sawNTBr
=
Mux
(
resp
.
s3
.
hit
,
resp
.
s3
.
preds
.
is_br
.
zip
(
resp
.
s3
.
preds
.
taken_mask
).
map
{
case
(
b
,
t
)
=>
b
&&
!
t
}.
reduce
(
_
||
_
),
...
...
src/main/scala/xiangshan/decoupled-frontend/FTB.scala
浏览文件 @
4b9afaa3
...
...
@@ -185,6 +185,9 @@ class FTB(implicit p: Parameters) extends BasePredictor with FTBParams with BPUU
s2_target
:=
Mux
((
io
.
in
.
bits
.
resp_in
(
0
).
s2
.
preds
.
taken_mask
.
asUInt
&
ftb_entry
.
brValids
.
asUInt
)
=/=
0.
U
,
PriorityMux
(
io
.
in
.
bits
.
resp_in
(
0
).
s2
.
preds
.
taken_mask
.
asUInt
&
ftb_entry
.
brValids
.
asUInt
,
ftb_entry
.
brTargets
),
Mux
(
ftb_entry
.
jmpValid
,
ftb_entry
.
jmpTarget
,
fallThruAddr
))
XSDebug
(
"s2 FTB resp:\n"
)
XSDebug
(
p
"$ftb_entry\n"
)
}
val
s1_latch_call_is_rvc
=
DontCare
// TODO: modify when add RAS
...
...
src/main/scala/xiangshan/decoupled-frontend/uBTB.scala
浏览文件 @
4b9afaa3
...
...
@@ -77,7 +77,7 @@ class MicroBTB(implicit p: Parameters) extends BasePredictor
{
val
brTargets
=
Vec
(
numBr
,
UInt
(
VAddrBits
.
W
))
val
jmpTarget
=
UInt
(
VAddrBits
.
W
)
val
pftAddr
=
UInt
(
log2Up
(
PredictWidth
).
W
)
val
pftAddr
=
UInt
(
(
log2Up
(
PredictWidth
)+
1
).
W
)
}
class
ReadResp
extends
XSBundle
...
...
@@ -115,7 +115,8 @@ class MicroBTB(implicit p: Parameters) extends BasePredictor
}
}
override
val
meta_size
=
WireInit
(
0.
U
.
asTypeOf
(
new
MicroBTBMeta
)).
getWidth
// override val meta_size = WireInit(0.U.asTypeOf(new MicroBTBMeta)).getWidth
override
val
meta_size
=
WireInit
(
0.
U
.
asTypeOf
(
Bool
())).
getWidth
class
UBTBBank
(
val
nWays
:
Int
)
extends
XSModule
with
BPUUtils
{
val
io
=
IO
(
new
Bundle
{
...
...
@@ -126,6 +127,7 @@ class MicroBTB(implicit p: Parameters) extends BasePredictor
val
update_write_meta
=
Flipped
(
Valid
(
new
MicroBTBMeta
))
val
update_write_data
=
Flipped
(
Valid
(
new
MicroBTBData
))
val
update_taken_mask
=
Input
(
Vec
(
numBr
,
Bool
()))
val
update_mask
=
Input
(
UInt
(
numBr
.
W
))
})
// val debug_io = IO(new Bundle {
...
...
@@ -214,7 +216,7 @@ class MicroBTB(implicit p: Parameters) extends BasePredictor
val
update_old_pred
=
update_hit_meta
.
pred
val
update_new_pred
=
VecInit
(
(
0
until
numBr
).
map
{
i
=>
Mux
(
update_hit
,
satUpdate
(
update_old_pred
(
i
),
2
,
io
.
update_taken_mask
(
i
)),
Mux
(
update_hit
&&
io
.
update_mask
(
i
)
,
satUpdate
(
update_old_pred
(
i
),
2
,
io
.
update_taken_mask
(
i
)),
Mux
(
io
.
update_taken_mask
(
i
),
3.
U
,
0.
U
))
})
...
...
@@ -255,6 +257,9 @@ class MicroBTB(implicit p: Parameters) extends BasePredictor
val
banks
=
ubtbBanks
.
io
val
read_resps
=
banks
.
read_resp
XSDebug
(
p
"uBTB entry, read_pc=${Hexadecimal(s1_pc)}\n"
)
XSDebug
(
p
"v=${read_resps.valid}, brValids=${Binary(read_resps.brValids.asUInt)}, jmpValid=${read_resps.jmpValid}, pred0=${Binary(read_resps.pred(0).asUInt)}, pred1=${Binary(read_resps.pred(1).asUInt)}, hit=${read_resps.hit}\n"
)
// io.in.ready := !io.flush.valid
banks
.
read_pc
.
valid
:=
io
.
s1_fire
...
...
@@ -264,10 +269,11 @@ class MicroBTB(implicit p: Parameters) extends BasePredictor
io
.
out
.
resp
:=
io
.
in
.
bits
.
resp_in
(
0
)
// io.out.resp.valids(0) := io.out.valid
io
.
out
.
resp
.
s1
.
pc
:=
s1_pc
io
.
out
.
s3_meta
:=
RegEnable
(
RegEnable
(
read_resps
.
pred
.
asUInt
(),
io
.
s1_fire
),
io
.
s2_fire
)
// s3_meta
io
.
out
.
s3_meta
:=
RegEnable
(
RegEnable
(
read_resps
.
hit
.
asUInt
(),
io
.
s1_fire
),
io
.
s2_fire
)
// s3_meta
io
.
out
.
resp
.
s1
.
preds
.
target
:=
Mux
(
banks
.
read_hit
,
read_resps
.
target
,
s1_pc
+
(
FetchWidth
*
4
).
U
)
io
.
out
.
resp
.
s1
.
preds
.
taken_mask
:=
read_resps
.
taken_mask
io
.
out
.
resp
.
s1
.
preds
.
is_br
:=
read_resps
.
brValids
io
.
out
.
resp
.
s1
.
preds
.
hit
:=
banks
.
read_hit
// io.out.bits.resp.s1.preds.is_jal := read_resps.jmpValid && !(read_resps.isCall || read_resps.isRet || read_resps.isJalr)
// io.out.bits.resp.s1.preds.is_jalr := read_resps.jmpValid && read_resps.isJalr
// io.out.bits.resp.s1.preds.is_call := read_resps.jmpValid && read_resps.isCall
...
...
@@ -315,6 +321,7 @@ class MicroBTB(implicit p: Parameters) extends BasePredictor
banks
.
update_write_data
.
valid
:=
data_write_valid
banks
.
update_write_data
.
bits
:=
update_write_datas
banks
.
update_taken_mask
:=
u_taken_mask
banks
.
update_mask
:=
LowerMaskFromLowest
(
u_taken_mask
.
asUInt
)
if
(
debug
)
{
XSDebug
(
"req_v=%b, req_pc=%x, hit=%b\n"
,
io
.
s1_fire
,
s1_pc
,
banks
.
read_hit
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录