电路如何实现逻辑运算

逻辑运算与电路实现


1.逻辑与电平

a.电平

在讲述逻辑之前先说一下什么是电平,因为逻辑来源于电平。电平是数字电路和模拟电路之间的桥梁和纽带,大家都知道数字电路是离散的,而模拟电路是连续的,在数字电路中,只存在“1”和“0”两种状态,而模拟电路中则有无数的电压或电流值存在,电平解决的从模拟电路到数字电路切换的问题,他是一种(多种)规定,比如我们常听到的TTL电平就是一种规定,TTL电平规定(以VCC=5V为例,实际上TTL还包括3.3V和2.5V的LVTTL(Low Voltage TTL)等):

输入时:V>=2v表示逻辑“1”, V<=0.8v表示逻辑“0”;
输出时:V>=2.4v表示逻辑“1”, V<=0.5v表示逻辑“0”

又如CMOS电平规定(同样以VCC=5V为例,CMOS电平也包含LVCMOS):

输入时:V>=3.5v表示逻辑“1”, V<=1.5v表示逻辑“0”;
输出时:V>=4.45v表示逻辑“1”, V<=0.5v表示逻辑“0”

除了以上两种电平还有我们串口通信经常用到的RS232和RS485,其中RS232电平标准为:

-3v<V<-15v 为逻辑“1”;
3v<V<15v为逻辑“0”

b.逻辑值

当然常用电平还有很多,通过以上例子可以看出电平就是利用不同的电压值来表示逻辑值的规定。这里说到了逻辑值,在数字电路中,包括在数学上,逻辑分为“真”和“假”,“真”为1, “假”为0,对应到电路中则是一些电压的范围。在计算机的存储和计算中,就是通过1和0这两个数字来实现的,刚刚,我们理解了什么时候电压能够表示1,什么时候电压能够表示0,那么这两个值如何进行运算呢?

2.逻辑运算

提到运算二字,如果是在数学上,我们首先想到的肯定是加减乘除,加减乘除为数学最基础的运算,这些基础运算加以组合构成了多彩的数学运算。而逻辑运算却不是这样,逻辑运算的基础运算为与、或、非,上面介绍到逻辑值有两种:0和1,下面介绍与或非三种运算的表达式以及运算结果:

a.与运算(and)

AB为输入值,Y为结果值:Y = A and B(或写为 Y = A && B )

A B Y
1 1 1
0 1 0
1 0 0
0 0 0

观察得知:当输入值全为1时,结果为1,如果输入有0,则结果为0,简单来说就是:全1为1,有0则为0

b.或运算(or)

AB为输入值,Y为结果值:Y = A or B(或写为 Y = A || B )

A B Y
1 1 1
0 1 1
1 0 1
0 0 0

观察得知:当输入值全为0时,结果为0,如果输入有1,则结果为1,简单来说就是:全0为0,有1则为1

c.非运算(not)

AB为输入值,Y为结果值:Y = not A(或写为 Y = !A )

A Y
1 0
0 1

观察得知:当输入值为0时,结果为1,如果输入为1,则结果为0,简单来说就是:取反

d.其他常用运算

其他运算都是由上述三种基础运算组合而来的,如(请大家自行推算真值表):

  • 与非:Y = not (A and B)(或写为 Y = !A(A&&B) ) 先与后非
  • 或非:Y = not (A and B)(或写为 Y = !A(A||B) ) 先或后非
  • 异或:Y = A^B (这里采用了C语言的写法)简记为相同为0,不同为1

当然还有加减的运算,也就是我们平时的二进制运算,10进制下我们时逢10进1,二进制运算是逢2进1,例子如下:

0000 + 0001 = 0001 (0 + 1 = 1)
0001 + 0001 = 0010 (1 + 1 = 2)
1011 - 0001 = 1010 (11 - 1 = 10)
1000 - 0001 = 0111 (8 - 1 = 7)

上面的例子中,括号里面的内容为二进制运算所对应的10进制运算,这个就有意思了,既然10进制的运算可以转化为2进制运算,既然数字电路可以表达二进制,既然有电平的规定可以用模拟电路表达电平,那如果我们在电路上实现了逻辑运算就意味着实现了10进制运算,然后再加以进制转换,相当于可以实现所有运算了,这样的话计算机可以帮我做大量的工作了,那么逻辑运算在电路上是如何实现的呢?

3.逻辑运算的电路实现

a.晶体管

晶体管是一个很神奇的存在,现代第一台计算机的名字叫ENIAC,诞生在宾夕法尼亚大学,那个时候晶体管还没有出现,那个时候的计算机用的是电子管,电子管属于模拟器件,现在高级音响中的胆机就是用电子管做的。晶体管在1947年诞生,拉动了一次技术革命,晶体管诞生以后,才有了集成电路的出现,才会使当年重达31吨,占地面积超过170平方米,每秒计算5000次加法的ENIAC缩减到当今几乎人人都可以买得起用得着的个人电脑。接下来我们就看看什么晶体管,我们不讲很深的原理,只是让大家知道这是个什么东西,因为毕竟我们不是去设计晶体管,而是使用它:
它在原理图中的样子是这样的(以场效应管为例,图片来自百度百科):


nmos.png

pmos.png

可以发现,晶体管有三个极分别为栅极(G)、漏极(D)、源极(S),上面两张图分别为NMOS和PMOS,在NMOS中,使D极电位高于S极,此时如果在G极施加一个电压Vgs就可以使MOS管导通(这里Vgs为正,则表示G极电位高于S极,导通后也是如此,且Vgs大于mos管的导通电压),在PMOS中,使S极电位高于D极,此时如果在G极施加一个电压Vgs就可以使MOS管导通(这里Vgs为负,则表示G极电位低于S极,且Vgs小于mos管的导通电压)。清楚了这个原理,我们看一个例子:

  • 例1
    3.png

    在这个图中,A表示输入电平,Y表示输出电平。上面带圆圈的mos管为PMOS,下面的为NMOS。当输入为高电平时,即VA = Vdd,此时Vgs = 0,PMOS截止,下面的NMOS的Vgs = Vdd,此时NMOS导通,则Y点电位为0,所以此时Y输出为低电平。当输入为低电平时恰好相反,PMOS导通,NMOS截止,Y输出为高电平。到这里,你可能会发现,这个电路不就是实现了取反么,也就是上面逻辑运算中的非运算
  • 例2


    4.png

在这个图中,用了四个晶体管,当输入AB都为高电平时,两个PMOS都截止,两个NMOS导通,输出为低电平;当A为高,B为低时,输出为高电平;当B为高,A为低时,输出为高电平;当AB都为低时,输出为高电平,这就是或运算

  • 与运算请大家自行推算

参考:
百度百科:https://www.baidu.com
博客:https://www.cnblogs.com/sunshine-jackie/p/8137240.html

推荐阅读更多精彩内容