Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
4878d5ed
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,发现更多精彩内容 >>
提交
4878d5ed
编写于
2月 02, 2021
作者:
Z
ZhangZifei
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
PTW: fix bug of resp.pf assignment
上级
b02cb8f3
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
8 addition
and
5 deletion
+8
-5
src/main/scala/xiangshan/cache/PTW.scala
src/main/scala/xiangshan/cache/PTW.scala
+8
-5
未找到文件。
src/main/scala/xiangshan/cache/PTW.scala
浏览文件 @
4878d5ed
...
...
@@ -392,7 +392,7 @@ class PTWImp(outer: PTW) extends PtwModule(outer) {
}
XSDebug
(
validOneCycle
,
p
"[l1] l1v:${Binary(l1v)} hitVecT:${Binary(VecInit(hitVecT).asUInt)}\n"
)
XSDebug
(
valid
,
p
"[l1] l1Hit:${hit} l1HitPPN:0x${Hexadecimal(hitPPN)} l1HitReg:${l1HitReg} l1HitPPNReg:${Hexadecimal(l1HitPPNReg)} hitVec:${VecInit(hitVec).asUInt}\n"
)
VecInit
(
hitVecT
).
suggestName
(
s
"l1_hitVecT"
)
VecInit
(
hitVec
).
suggestName
(
s
"l1_hitVec"
)
...
...
@@ -481,15 +481,15 @@ class PTWImp(outer: PTW) extends PtwModule(outer) {
VecInit
(
hitVecT
).
suggestName
(
s
"sp_hitVecT"
)
VecInit
(
hitVec
).
suggestName
(
s
"sp_hitVec"
)
(
hit
,
hitData
)
}
val
spHitPerm
=
spHitData
.
perm
.
getOrElse
(
0.
U
.
asTypeOf
(
new
PtePermBundle
))
val
spHitLevel
=
spHitData
.
level
.
getOrElse
(
0.
U
)
// default values
resp
.
map
(
_
.
valid
:=
false
.
B
)
resp
.
map
(
_
.
bits
:=
DontCare
)
//
resp.map(_.valid := false.B)
//
resp.map(_.bits := DontCare)
l2
.
io
.
w
.
req
<>
DontCare
l3
.
io
.
w
.
req
<>
DontCare
l2
.
io
.
w
.
req
.
valid
:=
false
.
B
...
...
@@ -498,6 +498,7 @@ class PTWImp(outer: PTW) extends PtwModule(outer) {
// fsm
val
pteHit
=
l3Hit
||
spHit
val
notFound
=
WireInit
(
false
.
B
)
notFound
.
suggestName
(
"PtwNotFound"
)
switch
(
state
)
{
is
(
s_idle
)
{
when
(
valid
)
{
...
...
@@ -531,6 +532,7 @@ class PTWImp(outer: PTW) extends PtwModule(outer) {
when
(
memRespFire
)
{
when
(
memPte
.
isLeaf
()
||
memPte
.
isPf
(
level
))
{
state
:=
s_idle
notFound
:=
memPte
.
isPf
(
level
)
}.
otherwise
{
when
(
level
=/=
2.
U
)
{
level
:=
levelNext
...
...
@@ -570,6 +572,7 @@ class PTWImp(outer: PTW) extends PtwModule(outer) {
resp
(
i
).
bits
.
entry
.
ppn
:=
Mux
(
memRespFire
,
memPte
.
ppn
,
Mux
(
l3Hit
,
l3HitPPN
,
spHitData
.
ppn
))
resp
(
i
).
bits
.
entry
.
perm
.
map
(
_
:=
Mux
(
memRespFire
,
memPte
.
getPerm
(),
Mux
(
l3Hit
,
l3HitPerm
,
spHitPerm
)))
resp
(
i
).
bits
.
entry
.
level
.
map
(
_
:=
Mux
(
memRespFire
,
level
,
Mux
(
l3Hit
,
2.
U
,
spHitLevel
)))
resp
(
i
).
bits
.
pf
:=
level
===
3.
U
||
notFound
}
// refill
...
...
@@ -718,7 +721,7 @@ class PTWImp(outer: PTW) extends PtwModule(outer) {
XSDebug
(
p
"[mem][A] memAddr:0x${Hexadecimal(memAddr)} l1addr:0x${Hexadecimal(l1addr)} l2addr:0x${Hexadecimal(l2addr)} l3addr:0x${Hexadecimal(l3addr)} memAddrReg:0x${Hexadecimal(memAddrReg)} memPteReg.ppn:0x${Hexadecimal(memPteReg.ppn)}"
)
XSDebug
(
p
"[mem][D] (${mem.d.valid},${mem.d.ready}) memSelData:0x${Hexadecimal(memSelData)} memPte:${memPte} memPte.isLeaf:${memPte.isLeaf()} memPte.isPf(${level}):${memPte.isPf(level)}\n"
)
XSDebug
(
memRespFire
,
p
"[mem][D] memPtes:${printVec(memPtes)}\n"
)
XSDebug
(
p
"[fsm] state:${state} level:${level} pteHit:${pteHit} sfenceLatch:${sfenceLatch} notFound:${notFound}\n"
)
XSDebug
(
sfence
.
valid
,
p
"[sfence] original v and g vector:\n"
)
XSDebug
(
sfence
.
valid
,
p
"[sfence] l1v:${Binary(l1v)}\n"
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录