从列表生成 Chisel 模块 IO 接口

Generating Chisel Module IO Interface From a List

我想从存储在 Scala 变量中的规范生成模块 IO 接口。

我想生成这个 class 定义:

class AddIfc extends Module {
   val io = IO(new Bundle {
     val a = Input(UInt(8.W))
     val b = Input(UInt(8.W))
     val o = Output(UInt(8.W))
   })
}

来自元组列表之类的东西:

List( ("a", "in", 8), ("b", "in", 8), ("o", "out", 8))

我可以想象构建一个 AST 并使用 Scala 中的一些反射功能对其进行评估。有没有人这样做过并有例子可以展示?

看看 Record(Bundle 的父 class)。它们更高级一些,因为您必须实现元素(而不是反射在 Bundle 中为您完成),并且您必须实现 cloneType。

有个example in the Chisel tests.