尝试模拟时Verilog模块中出现未解决的引用错误

尝试模拟时Verilog模块中出现未解决的引用错误,verilog,Verilog,当我试图通过测试台模拟以下模块时,我收到以下错误: 对“if2to4”的未解析引用 这是我的密码: module h3to8(din, eout, en); //Port Assignments input [2:0] din; input [0:0] en; output reg [7:0] eout; //3-to-8 decoder always @(din) begin eout = 8'b00000000; if(d

当我试图通过测试台模拟以下模块时,我收到以下错误:

对“if2to4”的未解析引用

这是我的密码:

module h3to8(din, eout, en);

  //Port Assignments
  input [2:0] din;
  input [0:0] en;
  output reg [7:0] eout;

  //3-to-8 decoder

  always @(din)
    begin 
  
      eout = 8'b00000000;
      if(din[2] == 1'b0)
        if2to4 half1 (din[1:0], eout[3:0], en);
      else
        if2to4 half2 (din[1:0], eout[7:4], en);
      
    end

endmodule

module if2to4 (in, out, en);

  //Port Assignments
  input [1:0] in;
  input [0:0] en;
  output reg [3:0] out;

  //2-to-4 decoder
  always @(in)
    begin
  
    if(en == 0)
      out = 4'b0000;
    
    else
     if(in == 0)
       out = 1;
     else if(in == 1)
       out = 2;
     else if(in == 2)
       out = 4;
     else
       out = 8;
        
    end

endmodule

verilog代码设计用于使用两个2到4解码器实现3到8解码器。我认为我正确地实例化了模块,但是我一直收到一个关于模块
if2to4
的未解决的引用错误。代码编译时不会出错,只有在尝试运行模拟时才会发生此特定错误。

您不能在always块中实例化这样的模块。试试这个:

module h3to8(din, eout, en);

  //Port Assignments
  input [2:0] din;
  input [0:0] en;
  output reg [7:0] eout;

  //3-to-8 decoder

    if2to4 half1 (din[1:0], eout[3:0], en);
    if2to4 half2 (din[1:0], eout[7:4], en);

endmodule
或者,您可以使用
din[2]
作为启用的一部分:

module h3to8(din, eout, en);

  //Port Assignments
  input [2:0] din;
  input [0:0] en;
  output reg [7:0] eout;

  //3-to-8 decoder

    if2to4 half1 (din[1:0], eout[3:0], en&~din[2]);
    if2to4 half2 (din[1:0], eout[7:4], en&din[2]);

endmodule