定点数的乘法运算
- 定点乘法运算
- 人工算法和机器的矛盾
- 不带符号的阵列乘法器
- 带符号的阵列乘法器
- 求补电路
- 求补电路的思想
- ✨️间接补码乘法运算的步骤
定点乘法运算
在定点计算机中,两个原码表示的数相乘的运算规则是:乘积的符号位 = 两数的符号位异或,而乘积的数值部分 = 两个正数相乘之积
设n位被乘数和乘数用定点整数表示:(定点小数也同样适用)
被乘数 [x]原 = xfxn-1 ··· x1x0
乘数 [y]原 = yfyn-1 ··· y1y0
乘积 [z]原 的符号是 (xf⊕yf) ,数值部分是 (xn-1 ··· x1x0) (yn-1 ··· y1y0)
(xf、 yf是符号)
人工算法和机器的矛盾
设 x = 1101,y = 1011,用我们习惯的方法求乘积,过程如下:
与十进制的乘法相似。(乘数和被乘数是定点小数也一样)
❗但是,人们习惯的算法对计算机来说并不适用:
①n位的机器,对于两个n位数相乘,乘积可能为2n位
②只有两个操作数相加的加法器,无法将n个位积一次性加起来
因此,早起计算机为了简化硬件结构,采用串行的1位乘法方案→多次执行“加法-移位”操作(串行乘法器)。然而串行方法太慢,满足不了我们的需求,因此串行乘法器已经被淘汰。
自从大规模集成电路问世以来,高速的单元阵列乘法器应运而生。目前广泛使用的是流水式阵列乘法器→并行乘法器!
不带符号的阵列乘法器
n位无符号数 × n位无符号数 会产生 n×n 个位积,n+n-1个列和。
并行乘法器的关键是快速产生 n×n 个位积,对位积进行相加运算产生n+n-1个列和
这种乘法器要实现n位 × n位 运算,需要n(n-1)个全加器和n2个与门
带符号的阵列乘法器
在讲带符号的阵列乘法器的原理前,我们先看算术运算部件设计中常用的求补电路
求补电路
图2.6是一个有使能控制的二进制对2求补电路图(二进制对2求补:计算二进制数的2’s complement,即二进制数的补码)
逻辑表达式:
C-1=0
Ci = ai + Ci-1
a*i = ai ⊕ ECi-1
最右端起始链式输入C-1必须永远设置成 “0”
当控制信号线 E=1 时,是对2求补操作;
E=0 时,输出和输入相等。→显然我们可以 用符号位来作为控制信号
求补电路的思想
先看由补码求原码的运算:
[101100100]补 → [110011100]原
[111010000]补 → [100110000]原
[101011011]补 → [110100101]原
通过观察可以知道:正数的补码不变,负数的补码等于从右边开始,遇到第一个真值的1以后,除了符号位外0变1,1变0
由此得求补电路的思想:
①如果符号位是0,数据不变
②如果符号位是1,符号位不变,数据位从右边开始的第一个1以后除符号位全部取反
✨️间接补码乘法运算的步骤
设 [A]补 = anan-1…a1a0和 [B]补 = bnbn-1…b1b0均为用定点表示的(n+1)位带符号整数的补码。求 [A]补×[B]补的步骤如下:
① 将 [A]补 和 [B]补 的数值位an-1…a1a0和bn-1…b1b0经过求补电路后变成 |[A]原| 和 |[B]原|,该补码电路称为算前求补器
② 将两个n位正整数 |[A]原| 和 |[B]原| 送给 n×n 位不带符号的阵列乘法器,由此产生2n位原码乘积
③ 将2n位原码乘积经过求补电路变成补码,该补码电路称为算后求补器
④ 将A和B的符号位an和bn进行异或,作为结果的符号位