Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenXiangShan
XiangShan
提交
3a76b099
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 搜索 >>
提交
3a76b099
编写于
6月 08, 2023
作者:
X
Xuan Hu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
utils: add PipeWithFlush
上级
0655b1a0
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
72 addition
and
0 deletion
+72
-0
src/main/scala/utils/PipeWithFlush.scala
src/main/scala/utils/PipeWithFlush.scala
+49
-0
src/test/scala/xiangshan/utils/GenPipeWithFlush.scala
src/test/scala/xiangshan/utils/GenPipeWithFlush.scala
+23
-0
未找到文件。
src/main/scala/utils/PipeWithFlush.scala
0 → 100644
浏览文件 @
3a76b099
package
utils
import
chisel3._
import
chisel3.util._
import
top.
{
ArgParser
,
BaseConfig
,
DefaultConfig
}
import
xiangshan._
import
xiangshan.backend.Bundles.DynInst
/** Pipeline module generator parameterized by data type and latency.
*
* @param gen a Chisel type, used as data in pipe
* @param flushGen a Chisel type, used as flush signal
* @param latency the number of pipeline stages
* @param flushFunc used to generate flush signal
* @tparam T Type of [[io.enq.bits]] and [[io.deq.bits]]
* @tparam TFlush Type of [[io.flush]]
*/
class
PipeWithFlush
[
T
<:
Data
,
TFlush
<:
Data
]
(
val
gen
:
T
,
val
flushGen
:
TFlush
,
val
latency
:
Int
,
flushFunc
:
(
T
,
TFlush
)
=>
Bool
)
extends
Module
{
require
(
latency
>=
0
,
"Pipe latency must be greater than or equal to zero!"
)
class
PipeIO
extends
Bundle
{
val
flush
=
Flipped
(
flushGen
)
val
enq
=
Input
(
Valid
(
gen
))
val
deq
=
Output
(
Valid
(
gen
))
}
val
io
=
IO
(
new
PipeIO
)
if
(
latency
==
0
)
{
io
.
deq
:=
io
.
enq
}
else
{
val
valids
:
Seq
[
Bool
]
=
io
.
enq
.
valid
+:
Seq
.
fill
(
latency
)(
RegInit
(
false
.
B
))
val
bits
:
Seq
[
T
]
=
io
.
enq
.
bits
+:
Seq
.
fill
(
latency
)(
Reg
(
gen
))
for
(
i
<-
0
until
latency
)
{
valids
(
i
+
1
)
:=
valids
(
i
)
&&
!
flushFunc
(
bits
(
i
),
io
.
flush
)
when
(
valids
(
i
))
{
bits
(
i
+
1
)
:=
bits
(
i
)
}
}
io
.
deq
.
valid
:=
valids
.
last
io
.
deq
.
bits
:=
bits
.
last
}
}
src/test/scala/xiangshan/utils/GenPipeWithFlush.scala
0 → 100644
浏览文件 @
3a76b099
package
xiangshan.utils
import
chisel3.emitVerilog
import
chisel3.util.ValidIO
import
top.ArgParser
import
utils.PipeWithFlush
import
xiangshan.
{
Redirect
,
XSCoreParamsKey
,
XSTileKey
}
import
xiangshan.backend.Bundles.DynInst
object
GenPipeWithFlush
extends
App
{
println
(
"Generating the VerilogPipeWithFlush hardware"
)
val
(
config
,
firrtlOpts
,
firrtlComplier
,
firtoolOpts
)
=
ArgParser
.
parse
(
args
)
val
p
=
config
.
alterPartial
({
case
XSCoreParamsKey
=>
config
(
XSTileKey
).
head
})
emitVerilog
(
new
PipeWithFlush
[
DynInst
,
ValidIO
[
Redirect
]](
new
DynInst
()(
p
),
ValidIO
(
new
Redirect
()(
p
)),
2
,
(
dynInst
:
DynInst
,
flush
:
ValidIO
[
Redirect
])
=>
dynInst
.
robIdx
.
needFlush
(
flush
)
),
Array
(
"--target-dir"
,
"build/vifu"
))
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录