DDPP 第三章学习笔记

DDPP5 第三章 Switching Algebra and Combinational Logic 的学习笔记

本章的主要内容为逻辑代数逻辑代数在电路中的使用及化简timing hazard

Switching Algebra

这一节基本上就是离散数学 (1) 开头两章的内容术语和记号有很多不同幸好忘的差不多了不然都要搞混了

记号

  • ANDX  YX\ \cdot\ Y
  • ORX+YX + Y
  • NOTXX'
  • AND 的优先级高于 OR

yysy 我还是更喜欢 ,\lor, \land\cdot 也还行++ 真的有点难以接受它们明明是对偶的怎么搞得像个环一样主要还是下面这些定理用加号看起来真的好怪异或不是还号称二进制加法吗

公理

(A1)X1    X=0(A1D)X0    X=1(A2)X=0    X=1(A2D)X=1    X=0(A3)0  0=0(A3D)1+1=1(A4)1  1=1(A4D)0+0=0(A5)0  1=1  0=0(A5D)1+0=0+1=1\begin{array}{rl} \text{(A1)} & X \ne 1 \implies X = 0 \\ \text{(A1D)} & X \ne 0 \implies X = 1 \\\\ \text{(A2)} & X = 0 \implies X' = 1 \\ \text{(A2D)} & X = 1 \implies X' = 0 \\\\ \text{(A3)} & 0 \ \cdot\ 0 = 0 \\ \text{(A3D)} & 1 + 1 = 1 \\\\ \text{(A4)} & 1 \ \cdot\ 1 = 1 \\ \text{(A4D)} & 0 + 0 = 0 \\\\ \text{(A5)} & 0 \ \cdot\ 1 = 1 \ \cdot\ 0 = 0 \\ \text{(A5D)} & 1 + 0 = 0 + 1 = 1 \end{array}

定理

中文名来自数理逻辑与集合论第二版2.2 节等值公式

(T1)X+0=X(T1D)X  1=XIdentities(同一律)(T2)X+1=1(T2D)X  0=0Null elements(零律)(T3)X+X=X(T3D)X  X=XIdempotency(幂等律) (T4)(X)=XInvolution(双重否定律)(T5)X+X=1(T5D)X  X=0Complements(补余律)(T6)X+Y=Y+X(T6D)X  Y=Y  XCommutativity(交换律)(T7)(X+Y)+Z=X+(Y+Z)(T7D)(X  Y)  Z=X  (Y  Z)Associativity(结合律)(T8)X  (Y+Z)=X  Y+X  Z(T8D)X+Y  Z=(X+Y)  (X+Z)Distributivity(分配律)(T9)X+X  Y=X(T9D)X  (X+Y)=XCovering(吸收律)(T10)X  Y+X  Y=X(T10D)(X+Y)  (X+Y)=XCombining(T11)XY+XZ+YZ= XY+XZ(T11D)(X+Y)(X+Z)(Y+Z)= (X+Y)(X+Z)Consensus(T12)X+X++X=X(T12D)X  X    X=XGeneralized idempotency(T13)(X   X     X)=X+X++X(T13D)(X+X++X)=X X   XDeMorgan’s theorem(摩根律) (T14)[F(X1,X2,,Xn,+,  )]= F(X1,X2,,Xn,  ,+)GeneralizedDeMorgan’s theorem\begin{array}{ll} \begin{array}{rl} \enspace\text{(T1)} & X + 0 = X \\ \enspace\text{(T1D)} & X \ \cdot\ 1 = X \end{array} & \text{Identities(同一律)} \\\\ \begin{array}{rl} \enspace\text{(T2)} & X + 1 = 1 \\ \enspace\text{(T2D)} & X \ \cdot\ 0 = 0 \end{array} & \text{Null elements(零律)} \\\\ \begin{array}{rl} \enspace\text{(T3)} & X + X = X \\ \enspace\text{(T3D)} & X \ \cdot\ X = X \end{array} & \text{Idempotency(幂等律)} \\\\ \begin{array}{rl} \quad\ \text{(T4)} & (X')' = X \end{array} & \text{Involution(双重否定律)} \\\\ \begin{array}{rl} \enspace\text{(T5)} & X + X' = 1 \\ \enspace\text{(T5D)} & X \ \cdot\ X' = 0 \end{array} & \text{Complements(补余律)} \\\\ \begin{array}{rl} \enspace\text{(T6)} & X + Y = Y + X \\ \enspace\text{(T6D)} & X \ \cdot\ Y = Y \ \cdot\ X \end{array} & \text{Commutativity(交换律)} \\\\ \begin{array}{rl} \enspace\text{(T7)} & (X + Y) + Z = X + (Y + Z) \\ \enspace\text{(T7D)} & (X \ \cdot\ Y) \ \cdot\ Z = X \ \cdot\ (Y \ \cdot\ Z) \end{array} & \text{Associativity(结合律)} \\\\ \begin{array}{rl} \enspace\text{(T8)} & X \ \cdot\ (Y + Z) = \,\: X \ \cdot\ Y \,\: + \,\: X \ \cdot\ Z \,\: \\ \enspace\text{(T8D)} & X + \,\: Y \ \cdot\ Z \,\: = (X + Y) \ \cdot\ (X + Z) \end{array} & \text{Distributivity(分配律)} \\\\ \begin{array}{rl} \enspace\text{(T9)} & X + \,\: X \ \cdot\ Y \,\: = X \\ \enspace\text{(T9D)} & X \ \cdot\ (X + Y) = X \end{array} & \text{Covering(吸收律)} \\\\ \begin{array}{rl} \text{(T10)} & \,\: X \ \cdot\ Y \,\: + \,\: X \ \cdot\ Y' \,\: = X \\ \text{(T10D)} & (X + Y) \ \cdot\ (X + Y') = X \end{array} & \text{Combining} \\\\ \begin{array}{rl} \text{(T11)} & \begin{aligned} & X \cdot Y + X' \cdot Z + Y \cdot Z \\[-0.2em] =\ & X \cdot Y + X' \cdot Z \end{aligned} \\ \text{(T11D)} & \begin{aligned} & (X + Y) \cdot (X' + Z) \cdot (Y + Z) \\[-0.2em] =\ & (X + Y) \cdot (X' + Z) \end{aligned} \end{array} & \text{Consensus} \\\\ \begin{array}{rl} \text{(T12)} & X + X + \cdots + X = X \\ \text{(T12D)} & X \ \cdot\ X \ \cdot\ \cdots\ \cdot\ X = X \end{array} & \text{Generalized idempotency} \\\\ \begin{array}{rl} \text{(T13)} & \begin{aligned} & (X \ \ \cdot\ X \ \ \cdot\ \cdots\ \cdot\ X)' \\[-0.2em] = & \,\: X' + X' + \cdots + X' \end{aligned} \\ \text{(T13D)} & \begin{aligned} & (X + X + \cdots + X)' \\[-0.2em] = & \,\: X' \cdot\ X' \cdot\ \cdots \ \cdot\ X' \end{aligned} \end{array} & \begin{array}{c} \text{DeMorgan’s theorem} \\ \text{(摩根律)} \end{array} \\\\ \begin{array}{rl} \enspace\ \text{(T14)} & \begin{aligned} & [F(X_1, X_2, \ldots, X_n, +, \ \cdot\ )]' \\[-0.2em] =&\ F(X_1', X_2', \ldots, X_n', \ \cdot\ , +) \end{aligned} \end{array} & \begin{array}{c} \text{Generalized} \\ \text{DeMorgan’s theorem} \end{array} \end{array}
Shannon’s expansion theorems(T15)F(X1,X2,,Xn)= X1  F(1,X2,,Xn)+X1  F(0,X2,,Xn)(T15D)F(X1,X2,,Xn)=[X1+F(1,X2,,Xn)][X1+F(0,X2,,Xn)]\begin{array}{rl} & \text{Shannon’s expansion theorems} \\[0.3em] \text{(T15)} & F(X_1, X_2, \ldots, X_n) = \ X_1 \ \cdot\ F(1, X_2, \ldots, X_n) + X_1' \ \cdot\ F(0, X_2, \ldots, X_n) \\ \text{(T15D)} & F(X_1, X_2, \ldots, X_n) = [X_1 + F(1, X_2, \ldots, X_n)] \cdot [X_1' + F(0, X_2, \ldots, X_n)] \end{array}

对齐好累我为什么要浪费这个时间

Duality

将一个等式中所有的 00 换成 1111 换成 00++ 换成 \cdot\cdot 换成 ++等式依然成立

上面的定理中带 D 的都是上一条的对偶

Standard Representations of Logic Functions

这里需要翻出来我离散 (1) 写的 真值表生成器其实可以去加上 ++\cdot 作为 alias但如果要加 ' 的话会很麻烦所以干脆不加了吧

logic function 有若干精确的标准表示方法

  • 真值表
  • canonical sum: 主析取范式极小项 (minterm) 的和
  • 使用 \sum 表示的 minterm list
  • canonical product: 主合取范式极大项 (maxterm) 的和
  • 使用 \prod 表示的 maxterm list
  • Verilog case 语句

这里用 \prod 表示 maxterm list 的下标比离散 (1) 讲的舒服多了minterm 的 index 就是哪组变量取值下表达式值为 1maxterm 的 index 就是哪组变量取值下表达式为 0所以两种范式的下标刚好是补集例如X,Y,ZX, Y, Z 三个变量XYZX' \cdot Y \cdot Z' 的下标是 22X+Y+ZX' + Y + Z' 的下标是 55X,Y,Z(1,2,6)=XYZ+XYZ+XYZ=X,Y,Z(0,3,4,5,7)\sum_{X,Y,Z}(1,2,6) = X' \cdot Y' \cdot Z + X' \cdot Y \cdot Z' + X \cdot Y \cdot Z' = \prod_{X,Y,Z}(0,3,4,5,7)

Verilog 的 case 语句大概是这个样子虽然还完全没学 Verilog但我感觉 Shiki 自带的 system-verilog 高亮看起来就比 verilog 正确许多以后可能也用 system-verilog 的高亮了

case ({X,Y,Z})
  1,2,6:    F = 1;
  default:  F = 0;
endcase

Combinational-Circuit Analysis

这一节就是说给你一个电路图怎么搞出它的 logic function其实没啥好说的按拓扑序一个一个 gate 递推就行可以用真值表也可以用逻辑表达式

有一个小 trickDeMorgans theorem 在电路图中表现为将 inversion bubble 换到另一侧输入 / 输出并且改变 gate 的类型AND / OR这样的话如果两个 inversion bubble 在一条 wire 上就可以消掉

Combinational-Circuit Synthesis

在 digital design 中Synthesis 有若干种含义例如从 HDL 到 FPGA而在这一节只是指从 formal description 到 gate-level circuit

Circuit Descriptions and Designs

自然语言描述 → 逻辑表达式 / 真值表canonical sum / product → 电路

很多时候写出逻辑表达式会比列出真值表简单一些但在面对较为复杂的逻辑关系时列出真值表可以强制设计师考虑到每种情况从而避免漏掉 corner case

一个输出是某个逻辑表达式的电路被称作 realize 了这个表达式是这个表达式的 realization 或者 implementation

Circuit Manipulations

在多数电路技术包括 CMOSNAND / NOR 比 AND / OR 效率更高所以一般会修改电路来尽量使用 inverting gate 而非 noninverting gate

  • 在 wire 上移动 inversion bubble从上一个输出移到下一个输入
  • 在 wire 的两侧同时加上 inversion bubble或者 NOT gate
  • 消除同一根 wire 上的两个 inversion bubble
  • 将 inversion bubble 换到另一侧输入 / 输出并且改变 gate 的类型AND / OR

Combinational-Circuit Minimization

一般情况下逻辑表达式的化简主要用的是定理 T10Combining就是在 sum of products 中找到仅有一项相反的两个 product 将它们合并最终得到的也是一个 sum of products实现为 2-levelfirst-level 计算 productsecond-level 计算 sum的电路

product of sums 电路是对偶的就不重复了下文也是一样

Karnaugh Maps

如 DDPP5 Figure 3-23 所示

2-variable, 3-variable, and 4-variable Karnaugh maps

在 Karnaugh map 中每一个表示一个 minterm相邻包括跨过边界到另一侧的相邻的格子仅有一位相反所以边长为 1 / 2 / 4 的矩形可以合并

选出若干矩形恰好覆盖所有输出为 1 的格子就可以化简逻辑表达式

如果一个矩形覆盖的全是 1并且是极大的在其对应的 product 中减少任何一个输入都会使其覆盖到 0就称作一个 prime implicant最简的逻辑表达式是若干 prime implicant 的 sum

有的函数的 Karnaugh map 非常分散例如 parity function没有连成一块的 1就需要多级而非 2-level 的电路来进行化简

在 FPGA 中输入数量较少的电路都是通过 lookup table (LUT) 而非 gate-level circuit 来实现只需真值表就可以但复杂的电路需要由多个 LUT 组合起来此时逻辑表达式的化简依然有用

Timing Hazards

真实的电路中会有 delay而上面研究的都是 combinational logic circuit 的 steady-state behavior没有考虑到 transient behavior

因为 delay 的存在可能会发生这样的情况输入发生了改变稳态下的输出不变但在一瞬间内输出发生了变化产生了一个 short pulse这样的 pulse 被称作 glitch

如果一个电路有产生 glitch 的可能性则称这个电路存在 hazard实际物理电路的 delay 大小等因素难以控制所以这里只是考虑产生 glitch 的可能性而非实际是否有 glitch 产生有点类似于并发编程中要保证所有可能的执行顺序下都不出错

Static Hazards

static-1 hazard稳态输出是 1改变某一个输入后稳态输出还是 1但这一个输入改变时可能会短暂地输出 0static-0 hazard 是类似的

书上给了个例子但这个其实很好理解就是电路的一个输入作为多个 gate 的输入而这些 gate 的输出变化得有快有慢

Finding Static Hazards Using Maps

正常的 sum of products 电路中不会有 static-0 hazard可能有 static-1 hazard

可以用 Karnaugh map 来找到 hazard如果两个相邻的 1 没有被同一个 gate 覆盖从其中一个变为另一个时就可能产生 glitch因为极端情况下可能所有覆盖原来那一格的 gate 先全部变为 0覆盖后来那一格的 gate 才变为 1

消除 hazard 就是用冗余的 gate 来覆盖这样的相邻的 1类似于定理 T11Consensus

Dynamic Hazards

如果变化一个输入时可能产生不止一次 glitch就称作 dynamic hazard

一个正常的 2-level sum of products / product of sums 电路中不会有 dynamic hazard

Designing Hazard-Free Circuits

在多数电路中尤其是 synchronous digital system 中hazard 不会造成什么影响但在某些电路asynchronous sequential circuits需要避免 hazard 的存在

在一般的电路中消除 hazard 是复杂的而在 sum of products 中可以用 Karnaugh map 或者取遍所有 prime implicant称作 complete sum来消除 hazard