gpt4 book ai didi

chisel - 定义 IO 时如何创建向量的向量

转载 作者:行者123 更新时间:2023-12-01 06:13:33 24 4
gpt4 key购买 nike

我正在尝试为我的 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)

最佳答案

一些需要考虑的事情

  1. IO端口,即IO Bundle的成员,必须是chisel hardware constructs,args是scala Vector类型,需要是chisel Vec
  2. Vec 的所有元素必须具有相同的大小,这主要是因为需要能够索引 Vec 的元素。您将 Args 的每个元素作为 Vec,其长度由 ArgsOut 的某些元素决定。 Vec(n, type) 不会
    1. 真的意味着有一个 2D Vec(Vec( 的解耦 IO 吗?
  3. 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com