马上就要正式进入电路设计了,再来看最后一个知识点:逻辑设计吧。

之前我们花了两章,探讨了逻辑运算是什么,怎么算;但还有最后一个大问题,巧妇难为无米之炊,我们得先有一个逻辑式,才能对它化简,并基于结果做电路设计。所以,如何把实际生活中的问题转化为逻辑函数式呢?

先介绍两种比较标准的函数的形式:

  • 最小项表达式,是若干单项式相加,可以类比成代数式展开后的样子,形式类似

    ,得名于其因为项中用乘法连接而使得每一项为1的概率都很小。
  • 最大项表达式,是若干多项式相乘,可以类比成代数式因式分解后的样子,形式类似
    ,得名于其因为项中加法连接而使得每一项为1的概率都很大

其中实际中用得比较多的是最小项表达式。本文也将在此式的基础上讨论。

进一步地,我们还会再看逻辑函数与其他表现形式的转化关系,并正式介绍两个工具:逻辑图和卡诺图。

一、从对问题的描述得出函数式

我们开篇的问题中,就是利用了把问题转化为比较“标准”的逻辑命题,加以处理的。一般地说,通过自然语言表述得出方程,首先要把任务写成“只有...且...时,才...”(最大项表达式)或“只要...或...时,就...”(最小项表达式)的形式。它要求该问题不能包含太复杂的嵌套关系,变量也不能太多,所以局限比较大。但用这种方法得出的函数式往往可以省去化简的步骤。

二、从真值表得出函数式

假设我们有这样一个真值表:

如何方便地写出它的表达式?

先试试把它转述为自然语言后照着写:“只要A,B,C,D分别为0000,或者0101,或者0110,或者......时,X就为1”。这样,的确可以写出方程。

那么,能不能直接通过真值表写出函数式呢?想一想,之前提到,所有的描述都可以转化为所谓“最小项表达式”,其中每一个项都是一个单项式,A、B、C、D分别取原变量或反变量。比如先看第一行,当ABCD取0000时,最终结果为1。——这对应了A’B’C’D’=1。所以,从真值表写出最小项表达式的方法是先找出所有使得因变量为1的自变量值的组合,再把每一个组合对应的乘积项写出来,每个变量取值为0则写上反变量,1则写上原变量,这样使得取这组值时该项为1,最后把这些项用加法相连即可。

举个例子:我们至今没有推导过异或逻辑如何用与或非表达。现在让我们证明一遍。

有了真值表,就可以直接看使得X=1的A,B取值组合,发现有01,10两个;接着,分别写出它们对应的乘积项,即A'B和AB';最后把它们连在一起:AB'+A'B,即可。

三、从函数式得出真值表

要画真值表,首先必须把所有自变量可能的取值都填在前几列中。建议使用二进制排列,即0000,0001,0010……等,不容易缺漏。

接下来,把函数式化成最小项表达式。比如,如果初始式为

,则需要先展开成
,再进一步写成每一项都含有三个变量的标准形式——具体地说,运用公式
,得到
。最后,在对应的真值表行中“X”一栏填上“1”,其他行则填0——此处,三项分别对应110,101,111。

如果说这种方法是反向填表,那自然还有另一种正向方法——把每一行的A,B,C的值依次代入函数式,求出X的值。这种方法适用于变量较多,而且原式比较简单,如果完全展开很费时间的式子。

四、逻辑图与函数式的转化

什么是逻辑图?我们知道,任何一个函数,比如

,都可以表示为一个“黑箱”——

只要输入一个x,一个y,一个z,这个黑箱就会返回一个对应的a的值。而如果我们想查看它的内部逻辑,我们可能会看到这样的:

“+”把x和y连接起来,作m=x+y运算;“/”又连接了“+”的输出和z,作a=m/z运算,并输出a。所以,这个图就可以表示

同样地,还记得七个基本逻辑的逻辑符号么?

从左至右,从上至下:或、与、非、异或、同或、与非、或非

如果我们有式子

,就可以用同样的思路,连出一个图:

上半部分,得到A'B;下半部分,是AB'。两个再用或连接,就有了A'B+AB'。这样,便可以把一个函数式直观地表达出来。并且,在实际的电路制作中,这样的设计图也可以成为抽象的逻辑式与实际的电路板间的桥梁。

所以,要想绘出逻辑图,一般来说,只要先理清函数的运算顺序,再把对应的逻辑符号用线连接起来即可。再看一个例子:经典的档案室开门问题,已有函数式:

一步步看它的运算顺序:B与C相乘;A与乘积相加;D的反变量与这个和相乘。最后输出X。因此,可以画出对应的逻辑图。

反向地,如果有了这个逻辑图,就可以通过沿着逻辑图走向分析,最终得出函数式。

还可以发现,逻辑图和计算机中的运算树本质上是相同的。所以,我们可以用中序遍历的思路,写出函数式。

五、卡诺图

在最小项表达式的化简中,我们本质上在做什么呢?比如,

——两项中只有一个变量不同,所以变成了

如果我们有n变量最小项表达式,那么它至多可以有

项——因为每个变量都会以原变量或反变量出现。而如果原变量表示1,反变量表示0,则每一项都可以对应一个唯一的n位二进制码,比如
就是1001。

对应的二进制数为101,111,也只差一个数位。那么,能不能用一个表格,可以容纳所有的可能项,并直观地发现这些能够合并的”相邻项“呢?于是,工程师莫里斯·卡诺便创造了卡诺图。

这是卡诺图的一般形式。先把所有相关变量分为数量大致相等的两部分,一部分(AB)沿行布置,一部分(CD)沿列布置。再把它们以格雷码编码——00,01,11,10等;这样,每个格子就对应了最小项表达式中的唯一一个项,比如

就位于第四列,第二行位置,对应AB=10,CD=01。并且注意到,如果两个项可以化简,如

则它们在卡诺图上必定相邻。它背后的原理是当BCD=111时,无论A为0还是1,结果都为1,所以A就成了无关项,可以消去。按照这个道理,只要是圈起的区域是大小为

的矩形

,那么都可以化简成一个项:

圈起的区域覆盖了所有A、B的值,所以A、B都是无关项;同时还覆盖了CD=01与11,所以C也是无关项,最终结果为D。

卡诺图并不是二维的,而是循环的,可以从一个边界来到另一个边界,形成一个空间中闭合的形状。比如:

也是可以合并的。

使用卡诺图化简时,先把所有最小项在表中对应的位置打勾,再用圈覆盖这些勾。具体有三个原则:

  • 圈可以相互重叠交错,但必须覆盖所有勾,且不能覆盖空白格,否则会使函数发生改变。
  • 每个圈必须尽量大,这样可以尽可能多地消去无关变量。
  • 圈要尽量少,这样会使最终的项的数量最少,因为每个圈会对应最简式中的一个项。

比如,化简函数

。先把所有项填入卡诺图:

再把它们全部圈起来,尽量扩大圈的大小和减少圈的数量:

圈起来的区域有:(0000,0010), (0010,0110), (1010,0010), (0101,1101,0111,1111)。所以化简之后,剩下的项分别为:A'B'D', A'CD', B'CD', BD。所以,我们最终的化简结果便是

卡诺图的使用需要一定技巧,所以不是非常常用。但是,卡诺图和真值表都可以作为函数的可视化表达。在“时序电路”一部分,我们将会看到它的作用。

数字逻辑基础与verilog设计_数字电路学习笔记(五):逻辑设计基础相关推荐

  1. 吴恩达《机器学习》学习笔记五——逻辑回归

    吴恩达<机器学习>学习笔记五--逻辑回归 一. 分类(classification) 1.定义 2.阈值 二. 逻辑(logistic)回归假设函数 1.假设的表达式 2.假设表达式的意义 ...

  2. 读书笔记:数字逻辑基础与verilog设计之数字系统设计流程03----------二进制除法器电路设计

    除法器(除法算法)是一类算法.给定两个整数 N(分子)和 D(分母),计算它们的商和(或)余数.其中某些算法可以通过人工手动计算,而另一些则需要依赖数字电路的设计或软件.[1] 除法算法主要分为两类: ...

  3. 双 JK 触发器 74LS112 逻辑功能。真值表_数字电路学习笔记(十一):时序逻辑...

    时序逻辑将会是本笔记的最后几章的主题.虽然数字电路课程还包括脉冲电路.模数转换.EDA等内容,但那些和本文的主线内容(不注重硬件搭建的电路设计)关系就不大了. 一.时序功能 我们从一个例子开始,说明时 ...

  4. 双 JK 触发器 74LS112 逻辑功能。真值表_数字电路学习笔记(七):经典组合逻辑器件(上)...

    一.集成电路 在引入"集成电路"后,电路设计实现了从原子到分子的质变.集成电路,最重要的当然是"集成"二字了--总体来说,我们希望设计出的集成电路具有: 可复用 ...

  5. 锁存器的工作原理_数字电路学习笔记(十):更多锁存器和触发器

    上一章中提到了普通RS锁存器的两大缺点: 1. S端口和R端口不能同时有效,但实际应用中不能保证这种情况不出现,此时可能会出错: 2. 在计算机中,有许多内存单元协同组成一个寄存器,存储同一个数据.但 ...

  6. jk触发器改为四进制_数字电路学习笔记(十):更多锁存器和触发器

    上一章中提到了普通RS锁存器的两大缺点: 1. S端口和R端口不能同时有效,但实际应用中不能保证这种情况不出现,此时可能会出错: 2. 在计算机中,有许多内存单元协同组成一个寄存器,存储同一个数据.但 ...

  7. 数字设计FPGA应用学习笔记

    转载https://blog.csdn.net/chinkwoyu/article/details/80259064 数字设计FPGA应用学习笔记 数字设计FPGA应用学习笔记 第一章 FPGA基础及 ...

  8. 《零基础学JavaScript(全彩版)》学习笔记

    <零基础学JavaScript(全彩版)>学习笔记 二〇一九年二月九日星期六0时9分 前期: 刚刚学完<零基础学HTML5+CSS3(全彩版)>,准备开始学习JavaScrip ...

  9. 吴恩达《机器学习》学习笔记七——逻辑回归(二分类)代码

    吴恩达<机器学习>学习笔记七--逻辑回归(二分类)代码 一.无正则项的逻辑回归 1.问题描述 2.导入模块 3.准备数据 4.假设函数 5.代价函数 6.梯度下降 7.拟合参数 8.用训练 ...

最新文章

  1. 请教一个算法问题,有两个数组A,B,判断A中是否至少有一个元素和B中元素相同...
  2. 通过javascript把图片转化为字符画
  3. java高效编程_Java高效编程
  4. 手机文件share.php,华为P10手机Huawei Share怎么用?一秒共享手机文件
  5. atitit.加入win 系统服务 bat批处理程序服务的法总结instsrv srvany java linux
  6. VLAN访问控制列表(VACL)的配置方法
  7. 论文小综 | Neuro-Symbolic Reasoning in NLP
  8. java velocity 邮件_邮件集成java mail + 读取邮件模板
  9. 开发中Docker常用容器记录
  10. php curlopen,php自动提交表单的方法(基于fsockopen与curl)
  11. python有几种_Python常见的几种算法
  12. 淘宝面试常见问题的答案来了,你看了吗?(一面及答案)
  13. JDK10安装与配置
  14. 计算机vf等级,全国计算机等级考试二级考试大纲(VF语言版)
  15. 154. 正则表达式匹配
  16. 最新版gg服务器框架安装器,GG服务框架安装器
  17. [RK3288][Android6.0] 调试笔记 --- 系统第一次开机进入Recovery模式原因
  18. 黑马程序员--java基础复习之网络编程
  19. 计算机配置64位几个字节,电脑装32位还是64位系统
  20. easyui treegrid php,jQuery EasyUI 数据网格与树插件 – Treegrid 树形网格 | 菜鸟教程

热门文章

  1. 使用loadrunner编写webservice接口请求
  2. PHP json_encode后的数据有的大括号于中括号
  3. 为什么引入Memcached?
  4. C++基础知识友元friend、友元函数和友元类
  5. 通信教程 | 串口丢数据常见的原因
  6. 聊聊 top 命令中的 CPU 使用率
  7. 一个深入学习Linux/C/C++的原创技术号
  8. Linux 下的推迟执行
  9. 给大家推荐一个优质Linux内核技术公众号-Linux阅码场
  10. HT68F30控制GPG96244QS1 TFT液晶屏