Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
f580a020
X
XiangShan
项目概览
OpenXiangShan
/
XiangShan
12 个月 前同步成功
通知
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,发现更多精彩内容 >>
未验证
提交
f580a020
编写于
11月 14, 2022
作者:
S
Steve Gou
提交者:
GitHub
11月 14, 2022
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1690 from chenguokai/frontend_db
frontend: Add ChiselDB records
上级
692910fa
51532d8b
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
90 addition
and
1 deletion
+90
-1
src/main/scala/xiangshan/frontend/IFU.scala
src/main/scala/xiangshan/frontend/IFU.scala
+56
-0
src/main/scala/xiangshan/frontend/NewFtq.scala
src/main/scala/xiangshan/frontend/NewFtq.scala
+34
-1
未找到文件。
src/main/scala/xiangshan/frontend/IFU.scala
浏览文件 @
f580a020
...
...
@@ -25,6 +25,7 @@ import xiangshan.cache.mmu._
import
xiangshan.frontend.icache._
import
utils._
import
xiangshan.backend.fu.
{
PMPReqBundle
,
PMPRespBundle
}
import
huancun.utils.ChiselDB
trait
HasInstrMMIOConst
extends
HasXSParameter
with
HasIFUConst
{
def
mmioBusWidth
=
64
...
...
@@ -97,6 +98,24 @@ class IfuToPredChecker(implicit p: Parameters) extends XSBundle {
val
pc
=
Vec
(
PredictWidth
,
UInt
(
VAddrBits
.
W
))
}
class
FetchToIBufferDB
extends
Bundle
{
val
start_addr
=
UInt
(
39.
W
)
val
instr_count
=
UInt
(
32.
W
)
val
exception
=
Bool
()
val
is_cache_hit
=
Bool
()
}
class
IfuWbToFtqDB
extends
Bundle
{
val
start_addr
=
UInt
(
39.
W
)
val
is_miss_pred
=
Bool
()
val
miss_pred_offset
=
UInt
(
32.
W
)
val
checkJalFault
=
Bool
()
val
checkRetFault
=
Bool
()
val
checkTargetFault
=
Bool
()
val
checkNotCFIFault
=
Bool
()
val
checkInvalidTaken
=
Bool
()
}
class
NewIFU
(
implicit
p
:
Parameters
)
extends
XSModule
with
HasICacheParameters
with
HasIFUConst
...
...
@@ -762,6 +781,7 @@ class NewIFU(implicit p: Parameters) extends XSModule
wb_ftq_req
.
startAddr
,
wb_ftq_req
.
nextStartAddr
,
wb_ftq_req
.
ftqOffset
.
valid
,
wb_ftq_req
.
ftqOffset
.
bits
)
}
/** performance counter */
val
f3_perf_info
=
RegEnable
(
f2_perf_info
,
f2_fire
)
val
f3_req_0
=
io
.
toIbuffer
.
fire
()
...
...
@@ -802,5 +822,41 @@ class NewIFU(implicit p: Parameters) extends XSModule
XSPerfAccumulate
(
"hit_0_except_1"
,
f3_perf_info
.
hit_0_except_1
&&
io
.
toIbuffer
.
fire
()
)
XSPerfAccumulate
(
"miss_0_except_1"
,
f3_perf_info
.
miss_0_except_1
&&
io
.
toIbuffer
.
fire
()
)
XSPerfAccumulate
(
"except_0"
,
f3_perf_info
.
except_0
&&
io
.
toIbuffer
.
fire
()
)
val
fetchToIBufferTable
=
ChiselDB
.
createTable
(
"FetchToIBuffer"
+
p
(
XSCoreParamsKey
).
HartId
.
toString
,
new
FetchToIBufferDB
)
val
ifuWbToFtqTable
=
ChiselDB
.
createTable
(
"IfuWbToFtq"
+
p
(
XSCoreParamsKey
).
HartId
.
toString
,
new
IfuWbToFtqDB
)
val
fetchIBufferDumpData
=
Wire
(
new
FetchToIBufferDB
)
fetchIBufferDumpData
.
start_addr
:=
f3_ftq_req
.
startAddr
fetchIBufferDumpData
.
instr_count
:=
PopCount
(
io
.
toIbuffer
.
bits
.
enqEnable
)
fetchIBufferDumpData
.
exception
:=
(
f3_perf_info
.
except_0
&&
io
.
toIbuffer
.
fire
())
||
(
f3_perf_info
.
hit_0_except_1
&&
io
.
toIbuffer
.
fire
())
||
(
f3_perf_info
.
miss_0_except_1
&&
io
.
toIbuffer
.
fire
())
fetchIBufferDumpData
.
is_cache_hit
:=
f3_hit
val
ifuWbToFtqDumpData
=
Wire
(
new
IfuWbToFtqDB
)
ifuWbToFtqDumpData
.
start_addr
:=
wb_ftq_req
.
startAddr
ifuWbToFtqDumpData
.
is_miss_pred
:=
checkFlushWb
.
bits
.
misOffset
.
valid
ifuWbToFtqDumpData
.
miss_pred_offset
:=
checkFlushWb
.
bits
.
misOffset
.
bits
ifuWbToFtqDumpData
.
checkJalFault
:=
checkJalFault
ifuWbToFtqDumpData
.
checkRetFault
:=
checkRetFault
ifuWbToFtqDumpData
.
checkTargetFault
:=
checkTargetFault
ifuWbToFtqDumpData
.
checkNotCFIFault
:=
checkNotCFIFault
ifuWbToFtqDumpData
.
checkInvalidTaken
:=
checkInvalidTaken
fetchToIBufferTable
.
log
(
data
=
fetchIBufferDumpData
,
en
=
io
.
toIbuffer
.
fire
(),
site
=
"IFU"
+
p
(
XSCoreParamsKey
).
HartId
.
toString
,
clock
=
clock
,
reset
=
reset
)
ifuWbToFtqTable
.
log
(
data
=
ifuWbToFtqDumpData
,
en
=
checkFlushWb
.
valid
,
site
=
"IFU"
+
p
(
XSCoreParamsKey
).
HartId
.
toString
,
clock
=
clock
,
reset
=
reset
)
}
src/main/scala/xiangshan/frontend/NewFtq.scala
浏览文件 @
f580a020
...
...
@@ -24,6 +24,19 @@ import xiangshan._
import
xiangshan.frontend.icache._
import
xiangshan.backend.CtrlToFtqIO
import
xiangshan.backend.decode.ImmUnion
import
huancun.utils.ChiselDB
class
FtqDebugBundle
extends
Bundle
{
val
pc
=
UInt
(
39.
W
)
val
target
=
UInt
(
39.
W
)
val
isBr
=
Bool
()
val
isJmp
=
Bool
()
val
isCall
=
Bool
()
val
isRet
=
Bool
()
val
misPred
=
Bool
()
val
isTaken
=
Bool
()
val
predStage
=
UInt
(
2.
W
)
}
class
FtqPtr
(
implicit
p
:
Parameters
)
extends
CircularQueuePtr
[
FtqPtr
](
p
=>
p
(
XSCoreParamsKey
).
FtqSize
...
...
@@ -1192,7 +1205,8 @@ class Ftq(implicit p: Parameters) extends XSModule with HasCircularQueuePtrHelpe
io
.
bpuInfo
.
bpRight
:=
PopCount
(
mbpRights
)
io
.
bpuInfo
.
bpWrong
:=
PopCount
(
mbpWrongs
)
val
ftqBranchTraceDB
=
ChiselDB
.
createTable
(
"FTQTable"
+
p
(
XSCoreParamsKey
).
HartId
.
toString
,
new
FtqDebugBundle
)
// Cfi Info
for
(
i
<-
0
until
PredictWidth
)
{
val
pc
=
commit_pc_bundle
.
startAddr
+
(
i
*
instBytes
).
U
...
...
@@ -1214,6 +1228,25 @@ class Ftq(implicit p: Parameters) extends XSModule with HasCircularQueuePtrHelpe
p
"taken(${isTaken}) mispred(${misPred}) cycle($predCycle) hist(${histPtr.value}) "
+
p
"startAddr(${Hexadecimal(commit_pc_bundle.startAddr)}) AddIntoHist(${addIntoHist}) "
+
p
"brInEntry(${inFtbEntry}) brIdx(${brIdx}) target(${Hexadecimal(target)})\n"
)
val
logbundle
=
Wire
(
new
FtqDebugBundle
)
logbundle
.
pc
:=
pc
logbundle
.
target
:=
target
logbundle
.
isBr
:=
isBr
logbundle
.
isJmp
:=
isJmp
logbundle
.
isCall
:=
isJmp
&&
commit_pd
.
hasCall
logbundle
.
isRet
:=
isJmp
&&
commit_pd
.
hasRet
logbundle
.
misPred
:=
misPred
logbundle
.
isTaken
:=
isTaken
logbundle
.
predStage
:=
commit_stage
ftqBranchTraceDB
.
log
(
data
=
logbundle
/* hardware of type T */
,
en
=
v
&&
do_commit
&&
isCfi
,
site
=
"FTQ"
+
p
(
XSCoreParamsKey
).
HartId
.
toString
,
clock
=
clock
,
reset
=
reset
)
}
val
enq
=
io
.
fromBpu
.
resp
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录