首先看一下无符号数的乘法,根据乘数的数位计算位积,再将一系列位积相加。便可以得到两个无符号二进制数的乘积。这里可以选择移位的方式。比如out= in * 13,in为4位,则out为8位,的计算:assign out = a + a << 2 + a <<3;实现如果in为一个有符号数,则不可以,则 in10 = (-in[msb]*2^msb + in[msb-1:0]);其中in10代表in的十进制表示。从而我们 图1. 无符号数的乘法 (11*13 = 143) 图2.有符号数乘以无符号数。(-5*7=-35),注意由于是两个4位数相乘,所以进行了符号的扩展,扩展到了8位。并且扩展时候最高位加1.。 这种情况一般用在一个变系数乘以一个固定系数的情况。以DA算法为例。 in10 = (-in[msb]*2^msb + in[msb-1:0]);低位跟普通DA算法相同,高位进行减法。(补充在DA算法中) 图3.有符号数乘以有符号数。(-5*-3 = 15)。注意这里是两个有符号数相乘,所以结果位数为7(不是8),进行符号扩展时候注意。
|