我有一堆Verilog IP,出于各种原因,我们不想(或不容易)转换为Chisel,但是我现在想利用Chisel的一些可配置性,直到我们过渡一些设计。
我的目标是能够将IP实例化为BlackBoxes,然后使用Chisels Bundle连接功能。我已经研究和玩过BlackBox / ExtModule类,而这似乎正是我所需要的。我现在遇到的唯一问题是,我希望能够创建信号组的子捆绑。参见图片中的简单示例:
这是我希望我的BlackBox类看起来像的一个示例:
class BB1 extends BlackBox {
val io = IO(new Bundle{
val other_TOP = (new Bundle{
val in0 = Input (Bool())
val in1 = Input (Bool())
val d0 = Input (UInt(4.W))
val d1 = Input (UInt(4.W))
})
val apb = (new Bundle{
val apb_clk = Input (Bool())
val apb_paddr = Input (UInt(8.W))
val apb_penable = Input (Bool())
val apb_psel = Input (Bool())
val apb_pwrite = Input (Bool())
val apb_rddata = Output (UInt(32.W))
val apb_reset = Input (Bool())
val apb_wrdata = Input (UInt(32.W))
})
val other_BOTTOM = (new Bundle{
val out0 = Input (Bool())
val dout0 = Input (UInt(18.W))
})
})
}
这可以按预期工作,但是我得到的问题是子捆绑包名称以信号名称为前缀。例如apb_clk
在实例中的名称为apb_apb_clk
。我知道为什么会发生这种情况,但是仍然可以禁用此功能吗?我尝试了一些.suggestName,但似乎没有任何效果。
尽管OP要求使用MultiIOModule,但github(https://github.com/freechipsproject/chisel3/issues/612)上的该问题似乎与同一问题有关。我看到了最后一条评论是“不会解决”的地方。我想知道是否为此功能做了补充,或者在创建包装器之外是否有任何解决方法。我实际上正在寻找使用Chisel来连接多个BlackBox的方法,所以我宁愿不要仅仅为了将它们连接起来而制作包装器。
感谢您的帮助
答案 0 :(得分:0)
只需回答这个问题。我最终使用Bundle名称将编译器“欺骗”到我想要的名称和Bundle关系中(基本上证明是包装器)。虽然这不是一个完全干净的解决方案,但我要说的是Chisel / FIRRTL如何以这样一种方式创建RTL,即不需要额外的包装程序就可以轻松集成BlackBox模块。