本节将介绍数字电路的基础知识。数字电路是利用数字信号的电子电路。近年来,绝大多数的计算机都是基于数字电路实现的。
1.3.1 什么是数字电路
数字电路是利用两种不连续的电位来表示信息的电子电路。数字电路中的电源电压 H (High,高)电平、接地电压 L(Low,低)电平分别代表 1 和 0,以此实现信息的表达。大部分数字电路是基于叫做 MOSFET(Metal-Oxide-Semiconductor Field-Effect Transistor,金属氧化物半导体场效应管)的场效应管实现的。在数字电路中,MOSFET 通过组合可以实现各种各样的逻辑电路。
1.3.2 数值表达
数字电路中的信息由 0 和 1 两个数字表示,因此数字电路的设计基于二进制数(binary number)。二进制是指从 0 到 1 的数值在一位数字中表示,遇 2 则向上进位的数值表达方式。二进制的第 n 个数字位,数值上是 2 的 n-1 次方位。我们平时使用的数值表达方式是十进制(decimal number),十进制中,0 到 9 的数值可在一位中表示。图 1-16 说明了二进制和十进制的位值关系。
图 1-16 二进制和十进制的位值关系
十进制数的 3210 可以表示为(103×3)+(102×2)+(101×1)+(100×0)。二进制数的 1010 可以表示为(23×1)+(22×0)+(21×1)+(20×0),相当于十进制数 10。一个数字位上可以表达数值的个数称为底数,十进制的底数是 10,二进制的底数是 2。
计算机中常用的数值表现方式,除了二进制和十进制之外,还有八进制(octal number)和十六进制(hexadecimal number)等。八进制使用从 0 开始的八个数表达数值。十六进制中,从 10 到 15 使用字母 A 到 F 来表示,以 0 到 9 加上 A 到 F 表示十六个数值。
八进制数值通常以 0 开头,以区分十进制等表达方式。十六进制则通常以 0x 开头。0x 中的 x 代表 hexadecimal 中的 x。十六进制也有在末尾加 H 等其他表达方法。
表 1-2 列出了利用以上几种进制表达数值的例子。
表 1-2 数值表现的示例
10进制数 | 2进制数 | 8进制数 | 16进制数 |
---|---|---|---|
0 | 0000 | 000 | 0x0 |
1 | 0001 | 001 | 0x1 |
2 | 0010 | 002 | 0x2 |
3 | 0011 | 003 | 0x3 |
4 | 0100 | 004 | 0x4 |
5 | 0101 | 005 | 0x5 |
6 | 0110 | 006 | 0x6 |
7 | 0111 | 007 | 0x7 |
8 | 1000 | 010 | 0x8 |
9 | 1001 | 011 | 0x9 |
10 | 1010 | 012 | 0xA |
11 | 1011 | 013 | 0xB |
12 | 1100 | 014 | 0xC |
13 | 1101 | 015 | 0xD |
14 | 1110 | 016 | 0xE |
15 | 1111 | 017 | 0xF |
1.3.3 有符号二进制数
在用二进制表示有符号数值时,我们经常使用补码表示法。补码表示法中,N 位的二进制数的最高位代表数值 -(2N-1)。图 1-17 介绍了有符号二进制数的表达方式。
图 1-17 有符号二进制数的示例
比特和字节
二进制中的一个数字位称为 binary digit,简称比特(bit)。计算机领域中,我们使用比特作为单位来表示数据量,还会用到一种叫字节(byte)的单位。通常一个字节代表 8 比特,绝大多数 CPU 都是以字节为单位处理数据的。内存地址大多也是为每字节赋予一个地址,称为字节编址方式。由 8 比特组成一个字节是出于 2 的 8 次方表达的范围(0~255)比较适合表达文字(英文字母、符号、控制符等)的考虑。
1K 字节有多大
K、M、G、T 是表示大数据量时常用的单位。1K 的大小有 1000(10 的 3 次方)和 1024(2 的 10 次方)两种计数方法。
通常,衡量计算机内存和网络数据包大小时,1K 相当于 1024 比特。而在硬盘等存储器的标签上记述的尺寸或物理学中的 1K 相当于 1000。
表 1-3 是对单位的说明。
| | 1K 等于 1024 时 | 1K 等于 1000 时 |
| 1 [K] | 1 024 (2 的 10 次方 ) | 1 000 (10 的 3 次方 ) |
| 1 [M] | 1 048 576 (2 的 20 次方 ) | 1 000 000 (10 的 6 次方 ) |
| 1 [G] | 1 073 741 824 (2 的 30 次方 ) | 1 000 000 000 (10 的 9 次方 ) |
| 1 [T] | 1 099 511 627 776 (2 的 40 次方 ) | 1 000 000 000 000 (10 的 12 次方 ) |
无符号二进制数变成补码时,将所有比特反转(又称取反码)后加 1。以 4 位二进制数 0001 为例,全比特反转后为 1110,然后加 1 成为 1111。也就是说,在二进制的补码表示法中,将数字 1 表示为 0001,-1 表示为 1111。这就是说最高位的比特起到了符号位的作用。最高位为 0 时是正数,最高位为 1 时是负数。
二进制补码表示法的好处是正数和负数相加时无需考虑符号的处理。以刚才例子中的 1 和 -1 的补码相加为例,0001 加 1111 后进位得到 10000。当数据宽度为 4 位时忽略第五位的 1,结果为 0000,也就是正确答案——数值 0。如上所示,运用二进制补码表示法可以在不关心数据符号的情况下进行运算。
1.3.4 MOSFET 的结构
近年来,数字电路基本上都是由 MOSFET 场效应管构成的。MOSFET 是一种在施加电压后可以像开关一样工作的半导体器件。MOSFET 有 P 型 MOSFET 和 N 型 MOSFET 两种。P 型 MOSFET 的构造如图 1-18 所示,N 型 MOSFET 的构造如图 1-19 所示。
图 1-18 P 型 MOSFET 的构造
图 1-19 N 型 MOSFET 的构造
MOSFET 有源极、漏极和栅极 3 个电极。功能上,源极、漏极和栅极分别作为电流输入、电流输出和电流控制使用。MOSFET 的源极和漏极采用相同类型的半导体材料,而栅极下的通道则填入不同类型半导体材料。P 型 MOSFET 的源极和漏极使用 P 型半导体,栅极下的通道使用 N 型半导体。N 型 MOSFET 材料的构成与 P 型 MOSFET 相反。
下面以 N 型 MOSFET 为例说明其工作原理。在不给控制电流的栅极施加电压时,源极和漏极间填充了异种半导体材料,因此电流无法流过。当给栅极施加正电压时,源极和漏极中 N 型半导体材料里的自由电子被栅极吸引,使通道中充满电子,源极和漏极间的电流从而能够流动。
图 1-20 N 型 MOSFET 的动作原理
N 型 MOSFET 在栅极施加电源电压(H)时电流可以流通,接地(L)时电流无法流通。反之,P 型 MOSFET 的栅极接地时电流可以通过,施加电源电压时电流无法流过。这种持有相反特性的 N 型 MOSFET 和 P 型 MOSFET 互补使用形成的门电路称为 CMOS(Complementary Metal Oxide Semiconductor,互补金属氧化物半导体)。CMOS 可以用来制作各种各样的逻辑电路。
1.3.5 逻辑运算
逻辑运算是只用“真”、“假”二值进行的运算。数字电路中的 H(1) 和 L(0) 可与逻辑运算中的“真”、“假”对应,进行逻辑运算。逻辑运算使用 AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)三种基本运算组合来实现各种运算。图 1-21 对基本的逻辑运算进行了说明。
图 1-21 基本逻辑运算
图 1-21 中 A 和 B 为输入,Y 为运算结果。AND 运算在输入 A 和 B 双方都为真时结果 Y 为真,其他情况下 Y 为假。因此 AND 运算的结果是 A 和 B 的交集。
OR 运算在输入 A 和 B 任意一方为真时结果 Y 为真,A 和 B 双方皆为假时结果 Y 为假。因此 OR 运算的结果是 A 和 B 的并集。
NOT 运算是单输入的运算,输入为真时结果为假,输入为假时结果为真。因此 NOT 运算的结果是输入 A 的补集。
1.3.6 CMOS 基本逻辑门电路
接下来介绍 CMOS 的基本逻辑门电路。N 型 MOSFET 和 P 型 MOSFET 的电路符号 如图 1-22 所示。
图 1-22 MOSFET 的电路符号
将 MOSFET 按照图 1-23 的方式组合即可实现 NOT 门电路。当输入 H 时,N 型 MOSFET 打开,输出为 L ;当输入 L 时,P 型 MOSFET 打开,输出为 H。
图 1-23 NOT 门电路的电路图和动作原理
从最简单的 NOT 门电路到各种逻辑门电路,都可以由 MOSFET 的组合进行实现。图 1-24 中列出的是逻辑门电路中定义的基本逻辑门电路。逻辑门电路的电路符号称为 MIL(美军标准)逻辑符号。数字电子电路通过基本逻辑电路的组合来实现各种逻辑电路功能。
图 1-24 基本逻辑门电路
1.3.7 存储元件
通过组合基本的逻辑门,可以实现用来保存数据的存储元件。锁存器(Latch)就是其中一种存储元件。锁存器具有像闩锁一样锁住并维持数据的特性。
图 1-25 是一种最为单纯的锁存器,其电路由一个 2 输入的 AND 门构成,并将输出与其中一个输入相接形成一条循环回路。一旦这个电路的输入 A 为 0 时,循环回路中的值就一直为 0。这样就可以利用循环回路将逻辑值锁存。
图 1-25 最简单的锁存器
还有一种锁存器叫 D 锁存器(Data Latch,D-Latch,数据锁存器)。D 锁存器的电路构造如图 1-26 所示,它由 4 个 NAND 门电路构成。D 锁存器中有 D(Data) 和 E(Enable)两个输入信号,Q 和图 1-26 D 锁存器的构成及其电路符号
图 1-27 D 锁存器的真值表
D 锁存器和 NOT 门组合,可以实现依据时钟信号同步并保存数据的 D 触发器。D 触发器的电路构成和符号分别如图 1-28 和图 1-29 所示。
图 1-28 D 触发器的电路构成
图 1-29 D 触发器的电路符号
D 触发器有 D(Data) 和 C(Clock) 两个输入信号,Q 和两个输出信号。当 D 触 发器的 C 为 0 时,前端 D 锁存器输出信号 D 的值,后端 D 锁存器保持之前的数据。当 C 为 1 时,前端 D 锁存器保持之前的数据,后端 D 锁存器将前端 D 锁存器保持的数据直接通过 Q 输出。D 触发器的动作原理和波形图分别如图 1-30 和图 1-31 所示。
图 1-30 D 触发器的动作原理
图 1-31 D 触发器的波形图
D 触发器由于原理简单,构造单纯,被广泛使用在同步电路当中。
建立时间与保持时间
D 触发器是由时钟信号的边沿来触发数据的存储动作的。因此,需要在时钟沿前后一段时间内将输入信号稳定下来。如果在时钟变化时输入信号也在变化,很可能无法正确存储数据。因此,为了让 D 触发器正确存储数据,需要有建立时间(setup time)和保持时间(hold time)两个基本条件。
建立时间是在时钟变化前必须稳定输入信号的时间,而保持时间是时钟变化后必须稳定输入信号的时间。
图 1-32 说明了建立时间和保持时间的关系。同时遵守建立时间和保持时间,就可以让 D 触发器正确的存储数据。
图 1-32 建立时间与保持时间
1.3.8 组合电路和时序电路
数字电路可以分为组合电路和时序电路两种。
组合逻辑电路是指输出值仅由输入信号的状态决定的电路。组合逻辑电路的输出不依赖于过去的输入。也就是说,不需要记忆维持过去的输入信号,因此不含有存储元件。
时序电路是指输出值同时依赖于现在和过去输入信号的逻辑电路。时序电路中含有用于保持输入的存储元件。
1.3.9 时钟同步设计
时钟同步设计是一种数字电路的设计技术。前文提到过,时序电路的输出同时取决于现在和过去的输入。但如何区别现在和过去呢?
在时钟同步设计中,有一种周期性地在 H 和 L 间变化的时钟信号,时钟变化边沿(上升沿或下降沿)之前被称为过去,之后被称为现在。时钟同步设计中,由时钟边沿触发同步更新电路的状态。时钟同步设计最大的优点是,设计者只需要注意时钟边沿的时序,电路的设计和验证都比较容易。因此很多数字电路都是时钟同步设计。
1.3.10 小结
本节介绍了数字电路的基础。在数字电路中使用 1 和 0 表现信息,基于用 MOSFET 组合构成的 CMOS 来实现各种逻辑电路。近年来,绝大多数的计算机都是基于数字电子电路实现的。