2.2.1_2 并行进位加法器
00:00
好的,上一小节我们利用电路的基本知识设计了一个比较简单的加法器。这个小节中我们主要会来探讨这个加法器应该怎么进行改进,使它执行加法的速度更快。这个小节给大家的学习建议是心平气和,心如止水都行,没事没关系,保持佛性就可以,这小节的内容会比较绕,不过这一小节并不是我们考试的重点,大家能有大致的了解就可以了。
00:29
好,我们首先来看一下上一小节留下的串行进位的并行加法器。由于我们只是把这些一位全加器进行了简单的串联,而每一个全加器对本位和的计算,还有高位的进位的计算,都会依赖于来自低位的这个进位。因此这种加法器只能实现串行的进位,就像多米诺骨牌一样,只有低位的这些进位算出来了,那高位的进位信息还有高位的这些本位和才能得到正确的结果,所以这种加法器它的一个加法执行的速度,很大程度上是受到这些敬畏信息产生的速度的影响。
01:15
接下来我们要思考的问题就是如何让各个进位的信息产生的更快。来看我们每一个进位产生的这个表达式,这个逻辑表达式,CI这个进位依赖于加数和被加数的两个本位的数值,另外还需要基于低位过来的这个进位才可以算出来,只不过这个表达式它其实具备一种递归的特性,就是CI减1我们可以继续把它展开变成这个样子,CI减一的产生会依赖于第I减一位的加数和被加数,另外也会依赖于更低位进过来的一个进位。
01:57
好,那我们继续再把CI减二进行一个展开,又可以得到这样的一个式子,所以如果我们一直一直往下展开的话,终有一天我们可以把它展开到C0,而C0这个信息是最开始就拥有的一个信息。
02:14
从这个式子里面可以看出来,我们只需要知道AI一直到A1这些位的信息,然后BI一直到B1这些位的信息,最后再结合一个C0的信息,我们就可以可以直接得到直接算出CI的一个值。所以事实上每一位向更高位的进位,我们计算这个值所需要的那些数据,在刚开始其实就已经准备好了,因为被加数和加数每一位是多少,我们在刚开始就可以确定,而C0也是刚开始就有的信息,所以如果我们能够利用刚开始就拥有的这些信息来直接求CI这个进位的信息,那我们就不需要像之前那样,等着这些进位一个的一个运算结束才可以算CI的值。
03:03
好,这就是我们接下来的一个优化思路,为了让这个表达式看起来更简洁一些,我们把AI和BI相与的这个部分把它记作GI,然后把AI和BI异或的这个部分把它记作PI,这样的话我们的式子可以得到化简,CI的表达式我们可以写成GI加上PICI减1,当然了这儿其实不是加,其实是一个或运算。只不过这个地方我们用加还有乘这样的方式来描述,大家会更容易理解一些,与和或他们之间的这种关系非常像算术运算里的乘和加,也具有结合律分配律那些规律。所以接下来的讲解中,我们会把或就念作加,把这种与念作乘。
03:58
好,基于这个式子我们可以知道C1第一位的进位应该是等于G1加上P1乘以C0,然后C2这一类的信息会根据低位过来的C1,还有A2和B2进行一个运算。同样基于这个式子可以得到C2应该是等于G2加上P2乘以C1。那我们把C1用刚才得到的这个式子进行一个展开,就可以得到这样的一个结果。好,接下来C3,C4也是一样的,只不过就是层层的套娃,把它给套进去就行了。
04:37
需要再次强调,得到GI和PI的这些信息,我们刚开始就有,因为AI表示的是被加数,BI表示的是加数,被加数和加数的完整信息,他们的每一位值到底是多少,我们刚开始就可以知道。所以我们刚开始就可以同时输入的这些信息就应该是被加数A1一直到最后一位AN还有加数B1一直到最后一位BN的信息,另外还有以前的运算保留下来的C0最原始的这个进位信息,我也是我们刚开始就可以知道了。
05:15
好,现在根据A1和B1,我们是不是可以得到G1和P1?观察下面这些式子,我们会发现G1和P1在C2的这个运算当中,还有C3的运算当中,还有C4的运算当中,我们都是需要用到的。当然在C一的运算当中我们也需要用到。所以G1和P1这两个比特的信息,我们可以刚开始就把它送到后边这些全加器里边。
05:50
好,这是根据A1和B1得到的两个比特的信息。好,接下来A2和B2经过运算之后,也可以迅速的得到G2和P2。经过观察会发现,只要是角标大于等于2的这些进位信息的运算,都需要用到P2和G2。你看C3也一样,P2、G2,C4也是需要用到P2、G2,好,所以G2和P2这两位的信息需要送到后面那几个位的加法当中。好,那后续的推理都是一样的。
06:28
我们通过加数和被加数对应的两个比特位,可以算出与之对应的GI和PI。GI和PI的信息我们可以通过线路把它送往更高位的运算当中,因为更高位的这些运算的进位的确定需要依赖于GI和PI,好,所以这就意味着即便我们要计算的是C4这个进位的信息,那么在刚开始我们就已经把所有的计算所需要的这些数据,这些原材料给它准备好了,那我们只需要根据这个表达式设计相应的电路,就可以在第四个全加器直接算出C4的值。
07:14
也就是说采用这种策略的话,每一位的进位都几乎是同时产生的。我们不需要再像之前那种设计方案那样,需要等待着后面的进位,一位一位的往上传。好,所以这种加法器的速度会快很多。我们把这种加法器称为并行进位的并行加法器,因为每一个进位信息都是并行的产生的,几乎可以在刚开始就同时产生,所以这种进位方式又可以称为先行进位和同时进位。
07:50
好,接下来我们再来看这种设计方案的一个不足。我们从C1、C2、C3、C4一路往下套娃,套的越深,那你会发现这个逻辑表达式变得越长。如果继续往下算的话,是不是C5C6会变得越来越复杂?逻辑表达式本质上其实就是我们电路的一种数学化的描述,逻辑表达式越长越复杂,那是不是就意味着我们的电路设计也会越来越复杂?
08:20
好,所以我们这个套娃的过程应该适可而止。比较经典的一种做法是我们会套到C4这一位,也就是我们可以同时支持四位加四位的一个运算。在这个加法器内部每一个进位都是同时并行的产生的,就像刚才我们分析的那样,我们只需要由4个FA,也就是四个全加器,再加上一些新的线路,然后加上一些运算逻辑,运算逻辑就是根据我们这儿的表达式来设计的,加上这些东西我们就可以构成一个四位的CLA加法器。
09:00
这个小节的内容确实是比较硬核,在学习计组这门课的时候,大家一定要保持心平气和,心如止水。可能你会自闭,但是你终究可以想开,因为这不是重点。这个小节的内容不管你掌握的怎么样,都行,没事,没关系。好的,以上就是这个小节的全部内容。