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

标签 chisel

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

相关文章:

complex-numbers - 复数的类型类

reset - 异步 negedge 重置的可能解决方法?

chisel - chisel3 中的 BlackBox 功能

chisel - 如何指定chisel的后处理器?

chisel - 在 Chisel3 中创建通用 Bundle

Chisel:将单独的输入和输出端口映射到 inout 引脚

riscv - 学习凿子-了解火箭芯片代码的高级示例

scala - 使用 Chisel3 的两个信号 4 位之间的内积(点积。)

riscv - Chisel 中的 Queue() 函数有什么作用?

chisel - 如何调用内部定义的变量 withClockAndReset