假设有一个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模块不匹配。对于Module实例化,挂接u_A的端口的方法是
u_A.io.a对于BlackBox实例化,挂接u_A的端口的方法是
u_A.io.io_a你能告诉我有没有更方便的方法吗?
发布于 2017-07-06 23:57:45
BlackBox和模块io发射之间的不匹配是为了更好地与Verilog IP集成的传统应用程序接口,在这种情况下,雕刻机设计师对Verilog几乎没有控制。我们正在考虑一种更明确和更结构化的方式来处理这种丢弃前缀的“不可见”包,因为在其他情况下它们是有用的。
不过,为了回答您的问题,有一种更方便的方法。我们正在试验所谓的“多IO模块”,您可以在一个模块中多次使用IO(...)来创建端口。在这里,您实际上并不需要该特性,但它为我们提供了chisel3.experimental.ExtModule-- BlackBox的替代方案。ExtModule不会静默地删除前缀,因此如果您切换到扩展前缀而不是BlackBox,您将获得所需的行为。
https://stackoverflow.com/questions/44923400
复制相似问题