惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
B
Blog
T
The Blog of Author Tim Ferriss
J
Java Code Geeks
腾讯CDC
D
Docker
G
Google Developers Blog
D
DataBreaches.Net
雷峰网
雷峰网
Blog — PlanetScale
Blog — PlanetScale
S
SegmentFault 最新的问题
The Cloudflare Blog
有赞技术团队
有赞技术团队
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Stack Overflow Blog
Stack Overflow Blog
大猫的无限游戏
大猫的无限游戏
量子位
美团技术团队
aimingoo的专栏
aimingoo的专栏
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Engineering at Meta
Engineering at Meta
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

Watermelonabc的Blog

又一个黑客模拟游戏 又一个黑客模拟游戏 家庭辅导一晚,有点感想 家庭辅导一晚,有点感想 福州大学单片机原理与应用(跨学科)复习 福州大学单片机原理与应用(跨学科)复习 福州大学毛概期末复习 福州大学毛概期末复习 x86 汇编语言详解 - 2 x86 汇编语言详解 -2 CCB 2026 Half-Final Guangzhou CCB 2026 Half-Final Guangzhou 视频也可以含恶意代码吗 视频也可以含恶意代码吗 Hello,2026 Hello,2026 2025 福州大学算法与数据结构复习 2025 福州大学算法与数据结构复习 2025 福州大学习概期末复习 2025 福州大学习概期末复习 Frida 入门 Frida 入门 记一场贴吧交流 记一场贴吧交流 虚拟机保护 虚拟机保护 2025 强网杯 S9 Reverse 复现 2025 强网杯 S9 Reverse 复现 你如何在 FZU 取到快递 你如何在 FZU 取到快递
2025 福州大学数字逻辑笔记
Watermelonabc · 2025-09-08 · via Watermelonabc的Blog

破防了QAQ

破防了 QAQ

(永恒的经典:【考试周破防】4K 高清重制版

沃日,90 分满绩,翁老师我爱你 😚

教学内容与考核标准

内容:基本知识、逻辑运算、逻辑函数化简、逻辑门电路、组合逻辑电路、触发器、时序逻辑电路、中规模逻辑电路

理论 40 学时 + 实验 36 学时

考核方式:雨课堂考勤 + 课程中心作业 + 期末考试

期末考试题目分布

  • 单选题 1 * 10 = 10 分
  • 填空题 2 * 10 = 20 分
  • 化简题 3 * 5 = 15 分
  • 分析题 3 题 25 分
  • 设计题 3 题 30 分

数制

常用数制:十进制 (Decimal)、二进制 (Binary)、十六进制 (Hexadecimal)、八进制 (Octal)

数字的表示法:

(N)R=(KnKn−1...K1K0.K−1K−2...)R=Kn×Rn+Kn−1×Rn−1+...+K1×R1+K0×R0+K−1×R−1+K−2×R−2+...(N)_R = (K_nK_{n-1}...K_{1}K_{0}.K_{-1}K_{-2}...)_R = K_n × R^{n} + K_{n-1} × R^{n-1} + ... + K_{1} × R^{1} + K_{0} × R^{0} + K_{-1} × R^{-1} + K{-2} × R{-2} + ...

第二个等号后面的表示法称为 “按权展开法”。注意十六进制数的按权展开需要将字母换成对应的十进制数

数制转换

按权展开法会将数字转换成十进制的,因此其他进制转十进制非常简单。下面介绍其他进制转换。

本部分在考试中仅作选择或填空题。选择自己可以熟练掌握的技巧,不需要考虑方法是否学过。

1. 十进制转二进制

正规方法:整数除 2 取余;小数乘 2 取整

除 2 取余,除到商为 0 为止
乘 2 取整,乘到积为 1 或精度的后一位为止。期间,如果整数部分有进位,舍去进位。当得到精度的后一位(如要求 4 位小数,则进行 5 次乘法)时,如果整数部分为 0,则不进位;如果整数部分为 1,则进位。

其他方法:按位展开,逐次递减

image-20250908170136476

由于其他进制转十进制很容易,因此如果想降低知识点负担,对于其他进制转二进制,只需要先转成十进制,然后再转成二进制即可。

2. 二进制转八进制

整数从右到左、小数从左到右,将数字按三位三位划分(三位二进制数最多表示到 7),不足三位的用 0 补齐。然后分别计算三位数字对应的八进制数,连接起来即可。

(11100101.01)2=(011)2(100)2(101)2.(010)2=(3)8(4)8(5)8.(2)8=(345.2)8(11100101.01)_2 = (011)_2(100)_2(101)_2.(010)_2=(3)_{8}(4)_{8}(5)_{8}.(2)_{8}=(345.2)_8

八转二是逆过程,每一个八进制数用三位二进制数表示即可。

3. 二进制转十六进制

整数从右到左、小数从左到右,将数字按四位四位划分(四位二进制数最多表示到 F,即 15),不足四位的用 0 补齐。然后分别计算四位数字对应的十六进制数,连接起来即可。

(11100101.01)2=(1110)2(0101)2.(0100)2=(E)16(5)16.(8)16=(E5.8)16(11100101.01)_2 = (1110)_2(0101)_2.(0100)_2=(\text{E})_{16}(5)_{16}.(8)_{16} = (\text{E}5.8)_{16}

十六转二是逆过程,每一个十六进制数用四位二进制数表示即可。

有符号数表达

对于有符号数,数字的最高位(最左端)是符号位,用 “0” 表示正数,用 “1” 表示负数。符号位之后的位才表示数值。例如 01010=+1010=+1001010 = +1010 = +10

符号位只有一位,如果计算时发现符号位出现进位现象,舍弃进位。

通常将用 “+”、“-” 表示正、负的二进制数称为符号数的真值,而把将符号和数值一起编码表示的二进制数称为机器数或机器码

1. 原码

数值位和无符号数一样,再加上符号位,就得到了原码。整数的符号位加在数值位最高位的左端,小数的符号位在整数部分上。

+1101+1101 的原码是 0110101101−1101-1101 的原码是 1110111101+0.1011+0.1011 的原码是 0.10110.1011−0.1011-0.1011 的原码是 1.10111.1011

原码虽然表示简单,但计算较为不便。例如,9+(−3)=69+(-3) = 6,但在原码表示中,9+(−3)=(01001)2+(10011)2=(11100)2=−129+(-3)=(01001)_2+(10011)_2=(11100)_2=-12,很明显是错误的!

2. 反码

相比原码,正数反码不变,而负数反码的数值位按位取反。如 +1101+1101 的反码是 0110101101,而 −1101-1101 的反码是 1001010010

反码是解决原码带来的计算问题的一个过渡方案。这句话的意思是:它仍然有问题。比如反码仍然算不对上面的 9+(−3)9+(-3)

原码和反码还会多出来一个 “正负 0” 问题:“正 0” 表示为 0000 00000000\ 0000,而 “负 0” 表示为 1000 00001000\ 0000

3. 补码

相比原码,正数补码不变,而负数补码的数值位按位取反后还要对最低位加 1。如 −1101-1101 的补码是 1(0010+1)=100111(0010+1)=10011−0.1101-0.1101 的补码是 1.(0010+1)=1.00111.(0010+1)=1.0011

也可以这么看:对于负数,数值位从右到左(即最低位)数直到遇到第一个 1,这些位不变,之后的位取反,即 −1101=1(110) 反 1=10011-1101 = 1 (110)_{\text {反}} 1 = 10011−10110=1(101) 反 10=101010-10110 = 1 (101)_{\text {反}} 10 = 101010

补码解决了原码和反码的计算问题,这次就算对了 9+(−3)9+(-3)

补码也解决了 “正负 0” 问题:对于 8 位二进制数,“负 0” 的补码仍然是 0000 00000000\ 0000,因为第 9 位因溢出而舍弃。

计算机中的运算均采用补码形式。

码制

如果说数制表示数字,那么码制就表示信息。

BCD 码

BCD 码全称二 - 十进制 (Binary Coded Decimal) 码,通过四位二进制数对一位十进制数编码以传递信息。例如,对于十进制的 1212,我们不是直接转换成 11001100,而是对 1122 分别进行 BCD 编码。

由于一位十进制数仅由 0 ~ 9 表示,但四位二进制数可以表示 24=162^4=16 个十进制数,于是每种 BCD 码仅取出其中 10 种作为有效编码,其余 6 种是无效编码(称为 “冗余码”)。

BCD 码有何好处?首先是转换方便。计算机只需要每四位二进制数按照映射表转换成一位十进制数,然后拼接即可得到完整的十进制数字,这比整体按权展开要容易得多。

其次,由于 BCD 按位编码,所以它可以精确表示十进制小数。如 0.10.1 在一种 BCD 码下表示为 0000.00010000.0001,但如果乘 2 取整就会得到一个无限循环小数 0.000110011001100...0.000110011001100...,计算机无法精确表示一个具有无限位的数,于是会出现精度问题。

本课主要学习 8421 码和余 3 码,2421 码仅作了解

1. 8421 码

8421 码是最常用的一种有权码。8421 码到十进制的转换和普通二进制数相同(按权展开),它们表示出来的 0 ~ 9 也完全相同。注意,1010 ~ 1111 是冗余码。

8421 码表示的二进制数字和其对应十进制数字字符的 ASCII 码的低四位相同,因此使用 8421 码可以简化 BCD 码与对应 ASCII 码的转换。

8421 码按位编码,如:

(258)10=(0010 0101 1000)8421 码 (258)_{10}=(0010\ 0101\ 1000)_{\text {8421 码}}

(0001 0001 0100 0101)8421=(1145)10(0001\ 0001\ 0100\ 0101)_{\text{8421}}=(1145)_{10}

8421 码之间的计算:如果某一位的和 ≤ 9,且没有产生进位,无需调整;如果某一位的和 > 9,或者产生了进位(虽然和 ≤ 9 但向高位进了一位),则必须进行加 6 调整(即加上 01100110)。和之后的余 3 码相比,8421 码的调整规则就多了一点。

17+18=0001 0111+0001 1000=0010 1111(进位 + 低四位和 > 9, 需要调整)17 + 18 = 0001\ 0111 + 0001\ 1000 = 0010\ 1111\text {(进位 + 低四位和 > 9, 需要调整)}

调整:0010 1111+0000 0110=(0011 0101)8421 码 =35\text {调整:} 0010\ 1111+ 0000\ 0110=(0011\ 0101)_{\text {8421 码}}=35

2. 2421 码

2421 码也是一种有权码,它的权是 2、4、2、1。0101 ~ 1010 是冗余码。

2421 码是一种对 9 的自补代码,可以给运算带来方便。对 9 自补意味着一个数的 2421 码只要自身按位取反,便可以得到该数对 9 的补数的 2421 码。

(258)10=(0010 1011 1110)2421 码 (258)_{10}=(0010\ 1011\ 1110)_{\text {2421 码}}

(0001 0001 0100 1011)2421 码 =(1145)2421 码 (0001\ 0001\ 0100\ 1011)_{\text {2421 码}}=(1145)_{\text {2421 码}}

(4)10=(0100)2421 码→按位取反 (1011)2421 码 =(5)10(4)_{10}=(0100)_{\text {2421 码}}\xrightarrow {\text {按位取反}}(1011)_{\text {2421 码}}=(5)_{10}

3. 余 3 码

余 3 码是 8421 码加上 0011 形成的一种无权码,因其比 8421 码多 3 而得名,如 (5)10=(0101)8421 码 +(0011)2=(1000) 余 3 码 (5)_{10} = (0101)_{\text {8421 码}}+(0011)_{2}=(1000)_{\text {余 3 码}}。0000、0001、0010、1101、1110、1111 是冗余码。

余 3 码同样是一种对 9 的自补代码。两个余 3 码相加的运算规则是:如果有进位,结果每四位加 3;如果没有进位,结果每四位减 3。注意将结果转换回十进制时使用的是余 3 码。

余 3 码同样按位编码。

(256)10=((0010)8421+(0011)2  (0101)8421+(0011)2  (0110)8421+(0011)2) 余 3 码 =(0101 1000 1001) 余 3 码 (256)_{10}=((0010)_{8421}+(0011)_2\ \ (0101)_{8421}+(0011)_{2}\ \ (0110)_{8421}+(0011)_{2})_{\text {余 3 码}}=(0101\ 1000\ 1001)_{\text {余 3 码}}

(1000 1001 1001 1011) 余 3 码 =(5668)10(1000\ 1001\ 1001\ 1011)_{\text {余 3 码}}=(5668)_{10}

计算:

13+67=0100 0110+1001 1010=1110 0000(进位,需要调整)13 + 67 = 0100\ 0110 + 1001\ 1010 = 1110\ 0000\text {(进位,需要调整)}

调整:1110 0000+0011 0011=(1011 0011) 余 3 码 =80\text {调整:} 1110\ 0000 + 0011\ 0011 = (1011\ 0011)_{\text {余 3 码}} = 80

几种 BCD 码的映射表:

十进制数字 8421 码 2421 码 余 3 码
0 0000 0000 0011
1 0001 0001 0100
2 0010 0010 0101
3 0011 0011 0110
4 0100 0100 0111
5 0101 1011 1000
6 0110 1100 1001
7 0111 1101 1010
8 1000 1110 1011
9 1001 1111 1100
无效码 1010 - 1111 0101 - 1010 0000 - 00101101 - 1111

可靠性编码

用于校验 / 纠错,提高信息传输的可靠性。

从 BCD 码转到可靠性编码,中间需要先转到二进制码。例如 (01001000)8421 码 =(110000)2=(101000) 格雷码 (01001000)_{\text {8421 码}}=(110000)_{2}=(101000)_{\text {格雷码}}

由于 8421 码的低四位和二进制码相同,因此在转换小等于 4 位的 8421 码时,可以直接转换成格雷码

格雷码

格雷码的特点:任意两个相邻的数,其格雷码仅有一位不同。可以有效避免多位跳变,提高系统可靠性。

二进制码转格雷码:

设二进制码为 B=Bn−1Bn−2…Bi+1Bi…B1B0,对应格雷码为 G=Gn−1Gn−2…Gi+1Gi…G1G0\text {设二进制码为}\ B = B_{n-1} B_{n-2} … B_{i + 1} B_i … B_1B_0\text {,对应格雷码为} G = G_{n-1} G_{n-2} … G_{i + 1} G_i … G_1G_0

有:

Gn−1=Bn−1(最高位相同)G_{n-1} = B_{n-1}\text {(最高位相同)}

Gi=Bi+1⊕Bi(其他位为高位二进制与当前位异或)G_i = B_{i + 1} ⊕ B_i\text {(其他位为高位二进制与当前位异或)}

格雷码转二进制码:

逆向计算。二进制码的最高位(最左边)与格雷码的最高位相同。将产生的每一位二进制码,与下一位相邻的格雷码异或(舍去进位),作为二进制码的下一位。

即:

Bn−1=Gn−1(最高位相同)B_{n-1} = G_{n-1}\text {(最高位相同)}

Bi=Bi+1⊕GiB_{i} = B_{i+1} ⊕ G_{i}

每位 BiB_{i} 最终可以全部用格雷码表示。

奇偶校验码

奇偶校验码仅校验,不纠错(因为无法判断出错位置),只能检测奇数个 bit 错误。

  • 奇校验

    如果给定一组数据位中 1 的个数是奇数,补一个 bit(0 或 1)在最右方,使得总的 1 的个数是奇数。例:0000001, 补一个 bit 为 0, 得到 00000010
    校验时,对接收数据(含校验位)逐位相加,对 2 取余。如果余数为 1,则奇校验通过。

  • 偶校验

    如果一组给定数据位中 1 的个数是奇数,补一个 bit(0 或 1)在最右方,使得总的 1 的个数是偶数。例:0000001, 补一个 bit 为 1, 得到 00000011
    校验时,对接收数据(含校验位)逐位相加,对 2 取余。如果余数为 0,则偶校验通过。

异或的 “不进位加法” 性质和此校验方法相似。

实际上,在数学中,一个二进制数的奇偶性只需要看它的最低位即可。如果最低位为 1,则为奇数;为 0,则为偶数。

reference: 奇偶校验位

逻辑代数基础

逻辑代数是逻辑电路的数学表达。

代数系统概述

逻辑变量以大写字母表示。逻辑变量的取值只有 “0” 和 “1” 两种可能

三大基本逻辑运算:

  • 与 (AND)
    • F=A⋅BF = A\cdot B
    • 对应逻辑电路中的 “或门”
  • 或 (OR)
    • F=A+BF = A+B
    • 对应逻辑电路中的 “与门”
  • 非 (NOT)
    • F=A‾F = \overline{A}
    • 对应逻辑电路中的 “非门”/“反相器”

在一个表达式中,如果既有与运算又有或运算,则按先与后或的规则进行运算。

“与” 也称 “逻辑乘”,只要有一个变量为假 (0),那么运算结果也为假,和一般乘法相同
“或” 也称 “逻辑加”,只要有一个变量为真 (1),那么运算结果也为真,和一般加法相似

五大公理:

  1. 交换律

  2. 结合律

  3. 分配律

  • A+(B⋅C)=(A+B)⋅(A+C)A+(B\cdot C) = (A+B)\cdot (A+C)
  • A⋅(B+C)=A⋅B+A⋅CA\cdot (B+C) = A\cdot B + A\cdot C
  1. 0-1 律
  • A+0=AA + 0=AA⋅0=0A\cdot 0 = 0
  • A+1=1A + 1 = 1A⋅1=AA\cdot 1 = A
  1. 互补律
  • A+A‾=1A + \overline{A} = 1A⋅A‾=0A\cdot \overline{A}=0
  • A‾\overline{A} 唯一存在

三种基本逻辑运算可以描述各种逻辑关系,对这些关系使用数学描述,即可得到逻辑函数。

F=f(A1,A2,...,An)F=f{(A_1,A_2,...,A_n)}

逻辑函数的取值同样是 “0” 或 “1”。如果对应于逻辑变量 A1,A2,...,AnA_1,A_2,...,A_n 的任意一组取值,逻辑函数 F1F_1F2F_2 的取值均相等,则 F1=F2F_1 = F_2

表示逻辑函数的方法,除了上面给出的逻辑表达式之外,还有真值表和卡诺图两种。

基本定理

由五大公理可推出八大定理:

  1. 0-1 律

  2. 重叠律(你,莫的选择)

  • A+A=AA+A=AA⋅A=AA\cdot A =A
  1. 吸收律
  • A+A⋅B=AA+A\cdot B=AA⋅(A+B)=AA\cdot (A+B)=A
  1. 消除律
  • A+A‾⋅B=A+BA+\overline{A}\cdot B = A + BA⋅(A‾+B)=A⋅BA\cdot (\overline{A}+B)=A\cdot B
  1. 对合律(双重否定表肯定)
  • A‾‾=A\overline{\overline{A}}=A
  1. 互补律
  • A+B‾=A‾⋅B‾\overline{A+B}=\overline{A}\cdot \overline{B}A⋅B‾=A‾+B‾\overline{A\cdot B} = \overline{A} + \overline{B}
  1. 并项律
  • A⋅B+A⋅B‾=AA\cdot B+A\cdot \overline{B} = A(A+B)⋅(A+B‾)=A(A+B)\cdot (A+\overline{B})=A
  1. 包含律
  • A⋅B+A‾⋅C+B⋅C=A⋅B+A‾⋅CA\cdot B+\overline{A}\cdot C+B\cdot C=A\cdot B+\overline{A}\cdot C
  • (A+B)⋅(A‾+C)⋅(B+C)=(A+B)⋅(A‾+C)(A+B)\cdot (\overline{A}+C)\cdot (B+C)=(A+B)\cdot (\overline{A}+C)

重要规则

三个重要规则:

  1. 代入规则

A(B+C)=AB+ACA(B+C)=AB+AC,令 C=C+DC=C+D,则 A[B+(C+D)]=AB+A(C+D)A[B+(C+D)]=AB+A(C+D)

  1. 反演规则(德・摩根定理)

一切运算 “反过来”:“⋅\cdot” 和 “++” 互换,“0” 和 “1” 互换,原反变量互换,保持运算顺序不变(如原式中的乘法优先于加法,反演后从乘法得到的加法仍然优先于从加法得到的乘法)。

对于复合逻辑,有两种做法:

  • 不管复合逻辑,只做下面的基本运算。例如,ABC‾\overline{ABC} 的反演式是 A‾+B‾+C‾‾\overline{\overline{A}+\overline{B}+\overline{C}}。如果需要化简,那么对上面的式子用互补律即可。例如,接上式,A‾+B‾+C‾‾=A‾‾B‾‾C‾‾=ABC\overline{\overline{A}+\overline{B}+\overline{C}} = \overline{\overline{A}}\overline{\overline{B}}\overline{\overline{C}}=ABC
  • 不管基本运算,直接将复合逻辑下的基本运算视为整体。例如,ABC‾=ABC‾‾=ABC\overline{ABC}=\overline{\overline{ABC}}=ABC,可以直接得到最简

F=A‾+B‾⋅(C+D‾E)→F‾=A⋅[B+C‾⋅(D+E‾)]F=\overline{A}+\overline{B}\cdot (C+\overline{D}E) \rightarrow \overline{F}=A\cdot [B+\overline{C}\cdot (D+\overline{E})]

可以求反函数。

  1. 对偶规则

与反演规则相比,对偶规则不需要原反变量的互换。得到的是函数的对偶式 F′F'

F=A‾+B‾⋅(C+D‾E)→F′=A‾⋅[B‾+C⋅(D‾+E)]F=\overline{A}+\overline{B}\cdot (C+\overline{D}E) \rightarrow F'=\overline{A}\cdot [\overline{B}+C\cdot (\overline{D}+E)]

如果 F=F′F=F',则 FF 为自对偶函数。

如果 F=GF=G,则 F′=G′F'=G'

复合逻辑

  1. 与非逻辑

F=A⋅B⋅C⋅...‾F=\overline{A\cdot B\cdot C \cdot ...}

与非逻辑可以检测全 1 序列

使用与非逻辑可以实现与、或、非三种基本运算

  • 与:F=A⋅B‾⋅1‾=A⋅B‾‾+0=A⋅BF=\overline{\overline{A\cdot B}\cdot 1}=\overline{\overline{A\cdot B}}+0=A\cdot B

  • 或:F=A⋅1‾⋅B⋅1‾‾=A⋅1‾‾+B⋅1‾‾=A+BF=\overline{\overline{A\cdot 1}\cdot\overline{B\cdot 1}}=\overline{\overline{A\cdot 1}}+\overline{\overline{B\cdot 1}}=A+ B

  • 非:F=A⋅1‾=A‾+0=A‾F=\overline{A\cdot 1}=\overline{A} + 0=\overline{A}(未使用的输入端全部挂高接 1)

  1. 或非逻辑

F=A+B+C+...‾F=\overline{A+B+C+...}

或非逻辑可以检测全 0 序列

使用或非逻辑同样可以实现与、或、非三种基本运算

  • 与:F=A+0‾+B+0‾‾=A+0‾‾⋅B+0‾‾=A+BF=\overline{\overline{A + 0} + \overline{B + 0}}=\overline{\overline{A + 0}}\cdot\overline{\overline{B+0}}=A + B

  • 或:F=A+B‾+0‾=A+B‾‾⋅1=A+BF=\overline{\overline{A + B}+ 0}=\overline{\overline{A+B}}\cdot 1=A+B

  • 非:F=A+0‾=A‾⋅1=A‾F=\overline{A + 0}=\overline{A}\cdot 1=\overline{A}(未使用的输入端全部挂低接 0)

  1. 与或非逻辑

F=AB+CD+...‾F=\overline{AB+CD+...}

使用与或非逻辑也可以实现与、或、非三种基本运算,但实际应用中成本较高,因此与或非逻辑更多用于实现与化简逻辑函数。

  1. 异或逻辑

F=A⊕B=A‾B+AB‾F=A⊕B=\overline{A}B+A\overline{B}

相同为 0,不同为 1。异或可以检测二进制数据中 1 个数的奇偶性

快速计算方法:异或是 “不进位加法”。例如 1⊕0⊕1=1+0+1=(1)0=0(舍去进位)1⊕0⊕1 = 1+0 + 1=(1) 0 = 0\text {(舍去进位)}

  1. 同或逻辑(异或非)

F=A⊙B=A‾B‾+ABF=A⊙B=\overline{A}\overline{B}+AB

相同为 1,不同为 0。同或可以按位检测二进制是否相等

同或和异或既互为相反,又互为对偶。由于同或可以由异或取反得到,因此实践中通常用异或实现同或。

逻辑函数表达式

基本形式

  • 与 - 或表达式(积之和)

例如:F=A‾B+AB‾C+CF=\overline{A}B+A\overline{B}C+C

  • 或 - 与表达式(和之积)

例如:F=(A‾+B)(A+B‾+C)DF=(\overline{A}+B)(A+\overline{B}+C)D

混合表达式是 “两不像”,例如 F=(AB+C‾)(A+B‾C)+DF=(AB+\overline{C})(A+\overline{B}C)+D 既不属于与 - 或表达式,也不属于或 - 与表达式

逻辑函数的基本形式是不唯一的。

最小项和最大项

  • 最小项

包含所有 nn 个变量的与项,共有 2n2^n 种组合。每个变量以原变量或反变量形式出现且仅出现一次,在 2n2^n 种变量组合中,每个最小项仅在一种组合下为 1,其余均为 0

相同变量构成的不同最小项的与和必定为 0;全部最小项的或和必定为 1。

  • 最大项

包含所有 nn 个变量的或项,也有 2n2^n 种组合。每个变量以原变量或反变量形式出现且仅出现一次,在 2n2^n 种变量组合中,每个最大项仅在一种组合下为 0,其余均为 1

相同变量构成的不同最大项的或和必定为 1。

相同变量构成的最大项 MiM_i 和最小项 mim_i 互补,即 Mi=mi‾M_i=\overline{m_i}

对于相同变量,若用最小项列表表示为 ∑m(Sm)\sum m(S_m),那么它的最大项列表 ∏M(⋯ )\prod M(\cdots) 中的下标,恰好是全体下标中没出现在最小项列表里的那些,即 ∑i∈Smmi=∏j∉SmMj\sum_{i \in S_m} m_i = \prod_{j \notin S_m} M_j

最小项和最大项的序号按照二进制转换成十进制,注意最小项中原变量为 1,而最大项中反变量为 1。例如,最小项 ABC‾DAB\overline{C}D 对应的二进制位是 11011101,对应 m13m_{13};最大项 A+B+C‾+DA+B+\overline{C}+D 对应的二进制位是 00100010,对应 M2M_{2}

如果两个最小/大项之间只有一项的原反性不同,则这两个最小/大项在逻辑上相邻。例如 ABABA‾B\overline{A}B 逻辑相邻,而 ABABA‾B‾\overline{A}\overline{B} 在逻辑上不相邻。

标准形式

mim_iMiM_i 替代变量。

  • 标准与 - 或(最小项)

F(A,B,C)=A‾⋅B‾C+A‾BC‾+AB‾⋅C‾+ABC=m1+m2+m4+m7=∑m(1,2,4,7)F(A,B,C)=\overline{A}\cdot\overline{B}C+\overline{A}B\overline{C}+A\overline{B}\cdot\overline{C}+ABC=m_1+m_2+m_4+m_7=\sum{m(1,2,4,7)}

  • 标准或 - 与(最大项)

F(A,B,C)=(A+B+C‾)(A‾+B+C‾)(A‾+B‾+C‾)=M1+M5+M7=∏M(1,5,7)F(A,B,C)=(A+B+\overline{C})(\overline{A}+B+\overline{C})(\overline{A}+\overline{B}+\overline{C})=M_1+M_5+M_7=\prod{M(1,5,7)}

转化为标准形式

  • 代数转换法

第一步:转换成与 - 或表达式 / 或 - 与表达式
第二步:补项,将非最小/大项的项扩展成最小/大项形式。与 - 或表达式用 A+A‾=1A+\overline{A}=1 补项;或 - 与表达式用 A⋅A‾=0A\cdot \overline{A}=0 补项

  • 真值表转换法

列真值表,输出为 1 对应最小项,输出为 0 对应最大项

表达式化简

目标:项数最少,每一项中的变量也最少(和标准表达式不太一样,标准表达式每一项的变量都是全的)

  1. 代数化简法

化简与 - 或表达式常用定理:并项律、吸收律、消去律,参见基本定理

化简或 - 与表达式:

Ⅰ 求 FF 的对偶式 F′F'(加变乘,乘变加)
Ⅱ 化简 F′F'(此时 F′F' 又变成与 - 或那一套了)
Ⅲ 求化简后的 F′F' 的对偶式,即为 FF 的最简或 - 与表达式

  1. 卡诺图化简法

卡诺图是一种图形化的逻辑函数化简方法,通过格雷码排列(00 -> 01 -> 11 -> 10)的方式将逻辑相邻(上下、左右、首尾相接)的最小项放在物理相邻的位置。由于当变量大于 5 时难以构造,故一般最多考到 4 变量。

如何填写卡诺图?其实应当以格子对应的最小项序号为准。如果存在对应的最小项,则在对应格子填上 1。

设计过程中还会遇到无关项 d,这些无关项可 1 可 0。

然后画卡诺圈。画的时候需要遵循以下规则:

  • 所有的 1 都需要被至少一个卡诺圈圈起
  • 圈的个数尽量少,面积尽量大,但面积必须是 2k2^k(1、2、4、8、16)
  • 卡诺圈可以 “头尾相接”,即最后一列/行的 1 可以和第一列/行的 1 圈在一起

卡诺图画法示例,注意我们写的时候 AB 和 CD 要换过来

卡诺图画法示例,注意我们写的时候 AB 和 CD 要换过来

卡诺图 (K-Map) 化简工具 提供了一个在线化简工具。你不仅可以得到化简后的表达式,还可以关联其对应的卡诺圈画法、真值表、最小 / 大项 以及非国标的门电路图

从卡诺圈得到最小项:在一个卡诺圈内,如果一个变量的值始终为 1,则以原变量形式出现在最小项中;如果始终为 0,则以反变量形式出现;如果既有 1 也有 0,则不出现。

集成门电路

电平

逻辑值 0 和 1 在数字电路中体现就是电平。电平分为高电平和低电平。一般来讲,高电平对应 “1”,低电平对应 “0”。

正逻辑:高电平对应 “1”,低电平对应 “0”,现代的大部分接口使用正逻辑。
负逻辑:高电平对应 “0”,低电平对应 “1”,仅用于早期或特殊接口。

高低电平之间的差值越大,逻辑值 “1” 和 “0” 的在物理层面的区别越明显,电路工作越可靠。

电路不会一直稳定。为了应对电压波动,实际的高低电平判定有范围,如理想的低电平是 0V,实际可能 0.5V 也可以判定为低电平。

常见逻辑门符号

符号标准使用国标 GB / T 4728.12-1996,参见 基本逻辑门电路图形符号 的 “国标图形符号” 部分

  • 门标 &\And
  • 门标 ⩾1\geqslant 1
  • 门标 11,门后加圆圈表示 “非”
  • 与非门标 &\And,门后加圆圈
  • 或非门标 ⩾1\geqslant 1,门后加圆圈
  • 异或门标 =1=1

触发器

在数字电路中,输入信号作用前的状态称为现态,记作 QQ;输入信号作用后的状态,称为次态,记作 Qn+1Q^{n+1}

触发器是一种具有记忆功能的电子器件,每次可以存储 1 位二进制信息,其输出除了和输入相关,有时还和现态相关。

nn 个触发器存储 nn 位二进制信息,可以表示 2n2^n 状态

触发器可分为 RS 触发器、D 触发器、JK 触发器、T 触发器等类型。当输入的时钟脉冲 CP = 1 时:

触发器 次态方程 约束方程 功能 备注
RS 触发器 Qn+1=S+R‾QQ^{n+1}=S + \overline{R}Q / Qn+1=S‾+RQQ^{n+1}=\overline{S} + RQ(与非门构成的基本 RS[1] R⋅S=0R\cdot S=0 / R+S=1R+ S=1(与非门构成的基本 RS) 保留、置 0、置 1 Reset(置 0),Set(置 1),约束方程表示 R、S 需要满足的条件
D 触发器 Qn+1=DQ^{n+1}=D - 置 0、置 1 状态变化仅与输入信号相关;锁存器
JK 触发器 Qn+1=JQ‾+K‾QQ^{n+1}=J\overline{Q}+\overline{K}Q - 保留、置 0、置 1、翻转
T 触发器 Qn+1=TQ‾+T‾Q=T⊕QQ^{n+1}=T\overline{Q}+\overline{T}Q=T⊕Q - 保留、翻转 JK 触发器的特殊情况;计数触发器
T’ 触发器 Qn+1=Q‾Q^{n+1}=\overline{Q} - 翻转 T 触发器的特殊情况,可以通过 JK 触发器或 D 触发器实现

当输入的时钟脉冲 CP = 0 时,所有触发器的状态保持不变,即 Qn+1=QQ^{n+1}=Q。这是电平触发。电平触发的时钟信号是使能信号,在它处于某个特定电平(高电平或低电平)的整个期间,输出都会实时跟随输入的变化。当使能信号无效时,输出才 “锁存” 住最后一个值并保持不变。所有简单结构触发器均采用这一触发方式。

简单结构触发器的抗干扰能力较弱,所以实际使用的触发器结构要复杂一些,分为主从触发边沿触发

主从触发器有两个触发器,分为主触发器和从触发器。假设主触发器高电平有效,从触发器低电平有效,当 CP = 1 时,仅有主触发器工作(主模式),实时响应输入信号;下降沿以及低电平时,主触发器被锁定,从触发器工作(主从模式),输出主触发器锁存的值。主从 RS 触发器和主从 JK 触发器属于这一类触发

边沿触发分为上升沿(正边沿)触发和下降沿(负边沿)触发。上升沿触发只有在时钟信号从低电平(逻辑 0)跳变到高电平(逻辑 1)的那个瞬间,电路才会采样输入并更新输出;下降沿触发只有在时钟信号从高电平(逻辑 1)跳变到低电平(逻辑 0)的那个瞬间,电路才会采样输入并更新输出。在时钟周期内的其他任何时间,输入信号都不会影响输出。维持 - 阻塞 D 触发器属于上升沿触发。

触发器需要注意两个问题:一个是简单结构触发器的 “空翻” 现象,另一个是主从 JK 触发器的 “一次翻转” 现象。

“空翻” 现象指的是在同一个脉冲作用周期内触发器状态发生两次及以上的变化的现象,原因是在使能信号生效期间,输出都会实时跟随输入的变化。“一次翻转” 指的是在同一个脉冲作用周期内,主触发器的状态只能根据输入信号的变化改变一次,翻转一次后主触发器锁定,状态不再受输入影响。

几个触发器描述图表

  1. 状态表

现态和对应输入下次态的输出

次态 Qn+1Q^{n+1}
现态 QQ RS = 00 RS=01 RS=11 RS=10
0 d 0 0 1
1 d 0 1 1
  1. 状态图

反映状态转移关系的有向图

RS 触发器的状态图

  1. 激励表

状态转移时对输入的要求

QQ Qn+1Q^{n+1} R S
0 0 d 1
0 1 1 0
1 0 0 1
1 1 1 d
  1. 时间图(工作波形图)

状态转移在一定时间内的连续变化。按照触发方式和功能表确定判决时刻线,在时刻线上判断输出变化,其它时刻保持不变

RS 触发器的时间图

有限状态机

上面的状态图已经可以表示一个有限状态机了。有限状态机 (FSM) 是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型。

一个状态机一般由这几个部分组成:状态、转移、动作、转移条件。

  • 将一个系统离散化,可以得到很多种状态
  • 一个状态接收一个输入执行了某些动作到达了另外一个状态的过程就是一个转移
  • 在某一状态下,只有达到了转移条件,才会按照状态机的转移流程转移到下一状态,并执行相应的动作。
  • 在状态机的运转过程中会有很多种动作,例如进入动作在进入状态时进行

如果你还知道 C 语言的话,switch - case 语句就可以构成一个简单的状态机。

组合逻辑电路

输出仅取决于该时刻的输入,而与过去的输入值无关,没有反馈回路。

分析组合电路的步骤

  1. 确定电路的输入和输出
  • 识别电路的输入变量(通常用 A、B、C 等表示)
  • 确定电路的输出变量(通常用 Y、F 等表示)
  1. 从输入到输出逐级分析
  • 从输入端开始,逐级向输出端分析
  • 写出每个门电路的输出逻辑表达式
  • 将各级表达式代入,得到最终的逻辑函数
  1. 化简逻辑函数
  • 使用布尔代数定律化简表达式
  • 或使用卡诺图进行化简
  1. 列出真值表
  • 根据化简后的逻辑函数,列出所有输入组合对应的输出值
  1. 描述电路功能
  • 根据真值表分析电路实现的逻辑功能(序列检测、加减法、码制转换)
  • 确定电路的应用场合

设计组合电路的步骤

  1. 建立给定问题的逻辑描述
  • 设定输入、输出变量组成。一个二进制位对应一个独立变量。输出变量根据逻辑决定数量,两个没有直接逻辑关系的行为分属两个变量。
  • 常用分析方法有真值表法(通用方法但是比较累)和分析方法(比较简洁但是难)
  1. 求出逻辑函数的最简表达式

参考 表达式化简

  1. 选择逻辑门类型,并进行逻辑函数变换
  2. 画出逻辑电路图

设计路线不是唯一的。我们不要求最简洁的做法,只需要逻辑功能正确即可

设计过程中的几个问题

无关项

如果输入变量的某些取值组合不会出现或者对这些组合的输出不关心,则称这些输入项为无关项,用 X 或 d 表示

在卡诺图化简中,这些无关项的取值可 1 可 0,因此可以灵活选择以符合 “卡诺圈面积尽量大” 的规则

多输出函数

能掌握掌握,不能掌握可以不用,这是锦上添花的做法

不提供反变量

最直接的做法就是接一个非门,但设计结果往往不经济,因此不提供反变量也意味着使用最少的非门(或不使用)。具体怎么实现看题目有没有限制逻辑门使用。

没有一种系统而有效的方法以设计出不提供反变量的最简电路,因此灵活处理即可

中规模组合逻辑电路

中规模组合逻辑电路主要有以下种类芯片:加法器、译码器、数据选择器

加法器

加法器分为半加器和全加器。半加器不考虑来自低位的进位,而全加器需要考虑来自低位的进位。

半加器

半加器

半加器的输入是 AiA_iBiB_i,输出是本位和 SiS_i 与本位进位 CiC_i

Si=Ai⊕Bi, Ci=AiBiS_i=A_i \oplus B_i,\ C_i=A_iB_i

由于单个半加器不接受低位进位,因此只能对 1 位二进制数执行相加运算,也可以作为级联构成的加法器的第一级(因为此时没低位)

全加器

半加器的输入是 AiA_iBiB_i 和低位进位 Ci−1C_{i-1},输出是本位和 SiS_i 与本位进位 CiC_i

由于单个全加器接受低位进位,因此可以级联构成多位二进制数的加法器。

有两种方法得到全加器:

  • 通过完整的组合逻辑电路设计步骤,从真值表、卡诺图、表达式得到
  • 通过两个半加器的叠加

全加器的构成方法

全加器的构成方法

按进位方式分类,全加器可分为串行进位二进制加法器和超前进位二进制并行加法器

  • 串行进位二进制加法器

由全加器级联构成,高位的进位输入依赖于低位的进位输出

  • 超前进位二进制并行加法器

此内容较为困难,故仅介绍采用此方式的芯片

74283

74283 属于超前进位二进制并行加法器,有 4 个被加数输入端 AiA_i、4 个加数输入端 BiB_i、1 个低位进位输入端、4 个本位和输出端 FiF_i、1 个本位进位输出端

74283 芯片符号

  • 码制转换(8421 码和余 3 码)

    将 8421 码转换成余 3 码,只需要固定加数输入为 0011(3 的补码);将余 3 码转换成 8421 码,只需要固定加数为 1101(-3 的补码),或者固定加数为 1100(-3 的反码),缺少的 “1” 由低位输出补齐;若要实现二者的互换,则引入控制信号 MM 接入低位进位端和固定加数端,当 M=0M=0 时实现将 8421 码转换成余 3 码,当 M=1M=1 时实现将余 3 码转换成 8421 码。

  • 余 3 码的加法

    由于余 3 码有修正机制(有进位时加 3,没进位时减 3),因此需要两片 74283,其中一片用于修正。

  • 乘法

    依照小学学过的竖式乘法,计算各位输出。(分析法)得到的输出应和此式相似:Z1=a1b1+0Z_1=a_1b_1+0,那么 a1b1a_1b_1 接入 A1A_1/B1B_100 接入 B1B_1/A1A_1

译码器

译码即将二进制代码的原意 “翻译” 出来,还原成原特定含义的信息。输入是一组二进制代码,输出是一组对应的高低电平信号,只有一个输出端呈现有效信号

变量译码器是将 nn 位二进制输入变量译为 2n2^n 个不同输出信号的电路,每个输出对应一种输入代码,即一个 nn 变量最小项。由于输出的是最小项,因此在化简逻辑函数表达式时需要将表达式写作最小项表示

课程所用的译码器输出均为低电平有效,因此化简后,需要再次变换让最小项带上 “非”,例如 m1+m2+m4+m7m_1+m_2+m_4+m_7 应该转换成 m1‾⋅m2‾⋅m4‾⋅m7‾‾\overline{\overline{m_1}\cdot\overline{m_2}\cdot\overline{m_4}\cdot\overline{m_7}}

代表芯片是 74138(3-8 线译码器)、74139(双 2-4 线译码器)

74138

74138 是 3-8 线译码器,具有三个输入、八个输出以及三个使能端。当使能端 S1=1S_1=1S2‾+S3‾=0\overline{S_2}+\overline{S_3}=0 时,译码器才正常工作

74138

74139

2-4 线译码器具有两个输入、四个输出以及一个使能端。当使能端 E‾=0\overline{E}=0 时,译码器才正常工作。

74139 是双 2-4 线译码器,就是两个 2-4 线译码器并排黏合组成的

74139

译码器的扩展

在解决 nn 输入问题时,除了对应使用 nn 输入的译码器,还可以使用多个 n−1n-1 输入的译码器。由于一个译码器只能覆盖目标输出的一部分,因此需要片选译码器以分段输出需要的最小项。

两个 2-4 译码器可以构成一个 3-8 译码器,两个 3-8 译码器可以构成一个 4-16 译码器。设计时可以利用译码器的使能端,将最高位分别接入两片译码器的不同使能端,使得同一个最高位内,仅有一片输出译码器正常工作

如果用 2-4 译码器构成 4-16 译码器呢?从输出来看,我们至少需要 4 个 2-4 译码器作为输出端(4×4=164×4=16),但 2-4 译码器满打满算也就只有 2 + 1 = 3 个输入端,连 4 位输入都无法满足。因此,我们还需要一个 2-4 译码器 “压缩” 一部分输入,总共五个 2-4 译码器。高二位和一个使能信号接压缩输入的那个译码器,其输出和低二位分别作为四个输出译码器的输入。

函数发生

译码器输出最小项,而逻辑函数就可以用最小项之和表示。因此,译码器可以生成我们需要的逻辑函数

例如,通过真值表得知,全加器的输出函数可以这么表示:

Si(Ai,Bi,Ci−1)=∑m(1,2,4,7), Ci=(Ai,Bi,Ci−1)=∑m(3,5,6,7)S_i(A_i,B_i,C_{i-1})=\sum{m(1,2,4,7)},\ C_i=(A_i,B_i,C_{i-1})=\sum{m(3,5,6,7)}

转换得到译码器工作模式

数据选择器

通过选择变量选择需要输出哪一路的数据,当选择变量符合对应最小项下标,则将选择变量与上数据输出。nn 个选择变量可以控制 2n2^n 个数据输出。

nn 选 1 数据选择器的输出函数表达通式:F=∑i=0n−1miDiF=\sum_{i=0}^{n-1}{m_iD_i},其中 mim_i 表示选择变量的最小项

课程主要使用 74153(四选一)和 74151(八选一)

74153

4 个数据输入端,2 个选择变量端,1 个输出端,1 个使能端。当使能端 E‾\overline{E} 为 0 时,数据选择器正常工作

74153

实际应用时会将两个四选一 MUX 合并成一个 74153

74151

8 个数据输入端,3 个选择变量端,1 个输出端,1 个使能端。当使能端 E‾\overline{E} 为 0 时,数据选择器正常工作

74151

数据选择器的扩展

用 2 个 4 选 1 构成一个 8 选 1,用 2 个 8 选 1 构成一个 16 选 1

函数发生

由上面的通式可知,数据选择器可以输出选择变量的最小项。给不同的 DiD_i 赋予不同数据,就可以选取不同的完整最小项,从而实现函数发生。

nn 个控制变量可以实现 n+1n+1 变量的函数发生(有一个变量可以接到数据端)

时序逻辑电路

按输入脉冲同步与否,将时序逻辑电路分为同步时序逻辑电路异步时序逻辑电路。同步时序逻辑电路有一个统一的时钟脉冲控制每个触发器的状态,即每个触发器的 CP 端连接同一个脉冲;异步时序逻辑电路则没有,存在有的触发器的 CP 端连接到另外的脉冲上

根据输出信号的特点,将同步时序逻辑电路分为 Mealy 型和 Moore 型电路。Mealy 型电路的输出不仅和触发器现态 QQ 有关,还和当前的输入 X 有关;Moore 型电路的输出仅和触发器现态 QQ 有关

换句话说,就是看输入连接到哪些元件上了。如果输入存在直接连到最后输出的逻辑门上的分支,那么就是 Mealy 型电路。

时序电路的电路性质就是按这两点来描述的。

描述方法

  1. 逻辑函数表达式

分为输出函数表达式、激励函数表达式(驱动方程)和次态函数表达式。

输出函数表达式就是电路输出与输入和现态之间的关系表达式;激励函数表达式是存储电路的输入(电路内部)与输入和现态之间的关系表达式,具体来讲就是触发器的输入与输入和现态之间的关系表达式,一般从高序号到低序号写;次态函数表达式是次态与激励函数和现态之间关系表达式。

  1. 状态表

反映输出 ZZ、次态 yn+1y^{n+1} 和输入 xx、现态 yy 之间的关系

Mealy 型电路的状态表:

次态 / 输出
现态 输入 xx
yy yn+1/Zy^{n+1}/Z

输出跟着输入走

Moore 型电路的状态表:

次态
现态 输入 xx 输出
yy yn+1y^{n+1} ZZ

输出和输入无关

状态表简化得到转换表

CP 现态 输出
0 Q2nQ1nQ0nQ_{2}^{n}Q_{1}^{n}Q_{0}^{n} Y
  1. 状态图

反映状态转移规律,由状态表得出

Mealy 型电路的状态转换图:

模 4 可逆计数器 A

Moore 型电路的状态转换图:

模 4 可逆计数器 B

简化得到转换图,只表示状态转换顺序

模 8 计数器

  1. 时间图(工作波形图)

状态转移在一定时间内的连续变化。按照触发方式和功能表确定判决时刻线,在时刻线上判断输出变化,其它时刻保持不变

模 4 可逆计数器 B 的时间图

分析方法

表格分析法

  1. 确定电路类型,是 Mealy 型还是 Moore 型
  2. 写出输出函数表达式和激励函数表达式
  3. 列出次态真值表
输入 现态 激励函数(控制变量) 次态
xx yy DD/JJ/KK yn+1y^{n+1}
  1. 由次态真值表和输出函数表达式,作出状态图和状态表
  2. 画出时序图和时间图,文字说明电路逻辑功能

代数分析法

  1. 确定电路类型
  2. 写出输出函数表达式和激励函数表达式
  3. 将激励函数表达式代入触发器的次态方程,得到电路的次态方程
  4. 由次态方程和输出函数表达式,作出状态图和状态表
  5. 画出时序图和时间图,文字说明电路逻辑功能

设计方法

小规模同步时序逻辑电路主要设计计数器和序列检测器。触发器一般使用 JK 触发器

计数器

计数器,顾名思义就是在时钟的节拍下进行计数。计数器在工作时,所经历的状态是周期性的、有限的。我们将一次循环所包含的状态总数称为模数 MM,包含 nn 个触发器的最大模数 M=2nM=2^n

计数器也称为分频器。模 MM 计数器的输出端的信号频率是 CP 信号的 1M\frac{1}{M}

计数器只需要时钟脉冲以使触发器工作,不需要额外输入,因此计数器电路属于 Moore 型电路

  1. 输入输出变量
  2. 建立状态图和状态表。状态图仅包括从状态 S0S_0Sn−1S_{n-1} 的状态,状态表则要讨论全部状态(包含无效状态 d)
  3. 求出各触发器输出端的卡诺图
  4. 写出电路的状态方程和输出方程
  5. 求出驱动方程
  6. 画电路图
  7. 检查电路能否自启动。具体来说,如果所有无效状态经过有限个时钟周期后可以转换为某个有效状态,进入正常循环,那么电路就可以 “自启动”

有些题目还会讨论 “挂起” 现象。“挂起” 说明有无效状态组成了一个死循环,导致电路可能无法进入正常工作循环。“挂起” 现象是一种设计错误,如果出现 “挂起”,则应认为此电路不可自启动。
不存在 “部分可自启动” 这个说法。它是一个全局属性,要么成立(即对所有状态成立),要么不成立(即至少对一个状态不成立)

序列检测器

序列检测器用于检测是否连续输入某个序列。

  1. 建立原始状态图、原始状态表。原始状态图和原始状态表均只讨论题目明确说明的有效状态
  2. 状态化简。合并等价状态。
  3. 状态编码。根据化简后的状态数量确定触发器数量,进而确定每个状态要用几位编码。状态编码根据格雷码排序,需要讨论无效状态
  4. 求驱动方程和输出方程
  5. 画电路图
  6. 检查自启动特性

状态化简

判断两个状态等价有两个条件:输出相同次态等价。次态等价指两个状态的次态相等(等价)、交错(即 SiS_i​ 的次态是 SjS_j​,SjS_j​ 的次态是 SiS_i)、循环(多个状态相互依赖)或者不变

状态化简分为两个方法:目测法和隐含表法

目测法就是按上面的定义 义眼盯真 目视找出等价状态。很明显只有明显的状态对才能被找出。

隐含表法遵循以下步骤:

  1. 构成隐含表(横去尾、纵去头排列状态,等差阶梯状表格)
  2. 顺序比较:比较结果打 “√” 或 “×”,如果需要进一步确认则填上等效需要的条件状态对
  3. 关联比较状态对:查看条件状态对是否等价,如不等价则打 “×”
  4. 形成最大等效类:等价关系具有传递性,如等价对 AD、BD 等价,则最大等效类为 ABD
  5. 合并状态

隐含表

中规模时序逻辑电路

中规模组合逻辑电路主要有以下种类芯片:计数器和寄存器

同步计数器

本课程使用 74161 芯片。74161 的计数进制(模数)为十六进制,输出 4 位二进制码。置数方式采用同步方式,清零方式采用异步方式

异步方式只需要使能信号有效即可(即时响应),而同步方式需要使能信号有效 + 时钟边沿到来(定时响应)

74161 有 4 个置数输入端、2 个使能输入端 T 和 P、异步清零端 Cr‾\overline{C_r}、同步预置端 LD‾\overline{L_D}、脉冲输入端 CP、溢出进位输出端 OCO_C 和 4 个数据输出端 QDQCQBQAQ_DQ_CQ_BQ_A(高位到低位,严格按照此字母顺序)

74161

Cr‾=LD‾=1\overline{C_r}=\overline{L_D}=1T⋅P=0T\cdot P=0 时处于输出保持状态;在计数器正常工作状态(T⋅P=1T\cdot P=1)下,当同步计数器加到 11111111 时,OC=T⋅QD⋅QC⋅QB⋅QA=1O_C=T\cdot Q_D\cdot Q_C\cdot Q_B\cdot Q_A=1

构成小于十六进制的计数器

两种方法:

  • 反馈复位法

从输出端接收到特定信号时将信号返回给清零端 CrC_r。由于异步方式清零,因此设计 MM 进制计数器时,反馈复位法需要 M+1M+1 个状态以防止有效状态被清零,并且因为清零端从接受信号到清零中间有时间差,因此时间图会有毛刺

  • 反馈预置法

从输出端接收到特定信号时将信号返回给预置端 LDL_D。由于同步方式置数,因此设计 MM 进制计数器时,反馈预置法只需要 MM 个状态且没有毛刺

如果预置数为 0,那么计数从 0 → M 循环;预置数为 (16 - M),那么计数从预置数 → M 循环

构成大于十六进制的计数器

首先确定需要几位输出。MM 进制计数器所需状态数应在 2n−1<M⩽2n2^{n-1} \lt M \leqslant 2^{n} 内,则需要 nn 位输出,那么就需要 4(k−1)<n⩽4k4(k-1) \lt n \leqslant 4k,即 k 个 74161 芯片。

芯片之间的两种连接方法:

  • 同步连接法

两片芯片输入相同的 CP,片 2 的两个使能信号均引自片 1 的 OCO_C

  • 异步连接法

片 2 的 CP 来自片 1 的 OC‾\overline{O_C}(加非门),两片芯片的使能信号始终生效

异步计数器

异步二进制计数器由 T′T' 触发器构成(而 T′T' 触发器又可由 JK 触发器或 D 触发器构成),触发器之间串接,低位触发器的输出作为高位触发器的时钟

一个考点是判断是加法还是减法计数器

判断方法是看 Qi−1Q_{i-1}(低位输出)和 CPiCP_{i}(高位脉冲端)之间的连接情况。如果连起偶数个(0 / 2 个)圆圈,则为减法计数器;如果连起奇数个(1 个)圆圈,则为加法计数器

代表芯片是 7490 芯片

7490 芯片电路符号

7490 芯片逻辑功能表

按指定码制构成十进制计数器

  • 8421 码

QAQ_ACPBCP_B 相连,计数脉冲从 CPACP_A 输入。QDQCQBQAQ_DQ_CQ_BQ_A输出,构成 8421 码计数器

  • 5421 码

QDQ_DCPACP_A 相连,计数脉冲从 CPBCP_B 输入。QDQCQBQAQ_DQ_CQ_BQ_A输出,构成 5421 码计数器

实现 10 以内 M 进制计数器

把 M 进制对应的输出端为 1 的输出相与后反馈到清零端,作为计数满整清零信号

实现 11 - 100 的 M 进制计数器

  1. 由两片(个位和十位)7490 扩展成 100 进制

两芯片均连接成十进制,时钟脉冲从个位 CP0CP_0 进,个位的 Q3Q_3 与十位芯片的 CP0CP_0 相连即可,

  1. 把 M 进制所对应的十位、个位芯片上输出为 1 的端相与后反馈到清零端,作为个位和十位的计数满整清零信号

计数型序列发生器

循环产生指定序列。nn 位长度的序列需要 nn 个状态,即需要先构成 nn 进制计数器。

计数器的计数输出需要翻译为 1 位二进制,可以使用基本逻辑门实现

0101101 序列发生器

或者将计数器输出引入译码器(74138)或数据选择器(74151)。

如果使用译码器,则把 “序列输出 F 为 1 的那些状态” 找出来,用译码器把这些状态 “识别” 出来,然后把识别结果 “与非” 在一起。

11000101 序列发生器

如果使用数据选择器,则数据选择器的数据输入端设置为指定的序列值

011101 序列发生器

寄存器

寄存器用于暂时存放一组二进制代码,由触发器和控制门构成。

基本寄存器有读出、写入、复位(清零)功能,使用 D 触发器构成最简单。一个 nn 位寄存器由 nn 个触发器构成,能存放 nn 位二进制数

移位寄存器在基本寄存器的基础上增加了左移 / 右移功能。右移指 Qin+1=Qi−1nQ^{n+1}_{i}=Q^{n}_{i-1},左移指 Qin+1=Qi+1nQ^{n+1}_{i}=Q^{n}_{i+1}。空出来的位置由对应的串行输入取代,被挤出去的数据就没有了

代表芯片是 74194,实现了双向移位

74194 芯片电路符号

这个芯片比较难 QAQ

环形和扭环形计数器

环形计数器的有效循环为:唯一的 1 右移,或者唯一的 0 左移

环形计数器的状态利用率低,nn 个触发器构成的环形计数器仅有 nn 个有效状态,有 2n−n2^n-n 个无效状态

扭环形计数器的有效循环为:从左到右,1 填满 0;从右到左,0 填满 1

扭环形计数器的状态利用率较高,nn 个触发器构成的环形计数器有 2n2n 个有效状态,有 2n−2n2^n-2n 个无效状态

扭环形计数器也可以用 74194 芯片构成。

奇数分频器

本质计数器,按反馈预置法接线

有一个规律:使用 74194 芯片右移时,置数端

  • QD‾\overline{Q_D} 是模 8 计数
  • QC‾\overline{Q_C} 是模 6 计数
  • QB‾\overline{Q_B} 是模 4 计数
  • QA‾\overline{Q_A} 是模 2 计数
  • QDQC‾\overline{Q_DQ_C} 是模 8+62=7\frac{8+6}{2}=7 计数
  • QCQB‾\overline{Q_CQ_B} 是模 6+42=5\frac{6+4}{2}=5 计数
  • QDQB‾\overline{Q_DQ_B} 是模 8+42=6\frac{8+4}{2}=6 计数

脉冲型序列发生器

先设置左移右移,然后设计反馈电路

10110 序列发生器


实验提示

建议使用芯片乃至实验仪前测试一下功能。基础门电路芯片尽量对每个门(至少测你需要的门)都测一遍功能,不然会成小丑 🤡

数码管记得 “共阳极” 接法,即在数码管右侧、逻辑灯泡的左下角,有对 “-5V” 和 “+5V” 的接口,将它们连一起。否则你的数码管数值会乱跳,然后求助老师并收获一番质问 😦

要对自己的电路有信心。也可以先用 Multisim 仿真一下结果

一般实验的数据记录可以提前写,因为我们做的毕竟是 “理论验证实验” 🤣

实验考试难度,就我抽到的题目(74161 实现模 10 计数器)而言,不会超过实验书的实验难度(远远没达到综合实验的难度),但一定要带实验书和一般实验的报告,因为你要看芯片的接线图的!


  1. 集成触发器(如 D 触发器、JK 触发器)中,其内部的核心锁存单元绝大多数都是基于或非门(或等效结构)的 RS 锁存器。 ↩︎