我正在尝试为我的 IO 定义 Vector of Vector,但我从凿子那里得到一个错误:
vec 元素 'Vec(chisel3.util.DecoupledIO@2b57)' 必须是硬件,而不是裸 Chisel 类型
我写的代码如下:
//Module's argument
,val ArgsOut: Array[Int]
...
...
val Args = for (i <- 0 until ArgsOut.length) yield {
val arg = Vec(ArgsOut(i), Decoupled(UInt()))
arg
}
val outputArg = Vec(Args)
最佳答案
一些需要考虑的事情
- IO端口,即IO Bundle的成员,必须是chisel hardware constructs,args是scala Vector类型,需要是chisel Vec
- Vec 的所有元素必须具有相同的大小,这主要是因为需要能够索引 Vec 的元素。您将 Args 的每个元素作为 Vec,其长度由 ArgsOut 的某些元素决定。 Vec(n, type) 不会
- 真的意味着有一个 2D Vec(Vec( 的解耦 IO 吗?
- Decoupled 中的 UInt 宽度未知。严格来说这不是错误,因为在大多数情况下 Firrtl 可以推断出宽度。但是,对于要求 Vec 的元素都具有相同长度的要求,这又是一个问题。应谨慎使用 IO 中的推断宽度。
我能够像这样在 IOBundle 中构建
val io = IO(new Bundle {
val args = Vec(ArgsOut.length, Vec(ArgsOut(0), Decoupled(UInt(18.W))))
val outputArg = Flipped(args)
})
哪个可以编译,但可能不是您想要的。我能够使用 io 连接
io.outputArg <> io.args
如果这似乎不适合您的用例,我需要更多地了解您打算如何使用这些字段,我们应该能够弄清楚如何将它们连接起来。
关于chisel - 定义 IO 时如何创建向量的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47128184/