1

假设有一个B模块,其中A是一个实例。

class B extends Module {
  …
  val u_A = Module(new A)
    // the way to hook u_A’s port is the issue
} 

A模块说明:

class A extends Module {
  val io = IO(new Bundle{
    val a = Output(Bool())
  })
  io.a := true.B
}

黑盒的声明A

class A extends BlackBox {
  val io = IO(new Bundle{
    val io_a = Output(Bool()) // HAVE to define port name with io_* prefix otherwise ...
  })
}

您必须在 BlackBox 中使用 io_ 前缀定义端口名称,否则BRTL 中生成的端口列表将与A模块不匹配。对于 Module 实例化,挂接 u_A 端口的方法是

u_A.io.a

对于 BlackBox 实例化,挂钩 u_A 端口的方法是

u_A.io.io_a

你能告诉我是否有更方便的方法吗?

4

1 回答 1

1

BlackBox 和 Module io 发射之间的不匹配是一个遗留 API,用于更好地与 Verilog IP 集成,其中 Chisel 设计人员几乎无法控制 Verilog。我们正在考虑一种更明确和结构化的方法来处理这种丢弃前缀的“不可见”捆绑包,因为在其他情况下它们会很有用。

不过,要回答您的问题,还有一种更方便的方法。我们正在试验所谓的“多 IO 模块”,您可以在其中IO(...)多次在模块内使用来创建端口。您实际上并不需要该功能,但它为我们提供chisel3.experimental.ExtModuleBlackBox. ExtModule不会默默地删除前缀,因此如果您切换到扩展它而不是BlackBox您将获得所需的行为。

于 2017-07-06T15:57:45.497 回答