布鲁斯乘法器算法
1)字母定义:A,0000;Q,乘数;Q-1,0;M被乘数
2) 乘数的最低位补零;
3) 从乘数的最低两位开始循环判断,如果是00或11,则不进行加减运算,但A、Q需要右移一位;如果是01,则和被乘数进行加法运算,A、Q右移一位;如果是10,则和被乘数进行减法运算,A、Q右移一位;
4) 运算次数为4bits的整数倍
5) 乘数的最后两位为11或10时,A的最高位补1;
例1:7X6=42 (标红为下一步动作)
步骤 |
| A | Q | Q-1 | M | [-M]补 |
初始值 |
| 0000 | 0110 | 0 | 0111 | 1001 |
1 | 00,右移 | 0000 | 0011 | 0 | 0111 | 1001 |
2 | 10,A-M | 1001 | 0011 | 0 | 0111 | 1001 |
| 右移 | 1100 | 1001 | 1 | 0111 | 1001 |
3 | 11,右移,A补1 | 1110 | 0100 | 1 | 0111 | 1001 |
4 | 01,A+M | 0101 | 0100 | 0 | 0111 | 1001 |
| 右移 | 0010 | 1010 | 0 | 0111 | 1001 |
{A,Q}=’b00101010=’d42;
注:若被乘数M为负数,貌似不适合此方法,若大神经过,请指点一二
初次研究,欢迎指正。