Vhdl 为什么4位加法器/减法器通过查看最后两个执行来实现溢出检测?

Vhdl 为什么4位加法器/减法器通过查看最后两个执行来实现溢出检测?,vhdl,boolean-logic,circuit,Vhdl,Boolean Logic,Circuit,这是我们在课堂上看到的图表: 你为什么不在这张图片中使用C4呢?如果C4是1,那么最后一次加法会导致溢出,这就是我们想知道的。为什么我们需要查看C3?表示有符号操作的溢出情况 签名操作中需要记住的一些要点: MSB始终保留为指示数字的符号 负数用2的补码表示 溢出导致操作无效 如果两个正数之和产生负结果,则该和溢出 如果两个负数之和产生正结果,则该和溢出 否则,这笔钱就没有溢出 例如: **Ex1:** 0111 (carry) 0101 ( 5) + 0011 (

这是我们在课堂上看到的图表:

你为什么不在这张图片中使用C4呢?如果C4是1,那么最后一次加法会导致溢出,这就是我们想知道的。为什么我们需要查看C3?

表示有符号操作的溢出情况

签名操作中需要记住的一些要点:

  • MSB始终保留为指示数字的符号
  • 负数用2的补码表示
  • 溢出导致操作无效

  • 如果两个正数之和产生负结果,则该和溢出
  • 如果两个负数之和产生正结果,则该和溢出
  • 否则,这笔钱就没有溢出
例如:

**Ex1:**
 0111   (carry)  
  0101  ( 5)
+ 0011  ( 3)
==================
  1000  ( 8)     ;invalid (V=1) (C3=1) (C4=0)


**Ex2:**
 1011   (carry)  
  1001  (-7)
+ 1011  (−5)
==================
  0100  ( 4)     ;invalid (V=1) (C3=0) (C4=1)


**Ex3:**
 1110   (carry)  
  0111  ( 7)
+ 1110  (−2)
==================
  0101  ( 5)     ;valid (V=0) (C3=1) (C4=1)
在有符号运算中,如果两个最左边的进位(在这些示例中位于最左边的顶行)都是1或都是0,则结果有效;如果左两个进位为“10”或“01”,则发生符号溢出。方便的是,对这两个位执行异或操作可以快速确定是否存在溢出情况。(参考号:)


溢出vs进位:溢出可被视为有符号操作中a的二补形式,溢出标志被监控,进位标志被忽略。类似地,在无符号操作中,监控进位标志,忽略溢出标志。

当进位到最高有效位不等于进位时,会发生有符号数字溢出

例如,使用8位时,65+64=129实际上会导致溢出。这是因为这是二进制的10000001,在2的补码中也是-127。如果您通读此示例,您可以看到这是执行不等于进位的结果

即使在进位标志高的情况下,也可以进行正确的计算

考虑

  1000 1000   = -120
+ 1111 1111   = -1

=(1) 10000111 = -121 

有1的进位,但没有溢出

对于任何正的自然位数,我想给出一个更一般的答案

让我们分别调用最后进位输出C1、倒数第二进位输出C0、和符号输出S0以及A和B的符号位A0和B0

那么,以下观点成立:

  • C1=A0+B0+C0
  • S0=A0*B0+A0*C0+B0*C0
现在让我们来讨论一下可能性

  • 如果
    C1==1
    有两种可能性:
    • 如果
      C0==0
      :A0和B0 两者都必须为1(因此A和en B都必须为负值)。这 表示S0必须为0,表示溶液为正,而A en B 为负=>溢出
    • 如果
      C0==1
      :或者
      • A en B有相反的符号,因此不可能溢出。=>无溢出
      • A0 en B0都是1(因此A en B 两者都必须为负)。这意味着S0必须为1,这意味着解决方案为负=>无溢出
  • 如果
    C1==0
    有两种可能性:
    • 如果
      C0==0
      :或者
      • A0 en B0均为0(因此A en B 两者都必须为正)。这意味着S0必须为0,这意味着解决方案为正=>无溢出
      • A en B有相反的符号=>无溢出
    • 如果
      C0==1
      :A0 en B0必须同时为0(因此A en B 两者都必须是积极的)这 表示S0必须为1,表示溶液为负值,而A en B 均为正值=>溢出

希望这对其他人有所帮助。

提示:写出2的负数补码,这东西可以生成…1111110110101100101101101010011000或者更简单地说,通过计算0-1和1000-1(删除之前的,误导性的,注释)我真的不知道Ci是如何得到的?从一个简单的角度来看,如果你放弃C4位,结果值会改变吗?它只在C4和C3不同时发生变化。如果它们相同,则值相同。