晶体管电路有导通和截止两种状态,这两种状态就可以作为“二进制”的基础。
从模电角度来说晶体管还有放大状态,但是我们此处考虑的是晶体管应用于数字电路,只要求它作为开关电路,即能够导通和截止就可以了。
如上图所示,当b处电压<e处电压时,晶体管中c极和e极导通;当b处电压>e处电压时,晶体管中c极和e极截止。
这只是一个简化说明,实际上从模电角度分析,导通和截止的要求是两个PN节正向偏置和反向偏置,还要考虑c极电压。
但在实际的数字电路中e极电压和c极电压一般恒定,要么由电源提供、要么接地,所以我们可以简单记为“晶体管电路的通断就是由b极电压与恒定的e极电压比较高低决定”。
换句话说,这个三极管的b极电压相对e极为低电平时三极管就会导通,相对e极为高电平时三极管就会截止。
从这里可以看出,晶体管的导通与截止这两种状态对外可以使用b极电压的相对高低来表示,进而说明了我们可以使用高电平或者低电平状态来表示二进制。
也就是说b极是一个输入量(自变量),可以作为变量存储两个数值:高电平或低电平,相应的输出值(因变量)就是电路实际的变化:导通或截止。
就上面这个N型晶体管而言,高电平截止,低电平导通。
那么假如此时我们把高电平作为“1”,低电平作为“0”。那么b极输入1,就会导致电路截止,如果这个电路是控制计算机开关机的,那么就会把计算机关闭。这就是机器语言的原理。
我们编程语言的本质就是在编写一大堆高低电平信号。那么如何输入1呢?要知道计算机刚诞生时是没有键盘的,这时就要引入“打孔纸带”这一老物件了,这个东西会在下面细说。
回到晶体管上,实际用于计算机和移动设备上的晶体管大多是MOSFET(金属-氧化物半导体场效应晶体管)。
它也分为N型和P型,NMOS就是指N型MOSFET,PMOS指的是P型MOSFET。注意,MOS中的栅极Gate可以类比为晶体管中的b极,由它的电压来控制整个MOS管的导通和截止状态。
NMOS电路符号如下图:
PMOS电路符号如下图:
NMOS在栅极高电平的情况下导通,低电平的情况下截止。所以NMOS的高电平表示“1”,低电平表示“0”;PMOS相反,即低电平为“1”,高电平为“0”。
到了这个时候,你应该明白“1”和“0”只是两个电信号,具体来说是两个电压值,这两个电压可以控制电路的通断。
2.2.从晶体管到门电路
一个MOS只有一个栅极,即只有一个输入,输出虽然是高低电压信号,即“1”或“0”,但是作用只是简单的电路导通、截止功能,无法完成计算任务,此时就要引入门电路了。
小提示,电压、电平、电信号在本文中是一回事。
门电路是数字电路中最基本的逻辑单元。它可以使输出信号与输入信号之间产生一定的逻辑关系。
门电路是由若干二极管、晶体管和其它电子元件组成的,用以实现基本逻辑运算和复合逻辑运算的单元电路。这里只介绍最基础的门电路——与门、或门、非门、异或门。
(1)与门
与门电路是指只有在一件事情的所有条件都具备时,事情才会发生。下面是由MOS管组成的电路图。A和B作为输入,Q作为输出。
例如A输入低电平、B输入高电平,那么Q就会输出低电平,转换为二进制就是A输入0、B输入1,那么Q就会输出0。
对应的Java语言运算表达式为0&&1=0。
(2)或门
或门电路是指只要有一个或一个以上条件满足时,事情就会发生。下面是由MOS管组成的电路图。A和B作为输入,Q作为输出。
例如A输入低电平、B输入高电平,那么Q就会输出高电平,转化为二进制就是A输入0、B输出1,那么Q就会输出1。
对应的Java语言运算表达式为0||1=1。