chisel - 如何创建 Chisel 模块的数组/vec
问题描述
我创建了一个名为 SaturatingCounter 的 CHISEL 类(扩展)模块(下面的代码以防万一)。
我想要另一个模块中的这些计数器的数组/序列。
编辑:我找到了这个答案。但是当我尝试
val vec_of_elements = Vec.fill(10) {Module(SaturatingCounter(4)).io}
我收到一个错误
Error:(72, 29) value fill is not a member of object chisel3.Vec
val vec_of_elements = Vec.fill(10) {Module(SaturatingCounter(4)).io}
原始问题的其余部分
所以我尝试创建一个 Vec ,如下所示。这不起作用,因为我的类不是数据类型。我可以让它继承数据,但因为我仍然是一个看起来像一个大飞跃的初学者。
var foo = Vec(10,SaturatingCounter(4))
错误信息:
Error:(46, 23) inferred type arguments [something.SaturatingCounter] do not conform to method apply's type parameter bounds [T <: chisel3.Data]
var foo = Vec(10,SaturatingCounter(4))
Error:(46, 47) type mismatch;
found : something.SaturatingCounter
required: T
var foo = Vec(10,SaturatingCounter(4))
是创建 SaturatingCounter 的数组/序列的正确解决方案吗?
饱和计数器:
class SaturatingCounter (bits: Int) extends Module {
require(bits >= 2)
val io = IO(new Bundle {
val valOut: SInt = Output(SInt(bits.W))
val inc: SInt = Input(SInt(bits.W))
})
val count = RegInit(SInt(bits.W), 0.S)
val minVal: SInt = ((1 << (bits-1)).asUInt())(bits-1,0).asSInt()
val maxVal: SInt = (((1 << bits) - 1) >> 1).asSInt(bits.W)
var sum : SInt = count + io.inc
var operandsSignSame : Bool = io.inc(bits-1) === count(bits-1)
var sumSignDifferent: Bool = sum(bits-1) =/= count(bits-1)
when(operandsSignSame && sumSignDifferent) {
when(count(bits-1)) {
count := minVal
}.otherwise {
count := maxVal
}
}.otherwise {
count := sum
}
io.valOut := count
}
object SaturatingCounter {
def apply(bits: Int): SaturatingCounter = new SaturatingCounter(bits)
}
解决方案
尝试使用它来创建模块并访问它们的io
.
val vec_of_elements = Vec(10, Module(SaturatingCounter(4)).io)
这对我有用。
注意.io
, 通过添加你得到一些类型Data
并且你可以访问io
你在这里创建的所有模块。
一般来说,如果你想使用基于硬件的元素索引,或者你的元素是 IO 的一部分,你只需要一个 Vec。如果你不需要,你可以使用 Scala 集合,如 Seq、Array 或类似的。
推荐阅读
- vb.net - FieldQuoted 似乎无法正常工作
- mysql - SQLException:在 docker 中连接到 mysql 时访问被拒绝
- angular - Angular中的“ExpressionChangedAfterItHasBeenCheckedError:表达式在检查后已更改”错误
- python - 在 xonsh 中,我如何从管道接收到 python 表达式?
- javascript - 如何从 Bootstrap-Vue 重用项目提供程序功能更新 b 表中的项目异步?
- android - Android:按下按钮后如何让软键盘可见
- python - 如何检查闰年日期是否有效
- c - 如何在 Linux 上的 C 中复制时间属性?
- ios - XCTest 断言失败应用程序未运行
- python - 我是否需要在 Python 中为资源包装器实现 Dispose 模式