删除嵌套包的包前缀?
Remove Bundle prefixes for nested bundles?
我有一堆 Verilog IP,出于各种原因我们不想(或不能轻易)转换为 Chisel,但我想暂时利用 Chisel 的一些可配置性,直到我们可以过渡一些设计。
我的目标是能够将我的 IP 实例化为 BlackBox,然后使用 Chisels Bundle 连接功能。我已经研究并使用了 BlackBox/ExtModule classes,而这个 似乎 正是我所需要的。我现在 运行 遇到的唯一问题是我希望能够创建信号组的子束。请参阅图像以获取简单示例:
这是我希望我的 BlackBox class 看起来像的示例:
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。我看到最后一条评论是 "Won't Fix"。我想知道是否已为此功能添加了内容,或者是否有创建包装器之外的任何解决方法。我实际上正在寻找使用 Chisel 来连接多个 BlackBox,所以我不想制作包装器只是为了连接它们。
感谢您的帮助
只是为了回答这个问题。我最终使用 Bundle names to "trick" 编译器达到我想要的名称和 Bundle 关系(这基本上是一个包装器)。虽然这不是一个完全干净的解决方案,但我会说 Chisel/FIRRTL 如何以这样的方式创建 RTL,即额外的包装器不是那么多 work/hierarchy 以允许轻松集成 BlackBox 模块。
我有一堆 Verilog IP,出于各种原因我们不想(或不能轻易)转换为 Chisel,但我想暂时利用 Chisel 的一些可配置性,直到我们可以过渡一些设计。
我的目标是能够将我的 IP 实例化为 BlackBox,然后使用 Chisels Bundle 连接功能。我已经研究并使用了 BlackBox/ExtModule classes,而这个 似乎 正是我所需要的。我现在 运行 遇到的唯一问题是我希望能够创建信号组的子束。请参阅图像以获取简单示例:
这是我希望我的 BlackBox class 看起来像的示例:
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。我看到最后一条评论是 "Won't Fix"。我想知道是否已为此功能添加了内容,或者是否有创建包装器之外的任何解决方法。我实际上正在寻找使用 Chisel 来连接多个 BlackBox,所以我不想制作包装器只是为了连接它们。
感谢您的帮助
只是为了回答这个问题。我最终使用 Bundle names to "trick" 编译器达到我想要的名称和 Bundle 关系(这基本上是一个包装器)。虽然这不是一个完全干净的解决方案,但我会说 Chisel/FIRRTL 如何以这样的方式创建 RTL,即额外的包装器不是那么多 work/hierarchy 以允许轻松集成 BlackBox 模块。