与加法运算一样,我们同样考察乘数均是补码表示形式(有符号数)的情况,这也是FPGA进行数字符号处理最常用的数据表示方式,在讨论清楚补码的相关情况后,很容易得出无符号数的运算规律。
(1)对于字长分别为M、N的数据进行乘法运算,需要采用M+N为字长的数据才能得到准确的结果;
(2)对于乘法运算,不需要通过扩展位数来对齐乘数的小数点位置;
(3)当乘数为小数是,乘法结果的小数位位数等于两个乘数的小数位位数之和;
(4)当需要对乘法运算结果截取时,为保证得到正确的结果,只能取高位,而舍去低位数据,这样相当于降低了运算结果的精度;
(5)只有当两个乘数均为所能表示的最小负数(最高位位1,其余为均为0)时,才有可能出现最高位与次高位不同的情况。也就是说,只有在这种情况下,才需要M+N位字长的数据才存放准确的最终结果,其他情况下,实际均有两位相同的符号位,只需要M+N-1位字长即可存放准确的运算结果。
在 Quartus/ISE开发环境中,提供的乘法器IP核在选择输出数据位数时,如果选择全精度运算,则会自动生成M+N位字长的运算结果。在实际工程设计中,如果预先知道某位乘数不可能出现最小负值的情况,或者通过一些控制手段去除出现最小负值的情况,则完全可以只用M+N-1位字长存放运算结果哦,从而节约一位寄存器资源。如果乘法运算只是系统的中间环节,则后续的每个运算步骤均可节约一位寄存器资源。
摘抄自《数字调制解调技术的MATLAB与FPGA实现Altera/Verilog版》