Files
handsomezhuzhu.github.io/docs/sop/digital-circuit-notes.md
2025-09-07 21:33:34 +08:00

431 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 数字电路笔记
date: 2025-01-20 15:00:00
descriptionHTML: '<span style="color:var(--description-font-color);">纯情男大自用数字电路基础笔记</span>'
tags:
- 笔记
- 数字电路
sidebar: true
readingTime: true
hidden: false
---
# 数字电路笔记
## 资料下载
#### Markdown源码版本
- **文件名**:数字电路基础.md
- **下载链接**[点击下载源码版本](https://github.com/handsomezhuzhu/other_note/raw/main/数字电路/数字电路基础.md)
#### PDF版本
- **文件名**:数字电路基础.pdf
- **下载链接**[点击下载PDF版本](https://github.com/handsomezhuzhu/other_note/raw/main/数字电路/数字电路基础.pdf)
## 完整笔记
## 一、逻辑代数定律和计算规则
| 定律/规则名称 | 表达式 | 解释 |
| --------- | ----------------------------------------------------------------------------------- | ------------------- |
| 恒等律 | $A + 0 = A$<br>$A \cdot 1 = A$ | 任何变量与0相加或与1相乘等于自身 |
| 零律 | $A + 1 = 1$<br>$A \cdot 0 = 0$ | 任何变量与1相加或与0相乘等于1或0 |
| 幂等律 | $A + A = A$<br>$A \cdot A = A$ | 任何变量与自身相加或相乘等于自身 |
| 互补律 | $A + \overline{A} = 1$<br>$A \cdot \overline{A} = 0$ | 任何变量与其补码相加等于1相乘等于0 |
| **交换律** | | |
| 加法交换律 | $A + B = B + A$ | 加法运算的交换律 |
| 乘法交换律 | $A \cdot B = B \cdot A$ | 乘法运算的交换律 |
| **结合律** | | |
| 加法结合律 | $(A + B) + C = A + (B + C)$ | 加法运算的结合律 |
| 乘法结合律 | $(A \cdot B) \cdot C = A \cdot (B \cdot C)$ | 乘法运算的结合律 |
| **分配律** | | |
| 乘法分配律 | $A \cdot (B + C) = A \cdot B + A \cdot C$ | 乘法对加法的分配律 |
| 加法分配律 | $A + (B \cdot C) = (A + B) \cdot (A + C)$ | 加法对乘法的分配律 |
| **吸收律** | | |
| 吸收律1 | $A + A \cdot B = A$ | 吸收律的第一种形式 |
| 吸收律2 | $A \cdot (A + B) = A$ | 吸收律的第二种形式 |
| **德摩根定律** | | |
| 德摩根定律1 | $\overline{A + B} = \overline{A} \cdot \overline{B}$ | 逻辑加法的德摩根定律 |
| 德摩根定律2 | $\overline{A \cdot B} = \overline{A} + \overline{B}$ | 逻辑乘法的德摩根定律 |
| **简化定律** | | |
| 简化定律1 | $A + \overline{A} \cdot B = A + B$ | 简化逻辑表达式 |
| 简化定律2 | $A \cdot (\overline{A} + B) = A \cdot B$ | 简化逻辑表达式 |
| **共识定律** | | |
| 共识定律 (积之和形式) | $AB + \overline{A}C + BC = AB + \overline{A}C$ | 较难,常用于逻辑化简。项 `BC``AB``A`C 的共识项,是冗余的。 |
| 共识定律 (和之积形式) | $(A+B)(\overline{A}+C)(B+C) = (A+B)(\overline{A}+C)$ | 较难,常用于逻辑化简。项 `(B+C)``(A+B)``(A`+C) 的共识项,是冗余的。|
| **反演定律** | | |
| 反演定律 | $A = \overline{\overline{A}}$ | 变量的双重否定等于自身 |
### 推导过程
1. **基本定律**
- **恒等律**$A + 0 = A$ 和 $A \cdot 1 = A$ 是逻辑代数的基本定义。
- **零律**$A + 1 = 1$ 和 $A \cdot 0 = 0$ 也是逻辑代数的基本定义。
- **幂等律**$A + A = A$ 和 $A \cdot A = A$ 是因为逻辑加法和乘法运算的特性。
- **互补律**$A + \overline{A} = 1$ 和 $A \cdot \overline{A} = 0$ 是逻辑变量和其补码的定义。
2. **交换律**
- **加法交换律**$A + B = B + A$ 是逻辑加法的交换特性。
- **乘法交换律**$A \cdot B = B \cdot A$ 是逻辑乘法的交换特性。
3. **结合律**
- **加法结合律**$(A + B) + C = A + (B + C)$ 是逻辑加法的结合特性。
- **乘法结合律**$(A \cdot B) \cdot C = A \cdot (B \cdot C)$ 是逻辑乘法的结合特性。
4. **分配律**
- **乘法分配律**$A \cdot (B + C) = A \cdot B + A \cdot C$ 是逻辑乘法对加法的分配特性。
- **加法分配律**$A + (B \cdot C) = (A + B) \cdot (A + C)$ 是逻辑加法对乘法的分配特性。
5. **吸收律**
- **吸收律1**$A + A \cdot B = A$ 可以从 $A + A \cdot B = A \cdot (1 + B) = A \cdot 1 = A$ 推导得出。
- **吸收律2**$A \cdot (A + B) = A$ 可以从 $A \cdot (A + B) = A \cdot A + A \cdot B = A + A \cdot B = A$ 推导得出。
6. **德摩根定律**
- **德摩根定律1**$\overline{A + B} = \overline{A} \cdot \overline{B}$ 是逻辑加法的德摩根定律。
- **德摩根定律2**$\overline{A \cdot B} = \overline{A} + \overline{B}$ 是逻辑乘法的德摩根定律。
7. **简化定律**
- **简化定律1**$A + \overline{A} \cdot B = A + B$ 可以从 $A + \overline{A} \cdot B = (A + \overline{A}) \cdot (A + B) = 1 \cdot (A + B) = A + B$ 推导得出。
- **简化定律2**$A \cdot (\overline{A} + B) = A \cdot B$ 可以从 $A \cdot (\overline{A} + B) = A \cdot \overline{A} + A \cdot B = 0 + A \cdot B = A \cdot B$ 推导得出。
8. **共识定律**
- **共识定律**$(A + B) \cdot (\overline{A} + C) = (A + B) \cdot (\overline{A} + C) \cdot (B + C)$ 可以从 $(A + B) \cdot (\overline{A} + C) = (A + B) \cdot (\overline{A} + C) \cdot (B + C)$ 推导得出,因为 $(A + B) \cdot (\overline{A} + C) \leq (B + C)$。
9. **反演定律**
- **反演定律**$A = \overline{\overline{A}}$ 是逻辑变量的双重否定特性。
---
## 二、基本门电路
### 1. 非门
$$
Y = \overline{A}
$$
### 2. 与门
$$
Y = A \cdot B
$$
**真值表:**
| 输入 A | 输入 B | 输出 Y |
| --- | --- | --- |
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
### 3. 或门
$$
Y = A + B
$$
**真值表:**
| 输入 A | 输入 B | 输出 Y |
| --- | --- | --- |
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
### 4. 与非门
与非门是“与门”和“非门”的结合。
$$
Y = \overline{A \cdot B}
$$
**真值表:**
| 输入 A | 输入 B | 输出 Y |
|:---:|:---:|:---:|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
### 5. 或非门
或非门是“或门”和“非门”的结合。
$$
Y = \overline{A + B}
$$
**真值表:**
| 输入 A | 输入 B | 输出 Y |
|:---:|:---:|:---:|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 0 |
### 6. 异或门
当两个输入不相同时输出为高电平1当两个输入相同时输出为低电平0。这也被称为“半加器”的求和逻辑。
**逻辑表达式:**
$$
Y = A \oplus B
$$
**真值表:**
| 输入 A | 输入 B | 输出 Y |
|:---:|:---:|:---:|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
---
## 三、编码
### 1. 原码、反码和补码
为了在二进制系统中表示正负数,我们通常会使用最高位作为**符号位**。
* 符号位为 **0** 代表**正数**。
* 符号位为 **1** 代表**负数**。
#### **原码**
* **规则**: 符号位 + 数值的绝对值的二进制表示。
* **正数**: 符号位为0其余位表示数值。
* 例如,$+12$ 的原码是 **00001100**
* **负数**: 符号位为1其余位表示数值。
* 例如,$-12$ 的原码是 **10001100**
* **缺点**:
1. 零的表示不唯一:$+0$ 是 **00000000**$-0$ 是 **10000000**
2. 进行加减法运算时,需要单独处理符号位,硬件实现复杂。
#### **反码**
反码的出现是为了简化减法运算。
* **规则**:
* **正数**的反码与其原码**相同**
* **负数**的反码是在其**原码**的基础上,**符号位不变**,其余各位**按位取反**。
* **示例**:
* $+12$ 的原码是 `00001100`,其反码也是 **00001100**
* $-12$ 的原码是 `10001100`,其反码是 **11110011** (符号位1不变后面7位 `0001100` 按位取反得到 `1110011`)。
* **缺点**:
* 仍然存在“双零”问题:$+0$ 的反码是 **00000000**$-0$ 的反码是 **11111111**
* 跨零运算会产生循环进位问题。
#### **补码**
补码是现代计算机系统中最常用的有符号数表示法,它解决了原码和反码的缺点。
* **规则**:
* **正数**的补码与其原码**相同**
* **负数**的补码是其**反码加 1**
* **求负数补码的方式**:
* 从其原码的**最低位(最右边)**向左找,找到的**第一个 1** 保持不变,这个 1 **左边**的所有位不含符号位按位取反符号位仍为1。
* **示例**:
* $+12$ 的补码是 **00001100**
* $-12$ 的补码求法:
1. 原码: `10001100`
2. 反码: `11110011`
3. 加 1: `11110011 + 1` = **11110100**
* **优点**:
1. **零的表示唯一**: **00000000**
2. **简化运算**: 可以将减法运算转换为加法运算。例如,计算 $A - B$ 等同于计算 $A + (-B)$ 的补码。
3. 对于一个 $n$ 位的补码系统,其表示范围为 $[-2^{n-1}, 2^{n-1}-1]$。例如8位补码的范围是 $[-128, 127]$。
**总结表格 (以 ±12 为例)**
| 值 | 原码 | 反码 | 补码 |
|:---:|:---:|:---:|:---:|
| +12 | 00001100 | 00001100 | 00001100 |
| -12 | 10001100 | 11110011 | 11110100 |
### 2. BCD 码
BCD码是用**二进制**来表示**十进制**数的一种编码方式。它与直接将十进制数转换为二进制数不同。
* **规则**: 用 **4 位二进制数**来表示一位十进制数0-9。最常用的是 **8421 BCD 码**,其中各位的权值从高到低分别是 8、4、2、1。
* **特点**:
* 它介于二进制和十进制之间,便于人机交互(如数码管显示、计算器)。
* 运算比纯二进制复杂,但比直接处理十进制字符简单。
* 由于用4位二进制表示一位十进制数所以 `1010``1111` 这 6 个码是无效或非法的。
**BCD 码对照表**
| 十进制 | BCD 码 |
|:---:|:---:|
| 0 | 0000 |
| 1 | 0001 |
| 2 | 0010 |
| 3 | 0011 |
| 4 | 0100 |
| 5 | 0101 |
| 6 | 0110 |
| 7 | 0111 |
| 8 | 1000 |
| 9 | 1001 |
**示例**:
将十进制数 **129** 转换为 BCD 码。
1. 将每一位十进制数分开:`1``2``9`
2. 将每一位分别转换为对应的4位BCD码
* $1 \rightarrow 0001$
* $2 \rightarrow 0010$
* $9 \rightarrow 1001$
3. 将它们组合起来:
$$
(129)_{10} = (0001 \ 0010 \ 1001)_{\text{BCD}}
$$
**对比**: 如果将 (129)₁₀ 直接转换为纯二进制,结果是 **10000001**。这与它的 BCD 码是完全不同的。
---
## 四、加法器、编码器、译码器、选择器、比较器
---
## 五、触发器
### 1. RS 触发器
最基本的触发器,但存在一个不确定状态,在实际应用中较少直接使用。
* **输入**: $S$ (Set, 置位), $R$ (Reset, 复位)
* **输出**: $Q$ (状态输出), $\overline{Q}$ (反向输出)
#### **功能表**
这张表描述了在不同输入下,下一个状态 $Q_{n+1}$ 是什么。
| $S$ | $R$ | $Q_{n+1}$ | 功能 |
|:---:|:---:|:---:|:---|
| 0 | 0 | $Q_n$ | 保持 |
| 0 | 1 | 0 | 复位/置0 |
| 1 | 0 | 1 | 置位/置1|
| 1 | 1 | **?** | **禁止/不定** |
#### **特性方程**
$$
Q_{n+1} = S + \overline{R}Q_n \quad (\text{约束条件: } S \cdot R = 0)
$$
#### **激励表**
这张表在电路设计时非常有用,它回答了“为了让状态从 $Q_n$ 变为 $Q_{n+1}$,输入 $S$ 和 $R$ 应该是什么”。X表示Don't Care即0或1均可
| $Q_n$ | $Q_{n+1}$ | $S$ | $R$ |
|:---:|:---:|:---:|:---:|
| 0 | 0 | 0 | X |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | X | 0 |
### 2. JK 触发器
JK 触发器是 RS 触发器的改进版,它解决了 RS 触发器的“禁止”状态问题,是最通用的触发器。
* **输入**: $J$ (功能类似 $S$), $K$ (功能类似 $R$)
* **输出**: $Q$, $\overline{Q}$
#### **功能表**
| $J$ | $K$ | $Q_{n+1}$ | 功能 |
|:---:|:---:|:---:|:---|
| 0 | 0 | $Q_n$ | 保持 |
| 0 | 1 | 0 | 复0 |
| 1 | 0 | 1 | 置1 |
| 1 | 1 | $\overline{Q_n}$ | **翻转 ** |
*JK触发器将RS触发器的禁止状态1,1输入变成了一个非常有用的**翻转**功能。*
#### **特性方程**
$$
Q_{n+1} = J\overline{Q_n} + \overline{K}Q_n
$$
#### **激励表**
| $Q_n$ | $Q_{n+1}$ | $J$ | $K$ |
|:---:|:---:|:---:|:---:|
| 0 | 0 | 0 | X |
| 0 | 1 | 1 | X |
| 1 | 0 | X | 1 |
| 1 | 1 | X | 0 |
### 3. D 触发器
D 触发器的功能非常直接:在时钟脉冲到来时,将输入 $D$ 的值传递给输出 $Q$。它常被用作数据锁存器或移位寄存器的基本单元。
* **输入**: $D$ (Data)
* **输出**: $Q$, $\overline{Q}$
#### **功能表**
| $D$ | $Q_{n+1}$ | 功能 |
|:---:|:---:|:---|
| 0 | 0 | 置0 |
| 1 | 1 | 置1 |
*无论当前状态 $Q_n$ 是什么,下一个状态 $Q_{n+1}$ 都等于时钟边沿到来时的 $D$ 输入值。*
#### **特性方程 **
$$
Q_{n+1} = D
$$
#### **激励表 **
| $Q_n$ | $Q_{n+1}$ | $D$ |
|:---:|:---:|:---:|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
### 4. T 触发器
T 触发器是一个翻转触发器。当输入 $T=1$ 时,状态翻转;当 $T=0$ 时,状态保持不变。它常用于构建计数器。
* **输入**: $T$
* **输出**: $Q$, $\overline{Q}$
#### **功能表**
| $T$ | $Q_{n+1}$ | 功能 |
|:---:|:---:|:---|
| 0 | $Q_n$ | 保持 |
| 1 | $\overline{Q_n}$ | 翻转 |
#### **特性方程**
$$
Q_{n+1} = T \oplus Q_n = T\overline{Q_n} + \overline{T}Q_n
$$
#### **激励表**
| $Q_n$ | $Q_{n+1}$ | $T$ |
|:---:|:---:|:---:|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |