基于ROM的快速乘法器设计:从无符号数到补码乘法
基于ROM的快速乘法器设计:从无符号数到补码乘法
在计算机组成原理中,乘法器的设计是一个重要的课题。传统的乘法器设计往往采用移位和加法的方式,但这种方式效率较低。本文将介绍一种基于ROM存储预计算结果的新型乘法器设计,包括无符号数乘法器和补码乘法器的设计方案。
计算机发展历史中的乘法器演变
数字式电子计算机诞生于1946年,当时的计算机主要采用电子管作为器件,存在耗电大、发热多、体积大等问题。因此,早期的计算机中只配置了加法器,没有减法器,减法操作通过加法器加上补码的方式实现。
随着电子技术的发展,计算机经历了晶体管、集成电路、大规模集成电路的时代,性能不断提升。然而,许多计算机教材仍然固守着"只有加法器"的传统观念,没有及时更新。
传统乘法器设计的局限性
传统的乘法器设计通常采用相乘、移位、求和的方式。例如,8位×8位的乘法需要生成8项部分积,然后通过移位和加法操作得到最终结果。这种方式存在以下问题:
- 需要多次移位操作,效率较低
- 需要多个加法器,硬件开销较大
- 不适用于大规模乘法运算
基于ROM的新型乘法器设计
为了解决传统乘法器设计的局限性,可以采用基于ROM存储预计算结果的新型乘法器设计。这种设计利用组合逻辑电路的特点,将所有可能的乘积结果预先存储在ROM中,需要时直接读取即可。
无符号数乘法器设计
下图是一个基于ROM的8位×8位无符号数乘法器电路图。该电路使用两块27512芯片,每块容量为2^16×8bit(64KB),分别存储乘积的高低8位。
电路输入两组16位地址信号,分别代表两个8位无符号数。例如,X=01100100(十进制100)、Y=10000010(十进制130)。电路输出16位乘积数据,例如P=0011001011001000(十进制13000)。
补码乘法器设计
补码乘法器的设计与无符号数乘法器类似,但存储器中预存的数据不同。下图是一个基于ROM的8位×8位补码乘法器电路图。
电路输入两组16位地址信号,分别代表两个8位补码数。例如,X=01100100(十进制+100)、Y=10000010(十进制-126)。电路输出16位乘积数据,例如P=1100111011001000(十进制-12600的补码)。
大规模乘法运算的解决方案
对于大规模乘法运算,可以采用分次运算再移位相加的方法。例如,32位×32位的乘法可以分解为四次8位×8位的乘法,然后将结果移位相加得到最终的64位乘积。
ROM数据的生成与存储
使用PROTEUS软件进行电路设计时,可以通过C或汇编语言编程生成二进制数据文件(.BIN格式),然后将数据存入存储器芯片。在真实环境中,可能需要专门的写入器或编程器来完成数据存储。
补码乘法器的特殊性
与无符号数乘法器不同,补码乘法器不能通过分次运算再移位相加的方式实现。如果需要进行大规模补码乘法运算,必须设计相应规模的补码乘法器。
结论
基于ROM的乘法器设计具有运算速度快、硬件开销小等优点,适用于现代大规模集成电路工艺。通过合理设计存储器中的数据,可以实现无符号数乘法器和补码乘法器的功能。