Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
75f001f9
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 搜索 >>
提交
75f001f9
编写于
4月 11, 2023
作者:
C
czw
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
func(UopDivType): support VEC_0MX/VEC_VMV/VEC_0MM
上级
7720a376
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
77 addition
and
11 deletion
+77
-11
src/main/scala/xiangshan/backend/decode/DecodeUnitComp.scala
src/main/scala/xiangshan/backend/decode/DecodeUnitComp.scala
+63
-0
src/main/scala/xiangshan/backend/decode/VecDecoder.scala
src/main/scala/xiangshan/backend/decode/VecDecoder.scala
+11
-11
src/main/scala/xiangshan/package.scala
src/main/scala/xiangshan/package.scala
+3
-0
未找到文件。
src/main/scala/xiangshan/backend/decode/DecodeUnitComp.scala
浏览文件 @
75f001f9
...
...
@@ -116,6 +116,8 @@ class DecodeUnitComp(maxNumOfUop : Int)(implicit p : Parameters) extends XSModul
UopDivType
.
VEC_ISLIDEUP
->
numOfUopVslide
,
UopDivType
.
VEC_SLIDEDOWN
->
(
numOfUopVslide
+
1.
U
),
UopDivType
.
VEC_ISLIDEDOWN
->
numOfUopVslide
,
UopDivType
.
VEC_0MX
->
(
lmul
+&
1.
U
),
UopDivType
.
VEC_VMV
->
(
Cat
(
lmul
,
0.
U
(
1.
W
))
-
1.
U
),
))
val
src1
=
Cat
(
0.
U
(
1.
W
),
ctrl_flow
.
instr
(
19
,
15
))
...
...
@@ -732,6 +734,67 @@ class DecodeUnitComp(maxNumOfUop : Int)(implicit p : Parameters) extends XSModul
}
}
}
is
(
UopDivType
.
VEC_0MX
)
{
// LMUL
for
(
i
<-
0
until
MAX_VLMUL
)
{
val
lsrc0
=
if
(
i
==
0
)
0.
U
else
(
VECTOR_TMP_REG_LMUL
+
i
-
1
).
U
val
ldest
=
(
VECTOR_TMP_REG_LMUL
+
i
).
U
csBundle
(
i
).
ctrl
.
srcType
(
0
)
:=
SrcType
.
vp
csBundle
(
i
).
ctrl
.
srcType
(
1
)
:=
SrcType
.
vp
csBundle
(
i
).
ctrl
.
rfWen
:=
false
.
B
csBundle
(
i
).
ctrl
.
vecWen
:=
true
.
B
csBundle
(
i
).
ctrl
.
lsrc
(
0
)
:=
lsrc0
csBundle
(
i
).
ctrl
.
lsrc
(
1
)
:=
src2
// csBundle(i).ctrl.lsrc(2) := dest + i.U DontCare
csBundle
(
i
).
ctrl
.
ldest
:=
ldest
csBundle
(
i
).
ctrl
.
uopIdx
:=
i
.
U
}
csBundle
(
lmul
-
1.
U
).
ctrl
.
vecWen
:=
false
.
B
csBundle
(
lmul
-
1.
U
).
ctrl
.
fpWen
:=
true
.
B
csBundle
(
lmul
-
1.
U
).
ctrl
.
ldest
:=
FP_TMP_REG_MV
.
U
// FMV_X_D
csBundle
(
lmul
).
ctrl
.
srcType
(
0
)
:=
SrcType
.
fp
csBundle
(
lmul
).
ctrl
.
srcType
(
1
)
:=
SrcType
.
imm
csBundle
(
lmul
).
ctrl
.
lsrc
(
0
)
:=
FP_TMP_REG_MV
.
U
csBundle
(
lmul
).
ctrl
.
lsrc
(
1
)
:=
0.
U
csBundle
(
lmul
).
ctrl
.
ldest
:=
dest
csBundle
(
lmul
).
ctrl
.
fuType
:=
FuType
.
fmisc
csBundle
(
lmul
).
ctrl
.
rfWen
:=
true
.
B
csBundle
(
lmul
).
ctrl
.
fpWen
:=
false
.
B
csBundle
(
lmul
).
ctrl
.
vecWen
:=
false
.
B
csBundle
(
lmul
).
ctrl
.
fpu
.
isAddSub
:=
false
.
B
csBundle
(
lmul
).
ctrl
.
fpu
.
typeTagIn
:=
FPU
.
D
csBundle
(
lmul
).
ctrl
.
fpu
.
typeTagOut
:=
FPU
.
D
csBundle
(
lmul
).
ctrl
.
fpu
.
fromInt
:=
false
.
B
csBundle
(
lmul
).
ctrl
.
fpu
.
wflags
:=
false
.
B
csBundle
(
lmul
).
ctrl
.
fpu
.
fpWen
:=
false
.
B
csBundle
(
lmul
).
ctrl
.
fpu
.
div
:=
false
.
B
csBundle
(
lmul
).
ctrl
.
fpu
.
sqrt
:=
false
.
B
csBundle
(
lmul
).
ctrl
.
fpu
.
fcvt
:=
false
.
B
}
is
(
UopDivType
.
VEC_VMV
)
{
// LMUL
for
(
i
<-
0
until
MAX_VLMUL
)
{
val
lsrc0
=
if
(
i
==
0
)
0.
U
else
(
VECTOR_TMP_REG_LMUL
+
i
-
1
).
U
csBundle
(
i
*
2
+
0
).
ctrl
.
srcType
(
0
)
:=
SrcType
.
vp
csBundle
(
i
*
2
+
0
).
ctrl
.
srcType
(
1
)
:=
SrcType
.
vp
csBundle
(
i
*
2
+
0
).
ctrl
.
lsrc
(
0
)
:=
lsrc0
csBundle
(
i
*
2
+
0
).
ctrl
.
lsrc
(
1
)
:=
src2
csBundle
(
i
).
ctrl
.
lsrc
(
2
)
:=
dest
+
i
.
U
csBundle
(
i
*
2
+
0
).
ctrl
.
ldest
:=
dest
+
i
.
U
csBundle
(
i
*
2
+
0
).
ctrl
.
uopIdx
:=
(
i
*
2
+
0
).
U
csBundle
(
i
*
2
+
1
).
ctrl
.
srcType
(
0
)
:=
SrcType
.
vp
csBundle
(
i
*
2
+
1
).
ctrl
.
srcType
(
1
)
:=
SrcType
.
vp
csBundle
(
i
*
2
+
1
).
ctrl
.
lsrc
(
0
)
:=
lsrc0
csBundle
(
i
*
2
+
1
).
ctrl
.
lsrc
(
1
)
:=
src2
// csBundle(i).ctrl.lsrc(2) := dest + i.U DontCare
csBundle
(
i
*
2
+
1
).
ctrl
.
ldest
:=
(
VECTOR_TMP_REG_LMUL
+
i
).
U
csBundle
(
i
*
2
+
1
).
ctrl
.
uopIdx
:=
(
i
*
2
+
1
).
U
}
}
}
//uops dispatch
...
...
src/main/scala/xiangshan/backend/decode/VecDecoder.scala
浏览文件 @
75f001f9
...
...
@@ -273,17 +273,17 @@ object VecDecoder extends DecodeConstants {
)
val
opmvv
:
Array
[(
BitPat
,
XSDecodeBase
)]
=
Array
(
VAADD_VV
->
OPMVV
(
T
,
FuType
.
vialuF
,
VialuFixType
.
vaadd_vv
,
F
,
T
,
F
),
VAADDU_VV
->
OPMVV
(
T
,
FuType
.
vialuF
,
VialuFixType
.
vaaddu_vv
,
F
,
T
,
F
),
VASUB_VV
->
OPMVV
(
T
,
FuType
.
vialuF
,
VialuFixType
.
vasub_vv
,
F
,
T
,
F
),
VASUBU_VV
->
OPMVV
(
T
,
FuType
.
vialuF
,
VialuFixType
.
vasubu_vv
,
F
,
T
,
F
),
VAADD_VV
->
OPMVV
(
T
,
FuType
.
vialuF
,
VialuFixType
.
vaadd_vv
,
F
,
T
,
F
,
UopDivType
.
VEC_VVV
),
VAADDU_VV
->
OPMVV
(
T
,
FuType
.
vialuF
,
VialuFixType
.
vaaddu_vv
,
F
,
T
,
F
,
UopDivType
.
VEC_VVV
),
VASUB_VV
->
OPMVV
(
T
,
FuType
.
vialuF
,
VialuFixType
.
vasub_vv
,
F
,
T
,
F
,
UopDivType
.
VEC_VVV
),
VASUBU_VV
->
OPMVV
(
T
,
FuType
.
vialuF
,
VialuFixType
.
vasubu_vv
,
F
,
T
,
F
,
UopDivType
.
VEC_VVV
),
VCOMPRESS_VM
->
OPMVV
(
T
,
FuType
.
vipu
,
VipuType
.
dummy
,
F
,
T
,
F
),
VCPOP_M
->
OPMVV
(
T
,
FuType
.
vipu
,
VipuType
.
vcpop_m
,
T
,
F
,
F
),
VCPOP_M
->
OPMVV
(
T
,
FuType
.
vipu
,
VipuType
.
vcpop_m
,
T
,
F
,
F
,
UopDivType
.
VEC_0MX
),
VDIV_VV
->
OPMVV
(
T
,
FuType
.
vipu
,
VipuType
.
dummy
,
F
,
T
,
F
),
VDIVU_VV
->
OPMVV
(
T
,
FuType
.
vipu
,
VipuType
.
dummy
,
F
,
T
,
F
),
VFIRST_M
->
OPMVV
(
T
,
FuType
.
vipu
,
VipuType
.
vfirst_m
,
T
,
F
,
F
),
VID_V
->
OPMVV
(
T
,
FuType
.
vipu
,
VipuType
.
vid_v
,
F
,
T
,
F
),
VIOTA_M
->
OPMVV
(
T
,
FuType
.
vipu
,
VipuType
.
viota_m
,
F
,
T
,
F
),
VFIRST_M
->
OPMVV
(
T
,
FuType
.
vipu
,
VipuType
.
vfirst_m
,
T
,
F
,
F
,
UopDivType
.
VEC_0MX
),
VID_V
->
OPMVV
(
T
,
FuType
.
vipu
,
VipuType
.
vid_v
,
F
,
T
,
F
,
UopDivType
.
VEC_VMV
),
VIOTA_M
->
OPMVV
(
T
,
FuType
.
vipu
,
VipuType
.
viota_m
,
F
,
T
,
F
,
UopDivType
.
VEC_VMV
),
// VMACC_VV -> OPMVV(T, FuType.vipu, VipuType.dummy, F, T, F),
...
...
@@ -296,9 +296,9 @@ object VecDecoder extends DecodeConstants {
VMORN_MM
->
OPMVV
(
T
,
FuType
.
vialuF
,
VialuFixType
.
vmorn_mm
,
F
,
T
,
F
,
UopDivType
.
VEC_MMM
),
VMXNOR_MM
->
OPMVV
(
T
,
FuType
.
vialuF
,
VialuFixType
.
vmxnor_mm
,
F
,
T
,
F
,
UopDivType
.
VEC_MMM
),
VMXOR_MM
->
OPMVV
(
T
,
FuType
.
vialuF
,
VialuFixType
.
vmxor_mm
,
F
,
T
,
F
,
UopDivType
.
VEC_MMM
),
VMSBF_M
->
OPMVV
(
T
,
FuType
.
vipu
,
VipuType
.
vmsbf_m
,
F
,
T
,
F
),
VMSIF_M
->
OPMVV
(
T
,
FuType
.
vipu
,
VipuType
.
vmsif_m
,
F
,
T
,
F
),
VMSOF_M
->
OPMVV
(
T
,
FuType
.
vipu
,
VipuType
.
vmsof_m
,
F
,
T
,
F
),
VMSBF_M
->
OPMVV
(
T
,
FuType
.
vipu
,
VipuType
.
vmsbf_m
,
F
,
T
,
F
,
UopDivType
.
VEC_0MM
),
VMSIF_M
->
OPMVV
(
T
,
FuType
.
vipu
,
VipuType
.
vmsif_m
,
F
,
T
,
F
,
UopDivType
.
VEC_0MM
),
VMSOF_M
->
OPMVV
(
T
,
FuType
.
vipu
,
VipuType
.
vmsof_m
,
F
,
T
,
F
,
UopDivType
.
VEC_0MM
),
VMUL_VV
->
OPMVV
(
T
,
FuType
.
vipu
,
VipuType
.
dummy
,
F
,
T
,
F
),
VMULH_VV
->
OPMVV
(
T
,
FuType
.
vipu
,
VipuType
.
dummy
,
F
,
T
,
F
),
VMULHSU_VV
->
OPMVV
(
T
,
FuType
.
vipu
,
VipuType
.
dummy
,
F
,
T
,
F
),
...
...
src/main/scala/xiangshan/package.scala
浏览文件 @
75f001f9
...
...
@@ -583,6 +583,9 @@ package object xiangshan {
def
VEC_ISLIDEUP
=
"b100110"
.
U
// VEC_ISLIDEUP
def
VEC_SLIDEDOWN
=
"b100111"
.
U
// VEC_SLIDEDOWN
def
VEC_ISLIDEDOWN
=
"b101000"
.
U
// VEC_ISLIDEDOWN
def
VEC_0MX
=
"b101001"
.
U
// VEC_0MX 0MV
def
VEC_VMV
=
"b101010"
.
U
// VEC_VMV VMV
def
VEC_0MM
=
"b000000"
.
U
// VEC_0MM
def
VEC_MMM
=
"b000000"
.
U
// VEC_MMM
def
dummy
=
"b111111"
.
U
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录