在凿子中,如何判断模块的捆绑包是否实际生成为Verilog

时间:2019-12-20 02:14:30

标签: chisel

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

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这样的包。

1 个答案:

答案 0 :(得分:1)

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