Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
e87da745
X
XiangShan
项目概览
OpenXiangShan
/
XiangShan
10 个月 前同步成功
通知
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 搜索 >>
提交
e87da745
编写于
8月 05, 2020
作者:
Z
zhanglinjuan
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
decoder: add rvc call/ret
bpu: fix lastHit in stage3
上级
c4cac805
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
15 addition
and
9 deletion
+15
-9
src/main/scala/xiangshan/backend/decode/DecodeHelper.scala
src/main/scala/xiangshan/backend/decode/DecodeHelper.scala
+2
-2
src/main/scala/xiangshan/backend/decode/Decoder.scala
src/main/scala/xiangshan/backend/decode/Decoder.scala
+3
-3
src/main/scala/xiangshan/frontend/BPU.scala
src/main/scala/xiangshan/frontend/BPU.scala
+7
-1
src/main/scala/xiangshan/frontend/IFU.scala
src/main/scala/xiangshan/frontend/IFU.scala
+1
-1
src/main/scala/xiangshan/frontend/PreDecode.scala
src/main/scala/xiangshan/frontend/PreDecode.scala
+2
-2
未找到文件。
src/main/scala/xiangshan/backend/decode/DecodeHelper.scala
浏览文件 @
e87da745
...
...
@@ -56,8 +56,8 @@ object Instructions extends HasInstrType with HasXSParameter {
Privileged
.
table
++
RVFInstr
.
table
++
RVDInstr
.
table
++
(
if
(
HasMExtension
)
RVMInstr
.
table
else
Nil
)
//
++
// (if (HasCExtension) RVCInstr.table else Nil)
++
(
if
(
HasMExtension
)
RVMInstr
.
table
else
Nil
)
++
(
if
(
HasCExtension
)
RVCInstr
.
table
else
Nil
)
//
++
// (if (HasFPU) RVFInstr.table ++ RVDInstr.table else Nil) ++
// Privileged.table ++
// RVAInstr.table ++
...
...
src/main/scala/xiangshan/backend/decode/Decoder.scala
浏览文件 @
e87da745
...
...
@@ -121,10 +121,10 @@ class Decoder extends XSModule with HasInstrType {
when
(
fuType
===
FuType
.
jmp
)
{
def
isLink
(
reg
:
UInt
)
=
(
reg
===
1.
U
||
reg
===
5.
U
)
when
(
isLink
(
r
d
)
&&
fuOpType
===
JumpOpType
.
jal
)
{
io
.
out
.
ctrl
.
fuOpType
:=
JumpOpType
.
call
}
when
(
isLink
(
r
fDest
)
&&
fuOpType
===
JumpOpType
.
jal
)
{
io
.
out
.
ctrl
.
fuOpType
:=
JumpOpType
.
call
}
when
(
fuOpType
===
JumpOpType
.
jalr
)
{
when
(
isLink
(
r
s
))
{
io
.
out
.
ctrl
.
fuOpType
:=
JumpOpType
.
ret
}
when
(
isLink
(
r
d
))
{
io
.
out
.
ctrl
.
fuOpType
:=
JumpOpType
.
call
}
when
(
isLink
(
r
fSrc1
))
{
io
.
out
.
ctrl
.
fuOpType
:=
JumpOpType
.
ret
}
when
(
isLink
(
r
fDest
))
{
io
.
out
.
ctrl
.
fuOpType
:=
JumpOpType
.
call
}
}
}
// fix LUI
...
...
src/main/scala/xiangshan/frontend/BPU.scala
浏览文件 @
e87da745
...
...
@@ -275,7 +275,13 @@ class BPUStage3 extends BPUStage {
targetSrc
:=
inLatch
.
resp
.
btb
.
targets
lastIsRVC
:=
pds
(
lastValidPos
).
isRVC
lastHit
:=
pdMask
(
lastValidPos
)
when
(
lastValidPos
>
0.
U
)
{
lastHit
:=
pdMask
(
lastValidPos
)
|
!
pdMask
(
lastValidPos
-
1.
U
)
&
!
pdMask
(
lastValidPos
)
|
pdMask
(
lastValidPos
-
1.
U
)
&
!
pdMask
(
lastValidPos
)
&
pds
(
lastValidPos
-
1.
U
).
isRVC
}.
otherwise
{
lastHit
:=
pdMask
(
0
)
|
!
pdMask
(
0
)
&
!
pds
(
0
).
isRVC
}
// Wrap tage resp and tage meta in
// This is ugly
...
...
src/main/scala/xiangshan/frontend/IFU.scala
浏览文件 @
e87da745
...
...
@@ -325,7 +325,7 @@ class IFU extends XSModule with HasIFUConst
pd
.
io
.
in
:=
io
.
icacheResp
.
bits
pd
.
io
.
prev
.
valid
:=
if3_hasPrevHalfInstr
pd
.
io
.
prev
.
bits
:=
prevHalfInstr
.
target
pd
.
io
.
prev
.
bits
:=
prevHalfInstr
.
instr
io
.
fetchPacket
.
valid
:=
if4_valid
&&
!
io
.
redirect
.
valid
io
.
fetchPacket
.
bits
.
instrs
:=
if4_pd
.
instrs
...
...
src/main/scala/xiangshan/frontend/PreDecode.scala
浏览文件 @
e87da745
...
...
@@ -10,9 +10,9 @@ trait HasPdconst{ this: XSModule =>
def
isRVC
(
inst
:
UInt
)
=
(
inst
(
1
,
0
)
=/=
3.
U
)
def
isLink
(
reg
:
UInt
)
=
reg
===
1.
U
||
reg
===
5.
U
def
brInfo
(
instr
:
UInt
)
=
{
val
rd
=
instr
(
11
,
7
)
val
rs
=
instr
(
19
,
15
)
val
brType
::
Nil
=
ListLookup
(
instr
,
List
(
BrType
.
notBr
),
PreDecodeInst
.
brTable
)
val
rd
=
Mux
(
isRVC
(
instr
),
1.
U
,
instr
(
11
,
7
))
val
rs
=
Mux
(
isRVC
(
instr
),
Mux
(
brType
===
BrType
.
jal
,
0.
U
,
instr
(
11
,
7
)),
instr
(
19
,
15
))
val
isCall
=
(
brType
===
BrType
.
jal
||
brType
===
BrType
.
jalr
)
&&
isLink
(
rd
)
&&
!
isRVC
(
instr
)
val
isRet
=
brType
===
BrType
.
jalr
&&
isLink
(
rs
)
&&
!
isLink
(
rd
)
&&
!
isRVC
(
instr
)
List
(
brType
,
isCall
,
isRet
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录