Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
4006bffd
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 搜索 >>
提交
4006bffd
编写于
1月 20, 2021
作者:
L
LinJiawei
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
FPToFP: opt timing
上级
809beace
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
11 addition
and
14 deletion
+11
-14
src/main/scala/xiangshan/backend/fu/fpu/FPToFP.scala
src/main/scala/xiangshan/backend/fu/fpu/FPToFP.scala
+11
-14
未找到文件。
src/main/scala/xiangshan/backend/fu/fpu/FPToFP.scala
浏览文件 @
4006bffd
...
...
@@ -12,14 +12,16 @@ class FPToFP extends FPUPipelineModule{
override
def
latency
:
Int
=
FunctionUnit
.
f2iCfg
.
latency
.
latencyVal
.
get
val
ctrl
=
io
.
in
.
bits
.
uop
.
ctrl
.
fpu
val
ctrlIn
=
io
.
in
.
bits
.
uop
.
ctrl
.
fpu
val
ctrl
=
S1Reg
(
ctrlIn
)
val
inTag
=
ctrl
.
typeTagIn
val
outTag
=
ctrl
.
typeTagOut
val
src1
=
unbox
(
io
.
in
.
bits
.
src
(
0
),
inTag
,
None
)
val
src2
=
unbox
(
io
.
in
.
bits
.
src
(
1
),
inTag
,
None
)
val
wflags
=
ctrl
.
wflags
val
src1
=
S1Reg
(
unbox
(
io
.
in
.
bits
.
src
(
0
),
ctrlIn
.
typeTagIn
,
None
))
val
src2
=
S1Reg
(
unbox
(
io
.
in
.
bits
.
src
(
1
),
ctrlIn
.
typeTagIn
,
None
))
val
rmReg
=
S1Reg
(
rm
)
val
signNum
=
Mux
(
rm
(
1
),
src1
^
src2
,
Mux
(
rm
(
0
),
~
src2
,
src2
))
val
signNum
=
Mux
(
rm
Reg
(
1
),
src1
^
src2
,
Mux
(
rmReg
(
0
),
~
src2
,
src2
))
val
fsgnj
=
Cat
(
signNum
(
fLen
),
src1
(
fLen
-
1
,
0
))
val
fsgnjMux
=
Wire
(
new
Bundle
()
{
...
...
@@ -32,7 +34,7 @@ class FPToFP extends FPUPipelineModule{
val
dcmp
=
Module
(
new
CompareRecFN
(
maxExpWidth
,
maxSigWidth
))
dcmp
.
io
.
a
:=
src1
dcmp
.
io
.
b
:=
src2
dcmp
.
io
.
signaling
:=
!
rm
(
1
)
dcmp
.
io
.
signaling
:=
!
rm
Reg
(
1
)
val
lt
=
dcmp
.
io
.
lt
||
(
dcmp
.
io
.
a
.
asSInt
()
<
0.
S
&&
dcmp
.
io
.
b
.
asSInt
()
>=
0.
S
)
...
...
@@ -41,7 +43,7 @@ class FPToFP extends FPUPipelineModule{
val
isnan2
=
maxType
.
isNaN
(
src2
)
val
isInvalid
=
maxType
.
isSNaN
(
src1
)
||
maxType
.
isSNaN
(
src2
)
val
isNaNOut
=
isnan1
&&
isnan2
val
isLHS
=
isnan2
||
rm
(
0
)
=/=
lt
&&
!
isnan1
val
isLHS
=
isnan2
||
rm
Reg
(
0
)
=/=
lt
&&
!
isnan1
fsgnjMux
.
exc
:=
isInvalid
<<
4
fsgnjMux
.
data
:=
Mux
(
isNaNOut
,
maxType
.
qNaN
,
Mux
(
isLHS
,
src1
,
src2
))
}
...
...
@@ -67,7 +69,7 @@ class FPToFP extends FPUPipelineModule{
when
(
outTag
===
typeTag
(
outType
).
U
&&
(
typeTag
(
outType
)
==
0
).
B
||
(
outTag
<
inTag
)){
val
narrower
=
Module
(
new
hardfloat
.
RecFNToRecFN
(
maxType
.
exp
,
maxType
.
sig
,
outType
.
exp
,
outType
.
sig
))
narrower
.
io
.
in
:=
src1
narrower
.
io
.
roundingMode
:=
rm
narrower
.
io
.
roundingMode
:=
rm
Reg
narrower
.
io
.
detectTininess
:=
hardfloat
.
consts
.
tininess_afterRounding
val
narrowed
=
sanitizeNaN
(
narrower
.
io
.
out
,
outType
)
mux
.
data
:=
Cat
(
fsgnjMux
.
data
>>
narrowed
.
getWidth
,
narrowed
)
...
...
@@ -77,11 +79,6 @@ class FPToFP extends FPUPipelineModule{
}
}
var
resVec
=
Seq
(
mux
)
for
(
i
<-
1
to
latency
){
resVec
=
resVec
:+
PipelineReg
(
i
)(
resVec
(
i
-
1
))
}
io
.
out
.
bits
.
data
:=
resVec
.
last
.
data
fflags
:=
resVec
.
last
.
exc
io
.
out
.
bits
.
data
:=
S2Reg
(
mux
.
data
)
fflags
:=
S2Reg
(
mux
.
exc
)
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录