Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
c2c48909
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 搜索 >>
提交
c2c48909
编写于
7月 27, 2021
作者:
L
Lingrui98
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ftq: add perf counters related to ftb
上级
a4d7ec6c
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
46 addition
and
1 deletion
+46
-1
src/main/scala/xiangshan/decoupled-frontend/NewFtq.scala
src/main/scala/xiangshan/decoupled-frontend/NewFtq.scala
+46
-1
未找到文件。
src/main/scala/xiangshan/decoupled-frontend/NewFtq.scala
浏览文件 @
c2c48909
...
...
@@ -185,6 +185,12 @@ class FTBEntryGen(implicit p: Parameters) extends XSModule with HasBackendRedire
val
new_br_insert_pos
=
Output
(
Vec
(
numBr
,
Bool
()))
val
taken_mask
=
Output
(
Vec
(
numBr
+
1
,
Bool
()))
val
mispred_mask
=
Output
(
Vec
(
numBr
+
1
,
Bool
()))
// for perf counters
val
is_init_entry
=
Output
(
Bool
())
val
is_old_entry
=
Output
(
Bool
())
val
is_old_entry_modified
=
Output
(
Bool
())
val
is_br_full
=
Output
(
Bool
())
})
// no mispredictions detected at predecode
...
...
@@ -278,6 +284,12 @@ class FTBEntryGen(implicit p: Parameters) extends XSModule with HasBackendRedire
io
.
mispred_mask
(
i
)
:=
io
.
new_entry
.
brValids
(
i
)
&&
io
.
mispredict_vec
(
io
.
new_entry
.
brOffset
(
i
))
}
io
.
mispred_mask
.
last
:=
io
.
new_entry
.
jmpValid
&&
io
.
mispredict_vec
(
pd
.
jmpOffset
)
// for perf counters
io
.
is_init_entry
:=
!
hit
io
.
is_old_entry
:=
hit
&&
!
is_new_br
io
.
is_old_entry_modified
:=
hit
&&
is_new_br
io
.
is_br_full
:=
hit
&&
is_new_br
&&
br_full
}
class
Ftq
(
implicit
p
:
Parameters
)
extends
XSModule
with
HasCircularQueuePtrHelper
with
HasBackendRedirectInfo
{
...
...
@@ -892,6 +904,30 @@ class Ftq(implicit p: Parameters) extends XSModule with HasCircularQueuePtrHelpe
val
mbpCWrongs
=
mbpWrongs
&
commit_call_mask
val
mbpRWrongs
=
mbpWrongs
&
commit_ret_mask
val
update_valid
=
io
.
toBpu
.
update
.
valid
def
u
(
cond
:
Bool
)
=
update_valid
&&
cond
val
ftb_false_hit
=
u
(
update
.
false_hit
)
val
ftb_hit
=
u
(
commit_hit
===
h_hit
)
val
ftb_new_entry
=
u
(
ftbEntryGen
.
is_init_entry
)
val
ftb_new_entry_only_br
=
ftb_new_entry
&&
!
update
.
ftb_entry
.
jmpValid
val
ftb_new_entry_only_jmp
=
ftb_new_entry
&&
!
update
.
ftb_entry
.
brValids
(
0
)
val
ftb_new_entry_has_br_and_jmp
=
ftb_new_entry
&&
update
.
ftb_entry
.
brValids
(
0
)
&&
update
.
ftb_entry
.
jmpValid
val
ftb_old_entry
=
u
(
ftbEntryGen
.
is_old_entry
)
val
ftb_modified_entry
=
u
(
ftbEntryGen
.
is_old_entry_modified
)
val
ftb_modified_entry_br_full
=
ftb_modified_entry
&&
ftbEntryGen
.
is_br_full
val
ftb_entry_len
=
(
ftbEntryGen
.
new_entry
.
pftAddr
-
update
.
pc
)
>>
instOffsetBits
val
ftb_entry_len_recording_vec
=
(
0
until
PredictWidth
).
map
(
i
=>
ftb_entry_len
===
i
.
U
)
val
ftb_init_entry_len_map
=
(
0
until
PredictWidth
).
map
(
i
=>
f
"ftb_init_entry_len_$i"
->
(
ftb_entry_len_recording_vec
(
i
)
&&
ftb_new_entry
)
).
foldLeft
(
Map
[
String
,
UInt
]())(
_
+
_
)
val
ftb_modified_entry_len_map
=
(
0
until
PredictWidth
).
map
(
i
=>
f
"ftb_modified_entry_len_$i"
->
(
ftb_entry_len_recording_vec
(
i
)
&&
ftb_modified_entry
)
).
foldLeft
(
Map
[
String
,
UInt
]())(
_
+
_
)
val
perfCountsMap
=
Map
(
"BpInstr"
->
PopCount
(
mbpInstrs
),
"BpBInstr"
->
PopCount
(
mbpBRights
|
mbpBWrongs
),
...
...
@@ -919,7 +955,16 @@ class Ftq(implicit p: Parameters) extends XSModule with HasCircularQueuePtrHelpe
// "rasWrong" -> PopCount(rasWrongs),
// "loopRight" -> PopCount(loopRights),
// "loopWrong" -> PopCount(loopWrongs),
)
"ftb_false_hit"
->
PopCount
(
ftb_false_hit
),
"ftb_hit"
->
PopCount
(
ftb_hit
),
"ftb_new_entry"
->
PopCount
(
ftb_new_entry
),
"ftb_new_entry_only_br"
->
PopCount
(
ftb_new_entry_only_br
),
"ftb_new_entry_only_jmp"
->
PopCount
(
ftb_new_entry_only_jmp
),
"ftb_new_entry_has_br_and_jmp"
->
PopCount
(
ftb_new_entry_has_br_and_jmp
),
"ftb_old_entry"
->
PopCount
(
ftb_old_entry
),
"ftb_modified_entry"
->
PopCount
(
ftb_modified_entry
),
"ftb_modified_entry_br_full"
->
PopCount
(
ftb_modified_entry_br_full
)
)
++
ftb_init_entry_len_map
++
ftb_modified_entry_len_map
for
((
key
,
value
)
<-
perfCountsMap
)
{
XSPerfAccumulate
(
key
,
value
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录