1. 无符号数的乘法
1.1 设计要求:
求无符号数MUL[15:0] = A[9:0] * B[5:0]的结果
通过写乘法器了解乘法器原理,了解如何优化乘法器的时序。理论上,对于一个普通的乘法器,我们直接使用a*b就可以得出。但它的时钟频率会很低。
1.2 补充:
无符号数乘法器的设计——方法1:(几乎没人用该方法)
- 选定部分积产生方式。尽量减小部分积数目
- 采用移位加实现
- 得到6个部分积分P1~P6
- 最终结果MUL = P1+P2+P3+P4+P5+P6
- 缺点是速度慢,面积大
3-2压缩器(全加器),把三个部分积压缩为2个
- Cout = A&B | A&Ci | B&Ci
- Sum = A^B^Ci
- {Cout, Sum} = A+B+Ci
2-2压缩器(半加器)
其他如4-2压缩器等等
1.3 设计代码
1. pp_gen模块:用于产生部分积
2.compress3_2模块,通过全加器将其中三个部分积压缩为两个
3. mul_top顶层模块
1. 仿真代码及波形
仿真代码:
波形:
2. 有符号数的乘法
有符号数与无符号数的乘法的区别:部分积的产生方式不同。