在Verilog中未解析对'FULLIDAL'的引用 [英] Unresolved reference to 'fulladder' in Verilog

查看:5
本文介绍了在Verilog中未解析对'FULLIDAL'的引用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在尝试运行模拟时遇到一些问题。在我的第三个模块中,我的前两个模块的实例似乎有问题。代码编译正常,但在尝试运行模拟时遇到问题。

我不确定问题出在我的代码中还是我的测试工作台中。

module fulladder
(
 input [15:0] x,
 input [15:0] y,
 output [15:0] O 
 );
 
assign O =   y + x;
 
endmodule

module shifter
(
 input [15:0] in,
 input [2:0] N,
 output [15:0] O 
 );
  reg [7:0] out_reg;
  assign O = out_reg;

  always @(N or in) begin
    case (N)
      7 : out_reg <= { in[7:0],7'b0};
      6 : out_reg <= { in[7:0],6'b0};
      5 : out_reg <= { in[7:0],5'b0};
      4 : out_reg <= { in[7:0],4'b0};
      3 : out_reg <= { in[7:0],3'b0};
      2 : out_reg <= { in[7:0],2'b0};
      1 : out_reg <= { in[7:0],1'b0};
      0 : out_reg <=         in[7:0];
    endcase
  end

endmodule

module my_multiplier(Rst, Ld, clk, A, B, O);
input clk;
input [7:0]A, B;
input Rst, Ld;
output [15:0] O;
reg Done;
reg [15:0] Otemp;
reg [15:0] O;
reg [7:0] Atemp;
reg [1:0] state;
reg [1:0] C;

parameter S0 = 2'b00, S1 = 2'b01, S2 = 2'b10, S3 = 2'b11;

always @(posedge clk or posedge Rst)
begin
   case(state)
    S0: begin
    Done <= 0;
    if (Ld == 1)
    begin
       C <= 0;
       Atemp <= A;
       state <= S1; 
    end
    else
       state <= S0; 
    end

    S1: if (B[C] == 1) 
    begin
       shifter ( A, C, Atemp);
       O <= Otemp;
       C <= C + 1;
       state <= S2; 
    end
    else 
    begin
       Atemp <= 0;
       O <= Otemp;
       C <= C + 1;
       state <= S2; 
    end
    S2: begin
    O <= Otemp;
    if (C == 3)
      state <= S3;
    else
      state <= S2;
    end
    S3:  begin
        Done <= 1;
    state <= S0;
    end
    default 
    state <= S0;

   endcase

   fulladder (Atemp, O, Otemp);

end   

endmodule


module my_multiplier_tb;

reg clk_tb;
reg [7:0]A_tb, B_tb;
reg  Rst_tb, Ld_tb;
wire [15:0] O_tb;

my_multiplier dut( Rst_tb, Ld_tb, clk_tb, A_tb, B_tb, O_tb );

always #5 clk_tb = ~clk_tb;

initial begin
  A_tb = 8'd8;  
  B_tb = 8'd7;

  #15 Ld_tb = 1; // set Load to begin multiplication
  #10 Ld_tb = 0; // wait 1 clock cycle
  #300   

  $monitor($time, "	 A=%d,	 B=%d,	 O=%d", A_tb, B_tb, O_tb);
    
  $finish;
end

endmodule   

推荐答案

问题在my_multiplier模块中,您有多个语法错误。如果您在edaplayground 上注册了一个免费帐户并在那里发布了您的代码,您可能会在那里看到更多有用的编译错误。

不能将模块实例放置在always块中。这两行必须移到always

之外
fulladder (Atemp, O, Otemp);
shifter ( A, C, Atemp);

完成后,需要添加实例名称,如下面的i0i1

fulladder i0 (Atemp, O, Otemp);
shifter i1 ( A, C, Atemp);

这篇关于在Verilog中未解析对&#39;FULLIDAL&#39;的引用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆