前言

在日常的软件开发中,我们很少需要真正关心计算机的底层是如何工作的。编译器、操作系统以及各种高级抽象层为我们开发者提供了一个相对稳定而统一的接口,使得人们能够专注于算法与应用逻辑。然而,在这些抽象层之下,计算机本质上只是由大量简单电子元件构成的系统:电信号在导线中传播、逻辑门对信号进行运算、寄存器保存状态,而处理器按照既定规则执行指令。我们能否尝试回答一个看似简单但实际上非常深刻的问题:如果从最基础的逻辑电路开始,我们能否一步一步构建出一个完整的 CPU?为了回答这个问题,我们将暂时抛开操作系统、编译器以及复杂的体系结构,从最基本的数学与逻辑出发,逐步搭建计算机的核心组件。

首先,我们需要理解数字电路的数学基础。计算机内部所有的数据最终都以二进制形式表示,因此逻辑运算可以通过布尔代数或有限域的运算进行描述。通过这些数学工具,可以形式化地分析逻辑函数以及电路行为。在此基础上,我们将构建最基本的逻辑门,例如与门、或门、非门以及异或门。这些逻辑门是数字电路的基本构件,通过组合这些简单的运算单元,可以实现任意布尔函数。

随后,我们将逐步构建更复杂的算术电路。例如,从半加器与全加器开始,构建多位加法器,并进一步实现算术逻辑单元(ALU)。ALU 是处理器中最核心的计算模块,它负责执行加法、减法以及各种逻辑运算。

在完成算术电路之后,我们将引入“状态”这一概念:通过锁存器和触发器,可以构建寄存器与计数器,从而使电路能够在不同的时钟周期之间保存数据。这一步是从纯组合电路迈向完整计算系统的关键。

最终,通过将寄存器、ALU、控制逻辑以及指令译码电路组合在一起,我们将得到一个能够执行指令序列的处理器。虽然这个处理器在功能上可能非常简单,但它已经包含了现代 CPU 的基本结构:数据通路、控制单元以及指令执行机制。

本系列文章的目标并不是构建一个高性能处理器,而是通过从零开始构建CPU的过程,理解计算机体系结构最核心的思想。通过这种自底向上的方式,可以清晰地看到从数学、逻辑电路到处理器结构之间的联系。当我们真正理解这些基础之后,再回过头来看现代处理器中的复杂机制,例如流水线、乱序执行或缓存系统,就会发现这些复杂结构其实都是建立在同样简单的逻辑基础之上。

希望本系列文章能够帮助读者以一种更加本质的视角理解计算机: 计算机并不是一个神秘的黑盒,而是由大量简单规则逐步构建而成的系统。

第一部分 算术逻辑单元

在现代计算机系统中,大部分数据处理操作都依赖于算术与逻辑运算。处理器在执行程序时,需要对二进制数据进行加法、减法等以及各种逻辑运算,这些运算均由算术逻辑单元Arithmetic Logic Unit,简称 ALU)完成。因此,ALU 构成了处理器数据通路中的核心计算模块,其结构与实现方式直接决定了系统的运算能力。

从抽象层次上看,ALU 可以被视为一个将输入数据映射为输出结果的函数。设两个 位二进制操作数为 在控制信号的作用下,ALU 对输入数据执行某种运算,并产生输出向量 以及若干状态标志信号,例如进位标志、零标志和溢出标志等。不同的控制信号对应不同的运算功能,例如加法、减法或按位逻辑运算。

尽管 ALU 的功能看起来较为复杂,但从电路实现的角度来看,这些运算都可以通过基本逻辑门电路构造。逻辑门构成最基本的电路单元,而复杂的算术运算则是通过对这些基本单元进行组合而实现的。因此,理解 ALU 的实现过程,需要从最基本的逻辑运算开始.

在数学上,二进制逻辑运算可以通过布尔代数进行描述。布尔代数提供了一套形式化的代数结构,用于刻画逻辑变量之间的运算关系。在二值逻辑系统中,每一个变量只能取两个可能的值,即 。这些运算在结构上与有限域 具有密切联系,因此可以利用代数方法对逻辑函数进行分析与化简。

在掌握布尔代数的基础上,可以进一步研究逻辑门电路的实现方式。逻辑门是数字电路中最基本的硬件单元,例如与门、或门、非门和异或门等。通过组合这些基本逻辑门,可以实现任意布尔函数,从而构造复杂的组合逻辑电路.

众所周知,现代计算机的 ALU整体是建立在逻辑电路理论的基础上的,因此,要搞清楚计算机的运算原理,就必须搞清楚逻辑电路原理。我们将从基本逻辑运算与抽象代数结构的角度出发,论证 ALU 的运算原理,并在必要位置给出严谨的数学证明。

第一章 基本逻辑门

在数字电路中,逻辑门是实现布尔运算的基本电路单元。每一个逻辑门都接收若干输入信号,并根据特定的逻辑规则产生输出信号。从抽象角度来看,逻辑门可以被视为一个函数,其输入与输出均取值于二值集合 其中通常表示逻辑假或低电平,而表示逻辑真或高电平。

设一个逻辑门具有个输入信号,则可以将其输入表示为一个向量 其中每个 。逻辑门根据内部实现的逻辑函数,将这些输入映射为输出信号,因此可以将逻辑门表示为函数 该函数称为布尔函数。换言之,一个具有个输入的逻辑门本质上实现了一个映射 为逻辑门的扇入。不同类型的逻辑门对应不同的布尔函数,例如,与门实现逻辑与运算,或门实现逻辑或运算,而非门则实现逻辑取反运算。从电路结构上看,逻辑门的输入端通常连接到其他电路单元的输出端,而其输出端则作为后续电路的输入信号。因此,逻辑门可以通过导线相互连接,从而构成更复杂的逻辑电路。

在组合逻辑电路中,输出仅由当前输入决定;而在更复杂的时序电路中,输出还可能依赖于电路的历史状态。为了描述逻辑门在不同输入情况下的行为,通常使用真值表。真值表列出了所有可能输入组合及其对应的输出结果。例如,对于一个具有两个输入的逻辑门,其输入共有种可能的组合,因此真值表中需要列出四种情况。通过真值表,可以完整地描述逻辑门实现的布尔函数。

在本章中,我们将首先介绍几种最常见的基本逻辑门,包括与门、或门、非门以及异或门,并分析它们的逻辑性质。随后将讨论逻辑门之间的代数关系,以及如何通过组合这些基本门电路实现更复杂的逻辑函数。

1.1 非门(NOT Gate)

1.1.1 定义

非门又称反相器,是最简单的逻辑门,仅具有一个输入端口和一个输出端口,其核心功能是实现逻辑非运算,即对输入信号进行反相:

  • 输入为 (0) 时输出为 (1)
  • 输入为 (1) 时输出为 (0)

在逻辑上,这等价于对命题取否定。

1.1.2 真值表

输入 (A) 输出 (Y)
0 1
1 0

其中

1.1.3 运算表达式

也可表示为

1.1.4 实现

非门可通过晶体管(二极管、MOS管)实现,核心原理是利用晶体管的导通与截止状态对应逻辑0和1:当输入为高电平(1)时,晶体管导通,输出低电平(0);当输入为低电平(0)时,晶体管截止,输出高电平(1)。实际应用中,常用CMOS反相器,具有功耗低、抗干扰能力强的特点。下图是一种使用MOS管的非门:

非门电路图

1.2 与门(AND Gate)

1.2.1 定义

与门具有两个及以上输入端口和一个输出端口,核心功能是实现“逻辑与”运算,仅当所有输入信号均为1(真)时,输出才为1(真);只要有一个输入为0(假),输出即为0(假),遵循“同时为真才为真”的逻辑。

1.2.2 真值表

(A) (B) (Y)
0 0 0
0 1 0
1 0 0
1 1 1

对应表达式:

1.2.3 运算表达式

也可写为

1.2.4 实现

与门可通过二极管串联实现:两个二极管的阳极连接在一起作为输出端,阴极分别作为输入端口,电源通过电阻连接到输出端。当所有输入均为高电平(1)时,二极管均截止,输出高电平(1);只要有一个输入为低电平(0),对应二极管导通,输出被拉低为低电平(0)。如下图:

与门电路图(1)

实际应用中,常用CMOS与门,然而它不是由单级电路构成的。它实际上是将一个与非门和一个非门级联而成的。如下图:

与门电路图(2)

1.3 或门(OR Gate)

1.3.1 定义

或门具有两个及以上输入端口和一个输出端口,核心功能是实现“逻辑或”运算,只要有一个输入信号为1(真),输出即为1(真);仅当所有输入均为0(假)时,输出才为0(假),遵循“有一个为真即为真”的逻辑。

1.3.2 真值表

(A) (B) (Y)
0 0 0
0 1 1
1 0 1
1 1 1

1.3.3 运算表达式

1.3.4 实现

或门可通过二极管并联实现:两个二极管的阴极连接在一起作为输出端,阳极分别作为输入端口,电源通过电阻连接到输出端。当有一个输入为高电平(1)时,对应二极管导通,输出高电平(1);当所有输入均为低电平(0)时,二极管均截止,输出低电平(0)。如下图:

或门电路图(1)

实际应用中,常用CMOS或门,由一个或非门加一个非门组成,与CMOS与门结构对称。如下图:

或门电路图(2)

1.4 异或门(XOR Gate)

1.4.1 定义

异或门(Exclusive OR)具有两个及以上输入端口和一个输出端口,核心功能是实现“逻辑异或”运算,当输入信号“不同”时(一个为0,一个为1),输出为1(真);当输入信号“相同”时(均为0或均为1),输出为0(假)。异或运算在数电中应用极广。

1.4.2 真值表

(A) (B) (Y)
0 0 0
0 1 1
1 0 1
1 1 0

1.4.3 运算表达式

异或运算可以由基本逻辑门组合实现:

1.5 同或门(XNOR Gate)

1.5.1 定义

同或门(Exclusive NOR)是异或门的反相,具有两个及以上输入端口和一个输出端口,核心功能是实现“逻辑同或”运算,当输入信号“相同”时(均为0或均为1),输出为1(真);当输入信号“不同”时(一个为0,一个为1),输出为0(假),与异或运算互为非运算。

1.5.2 真值表

(A) (B) (Y)
0 0 1
0 1 0
1 0 0
1 1 1

1.5.3 运算表达式

其与异或关系为

第二章 逻辑运算的代数结构

逻辑变量取值集合为 ,该系统可用布尔代数描述。逻辑运算还可嵌入到有限域 的多项式结构中。在 中只有两种基本运算:

  • 加法

  • 乘法

逻辑运算可通过如下映射关系,与有限域 中的运算对应,实现逻辑运算的代数化表示:

由此可见,逻辑非运算对应有限域中“1加变量”的运算,逻辑异或运算对应有限域中的加法运算,逻辑与运算对应有限域中的乘法运算。而逻辑或运算无法直接对应有限域的基本运算,需通过上述映射关系推导得出,其多项式表示为

该表达式属于布尔环多项式表示,是逻辑或运算在有限域 中的代数等价形式。

2.1 非运算性质

由逻辑非运算与有限域 运算的映射关系,非运算可表示为

双重否定律

双重否定律表明,对逻辑变量A进行两次非运算,结果仍为A本身,其表达式为

:根据非运算的代数表达式,对 再次进行非运算,可将 整体代入公式,得到: 在有限域 中,加法运算满足特殊性质:两个1相加的结果为0,即

利用加法结合律,将上式中的优先计算,可得:

又因为在有限域 中,0为加法单位元,满足 ,因此:

得证

互补律

互补律反映了逻辑变量与其非运算结果之间的核心关系,即一个逻辑变量与其非变量的“或运算”结果恒为1(逻辑真),“与运算”结果恒为0(逻辑假),表达式为

:结合非运算的代数表达式 和逻辑运算的有限域映射关系,分别证明两个等式:

  1. 证明

由逻辑或的布尔环多项式表示 ,令 ,代入得:

展开右边多项式: 在有限域 中, (异或运算自反性),且 (幂等性),代入化简:

  1. 证明

由逻辑与的映射关系 ,代入 ,得:

综上,互补律的两个等式均成立,得证

2.2 与运算性质

逻辑与运算对应有限域 中的乘法运算 ,因此其性质可由有限域乘法的性质推导得出。

交换律

与运算的交换律表明,两个逻辑变量进行与运算时,交换变量顺序,结果不变,表达式为

:由与运算与有限域乘法的映射关系,

在有限域 中,乘法运算满足交换律,即 ,因此

得证

结合律

与运算的结合律表明,三个及以上逻辑变量进行与运算时,改变运算顺序(添加括号),结果不变,表达式为

:根据映射关系,

在有限域 中,乘法运算满足结合律,即 ,因此

得证

幂等律

与运算的幂等律表明,一个逻辑变量与自身进行与运算,结果仍为该变量本身,表达式为

:由映射关系,

在有限域 中,对于任意逻辑变量(取值为0或1),均满足 (当A=0时, ;当A=1时, ),因此得证

单位元

与运算的单位元为1,即一个逻辑变量与1进行与运算,结果仍为该变量本身,表达式为

:由映射关系,

在有限域 中,1是乘法单位元,满足 ,因此得证

零元

与运算的零元为0,即一个逻辑变量与0进行与运算,结果恒为0,表达式为

:由映射关系,

在有限域 中,0是乘法零元,满足 ,因此

得证

吸收律

与运算的吸收律表明,一个逻辑变量与该变量和另一个变量的或运算结果进行与运算,结果仍为该变量本身,表达式为

:结合逻辑或的布尔环多项式表示 ,将其代入左边表达式:

展开多项式,利用有限域乘法分配律:

由幂等性 ,代入化简:

在有限域 中, ,因此:

即:

得证

2.3 或运算性质

逻辑或运算无直接对应的有限域基本运算,需借助其布尔环多项式表示 ,结合有限域的运算性质,推导其各类性质。

交换律

或运算的交换律表明,两个逻辑变量进行或运算时,交换变量顺序,结果不变,表达式为

:根据或运算的多项式表示,

在有限域 中,加法满足交换律( ),乘法满足交换律( ),因此:

,即 得证

分配律

与运算对或运算的分配律表明,一个逻辑变量与另外两个变量的或运算结果进行与运算,等价于该变量分别与两个变量进行与运算后,再进行或运算,表达式为

:分别对等式左右两边进行代数化简,验证其等价性。

  1. 化简左边

代入或运算多项式表示,结合与运算映射关系,得:

  1. 化简右边

先计算 ,再代入或运算多项式表示:

由幂等性 ,化简得:

得证

2.4 德摩根定律

德摩根定律揭示了非运算与与、或运算之间的反向关系,可将与运算的非运算转化为非运算的或运算,或将或运算的非运算转化为非运算的与运算,表达式为

:此处以第一个等式 为例,结合有限域运算和逻辑映射关系证明,第二个等式可同理推导。

  1. 化简左边

由与运算映射关系 ,结合非运算表达式 ,令 ,得:

  1. 化简右边

先由非运算表达式得出 ,再代入或运算多项式表示:

展开右边多项式,利用有限域运算性质化简:

代入原式并合并同类项:

在有限域 中, ,因此:

左边 与右边化简结果一致,故 得证

同理,可证明 ,此处不再赘述。

2.5 异或运算性质

由前文映射关系可知,逻辑异或运算直接对应有限域 中的加法运算,即

由于有限域 中的加法运算满足阿贝尔群的所有条件(交换律、结合律、单位元存在、逆元存在),因此集合

构成阿贝尔群(交换群),其各项性质均可由有限域加法性质推导得出。

交换律

异或运算的交换律表明,两个逻辑变量进行异或运算时,交换变量顺序,结果不变,表达式为

:由异或与有限域加法的映射关系,

在有限域 中,加法运算满足交换律,即 ,因此有:

得证

结合律

异或运算的结合律表明,三个及以上逻辑变量进行异或运算时,改变运算顺序(添加括号),结果不变,表达式为

:由映射关系,

在有限域 中,加法运算满足结合律,即 ,因此有:

得证

单位元

异或运算的单位元为0,即一个逻辑变量与0进行异或运算,结果仍为该变量本身,表达式为

:由映射关系,

在有限域 中,0是加法单位元,满足 ,因此有:

得证

逆元

异或运算中,每个逻辑变量的逆元为其自身,即一个逻辑变量与自身进行异或运算,结果为加法单位元0,表达式为

:由映射关系,

在有限域 中,任意元素与自身相加的结果为0,即 ,因此有:

得证

反转性质

异或运算的反转性质表明,一个逻辑变量与1进行异或运算,结果等价于该变量的非运算,表达式为

:由映射关系,

由非运算的代数表达式可知, ,而有限域加法满足交换律,因此有:

得证

奇偶校验性质

多个逻辑变量的异或运算结果,等价于所有变量取值之和对2取模,其核心作用是实现奇偶校验,即

若参与运算的变量中,取值为1的个数为奇数,则异或结果为1;若为偶数,则结果为0。

:采用数学归纳法证明,结合异或运算与有限域加法的等价性( )。

  1. 时, ,等式成立;

  2. 假设当)时,等式成立,即: 时,有: 由归纳假设和映射关系: 因此,当时,等式仍成立。

综上,对任意正整数,等式均成立,得证

2.6 同或运算性质

同或运算定义为异或运算的非运算,即

结合异或运算与有限域加法的映射关系( )和非运算的代数表达式( ),同或运算可进一步表示为

交换律

同或运算的交换律表明,两个逻辑变量进行同或运算时,交换变量顺序,结果不变,表达式为

:根据同或运算的代数表达式

在有限域 中,加法满足交换律( ),因此:

,即 得证

结合律

同或运算满足结合律。即:

左边:

将括号内的 展开:

利用异或与取反的性质:

因此:

于是得到:

右边:

将括号内的 展开:

利用异或与取反的性质:

于是:

因此:

得证

自反性质

同或运算的自反性质表明,一个逻辑变量与自身进行同或运算,结果恒为1。

:将 代入同或运算的代数表达式,得: 在有限域 中, ,因此 ,即 得证

第三章 加法器

在现代计算机体系结构中,加法运算是最基本的算术运算之一。几乎所有复杂算术操作,例如减法、乘法、除法以及地址计算等,都可以归结为若干次加法运算的组合。例如,减法可以通过补码表示转化为加法;乘法通常通过移位与加法的组合实现;除法可以通过迭代减法或恢复算法实现;而在处理器执行内存访问时,地址的计算通常表现为基址与偏移量之间的加法运算。因此,在计算机硬件层面,实现高效可靠的加法运算是算术逻辑单元设计的核心问题之一。

在数字电路中,所有数据均以二进制形式表示。第二章已经讲过,二进制数的每一位仅可能取值 ,因此其运算规则可以完全用布尔代数来描述,且布尔代数与有限域 之间存在严格的代数对应关系,其中逻辑与运算对应于有限域中的乘法运算,而逻辑异或运算则对应于有限域中的加法运算。利用这一映射关系,可以将二进制加法转化为布尔多项式运算,从而为数字电路设计提供严格的数学基础。本章首先分析实现一位加法的最基本逻辑单元——半加器,然后进一步引入来自低位的进位输入,研究全加器的结构,并推导多位加法器的进位传播规律。

3.1 半加器

半加器是实现两个一位二进制数相加的最基本逻辑电路。设两个输入变量 在执行加法运算时,结果可能包含两个部分,其中一部分是当前位的结果,称为本位和(Sum),另一部分是当运算结果超过 1 时产生的高位进位,称为进位(Carry)。

因此,一位加法可以表示为一个映射: 其中 表示当前位的计算结果,而 表示向高位产生的进位。

在十进制系统中, 会产生进位;而在二进制系统中,同样的情况表现为: 此时最低位为 ,而高位产生进位

为了得到 的代数表达式,可以利用第二章中已经建立的布尔代数与有限域 的映射关系。

3.1.1 本位和

根据二进制加法规则可以得到本位和 的取值规律。当两个输入变量均为 0 时,结果为 0;当其中恰有一个为 1 时,结果为 1;而当两个输入同时为 1 时,由于产生进位,本位结果重新变为 0。这一规律说明,本位和为 1 的情况恰好出现在两个输入取值不同的情形,而当两个输入相同时结果为 0。这一性质与逻辑异或运算的定义完全一致。

第二章已经证明,异或运算在代数上等价于有限域 中的加法运算,即: 因此,一位二进制加法的本位和可以表示为: 从代数角度来看,该表达式表示在有限域 中执行加法运算,其运算规则自动满足 这一性质正对应二进制加法中“本位归零并产生进位”的现象。

在数字电路实现中,这一公式表明,本位和的计算仅需要一个异或门即可完成。

3.1.2 进位

接下来分析进位 的产生条件。

根据二进制加法规则,仅当两个输入变量同时为 1 时才会产生进位。例如: 在这一运算中,最低位结果为 0,而高位产生进位 1。若任一输入变量为 0,则运算结果不会产生进位。

这一条件与逻辑与运算的定义完全一致。第二章已经给出逻辑与运算与有限域乘法之间的对应关系: 其中右侧表示有限域中的乘法运算。

因此进位可以表示为: 从代数角度看,这说明进位实际上由乘法项决定。当两个输入变量均为 1 时,其乘积为 1,从而产生进位;只要其中任意一个变量为 0,乘积便为 0,因此不会产生进位。

综合以上分析可以得到,半加器的逻辑结构完全由两个基本逻辑运算决定,因此半加器电路只需要两个基本逻辑门:一个异或门用于计算本位和,一个与门用于计算进位。因此,我们可以得到半加器的逻辑电路图:

半加器电路图

简记为:

半加器电路图

需要注意的是,半加器只能处理两个输入变量的加法运算,而在实际的多位加法中,每一位运算还可能接收到来自低位的进位信号。因此在实际处理器中,需要使用更一般的加法单元——全加器。

3.2 全加器

在多位二进制加法运算中,每一位的计算不仅依赖当前位的两个输入,还依赖来自低位的进位信号。因此,在第 位执行加法运算时,需要考虑三个输入变量: 其中 表示第一个加数在第 位的值, 表示第二个加数在第 位的值,而 表示来自第 位的进位。

该运算单元产生两个输出,其中 表示当前位的结果,而 表示向更高位传播的进位。能够同时处理两个输入位和一个进位输入的加法单元称为全加器

3.2.1 全加器的进位

我们现在先不关心全加器和半加器的具体联系,暂且将其看作是半加器的多输入推广。要将半加器推广到三个输入,其核心问题是推导进位信号在各个位之间传播的数学表达式。在现代处理器设计中,全加器不仅用于构建最简单的串行进位加法器,还为更高速的结构,例如超前进位加法器,提供理论基础。因此,对全加器进位关系的严格数学推导具有重要意义。

易知,产生进位存在两种情况。第一种情况是当前位的两个输入变量直接产生进位,此时有: 该信号称为生成信号(Generate)。第二种情况是当前位允许低位的进位向高位传播,此时定义传播信号: 若此时存在输入进位 ,则该进位会被传播到更高位。

因此进位的逻辑表达式为: 由式,令 得: 对第三项进行分配律展开: 由式及式,得: 由于交叉项恒为 0,进位多项式坍缩为纯加法形式: 此即全加器的基本进位关系

我们从式的形式中观察到,多项式的第一项与半加器的进位数的表达式在形式上完全一致,而在第二项中,令 代入,得到: 此处的在形式上与半加器的本位和同样完全一致。由此可见,我们可以将全加器看作两个半加器以及一个与门的组合,建立下图所示的等效电路:

全加器电路图

下面我们从数学归纳法出发,给出式的另一种证明方式。

证:

设两个 位二进制数 的进位序列为 我们要证明第 位的进位公式为 该表达式描述了进位在多位加法中的传播路径,其中每一项对应一种可能的进位传播链。例如第一项表示第 位直接产生进位;第二项表示第 位产生进位并被第 位传播;而更长的乘积项表示更长距离的进位传播过程。

时,有: 由穷举法,易证该公式成立。

假设当 时公式成立,即: 时,根据全加器递归关系 代入归纳假设式,得: 利用式展开: 可以看出,式与式在形式上完全一致,因此命题对所有 成立。得证

3.2.2 串行进位加法器(Ripple Carry Adder)

我们已经得到了全加器的基本进位关系: 该公式表明,第 位的进位由两部分决定:一部分来自当前位输入 直接产生的进位,另一部分来自低位进位 的传播。利用这一递归关系,可以将多个全加器按照位序依次连接,从而实现多位二进制加法运算。这种结构称为串行进位加法器Ripple Carry Adder,简称RCA)。

设两个 位二进制数 最低位的进位输入记为 ,在普通加法运算中通常取 对于第 位,全加器的输出关系为: 由于进位 依赖于前一位的进位 ,因此在电路结构上必须从最低位开始逐级传播进位信号。换言之,第 位的计算只有在第 位的进位已经确定之后才能完成。

因此,在最坏情况下,最低位产生的进位需要依次经过所有中间位,最终才能到达最高位。这种逐级传播的过程正是“串行进位”名称的来源。

在电路实现中,一个 位串行进位加法器可以通过将 个全加器按位连接实现,其中每一级的进位输出连接到下一位的进位输入。该结构实现简单,硬件成本较低,因此在早期计算机以及一些低功耗电路中仍然具有实际应用价值。

然而,这种结构的主要缺点在于进位传播延迟较大。设单个全加器的进位延迟为 ,则在最坏情况下,进位需要从最低位传播至最高位,因此总延迟近似为 可以看到,延迟时间随位数 线性增长。当操作数位数较大时,这种结构会显著限制加法运算的速度。

3.3 超前进位加法器(Carry Lookahead Adder)

在上一节中已经讨论了串行进位加法器的结构。该结构通过逐级传播进位来完成多位加法运算,其实现方式简单,但由于进位必须从最低位依次传播到最高位,因此电路延迟会随着位数的增加而线性增长。当操作数的位宽较大时,这种进位传播延迟会成为限制运算速度的重要因素。

为了减少这种由逐级传播带来的延迟,可以利用全加器进位公式的代数结构,对进位关系进行展开,使得高位进位能够直接由输入变量计算得到,而不必等待低位进位逐级传递。这种通过并行计算进位信号来提高运算速度的思想,构成了超前进位加法器Carry Lookahead Adder,简称 CLA)的基本原理。

根据全加器的进位关系式 可以看到,第 位的进位由两个因素决定。一方面,如果当前位输入 同时为 1,则该位必然产生新的进位;另一方面,如果当前位允许进位传播,则来自低位的进位 将继续向高位传递。

为了便于分析这种关系,引入两个辅助信号。首先定义生成信号 时,表示当前位能够直接产生进位。即使低位没有输入进位,也会在该位产生新的进位信号。

其次定义传播信号 时,表示当前位允许低位进位向更高位传播。如果存在输入进位 ,则该进位将继续传递到下一位。

利用上述两个定义,可以将全加器的进位关系写为: 该表达式具有非常重要的意义。它说明进位的产生只依赖于生成信号与传播信号,而这两个信号均仅由输入变量 决定,因此可以在加法运算开始时同时计算得到。

通过不断展开式,可以得到更高位进位的显式表达式。例如,对最低几位展开可以得到: 将式代入式,得到: 继续展开可得: 从上述推导可以看出,每一位的进位都可以表示为若干个生成信号与传播信号的组合项。这些组合项分别对应不同长度的进位传播路径。例如项 表示第 1 位产生进位并被第 2 位传播,而项 则表示第 0 位产生的进位经过两级传播后到达第 3 位。

由此可以得到一般形式。对于第 位进位,有: 该表达式说明,高位进位可以完全表示为输入变量的布尔多项式。因此,在硬件电路中可以通过组合逻辑一次性计算出多个进位信号,而不必等待低位进位逐级传播。

在得到所有进位信号之后,各位的加法结果仍然可以通过全加器公式计算: 由于进位信号能够通过组合逻辑并行计算,因此加法运算的总延迟主要取决于逻辑门的层数,而不再随位数线性增长。与串行进位加法器相比,这种结构可以显著减少进位传播时间,从而提高整体运算速度。

需要指出的是,当位数 较大时,式中的传播项数量会迅速增加,使得实现该公式所需的逻辑门数量显著增加,从而导致电路规模和布线复杂度迅速上升。因此,在实际处理器设计中,通常不会直接构造完全展开的超前进位网络,而是采用分组或层次化的实现方法,通过将加法器划分为若干较小的模块来实现高效的进位计算。这种层次化结构能够在运算速度与电路复杂度之间取得较好的平衡,因此被广泛应用于现代处理器的算术逻辑单元设计中。

3.4 分组超前进位加法器 (Block Carry-Lookahead Adder)

在上一节中已经讨论了 CLA 的基本原理。通过引入生成信号与传播信号:

可以将全加器的进位关系化简为迭代的代数形式: 通过不断代入,可以得到高位进位关于低位信号的展开式。例如,对于第 位的进位 ,有: 从纯代数的角度来看,式 可以在一个步骤内(即两级逻辑门:与门阵列+或门阵列)计算完成。然而,在实际的 CMOS 物理电路中,是受限的。随着 的增加,该表达式中的逻辑项数量和最高次项的变量个数(如 需要 输入的与门)迅速增长,导致电容负载过大,电路延迟反而会急剧上升。

因此,在实际电路设计中,通常采用分组超前进位(Block Lookahead)结构来降低单级电路的复杂度。设一个加法器被划分为若干个位的加法模块(通常)。对于每个模块,我们可以定义该模块的组生成信号组传播信号

组生成信号定义为:

该信号表示:在没有任何外部输入进位(即 )的情况下,该 位模块内部是否能够依靠自身操作数产生新的进位,并传播到模块的最高位。

组传播信号定义为:

该信号表示:若外部输入进位为 (即 ),该进位是否能够贯穿整个模块,从最低位一路传播到最高位输出。

由此,我们可以得到模块级的进位输出关系: 不难发现,的代数形式与单个位加法器的进位关系式完全同构。这意味着,每一个 位加法模块在更高层次上被抽象化为了一个新的“宏代数单元”。通过这种同构映射,我们可以构建多级进位计算网络,在规避物理扇入限制的同时,保证高速的进位计算。

3.5 加法器的层次化结构

当加法器位宽 进一步增大(如 32 位或 64 位)时,单层的分组超前进位依然会面临规模庞大的问题。因此,现代处理器设计中普遍采用层次化结构(Hierarchical Structure)来构建大规模加法器。

设一个 位加法器被划分为 个加法模块,每个模块包含 位,则有 。 对于第 个模块(),我们定义其组生成信号为 ,组传播信号为 。模块之间的宏观进位关系可以写为: 由于该表达式与单个位全加器的进位关系完全相同,我们可以再次应用超前进位展开方法,得到宏观模块级的进位计算表达式。例如,对于第 个模块的输入进位,可以展开为:

通过这种树状的层次划分,我们可以在不同的代数抽象层上分别进行计算,从而将极长的进位传播路径切分为短路径的并行计算。

3.6 加法器延迟分析与代数结合律证明

在数字电路中,加法器的性能通常通过其传播延迟来衡量。不同结构的加法器在进位传播方式上的代数差异,直接决定了其算法复杂度。

串行进位加法器(RCA):线性时延 在 RCA 中,每一位的进位都严格依赖于前一位的计算结果,代数计算必须串行执行。若单个全加器产生进位的延迟为 ,则对于一个 位加法器,进位信号在最坏情况下需要纵贯整个数据通路,其总延迟为: 超前进位加法器(CLA):对数时延 采用分组与层次化结构后,进位计算网络的深度大幅下降。在理想的树状层次结构下,其延迟近似表示为: 层次化计算能够生效的根本数学原因,在于进位传播逻辑满足代数结合律。 我们定义一个二元进位状态对 。并定义一种状态合并算子 ,用于表示两个相邻模块的进位逻辑合并: 在有限域 下,该算子映射为多项式: 结合律证明: 设有三个相邻的位块状态 。 左结合计算: 右结合计算: 因为左结合结果严格等于右结合结果,所以进位状态合并算子 满足结合律。

正是由于结合律的保障,我们计算 位进位前缀 时,不需要按顺序从右向左依次计算(这对应 RCA 的延迟),而是可以任意加括号进行二叉树式的并行规约计算。一棵包含 个叶子节点的平衡二叉树的高度为 ,这也就是超前进位加法器能够突破线性延迟物理极限,最终达到 延迟的严密数学依据。