这些端口名称问题在BlackBox中定义

时间:2017-07-05 10:18:01

标签: scala chisel black-box

假设有一个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 BlackBox的声明:

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_的端口名称,否则B RTL中生成的端口列表将与A模块不匹配。 对于模块实例化,挂钩u_A端口的方式是

u_A.io.a

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

u_A.io.io_a

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

1 个答案:

答案 0 :(得分:1)

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

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