首页 > 解决方案 > 在chisel中,如何判断一个模块的Bundle是否实际生成为verilog

问题描述

在凿子中,如果我像这样定义模块的捆绑包。

class tmp extends Module{
  val io  = IO(new Bundle  {
    val enable = Input(Bool())
    val data = Input(UInt(4.W))
    val out = Output(UInt(4.W))
    val tmp = Output(UInt(32.W))
  })
  io.out := RegEnable(io.data, io.enable)
  io.tmp := RegEnable(!io.data, io.enable)
}

然后我在上层模块中调用它

class q extends Module{
  val io  = IO(new Bundle{
    val in = Input(UInt(4.W))
    val out = Output(UInt(32.W))
})
  val q = Module(new tmp)
  q.io.enable := true
  q.io.data := io.in
  io.out := q.io.out
}

tmp 模块的 tmp 包不会生成为 verilog。如果不查看verilog,我怎么知道不会生成像tmp 这样的包。

标签: chisel

解决方案


这是因为您的代码的编写方式。您实际上只是创建了另一个类来发送输入并接收 tmp 模块的输出。因此,Chisel 将 tmp 的输入和输出优化为一组由 q 模块的输入和输出引脚驱动的线。如果您想保留 tmp 模块,那么我建议您不要从任何其他类驱动模块的 io 引脚。而是保持这种方式,一旦生成了verilog,您就可以编写一个测试平台来驱动tmp模块的io引脚。


推荐阅读