在扩展黑盒的 class 中使用凿子中的 CustomBundle 模板
Using CustomBundle template in chisel inside a class that extends blackbox
我有一个信号列表,其中包含信号的位宽信息和方向性。我想即时创建这些 IOs 并利用扩展 Record 的 CustomBundle。我能够在不扩展 BlackBox 的正常 class 中执行此操作。但是,当我在扩展黑盒的 class 中使用 CustomBundle 时,我 运行 陷入错误。 CustomBundles 可以在扩展黑盒的 class 中使用吗?如果没有,除了脚本之外还有其他解决方法,以便我可以自动构建黑盒内的信号class。
我想出了一个办法。创建了一个 class 扩展各种信号类型的记录,然后使用黑盒内的捆绑包将它们分组并建立连接。
更新:我不必在 verilog 文件中重命名我的信号
编辑:为 Record
添加示例
import chisel3._
import chisel3.stage.ChiselStage
import chisel3.util.{HasBlackBoxInLine}
import scala.collection.immutable.ListMap
class MyBlackBox extends BlackBox with HasBlackBoxInline{
val io = IO(new MyBundle)
setInline("My_Verilog.v",
s"""
|module MyBlackBox(
| input a,
| input b,
| output c
|);
|always @* begin
| c < = a & b
|end
|endmodule
""".stripMargin)
}
class MyBundle extends Record{
val signalName = Seq(a,b)
val elements_i = ListMap(Seq.tabulate(2){i => signalName(i) -> Input(UInt(1.W))}:_*)
val elements_o = ListMap(Seq.tabulate(1){i => c -> Output(UInt(1.W))}:_*)
val elements = elements_i ++ elements_o
override def cloneType: this.type = (new MyBundle).asInstanceOf[this.type]
}
我有一个信号列表,其中包含信号的位宽信息和方向性。我想即时创建这些 IOs 并利用扩展 Record 的 CustomBundle。我能够在不扩展 BlackBox 的正常 class 中执行此操作。但是,当我在扩展黑盒的 class 中使用 CustomBundle 时,我 运行 陷入错误。 CustomBundles 可以在扩展黑盒的 class 中使用吗?如果没有,除了脚本之外还有其他解决方法,以便我可以自动构建黑盒内的信号class。
我想出了一个办法。创建了一个 class 扩展各种信号类型的记录,然后使用黑盒内的捆绑包将它们分组并建立连接。
更新:我不必在 verilog 文件中重命名我的信号 编辑:为 Record
添加示例import chisel3._
import chisel3.stage.ChiselStage
import chisel3.util.{HasBlackBoxInLine}
import scala.collection.immutable.ListMap
class MyBlackBox extends BlackBox with HasBlackBoxInline{
val io = IO(new MyBundle)
setInline("My_Verilog.v",
s"""
|module MyBlackBox(
| input a,
| input b,
| output c
|);
|always @* begin
| c < = a & b
|end
|endmodule
""".stripMargin)
}
class MyBundle extends Record{
val signalName = Seq(a,b)
val elements_i = ListMap(Seq.tabulate(2){i => signalName(i) -> Input(UInt(1.W))}:_*)
val elements_o = ListMap(Seq.tabulate(1){i => c -> Output(UInt(1.W))}:_*)
val elements = elements_i ++ elements_o
override def cloneType: this.type = (new MyBundle).asInstanceOf[this.type]
}