【发布时间】:2020-03-30 19:22:08
【问题描述】:
我有一堆 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,但似乎没有任何效果。
github (https://github.com/freechipsproject/chisel3/issues/612) 上的这个问题似乎与同一问题有关,尽管 OP 要求使用 MultiIOModule。我看到最后一条评论是“不会修复”。我想知道是否已为此功能添加了内容,或者在创建包装器之外是否有任何解决方法。我实际上希望使用 Chisel 连接多个 BlackBox,所以我不想制作包装器来连接它们。
感谢您的帮助
【问题讨论】:
-
抱歉,如果这是一个愚蠢的建议,但是删除捆绑包字段中的所有
abp_怎么样? -
这是我确实考虑过的,它适用于我们的一些 IP,但是我们确实有一些 IP 没有遵循命名约定,因此全局方法会更好。也就是说,如果没有其他更容易的方法,这是我会做的解决方法。
-
另外我想说的是,在上面的例子中,“其他”接口,如果它们不遵循命名约定,我就不能放入子包。然而,这不是表演的终结者。
-
是的,我同意应该有更好的方法来处理这个问题,但目前我们没有任何实用程序/功能。如果您有想法,请提出问题!
标签: chisel