Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
304c8fa0
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 搜索 >>
提交
304c8fa0
编写于
1月 23, 2021
作者:
Y
Yinan Xu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Dispatch2Ls: send psrc to read busytable earlier
上级
72c7083b
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
14 addition
and
8 deletion
+14
-8
src/main/scala/xiangshan/backend/dispatch/Dispatch2Ls.scala
src/main/scala/xiangshan/backend/dispatch/Dispatch2Ls.scala
+14
-8
未找到文件。
src/main/scala/xiangshan/backend/dispatch/Dispatch2Ls.scala
浏览文件 @
304c8fa0
...
...
@@ -13,8 +13,6 @@ class Dispatch2Ls extends XSModule {
val
fromDq
=
Flipped
(
Vec
(
dpParams
.
LsDqDeqWidth
,
DecoupledIO
(
new
MicroOp
)))
val
readIntRf
=
Vec
(
NRMemReadPorts
,
Output
(
UInt
(
PhyRegIdxWidth
.
W
)))
val
readFpRf
=
Vec
(
exuParameters
.
StuCnt
,
Output
(
UInt
(
PhyRegIdxWidth
.
W
)))
// val intRegAddr = Vec(NRMemReadPorts, Output(UInt(PhyRegIdxWidth.W)))
// val fpRegAddr = Vec(exuParameters.StuCnt, Output(UInt(PhyRegIdxWidth.W)))
val
readIntState
=
Vec
(
NRMemReadPorts
,
Flipped
(
new
BusyTableReadIO
))
val
readFpState
=
Vec
(
exuParameters
.
StuCnt
,
Flipped
(
new
BusyTableReadIO
))
val
numExist
=
Input
(
Vec
(
exuParameters
.
LsExuCnt
,
UInt
(
log2Ceil
(
IssQueSize
).
W
)))
...
...
@@ -51,20 +49,26 @@ class Dispatch2Ls extends XSModule {
assert
(
exuParameters
.
LduCnt
==
2
)
assert
(
exuParameters
.
StuCnt
==
2
)
val
readPort
=
Seq
(
0
,
1
,
2
,
4
)
val
firstStorePsrc2
=
PriorityMux
(
storeCanAccept
,
io
.
fromDq
.
map
(
_
.
bits
.
psrc2
))
val
secondStorePsrc2
=
PriorityMux
((
1
until
4
).
map
(
i
=>
Cat
(
storeCanAccept
.
take
(
i
)).
orR
&&
storeCanAccept
(
i
)),
io
.
fromDq
.
drop
(
1
).
map
(
_
.
bits
.
psrc2
))
for
(
i
<-
0
until
exuParameters
.
LsExuCnt
)
{
if
(
i
<
exuParameters
.
LduCnt
)
{
io
.
readIntRf
(
readPort
(
i
))
:=
io
.
fromDq
(
indexVec
(
i
)).
bits
.
psrc1
io
.
readIntState
(
readPort
(
i
)).
req
:=
io
.
fromDq
(
indexVec
(
i
)).
bits
.
psrc1
}
else
{
io
.
readFpRf
(
i
-
exuParameters
.
LduCnt
)
:=
io
.
fromDq
(
indexVec
(
i
)).
bits
.
psrc2
io
.
readIntRf
(
readPort
(
i
)
)
:=
io
.
fromDq
(
indexVec
(
i
)).
bits
.
psrc1
io
.
readIntRf
(
readPort
(
i
)+
1
)
:=
io
.
fromDq
(
indexVec
(
i
)).
bits
.
psrc2
io
.
readFpState
(
i
-
exuParameters
.
LduCnt
).
req
:=
io
.
fromDq
(
indexVec
(
i
)).
bits
.
psrc2
io
.
readIntState
(
readPort
(
i
)
).
req
:=
io
.
fromDq
(
indexVec
(
i
)).
bits
.
psrc1
io
.
readIntState
(
readPort
(
i
)+
1
).
req
:=
io
.
fromDq
(
indexVec
(
i
)).
bits
.
psrc2
}
}
// src1 always needs srcState but only store's src2 needs srcState
for
(
i
<-
0
until
4
)
{
io
.
readIntState
(
i
).
req
:=
io
.
fromDq
(
i
).
bits
.
psrc1
}
io
.
readIntState
(
4
).
req
:=
firstStorePsrc2
io
.
readIntState
(
5
).
req
:=
secondStorePsrc2
io
.
readFpState
(
0
).
req
:=
firstStorePsrc2
io
.
readFpState
(
1
).
req
:=
secondStorePsrc2
/**
* Part 3: dispatch to reservation stations
...
...
@@ -80,13 +84,15 @@ class Dispatch2Ls extends XSModule {
enq
.
valid
:=
storeIndexGen
.
io
.
mapping
(
i
-
exuParameters
.
LduCnt
).
valid
&&
storeReady
}
enq
.
bits
:=
io
.
fromDq
(
indexVec
(
i
)).
bits
enq
.
bits
.
src1State
:=
io
.
readIntState
(
readPort
(
i
)).
resp
enq
.
bits
.
src1State
:=
io
.
readIntState
(
indexVec
(
i
)).
resp
if
(
i
<
exuParameters
.
LduCnt
)
{
enq
.
bits
.
src2State
:=
DontCare
}
else
{
enq
.
bits
.
src2State
:=
Mux
(
io
.
fromDq
(
indexVec
(
i
)).
bits
.
ctrl
.
src2Type
===
SrcType
.
fp
,
io
.
readFpState
(
i
-
exuParameters
.
LduCnt
).
resp
,
io
.
readIntState
(
readPort
(
i
)
+
1
).
resp
)
Mux
(
storePriority
(
i
-
2
)
===
0.
U
,
io
.
readFpState
(
0
).
resp
,
io
.
readFpState
(
1
).
resp
),
Mux
(
storePriority
(
i
-
2
)
===
0.
U
,
io
.
readIntState
(
4
).
resp
,
io
.
readIntState
(
5
).
resp
)
)
}
enq
.
bits
.
src3State
:=
DontCare
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录