在这一篇中我们来讲一讲组合逻辑,这一章非常非常重要,如果学的不透彻的话,不仅不利于后续verilog的学习,对ic的学习同样不利。
组合逻辑具有一些特点:1.输入域和输出域之间一般没有反馈电路;2电路中没有机已单元;3.当输入信号的状态组合转变,输出状态也随之转变。
一句话总结:功能上,在任意时刻的输出仅仅取决于该时刻的输入,与电路原来的状态无关;在功能上:组合逻辑不包含储存单元,只有从输入到输出的通路,没有反馈环路。
组合逻辑电路的设计
1.进行逻辑抽象(最关键的一步)我们药分析银冠关系,确定输入输出变量,类除真值表;2.将真值表转换为逻辑函数式;3.选定期间类型;4.根据所选期间,对逻辑式进行化简或者变形;5.画出逻辑电路图。
下面举个例子:
将每个人的表决情况作为输入变量ABC,同意为1,不同意为0;将表决结果作为输出变量Y,表决通过则为1,否则则为0;画出真值表
常见的组合逻辑电路
常用的组合逻辑电路包括:编码器,译码器,数据选择器,数据比较器等等。
编码器
编码器的功能式根据输入的每一个高低电平来输出器对应的二进制代码。加入说有8位的输入,就必须要有3位的输出,这里用二进制编码器为例:具有2的n次幂输入,n位输出的编码器叫二进制编码器,在任何时刻有且只有一个输入信号被编码,即只允许一个有效电平输入
8/3编码器
我们可以看到这个编码器输入有8个,按理说真值表应该有256行,但是只有8行,因此此真值表不完整,其他的都是无关项,将其化简为嘴贱与或式的结果就是:Y2=I4+I5+I6+I7;Y1=I2+I3+I6+I7;Y0=I1+I3+I5+I7
但是此编码器存在一个问题,即不能多信号同时输入,也不能没有信号输入(00000000也是无关项哦)
优先编码器
相比于8/3编码器来说,优先编码器可以允许多个信号同同时输入,编码时存在优先顺序
我们规定高电平有效,即输入1表示对此输入信号编码,输出的Y2Y1Y0即为0-7对应的三位二进制代码000-111;我们规定I7优先级最高,I0最低。我们可以发现,当我们输入两个值甚至两个以上的时候,应该有个信号时优先的,打个比方,当我I7=1的时候,即使后面还有I6=1,我也只对I7进行编码,出来的就是111,图中打X的地方就是说这里既可以时0,也可以时1,则第一行就有2^7种情况,真值表的全部行数应该是2^7+2^6+2^5+2^4+2^3+2^2+2^1+2^0=2^8-1,和完整的比还差一行(00000000)。
这就存在一个问题,我们如果把00000000当成无关项,那么设计出来的电路在输入全是0的时候输出000,但是000又是I0所对应的编码,那么我们就该思考下,当前的3位输出变量只能表示8种状态,应该增加一个输出端即增加输出代码来表示没有信号输入的情况。
优先编码器的典型例子就是74HC148。
S是选通信号,他会和I信号进行与,之后再或,当S'是低电平的时候,才能保障信号是通的。我们知道这是低电平有效,因此当S'=0芯片被选通的时候:
1.若没有信号输入参与编码,即I7'-I0'都是1:YS'=0,YEX'=1;
1.若有信号输入参与编码,即I7'-I0'至少一个是0:YS'=1,YEX'=0;
下面举一个例子:如何将两片74HC148接成16/4优先编码器?将A15'-A0'16个低电平输入信号编码乘1111-0000,其中A15‘的优先级最高,A0'的优先级最低。
由于优先级的存在,要求A15'-A8'有信号参与编码的时候,另一片不可以工作。那么我们九江第一拍女的输入信号设置位优先级最高,将其选通输入端接地,时钟低电平。当第一篇有任何一个有效信号输入即需要编码,就让YS'=1,即第二片的S'=1,直接将其锁死。当第一片没有有效信号输入的时候,YS'=0,则第二片的S'=1,可以启动。并且我们要用Yex'作为高一位,因为74HC148是低电平有效,而当第一片有效时候YEX'=0,因此还要加一个反相器。并且低三位不是曲第一片的输出就是取第二片的输出,因此逻辑上是或的关系,到那时由于低电平有效,因此实际电路是与非门。
译码器
译码器实现的功能是将输入的二进制代码翻译成对应的输出高低电平的信号。可以分为二进制译码器,二十一进制译码器等。
二进制译码器
二进制译码器具有三个输入端,8个输出端,三个输入端构成的3位二进制代码可以表示8种状态,对应每个输出端口的高低电平信号。我们可以看到这个真值表不仅完整,而且包含了全部的最小项。这就使得我们用译码器加上或非门或者与非门就可以实现任何逻辑函数的目标函数!!!
Y0=A2'A1'A0' Y7=A2A1A0 等等
3/8译码器
二进制典型的译码器芯片是74HC138
从图中可以看出,只有全部的选通输入端都是有效输入信号,即S1=1;S2'=0S3'=0芯片才能正常工作;并且再芯片选通之后,有且只有一个输出是低电平(低电平时有效输出)
数据选择器(MUX)
数据选择器可以将来自多个通道的数据传送到卫衣的公共数据通道上,相当于一个单刀多掷开关,相当于有一条总线,有很多器件挂载到这个总线上,且每个器件都有他自己的地址,数据选择器可以将给定的地址代码对应的通道的数据传到总线上面。
74HC153
75HC153是最经典的数据选择器芯片,他是双4选1数据选择器,这两个选择器的数据输入端是独立的(D即data),但是两个选择器的地址输入端是公共的,四个数据输入需要两位地址代码,并且两个选择器都各自带了一个选通信号端,位低电平有效。
做一个小总结,数据选择器就是将2^n个数据输入根据其n位地址代码选择传输到输出端输出。
加法器
我们知道,任何二进制的加减乘除运算都可以转化成加法和移位操作。当然了,在进行多为二进制数的加法时,我们还要考虑来自低位的进位以及向高位的进位,因此在加法器的设计中需要有进位输入端(CI)和进位输出端(CO),举个例子大家可能会更加明白,两个四位二进制(0000-1111)的数进行相加的和时0-30,因此结果还是用四位肯定时不可以的,需要一个进位输出端,来表示我们的进位究竟时0还时1,如果这个进位还想再下一次进行运算,那就还需要一个进位输入端。
半加器
半加器指的是不用考虑来子低位的进位,只是将两个1位二进制相加的有位加法器。
我们可以看到,逻辑运算种的异或就对应着算数运算中的加法。
全加器
一位全加器就是要考虑来自低位的进位,将两个1位二进制数相加的1位加法器。
从真值表种可以发现一些规律:当AB都是1的时候不论CI是不是1,CO都是1;当至少有一个加数事1,并且CI是1的时候,那么我的CO就是1.
穿行加法器
当我把第一个的全加器的进位输出端(CO)接到下一个全加器的进位输入端(CI)的时候,就构成了多位加法器,又叫穿行加法器。可以理解,所谓穿行就是要将各位的运算逐个进行的,每一位的i相加结果必须到等到低一位的进位计算结束之后才能建立,这大大降低了运算速度。这是典型的牺牲时间来换取空间。
超前进位加法器
我们采用带入定理可以发现,把每一级都带入到下一级的表达式中,因为每一级的CO和S都可以用上一级的东西来表示,也就是可以用第一级的输入端数据来表示,这就相当于直接用逻辑运算关系来确定每一位的进位输入端和输出信号,这就是超前进位加法器。他的优点是运算快速,但是他的电路结构就会变得十分复杂,当运算维输不断增加的话,将变得很难设计。
数据比较器
数据比较器的功能就是对两个数值的大小进行比较。一共只有三种可能,大于,小于,等于,因此输出端口有三个,是独立的高低电平。
小结
竞争与冒险
即门电路的两个输入信号同时向相反的逻辑电平进行跳变,一个1变成0,一个0变成1,这中i情况乘两个输入信号之间存在竞争,因为这两个输入信号到达稳态的次序先后不定,就会导致输出端产生不期望的尖峰脉冲,也叫做冒险