标题：加法器
加法器
加法器是为了实现加法的。
即是产生数的和的装置。加数和被加数为输入，和数与进位为输出的装置为半加器。若加数、被加数与低位的进位数为输入，而和数与进位为输出则为全加器。常用作计算机算术逻辑部件，执行逻辑操作、移位与指令调用。 
对于1位的二进制加法，相关的有五个的量：1，被加数A，2，被加数B，3，前一位的进位CIN，4，此位二数相加的和S，5，此位二数相加产生的进位COUT。前三个量为输入量，后两个量为输出量，五个量均为1位。
对于32位的二进制加法，相关的也有五个量：1，被加数A（32位），2，被加数B（32位），3，前一位的进位CIN（1位），4，此位二数相加的和S（32位），5，此位二数相加产生的进位COUT（1位）。
要实现32位的二进制加法，一种自然的想法就是将1位的二进制加法重复32次（即逐位进位加法器）。这样做无疑是可行且易行的，但由于每一位的CIN都是由前一位的COUT提供的，所以第2位必须在第1位计算出结果后，才能开始计算；第3位必须在第2位计算出结果后，才能开始计算，等等。而最后的第32位必须在前31位全部计算出结果后，才能开始计算。这样的方法，使得实现32位的二进制加法所需的时间是实现1位的二进制加法的时间的32倍。
基本方法
可以看出，上法是将32位的加法1位1位串行进行的，要缩短进行的时间，就应设法使上叙进行过程并行化。
逐位进位加法器，在每一位的计算时，都在等待前一位的进位。那么不妨预先考虑进位输入的所有可能，对于二进制加法来说，就是0与1两种可能，并提前计算出若干位针对这两种可能性的结果。等到前一位的进位来到时，可以通过一个双路开关选出输出结果。这就是进位选择加法器的思想。  加法器　　提前计算多少位的数据为宜？同为32位的情况：线形进位选择加法器，方法是分N级，每级计算32/N位；平方根进位选择加法器，考虑到使两个路径（1，提前计算出若干位针对这两种可能性的结果的路径，2，上一位的进位通过前面的结构的路径）的延时达到相等或是近似。方法，或是2345666即第一级相加2位，第二级3位，第三级4位，第四级5位，第五级6位，第六级6位，第七级6位；或是345677即第一级相加3位，第二级4位，第三级5位，第四级6位，第五级7位，第六级7位。
进一步分析加法进行的机制，可以使加法器的结构进一步并行化。
令G = AB，P = A⊕B，则COUT（G，P） = G + PCIN，S（G，P）=P⊕CIN。由此，A，B，CIN，S，COUT五者的关系，变为了G，P，CIN，S，COUT五者的关系。
再定义点运算（·），（G，P）·（G’，P’）=（G + PG’,PP’），可以分解（G 3：2,P3：2） =（G3，P3）·（G2，P2）。 点运算服从结合律，但不符合交换律。
点运算只与G，P有关而与CIN无关，也就是可以通过只对前面若干位G，P进行点运算计算，就能得到第N位的GN：M，PN：M值，当取M为0时，获得的GN：0，PN：0即可与初使的CIN一起代入COUT（G，P） = G + PCIN，S（G，P）=P⊕CIN，得到此位的COUT，S；而每一位的G，P值又只与该位的A，B值即输入值有关，所以在开始进行运算后，就能并行的得到每一位的G，P值。
以上分析产生了超前进位加法器的思想：三步运算，1，由输入的A，B算出每一位的G，P；2，由各位的G，P算出每一位的GN：0，PN：0；3，由每一位的GN：0，PN：0与CIN算出每一位的COUT，S。其中第1，3步显然是可以并行处理的，计算的主要复杂度集中在了第2步。
第2步的并行化，也就是实现GN：0，PN：0的点运算分解的并行化。
原理
设一个n位的加法器的第i位输入为ai、bi、ci，输出si和ci+1，其中ci是低位来的进位，ci+1（i=n-1，n-2，…，1，0）是向高位的进位，c0是整个加法器的进位输入，而cn是整个加法器的进位输出。则和 
si=aiii+ibii+iici+aibici ，(1)  加法器　　进位ci+1=aibi+aici+bici ，(2) 
令 gi=aibi， (3) 
pi=ai+bi， (4) 
则 ci+1= gi+pici， (5) 
只要aibi=1，就会产生向i+1位的进位，称g为进位产生函数；同样，只要ai+bi=1，就会把ci传递到i+1位，所以称p为进位传递函数。把式(5)展开，得到：ci+1= gi+ pigi-1+pipi-1gi-2+…+ pipi-1…p1g0+ pipi-1…p0c0(6) 。
随着位数的增加式(6)会加长，但总保持三个逻辑级的深度，因此形成进位的延迟是与位数无关的常数。一旦进位（c1~cn-1）算出以后，和也就可由式（1）得出。 
使用上述公式来并行产生所有进位的加法器就是超前进位加法器。产生gi和pi需要一级门延迟，ci 需要两级，si需要两级，总共需要五级门延迟。与串联加法器（一般要2n级门延迟）相比，（特别是n比较大的时候）超前进位加法器的延迟时间大大缩短了。
类型
以单位元的加法器来说，有两种基本的类型：半加器和全加器  加法器　　半加器有两个输入和两个输出，输入可以标识为 A、B 或 X、Y，输出通常标识为合 S 和进制 C。A 和 B 经 XOR 运算后即为 S，经 AND 运算后即为 C。
全加器引入了进制值的输入，以计算较大的数。为区分全加器的两个进制线，在输入端的记作 Ci 或 Cin，在输出端的则记作 Co 或 Cout。半加器简写为 H.A.，全加器简写为 F.A.。
半加器：半加器的电路图半加器有两个二进制的输入，其将输入的值相加，并输出结果到和（Sum）和进制（Carry）。半加器虽能产生进制值，但半加器本身并不能处理进制值。
全加器：全加器三个二进制的输入，其中一个是进制值的输入，所以全加器可以处理进制值。全加器可以用两个半加器组合而成。
注意，进制输出端的最末个 OR闸，也可用 XOR闸来代替，且无需更改其余的部分。因为 OR 闸和 XOR 闸只有当输入皆为 1 时才有差别，而这个可能性已不存在。
结构设计
直接使用式(6)形成的电路是不规则的，并且需要长线驱动，需要大驱动信号和大扇入门。当位数较多时，这种实现方式不太现实。 
可以改进超前进位电路，使其具有规则性。对于一个n位（n>4）的加法器，按4位一组的形式对其分组，组内实行超前进位，组间也实行超前进位。相应地超前进位逻辑需要分级，级的数目L=Log4(n)。如图1所示，第m(0～n-1)位的g,p可以表示为：g4k+j=a4k+jb4k+j，p4k+j=a4k+j+b4k+j；k为(m/4)的商，代表组的  加法器位置；j为余数，代表该位在该组中的位置。各个4位CLA的组进位产生函数G4k+3, 4k = g4k+3 + p4k+3 g4k+2 + p4k+3p4k+2g4k+1 +p4k+3p4k+2p4k+1g4k ；组进位传递函数P4k+3, 4k = p4k+3 p4k+2 p4k+1 p4k ；组进位C4k+4 = G4k+3, 4k + P4k+3, 4k c4k。 
每个4位的CLA模块分别计算各组内每一位的p、 g和组间的P、G，第二级LACG（look ahead carry generator）根据各组（包含第一级LACG逻辑）的P、G和c0计算出各组间的进位C4k+4 ，同样，第三级LACG则根据第二级的P、G和c0计算出向高4组的进位C16k+16，依此类推。计算出的所有组进位都要送回各个4位的CLA模块，并行算出每一位的和。 
改造后，CLA的延时包括：用式(3)和式(4)产生pi和gi的1级门延时；用超前进位电路产生所有进位的2(2L-1)级门延时；用 (1) 式计算si的2级门延时。于是总的延时为[2] ： 
Delay(CLA adder)=1+4Log4(n) (7) 
与简单的串联加法器相比，超前进位加法器需要较多的逻辑电路来产生进位位。但它的延迟时间的数量级为log4(n)。当n较大时，速度的改进是很明显的。
逻辑优化
逻辑优化设计的主要目的是减少信号的翻转活动[3]，它通过将电路的逻辑功能尽可能的分解、优化， 减少逻辑深度，减少信号假翻转，从而使翻转活动最小，减小电路的功耗。 
令gsi=ai⊙bi ，则式（1）可以改写为si= gsi⊙ci ，先考察第一组CLA 
s0=gs0⊙c0 (8) 
s1=gs1⊙c1=gs1⊙(g0+p0c0) (9) 
s2=gs2⊙c2=gs2⊙(g1+p1g0+p1p0c0) (10) 
s3=gs3⊙c3=gs3⊙(g2+p2g1+p2p1g0+p2p1p0c0)(11) 
因为g, p的值只有“00”、“01”、“11”这三种组合，结合布尔代数性质A⊙0=、A⊙1=A可知，s3的值最终可以归结为3个表达式：gs3, 3和(gs3⊙c0)，同样，s2值的3个表达式为gs2, 2和(gs2⊙c0)，s1为gs1, 1和(gs1⊙c0)。于是式(8)至式(11)就可以化为 
s0=c0(gs0)+ 0 (0) (12) 
s1=c0(gs1⊙p0)+0(gs1⊙g0) (13) 
s2=c0(gs2⊙(g1+p1p0))+ 0 (gs2⊙(g1+p1g0))(14) 
s3=c0(gs3⊙(g2+p2g1+p2p1p0)) 
+0(gs3⊙(g2+p2g1+p2p1g0)) (15) 
其他组，如s4~s7、s8~s11等，情况和s0~s3一样。 
逻辑改造后，在进位产生逻辑上可以减少一些不必要的翻转，减少了节点开关活动率，并且可以重复利用g,p积之和的相同部分，达到路径平衡的效果，可以有效地消除假翻转（glitch），同时与门和或门的最大扇入都减少了一个，较大程度地减小了功耗。
优化设计
逻辑改造后，电路也应该相应地进行优化设计，因为如果用普通的门电路来实现式(12)~(15)的逻辑，晶体管数目（面积）会增加。另外，在电路级也可以采用减少节点翻转和寄生电容的方法来降低功耗。 
式(12)~(15)中多处要用到同或门，设计中，我们用基于旁路的静态逻辑[4]实现产生gs的同或门，如图2。旁路逻辑通过由附加管形成的旁路，可以把“串并交错”的电路结构简化为单一的串或者并的形式。它的电路和版图都有很好的规整性，并且可以减小寄生电容。  加法器　　是两种同或门N块版图不同部分的比较，（b）是基于旁路逻辑实现的，与（a）相比，少了一条金属连线和两个金属接触，使版图变得十分规整，扩散区不会被隔断。在拓扑上，两条分支用公共的漏区，达到最少的接触孔和金属互连，比“串并”和“并串”的晶体管配置方式规整，且寄生电容小。 
加法器电路上的延迟值
旁路逻辑不能实现传输门，因而不能用传输门实现同或和异或，但是容易证明，三态门在速度和功耗方面都比传输门优越。参照传输门的结合方式，我们用两个三态反相器和一个反相器实现了同或门。 
实现了式(13)括号内的两个同或逻辑，平均只需要1级门延时，而用普通门实现的“与非或与非”形式的同或门需要2级或3级门延时。由上面的同或门设计得到启发，根据形如式(13)的逻辑，设计了一个10管单元utiandor2。
该单元电路实现s=c0CK+0CKN，只要把式(12)~(15)中的括号部分从CK和CKN输入，输出就相应得到了s0~ s3 。仅当CKN=时，电路(a)两边均是三态反相器，构成图5（b）的同或门，两个反相器交替导通，s=c0⊙CK ；当CKN=CK（发生几率比较大），左边P管和右边N管，或者左边N管和右边P管交替导通，输出s=CK，从而屏蔽了c0的变化。考察第一组4位CLA中的进位产生逻辑最复杂的s3，参考式（15），当g2,g1,g0均为0，p2,p1,p0均为1时，s3= gs3⊙c0，显然这是一种特殊情况，即低位各位都不产生进位，但可以传递进位时，直接把c0传至高位与gs同或即可产生和。c0在各位和生成逻辑的最后一级才加入，可以消除过早加入带来的不必要的翻转。左右两块交替导通，只存在下拉或上拉延时，有类似动态电路延迟小的优点。仅用了10个晶体管，比常规门实现的积之和节省8个。