《逻辑与计算机设计基础(原书第5版)》——3.12 其他的算术功能模块

3.12 其他的算术功能模块

+、―、×、÷以外的算术运算也很重要,如递增、递减、乘和除一个常数、大于比较、小于比较等,每一种运算都可采用一位运算单元迭代实现多位操作。但在本节我们将不采用迭代电路实现,而是对基本功能块进行压缩来实现。压缩技术是从一个基本电路(如二进制加法器或乘法器)出发,通过将已有的电路转换成有用的、较简单的电路来简化设计,从而代替直接设计电路本身。
3.12.1 压缩
对于已经设计好的功能块,通过将其输入端的值固定、传递和取反,即可实现新的功能。我们可以在已有的电路或函数表达式上采用相同的技术实现新的功能块,针对特定应用将已有电路简化成一个简单电路,我们称这个过程为压缩(contraction)。压缩的目的是采用以前的设计结果来完成逻辑电路或功能模块的设计。设计者可通过压缩来设计需要的电路,而逻辑综合工具采用压缩技术通过对原始电路的输入值固定、传递或者取反来得到目标电路。对于上述两种情况,压缩技术也能应用到电路未使用的输出端,以简化原始电路而获得目标电路。首先,我们举个布尔表达式的例子来说明压缩技术。
例3-28 全加器输出表达式的压缩
待设计电路Add1采用一位加法Ai+1+Ci生成和Si与进位Ci+1。它是全加器Ai+Bi+Ci的一个特殊情况Bi=1。因此新电路的表达式可以由全加器的输出表达式得到。

假设Add1电路通过压缩4位行波进位加法器中的每个全加器来实现,则执行的计算是S=A+1111+C0,而不是S=A+B+C0。在二进制补码表示中,这个计算是S=A―1+C0。如果C0=0,电路实现的是递减(decrement)操作S=A―1,可以考虑采用比4位加法器或减法器更为简单的逻辑实现。 ■
压缩可应用于表达式,如以上所述,或通过控制基本功能块的输入直接作用于该模块的电路图上。为了成功地应用压缩技术,所期望的功能必须能通过作用电路的输入由初始电路得到。接下来我们将考虑对未用的输出采用压缩技术。
置电路的输出为未知值×,意味着该输出端未被使用。因此该输出门和其他仅驱动该输出门的门电路可移去。对一个或多个输出为×的表达式进行压缩的规则如下:
1)删除电路输出为×的所有表达式。
2)如果一个中间变量没有出现在其他剩余的表达式中,则删除该变量表达式。
3)如果一个输入变量没有出现在其他剩余的表达式中,则删除该输入。
4)重复2)、3)步,直至不存在任何删除。
一个或多个输出为×的逻辑图进行压缩的规则如下:
1)从输出开始,删除输出为×的所有门,并置它们的输入为×。
2)如果一个门驱动的所有输入都为×,则删除这个门并置其输入为×。
3)如果一个外部输入驱动的所有输入都为×,则删除该外部输入。
4)重复2)、3)步,直至不存在任何删除。
在下面的小节中将就递增运算介绍逻辑图的压缩。
3.12.2 递增
递增(incrementing)意味着对一个算术变量加一个固定的值,通常这个固定值为1。一个n位递增器(incrementer)执行A+1操作,它可以由一个执行A+B且B=0…01的二进制加法器实现。我们来设计n=3的递增器,它足以说明递增器的逻辑,从而可根据该逻辑电路构建n位递增器。
图3-52a为一个3位的加法器,其输入固定以实现A+1运算,最高位的进位输出C3固定为×。操作数B=001且进位输入C0=0,从而实现A+001+0运算。还可使B=000,进位输入C0=1。
由于输入值固定,因此对加法器单元有3种不同的压缩情况:
1)右边的最低有效位单元的B0=1且C0=0。
2)中间单元的B1=0。
3)左边的最高有效位单元的B2=0且C3=×。
对于右边的单元,门1的输出变成A0,故它可用一个反相器取代。门2的输出变为A0,故它可用一根连接A0的线代替。门3的输入为A0和0,可以用一根连线替代,连接A0与输出S0。门4的输出为0,故其可以用值0替代。将该0和由门2输出到门5的A0共同驱动门5,门5可以用连接A0与C1的连线代替。最终电路见图3-52b的右边单元。

对中间单元,置B1=0,运用同样的技术可得

压缩后的电路如图3-52b的中间单元所示。
对于左边单元,它的B2=0,C3=×,先考虑×的传播效应可以更快地得到结果。由于门E的输出为×,所以可以将其移去,它的两个输入端置为×。由于门B和门C驱动的所有门的输入都为×,因而它们也可移去,并且置其输入端为×。门A和门D不能移去,因为它们都驱动了一个输入不为×的门。由于×0=×,故门A变成了一根连线。最终电路见图3-52b的左边单元。
对于一个位数n>3的递增器,在位置0处使用最低有效位递增单元,位置1~n―2处使用中间典型单元,位置n―1处使用最高有效位单元。在这个例子中,位置0(原书有误—译者注)处最右边的单元被压缩,但是,如果需要,它可以用位置1(原书有误—译者注)处的单元替代,该单元的B0=1且C0=1。同样的,输出C3可以生成,但不被使用。在这两种情况中,都以牺牲逻辑成本与功耗来保证所有的单元是相同的。
3.12.3 递减
递减是指一个算术变量加一个固定的负数—通常,这个固定值为-1。在例3-28中已经设计了一个递减器。另一种方法是:递减器可以采用一个加减法器作为初始电路,置B=0…01,同时置S为1选择减法操作。从加减法器出发,我们也可以采用压缩技术设计递增器和递减器,让输入B固定为0…01,S设为变量,当S=0时电路为递增器,S=1时为递减器。在这种情况下,结果电路在各位处是复杂全加器的一个单元。
3.12.4 常数乘法
图3-53a表示一个3位乘数、4位被乘数的乘法器,其中乘数为常量(乘法器的设计详见配套网站上乘法器与除法器的补充说明)。常量加载到乘数输入端产生以下结果:如果乘数特定位的值为1,那么被乘数提供给加法器;如果乘数特定位的值为0,那么0加载至加法器,这时这个加法器可删除,通过连线产生右边的输入,再在输出上加一个进位0。在这两种情况下,与门可以移去。在图3-53a中,乘数设定为101。电路压缩的最终结果是:将B的两个最低有效位传送给输出C1和C0,在B端加上B的两个最高有效位,再将结果左移两位以产生C2到C6的输出。
一个重要的特殊情况是常数为2i(例如,乘数为2i×B)。在这种情况下,乘数仅有一个1,电路的所有逻辑都被剔除,最后只剩下一些连线。由于乘数第i位的值为1,相乘的结果是在B后跟i个0。功能块简化为移位运算和值固定为0的组合。这个模块的功能是左移i位,移出的位用0填充。零填充(zero fill)指在一个操作数(如B)的右边(或左边)添加若干个0。移位是数字和非数字数据中的一个很重要的操作。乘数为22(即左移两位)的乘法的压缩结果如图3-53b所示。
3.12.5 常数除法
我们对常数除法的讨论将局限于除以2的幂次方(如二进制2i)。因为乘以2i的结果是在被乘数的右边添加i个0,以此类推,除以2i的结果是移去被除数的i个最低有效位。剩余的位即为商,而丢弃的位为余数。这个模块的功能是右移i位,同左移一样,右移也是一个非常重要的操作。图3-53c给出了除以2i(即右移两位)的功能块示意图。
3.12.6 零填充与符号扩展
零填充,如前面常数乘法所定义的,用于增加操作数的位数。例如,假定字节01101011是有16个输入的电路的输入信号。为了满足电路输入引脚的要求,一种可能产生16位输入的方法是在其左边添加8个0,生成0000000001101011,另一种方法是在其右边添加8个0,得到0110101100000000。前一种方法适合于诸如加法或减法操作,后一种方法用于生成低精度的16位乘法结果,其中该字节表示实际结果的高8位,而结果的低位被丢弃。
相对于零填充,符号扩展(sign extension)用来增加用补码表示的有符号数的位数。位增加在左边,为扩展数的符号(正数为0,负数为1)。字节01101011的十进制值为107,扩展为16位,变成0000000001101011。字节10010101为补码表示,表示十进制数-107,扩展为16位后变成1111111110010101。使用符号扩展的原因是为了保护有符号数的补码表示。例如,如果10010101用0扩展,那么其表示的数值将变得很大,此外,最左边的位本应该为表示负数的符号1,这样扩展在二进制补码表示中是不正确的。

十进制数的运算 十进制数的算术功能模块以及电路实现的补充说明详见本书的配套网站。

时间: 2024-09-13 03:39:03

《逻辑与计算机设计基础(原书第5版)》——3.12 其他的算术功能模块的相关文章

ROS机器人程序设计(原书第2版)2.1.2 功能包

2.1.2 功能包 功能包指的是一种特定的文件结构和文件夹组合.这种结构如下所示: include/package_name/:此目录包含了你需要的库的头文件. msg/:如果你要开发非标准消息,请把文件放在这里. scripts/:其中包括Bash.Python或任何其他脚本的可执行脚本文件. src/:这是存储程序源文件的地方.你可能会为节点创建一个文件夹或按照你希望的方式去组织它. srv/:这表示服务(srv)类型. CMakeLists.txt:这是CMake的生成文件. packag

《逻辑与计算机设计基础(原书第5版)》——导读

前言 本书的目的是为广大读者提供学习逻辑设计.数字系统设计和计算机设计的基础知识.本书第5版突出了课程内容方面的最新发展.从1997年的第1版开始,作者就不断对其进行修改,提供一种独一无二的将逻辑设计与计算机设计原理结合在一起的方法,并特别强调硬件.过去几年,教材一直紧跟行业的发展趋势,新增加了一些内容(如硬件描述语言),删除或者弱化了某些不太重要的内容,修改了某些内容以反映计算机技术和计算机辅助设计所发生的变化. 新版的变化 第5版反映了相关技术与设计实践方面的一些变化,与过去相比,要求计算机

Java核心技术 卷Ⅰ 基础知识(原书第10版)

Java核心技术系列 Java核心技术 卷Ⅰ 基础知识 (原书第10版) Core Java Volume I-Fundamentals (10th Edition) [美] 凯S.霍斯特曼(Cay S. Horstmann) 著 周立新 陈 波 叶乃文 邝劲筠 杜永萍 译 图书在版编目(CIP)数据 Java核心技术 卷Ⅰ 基础知识(原书第10版) / (美)凯S. 霍斯特曼(Cay S. Horstmann)著:周立新等译. -北京:机械工业出版社,2016.8 (Java核心技术系列) 书

《机器学习与R语言(原书第2版)》一 第2章 数据的管理和理解

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第2章,第2.1节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 第2章 数据的管理和理解 任何机器学习项目初期的核心部分都是与管理和理解所收集的数据有关的.尽管你可能发现这些工作不像建立和部署模型那样令人有成就感(建立和部署模型阶段就开始看到了劳动的成果),但是忽视这些重要的准备工作是不明智的.任何学习算法的好坏取决于输入数据的好坏.

《机器学习与R语言(原书第2版)》一1.3 机器如何学习

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第1章,第1.3节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 1.3 机器如何学习 机器学习的一个正式定义是由计算机科学家Tom M. Mitchell提出的:如果机器能够获取经验并且能利用它们,在以后的类似经验中能够提高它的表现,这就称为机器学习.尽管这个定义是直观的,但是它完全忽略了经验如何转换成未来行动的过程,当然学习总是说起

《面向对象的思考过程(原书第4版)》一2.3 尽可能提供最小化的用户接口

本节书摘来自华章出版社<面向对象的思考过程(原书第4版)>一书中的第2章,第2.3节,[美] 马特·魏斯费尔德(Matt Weisfeld) 著黄博文 译更多章节内容可以访问"华章计算机"公众号查看. 2.3 尽可能提供最小化的用户接口 当设计类时,通用规则是尽量不要让用户知道类内部的工作原理.为了达到这点,请遵守以下简单的规则:只提供给用户绝对需要的东西.实际上,这意味着类的接口要尽可能少.当你开始设计一个类时,先从最小化的接口开始.类的设计是迭代式的,所以随后即使你发现

ROS机器人程序设计(原书第2版).

机器人设计与制作系列 ROS机器人程序设计 (原书第2版) Learning ROS for Robotics Programming,Second Edition 恩里克·费尔南德斯(Enrique Fernández) 路易斯·桑切斯·克雷斯波(Luis Sánchez Crespo) 阿尼尔·马哈塔尼(Anil Mahtani) 亚伦·马丁内斯(Aaron Martinez) 著 刘锦涛 张瑞雷 等译 图书在版编目(CIP)数据 ROS机器人程序设计(原书第2版) / (西)恩里克·费尔南

《JavaScript和jQuery实战手册(原书第3版)》---第1章 编写第一个JavaScript程序 1.1 编程简介

本节书摘来自华章出版社<JavaScript和jQuery实战手册(原书第3版)>一书中的第1章,第1.1节,作者David Sawyer McFarland,姚待艳 李占宣 译,更多章节内容可以访问"华章计算机"公众号查看. 第1章 编写第一个JavaScript程序 HTML自身并没有太多智能:它不能做数学运算,不能判断某人是否正确填写了一个表单,而且不能根据Web访问者的交互来做出判断.基本上,HTML让人们阅读文本.观看图片或视频,并且单击链接转向拥有更多文本.图片

《机器学习与R语言(原书第2版)》一2.3 探索和理解数据

本节书摘来自华章出版社<机器学习与R语言(原书第2版)>一书中的第2章,第2.3节,美] 布雷特·兰茨(Brett Lantz) 著,李洪成 许金炜 李舰 译更多章节内容可以访问"华章计算机"公众号查看. 2.3 探索和理解数据 在收集数据并把它们载入R数据结构以后,机器学习的下一个步骤是仔细检查数据.在这个步骤中,你将开始探索数据的特征和案例,并且找到数据的独特之处.你对数据的理解越深刻,你将会更好地让机器学习模型匹配你的学习问题. 理解数据探索的最好方法就是通过例子.在