如何访问具有多个模块的子模块中的信号?

问题描述 投票:0回答:1

我有以下名为

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
文件中的模块分成不同的文件。 任何帮助将不胜感激。

verilog system-verilog modelsim test-bench
1个回答
0
投票

问题是您在分层说明符中使用了一些模块名称而不是模块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
© www.soinside.com 2019 - 2024. All rights reserved.