《逻辑与计算机设计基础(原书第5版)》——3.6 编码

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

3.6 编码

一个编码器是一个数字函数,它的作用与译码器的作用相反。一个编码器有2n(或少于2n)个输入和n个输出,输出产生与输入值相对应的二进制码。表3-5所示的真值表是一个八-二进制编码器的例子。该编码器有8个输入,每一个输入都是一个八进制数字,3个输出产生对应的二进制数字。假设任何时候只有一个输入的值为1,所以表格中只有8行有特定的输出值。其他剩余56行的所有输出都为无关项。
image

从真值表中我们可以看到,当某行的Dj为1且j的二进制表示在i位置的值为1时,该行中的Ai则为1。例如,如果输入为1或3或5或7,则输出A0=1。因为所有这些值都是奇数,所以它们二进制形式的0位置的值为1。这个方法可以用来建立真值表。从真值表得知,编码器可以通过n个或门来实现,每一个输出变量Ai用一个或门。每个或门将Dj为1,并且所在行的Ai也为1的输入变量合并起来。对于8-3线编码器,输出方程式为
A0=D1+D3+D5+D7
A1=D2+D3+D6+D7
A2=D4+D5+D6+D7
这些方程式可以用3个四输入或门来实现。
以上定义的编码器有一个限制条件,那就是任何时候只允许一个输入是活动的:如果同时有两个输入是活动的,输出将产生错误的结果。例如,如果D3和D6同时为1,编码器的输出就会为111,因为3个输出都等于1,这既不表示二进制数3,也不表示二进制数6。为了消除这种不确定性,有些编码器电路必须增加一个输入优先级来确保只有一个输入被编码。如果我们定义输入下标的数值越大,则输入的优先级就越高,那么当D3和D6同时为1时,输出为110,因为D6的优先级比D3的高。八-二进制编码器中另一个不确定的情况是,当所有的输入都为0时,输出为0值,但这与D0等于1时的输出是一样的。这一矛盾可以通过增加一个单独的输出以表示至少有一个输入等于1而得到解决。
3.6.1 优先编码器
优先编码器是一个可以实现优先级函数的组合电路。正如前段所提到的那样,优先编码器的作用是:当两个或多个输入同时等于1时,优先级最高的输入被优先处理。表3-6所示的是一个四输入优先级编码器的真值表。由于使用了×,原来需要16行才能表达出所有信息的真值表,现在只需要5行就可以了。与×在输出列中表示无关情况不同,×在输入列中表示不是最小项的乘积项。例如,001×表示乘积项D3 D2 D1。如同最小项一样,如果真值表中输入组合的某位为0,则对应的变量要取反;如果某位为1,则对应的变量不取反;如果某位为×,则对应变量不出现在乘积项中。这样,对于001×,与变量D0对应的位×,所以D0不出现在D3 D2 D1中。
image

紧凑真值表中的一行可以代替原真值表中的2p行,p表示的是行中×的个数。例如,在表3-6中,1×××表示原真值表的23=8行,这些行的输出值相同。在生成紧凑真值表的过程中,每一个最小项必须出现在某一行中,只有这样每一个最小项才能够通过对×赋值为1和0来获得。而且,一个最小项不能够出现在几行中,因为这些行的某些指定输出值会有冲突。
我们按如下方法得到表3-6:输入D3的优先级最高,所以当此输入为1时,可以忽略其他输入值,输出A1A0为11(二进制数3),这样我们可以得到表的最后一行。D2的优先级次之,因此如果D2=1且D3=0,则输出为10,无论其他较低优先级输入值是多少,这样,我们可以得到真值表的第四行。只有当所有较高优先级输入值为0时,才会产生D1的输出。用这种办法,从高优先级到低优先级我们可以得到真值表中剩余的行。当一个或多个输入值为1时,有效输出指示V为1;如果所有的输入都为0,则V等于0,电路中其他两个输出没有使用,并且被指定为无关项。
化简输出A1和A0的卡诺图如图3-22所示,两个函数的最小项都源自表3-6。表中的输出值,可以通过将它们放到由表中给出的对应乘积项所覆盖的方格中,直接传送到卡诺图中。每个函数化简后的表达式在该函数的卡诺图下方给出。输出V的方程是所有输入变量的或函数。图3-23所示的是根据下面的布尔函数来实现的优先级编码器:

image

image

3.6.2 编码器的扩展
迄今为止,我们只讨论了小型的编码器。编码器可以通过扩展或门的方法来扩展输入的数量。在编码器的实现中,除了在输出级共享以便在输出编码中有更多的有效位之外,采用带或门的多级电路可以减少当n≥5时的门输入成本。当n≥3时,由于门扇入限制,必须采用多级电路设计以便进行工艺映射。设计有共享门的多级电路,在工艺映射后可以减少编码器的成本。

相关文章
|
2月前
|
人工智能 JavaScript 前端开发
【教案生成平台】实战教程四:开发所见即所得的在线试卷编辑器
本试卷编辑器基于Vue实现,支持拖拽排序、动态题型组件渲染(单选/简答等),实时A4预览,并通过html2canvas+jsPDF导出高清PDF。数据模型清晰,扩展性强,真正实现所见即所得的高效出卷体验。
231 19
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
409 2
|
数据采集 人工智能 监控
《数据质量:人工智能模型的成败关键》
在人工智能快速发展的时代,数据质量对模型的性能、准确性和可靠性至关重要。准确、完整、多样且具代表性的数据能提升模型泛化能力;一致、及时的数据有助于提高训练效率;避免偏差和噪声可防止模型产生不公平结果或错误学习。因此,确保数据质量是构建高效、可靠AI模型的关键。
1375 12
|
传感器 人工智能 监控
智慧电厂AI算法方案
智慧电厂AI算法方案通过深度学习和机器学习技术,实现设备故障预测、发电运行优化、安全监控和环保管理。方案涵盖平台层、展现层、应用层和基础层,具备精准诊断、智能优化、全方位监控等优势,助力电厂提升效率、降低成本、保障安全和环保合规。
755 2
智慧电厂AI算法方案
|
人工智能 前端开发 关系型数据库
过年啦,做一个春节贺卡生成器
本文介绍了如何获取和利用现有的大模型资源,结合魔笔低代码,低成本、高效率地打造一个 AI 春节贺卡生成器。
570 38
|
JavaScript 前端开发 安全
TypeScript无缝衔接ArkTS:快速入门鸿蒙ArkTS基本语法
【10月更文挑战第12天】TypeScript无缝衔接ArkTS:快速入门鸿蒙ArkTS基本语法
1360 0
TypeScript无缝衔接ArkTS:快速入门鸿蒙ArkTS基本语法
|
机器学习/深度学习 人工智能 编译器
【AI系统】死代码消除
死代码消除是一种编译器优化技术,旨在移除程序中不会被执行的代码,提升程序效率和资源利用。通过分析控制流图,识别并删除不可达操作和无用操作,减少不必要的计算。在传统编译器中,主要通过深度优先搜索和条件分支优化实现;而在AI编译器中,则通过对计算图的分析,删除无用或不可达的计算节点,优化模型性能。
475 3
|
存储 关系型数据库 分布式数据库
PolarDB的PolarStore存储引擎以其高效的索引结构、优化的数据压缩算法、出色的事务处理能力著称
PolarDB的PolarStore存储引擎以其高效的索引结构、优化的数据压缩算法、出色的事务处理能力著称。本文深入解析PolarStore的内部机制及优化策略,包括合理调整索引、优化数据分布、控制事务规模等,旨在最大化其性能优势,提升数据存储与访问效率。
301 5
|
并行计算 监控 搜索推荐
使用 PyTorch-BigGraph 构建和部署大规模图嵌入的完整教程
当处理大规模图数据时,复杂性难以避免。PyTorch-BigGraph (PBG) 是一款专为此设计的工具,能够高效处理数十亿节点和边的图数据。PBG通过多GPU或节点无缝扩展,利用高效的分区技术,生成准确的嵌入表示,适用于社交网络、推荐系统和知识图谱等领域。本文详细介绍PBG的设置、训练和优化方法,涵盖环境配置、数据准备、模型训练、性能优化和实际应用案例,帮助读者高效处理大规模图数据。
362 5
|
SQL 安全 PHP
PHP安全性深度剖析:防范常见漏洞与最佳实践####
本文深入探讨了PHP编程中不可忽视的安全隐患,重点介绍了SQL注入、XSS攻击、CSRF攻击及文件包含漏洞等四大常见安全威胁。通过详尽的案例分析与防御策略阐述,为开发者提供了一套实用的安全编码指南。文章强调,提升代码安全性是保障Web应用稳健运行的关键,鼓励开发者在日常开发中积极践行安全最佳实践。 ####