第六章:数字逻辑基础
数字逻辑是计算机硬件设计的基础,它研究如何用数字电路实现逻辑功能。理解数字逻辑对于掌握计算机组成原理和进行硬件设计具有重要意义。
6.1 数字逻辑概述
6.1.1 数字信号与模拟信号
数字信号:
- 只有两个状态:高电平(1)和低电平(0)
- 抗干扰能力强
- 便于存储和处理
模拟信号:
- 连续变化的信号
- 容易受干扰
- 难以精确存储
生动比喻:
- 数字信号就像开关:只有"开"和"关"两种状态
- 模拟信号就像音量旋钮:可以调节到任意位置
6.1.2 逻辑电平
TTL电平:
- 高电平:2.4V - 5V
- 低电平:0V - 0.8V
- 噪声容限:0.4V
CMOS电平:
- 高电平:接近电源电压
- 低电平:接近0V
- 噪声容限:电源电压的30%
6.2 逻辑门与布尔代数
6.2.1 基本逻辑门
与门(AND Gate)
功能:只有当所有输入都为1时,输出才为1。
真值表:
| A | B | A·B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
逻辑表达式:F = A·B
电路符号:
A ──┐
├── AND ── F
B ──┘生动例子:两个开关串联控制灯泡
- 只有两个开关都闭合,灯泡才亮
- 任何一个开关断开,灯泡都不亮
或门(OR Gate)
功能:只要有一个输入为1,输出就为1。
真值表:
| A | B | A+B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
逻辑表达式:F = A + B
电路符号:
A ──┐
├── OR ── F
B ──┘生动例子:两个开关并联控制灯泡
- 任何一个开关闭合,灯泡就亮
- 只有两个开关都断开,灯泡才不亮
非门(NOT Gate)
功能:输出与输入相反。
真值表:
| A | A' |
|---|---|
| 0 | 1 |
| 1 | 0 |
逻辑表达式:F = A'
电路符号:
A ── NOT ── F生动例子:常闭开关
- 开关断开时,灯泡亮
- 开关闭合时,灯泡不亮
异或门(XOR Gate)
功能:当输入相同时输出0,输入不同时输出1。
真值表:
| A | B | A⊕B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
逻辑表达式:F = A⊕B = A·B' + A'·B
电路符号:
A ──┐
├── XOR ── F
B ──┘生动例子:密码锁
- 两个密码都正确或都错误:门不开
- 一个密码正确,一个错误:门开
6.2.2 复合逻辑门
与非门(NAND Gate)
功能:与门后接非门。
真值表:
| A | B | (A·B)' |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
逻辑表达式:F = (A·B)'
或非门(NOR Gate)
功能:或门后接非门。
真值表:
| A | B | (A+B)' |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 0 |
逻辑表达式:F = (A+B)'
同或门(XNOR Gate)
功能:异或门后接非门。
真值表:
| A | B | (A⊕B)' |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
逻辑表达式:F = (A⊕B)'
6.2.3 布尔代数基本定律
基本运算定律
交换律:
- A + B = B + A
- A·B = B·A
结合律:
- (A + B) + C = A + (B + C)
- (A·B)·C = A·(B·C)
分配律:
- A·(B + C) = A·B + A·C
- A + (B·C) = (A + B)·(A + C)
恒等定律
0和1的性质:
- A + 0 = A
- A·1 = A
- A + 1 = 1
- A·0 = 0
互补定律:
- A + A' = 1
- A·A' = 0
德摩根定律
德摩根定律:
- (A + B)' = A'·B'
- (A·B)' = A' + B'
例子:用德摩根定律简化逻辑表达式
F = (A + B + C)'
= A'·B'·C'6.3 组合逻辑电路
6.3.1 组合逻辑电路的特点
特点:
- 输出只依赖于当前输入
- 没有记忆功能
- 没有反馈回路
例子:加法器、译码器、编码器、多路选择器
6.3.2 加法器
半加器(Half Adder)
功能:实现两个1位二进制数的加法。
真值表:
| A | B | Sum | Carry |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
逻辑表达式:
- Sum = A⊕B
- Carry = A·B
电路实现:
A ──┐
├── XOR ── Sum
B ──┘
│
└── AND ── Carry全加器(Full Adder)
功能:实现三个1位二进制数的加法(包括进位)。
真值表:
| A | B | Cin | Sum | Cout |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 |
逻辑表达式:
- Sum = A⊕B⊕Cin
- Cout = A·B + (A⊕B)·Cin
多位加法器
行波进位加法器(Ripple Carry Adder):
- 将多个全加器串联
- 进位信号逐级传递
- 简单但速度慢
例子:4位加法器
A3 B3 ── FA3 ── S3
│ │
└─ Cin ── Cout ── Cin ── FA2 ── S2
│ │
└─ Cout ── Cin ── FA1 ── S1
│ │
└─ Cout ── Cin ── FA0 ── S06.3.3 译码器
2-4译码器
功能:将2位二进制输入译码为4个输出。
真值表:
| A1 | A0 | Y3 | Y2 | Y1 | Y0 |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 1 |
| 0 | 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 0 | 1 | 0 | 0 |
| 1 | 1 | 1 | 0 | 0 | 0 |
逻辑表达式:
- Y0 = A1'·A0'
- Y1 = A1'·A0
- Y2 = A1·A0'
- Y3 = A1·A0
应用例子:地址译码
- 输入:2位地址
- 输出:选择4个存储单元中的一个
6.3.4 编码器
4-2编码器
功能:将4个输入编码为2位二进制输出。
真值表:
| I3 | I2 | I1 | I0 | Y1 | Y0 |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 1 | 0 | 0 |
| 0 | 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 0 | 0 | 1 | 1 |
逻辑表达式:
- Y1 = I2 + I3
- Y0 = I1 + I3
应用例子:键盘编码
- 输入:4个按键
- 输出:2位编码
6.3.5 多路选择器
2-1多路选择器
功能:根据选择信号选择两个输入中的一个作为输出。
真值表:
| S | Y |
|---|---|
| 0 | I0 |
| 1 | I1 |
逻辑表达式:Y = S'·I0 + S·I1
电路实现:
I0 ──┐
├── OR ── Y
I1 ──┘4-1多路选择器
功能:根据2位选择信号选择4个输入中的一个。
逻辑表达式: Y = S1'·S0'·I0 + S1'·S0·I1 + S1·S0'·I2 + S1·S0·I3
6.4 时序逻辑电路
6.4.1 时序逻辑电路的特点
特点:
- 输出依赖于当前输入和历史状态
- 具有记忆功能
- 包含存储元件
例子:触发器、寄存器、计数器
6.4.2 触发器
SR触发器(Set-Reset Flip-Flop)
功能:基本的存储单元,有两个稳定状态。
真值表:
| S | R | Q | Q' |
|---|---|---|---|
| 0 | 0 | Q | Q' |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | X | X |
逻辑实现:
S ──┐
├── NOR ── Q
│ │
└────┘
│
└── NOR ── Q'
R ──┘问题:S=R=1时状态不确定,实际应用中很少使用。
D触发器(Data Flip-Flop)
功能:在时钟边沿将数据输入存储到输出。
真值表:
| CLK | D | Q | Q' |
|---|---|---|---|
| ↑ | 0 | 0 | 1 |
| ↑ | 1 | 1 | 0 |
| 0 | X | Q | Q' |
| 1 | X | Q | Q' |
逻辑实现:
D ──┐
├── DFF ── Q
CLK ──┘应用例子:数据锁存
- 在时钟上升沿将D的值锁存到Q
- 其他时间Q保持不变
JK触发器
功能:结合了SR触发器和T触发器的优点。
真值表:
| CLK | J | K | Q | Q' |
|---|---|---|---|---|
| ↑ | 0 | 0 | Q | Q' |
| ↑ | 0 | 1 | 0 | 1 |
| ↑ | 1 | 0 | 1 | 0 |
| ↑ | 1 | 1 | Q' | Q |
特点:
- 没有禁止状态
- 可以保持、置位、复位、翻转
6.4.3 寄存器
基本寄存器
功能:存储多位二进制数据。
4位寄存器实现:
D3 ── DFF ── Q3
D2 ── DFF ── Q2
D1 ── DFF ── Q1
D0 ── DFF ── Q0
CLK ──┴──┴──┴──┴应用例子:CPU寄存器
- 存储指令、数据、地址
- 在时钟边沿更新内容
移位寄存器
功能:在时钟边沿将数据向左或向右移动。
右移寄存器:
D ── DFF ── Q3 ── DFF ── Q2 ── DFF ── Q1 ── DFF ── Q0
CLK ──┴──────┴──────┴──────┴应用例子:
- 串行数据接收
- 乘除法运算
- 数据缓冲
6.4.4 计数器
二进制计数器
功能:在时钟边沿递增计数。
4位二进制计数器:
Q0 ── DFF ── Q0
CLK ──┘
│
└── Q0' ── DFF ── Q1
│
└── Q0'·Q1' ── DFF ── Q2
│
└── Q0'·Q1'·Q2' ── DFF ── Q3计数序列:0000 → 0001 → 0010 → ... → 1111 → 0000
十进制计数器
功能:计数到9后回到0。
实现方法:
- 检测到1001(9)时,下一个时钟周期复位为0000
- 使用组合逻辑检测计数到9
应用例子:
- 数字时钟
- 频率分频器
- 定时器
6.5 数字电路设计方法
6.5.1 设计流程
- 需求分析:明确功能要求
- 逻辑设计:用真值表或状态图描述功能
- 逻辑化简:使用布尔代数或卡诺图化简
- 电路实现:选择合适的逻辑门实现
- 仿真验证:验证设计的正确性
- 物理实现:制作PCB或集成电路
6.5.2 卡诺图化简
卡诺图的基本概念
卡诺图是一种图形化的逻辑化简方法。
2变量卡诺图:
B' B
A' 0 1
A 2 33变量卡诺图:
B'C' B'C BC BC'
A' 0 1 3 2
A 4 5 7 6卡诺图化简规则
- 相邻方格:只有一个变量不同的方格
- 圈选原则:圈选2^n个相邻的1
- 覆盖原则:每个1至少被一个圈覆盖
- 最小化原则:用最少的圈覆盖所有的1
例子:化简F = A'B'C' + A'B'C + AB'C' + AB'C
卡诺图:
B'C' B'C BC BC'
A' 1 1 0 0
A 1 1 0 0化简结果:F = B'
6.5.3 时序电路设计
状态图设计
状态图描述时序电路的状态转换。
例子:序列检测器
- 检测输入序列"101"
- 状态:S0(初始)、S1(检测到1)、S2(检测到10)、S3(检测到101)
状态转换表:
| 当前状态 | 输入 | 下一状态 | 输出 |
|---|---|---|---|
| S0 | 0 | S0 | 0 |
| S0 | 1 | S1 | 0 |
| S1 | 0 | S2 | 0 |
| S1 | 1 | S1 | 0 |
| S2 | 0 | S0 | 0 |
| S2 | 1 | S3 | 1 |
| S3 | 0 | S0 | 0 |
| S3 | 1 | S1 | 0 |
6.6 现代数字电路技术
6.6.1 可编程逻辑器件
PLD(Programmable Logic Device)
特点:
- 用户可编程
- 灵活性高
- 开发周期短
类型:
- PAL:可编程与阵列,固定或阵列
- PLA:可编程与阵列,可编程或阵列
- GAL:可擦除的PAL
FPGA(Field Programmable Gate Array)
特点:
- 现场可编程
- 逻辑密度高
- 支持复杂设计
应用:
- 原型验证
- 小批量生产
- 专用计算
6.6.2 低功耗设计
功耗来源
- 动态功耗:开关活动产生的功耗
- 静态功耗:漏电流产生的功耗
低功耗技术
- 门控时钟:关闭不用的时钟
- 多阈值电压:使用高阈值电压晶体管
- 电源门控:关闭不用的电源域
- 电压缩放:降低工作电压
6.7 总结
本章介绍了数字逻辑的基础知识:
- 逻辑门:与、或、非、异或等基本逻辑门
- 布尔代数:逻辑运算的基本定律
- 组合逻辑:加法器、译码器、编码器、多路选择器
- 时序逻辑:触发器、寄存器、计数器
- 设计方法:卡诺图化简、状态图设计
- 现代技术:可编程逻辑器件、低功耗设计
数字逻辑是计算机硬件设计的基础,理解这些概念对于掌握计算机组成原理和进行硬件设计具有重要意义。随着技术的发展,数字电路设计方法不断演进,出现了EDA工具、硬件描述语言等新的设计手段,但基本的逻辑原理仍然适用。

