我有以下名为
main.v
的Verilog文件:
module m1(input a, b, output wire c);
assign c = a & b;
endmodule
module main(input x, y, output wire z);
wire k;
m1 m1_inst(.a(x), .b(y), .c(k));
assign z = x ^ k;
endmodule
在那之后,我有一个名为
tb_main.v
的测试台,它有一个如下所示的实例化:
`include "main.v"
reg a, b;
wire b;
main main_dut(a, b, c);
$display("%b", main_dut.m1.a);
$display("%b", main_dut.main.y);
$display("%b", m1.a);
当我模拟那个测试台时,我得到错误
unresolved reference to m1
和unresolved reference to main
.
我该如何解决这个问题?我不想将
main.v
文件中的模块分成不同的文件。
任何帮助将不胜感激。
问题是您在分层说明符中使用了一些模块名称而不是模块instance名称。
例如,在
main_dut.m1.a
:
main_dut
是模块实例名m1
是模块的名称,而不是实例您只能使用模块实例名称。这是一个完整的代码示例,可以无错误地编译(也在 EDA Playground 上):
module m1 (input a, b, output wire c);
assign c = a & b;
endmodule
module main (input x, y, output wire z);
wire k;
m1 m1_inst (.a(x), .b(y), .c(k));
assign z = x ^ k;
endmodule
module tb_main;
reg a, b;
main main_dut (a, b, c);
initial $display("%b", main_dut.m1_inst.a);
initial $display("%b", main_dut.y);
endmodule