问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

计算机组成原理:最快速的乘法器(无符号数、补码)

创作时间:
作者:
@小白创作中心

计算机组成原理:最快速的乘法器(无符号数、补码)

引用
CSDN
1.
https://blog.csdn.net/baidu_33836580/article/details/144576214

在计算机组成原理中,乘法器的设计是一个重要的课题。传统的乘法器设计往往通过移位和加法来实现,但随着技术的发展,使用存储器来实现乘法器成为了一种更高效的方式。本文将详细介绍如何使用ROM存储器实现无符号数和补码乘法器,并通过具体电路图和实例进行说明。

数字式电子计算机诞生于1946年,主要器件是电子管,耗电大、发热多,体积也大。因此,早期的计算机中只有加法器,没有减法器,只能用加上补码的方法来做减法。随着电子技术的发展,计算机行业经历了晶体管、集成电路、大规模集成电路的时代,计算机的性能不断提升。但是,很多计算机教材仍然固守着"只有加法器"的观念,没有跟上时代的步伐。

用计算机做除法,也就是相减、移位、上商。因为在CPU中,早已配置了ALU(算术逻辑单元),所以做减法时可以直接用二进制数相减,不必处处都讨论用补码相加。用计算机做乘法,也就是相乘、移位、求和。但是,使用一个长串的移位寄存器进行移位操作效率较低。在集成度逐步提高的条件下,可以使用加法器阵列来避免移位操作带来的弊病。但是,很多计算机专业的教材仍然停留在1946年的思维,没有认识到这个深度。

对于除法电路或乘法电路,都属于"组合逻辑电路"。在这种电路中,输入和输出的内容是固定不变的,可以采用预存数据的方法,把所需要的输出内容都存进存储器中,在需要的时候再调用出来即可。这种手段在软件方面是常用的,比如现在的汉字操作系统就是把所有的汉字信息都在计算机中保存好。

下图就是利用ROM芯片存储无符号乘积数据的电路图,当输入16位的地址号码时,它立刻就会在指定的单元中取出16位数的乘积数据,输出到数据总线。

图中的乘法电路极其简单,只有两块存储器芯片27512。27512的容量是:2^16 × 8 bit。也就是64 KB。用拨动开关输入16位地址,这块芯片就会输出指定字节单元中预存的8位数据。

按照乘法的规律,8位 × 8位时,乘积就是16位数。所以,就必须使用两块这样的芯片,分别存储乘积的高低八位,才能满足乘法运算的需求。

图中输入的两组数据分别是:X = 0110 0100、Y = 1000 0010,即:X = 100、Y = 130。输出的乘积则是:P = 0011 0010 1100 1000,即:P = 13000。

输入数据时,图中没有配置显示器件,就只能观察开关处的红蓝点了。27512输出的数据,则用16个LED进行显示,这就比较直观了。

两个八位的二进制数相乘,得出十六位二进制数的乘积,其运算过程可见下图。上图中,乘数是8位,本应该有8项部份积,但是为了简明起见,略去了6个为零的项。所以只写了两行。但是,实际上,在本电路中,并无任何的乘法运算步骤。所有的乘积,都是预先存到ROM芯片中的。如想从中得出乘积,只需耗费两次存储器的读写周期而已。也可以说,这个"乘法运算"的速度,就是【立等可取】!

书上介绍的乘法电路,往往都是4位 × 4位。本电路的计算规模虽然大了一倍,但是,往往还是不够用的。解决的办法就是:分次相乘,再移位相加。可见下图所示。上图中,做了四次8位 × 8位的乘法,把它们移位相加,便可组合成32位的乘积。如果位数还不够,可再次如法炮制,就可以形成32位 × 32位的乘法,得出64位数的乘积。

在浮点数相乘的运算中,浮点数的尾数,都是无符号数,就必须使用此类乘法器进行运算。

使用存储器来实现乘法器的功能,是否可行呢?当然是可行的。现在的CPU都是大规模集成电路工艺的产品,一片CPU芯片,都含有几亿的门电路。64 KB的存储器也就用几十万个门而已,这点消耗,根本就不值一提。

用同样的电路,也可做一个补码乘法器,如下所示。图中输入的两组补码分别是:X = 0110 0100、Y = 1000 0010,即 X:+100、Y:-126。输出的乘积(补码)则是:P = 1100 1110 1100 1000,这正是:-12600的补码。

这组补码数据的乘法计算过程,可见下图。看到了吗?这两张电路图,输入的二进制数是相同的,都是0110 0100、1000 0010。但是这两个电路的输出,是不同的。前一个电路输出的是无符号数的乘积、后面的电路输出的是补码的乘积。之所以有这种区别,就是在存储器中,预存了不同的数据。

用PROTEUS软件绘制电路图时,可以预先在存储器中存入数据。数据的格式,要求是二进制形式。为了生成这种格式的数据文件,你可以用C或汇编语言编程,根据你的需要,在内存中编写二进制信息。然后,将这批数据信息存盘。存盘文件名的后缀,通常都是.BIN。然后在PROTEUS中打开这个数据文件,存到存储器芯片即可。

如果是在真实的存储器芯片中存入数据,往往还需要有一些特定的设备(如写入器、编程器等等),这就不多说了。

另外,如果补码乘法器的规模不够大,能不能用前述的:分次运算,再移位相加呢?答案是:不可。这就是说,你有多大的数进行相乘,你就必须设计一个多大的补码乘法器!不能凑凑付付、勉勉强强的,就弄个大的。。。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号