Verilog 16位溢出,用于32位reg

时间:2013-07-20 23:27:19

标签: verilog

我已声明两个输入[32:0]端口in1,in2和一个输出reg [32:0] out

在always块中,代码如下: OUT = IN1 + IN2;

现在它可以正常添加,但是当in1 = 0且in2 = -1时,out总是0x0000ffff而不是0xffffffff

我尝试声明整数[32:0]类型,但我认为这样做不正确。

(转录自评论:)

module adder(out, in1, in2, sub);
output reg[31:0] out;
input [31:0] in1, in2;
input [4:0] sub;

always @(*) begin
 case (sub)
  `ALU_ADD: begin out=alutemp1+alutemp2; //out=in1+in2;
   $display("in1 %x and in2 %x and out %x\n",in1,in2,out);
 end
end 

请指教, 感谢

1 个答案:

答案 0 :(得分:0)

我不认为你的加法器工作正常(因为它在我正在使用的软件中无法编译)。但是,如果您将代码更改为以下内容:

module Verilog1(out, in1, in2, sub);
output reg[31:0] out;
input [31:0] in1, in2;
input [4:0] sub;

always @(*) 
  begin
    out <= in1 + in2;
    $display("in1 %x and in2 %x and out %x\n",in1,in2,out);
  end 
endmodule

对于输入in1 = 0in2 = -1,您获得0xffff_ffff