文章目录:
  1. 第三部分 数字逻辑
    1. 一、组合逻辑电路
      1. 1.1. 概述
      2. 1.2 运算单元电路
      3. 1.3 编码器/译码器
      4. 1.4 多路选择器
      5. 1.5 竞争与冒险

第三部分 数字逻辑

一、组合逻辑电路

1.1. 概述

(1)数字电路分为组合逻辑电路和时序逻辑电路。
组合逻辑电路是一种无记忆电路, 将逻辑门以一定方式组合在一起, 输出仅由当时输入决定。

(2)设计方法:
① 先列真值表
② 列出表达式, 并化简
③ 画出逻辑电路图


1.2 运算单元电路

(1)加法运算电路

① 半加器: 不考虑来自低位的进位
进位 $C_{0}=A\cdot B$
和 $S_{0}=\overline{A}B+A\overline{B}=A\oplus B$ (异或)

② 全加器:
输入: $A、B、低位进位\ C_{i}$
$S_{o}=A\oplus B\oplus C_{i}$
$C_{0}=AB+C_{i}(A\oplus B)$

(2)多位加法器, 串行进位, 进位串行传递, 延时较长
并行进位: 同时产生进位, 加法延时缩短, 实现相对复杂
串行进位是每次运算算出 $C$, 并行则是公式推导出每个表达式, 直接先算 $C$ 较为复杂

(3)溢出: 运算结果超出表现范围。
同符号两数相加, 若符号位相反, 则溢出。
异符号两数相减, 若符号位与减数相同, 则溢出。
判断: 采用双符号位, 00 为正, 11 为负, 若有 01 (正溢) 或者 10 (负溢) 则溢出。

(4)阵列乘法器: 用若干全加器, 完全由硬件直接计算乘法结果
对于 $n$ 位的阵列乘法, 需全加器 $n(n-1)$ 个
最长路径 $2(n-1)$ 个全加器延时

(5)数值比较器: 对两个二进制数进行比较, 得出大于, 小于和等于,
$F_{A>B}=A\overline{B}\cong A\overline{AB}$
$F_{A<B}=\overline{A}B=B\overline{AB}$
1 位比较器, 后面式子是为了简化。
$F_{A=B}^{\cdot}=AB+\overline{A}\overline{B}=\overline{A\overline{AB}+B\overline{AB}}$
4 位比较器 7485 芯片 从高位开始比较, 并有级联输入端, 可用于扩展更多位比较器

(6)运算单元电路 ALU
支持与、或等逻辑运算, 与加法、减法等算数运算。

ALU 抽象表示
$\begin{array}{rll} \text{操作数} & \to & \text{ALU操作选择} \\ & & \text{标志位} \end{array}$

标志位: $S$ (SIN, 有符号数), $Z$ (Zero), $C$ (无符号数)
$CF$: 进位标志、 $OF$: 溢出标志

溢出 $OF=c_{in}[N-1] \text{ XOR } c_{out}[N-1]$ (输入与输出符号位不一样)

进位/错位 $CF=1$ 有两种情况:

$CF$ 用于无符号数, $OF$ 用于有符号数。
$CF=C_{out}\oplus C_{in}$ (最高位 $C_{out}$, 最低位 $C_{in}$)

操作控制端 $ALU_{op}$, 决定处理功能, 位数 $k$ 决定于操作数量 $2^k$


1.3 编码器/译码器

(1)编码: 对一系列不同的事物用一组二值 (0 或 1) 代码表示。
编码器: 实现编码功能的数字电路。
输入: $n$ 个输入信号
输出: 一组二值代码 ($m$ 位)
$n\le2^{m}$

(2)常见编码器
① 普通编码器, $2^{n}$ 线-$n$ 线编码器
用几位二进制代码对 $2^{n}$ 个信号进行编码的电路, 只允许其中一个输入信号有效 (低电平 0 或高电平 1), 意思是 $2^{n}$ 个输入里只能有 1 个 0 或者 1 个 1, 其余为无效输入。
eg. 8 线-3 线编码器
$A=Y_{1}+Y_{3}+Y_{5}+Y_{7}$, $B=Y_{2}+Y_{3}+Y_{6}+Y_{7}$
$C=Y_{4}+Y_{5}+Y_{6}+Y_{7}$

② 8421 BCD 编码器
输入: $Y_{0}, Y_{1}, \ldots, Y_{9}$, 分别代表 0 $\sim$ 9
输出: 4 位编码, 例如 $DCBA=1001$, 代表 9。

(3)优先编码器: 允许两个以上输入信号同时有效
对所有输入信号优先级排序, 只对优先级最高的输入信号, 优先级低的不响应。(实际还只处理 1 个信号)

(4)译码器: 编码反操作, 把二进制代码译为高低电平信号输出。
常见: 变量译码器 (二进制)、码制变换译码器、显示译码器

① 二进制译码器 ($n$ 线-$2^{n}$ 线译码器)
任何时刻最多 1 个输出有效。 “最小项译码器”:
高电平输出有效时, 每个输出是对应的输入变量最小项;
低电平输出有效时, 每个输出是对应输入变量最小项的反。
eg. 3 线-8 线译码器 (74138) $S_{0}S_{1}S_{2}$ 为使能输入, 100 才正常译码。

② 码制变换译码器: BCD 译码器 (4 线-10 线译码器)
完全译码 BCD: 输入 $1010 \sim 1111$ 时, 输出 $Y_{0}-Y_{9}$ 均为 1
不完全译码 BCD: 输入 $1010 \sim 1111$ 时, $Y_{0}-Y_{9}$ 为任意值
eg. BCD 译码器 (74XX42): 低电平有效, 完全译码
表达式推导, 最大项推导法

③ 显示译码器: 用于驱动数码显示屏, 将二进制代码所表示的东西显示出来。
共阴极 LED: 高电平输出有效
共阳极 LED: 低电平输出有效


1.4 多路选择器

(1)它是从一组输入数据中选出其中一个作为数据输出的电路,简写为 MUX。
在选择控制信号作用下,能从多路平行输入数据中任选一路作为输出。

(2)eg. 8 选 1 多路选择器 (74151);有两个功能:
① 8 选 1 多路选择器: $D_{7} \sim D_{0}$ 为数据输入端,$A_{2}A_{1}A_{0}$ 为选择控制端。

$$ Y = \overline{A_{2}}\overline{A_{1}}\overline{A_{0}} \cdot D_{0} + \overline{A_{2}}\overline{A_{1}}A_{0} \cdot D_{1} + \overline{A_{2}}A_{1}\overline{A_{0}} \cdot D_{2} + \ldots + A_{2}A_{1}A_{0} \cdot D_{7} $$

(每位数乘上选择控制端的输入)

② 多功能运算电路: $D_{7} \sim D_{0}$ 为控制输入端 (与上面相反)。
通过 $D_{7} \sim D_{0}$ 取不同的值,从输入变量 $A_{2}$、$A_{1}$、$A_{0}$ 的各个最小项中选取某几个最小项的或输出。
3 个变量 $\to 2^{3}$ 个最小项 $\to$ 最多有 $2^{8}$ 种功能 $\leftarrow 2^{8}$ 种输入。


1.5 竞争与冒险

(1)

(2)如何判断?
① 代数法: 若某个变量 (eg. A) 同时以原变量和反变量存在,逻辑函数在特定情况 (设定好其他变量),可化为
$F=A+\overline{A}$ (产生 1 冒险) / $F=A\cdot \overline{A}$ (产生 0 冒险)。

② 卡诺图法: 逻辑函数卡诺图中,函数每个与项对应卡诺图的一个卡诺圈。若两个卡诺圈相切,相切处存在冒险。

(3)消除: