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

e45fb573139c2de7ecd5165641759570.png

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

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

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

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

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

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

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

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

二、从真值表得出函数式

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

47ad43f4589a56d6a93b7a32faf04208.png

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

先试试把它转述为自然语言后照着写:“只要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,最后把这些项用加法相连即可。

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

9cc34989064c102f70aea4a86c81a352.png

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

三、从函数式得出真值表

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

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

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

382e43c83119b2c34b4a763a071f9427.png

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

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

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

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

aeb20cc92b85d58e6091997339782694.png

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

b04143786eab11d16b6dad13c3410dfb.png

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

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

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

如果我们有式子

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

cef69d75a0791fb5d8b79ee1d403dff2.png

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

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

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

40732418bccf563530e683139a3193a3.png

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

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

五、卡诺图

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

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

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

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

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

174482518211c023496fd1ed310e943e.png

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

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

a085692fdeeaea6e8e8e2777d1e9030e.png

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

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

f41c0977fe5c28d96360c861a5cdab4c.png

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

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

19ff53545d3c8794282cb65dc97556f6.png

也是可以合并的。

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

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

比如,化简函数

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

0da5ac96f4e89a47823997c7cb3726fe.png

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

b7e2667ea30c377fd8f28d878000eded.png

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完整的开发一个ContentProvider步骤

1、定义自己的ContentProvider类,该类需要继承Android提供的ContentProvider基类。2、向Android系统注册这个"网站",也就是在AndroidManifest.xml文件中注册这个ContentProvider,就像注册Activity一样。注册ContentProvider时需要为…

河北省高校计算机大赛,河北省教育厅关于举办2016年华北五省(市、自治区)及港澳台大学生计算机应用大赛河北赛区竞赛的通知...

有关高等学校:为深入贯彻落实《国家中长期教育改革和发展规划纲要(2010-2020年)》和教育部《关于全面提高高等教育质量的若干意见》(教高﹝2012﹞4号)精神,推动区域高等教育合作发展、资源共享,培养大学生创新能力、实践能力和团队协作意识&a…

adhoc包无法安装_iOS 5.1.1 设备不能安装AdHoc问题版本号

之前苹果更新了审计规范,要求必须支持64通过苹果的审核权限位架构的应用。但运营商表示反馈。使用iOS5.1.1该系统无法安装我们的包Adhoc版本号。认为非常莫名。由于我们在Deployment Target上确实写着5.1.1,全公司也都没人用这个系统了。在运营纠结这个问…

c盘清理代码_拒接卡顿,从c盘减负、系统修复及网络加速做起!奥利~~~

你是否有过系统卡顿,C盘饱满?你是否有过蓝屏、闪退?你是否有过网络爆卡?今天,他来了,一篇文章教会你清理C盘、修复系统、网络加速!!!首先,按下winr键&#xf…

LeetCode 1833. 雪糕的最大数量(贪心)

文章目录1. 题目2. 解题1. 题目 夏日炎炎,小男孩 Tony 想买一些雪糕消消暑。 商店中新到 n 支雪糕,用长度为 n 的数组 costs 表示雪糕的定价,其中 costs[i] 表示第 i 支雪糕的现金价格。 Tony 一共有 coins 现金可以用于消费,他…

HDU 3605Escape(缩点+网络流之最大流)

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid3605 本来打算昨天写两道题的,结果这个题卡住了,最后才发现是最后的推断条件出错了,推断满流的条件应该是与n的比較,居然写成与全部星球总容量的比較了。&#xf…

为学好计算机 要采取什么措施,计算机概念教学的内容及对策

摘 要:介绍有关概念教学的重要性及在概念教学中重视培养学生的思维能力、概念教学过程中应注意的问题和概念教学中采取的包括淡化、浅化、深化、跨越,在概念教学中应注意的问题,关键词:概念教学;淡化;浅化;深化;跨越中图分类号:G434文献标识码:AAccording to Different Content…

用递归计算一个数字每一位相加的结果。_leetcode 2 两数相加(c++)

两种解法,第一种是在原有的两个链表中选择更长的那个作为结果返回,虽然节约了空间,但是增加了时间复杂度,而且没有用到如何设置链表的增加与删除,第二种看起来清爽很多,逻辑也清晰。### 题目给出两个非空的…

LeetCode 1834. 单线程 CPU(排序 + 优先队列)

文章目录1. 题目2. 解题1. 题目 给你一个二维数组 tasks ,用于表示 n​​​​​​ 项从 0 到 n - 1 编号的任务。 其中 tasks[i] [enqueueTimei, processingTimei] 意味着第 i​​​​​​​​​​ 项任务将会于 enqueueTimei 时进入任务队列,需要 pro…

tc溜溜865手机投屏卡_溜溜 TC Games 官网_专题

1、智能按键功能:该功能通过宏命令方式实现智能精准按键(vip)备注:a:在键位设置中勾选智能按键,并重新选用官方一键切雷vip键位b:目前仅支持软件内设置为 720 分辨率,及 *1080p 分辨率的手机c:该…

服务器支持磁盘阵列,服务器磁盘阵列、RAID级别的阐述

磁盘阵列磁盘阵列(Redundant Arrays of Independent Disks,RAID),有“独立磁盘构成的具有冗余能力的阵列”之意。磁盘阵列是由很多价格较便宜的磁盘,组合成一个容量巨大的磁盘组,利用个别磁盘提供数据所产生加成效果提升整个磁盘系…

LeetCode 1835. 所有数对按位与结果的异或和(位运算 (ab)^(ac) = a(b^c) )

文章目录1. 题目2. 解题1. 题目 列表的 异或和(XOR sum)指对所有元素进行按位 XOR 运算的结果。 如果列表中仅有一个元素,那么其 异或和 就等于该元素。 例如,[1,2,3,4] 的 异或和 等于 1 XOR 2 XOR 3 XOR 4 4 ,而 …

python入门基础系列_03python—9个基础常识-python小白入门系列

《python小白入门系列教程》 专栏 • 第03篇 文 | xc_718 深度好文:1828字 | 4分钟阅读 ​ 1. 注释 1)单行注释:****# #注释内容 print(123) #123 print(abc) #abc print("abc") #abc **2)多行注释: 或 **&q…

hihocoder1089 Floyd算法

题目链接:http://hihocoder.com/problemset/problem/1089 算法描述: floyd算法是求解图中任意两点最短路的经典算法,复杂度为O(n^3)。虽然我们完全可以用n次dijkstra算法来求任意两点的最短路,复杂度也是O(N^3),但如果…

matlab 思维数组_matlab多维数组

1.一个三维数组由行、列和页三维组成,其中每一页包含一个由行和列构成的二维数组。2.利用标准数组函数创建多维数组Azeros(4,3,2)生成一个4行3列2页的三维全0数组,ones,rand和randn等函数有相似的用法。3.利用直接索引方式生成多维数组Azeros…

css英文左右对齐,中文英文左右padding一致两端对齐实现_js

先看下图:就是一个定宽的容器,左右padding值20像素,结果输入一段文字后(有中文也有英文字符),会发现右侧根本就不对齐,有些地方距离右侧的空白大小也不是20像素,感觉不和谐,设计师就希望排列能够…

python判断字符类型编程_Python检测数据类型的方法总结

我们在用python进行程序开发的时候,很多时候我们需要检测一下当前的变量的数据类型。比如需要在使用字符串操作函数之前先检测一下当前变量是否是字符串。下面小编给大家分享一下在python中如何检测数据类型 首先我们打开CMD控制台,进入到python环境&…

RDD 编程

文章目录1. RDD 创建2. RDD转换3. RDD动作4. 持久化5. 分区6. 文件数据读写6.1 本地6.2 hdfs6.3 Json文件6.4 Hbase学习自 MOOC Spark编程基础1. RDD 创建 从文件创建 Welcome to____ __/ __/__ ___ _____/ /___\ \/ _ \/ _ / __/ _//___/ .__/\_,_/_/ /_/\_…

centos 限制只能访问某个目录的php文件

vi /etc/php.ini #编辑 open_basedir .:/tmp/ #在380行 设置表示允许访问当前目录(即PHP脚本文件所在之目录)和/tmp/目录,可以防止php木马跨站,如果改了之后安装程序有问题(例如:织梦内容管理系统),可以注销此行, 或者直接写上程序的目录/da…

python saltstack web_saltstack web uiweb平台界面

拾壹015/04/2016 下午 3:254楼2016-04-15 15:18:15,632 [cherrypy.error ][ERROR ][10998] [15/Apr/2016:15:18:15] ENGINE TypeError(“argument of type ‘NoneType’ is not iterable”,)Traceback (most recent call last):File “/usr/lib/python2.6/site-packages/cherry…