【问题标题】:port name issue of those are defined in the BlackBox端口名称问题在 BlackBox 中定义
【发布时间】:2017-07-05 10:18:01
【问题描述】:

假设有一个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
}

ABlackBox的声明:

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 模块不匹配。 对于Module实例化,挂接u_A端口的方式是

u_A.io.a

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

u_A.io.io_a

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

【问题讨论】:

    标签: scala chisel black-box


    【解决方案1】:

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

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

    【讨论】:

    • 请问chisel3.experimental 是那些新实验的包吗?
    • 是的,我们在chisel3.experimental 中添加了新功能,只是为了表明我们正在引入一个可能会发生变化的新 API。我们不打算更改这些 API,我们只是想明确表示我们可能
    猜你喜欢
    • 1970-01-01
    • 2018-10-24
    • 1970-01-01
    • 2022-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多