加法器:进位链
1. 为什么研究加法器
ALU就是进行算数运算、逻辑运算等,其中中最重要的逻辑单元就是加法器,因为加法、减法、乘法、除法都是需要加法器辅助完成的,因此我们来需要探讨加法器如何设计
2. 串行加法器 VS 并行加法器
问题:如何提高加法器的速度
思路:加法器要想把速度加快,最好的办法就是所有位数能够并行运算,但是高位两个数加法需要加上低位的进位 ->
问题转换为:如何快速计算出每一位的进位出来,因此实现并行加法器
下图给出并行加法器的结构,通过并行加法器,重点在于确定进位是如何产生,实际上这个结果就是一位全加器的进位输出的逻辑表达式,主要是确定本地进位与传送条件、
- 本地进位:di = AiBi - 与低位进位无关
- 传送条件:ti = Ai+Bi - 与低位进位无关
从并行加法器可以看出来,数据A和数据B每一位的值ai与bi肯定是确定,以及最后一个一位全加器的C-1为0,因此要想并行运算的关键是如何正确且快速的计算所有的进位
进位链:用来产生每位进位的电路
3 串行进位链 VS 并行进位链
上面我们知道:并行加法器的关键就是产生所有的进位,
进位链的概念:产生所有进位值的电路链
3.1 串行进位链
假设:一个与非门需要ty时间完成
由上图可知:
di本地进位与ti条件进位与低位进位无关,因此可以同时产生。假设此刻已经产生所有的di与ti需要计算所有的进位值,根据上述的逻辑表达式,每个进位都需要两个与非门,且高位进位需要等待低位进位值后再运算,因此在4位串行进位链中,产生全部进位需要:4*2dt=8dt
3.2 并行进位链
假设:一个与非门需要ty时间完成,一个或非门需要的1.5ty时间完成
相比于串行进位链,我们直接C1的逻辑表达式中的C0,替换为d0+t0C(-1),以此类推,将C2、C3、C4中的低位进位用对应的表达式替换,最终我们得到的C0、C1、C2、C3的表达式中只有一个确定进位C-1=0这个值,所以当所有的di与ti准备好后,进位C0、C1、C2、C3可以同时在2.5ty立即产生,以C2的产生过程为例,d2、t2d1、t2t1d0、t2t1t0C-1都是通过与非门同时产生的,然后产生的结果经过或非门,就拿到C2的值,期间就是1ty+1.5ty
3.3 串行进位链 VS 并行进位链
- 速度上:以4位进位链为例,一个与非门需要ty时间完成,一个或非门需要的1.5ty时间完成,那么4位串行进位链需要10ty,4位并行进位链需要2.5ty
- 集成度:非常明显,并行进位链需要更加庞大的组合逻辑电路
疑问:是不是只用并行进位链就ok啦
答案:并不是的,理论上是可以的,但有一个问题存在,现代计算机中基本上机器字长都是64位,也就是说当n等于64时,通过并行进位链来并行计算进位值会导致一个问题:越到后面的进位值的运算,就需要越来越多的di、ti参与进来,结果就是,电路将会会越来越复杂,因此我们需要在快速并行进位和电路设计复杂度上综合一下
4. 单重分组跳跃进位链 PK 双重分组跳跃进位链
4.1 单重分组跳跃进位链
单重分组跳跃进位链 = 小组内并行进位链 + 组与组之间是串行进位链
假设不变,低位小组的4位并行进位链需要2.5dt,一共n=16,有4个小组,组与组之间由于是采用串行进位,因此最需要 4*2.5dt= 10dt 产生16位的进位
4.2 双重分组跳跃进位链
双重分组跳跃进位链相比于单重分组跳跃进位链的特点:
- 分两次组,先分大组,然后再分小组
- 小组与小组之间的并行进位,大组与大组之间采用串行进位
过程:
- 当di、ti、c-1形成后,经过2.5ty,通过D5~D8、T5-T8的逻辑表达式可知,都可以直接产生出来的,同时最后一个小组的C2、C1、C0也会产生。
- 再经过2.5dt,由于D5~D8、T5-T8已经产生,通过(3)(4)双重分组跳跃进位链的大组进位线路,等价一个并行进位链的结构,所以可在2.5dt产生C3、C7、C11、C15,都是当前大组中每个小组处于第8小组需要的最低进位
- 再经过2.5dt,由于C3、C7、C11、C15已经计算出,那么每个小组的最低位已经确定,那么第5小组、第6小组、第7小组的C14~12、C10-8、C6-4可以立即计算出来。