数字逻辑电路的ASIC设计
第2节 加法电路及其构成方法
更新于2008-08-29 13:28:57

2.2.13位输入信号的全加器(full adder)

输入信号为3位的逻辑部件的代表是全加器。在此,我们研究全加器的性质及其构成方法。
全加器是计算输入A,B,C这3位中的几个处于有效状态的电路。全加器的真正含义是指在加上A和B两个二进制数的同时,也加上来自下位的进数C。对于A,B输入信号,不用特别处理C,将它们作为同等重要的3个位使用即可。
在A,B,C三个输入信号中,任何一个也不处于有效状态时是“000”。我们把它作为0。A,B,C中只有一个处于有效状态时,有“100”,“010”,“001”三种情况,我们把它作为1。A,B,C中只有两个处于有效状态时,有“011”,“101”,“110”三种情况,我们把它作为2。A,B,C都处于有效状态时是“111”,我们把它作为3。这样,因为输出信号是0~3四种,所以如果将2位的二进制数用作输出信号,就可以描述所有情况了。


图2.19全加器的表示


全加器的表示法如图2.19所示,真值表如表2.7所示。
表2.7全加器的真值表
A          B        C        S1         S0
0          0         0         0            0
0          0         1         0            1
0          1         0         0            1
0          1         1         1            0
1          0         0         0            1
1          0         1         1            0
1          1         0         1            0
1          1         1         1            1


2.2.22位输入信号的加法电路

可能会有“为什么全加器的输入信号限于3位”的疑问。若只计算处于有效状态的位数,输入信号的位数可以是任何值。
那么,2位的加法电路呢?表2.8为2位加法电路的真值表,这一电路可以用XOR和AND逻辑门电路实现,如图2.20所示。
表2.82位加法电路的真值表
A         B      S1       S0
0         0        0         0
0         1        0         1
1         0        0         1       
1         1        1         0


图2.202位输入信号的加法电路


就是说,在2位的逻辑单元的项目单里已预备好了XOR和AND逻辑门电路,因此没有必要特意预备2位加法电路的项目单。只有名称是明确命名的,称为“半加器”。
半加器是一种有些“自我中心”的加法电路,在加上二进数的A和B时,它表示“没有看到来自下位的进数”。因其对进数不予考虑,故相对于全加器而言,称之为半加器。
半加器存在S0和S1不能成为独立变量的缺点。即,S0=S1= 1的状态在半加器里是不出现的。


2.2.3变量独立的效果

在加法电路的信号等上的变量完全独立时,其操作没有限制。即全加器情况下的输出信号,可以使用S0S1=“00”,“01”,“10”,“11”的所有状态。因为S0,S1的变量范围为0~3,定义范围也为0~3,因此可以变化为任意值,而且所有数值皆为正值。
如此,对于N位使用2N个状态,我们把这种状态的分配称为全码(filled code)。这句话听上去似乎有些莫名其妙,但是如果我们来思考一下与其相对的非全码(unfilled code),就能清楚这句话的意思了。
在半加器里,输出信号只有S0S1=“00”,“01”,“10”三种情况。因为可用2位表示的状态是22=4,所以由此可知“S0S1=“11”的组合是未被使用的”。
S1=“0”时,S0=“0”,“1”两个值的任何一个,S1=“1”时,却只能是S0=“0”,别无选择。
半加器对其输出信号S0,S1的变量范围0~3只定义了0~2,因此即使设计人员设计出两条输出,却没有意识到“没有S0=S1=1这种状态!”,那么他设计出的就是毫无意义的电路了。
总而言之,在设计中必须经常注意半加器的输出及其使用。


2.2.4单增量加法电路

用具体的例子来说明。试设计一个半加器输出端S0和S1再加上1的电路。如果按照固定作法,即可以使用图2.21所示电路。


图2.21半加器的输出信号加一的电路


这是按照固定作法,把半加器和单增量加法电路组合起来的实例。但是这里肯定会让人产生疑问。对于S1,S0的“0,1,2”而言,答案应该是“1,2,3”,因而输出信号也应该依旧为2位。但是,现在的电路里输出信号却变成了3位。虽然半加器和单增量加法电路各自都正确,但得出的答案却是错误的。
再认真看看电路就会发现,变成了SC=S0·S1。这是绝对不成立的,因为如前所述,S1S0=“11”的状态是不存在的。电路应稍微修改为如图2.22所示的样子。但是,即使对于SA,SB而言,原来变量范围为0~3的定义范围,变成了1~3的非全码,因此设计人员也应注意其操作使用。


图2.22将图2.21加以改进了的电路

图2.23求A+B+1的最佳电路


求A+B+1的电路,实际上还有更简便、更好的解答,即如图2.23所示。虽然电路稍稍简单了些,但SA,SB为非全码的情况是一样的。
因为这样一来半加器的输出信号变成了非全码,所以应该注意其操作上的限制。
要使半加器的2位的输出信号为全码,该怎么做呢?回答是把输入信号变为3条,形成有效端口数为3的状态。这就是此前说明的全加器。


2.2.5大规模的位片加法电路(bit slice adder)

输出信号是全码的加法电路还有许多其他类型。
输出信号为3位的加法电路,输入信号甚至于可为7。若输出信号为3位,则可以得到“000”,“001”,“010”,“011”,“100”,“101”,“110”,“111”八种状态。就是说,处于有效状态的位数为0~7八种情况,输入信号是其最大值的7位。
顺便要说的是,输出信号为4位的加法电路输入信号是15位。同样,因为4位的情况可以得到值0~15,所以输入信号是其最大值的15。
一般来说,输出信号为N位的加法电路的输入信号是(2N-1)位。而且,这些大规模的加法电路都是以3位输入信号的全加器做成的。输入信号为7位,输出信号为3位的加法电路如图2.24所示。


图2.24大规模的加法电路


用3位的全加器构建大规模加法电路时,有一种研究其构成所需3位全加器个数的简便方法。把3位的全加器作为黑匣子(black box)来考虑的话,输入信号为3条而输出信号为2条,故在输入信号、输出信号数据上信号线减少了1条。
7位的加法电路因其输入信号为7条而输出信号为3条,所以必须在某处减少4条。这表示要做成7位的加法电路需要4个3位的全加器。图2.24就是用4个全加器组成的电路。
当然,4个全加器电路不正确连接的话,就无法构成输入信号为7位,输出信号为3位的全加器。S0输出信号与输入信号具有相同的权,S1为二进制数,是进位了的输出信号,因而应把具有相同权的信号连接到全加器的输入信号上。
那么,如果制作输入信号为15位,输出信号为4位的加法电路的话,用11个3位的全加器就可以了。由此可知,用(2N-1-N)个3位的全加器可以构成输入信号为(2N-1)位,输出信号为N位的加法电路。
关于加法电路的内容在第4章“组合电路的设计”中还会出现。


2.2.63位输入信号的XOR

用AND逻辑门和OR逻辑门组成的全加器如图2.25所示。其中,制作S0的电路,除图2.25以外,还有其他方法。图2.26就示出了其中的几种方法,但是可以看出,使用XOR比较简单。而且,由图可见,如果我们定义并制作3位输入信号的XOR逻辑门电路,S0就可以简单地画成图2.27的形式。


图2.25得出全加器S0的电路

图2.26基于XOR的S0电路

图2.273位输入信号


XOR的作法3位输入信号的XOR逻辑门电路,由ASIC工厂预先提供或不提供的情况都会出现。把电路用VHDL描述时可以因“这种初级的工艺映射是工匠的活,所以我们不感兴趣”而应付一下。此外,也有的时候,不详细指定初始模型就无法完成高性能的电路,因而也有展示专业工匠技艺的场合。
在想要详细指定原始模型时,需和ASIC工厂一起将工艺映射最合理化,这在实际操作上需要下很多的工夫。这时可以对设想的ASIC采用工艺映射。如果是这种情况的话就已经假定了存在3位输入信号的XOR来组成电路。如果存在的话,这样是可以的,不存在的话就将3位输入信号的XOR作为软宏(Soft Macro)指令模型,在实际的工艺图中展开为两个2位输入信号的XOR了。
虽然CAD是支持的,但是也有不存在实物的初始元件。这是所说的软宏指令模型,对于由CAD指定的虚构的原始模型,用几个存在实物的原始模型的组合来应对。对软宏指令模型的情况,有3位输入信号的XOR或JK锁存器(JK latch)。
从综合的方面来看,组合已有的原始模型比制作新的原始模型更好时,选择软宏指令模型。
可以随便设定3位的XOR逻辑门电路,如将其输入输出关系与全加器电路的S0一起定义则比较好。制作3位的XOR逻辑门电路时的真值表如表2.10所示。


2.2.7行波进位产生器

只抽取全加器电路的进位(进位符号:S1)的是行波进位产生器,电路如图2.28所示。在3条输入中,如果有两条以上处于有效状态,用二进制数求和可产生出进位。因为要生成进位信号——行波进位,所以也称作行波(ripple)进位产生器。其真值表和全加器电路的S1相同


图2.28行波进位产生器

 

 

网友留言