Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
1b027d07
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 搜索 >>
未验证
提交
1b027d07
编写于
7月 18, 2023
作者:
S
sfencevma
提交者:
GitHub
7月 18, 2023
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
rename ldu/stu perf cnt (#2185)
上级
14a67055
变更
2
展开全部
隐藏空白更改
内联
并排
Showing
2 changed file
with
138 addition
and
138 deletion
+138
-138
src/main/scala/xiangshan/mem/pipeline/LoadUnit.scala
src/main/scala/xiangshan/mem/pipeline/LoadUnit.scala
+115
-115
src/main/scala/xiangshan/mem/pipeline/StoreUnit.scala
src/main/scala/xiangshan/mem/pipeline/StoreUnit.scala
+23
-23
未找到文件。
src/main/scala/xiangshan/mem/pipeline/LoadUnit.scala
浏览文件 @
1b027d07
此差异已折叠。
点击以展开。
src/main/scala/xiangshan/mem/pipeline/StoreUnit.scala
浏览文件 @
1b027d07
...
@@ -87,7 +87,7 @@ class StoreUnit(implicit p: Parameters) extends XSModule {
...
@@ -87,7 +87,7 @@ class StoreUnit(implicit p: Parameters) extends XSModule {
io
.
tlb
.
req_kill
:=
false
.
B
io
.
tlb
.
req_kill
:=
false
.
B
s0_out
:=
DontCare
s0_out
:=
DontCare
s0_out
.
vaddr
:=
s0_saddr
s0_out
.
vaddr
:=
s0_saddr
// Now data use its own io
// Now data use its own io
// s1_out.data := genWdata(s1_in.src(1), s1_in.uop.ctrl.fuOpType(1,0))
// s1_out.data := genWdata(s1_in.src(1), s1_in.uop.ctrl.fuOpType(1,0))
s0_out
.
data
:=
s0_in
.
src
(
1
)
// FIXME: remove data from pipeline
s0_out
.
data
:=
s0_in
.
src
(
1
)
// FIXME: remove data from pipeline
...
@@ -99,7 +99,7 @@ class StoreUnit(implicit p: Parameters) extends XSModule {
...
@@ -99,7 +99,7 @@ class StoreUnit(implicit p: Parameters) extends XSModule {
s0_out
.
wlineflag
:=
s0_in
.
uop
.
ctrl
.
fuOpType
===
LSUOpType
.
cbo_zero
s0_out
.
wlineflag
:=
s0_in
.
uop
.
ctrl
.
fuOpType
===
LSUOpType
.
cbo_zero
when
(
s0_valid
&&
s0_isFirstIssue
)
{
when
(
s0_valid
&&
s0_isFirstIssue
)
{
s0_out
.
uop
.
debugInfo
.
tlbFirstReqTime
:=
GTimer
()
s0_out
.
uop
.
debugInfo
.
tlbFirstReqTime
:=
GTimer
()
}
}
// exception check
// exception check
val
s0_addr_aligned
=
LookupTree
(
s0_in
.
uop
.
ctrl
.
fuOpType
(
1
,
0
),
List
(
val
s0_addr_aligned
=
LookupTree
(
s0_in
.
uop
.
ctrl
.
fuOpType
(
1
,
0
),
List
(
...
@@ -111,8 +111,8 @@ class StoreUnit(implicit p: Parameters) extends XSModule {
...
@@ -111,8 +111,8 @@ class StoreUnit(implicit p: Parameters) extends XSModule {
s0_out
.
uop
.
cf
.
exceptionVec
(
storeAddrMisaligned
)
:=
!
s0_addr_aligned
s0_out
.
uop
.
cf
.
exceptionVec
(
storeAddrMisaligned
)
:=
!
s0_addr_aligned
io
.
st_mask_out
.
valid
:=
s0_valid
io
.
st_mask_out
.
valid
:=
s0_valid
io
.
st_mask_out
.
bits
.
mask
:=
s0_out
.
mask
io
.
st_mask_out
.
bits
.
mask
:=
s0_out
.
mask
io
.
st_mask_out
.
bits
.
sqIdx
:=
s0_out
.
uop
.
sqIdx
io
.
st_mask_out
.
bits
.
sqIdx
:=
s0_out
.
uop
.
sqIdx
io
.
stin
.
ready
:=
s1_ready
io
.
stin
.
ready
:=
s1_ready
...
@@ -124,7 +124,7 @@ class StoreUnit(implicit p: Parameters) extends XSModule {
...
@@ -124,7 +124,7 @@ class StoreUnit(implicit p: Parameters) extends XSModule {
val
s1_valid
=
RegInit
(
false
.
B
)
val
s1_valid
=
RegInit
(
false
.
B
)
val
s1_in
=
RegEnable
(
s0_out
,
s0_fire
)
val
s1_in
=
RegEnable
(
s0_out
,
s0_fire
)
val
s1_out
=
Wire
(
new
LsPipelineBundle
)
val
s1_out
=
Wire
(
new
LsPipelineBundle
)
val
s1_kill
=
Wire
(
Bool
())
val
s1_kill
=
Wire
(
Bool
())
val
s1_can_go
=
s2_ready
val
s1_can_go
=
s2_ready
val
s1_fire
=
s1_valid
&&
!
s1_kill
&&
s1_can_go
val
s1_fire
=
s1_valid
&&
!
s1_kill
&&
s1_can_go
...
@@ -137,10 +137,10 @@ class StoreUnit(implicit p: Parameters) extends XSModule {
...
@@ -137,10 +137,10 @@ class StoreUnit(implicit p: Parameters) extends XSModule {
val
s1_mmio
=
s1_mmio_cbo
val
s1_mmio
=
s1_mmio_cbo
val
s1_exception
=
ExceptionNO
.
selectByFu
(
s1_out
.
uop
.
cf
.
exceptionVec
,
staCfg
).
asUInt
.
orR
val
s1_exception
=
ExceptionNO
.
selectByFu
(
s1_out
.
uop
.
cf
.
exceptionVec
,
staCfg
).
asUInt
.
orR
s1_kill
:=
s1_in
.
uop
.
robIdx
.
needFlush
(
io
.
redirect
)
||
s1_tlb_miss
s1_kill
:=
s1_in
.
uop
.
robIdx
.
needFlush
(
io
.
redirect
)
||
s1_tlb_miss
s1_ready
:=
!
s1_valid
||
s1_kill
||
s2_ready
s1_ready
:=
!
s1_valid
||
s1_kill
||
s2_ready
io
.
tlb
.
resp
.
ready
:=
true
.
B
// TODO: why dtlbResp needs a ready?
io
.
tlb
.
resp
.
ready
:=
true
.
B
// TODO: why dtlbResp needs a ready?
when
(
s0_fire
)
{
s1_valid
:=
true
.
B
}
when
(
s0_fire
)
{
s1_valid
:=
true
.
B
}
.
elsewhen
(
s1_fire
)
{
s1_valid
:=
false
.
B
}
.
elsewhen
(
s1_fire
)
{
s1_valid
:=
false
.
B
}
.
elsewhen
(
s1_kill
)
{
s1_valid
:=
false
.
B
}
.
elsewhen
(
s1_kill
)
{
s1_valid
:=
false
.
B
}
...
@@ -202,7 +202,7 @@ class StoreUnit(implicit p: Parameters) extends XSModule {
...
@@ -202,7 +202,7 @@ class StoreUnit(implicit p: Parameters) extends XSModule {
val
s2_fire
=
s2_valid
&&
!
s2_kill
&&
s2_can_go
val
s2_fire
=
s2_valid
&&
!
s2_kill
&&
s2_can_go
s2_ready
:=
!
s2_valid
||
s2_kill
||
s3_ready
s2_ready
:=
!
s2_valid
||
s2_kill
||
s3_ready
when
(
s1_fire
)
{
s2_valid
:=
true
.
B
}
when
(
s1_fire
)
{
s2_valid
:=
true
.
B
}
.
elsewhen
(
s2_fire
)
{
s2_valid
:=
false
.
B
}
.
elsewhen
(
s2_fire
)
{
s2_valid
:=
false
.
B
}
.
elsewhen
(
s2_kill
)
{
s2_valid
:=
false
.
B
}
.
elsewhen
(
s2_kill
)
{
s2_valid
:=
false
.
B
}
...
@@ -226,7 +226,7 @@ class StoreUnit(implicit p: Parameters) extends XSModule {
...
@@ -226,7 +226,7 @@ class StoreUnit(implicit p: Parameters) extends XSModule {
// feedback tlb miss to RS in store_s2
// feedback tlb miss to RS in store_s2
val
s1_feedback
=
Wire
(
Valid
(
new
RSFeedback
))
val
s1_feedback
=
Wire
(
Valid
(
new
RSFeedback
))
s1_feedback
.
valid
:=
s1_valid
s1_feedback
.
valid
:=
s1_valid
s1_feedback
.
bits
.
hit
:=
!
s1_tlb_miss
s1_feedback
.
bits
.
hit
:=
!
s1_tlb_miss
s1_feedback
.
bits
.
flushState
:=
io
.
tlb
.
resp
.
bits
.
ptwBack
s1_feedback
.
bits
.
flushState
:=
io
.
tlb
.
resp
.
bits
.
ptwBack
s1_feedback
.
bits
.
rsIdx
:=
s1_out
.
rsIdx
s1_feedback
.
bits
.
rsIdx
:=
s1_out
.
rsIdx
...
@@ -255,7 +255,7 @@ class StoreUnit(implicit p: Parameters) extends XSModule {
...
@@ -255,7 +255,7 @@ class StoreUnit(implicit p: Parameters) extends XSModule {
val
s3_can_go
=
s3_ready
val
s3_can_go
=
s3_ready
val
s3_fire
=
s3_valid
&&
!
s3_kill
&&
s3_can_go
val
s3_fire
=
s3_valid
&&
!
s3_kill
&&
s3_can_go
when
(
s2_fire
)
{
s3_valid
:=
!
s2_mmio
||
s2_exception
}
when
(
s2_fire
)
{
s3_valid
:=
!
s2_mmio
||
s2_exception
}
.
elsewhen
(
s3_fire
)
{
s3_valid
:=
false
.
B
}
.
elsewhen
(
s3_fire
)
{
s3_valid
:=
false
.
B
}
.
elsewhen
(
s3_kill
)
{
s3_valid
:=
false
.
B
}
.
elsewhen
(
s3_kill
)
{
s3_valid
:=
false
.
B
}
...
@@ -330,18 +330,18 @@ class StoreUnit(implicit p: Parameters) extends XSModule {
...
@@ -330,18 +330,18 @@ class StoreUnit(implicit p: Parameters) extends XSModule {
printPipeLine
(
s1_out
,
s1_valid
,
"S1"
)
printPipeLine
(
s1_out
,
s1_valid
,
"S1"
)
// perf cnt
// perf cnt
XSPerfAccumulate
(
"in_valid"
,
s0_valid
)
XSPerfAccumulate
(
"
s0_
in_valid"
,
s0_valid
)
XSPerfAccumulate
(
"in_fire"
,
s0_fire
)
XSPerfAccumulate
(
"
s0_
in_fire"
,
s0_fire
)
XSPerfAccumulate
(
"in_fire_first_issue"
,
s0_fire
&&
s0_isFirstIssue
)
XSPerfAccumulate
(
"
s0_
in_fire_first_issue"
,
s0_fire
&&
s0_isFirstIssue
)
XSPerfAccumulate
(
"addr_spec_success"
,
s0_fire
&&
s0_saddr
(
VAddrBits
-
1
,
12
)
===
s0_in
.
src
(
0
)(
VAddrBits
-
1
,
12
))
XSPerfAccumulate
(
"
s0_
addr_spec_success"
,
s0_fire
&&
s0_saddr
(
VAddrBits
-
1
,
12
)
===
s0_in
.
src
(
0
)(
VAddrBits
-
1
,
12
))
XSPerfAccumulate
(
"addr_spec_failed"
,
s0_fire
&&
s0_saddr
(
VAddrBits
-
1
,
12
)
=/=
s0_in
.
src
(
0
)(
VAddrBits
-
1
,
12
))
XSPerfAccumulate
(
"
s0_
addr_spec_failed"
,
s0_fire
&&
s0_saddr
(
VAddrBits
-
1
,
12
)
=/=
s0_in
.
src
(
0
)(
VAddrBits
-
1
,
12
))
XSPerfAccumulate
(
"addr_spec_success_once"
,
s0_fire
&&
s0_saddr
(
VAddrBits
-
1
,
12
)
===
s0_in
.
src
(
0
)(
VAddrBits
-
1
,
12
)
&&
s0_isFirstIssue
)
XSPerfAccumulate
(
"
s0_
addr_spec_success_once"
,
s0_fire
&&
s0_saddr
(
VAddrBits
-
1
,
12
)
===
s0_in
.
src
(
0
)(
VAddrBits
-
1
,
12
)
&&
s0_isFirstIssue
)
XSPerfAccumulate
(
"
addr_spec_failed_once"
,
s0_fire
&&
s0_saddr
(
VAddrBits
-
1
,
12
)
=/=
s0_in
.
src
(
0
)(
VAddrBits
-
1
,
12
)
&&
s0_isFirstIssue
)
XSPerfAccumulate
(
"
s0_addr_spec_failed_once"
,
s0_fire
&&
s0_saddr
(
VAddrBits
-
1
,
12
)
=/=
s0_in
.
src
(
0
)(
VAddrBits
-
1
,
12
)
&&
s0_isFirstIssue
)
XSPerfAccumulate
(
"in_valid"
,
s1_valid
)
XSPerfAccumulate
(
"
s1_
in_valid"
,
s1_valid
)
XSPerfAccumulate
(
"in_fire"
,
s1_fire
)
XSPerfAccumulate
(
"
s1_
in_fire"
,
s1_fire
)
XSPerfAccumulate
(
"in_fire_first_issue"
,
s1_fire
&&
s1_in
.
isFirstIssue
)
XSPerfAccumulate
(
"
s1_
in_fire_first_issue"
,
s1_fire
&&
s1_in
.
isFirstIssue
)
XSPerfAccumulate
(
"tlb_miss"
,
s1_fire
&&
s1_tlb_miss
)
XSPerfAccumulate
(
"
s1_
tlb_miss"
,
s1_fire
&&
s1_tlb_miss
)
XSPerfAccumulate
(
"tlb_miss_first_issue"
,
s1_fire
&&
s1_tlb_miss
&&
s1_in
.
isFirstIssue
)
XSPerfAccumulate
(
"
s1_
tlb_miss_first_issue"
,
s1_fire
&&
s1_tlb_miss
&&
s1_in
.
isFirstIssue
)
// end
// end
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录