Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
a8c9208d
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,发现更多精彩内容 >>
提交
a8c9208d
编写于
10月 01, 2019
作者:
Z
Zihao Yu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
noop: use exceptionVec to propagate exception signals
上级
fe820c3d
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
29 addition
and
14 deletion
+29
-14
src/main/scala/noop/Bundle.scala
src/main/scala/noop/Bundle.scala
+1
-1
src/main/scala/noop/Decode.scala
src/main/scala/noop/Decode.scala
+1
-1
src/main/scala/noop/EXU.scala
src/main/scala/noop/EXU.scala
+1
-1
src/main/scala/noop/IDU.scala
src/main/scala/noop/IDU.scala
+3
-1
src/main/scala/noop/NOOP.scala
src/main/scala/noop/NOOP.scala
+1
-1
src/main/scala/noop/fu/CSR.scala
src/main/scala/noop/fu/CSR.scala
+22
-9
未找到文件。
src/main/scala/noop/Bundle.scala
浏览文件 @
a8c9208d
...
...
@@ -12,7 +12,6 @@ class CtrlSignalIO extends NOOPBundle {
val
rfSrc2
=
Output
(
UInt
(
5.
W
))
val
rfWen
=
Output
(
Bool
())
val
rfDest
=
Output
(
UInt
(
5.
W
))
val
isInvOpcode
=
Output
(
Bool
())
val
isNoopTrap
=
Output
(
Bool
())
val
isSrc1Forward
=
Output
(
Bool
())
val
isSrc2Forward
=
Output
(
Bool
())
...
...
@@ -34,6 +33,7 @@ class CtrlFlowIO extends NOOPBundle {
val
pc
=
Output
(
UInt
(
AddrBits
.
W
))
val
pnpc
=
Output
(
UInt
(
AddrBits
.
W
))
val
redirect
=
new
RedirectIO
val
exceptionVec
=
Output
(
Vec
(
16
,
Bool
()))
}
class
DecodeIO
extends
NOOPBundle
{
...
...
src/main/scala/noop/Decode.scala
浏览文件 @
a8c9208d
...
...
@@ -38,7 +38,7 @@ object FuOpType {
object
Instructions
extends
HasInstrType
with
HasNOOPParameter
{
def
NOP
=
0x00000013
.
U
val
DecodeDefault
=
List
(
InstrN
,
FuType
.
csr
,
CSROpType
.
jmp
)
val
DecodeDefault
=
List
(
InstrN
,
FuType
.
alu
,
ALUOpType
.
add
)
def
DecodeTable
=
RVIInstr
.
table
++
NOOPTrap
.
table
++
(
if
(
HasMExtension
)
RVMInstr
.
table
else
Nil
)
++
RVZicsrInstr
.
table
++
RVZifenceiInstr
.
table
...
...
src/main/scala/noop/EXU.scala
浏览文件 @
a8c9208d
...
...
@@ -51,7 +51,7 @@ class EXU(implicit val p: NOOPConfig) extends NOOPModule {
val
csr
=
Module
(
new
CSR
)
val
csrOut
=
csr
.
access
(
valid
=
fuValids
(
FuType
.
csr
),
src1
=
src1
,
src2
=
src2
,
func
=
fuOpType
)
csr
.
io
.
cfIn
:=
io
.
in
.
bits
.
cf
csr
.
io
.
i
sInvOpcode
:=
io
.
in
.
bits
.
ctrl
.
isInvOpcode
csr
.
io
.
i
nstrValid
:=
io
.
in
.
valid
&&
!
io
.
flush
csr
.
io
.
out
.
ready
:=
true
.
B
val
mou
=
Module
(
new
MOU
)
...
...
src/main/scala/noop/IDU.scala
浏览文件 @
a8c9208d
...
...
@@ -64,7 +64,9 @@ class IDU extends NOOPModule with HasInstrType {
io
.
out
.
bits
.
cf
<>
io
.
in
.
bits
io
.
out
.
bits
.
ctrl
.
isInvOpcode
:=
(
instrType
===
InstrN
)
&&
io
.
in
.
valid
io
.
out
.
bits
.
cf
.
exceptionVec
.
map
(
_
:=
false
.
B
)
io
.
out
.
bits
.
cf
.
exceptionVec
(
illegalInstr
)
:=
(
instrType
===
InstrN
)
&&
io
.
in
.
valid
io
.
out
.
bits
.
cf
.
exceptionVec
(
ecallM
)
:=
(
instr
===
RVZicsrInstr
.
ECALL
)
&&
io
.
in
.
valid
io
.
out
.
bits
.
ctrl
.
isNoopTrap
:=
(
instr
===
NOOPTrap
.
TRAP
)
&&
io
.
in
.
valid
io
.
out
.
valid
:=
io
.
in
.
valid
...
...
src/main/scala/noop/NOOP.scala
浏览文件 @
a8c9208d
...
...
@@ -20,7 +20,7 @@ trait HasNOOPParameter {
val
DataBytes
=
DataBits
/
8
}
abstract
class
NOOPModule
extends
Module
with
HasNOOPParameter
abstract
class
NOOPModule
extends
Module
with
HasNOOPParameter
with
HasExceptionNO
abstract
class
NOOPBundle
extends
Bundle
with
HasNOOPParameter
case
class
NOOPConfig
(
...
...
src/main/scala/noop/fu/CSR.scala
浏览文件 @
a8c9208d
...
...
@@ -25,11 +25,28 @@ trait HasCSRConst {
def
privMret
=
0x302
.
U
}
trait
HasExceptionNO
{
def
instrAddrMisaligned
=
0
def
instrAccessFault
=
1
def
illegalInstr
=
2
def
breakPoint
=
3
def
loadAddrMisaligned
=
4
def
loadAccessFault
=
5
def
storeAddrMisaligned
=
6
def
storeAccessFault
=
7
def
ecallU
=
8
def
ecallS
=
9
def
ecallM
=
11
def
instrPageFault
=
12
def
loadPageFault
=
13
def
storePageFault
=
15
}
class
CSRIO
extends
FunctionUnitIO
{
val
cfIn
=
Flipped
(
new
CtrlFlowIO
)
val
redirect
=
new
RedirectIO
//
exception
val
i
sInvOpcode
=
Input
(
Bool
())
//
for exception check
val
i
nstrValid
=
Input
(
Bool
())
}
class
CSR
(
implicit
val
p
:
NOOPConfig
)
extends
NOOPModule
with
HasCSRConst
{
...
...
@@ -124,16 +141,12 @@ class CSR(implicit val p: NOOPConfig) extends NOOPModule with HasCSRConst {
io
.
out
.
bits
:=
rdata
val
isMret
=
addr
===
privMret
val
raiseException
=
(
io
.
isInvOpcode
&&
valid
)
||
raiseIntr
val
isEcall
=
(
addr
===
privEcall
)
&&
!
raiseException
val
exceptionNO
=
Mux1H
(
List
(
io
.
isInvOpcode
->
2.
U
,
isEcall
->
11.
U
))
val
raiseException
=
io
.
cfIn
.
exceptionVec
.
asUInt
.
orR
&&
io
.
instrValid
val
exceptionNO
=
PriorityEncoder
(
io
.
cfIn
.
exceptionVec
)
val
intrNO
=
PriorityEncoder
(
intrVec
)
// FIXME: check this
val
causeNO
=
(
raiseIntr
<<
(
XLEN
-
1
))
|
Mux
(
raiseIntr
,
intrNO
,
exceptionNO
)
io
.
redirect
.
valid
:=
(
valid
&&
func
===
CSROpType
.
jmp
)
||
raiseException
io
.
redirect
.
valid
:=
(
valid
&&
func
===
CSROpType
.
jmp
)
||
raiseException
||
raiseIntr
io
.
redirect
.
target
:=
Mux
(
isMret
,
mepc
,
mtvec
)
when
(
io
.
redirect
.
valid
&&
!
isMret
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录