本位放不下的,交给高一位
十进制的一列可以写零到九,二进制的一位只能写零或一。两个一相加,本位留下零,向高一位进一,写成 10₂。这个位串表示十进制的二,不是十。
半加器回答两个问题:输入不同吗?异或门给出本位和;输入都是一吗?与门给出进位。全加器再接受低一位传来的进位,因此能处理三个输入位。
把每级的进位输出接到高一级的进位输入,就构成逐位进位加法器。加法结果不是靠标注写上去的:画面的本位和、进位与溢出都来自实际逻辑门计算。一个点表示信号还不能保证确定,不等于零。
从小电路到完整位串
- 先看一个全加器:改变三个输入,分别观察本位和与进位。
- 换到逐位相加,让两个数相加,跟住进位怎样向高位传递。
- 试一个结果太大的例子:保留的位置有限时,画面怎样提醒你?
一位加法、传播依赖与表示范围
进一步操作与数值核对
- 选择“一个全加器”,组合 A、B 和上一级进位的零、一状态。三个一输入时,本位和与输出进位都为一:
1 + 1 + 1 = 1 + 2。 - 在“逐位相加”中输入 255 和 1,把信号就绪进度移回起点。逐渐推进,观察进位穿过八级。完整结果是 256,保留的八位为零,最高位进位为一。
- 换成 127 和 1。最高位进位为零,但有符号溢出为一:数学结果 128 超出了八位补码能表示的上限 127。
- 换成 42 和 19。并不是每一级都必须等待整条长进位:有的逻辑关系可以提前保证结果。
线路相交但没有连接点时,不表示电气连接。手机全加器采用纵向排布;每条线仍连接同一个逻辑输入和输出。
五个逻辑门怎样组成全加器?
令 P = A XOR B、G = A AND B,则:
S 只保留当前位,Cout 的权重是当前位的两倍,所以 A + B + Cin = S + 2Cout。两个异或门、两个与门和一个或门完成这组关系;真实芯片还可以使用其他等价结构。
数值验证枚举了八位输入 A、B 的全部 65,536 种组合。每一组都检查保留结果、进位重建的完整整数,以及有符号范围判断。
画面的传播时间代表什么?
这是一种“何时能保证知道结果”的模型。输入位从起点已知,异或门等待两个输入;与门一旦知道一个输入为零,就能确定输出为零;或门一旦知道一个输入为一,就能确定输出为一。
相对延迟取异或门两单位、与门和或门一单位。对 255 + 1,各级进位依次在 2、4、6……16 单位保证确定。线上的颜色推进用于显示这些依赖。时间单位不是实测纳秒,也不描述晶体管电压、竞争冒险或电路切换时的毛刺。
真实实现的延迟取决于器件、连线、负载和电路结构。更快的加法器可以提前组合进位信息;本篇没有把简单逐位结构说成所有处理器的实现。
进位和溢出为何不是一回事?
无符号八位数范围为 0–255。结果的低八位等于完整和对 256 取模;最高位进位保存超出该范围的第九位。
八位二进制补码范围为 −128–127,最高位权重为 −128,其余位仍为正。10000000₂ 按无符号数读为 128,按补码读为 −128。有符号溢出表示数学结果超出补码范围,等于最高位的输入进位与输出进位异或。
影片先保留完整结果,再框出只保存的低八位;有符号章节会改变位权和读法,不改变电路或位串。箭头表示有限位宽结果的读取,不把回绕后的数写成普通整数的相等关系。