Verilog 警告:实例化深度可能表示ModelSim中的递归

Verilog 警告:实例化深度可能表示ModelSim中的递归,verilog,Verilog,我想实现HA(半加法器),但我有一个问题。单击“模拟”时,将显示以下警告: 警告:实例化深度为“/TM_HA/HA/HA/HA…”可能 指示递归实例化 我不知道发生了什么事 哈维 TM_HA.v `timescale 1ns/1ns module TM_HA; reg A,B,Cin; wire Sum,Cout; TM_HA HA(.a(A), .b(B), .c(Cin), .sum(Sum), .cout(Cout)); parameter t = 200; initial

我想实现HA(半加法器),但我有一个问题。单击“模拟”时,将显示以下警告:

警告:实例化深度为“/TM_HA/HA/HA/HA…”可能 指示递归实例化

我不知道发生了什么事

哈维

TM_HA.v

`timescale 1ns/1ns
module TM_HA;
  reg A,B,Cin;
  wire Sum,Cout;

TM_HA HA(.a(A), .b(B), .c(Cin), .sum(Sum), .cout(Cout));

parameter t = 200;
initial
  begin
  #(2*t)
  A = 1'b0;
  B = 1'b0;
  Cin = 1'b0;

  #t
  A = 1'b0;
  B = 1'b0;
  Cin = 1'b1;
  ....
  #t
  $stop;
end
endmodule

正如您所说,您有一个递归实例化。这条线

TM_HA HA(.a(A), .b(B), .c(Cin), .sum(Sum), .cout(Cout));
模块内部
TM_HA
表示

实例化模块
TM_HA
,并为其指定实例名
HA


由于该行位于模块
TM_-HA
内部,因此您正在自身内部实例化模块
TM_-HA
——一个递归实例化。在某一点上,在层次结构的零级和无限级之间,您会放弃

正如ModelSim给您的警告中所述:您正在执行递归实例化。让我们看看
TM_HA
模块的前几行:

module TM_HA;
  reg A,B,Cin;
  wire Sum,Cout;

TM_HA HA(.a(A), .b(B), .c(Cin), .sum(Sum), .cout(Cout));
在模块
TM_-HA
中,您正在创建父模块
TM_-HA
的名为
HA
的实例。这是一个递归调用,因为该实例将再次创建另一个
TM\u HA
实例

要实际实例化您的
HA
模块,您应该执行以下操作:

module TM_HA;
  reg A,B,Cin;
  wire Sum,Cout;

TM_HA HA(.a(A), .b(B), .c(Cin), .sum(Sum), .cout(Cout));
HA HA_inst (.a(A), .b(B), .c(Cin), .sum(Sum), .cout(Cout));