8位乘法器的构建
实验原理
8位乘法器有多种构建方式
- 门级建模:先构建一位全加器,构建出16位全加器,构建1*8乘法器,将乘数a每一位与另一个乘数b相乘,结果加到最终结果里,然后左移一位进行下一步。(正文附录有失败方法可供参考)
- 数据流建模:乘数a每一位与乘数b相与,再将结果移相当的位相加,此方法太麻烦且很难使用循环,所以此报告不讨论。
- 行为建模:抽象算法,取出乘数a的一位,如果为1,则d相加结果,否则不进行任何操作,最后d左移一位(一开始把b的值赋给b)
行为级建模乘法器
verilog代码实现
module a8bitmulti(a,b,c,out1,out2,out3,out4);
input [7:0]a,b;//输入
output reg[15:0]c;
integer i,b1;
output reg[7:0] out1,out2,out3,out4;
always @(a,b)
begin
b1=a;
c = 16'b0000_0000_0000_0000;//结果赋初值
for (i=0;i<8;i=i+1)
begin
if(b[i] == 1) //如果为一就相加
c = c + b1;
b1 = b1*2;//移位
end
end
endmodule
测试激励文件
verilog代码
// 8位乘法器的测试激励
`timescale 1us/1us
module test_multiple_8x8;
reg[7:0] X,Y,c1,c2,c3,c4;
wire[15:0] Z;
a8bitmulti test(X,Y,Z);
initial
begin![]()
X = 8'b00000000; Y = 8'b00000000;
#10 X = 8'b01010100; Y = 8'b00000000;
#10 X = 8'b10011010; Y = 8'b01010111;
#10 X = 8'b10100111; Y