《逻辑与计算机设计基础(原书第5版)》——3.4 基本逻辑函数

简介: 本节书摘来自华章计算机《逻辑与计算机设计基础(原书第5版)》一书中的第3章,第3.4节,作者:(美)M.莫里斯·马诺(M. Morris Mano)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.4 基本逻辑函数

定值、传递、取反及使能是最基本的组合逻辑函数。前两种运算,即定值和传递不用任何布尔运算符,它们只用变量和常数表示。因此不能使用逻辑门来实现这些运算。对一个变量取反只涉及一个逻辑门,而一个变量的使能则涉及一个或两个逻辑门。
3.4.1 定值、传递和取反
如果1位函数只有单个变量X,则存在4个不同的1位函数。表3-1给出了这些函数的真值表。表的第二列和最后一列指定函数的值分别为常数0或常数1,即实现定值(value fixing)。在第三列,函数就是输入变量X,即从输入到输出传递(transferring)X。在第四列,函数为X,即将输入X取反(inverting)成为输出X。
image

实现这4个函数的方式如图3-7所示。定值可以通过在输出端F连接常数0或常数1来实现,如图3-7a所示。图3-7b给出了逻辑示意图中的另一种表示方法。对于正逻辑,习惯用电气接地符号来表示常数0,用电源电压符号来表示常数1,后者一般用VCC或VDD标记。传递用连接X和F的一条简单的线来表示,如图3-7c所示。最后,取反用一个反相器来表示,输入为X,输出为F=X,如图3-7d所示。

image

3.4.2 多位函数
前面定义的函数可以按位应用于多位数的场合。我们可以认为这些多位函数是1位函数的向量。例如,假设有4个函数F3、F2、F1、F0,它们组成一个4位函数F。我们可以定义F3是4个函数的最高位,F0是4个函数的最低位,组成向量F=(F3,F2,F1,F0)。假设F由4个基本函数F3=0、F2=1、F1=A、F0=A组成,可以将F写成向量(0,1,A,A)。当A=0时,F=(0,1,0,1);而当A=1时,F=(0,1,1,0)。这个多位函数可以写成F(3:0)或者更简单地写成F,其实现方式如图3-8a所示。为了使图形更加简洁,我们经常使用一条加粗的线,并用一条斜杠穿过这条线来表示一组相关的多条线,斜杠旁边的数字表示这些线的条数,如图3-8b所示。为了使0、1、X和X与F中对应的位数相连接,我们将F拆分成4条线,每条线表示为F的一位。而且,在传送过程中,我们只希望能使用F中位的一个子集,例如F2和F1,那么图3-8c表示F中位的方法就可以用来解决这个问题了。图3-8d说明了使用F3、F1和F0这种更为复杂的情况。注意,由于F3、F1和F0没有完全在一起,所以我们就不能用范围标识F(3:0)来标注这个子向量,只能用两个子向量F(3)和F(1:0)的组合来标注,用下标标注时可以写成3,1:0。在不同的原理图绘制工具或HDL工具中,向量和子向量的实际表示方法存在很大差异,图3-8给出的只是其中的一种方法。对于某个特定的工具,具体表示方法需要参考此工具的使用文档。

image

定值、传递和取反在逻辑设计中有许多应用。定值就是将一个或多个变量用常量1和0来取代。定值可以是永久的,也可以是临时的。永久性定值不可以改变,而临时性定值可通过某些途径来改变,其方法与普通逻辑电路中采用的有所不同。永久性与临时性的定值主要应用于可编程逻辑器件中。在可编程器件中,任何能够实现的逻辑函数都是通过设定一组值来实现的,如例3-4所示。
例3-4 用定值控制演讲厅的照明
问题:设计一个控制演讲厅灯光照明的装置,要求控制开关是可编程的。两个开关有三种不同的工作方式。开关P在演讲厅前面的墩墙上,开关R在演讲厅的后门附近。H(房间照明)为1时,照明开启;H为0时,照明关闭。房间照明控制方式可以编程为以下三种中的任意一种,M0、M1或M2定义如下。
M0:开关P或开关R控制房间灯光的开和关。
M1:只有开关P控制房间灯光的开和关。
M2:只有开关R控制房间灯光的开和关。
解决方法:H(P,R)的真值表作为可编程模式M0、M1和M2的函数形式,如表3-2所示。M1和M2的函数形式都是直截了当的,但M0的函数形式却需要多加考虑。这个函数必须使开关P和开关R都能改变输出结果。奇偶函数具有这样的特性,两个输入的奇偶函数就是异或。因此表3-2中的M0用该函数来表示。我们的目的就是要找到这样一个电路来实现这三种编程模式,并产生输出H(P,R)。
image

用定值方式实现该电路的一种形式如图3-9a所示。在本章的后面,这个标准电路被称作4选1多路复用器。图3-9b给出了该电路紧凑形式的真值表。对应于I0到I3,P和R是输入变量,I0到I3的值可以为0或1,这取决于每一种模式所希望的函数形式。注意,H事实上是一个6变量的函数,可以给出一个完全展开的、有64行7列的真值表。但是,将I0到I3放到输出列中,我们可以缩减真值表的大小。真值表中输出H的方程为:
H(P, R, I0, I1, I2, I3)=PRI0 + PRI1 + PRI2 + PRI3
通过固定I0至I3的值,我们可以实现任何函数H(P,R)。如表3-2所示,通过使I0=0、I1=1、I2=1和I3=0,我们可以实现函数M0,H=PR+PR;通过使I0=0、I1=0、I2=1和I3=1,我们还可以实现函数M1,H=P;通过使I0=0、I1=1、I2=0和I3=1,我们还可以实现函数M2,H=R。这些函数中的任何一个都可以永久地实现,或者通过将I0=0固定,将I1、I2和I3作为变量,并根据以上三种模式来临时分配它们的值这种方式来实现。图3-9c所示的最终电路中I0=0,图3-9d给出了I0固定为0后的模式编程表。 ■
3.4.3 使能
通常情况下,使能允许信号从输入传播到输出。非使能除了可以用高阻态(将在6.8节介绍)来代替输入信号之外,还可以用固定输出值0或1来代替输入信号。这个附加的输入信号通常称为ENABLE或者EN,它用来决定输出是否被使能。例如,如果EN=1,则输入X就可以到达输出(使能),但如果EN=0,输出则被固定为0(非使能)。在这种情况下,非使能值为0,输入信号与EN信号相与得到输出,如图3-10a所示。若非使能值为1,则输入信号X与EN信号取反后相或得到输出,如图3-10b所示。在这种情况下,如果EN=1,则或门的一端输入为0,另一端输入为X,输入到达输出。但如果EN=0,则或门的一端输入为1,这会阻止输入X到达输出。也可以将图3-10中每个电路的EN取反。这样,EN=0将使X到达输出,EN=1则阻止输入X到达输出。

image

例3-5 用使能进行汽车电气控制
问题:几乎所有的汽车中,只要打开点火开关,车内照明、收音机和电动车窗都开始工作。在这种情况下,点火开关就相当于“使能”信号。假设我们使用下面的变量和定义来模型化这个汽车子系统:
点火开关IS:值为0时关,为1时开;
照明开关LS:值为0时关,为1时开;
收音机开关RS:值为0时关,为1时开;
电动车窗开关WS:值为0时关,为1时开;
照明灯L:值为0时关,为1时开;
收音机R:值为0时关,为1时开;
电动车窗W:值为0时关,为1时开。
解决方法:表3-3给出了这个汽车子系统的紧凑形式的真值表。注意,当点火开关IS关闭时(0),所有被控制的辅助设备都关闭(0),无论它们的开关是否开启,真值表的第一行表示这种情况。通过使用×,这个紧凑的只有9行的真值表所表示的信息与一般的有16行的真值表完全相同。与×在输出列表示无关项不同,×在输入列表示不是最小项的乘积项。例如,0×××表示乘积项IS。与最小项一样,如果真值表中输入组合某一位的值为0,则对应的变量取反;如果值为1,则无需取反;如果值为×,则变量不出现在乘积项中。当点火开关IS打开时(1),所有辅助设备都由它们各自的开关控制。当点火开关IS关闭时(0),所有辅助设备都关闭,所以IS用固定值0取代了输出L、R和W的值,它满足使能信号的定义。最终的电路如图3-11所示。 ■
image

相关文章
|
11月前
|
机器学习/深度学习 人工智能
Token化一切,甚至网络!北大&谷歌&马普所提出TokenFormer,Transformer从来没有这么灵活过!
Transformer模型在人工智能领域表现出色,但扩展其规模时面临计算成本和训练难度急剧增加的问题。北京大学、谷歌和马普所的研究人员提出了TokenFormer架构,通过将模型参数视为Token,利用Token-Parameter注意力(Pattention)层取代线性投影层,实现了灵活且高效的模型扩展。实验表明,TokenFormer在保持性能的同时大幅降低了训练成本,在语言和视觉任务上表现优异。论文链接:https://arxiv.org/pdf/2410.23168。
266 45
|
存储 开发框架 前端开发
基于SqlSugar的开发框架循序渐进介绍(25)-- 基于SignalR实现多端的消息通讯
基于SqlSugar的开发框架循序渐进介绍(25)-- 基于SignalR实现多端的消息通讯
|
机器学习/深度学习 网络协议 安全
在Linux中,如何追踪TCP连接和网络数据包,如使用tcpdump或Wireshark?
在Linux中,如何追踪TCP连接和网络数据包,如使用tcpdump或Wireshark?
|
存储 大数据 Linux
【大数据】GFS,大数据技术的基石,分布式文件系统的鼻祖
【大数据】GFS,大数据技术的基石,分布式文件系统的鼻祖
411 0
IntelliJ IDEA汉化
IntelliJ IDEA汉化
264 0
|
Dragonfly 算法 安全
RT-Thread快速入门-动态内存堆管理方法
RT-Thread快速入门-动态内存堆管理方法
469 0
|
存储 Web App开发 运维
原来10张图就可以搞懂分布式链路追踪系统原理
原来10张图就可以搞懂分布式链路追踪系统原理
|
Java 调度 C++
多线程之常见的锁策略
多线程之常见的锁策略
|
easyexcel 数据格式
easyExcel操作写excel
easyExcel操作写excel
655 0
easyExcel操作写excel
|
存储 Java
Java SE基础知识详解第[8]期—面向对象进阶(包、权限修饰符、抽象类、接口)
Java SE基础知识详解第[8]期—面向对象进阶(包、权限修饰符、抽象类、接口)
Java SE基础知识详解第[8]期—面向对象进阶(包、权限修饰符、抽象类、接口)