Warning:Instantiation 深度可能表示 ModelSim 中的递归

Warning:Instantiation depth might indicate recursion in ModelSim

我想实现HA(半加器),但遇到了问题。当我单击模拟时,它会显示此警告:

Warning: Instantiation depth of '/TM_HA/HA/HA/HA .....This might indicate a recursive instantiation.

不知道怎么回事

HA.v

`timescale 1ns/1ns
module HA(a,b,c,sum,cout);
 input a,b,c;
 output sum,cout;

 wire e1,e2,e3;

 xor(e1,a,b);
 and(e2,a,b);
 and(e3,e1,c);

 xor(sum,e1,c);
 or(cout,e3,e2);

endmodule

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 表示

instantiate module TM_HA and give it the instance name 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_HA.

的另一个实例

要实际实例化您的 HA 模块,您应该这样做(类似于):

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