免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

数字电路入门:从逻辑代数、二进制到卡诺图化简的完整指南

数字电路入门:从逻辑代数、二进制到卡诺图化简的完整指南 1. 项目概述为什么从逻辑代数开始如果你正准备踏入数字电路的世界或者正在啃一本厚厚的《数字电路》教材翻到第一章第一节“逻辑代数基础”心里可能会犯嘀咕我学的是电路怎么先讲起数学来了这玩意儿跟二极管、三极管、芯片有什么关系别急这恰恰是数字电路最精妙也最基础的一环。逻辑代数也叫布尔代数它不是普通的算术而是一套专门用来描述和处理“真”与“假”、“开”与“关”、“1”与“0”的数学工具。想象一下你家里的智能开关。你按下按钮灯亮再按一下灯灭。这个简单的“是”或“否”的判断就是数字世界的基石。计算机CPU里数以亿计的晶体管本质上就是在高速地进行着无数个这样的“开关”动作。逻辑代数就是描述这些开关如何组合、如何运算、最终如何实现复杂功能比如计算、存储、判断的“语言”和“法则”。不掌握这门语言你看到的电路图就是一盘散沙掌握了它你就能看懂芯片手册能设计简单的控制逻辑甚至能理解计算机底层是如何工作的。所以这一节绝不是可有可无的数学课而是为你打开数字世界大门的钥匙。2. 逻辑代数的核心从物理开关到数学抽象2.1 基本逻辑运算与、或、非逻辑代数的基础是三种基本运算与AND、或OR、非NOT。它们听起来抽象但对应到实际电路和生活中非常直观。逻辑与AND好比串联的两个开关控制一盏灯。只有开关A“与”开关B同时闭合灯才会亮。在数学上我们规定条件全为“真”或“1”时结果才为“真”。它的运算规则是0 AND 0 00 AND 1 01 AND 0 01 AND 1 1。在数字电路中实现“与”功能的器件叫与门。逻辑或OR好比并联的两个开关控制一盏灯。只要开关A“或”开关B任意一个闭合灯就会亮。在数学上只要有一个条件为“真”结果就为“真”。运算规则0 OR 0 00 OR 1 11 OR 0 11 OR 1 1。对应的电路器件是或门。逻辑非NOT这是最简单的单输入运算就是“取反”。输入为真输出就为假输入为假输出就为真。好比一个常闭触点平时通路按下按钮反而断开。运算规则NOT 0 1NOT 1 0。对应的器件是非门反相器。注意初学者常犯的一个错误是混淆“与”和“或”的直觉。生活中我们说“我有钱和时间就去旅游”这其实是一个“与”关系两者必须同时满足。而“下雨或刮风就不出门”这是一个“或”关系任一条件满足即触发。在分析问题时务必先准确地将自然语言描述转化为逻辑关系。2.2 逻辑变量与常量在逻辑代数中我们使用字母如A, B, C, X, Y来表示逻辑变量每个变量的取值只能是0或1。这里的0和1没有大小之分只代表两种互斥的状态低电平/高电平、假/真、关/开、否/是。逻辑常量就是0和1本身。它们与变量的运算遵循上述基本法则。例如任何变量与1相“与”结果等于变量本身A AND 1 A任何变量与0相“或”结果也等于变量本身A OR 0 A。这些看似简单的规则是后续进行复杂逻辑化简的基础。2.3 逻辑函数与真值表当多个逻辑变量通过基本运算组合在一起就形成了逻辑函数。例如F A AND (B OR C)。逻辑函数描述了输出与输入之间的确定关系。真值表是描述逻辑函数最直观、最可靠的工具。它列出了输入变量所有可能的取值组合以及对应的输出值。对于一个有n个输入变量的函数其真值表有2^n行。例如对于函数 F A AND B其真值表如下ABF A AND B000010100111绘制真值表是分析逻辑问题的第一步也是验证逻辑设计是否正确的重要手段。在实际工作中无论是分析现成芯片的功能还是验证自己设计的电路真值表都是必不可少的工具。3. 数制基础二进制、八进制与十六进制数字电路直接处理的是二进制信号但二进制写起来太长不易读。因此八进制和十六进制作为二进制的“缩写形式”被广泛使用。理解它们之间的转换是阅读内存地址、配置寄存器、进行位操作的基本功。3.1 二进制数字电路的母语二进制逢二进一基数R为2使用的数码是0和1。每一位的权值是2的幂次方从右向左2^0, 2^1, 2^2...。 例如二进制数1011.01BB是二进制后缀转换为十进制1×2^3 0×2^2 1×2^1 1×2^0 0×2^(-1) 1×2^(-2) 8 0 2 1 0 0.25 11.25二进制直接对应电路的高低电平是计算机唯一能“理解”的语言。所有指令、数据在CPU内部和内存中都是以二进制形式存在的。3.2 八进制与十六进制二进制的便捷“包装”因为二进制位数太多人们习惯将其分组。八进制是三位二进制一组因为2^38十六进制是四位二进制一组因为2^416。十六进制需要0-9 A(10), B(11), C(12), D(13), E(14), F(15)这16个数码。转换技巧核心二进制转八进制从小数点开始向左向右每三位一组不足三位补零然后直接将每组转换为对应的八进制数。例11010111.011B-(011)(010)(111).(011)-3 2 7 . 3-327.3OO是八进制后缀二进制转十六进制从小数点开始向左向右每四位一组不足四位补零然后直接将每组转换为对应的十六进制数。例11010111.011B-(1101)(0111).(0110)-D 7 . 6-D7.6HH是十六进制后缀八/十六进制转二进制上述过程的逆过程每一位展开成3位或4位二进制即可。十进制转其他进制常用“除基取余法”整数部分和“乘基取整法”小数部分。这部分需要一定练习但现代编程和计算器都能轻松完成理解原理更重要。实操心得在软件开发和硬件调试中十六进制Hex的使用频率远高于八进制。查看内存数据、配置寄存器、颜色代码如#FF0000代表红色都离不开十六进制。我个人的习惯是看到二进制先下意识地想想它的十六进制形式这能极大提高阅读和调试效率。例如一个8位寄存器值10100011我立刻反应出是0xA3。3.3 不同数制间的转换练习与常见坑点理解了原理还需要通过练习巩固。这里分享几个常见转换和容易出错的地方。整数转换将十进制数215转换为二进制、八进制和十六进制。转二进制除2取余逆序排列 215 / 2 107 ... 余 1 107 / 2 53 ... 余 1 53 / 2 26 ... 余 1 26 / 2 13 ... 余 0 13 / 2 6 ... 余 1 6 / 2 3 ... 余 0 3 / 2 1 ... 余 1 1 / 2 0 ... 余 1 逆序排列余数11010111B。转八进制可以直接用十进制除8取余也可以利用二进制结果分组。利用二进制11010111B从右向左三位一组(011)(010)(111)-327O。验证3×8^2 2×8^1 7×8^0 192 16 7 215。转十六进制利用二进制11010111B四位一组(1101)(0111)-D7H。验证13×16^1 7×16^0 208 7 215。小数转换将十进制小数0.625转换为二进制。 使用乘2取整法 0.625 × 2 1.25 ... 整数部分 1 取走1剩下0.25 0.25 × 2 0.5 ... 整数部分 0 0.5 × 2 1.0 ... 整数部分 1 剩下0结束 顺序排列整数部分0.101B。 验证1×2^(-1) 0×2^(-2) 1×2^(-3) 0.5 0 0.125 0.625。常见坑点小数转换的无限循环不是所有十进制小数都能用有限位二进制精确表示。例如0.1十进制转二进制是0.0001100110011...这是一个无限循环小数。这就是为什么在编程中进行浮点数比较时直接判断0.1 0.2 0.3可能会得到False的原因存在精度损失。补零分组的方向二进制转八/十六进制分组时以小数点为界向左整数部分和向右小数部分分别分组。整数部分向左分组高位不足补零小数部分向右分组低位不足补零。方向错了结果就全错了。十六进制字母大小写通常不区分A3H和a3H一样。但在某些严格的编程语法或协议中可能有规定一般建议用大写更清晰。4. 逻辑代数的基本定理与规则掌握了基本概念和数制我们回到逻辑代数本身。它有一套完整的数学体系包括一系列定理和规则用于化简和变换逻辑函数其目标是让最终的电路设计更简单、成本更低、速度更快。4.1 基本定律这些定律和普通代数有些相似但内涵是逻辑运算。0-1律A 0 A,A · 1 A·常表示AND有时省略互补律A A 1,A · A 0A表示NOT A重叠律A A A,A · A A交换律、结合律、分配律形式和代数一样但运算对象是逻辑加OR和逻辑乘AND。分配律有两种A(BC) AB AC与对或的分配以及A BC (AB)(AC)或对与的分配这是布尔代数特有的。4.2 常用公式摩根定理等以下几个公式在化简中极其常用还原律(A) A。双重否定等于肯定。吸收律A AB AA(AB) AA AB A B这个非常有用AB AC BC AB AC冗余项消除摩根定理De Morgans Theorem这是最重要的定理之一用于实现与、或运算的相互转换。(AB) A · B。或运算的否定等于各变量分别否定后再进行与运算。(A·B) A B。与运算的否定等于各变量分别否定后再进行或运算。推广对于多个变量也成立。(ABC...)’ A·B·C·...(A·B·C·...)’ ABC...。摩根定理的电路意义非常深刻它意味着一个“或非门”NOR可以等效为一个“与门”加两个“非门”一个“与非门”NAND可以等效为一个“或门”加两个“非门”。在实际芯片制造中由于工艺原因可能大量生产某一种通用门电路如全用NAND门或全用NOR门来实现所有逻辑功能这时摩根定理就是实现转换的理论基础。4.3 代入规则、反演规则和对偶规则这是三个操作逻辑表达式的有力工具。代入规则任何一个含有变量A的逻辑等式如果将所有出现A的地方都代之以同一个逻辑函数则等式仍然成立。这允许我们将定理应用到更复杂的表达式上。反演规则求一个逻辑函数F的反函数补函数F时只需将原函数F中所有的“·”换成“”“”换成“·”。将原变量换成反变量如A换成A‘反变量换成原变量。将常量0换成11换成0。保持原函数的运算顺序必要时加括号。例若F A·B C·D 则F (AB) · (CD)。注意原来AB是一个整体现在AB‘也是一个整体需要用括号保证优先级。对偶规则将一个逻辑函数F中的“·”换成“”“”换成“·”0换成11换成0得到的新函数称为F的对偶式F*。注意对偶规则不要求变量取反。如果某个等式成立那么它的对偶式也一定成立。例F A·(BC) 其对偶式F* A (B·C)。吸收律AABA的对偶式是A·(AB)A同样成立。注意事项反演规则和对偶规则极易混淆。关键区别在于反演规则求的是反函数补函数变量要取反对偶规则求的是对偶式变量不取反。反演规则常用于设计“低电平有效”的控制电路而对偶规则常用于证明新的定理。5. 逻辑函数的表示方法与相互转换一个逻辑功能可以通过多种方式描述它们之间可以相互转换。掌握这些方法就能在不同的设计阶段从需求到实现使用最合适的工具。5.1 五种表示方法详解真值表如前所述最原始、最完备的表示法。列出一个函数所有可能的输入输出组合。它是逻辑设计的起点和验证的终点。逻辑函数表达式用与、或、非等运算符把变量连接起来。例如F AB BC。表达式便于进行代数运算和化简。逻辑图用逻辑门电路的图形符号连接而成的电路图。它直接对应最终的硬件实现。例如F AB BC可以用两个与门、一个或门和一个非门来实现。波形图时序图显示输入、输出变量随时间变化的波形。在分析电路的动态特性、时序和延迟时至关重要。它展示了信号在时钟沿前后的变化情况。卡诺图一种图形化的化简工具将在下一节详细展开。它特别适合手工化简5变量以下的逻辑函数非常直观。5.2 方法间的转换实战从真值表到逻辑表达式这是最常用的转换。有两种标准形式最小项之和标准与或式找出真值表中所有输出为1的行每一行对应一个“最小项”所有输入变量以原变量或反变量形式相“与”然后将这些最小项相“或”。例一个三变量真值表F在输入为011 101 110时为1。则F ABC ABC ABC。这就是标准与或式。最大项之积标准或与式找出所有输出为0的行每一行对应一个“最大项”所有输入变量以原变量或反变量形式相“或”然后将这些最大项相“与”。接上例F在输入为000 001 010 100 111时为0。则F (ABC)(ABC)(ABC)(ABC)(ABC)。这就是标准或与式。从逻辑表达式到逻辑图这是直接的综合过程。根据表达式的运算优先级逐级画出对应的逻辑门。F (A ⊕ B) · C⊕表示异或。先画一个异或门输入AB再画一个非门输入C得到C‘最后画一个与门输入接异或门输出和C’。从逻辑图到逻辑表达式/真值表这是分析现有电路的过程。从输入端开始逐级写出每个门的输出最终得到输出表达式。然后可以列出所有输入组合代入表达式计算得到真值表。波形图与其他形式的转换波形图通常需要结合时钟信号来看。根据输入波形在每个时钟周期的稳定值可以列出真值表的一行。遍历所有有代表性的输入变化序列就能重建出真值表或验证逻辑功能。6. 逻辑函数的化简卡诺图法逻辑表达式越简单实现的电路就越简单用的门少连线少。代数化简法需要熟练运用公式技巧性强。而卡诺图法提供了一种系统、直观、不易出错的图形化简方法特别适合处理3到5个变量的函数。6.1 卡诺图的构成与填写卡诺图是一种特殊的方格图每个小方格代表一个最小项。相邻方格所代表的最小项之间只有一个变量不同这个变量在原变量和反变量间变化。这个“相邻”包括几何位置上的上下左右相邻以及循环相邻即最左列和最右列相邻最上行和最下行相邻。以三变量卡诺图为例变量为A B C。通常将A放在行BC放在列。行和列的排列顺序必须是**格雷码循环码**顺序00 01 11 10。这样才能保证相邻性。BC 00 01 11 10 ---------------- A 0 | m0 m1 m3 m2 1 | m4 m5 m7 m6m0代表ABCm1代表ABCm3代表ABCm2代表ABC以此类推。填写时根据逻辑函数通常是最小项之和形式在对应的最小项方格中填1其余填0或空着。例如函数F Σm(0, 2, 4, 5, 6)就在m0 m2 m4 m5 m6格中填1。6.2 卡诺图化简的原理与步骤化简原理基于公式AB AB A。在卡诺图上两个相邻的1格可以合并消去一个取值不同的变量。四个相邻的1格可以组成方形或一行/一列可以合并消去两个变量。八个相邻的1格可以消去三个变量以此类推。化简步骤画圈将填1的方格按以下规则圈起来。圈越大越好消去的变量多。每个圈必须包含2^n个1格1248...。每个1格可以多次被圈重叠律但每个圈里至少要有一个1格是未被其他圈圈过的否则这个圈就是冗余的。必须覆盖所有的1格。写表达式观察每个圈。对于一个圈找出哪些变量在该圈所有方格中取值保持不变要么全是0要么全是1。取值为1的写原变量为0的写反变量。将这些不变的变量相“与”就得到这个圈对应的“与项”。将所有圈的“与项”相“或”就得到最简与或表达式。举例化简F Σm(0, 2, 4, 5, 6)。在卡诺图中对应位置填1。画圈圈1m4 m5 m6 m7不对m7是0。注意m4(100) m5(101) m6(110) m2(010)它们并不都相邻。正确画法是圈一个包含m4和m5的2格圈对应A1 B0 C变化化简为AB。圈一个包含m4和m6的2格圈对应A1 C0 B变化化简为AC。注意m4被用了两次。圈一个包含m0和m2的2格圈对应A0 C0 B变化化简为AC。检查m0 m2 m4 m5 m6都被覆盖了。m4被两个圈覆盖是允许的。写表达式F AB AC AC。还可以进一步观察AC和AC可以合并吗在卡诺图上它们不相邻。但代数上AC AC (AA)C C。为什么卡诺图没看出来因为我们的圈法不是最优的。重新画圈圈一个包含m0 m2 m4 m6的4格圈。这四个格的特点是A和C在变化只有B在部分格是0部分格是1不对仔细看m0(000) m2(010) m4(100) m6(110)。它们的共同点是C0而A和B都在变化。所以这个4格圈化简结果就是C。再圈一个包含m4和m5的2格圈AB。检查覆盖了m0 m2 m4 m5 m6。m4被重复覆盖。得到更简表达式F C AB。实操心得卡诺图化简的关键在于“找最大的圈”。有时候直观的圈法得到的不是最简式需要尝试不同的圈组合。一个检查标准是每个圈必须包含至少一个“独有的1格”即不被其他任何圈包含的1格。上例中第一次圈法得到的三个圈AB和AC都包含了m4和m5不AC圈包含的是m4和m6AB圈包含的是m4和m5。m5是AB独有的m6是AC独有的m0和m2是AC独有的。所以第一次圈法虽然覆盖了所有1但不是最简因为AC和AC可以合并成一个更大的圈C它包含了m0 m2 m4 m6。而m5由AB圈覆盖。最终FCAB才是最简的。这个过程需要一些练习来培养直觉。6.3 包含无关项Don‘t Care的化简在实际设计中某些输入组合可能永远不会出现或者当它们出现时输出是0是1都无所谓不影响整体功能。这些组合对应的最小项称为“无关项”在卡诺图中用“X”表示。化简时可以灵活地将无关项“X”当作1或0来处理目的是为了画出更大、更少的圈从而得到更简化的表达式。原则是有利于化简就当作1不利于化简就当作0。例如设计一个8421BCD码的“四舍五入”电路输入为0-9的BCD码大于等于5输出1。输入是4位二进制ABCD但1010到1111这6个组合是无效的非BCD码可以作为无关项。利用这些无关项可以大大简化输出函数。7. 从理论到实践逻辑代数在数字电路中的体现学了一堆公式和图表最终还是要落到电路上。逻辑代数和数字电路是如何一一对应的7.1 逻辑门运算的物理实现前面提到的与、或、非运算在硬件上分别由与门AND Gate、或门OR Gate、非门NOT Gate / Inverter来实现。它们是构成所有复杂数字电路如加法器、编码器、触发器、乃至整个CPU的基本积木。除了基本门还有复合门与非门NAND先与后非。F (AB)。非常重要因为在实际的CMOS工艺中与非门的基本结构简单、速度快、面积小很多芯片内部主要使用与非门。或非门NOR先或后非。F (AB)。异或门XOR相异为1相同为0。F A⊕B AB AB。常用于加法运算和校验。同或门XNOR相同为1相异为0。F A⊙B AB AB。是异或的非。这些门电路都有标准的集成电路IC例如经典的74系列TTL芯片如74LS08四路与门和4000系列CMOS芯片如CD4011四路与非门。7.2 组合逻辑电路分析与设计流程逻辑代数直接指导着组合逻辑电路输出只取决于当前输入与历史状态无关的设计。设计流程正向逻辑抽象将实际问题转化为逻辑问题。确定输入变量和输出变量定义逻辑状态1和0分别代表什么。列真值表根据逻辑关系列出所有可能输入下的输出。写逻辑表达式从真值表写出标准与或式或标准或与式。化简或变换用公式法或卡诺图法化简逻辑函数。有时根据现有芯片如全用与非门需要进行形式变换运用摩根定理。画逻辑电路图根据化简后的表达式选择合适门电路画出电路图。工艺实现选择具体芯片考虑扇出、延迟、功耗等工程问题。分析流程逆向已知逻辑图。逐级写出表达式从输入到输出。化简表达式。列真值表或直接说明功能。评估性能分析延迟、竞争冒险等。7.3 竞争与冒险理论之外的现实问题这是一个纯理论推导容易忽略但实际电路必须考虑的棘手问题。竞争由于逻辑门存在传输延迟当输入信号同时变化理论上时到达后续门的时间可能有先后。冒险由竞争可能导致的电路输出出现非预期的、短暂的错误脉冲毛刺。例如函数F A A理论上恒为1。但如果A信号变化时经过非门产生的A‘有延迟在某个极短瞬间A和A’可能同时为0导致输出F出现一个负向毛刺0。如何发现在卡诺图上如果两个合并圈与项存在“相切”关系即它们覆盖的1格是相邻的但并未被同一个圈覆盖则可能产生冒险。如何消除增加冗余项在卡诺图上将两个相切的圈连接起来即增加一个覆盖这两个相邻但未被同一圈覆盖的1格的冗余圈。这个冗余项不改变逻辑功能但消除了产生毛刺的条件。输出端接滤波电容简单粗暴但会降低速度。引入选通脉冲在电路稳定后才允许输出有效。这部分内容提醒我们数字电路设计不仅是逻辑正确的艺术也是时序正确的工程。仿真工具如Multisim ModelSim在验证阶段至关重要。8. 常见问题与排查技巧实录学习逻辑代数初期总会遇到一些共性问题。这里记录一些典型困惑和解决方法。问题1总是分不清“原变量”和“反变量”在表达式和卡诺图中的对应关系。排查技巧记住一个核心在最小项中变量上面有非号反变量对应取值为0没有非号原变量对应取值为1。例如最小项ABC对应A0 B1 C1。在卡诺图中变量区域的划分就是据此而来。标有“A”的行代表A1没标A或标A‘的行代表A0。多练习从真值表到表达式、从表达式到卡诺图的填写形成肌肉记忆。问题2卡诺图化简时圈画得不是最简或者画错了圈。排查技巧遵循标准步骤(1)先找那些只能以一种方式圈的“独苗”1格把它们圈起来。(2)再从大到小8格、4格、2格尝试圈剩下的1格确保每个圈尽可能大。(3)检查是否所有1格都被覆盖且每个圈至少有一个独有的1格除非是包含无关项的情况。一个有用的验证方法是化简完成后用代数法稍微验证一下看能否用公式再合并一两项。问题3对含有无关项的化简掌握不好不知道什么时候该把X当1什么时候当0。排查技巧把握一个原则目标是让圈更大、更少。在画圈时把X当作一个“万能牌”。如果纳入一个X能让某个圈变得更大比如从2格变4格或者能帮助覆盖一个孤立的1格那么就把它当1。如果某个X孤立在外或者纳入它并不能帮助扩大已有的圈反而可能迫使你多画一个没必要的圈那么就把它当0。多做几个带无关项的练习题这种感觉就会上来。问题4逻辑函数表达式形式多样与或、或与、与非-与非、或非-或非不知道如何转换和选择。排查技巧与或式最直观从真值表直接得到的就是它。常用卡诺图化简得到最简与或式。与非-与非式非常实用。对最简与或式两次取反并用一次摩根定理。例如F AB CD 则F ((AB CD)) ((AB)(CD))。这就变成了一个只使用与非门的结构第一级是两个与非门第二级是一个与非门。很多芯片内部逻辑基于此。或与式有时在采用或非门设计时使用。可以通过对偶原理从与或式得到或者直接圈卡诺图中的0格得到最简或与式。选择依据通常由你手头有的门电路类型或设计约束决定。现代可编程逻辑器件中可以不用关心底层是哪种门综合工具会自动优化。问题5理解不了竞争冒险的物理意义觉得理论计算没问题为什么实际会有毛刺排查技巧一定要建立“延迟”的概念。逻辑门不是理想的开关信号通过它需要时间纳秒级。在纸上我们画的是理想的瞬时变化。在现实中A从0变1A‘从1变0这两个变化不是同时发生的。A’会稍微晚一点。就在这个时间窗口内如果后续电路对A和A‘的“同时为0”状态敏感毛刺就产生了。解决之道一是在设计阶段通过增加冗余项消除静态冒险二是在关键路径使用时序控制如时钟同步三是通过仿真工具观察时序波形。
返回列表