Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
26a28e0b
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 搜索 >>
提交
26a28e0b
编写于
1月 12, 2021
作者:
Y
YikeZhou
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ReservationStation: more parameterize with srcNum
上级
e87a9119
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
14 addition
and
36 deletion
+14
-36
src/main/scala/xiangshan/backend/FloatBlock.scala
src/main/scala/xiangshan/backend/FloatBlock.scala
+1
-1
src/main/scala/xiangshan/backend/IntegerBlock.scala
src/main/scala/xiangshan/backend/IntegerBlock.scala
+1
-1
src/main/scala/xiangshan/backend/issue/ReservationStationNew.scala
...scala/xiangshan/backend/issue/ReservationStationNew.scala
+12
-34
未找到文件。
src/main/scala/xiangshan/backend/FloatBlock.scala
浏览文件 @
26a28e0b
...
...
@@ -96,7 +96,7 @@ class FloatBlock
rsData
.
io
.
srcRegValue
(
0
)
:=
src1Value
(
readPortIndex
(
i
))
rsData
.
io
.
srcRegValue
(
1
)
:=
src2Value
(
readPortIndex
(
i
))
rsData
.
io
.
srcRegValue
(
2
)
:=
src3Value
(
readPortIndex
(
i
))
if
(
cfg
.
fpSrcCnt
>
2
)
rsData
.
io
.
srcRegValue
(
2
)
:=
src3Value
(
readPortIndex
(
i
))
rsData
.
io
.
redirect
<>
redirect
rsData
.
io
.
writeBackedData
<>
writeBackData
...
...
src/main/scala/xiangshan/backend/IntegerBlock.scala
浏览文件 @
26a28e0b
...
...
@@ -147,7 +147,7 @@ class IntegerBlock
val
src1Value
=
VecInit
((
0
until
4
).
map
(
i
=>
intRf
.
io
.
readPorts
(
i
*
2
).
data
))
val
src2Value
=
VecInit
((
0
until
4
).
map
(
i
=>
intRf
.
io
.
readPorts
(
i
*
2
+
1
).
data
))
rsData
.
io
.
srcRegValue
(
0
)
:=
src1Value
(
readPortIndex
(
i
))
rsData
.
io
.
srcRegValue
(
1
)
:=
src2Value
(
readPortIndex
(
i
))
if
(
cfg
.
intSrcCnt
>
1
)
rsData
.
io
.
srcRegValue
(
1
)
:=
src2Value
(
readPortIndex
(
i
))
rsData
.
io
.
redirect
<>
redirect
rsData
.
io
.
writeBackedData
<>
writeBackData
...
...
src/main/scala/xiangshan/backend/issue/ReservationStationNew.scala
浏览文件 @
26a28e0b
...
...
@@ -6,6 +6,7 @@ import xiangshan._
import
utils._
import
xiangshan.backend.exu.
{
Exu
,
ExuConfig
}
import
xiangshan.backend.regfile.RfReadPort
import
scala.math.max
class
BypassQueue
(
number
:
Int
)
extends
XSModule
{
val
io
=
IO
(
new
Bundle
{
...
...
@@ -67,8 +68,7 @@ class ReservationStationCtrl
val
iqIdxWidth
=
log2Up
(
iqSize
)
val
fastWakeup
=
fixedDelay
>=
0
// NOTE: if do not enable fastWakeup(bypass), set fixedDelay to -1
val
nonBlocked
=
fastWakeup
// FIXME val srcNum = exuCfg.intSrcCnt + exuCfg.fpSrcCnt
val
srcNum
=
3
val
srcNum
=
max
(
exuCfg
.
intSrcCnt
,
exuCfg
.
fpSrcCnt
)
require
(
srcNum
>=
1
&&
srcNum
<=
3
)
println
(
s
"[RsCtrl] ExuConfig: ${exuCfg.name} (srcNum = $srcNum)"
)
...
...
@@ -274,9 +274,7 @@ class ReservationStationCtrl
srcStateSeq
(
i
)===
SrcState
.
rdy
)
}
XSDebug
(
p
"EnqCtrl: roqIdx:${enqUop.roqIdx} pc:0x${Hexadecimal(enqUop.cf.pc)} "
+
p
"src1:${srcSeq(0)} state:${srcStateSeq(0)} type:${srcTypeSeq(0)} src2:${srcSeq(1)} "
+
p
" state:${srcStateSeq(1)} type:${srcTypeSeq(1)} src3:${srcSeq(2)} state:${srcStateSeq(2)} "
+
p
"type:${srcTypeSeq(2)}\n"
)
List
.
tabulate
(
srcNum
)(
i
=>
p
"<src$i: ${srcSeq(i)} state$i: ${srcStateSeq(i)} type$i: ${srcTypeSeq(i)}>"
).
reduce
(
_
+
" "
+
_
)
+
"\n"
)
}
// other to Data
...
...
@@ -306,8 +304,8 @@ class ReservationStationCtrl
XSDebug
(
print
,
p
"issValid:${issValid} issueFire:${issFire} dequeue:${dequeue} deqPtr:${deqPtr}\n"
)
XSDebug
(
p
" :Idx|v|r|s |cnt|s1:s2:s3\n"
)
for
(
i
<-
srcQueue
.
indices
)
{
XSDebug
(
p
"${i.U}: ${idxQueue(i)}|${validIdxQue(i)}|${readyIdxQue(i)}|${stateIdxQue(i)}|"
+
p
"${cntIdxQue(i)}|${srcIdxQue(i)(0)}:${srcIdxQue(i)(1)}:${srcIdxQue(i)(2)}
\n"
)
XSDebug
(
p
"${i.U}: ${idxQueue(i)}|${validIdxQue(i)}|${readyIdxQue(i)}|${stateIdxQue(i)}|
${cntIdxQue(i)}|
"
+
List
.
tabulate
(
srcNum
)(
j
=>
p
"${srcIdxQue(i)(j)}"
).
reduce
(
_
+
":"
+
_
)
+
"
\n"
)
}
}
...
...
@@ -319,31 +317,11 @@ class ReservationStationData
fixedDelay
:
Int
,
feedback
:
Boolean
,
)
extends
XSModule
{
object
DispatchType
extends
Enumeration
{
val
Disp2Int
,
Disp2Fp
,
Disp2Ls
=
Value
}
def
dispatchType
(
exuConfig
:
ExuConfig
)
:
DispatchType.Value
=
{
exuConfig
match
{
case
Exu
.
aluExeUnitCfg
=>
DispatchType
.
Disp2Int
case
Exu
.
jumpExeUnitCfg
=>
DispatchType
.
Disp2Int
case
Exu
.
mulDivExeUnitCfg
=>
DispatchType
.
Disp2Int
case
Exu
.
fmacExeUnitCfg
=>
DispatchType
.
Disp2Fp
case
Exu
.
fmiscExeUnitCfg
=>
DispatchType
.
Disp2Fp
case
Exu
.
ldExeUnitCfg
=>
DispatchType
.
Disp2Ls
case
Exu
.
stExeUnitCfg
=>
DispatchType
.
Disp2Ls
}
}
val
iqSize
=
IssQueSize
val
iqIdxWidth
=
log2Up
(
iqSize
)
val
fastWakeup
=
fixedDelay
>=
0
// NOTE: if do not enable fastWakeup(bypass), set fixedDelay to -1
val
nonBlocked
=
fastWakeup
// FIXME val srcNum = exuCfg.intSrcCnt + exuCfg.fpSrcCnt
val
srcNum
=
3
val
srcNum
=
max
(
exuCfg
.
intSrcCnt
,
exuCfg
.
fpSrcCnt
)
require
(
srcNum
>=
1
&&
srcNum
<=
3
)
println
(
s
"[RsData] ExuConfig: ${exuCfg.name} (srcNum = $srcNum)"
)
...
...
@@ -364,11 +342,11 @@ class ReservationStationData
// recv broadcasted uops form any relative issue queue,
// to simplify wake up logic, the uop broadcasted by this queue self
// are also in 'b
or
adcastedUops'
// are also in 'b
ro
adcastedUops'
val
broadcastedUops
=
Vec
(
wakeupCnt
,
Flipped
(
ValidIO
(
new
MicroOp
)))
// listen to write back data bus(certain latency)
// and extra wr
tie back(uncerta
n latency)
// and extra wr
ite back(uncertai
n latency)
val
writeBackedData
=
Vec
(
wakeupCnt
,
Input
(
UInt
((
XLEN
+
1
).
W
)))
val
extraListenPorts
=
Vec
(
extraListenPortsCnt
,
Flipped
(
ValidIO
(
new
ExuOutput
)))
...
...
@@ -377,7 +355,7 @@ class ReservationStationData
})
val
uop
=
Reg
(
Vec
(
iqSize
,
new
MicroOp
))
val
data
=
Reg
(
Vec
(
iqSize
,
Vec
(
srcNum
,
UInt
((
XLEN
+
1
).
W
))))
val
data
=
Reg
(
Vec
(
iqSize
,
Vec
(
3
,
UInt
((
XLEN
+
1
).
W
))))
// TODO reduce data width
// TODO: change srcNum
...
...
@@ -400,9 +378,9 @@ class ReservationStationData
}
when
(
enqEnReg
)
{
// TODO: turn to srcNum, not the 3
(
0
until
(
exuCfg
.
intSrcCnt
+
exuCfg
.
fpSrcCnt
)
).
foreach
(
i
=>
data
(
enqPtrReg
)(
i
)
:=
io
.
srcRegValue
(
i
))
(
0
until
srcNum
).
foreach
(
i
=>
data
(
enqPtrReg
)(
i
)
:=
io
.
srcRegValue
(
i
))
XSDebug
(
p
"${exuCfg.name}: enqPtrReg:${enqPtrReg} pc: ${Hexadecimal(uop(enqPtrReg).cf.pc)}\n"
)
XSDebug
(
p
"[srcRegValue] src1: ${Hexadecimal(io.srcRegValue(0))} src2: ${Hexadecimal(io.srcRegValue(1))} src3: ${Hexadecimal(io.srcRegValue(2))}
\n"
)
XSDebug
(
"[srcRegValue] "
+
List
.
tabulate
(
srcNum
)(
idx
=>
p
"src$idx: ${Hexadecimal(io.srcRegValue(idx))}"
).
reduce
(
_
+
" "
+
_
)
+
"
\n"
)
}
def
wbHit
(
uop
:
MicroOp
,
src
:
UInt
,
srctype
:
UInt
)
:
Bool
=
{
...
...
@@ -432,7 +410,7 @@ class ReservationStationData
for
(
i
<-
0
until
iqSize
)
{
val
srcSeq
=
Seq
(
uop
(
i
).
psrc1
,
uop
(
i
).
psrc2
,
uop
(
i
).
psrc3
)
val
srcTypeSeq
=
Seq
(
uop
(
i
).
ctrl
.
src1Type
,
uop
(
i
).
ctrl
.
src2Type
,
uop
(
i
).
ctrl
.
src3Type
)
for
(
j
<-
0
until
3
)
{
for
(
j
<-
0
until
srcNum
)
{
val
(
wuHit
,
wuData
)
=
wakeup
(
srcSeq
(
j
),
srcTypeSeq
(
j
))
val
(
bpHit
,
bpHitReg
,
bpData
)
=
bypass
(
srcSeq
(
j
),
srcTypeSeq
(
j
))
when
(
wuHit
||
bpHit
)
{
io
.
ctrl
.
srcUpdate
(
i
)(
j
)
:=
true
.
B
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录