Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
12797c73
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 搜索 >>
提交
12797c73
编写于
3月 20, 2023
作者:
C
czw
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
style(DecodeUnitComp): optimize code style of DecodeUnitComp
上级
27700842
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
23 addition
and
74 deletion
+23
-74
src/main/scala/xiangshan/backend/decode/DecodeUnitComp.scala
src/main/scala/xiangshan/backend/decode/DecodeUnitComp.scala
+23
-74
未找到文件。
src/main/scala/xiangshan/backend/decode/DecodeUnitComp.scala
浏览文件 @
12797c73
...
...
@@ -450,31 +450,17 @@ class DecodeUnitComp(maxNumOfUop : Int)(implicit p : Parameters) extends XSModul
switch
(
stateReg
)
{
is
(
normal
)
{
when
(!
io
.
validFromIBuf
(
0
))
{
stateReg
:=
normal
uopRes
:=
0.
U
}.
elsewhen
((
numOfUop
>
readyCounter
)
&&
(
readyCounter
=/=
0.
U
)){
stateReg
:=
ext
uopRes
:=
numOfUop
-
readyCounter
}.
otherwise
{
stateReg
:=
normal
uopRes
:=
0.
U
}
stateReg
:=
Mux
(
io
.
validFromIBuf
(
0
)
&&
(
numOfUop
>
readyCounter
)
&&
(
readyCounter
=/=
0.
U
),
ext
,
normal
)
}
is
(
ext
)
{
when
(!
io
.
validFromIBuf
(
0
))
{
stateReg
:=
normal
uopRes
:=
0.
U
}.
elsewhen
(
uopRes
>
readyCounter
)
{
stateReg
:=
ext
uopRes
:=
uopRes
-
readyCounter
}.
otherwise
{
stateReg
:=
normal
uopRes
:=
0.
U
}
stateReg
:=
Mux
(
io
.
validFromIBuf
(
0
)
&&
(
uopRes
>
readyCounter
)
&&
(
readyCounter
=/=
0.
U
),
ext
,
normal
)
}
}
val
uopRes0
=
Mux
(
stateReg
===
normal
,
numOfUop
,
uopRes
)
uopRes
:=
Mux
(
io
.
validFromIBuf
(
0
)
&&
(
readyCounter
=/=
0.
U
)
&&
(
uopRes0
>
readyCounter
),
uopRes0
-
readyCounter
,
0.
U
)
for
(
i
<-
0
until
RenameWidth
)
{
cf_ctrl
(
i
)
:=
MuxCase
(
csBundle
(
i
),
Seq
(
(
stateReg
===
normal
)
->
csBundle
(
i
),
...
...
@@ -491,60 +477,23 @@ class DecodeUnitComp(maxNumOfUop : Int)(implicit p : Parameters) extends XSModul
notInfVec
.
drop
(
1
).
zip
(
0
until
DecodeWidth
-
1
).
map
{
case
(
dst
,
i
)
=>
dst
:=
Cat
(
notInf
.
take
(
i
+
1
)).
andR
}
notInfVec
(
0
)
:=
true
.
B
complexNum
:=
1.
U
validToRename
.
map
{
case
dst
=>
dst
:=
false
.
B
}
readyToIBuf
.
map
{
case
dst
=>
dst
:=
false
.
B
}
switch
(
stateReg
)
{
is
(
normal
)
{
when
(!
io
.
validFromIBuf
(
0
))
{
complexNum
:=
1.
U
validToRename
(
0
)
:=
false
.
B
for
(
i
<-
1
until
RenameWidth
)
{
validToRename
(
i
)
:=
notInfVec
(
i
-
1
)
&&
validSimple
(
i
-
1
)
}
readyToIBuf
(
0
)
:=
io
.
readyFromRename
(
0
)
for
(
i
<-
1
until
DecodeWidth
)
{
readyToIBuf
(
i
)
:=
notInfVec
(
i
-
1
)
&&
validSimple
(
i
-
1
)
&&
io
.
readyFromRename
(
i
)
}
}.
elsewhen
(
numOfUop
>
readyCounter
)
{
complexNum
:=
Mux
(
readyCounter
===
0.
U
,
1.
U
,
readyCounter
)
for
(
i
<-
0
until
RenameWidth
)
{
validToRename
(
i
)
:=
Mux
(
readyCounter
>
i
.
U
,
true
.
B
,
false
.
B
)
}
readyToIBuf
.
map
{
case
dst
=>
dst
:=
false
.
B
}
}.
otherwise
{
complexNum
:=
numOfUop
for
(
i
<-
0
until
RenameWidth
)
{
validToRename
(
i
)
:=
Mux
(
complexNum
>
i
.
U
,
true
.
B
,
validSimple
(
i
.
U
-
complexNum
)
&&
notInfVec
(
i
.
U
-
complexNum
)
&&
io
.
readyFromRename
(
i
))
}
readyToIBuf
(
0
)
:=
true
.
B
for
(
i
<-
1
until
DecodeWidth
)
{
readyToIBuf
(
i
)
:=
Mux
(
RenameWidth
.
U
-
complexNum
>=
i
.
U
,
notInfVec
(
i
-
1
)
&&
validSimple
(
i
-
1
)
&&
io
.
readyFromRename
(
i
),
false
.
B
)
}
}
}
is
(
ext
)
{
when
(!
io
.
validFromIBuf
(
0
))
{
complexNum
:=
1.
U
validToRename
.
map
{
case
dst
=>
dst
:=
false
.
B
}
readyToIBuf
.
map
{
case
dst
=>
dst
:=
true
.
B
}
}.
elsewhen
(
uopRes
>
readyCounter
)
{
complexNum
:=
Mux
(
readyCounter
===
0.
U
,
1.
U
,
readyCounter
)
for
(
i
<-
0
until
RenameWidth
)
{
validToRename
(
i
)
:=
Mux
(
readyCounter
>
i
.
U
,
true
.
B
,
false
.
B
)
}
readyToIBuf
.
map
{
case
dst
=>
dst
:=
false
.
B
}
}.
otherwise
{
complexNum
:=
uopRes
for
(
i
<-
0
until
RenameWidth
)
{
validToRename
(
i
)
:=
Mux
(
complexNum
>
i
.
U
,
true
.
B
,
validSimple
(
i
.
U
-
complexNum
)
&&
notInfVec
(
i
.
U
-
complexNum
)
&&
io
.
readyFromRename
(
i
))
}
readyToIBuf
(
0
)
:=
true
.
B
for
(
i
<-
1
until
DecodeWidth
)
{
readyToIBuf
(
i
)
:=
Mux
(
RenameWidth
.
U
-
complexNum
>=
i
.
U
,
notInfVec
(
i
-
1
)
&&
validSimple
(
i
-
1
)
&&
io
.
readyFromRename
(
i
),
false
.
B
)
}
}
}
complexNum
:=
Mux
(
io
.
validFromIBuf
(
0
)
&&
readyCounter
.
orR
,
Mux
(
uopRes0
>
readyCounter
,
readyCounter
,
uopRes0
),
1.
U
)
validToRename
.
zipWithIndex
.
foreach
{
case
(
dst
,
i
)
=>
dst
:=
MuxCase
(
false
.
B
,
Seq
(
(
io
.
validFromIBuf
(
0
)
&&
uopRes0
>
readyCounter
)
->
Mux
(
readyCounter
>
i
.
U
,
true
.
B
,
false
.
B
),
(
io
.
validFromIBuf
(
0
)
&&
!(
uopRes0
>
readyCounter
))
->
Mux
(
complexNum
>
i
.
U
,
true
.
B
,
validSimple
(
i
.
U
-
complexNum
)
&&
notInfVec
(
i
.
U
-
complexNum
)
&&
io
.
readyFromRename
(
i
)),
))
}
readyToIBuf
.
zipWithIndex
.
foreach
{
case
(
dst
,
i
)
=>
dst
:=
MuxCase
(
true
.
B
,
Seq
(
(
io
.
validFromIBuf
(
0
)
&&
uopRes0
>
readyCounter
)
->
false
.
B
,
(
io
.
validFromIBuf
(
0
)
&&
!(
uopRes0
>
readyCounter
))
->
(
if
(
i
==
0
)
true
.
B
else
Mux
(
RenameWidth
.
U
-
complexNum
>=
i
.
U
,
notInfVec
(
i
-
1
)
&&
validSimple
(
i
-
1
)
&&
io
.
readyFromRename
(
i
),
false
.
B
)),
))
}
io
.
deq
.
cf_ctrl
:=
cf_ctrl
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录