verilog加法溢出的判断

reg1_i[31]、reg2_i[31]分别两个数的符号位,result[31]表示运算结果的符号位,overflow是溢出位。

  1. 当 reg1_i[31] = reg2_i[31] = 0(两数同为正)且 result[31] = 1(结果为负)时,产生负溢出;
  2. 当 reg1_i[31] = reg2_i[31] = 1(两数同为负)且 result[31] = 0(结果为正)时,产生正溢出。

代码:

// 原操作数1:reg1_i
// 原操作数2:reg2_i
// 相加后的结果:result
// 溢出标志位:overflow,为0代表未溢出,为1代表溢出

if ((reg1_i[31] == 0 && reg2_i[31] == 0 && result[31] == 1) || (reg1_i[31] == 1 && reg2_i[31] == 1 && result[31] == 0)) begin
    overflow = 1;
end else begin
    overflow = 0;
end

 

注意:这虽然说的是加法的溢出,但同样也适用于减法的溢出判断,只要我们使用补码的形式来保存数值即可。补码的来历,补码的优势


参考文献:verilog加法溢出判断(附代码) – 尚码园 (shangmayuan.com)

作者: 高志远

高志远,24岁,男生

发表评论

邮箱地址不会被公开。