Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
47a386bf
X
XiangShan
项目概览
OpenXiangShan
/
XiangShan
大约 1 年 前同步成功
通知
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,发现更多精彩内容 >>
提交
47a386bf
编写于
8月 23, 2020
作者:
Z
ZhangZifei
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
CSR: add satp mode check. illegal satp mode will not casue wen
上级
c5334b11
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
14 addition
and
6 deletion
+14
-6
src/main/scala/xiangshan/backend/fu/CSR.scala
src/main/scala/xiangshan/backend/fu/CSR.scala
+14
-6
未找到文件。
src/main/scala/xiangshan/backend/fu/CSR.scala
浏览文件 @
47a386bf
...
...
@@ -221,6 +221,12 @@ class CSR extends FunctionUnit(csrCfg) with HasCSRConst{
assert
(
this
.
getWidth
==
XLEN
)
}
class
SatpStruct
extends
Bundle
{
val
mode
=
UInt
(
4.
W
)
val
asid
=
UInt
(
16.
W
)
val
ppn
=
UInt
(
44.
W
)
}
class
Interrupt
extends
Bundle
{
val
e
=
new
Priv
val
t
=
new
Priv
...
...
@@ -325,9 +331,7 @@ class CSR extends FunctionUnit(csrCfg) with HasCSRConst{
val
tlbBundle
=
Wire
(
new
TlbCsrBundle
)
val
sfence
=
Wire
(
new
SfenceBundle
)
tlbBundle
.
satp
.
mode
:=
satp
(
63
,
60
)
tlbBundle
.
satp
.
asid
:=
satp
(
59
,
44
)
// NOTE: disable asid, always 0.U
tlbBundle
.
satp
.
ppn
:=
satp
(
43
,
0
)
tlbBundle
.
satp
:=
satp
.
asTypeOf
(
new
SatpStruct
)
sfence
:=
0.
U
.
asTypeOf
(
new
SfenceBundle
)
BoringUtils
.
addSource
(
tlbBundle
,
"TLBCSRIO"
)
BoringUtils
.
addSource
(
sfence
,
"SfenceBundle"
)
// FIXME: move to MOU
...
...
@@ -489,12 +493,15 @@ class CSR extends FunctionUnit(csrCfg) with HasCSRConst{
CSROpType
.
clri
->
(
rdata
&
(~
csri
).
asUInt
())
))
val
wen
=
valid
&&
func
=/=
CSROpType
.
jmp
// satp wen check
val
satpLegalMode
=
(
wdata
.
asTypeOf
(
new
SatpStruct
).
mode
===
0.
U
)
||
(
wdata
.
asTypeOf
(
new
SatpStruct
).
mode
===
8.
U
)
val
wen
=
valid
&&
func
=/=
CSROpType
.
jmp
&&
Mux
(
addr
===
Satp
.
U
,
satpLegalMode
,
true
.
B
)
// TODO: problem: is wen under mode check?
// if satp.mode is illegal, will not write
// Debug(){when(wen){printf("[CSR] addr %x wdata %x func %x rdata %x\n", addr, wdata, func, rdata)}}
MaskedRegMap
.
generate
(
mapping
,
addr
,
rdata
,
wen
,
wdata
)
val
isIllegalAddr
=
MaskedRegMap
.
isIllegalAddr
(
mapping
,
addr
)
val
resetSatp
=
addr
===
Satp
.
U
&&
wen
// write to satp will cause the pipeline be flushed
io
.
out
.
bits
:=
rdata
val
isIllegalAddr
=
MaskedRegMap
.
isIllegalAddr
(
mapping
,
addr
)
// Fix Mip/Sip write
val
fixMapping
=
Map
(
...
...
@@ -638,6 +645,7 @@ class CSR extends FunctionUnit(csrCfg) with HasCSRConst{
val
retTarget
=
Wire
(
UInt
(
VAddrBits
.
W
))
val
trapTarget
=
Wire
(
UInt
(
VAddrBits
.
W
))
ExcitingUtils
.
addSource
(
trapTarget
,
"trapTarget"
)
val
resetSatp
=
addr
===
Satp
.
U
&&
satpLegalMode
&&
wen
// write to satp will cause the pipeline be flushed
io
.
redirect
:=
DontCare
io
.
redirectValid
:=
(
valid
&&
func
===
CSROpType
.
jmp
&&
!
isEcall
)
||
resetSatp
//TODO: use pred pc instead pc+4
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录