Verilog:接受两个4位输入并输出4位输出的模块

时间:2017-09-07 17:32:08

标签: verilog

  1. 接受两个名为i_a和i_b的四位输入。
  2. 输出名为o_sum的四位数字。
  3. 如果总和大于1111,则输出一个名为o_err的一位数字。
  4. 使用always @块连续添加两个输入,并将得到的和和错误位分配给输出。
  5. verilog的新手,有人可以告诉我,如果我这样做吗?

    module add4 (
      o_sum, // Sum out
      o_err, // Error out 
      i_a, // Addend A 
      i_b, // Addend B 
    );
    
      output reg [3:0] o_sum; 
      output reg [1:0] o_err;
      input [3:0] i_a, i_b;
    
      always@( * ) 
      begin
      if ( o_sum = i_a + i_b >1111 ) 
        o_sum = o_err;  
      else
        o_sum = i_a + i_b;
      end
    endmodule
    

1 个答案:

答案 0 :(得分:0)

您的代码中存在很多错误

  1. output reg [1:0] o_err;你说o_err是1位,应该输出reg o_err;

  2. o_sum = o_err;您的o_sum不会是4位,那么

  3. if ( o_sum = i_a + i_b >1111 )由于o_sum为4位,因此无法评估o_sum是否大于1111。此外,它应该是4'b1111,否则它是十进制数。

  4. 现在来看代码,这应该可行,

    module add4 (
      o_sum, // Sum out
      o_err, // Error out 
      i_a, // Addend A 
      i_b, // Addend B 
    );
    
      output reg [3:0] o_sum; 
      output wire o_err;
      input [3:0] i_a, i_b;
    
      reg carry;
    
      always@( * ) 
         {carry, o_sum} = i_a + i_b;
    
      assign o_err = (carry == 1)?1'b1:1'b0;
    
    endmodule
    

    此外,请尝试使用测试平台测试您的设计的正确性。会员会更好地理解这一点。