资源描述
实验四 乘法器
一、实验任务
利用移位相加的原理设计并实现一个4 位的移位相加乘法器
二、实验器材
1、SOPC 实验箱
2、计算机(装有Quartus II 7.0 软件)
三、实验预习
1、预习乘法器的原理与结构。
2、书写预习报告,必须有完整的VHDL 设计程序及实验步骤。
四、实验原理
目前常用的硬件乘法器主要有移位相加乘法器和加法器树乘法器。下面以移位相加乘法
器的设计为例介绍它的原理。
首先,考虑下面两个4 位操作数的乘法,同我们在小学所学的竖式乘法形式相同。每行称为一个部分结果。由操作数通过一位一位相乘得到。例如:操作数a 的每一行乘上b,得到的部分结果为a3b0,a2b0,a1b0,a0b0,如图 所示。
a3 a2 a1 a0
ⅹ b3 b2 b1 b0
a3b0 a2b0 a1b0 a0b0
a3b1 a2b1 a1b1 a0b1
a3b2 a2b2 a1b2 a0b2
a3b3 a2b3 a1b3 a0b3
Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y0
其乘积按“手工计算”的方法给出是:
å= = ´ = Y=A×B=k=03ak2kB
从中可以看出只要ak不等于0,输入B就随着k的位置连续地变化,然后累加B2k。如果ak等于0,相应的转换相加就可以忽略了。
移位相加乘法器就是按照这种方法,根据乘数的每一位是否为1进行计算,如果为1,就将被乘数移位相加。这种乘法器所用的硬件资源较少,但每个时钟周期内只能完成4位乘1位的运算,因此要完成4位乘4位的运算至少需要4个时钟周期。
五、实验内容
1、启动QuartusⅡ建立一个空白工程。
2、新建verilog源程序文件mult4.v,输入程序代码并保存,进行综合编译,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。
代码:
module mult4b(r,a,b);
parameter s=4;
output[2*s:1] r;
input [s:1]a,b;
reg[2*s:1]r;
integer i;
always @(a or b)
begin
r=0;
for (i=1;i<=s;i=i+1)
if (b[i])
r=r+(a<<(i-1));
end
endmodule
3、进行波形仿真。
11X10=110 3X4=12 5X5=25
运算均结果正确。
4、元器件仿真。
六、实验小结
1、在做实验前应该先充分理解实验原理,并根据原理编写语言。
2、编写语言时要在注意语法错误的同时注意逻辑错误。
3、实验波形中存在毛刺,是因为存在竞争冒险现象。
展开阅读全文