有没有办法获取实例化 Verilog 模块的名称?

Is there a way to get the name a Verilog module was instantiated with?

我想在 Verilog 中做一些模拟调试,并想将 $display 添加到某些模块中。但是,我希望能够跟踪单个模块提供的输出。我希望能够获取实例化当前模块的名称以添加到 $display.

例如:

module adder (...)
    ...
    $display($magic_instance_name, " ", in0, " + ", in1);
    ...

adder memory_address (...);
adder fifo_nvals (...);

然后输出将如下所示:

memory_address 100 + 8
fifo_nvals 3 + 1
...

我可以这样做的一种方法是向每个模块添加一个 instance_name 参数。有没有更简单的方法?

您可以使用 %m 获取包含唯一实例名称的完整路径:

module tb;
    adder memory_address ();
    adder fifo_nvals ();
    initial #5 $finish;
endmodule

module adder;
    initial $display("   hello from ... %m");
endmodule

打印:

   hello from ... tb.memory_address
   hello from ... tb.fifo_nvals