单位加法
单位加法(single bit addition)。
半加器(half adder)处理无低位进位的情况,常用在最低位上。
- 和 S=A⊕B
- 向高位进位(carry out)Cout=AB
全加器(full adder)
- S=A⊕B⊕C
- Cout=AB+BC+AC
PGK。
- 产生进位 generate:G=AB,若 G=1,Cout=1,与 C 无关
- 传播进位 propagate:P=A⊕B,若 P=1,此时 Cout=C
- 阻断进位 kill:K=A⋅B,若 K=1,Cout=0,与 C 无关
grouped PG。
base case:
- G0:0=G0=Cin,P0:0=P0=0
- Gi:i=AiBi,Pi:i=Ai⊕Bi
一个区间 DP 形式的转移(LSB 在最右边):
Gi:j=Gi:k+Pi:kGk−1:j,Pi:j=Pi:kPk−1:j
最终的和是 Si=Pi⊕Ci=Pi⊕Gi−1:0
行波进位加法器
行波进位加法器(Carry-Ripple Adder, CPA)。
根据递推公式 Ci=Gi−1:0=Gi−1+Pi−1Gi−2:0=Gi−1+Pi−1Ci−1,计算每一位的进位 Ci,最后的 Si=Ci⊕Ai⊕Bi。
使用分层全加器(cascade full adders)实现,critical path 长度为 n。
超前进位加法器
超前进位加法器(Carry-Lookahead Adder,CLA)。
引入高价单元(high-valency cell),分组并行计算多位的 grouped PG。
4-valency cell 组成的 CLA:一次性计算 C4=G3:0=G3+P3G2+P3P2G1+P3P2P1G0
m-valency cell CLA 计算 n 位加法的 critical path 长度为 n/m。
进位选择加法器
进位选择加法器(Carry-Select Adder,CSA)。
CPA/CLA 加和的过程中,高位的计算依赖低位的进位。但进位只可能有两种 0/1,所以每组预先计算好两种情况下的结果,等到低位的进位传上来的时候直接通过 MUX 选择正确的和与进位,能够节省一些时间。
4-valency cell with CSA
进位递增加法器
进位递增加法器(Carry-Increment Adder,CIA?),对 CSA 的改进。
CSA 对低位进位为 0/1 的情况各自计算一遍结果,会重复算 Pi=Ai⊕Bi,Gi=AiBi。
CIA 则只预先计算 Cin=0 的情况,如果低位进位为 1,就用累加器(increment)在结果上加 1。比起 CSA 速度更快,面积更小。
还可以采用 variable group size:低位组小,高位组大,从而平衡进位到达的时间与组内计算的时间。
树形加法器
树形加法器(tree adders)很好理解,就是递归的超前进位(recursive lookahead),组织成树结构。那么 m-valency cell 树形加法器的 critical path 长度为 logmn。
对于 n 位加法,理想的树深度为 L=log2n,扇出不超过 2,且每两层之间最多只有一条布线轨道。
按照三个指标给不同的加法器分类(tree adder taxonomy):
- l= 逻辑级数(logic levels)−L
- f=log2(扇出数−1)
- t=log2 布线轨道数(wiring tracks)
三个经典的树形加法器均满足 l+f+t=L−1:逻辑层数,扇出数与布线轨道数三者需要做 balance。关于如何从图中数出布线轨道数:一条垂直的线在某两相邻层间穿过的布线数的最大值。