Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
809beace
X
XiangShan
项目概览
OpenXiangShan
/
XiangShan
9 个月 前同步成功
通知
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 搜索 >>
提交
809beace
编写于
1月 19, 2021
作者:
L
LinJiawei
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
FPToInt: opt timing
上级
a057a757
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
33 addition
and
34 deletion
+33
-34
src/main/scala/xiangshan/backend/decode/FPDecoder.scala
src/main/scala/xiangshan/backend/decode/FPDecoder.scala
+1
-1
src/main/scala/xiangshan/backend/fu/fpu/FPToInt.scala
src/main/scala/xiangshan/backend/fu/fpu/FPToInt.scala
+32
-33
未找到文件。
src/main/scala/xiangshan/backend/decode/FPDecoder.scala
浏览文件 @
809beace
...
...
@@ -27,7 +27,7 @@ class FPDecoder extends XSModule{
FCVT_S_WU
->
List
(
N
,
s
,
s
,
Y
,
Y
,
Y
,
N
,
N
,
Y
),
FCVT_S_L
->
List
(
N
,
s
,
s
,
Y
,
Y
,
Y
,
N
,
N
,
Y
),
FCVT_S_LU
->
List
(
N
,
s
,
s
,
Y
,
Y
,
Y
,
N
,
N
,
Y
),
FMV_X_W
->
List
(
N
,
s
,
X
,
N
,
N
,
N
,
N
,
N
,
N
),
FMV_X_W
->
List
(
N
,
d
,
X
,
N
,
N
,
N
,
N
,
N
,
N
),
FCLASS_S
->
List
(
N
,
s
,
X
,
N
,
N
,
N
,
N
,
N
,
N
),
FCVT_W_S
->
List
(
N
,
s
,
X
,
N
,
Y
,
N
,
N
,
N
,
Y
),
FCVT_WU_S
->
List
(
N
,
s
,
X
,
N
,
Y
,
N
,
N
,
N
,
Y
),
...
...
src/main/scala/xiangshan/backend/fu/fpu/FPToInt.scala
浏览文件 @
809beace
...
...
@@ -18,30 +18,37 @@ class FPToInt extends FPUPipelineModule {
val
ctrl
=
io
.
in
.
bits
.
uop
.
ctrl
.
fpu
val
src1_s
=
unbox
(
src1
,
S
,
Some
(
FType
.
S
))
val
src1_d
=
unbox
(
src1
,
ctrl
.
typeTagIn
,
None
)
val
src2_d
=
unbox
(
src2
,
ctrl
.
typeTagIn
,
None
)
val
src1_ieee
=
ieee
(
src1
)
val
move_out
=
Mux
(
ctrl
.
typeTagIn
===
S
,
src1_ieee
(
31
,
0
),
src1_ieee
)
// stage 1: unbox inputs
val
src1_d
=
S1Reg
(
unbox
(
src1
,
ctrl
.
typeTagIn
,
None
))
val
src2_d
=
S1Reg
(
unbox
(
src2
,
ctrl
.
typeTagIn
,
None
))
val
ctrl_reg
=
S1Reg
(
ctrl
)
val
rm_reg
=
S1Reg
(
rm
)
// stage2
val
src1_ieee
=
ieee
(
src1_d
)
val
move_out
=
Mux
(
ctrl_reg
.
typeTagIn
===
S
,
src1_ieee
(
FType
.
S
.
ieeeWidth
-
1
,
0
),
src1_ieee
)
val
classify_out
=
Mux
(
ctrl
.
typeTagIn
===
S
,
FType
.
S
.
classify
(
src1_s
),
FType
.
D
.
classify
(
src1
)
val
classify_out
=
Mux
(
ctrl
_reg
.
typeTagIn
===
S
,
FType
.
S
.
classify
(
maxType
.
unsafeConvert
(
src1_d
,
FType
.
S
)
),
FType
.
D
.
classify
(
src1
_d
)
)
val
dcmp
=
Module
(
new
hardfloat
.
CompareRecFN
(
maxExpWidth
,
maxSigWidth
))
dcmp
.
io
.
a
:=
src1_d
dcmp
.
io
.
b
:=
src2_d
dcmp
.
io
.
signaling
:=
!
rm
(
1
)
dcmp
.
io
.
signaling
:=
!
rm
_reg
(
1
)
val
dcmp_out
=
((~
rm
).
asUInt
()
&
Cat
(
dcmp
.
io
.
lt
,
dcmp
.
io
.
eq
)).
orR
()
val
dcmp_out
=
((~
rm
_reg
).
asUInt
()
&
Cat
(
dcmp
.
io
.
lt
,
dcmp
.
io
.
eq
)).
orR
()
val
dcmp_exc
=
dcmp
.
io
.
exceptionFlags
val
conv
=
Module
(
new
RecFNToIN
(
maxExpWidth
,
maxSigWidth
,
XLEN
))
conv
.
io
.
in
:=
src1_d
conv
.
io
.
roundingMode
:=
rm
conv
.
io
.
signedOut
:=
~
ctrl
.
typ
(
0
)
conv
.
io
.
roundingMode
:=
rm
_reg
conv
.
io
.
signedOut
:=
~
ctrl
_reg
.
typ
(
0
)
val
conv_out
=
WireInit
(
conv
.
io
.
out
)
val
conv_exc
=
WireInit
(
Cat
(
...
...
@@ -52,10 +59,10 @@ class FPToInt extends FPUPipelineModule {
val
narrow
=
Module
(
new
RecFNToIN
(
maxExpWidth
,
maxSigWidth
,
32
))
narrow
.
io
.
in
:=
src1_d
narrow
.
io
.
roundingMode
:=
rm
narrow
.
io
.
signedOut
:=
~
ctrl
.
typ
(
0
)
narrow
.
io
.
roundingMode
:=
rm
_reg
narrow
.
io
.
signedOut
:=
~
ctrl
_reg
.
typ
(
0
)
when
(!
ctrl
.
typ
(
1
))
{
// fcvt.w/wu.fp
when
(!
ctrl
_reg
.
typ
(
1
))
{
// fcvt.w/wu.fp
val
excSign
=
src1_d
(
maxExpWidth
+
maxSigWidth
)
&&
!
maxType
.
isNaN
(
src1_d
)
val
excOut
=
Cat
(
conv
.
io
.
signedOut
===
excSign
,
Fill
(
32
-
1
,
!
excSign
))
val
invalid
=
conv
.
io
.
intExceptionFlags
(
2
)
||
narrow
.
io
.
intExceptionFlags
(
1
)
...
...
@@ -67,26 +74,18 @@ class FPToInt extends FPUPipelineModule {
val
intData
=
Wire
(
UInt
(
XLEN
.
W
))
intData
:=
Mux
(
ctrl
.
wflags
,
Mux
(
ctrl
.
fcvt
,
conv_out
,
dcmp_out
),
Mux
(
rm
(
0
),
classify_out
,
move_out
)
intData
:=
Mux
(
ctrl
_reg
.
wflags
,
Mux
(
ctrl
_reg
.
fcvt
,
conv_out
,
dcmp_out
),
Mux
(
rm
_reg
(
0
),
classify_out
,
move_out
)
)
val
doubleOut
=
Mux
(
ctrl
.
fcvt
,
ctrl
.
typ
(
1
),
ctrl
.
fmt
(
0
))
val
intValue
=
Mux
(
doubleOut
,
val
doubleOut
=
Mux
(
ctrl
_reg
.
fcvt
,
ctrl_reg
.
typ
(
1
),
ctrl_reg
.
fmt
(
0
))
val
intValue
=
S2Reg
(
Mux
(
doubleOut
,
SignExt
(
intData
,
XLEN
),
SignExt
(
intData
(
31
,
0
),
XLEN
)
)
val
exc
=
Mux
(
ctrl
.
fcvt
,
conv_exc
,
dcmp_exc
)
var
dataVec
=
Seq
(
intValue
)
var
excVec
=
Seq
(
exc
)
))
for
(
i
<-
1
to
latency
)
{
dataVec
=
dataVec
:+
PipelineReg
(
i
)(
dataVec
(
i
-
1
))
excVec
=
excVec
:+
PipelineReg
(
i
)(
excVec
(
i
-
1
))
}
val
exc
=
S2Reg
(
Mux
(
ctrl_reg
.
fcvt
,
conv_exc
,
dcmp_exc
))
io
.
out
.
bits
.
data
:=
dataVec
.
last
fflags
:=
exc
Vec
.
last
io
.
out
.
bits
.
data
:=
intValue
fflags
:=
exc
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录