Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Verilog:接受两个4位输入并输出4位输出的模块 接受两个名为i_a和i_b的四位输入 输出一个名为o_sum的四位数字 如果总和大于1111,则输出名为o_err的一位数字 使用always@块连续添加两个输入,并将结果总和和错误位分配给输出_Verilog - Fatal编程技术网

Verilog:接受两个4位输入并输出4位输出的模块 接受两个名为i_a和i_b的四位输入 输出一个名为o_sum的四位数字 如果总和大于1111,则输出名为o_err的一位数字 使用always@块连续添加两个输入,并将结果总和和错误位分配给输出

Verilog:接受两个4位输入并输出4位输出的模块 接受两个名为i_a和i_b的四位输入 输出一个名为o_sum的四位数字 如果总和大于1111,则输出名为o_err的一位数字 使用always@块连续添加两个输入,并将结果总和和错误位分配给输出,verilog,Verilog,刚接触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

刚接触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

你的代码中有很多错误

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

  • o_sum=o_err您的o_和将不会是4位

  • if(o_sum=i_a+i_b>1111)
    由于o_sum为4位,因此无法计算o_sum是否大于1111。此外,它应该是4'b1111,否则它是一个十进制数

  • 现在说到代码,这应该是可行的

    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
    

    另外,请尝试使用testbench测试您的设计的正确性。成员们会更好地理解这一点。

    您的“o_err”是一个2位信号,而不是描述中的一位,
    1111
    是一个十进制数,您可能指的是二进制数。不要将作业置于“如果”状态。没有必要将o_err分配给o_sum。我看到了
    ?1:0
    反模式足够了,我发誓一定有人在教它。三元结构是完全冗余的。只要让测试保持原样,它就会等效地工作。在这种情况下,我会更进一步,直接在add的进位处出错。你是对的。这本可以做到的。我这样做是为了让它看起来更简单