Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
a1c4d65b
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 搜索 >>
提交
a1c4d65b
编写于
7月 12, 2020
作者:
Y
Yinan Xu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
dispatch2: allow configurations via exuConfig
上级
c7cacdf5
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
31 addition
and
18 deletion
+31
-18
src/main/scala/xiangshan/backend/Backend.scala
src/main/scala/xiangshan/backend/Backend.scala
+1
-1
src/main/scala/xiangshan/backend/dispatch/Dispatch.scala
src/main/scala/xiangshan/backend/dispatch/Dispatch.scala
+4
-3
src/main/scala/xiangshan/backend/dispatch/Dispatch2.scala
src/main/scala/xiangshan/backend/dispatch/Dispatch2.scala
+6
-5
src/main/scala/xiangshan/backend/dispatch/DispatchGen.scala
src/main/scala/xiangshan/backend/dispatch/DispatchGen.scala
+20
-9
未找到文件。
src/main/scala/xiangshan/backend/Backend.scala
浏览文件 @
a1c4d65b
...
...
@@ -34,7 +34,7 @@ class Backend(implicit val p: XSConfig) extends XSModule
val
brq
=
Module
(
new
Brq
)
val
decBuf
=
Module
(
new
DecodeBuffer
)
val
rename
=
Module
(
new
Rename
)
val
dispatch
=
Module
(
new
Dispatch
)
val
dispatch
=
Module
(
new
Dispatch
(
exeUnits
.
map
(
_
.
config
))
)
val
roq
=
Module
(
new
Roq
)
val
intRf
=
Module
(
new
Regfile
(
numReadPorts
=
NRReadPorts
,
...
...
src/main/scala/xiangshan/backend/dispatch/Dispatch.scala
浏览文件 @
a1c4d65b
...
...
@@ -3,10 +3,11 @@ package xiangshan.backend.dispatch
import
chisel3._
import
chisel3.util._
import
xiangshan._
import
xiangshan.backend.exu.ExuConfig
import
xiangshan.utils._
import
xiangshan.backend.regfile.RfReadPort
class
Dispatch
extends
XSModule
{
class
Dispatch
(
exuCfg
:
Array
[
ExuConfig
])
extends
XSModule
{
val
io
=
IO
(
new
Bundle
()
{
val
redirect
=
Flipped
(
ValidIO
(
new
Redirect
))
// from rename
...
...
@@ -27,14 +28,14 @@ class Dispatch extends XSModule {
val
enqIQData
=
Vec
(
exuParameters
.
ExuCnt
,
ValidIO
(
new
ExuInput
))
})
// pipeline between rename and dispatch
val
dispatch1
=
Module
(
new
Dispatch1
()
)
val
dispatch1
=
Module
(
new
Dispatch1
)
for
(
i
<-
0
until
RenameWidth
)
{
PipelineConnect
(
io
.
fromRename
(
i
),
dispatch1
.
io
.
fromRename
(
i
),
dispatch1
.
io
.
recv
(
i
),
false
.
B
)
}
val
intDq
=
Module
(
new
DispatchQueue
(
dp1Paremeters
.
IntDqSize
,
RenameWidth
,
IntDqDeqWidth
,
"IntDpQ"
))
val
fpDq
=
Module
(
new
DispatchQueue
(
dp1Paremeters
.
FpDqSize
,
RenameWidth
,
FpDqDeqWidth
,
"FpDpQ"
))
val
lsDq
=
Module
(
new
DispatchQueue
(
dp1Paremeters
.
LsDqSize
,
RenameWidth
,
LsDqDeqWidth
,
"LsDpQ"
))
val
dispatch2
=
Module
(
new
Dispatch2
())
val
dispatch2
=
Module
(
new
Dispatch2
(
exuCfg
))
dispatch1
.
io
.
redirect
<>
io
.
redirect
dispatch1
.
io
.
toRoq
<>
io
.
toRoq
...
...
src/main/scala/xiangshan/backend/dispatch/Dispatch2.scala
浏览文件 @
a1c4d65b
...
...
@@ -3,10 +3,11 @@ package xiangshan.backend.dispatch
import
chisel3._
import
chisel3.util._
import
xiangshan._
import
xiangshan.backend.exu.ExuConfig
import
xiangshan.backend.regfile.RfReadPort
import
xiangshan.utils.
{
XSDebug
,
XSInfo
}
class
Dispatch2
extends
XSModule
{
class
Dispatch2
(
exuCfg
:
Array
[
ExuConfig
])
extends
XSModule
{
val
io
=
IO
(
new
Bundle
()
{
// from dispatch queues
val
fromIntDq
=
Flipped
(
Vec
(
IntDqDeqWidth
,
DecoupledIO
(
new
MicroOp
)))
...
...
@@ -21,9 +22,9 @@ class Dispatch2 extends XSModule{
val
fpPregRdy
=
Vec
(
NRReadPorts
,
Input
(
Bool
()))
// enq Issue Queue
val
numExist
=
Input
(
Vec
(
exu
Parameters
.
ExuCnt
,
UInt
(
log2Ceil
(
IssQueSize
).
W
)))
val
enqIQCtrl
=
Vec
(
exu
Parameters
.
ExuCnt
,
DecoupledIO
(
new
MicroOp
))
val
enqIQData
=
Vec
(
exu
Parameters
.
ExuCnt
,
ValidIO
(
new
ExuInput
))
val
numExist
=
Input
(
Vec
(
exu
Cfg
.
length
,
UInt
(
log2Ceil
(
IssQueSize
).
W
)))
val
enqIQCtrl
=
Vec
(
exu
Cfg
.
length
,
DecoupledIO
(
new
MicroOp
))
val
enqIQData
=
Vec
(
exu
Cfg
.
length
,
ValidIO
(
new
ExuInput
))
})
for
(
i
<-
0
until
IntDqDeqWidth
)
{
...
...
@@ -40,7 +41,7 @@ class Dispatch2 extends XSModule{
}
// inst indexes for reservation stations
val
rsIndexGen
=
Module
(
new
DispatchGen
())
val
rsIndexGen
=
Module
(
new
DispatchGen
(
exuCfg
))
rsIndexGen
.
io
.
fromIntDq
:=
io
.
fromIntDq
rsIndexGen
.
io
.
fromFpDq
:=
io
.
fromFpDq
rsIndexGen
.
io
.
fromLsDq
:=
io
.
fromLsDq
...
...
src/main/scala/xiangshan/backend/dispatch/DispatchGen.scala
浏览文件 @
a1c4d65b
...
...
@@ -3,9 +3,10 @@ package xiangshan.backend.dispatch
import
chisel3._
import
chisel3.util._
import
xiangshan._
import
xiangshan.utils.
{
XSDebug
}
import
xiangshan.backend.exu.ExuConfig
import
xiangshan.utils.XSDebug
class
DispatchGen
extends
XSModule
{
class
DispatchGen
(
exuCfg
:
Array
[
ExuConfig
])
extends
XSModule
{
val
io
=
IO
(
new
Bundle
()
{
// from dispatch queues
val
fromIntDq
=
Flipped
(
Vec
(
IntDqDeqWidth
,
ValidIO
(
new
MicroOp
)))
...
...
@@ -60,19 +61,29 @@ class DispatchGen extends XSModule {
(
0
until
exunum
).
map
(
i
=>
IQIndex
(
priority
(
i
)))
}
val
bruIQIndex
=
genIQIndex
(
exuParameters
.
JmpCnt
,
IntDqDeqWidth
,
io
.
fromIntDq
.
map
(
_
.
bits
.
ctrl
.
fuType
===
FuType
.
jmp
),
val
intCanAcceptMatrix
=
io
.
fromIntDq
.
map
(
deq
=>
(
0
until
exuParameters
.
IntExuCnt
).
map
(
i
=>
exuCfg
(
i
).
canAccept
(
deq
.
bits
.
ctrl
.
fuType
))
)
val
fpCanAcceptMatrix
=
io
.
fromFpDq
.
map
(
deq
=>
(
exuParameters
.
IntExuCnt
until
exuParameters
.
IntExuCnt
+
exuParameters
.
FpExuCnt
).
map
(
i
=>
exuCfg
(
i
).
canAccept
(
deq
.
bits
.
ctrl
.
fuType
))
)
val
lsCanAcceptMatrix
=
io
.
fromFpDq
.
map
(
deq
=>
(
exuParameters
.
IntExuCnt
+
exuParameters
.
FpExuCnt
until
exuParameters
.
ExuCnt
).
map
(
i
=>
exuCfg
(
i
).
canAccept
(
deq
.
bits
.
ctrl
.
fuType
))
)
val
bruIQIndex
=
genIQIndex
(
exuParameters
.
JmpCnt
,
IntDqDeqWidth
,
intCanAcceptMatrix
.
map
(
_
(
0
)),
(
0
until
exuParameters
.
JmpCnt
).
map
(
i
=>
io
.
numExist
(
i
)))
val
aluIQIndex
=
genIQIndex
(
exuParameters
.
AluCnt
,
IntDqDeqWidth
,
i
o
.
fromIntDq
.
map
(
_
.
bits
.
ctrl
.
fuType
===
FuType
.
alu
),
val
aluIQIndex
=
genIQIndex
(
exuParameters
.
AluCnt
,
IntDqDeqWidth
,
i
ntCanAcceptMatrix
.
map
(
_
(
exuParameters
.
JmpCnt
)
),
(
0
until
exuParameters
.
AluCnt
).
map
(
i
=>
io
.
numExist
(
exuParameters
.
JmpCnt
+
i
)))
val
mulIQIndex
=
genIQIndex
(
exuParameters
.
MulCnt
,
IntDqDeqWidth
,
i
o
.
fromIntDq
.
map
(
_
.
bits
.
ctrl
.
fuType
===
FuType
.
mul
),
val
mulIQIndex
=
genIQIndex
(
exuParameters
.
MulCnt
,
IntDqDeqWidth
,
i
ntCanAcceptMatrix
.
map
(
_
(
exuParameters
.
JmpCnt
+
exuParameters
.
AluCnt
)
),
(
0
until
exuParameters
.
MulCnt
).
map
(
i
=>
io
.
numExist
(
exuParameters
.
JmpCnt
+
exuParameters
.
AluCnt
+
i
)))
val
muldivIQIndex
=
genIQIndex
(
exuParameters
.
MduCnt
,
IntDqDeqWidth
,
io
.
fromIntDq
.
map
(
_
.
bits
.
ctrl
.
fuType
===
FuType
.
div
),
val
muldivIQIndex
=
genIQIndex
(
exuParameters
.
MduCnt
,
IntDqDeqWidth
,
io
.
fromIntDq
.
zipWithIndex
.
map
({
case
(
deq
,
i
)
=>
deq
.
bits
.
ctrl
.
fuType
===
FuType
.
div
||
(
deq
.
bits
.
ctrl
.
fuType
===
FuType
.
mul
&&
i
.
U
>
mulIQIndex
(
0
))
}),
(
0
until
exuParameters
.
MduCnt
).
map
(
i
=>
io
.
numExist
(
exuParameters
.
JmpCnt
+
exuParameters
.
AluCnt
+
exuParameters
.
MulCnt
+
i
)))
val
fmacIQIndex
=
genIQIndex
(
exuParameters
.
FmacCnt
,
FpDqDeqWidth
,
i
o
.
fromFpDq
.
map
(
_
.
bits
.
ctrl
.
fuType
===
FuType
.
fmac
),
val
fmacIQIndex
=
genIQIndex
(
exuParameters
.
FmacCnt
,
FpDqDeqWidth
,
i
f
(
exuParameters
.
FmacCnt
>
0
)
fpCanAcceptMatrix
.
map
(
_
(
0
))
else
Seq
(
),
(
0
until
exuParameters
.
FmacCnt
).
map
(
i
=>
io
.
numExist
(
exuParameters
.
IntExuCnt
+
i
)))
val
fmiscIQIndex
=
genIQIndex
(
exuParameters
.
FmiscCnt
,
FpDqDeqWidth
,
i
o
.
fromFpDq
.
map
(
_
.
bits
.
ctrl
.
fuType
===
FuType
.
fmisc
),
val
fmiscIQIndex
=
genIQIndex
(
exuParameters
.
FmiscCnt
,
FpDqDeqWidth
,
i
f
(
exuParameters
.
FmiscCnt
>
0
)
fpCanAcceptMatrix
.
map
(
_
(
exuParameters
.
FmacCnt
))
else
Seq
(
),
(
0
until
exuParameters
.
FmiscCnt
).
map
(
i
=>
io
.
numExist
(
exuParameters
.
IntExuCnt
+
exuParameters
.
FmacCnt
+
i
)))
val
lduIQIndex
=
genIQIndex
(
exuParameters
.
LduCnt
,
LsDqDeqWidth
,
io
.
fromLsDq
.
map
(
_
.
bits
.
ctrl
.
fuType
===
FuType
.
ldu
),
val
lduIQIndex
=
genIQIndex
(
exuParameters
.
LduCnt
,
LsDqDeqWidth
,
lsCanAcceptMatrix
.
map
(
_
(
0
)
),
(
0
until
exuParameters
.
LduCnt
).
map
(
i
=>
io
.
numExist
(
exuParameters
.
IntExuCnt
+
exuParameters
.
FpExuCnt
+
i
)))
// val stuIQIndex = genIQIndex(exuParameters.StuCnt, LsDqDeqWidth, io.fromLsDq.map(_.bits.ctrl.fuType === FuType.stu))
val
stuIQIndex
=
genIQIndex
(
exuParameters
.
StuCnt
,
LsDqDeqWidth
,
io
.
fromLsDq
.
map
(
deq
=>
FuType
.
isMemExu
(
deq
.
bits
.
ctrl
.
fuType
)),
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录