此次采用有符号位宽为6bit的输入变量in_a和in_b。其中最高位为符号位,“0”表示正数,“1”表示负数。低5bit表示小数位。所有数据范围均为-1~1之间。
一、正数×正数
正数乘法可直接运算,去除乘数和被乘数的符号位进行相乘,结果为10bit(如果位数不够,最高位加0),符号位为乘数和被乘数符号位取异或。
如图为:0.78125(011001)×0.75(011000)
结果位宽为11bit。
二、正数×负数
1、进行乘法之前,首先将负数转化为正数再进行运算(补码)。
方法:负数整个按位取反再加一。
2、再按两个正数相乘的方法进行运算(即乘数和被乘数去除符号位相乘)(如果不够,根据符号位添加,如果符号位为“1”,则最高位添加“1”)
3、结果的符号位也是乘数,被乘数取异或运算。
4、如果符号位为“1”,则步骤2相乘的结果最高位补位为“1”,符号位为“0”,最高位补“0”,凑够10bit位宽(如果步骤2结果本来为10bit,则不需要添加)。
5、添加符号位,结果为11bit,最高位符号位,低10bit为小数位。
如图:eg:111001(-0.21875)×011000(0.75)
ps:负数×负数与上述方法一样,不一一列举。