Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
330aa36c
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 搜索 >>
提交
330aa36c
编写于
1月 14, 2021
作者:
L
LinJiawei
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
regfile wb: print arbiter config
上级
8926ac22
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
40 addition
and
21 deletion
+40
-21
src/main/scala/xiangshan/backend/FloatBlock.scala
src/main/scala/xiangshan/backend/FloatBlock.scala
+3
-2
src/main/scala/xiangshan/backend/IntegerBlock.scala
src/main/scala/xiangshan/backend/IntegerBlock.scala
+3
-2
src/main/scala/xiangshan/backend/exu/Wb.scala
src/main/scala/xiangshan/backend/exu/Wb.scala
+34
-17
未找到文件。
src/main/scala/xiangshan/backend/FloatBlock.scala
浏览文件 @
330aa36c
...
...
@@ -156,8 +156,9 @@ class FloatBlock
(
0
until
exuParameters
.
StuCnt
).
foreach
(
i
=>
io
.
toMemBlock
.
readFpRf
(
i
).
data
:=
fpRf
.
io
.
readPorts
(
i
+
12
).
data
)
// write fp rf arbiter
val
fpWbArbiter
=
Module
(
new
Wb
(
(
exeUnits
.
map
(
_
.
config
)
++
fastWakeUpIn
++
slowWakeUpIn
).
map
(
_
.
wbFpPriority
),
NRFpWritePorts
(
exeUnits
.
map
(
_
.
config
)
++
fastWakeUpIn
++
slowWakeUpIn
),
NRFpWritePorts
,
isFp
=
true
))
fpWbArbiter
.
io
.
in
<>
exeUnits
.
map
(
_
.
io
.
toFp
)
++
io
.
wakeUpIn
.
fast
++
io
.
wakeUpIn
.
slow
...
...
src/main/scala/xiangshan/backend/IntegerBlock.scala
浏览文件 @
330aa36c
...
...
@@ -219,8 +219,9 @@ class IntegerBlock
(
0
until
NRMemReadPorts
).
foreach
(
i
=>
io
.
toMemBlock
.
readIntRf
(
i
).
data
:=
intRf
.
io
.
readPorts
(
i
+
8
).
data
)
// write int rf arbiter
val
intWbArbiter
=
Module
(
new
Wb
(
(
exeUnits
.
map
(
_
.
config
)
++
fastWakeUpIn
++
slowWakeUpIn
).
map
(
_
.
wbIntPriority
),
NRIntWritePorts
(
exeUnits
.
map
(
_
.
config
)
++
fastWakeUpIn
++
slowWakeUpIn
),
NRIntWritePorts
,
isFp
=
false
))
intWbArbiter
.
io
.
in
<>
exeUnits
.
map
(
_
.
io
.
toInt
)
++
io
.
wakeUpIn
.
fast
++
io
.
wakeUpIn
.
slow
...
...
src/main/scala/xiangshan/backend/exu/Wb.scala
浏览文件 @
330aa36c
...
...
@@ -6,9 +6,12 @@ import xiangshan._
import
utils._
class
Wb
(
priorities
:
Seq
[
Int
],
numOut
:
Int
)
extends
XSModule
{
class
Wb
(
cfgs
:
Seq
[
ExuConfig
],
numOut
:
Int
,
isFp
:
Boolean
)
extends
XSModule
{
val
priorities
=
cfgs
.
map
(
c
=>
if
(
isFp
)
c
.
wbFpPriority
else
c
.
wbIntPriority
)
val
io
=
IO
(
new
Bundle
()
{
val
in
=
Vec
(
prioritie
s
.
size
,
Flipped
(
DecoupledIO
(
new
ExuOutput
)))
val
in
=
Vec
(
cfg
s
.
size
,
Flipped
(
DecoupledIO
(
new
ExuOutput
)))
val
out
=
Vec
(
numOut
,
ValidIO
(
new
ExuOutput
))
})
...
...
@@ -35,7 +38,7 @@ class Wb(priorities: Seq[Int], numOut: Int) extends XSModule {
}
def
splitN
[
T
](
in
:
Seq
[
T
],
n
:
Int
)
:
Seq
[
Option
[
Seq
[
T
]]]
=
{
require
(
n
>
0
)
if
(
n
==
0
)
return
Seq
(
)
if
(
n
==
1
){
Seq
(
Some
(
in
))
}
else
{
...
...
@@ -48,24 +51,38 @@ class Wb(priorities: Seq[Int], numOut: Int) extends XSModule {
}
}
if
(
mulReq
.
nonEmpty
){
val
arbReq
=
splitN
(
otherReq
,
mulReq
.
size
)
for
(
i
<-
mulReq
.
indices
)
{
val
other
=
arbReq
(
i
).
getOrElse
(
Seq
())
val
arb
=
Module
(
new
Arbiter
(
new
ExuOutput
,
1
+
other
.
size
))
arb
.
io
.
in
<>
mulReq
(
i
)
+:
other
val
out
=
io
.
out
(
directConnect
.
size
+
i
)
out
.
valid
:=
arb
.
io
.
out
.
valid
out
.
bits
:=
arb
.
io
.
out
.
bits
arb
.
io
.
out
.
ready
:=
true
.
B
}
val
arbReq
=
splitN
(
otherReq
,
mulReq
.
size
)
val
arbiters
=
for
(
i
<-
mulReq
.
indices
)
yield
{
val
other
=
arbReq
(
i
).
getOrElse
(
Seq
())
val
arb
=
Module
(
new
Arbiter
(
new
ExuOutput
,
1
+
other
.
size
))
arb
.
io
.
in
<>
mulReq
(
i
)
+:
other
val
out
=
io
.
out
(
directConnect
.
size
+
i
)
out
.
valid
:=
arb
.
io
.
out
.
valid
out
.
bits
:=
arb
.
io
.
out
.
bits
arb
.
io
.
out
.
ready
:=
true
.
B
arb
}
if
(
portUsed
<
numOut
){
println
(
s
"Warning: ${numOut - portUsed} ports are not used!"
)
io
.
out
.
drop
(
portUsed
).
foreach
(
_
<>
DontCare
)
}
val
sb
=
new
StringBuffer
(
s
"\n${if(isFp) "
fp
" else "
int
"} wb arbiter:\n"
)
for
((
conn
,
i
)
<-
directConnect
.
zipWithIndex
){
sb
.
append
(
s
"[ ${cfgs(io.in.indexOf(conn)).name} ] -> out #$i\n"
)
}
for
(
i
<-
mulReq
.
indices
){
sb
.
append
(
s
"[ ${cfgs(io.in.indexOf(mulReq(i))).name} "
)
for
(
req
<-
arbReq
(
i
).
getOrElse
(
Nil
)){
sb
.
append
(
s
"${cfgs(io.in.indexOf(req)).name} "
)
}
sb
.
append
(
s
"] -> arb -> out #${directConnect.size + i}\n"
)
}
println
(
sb
)
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录