赞
踩
数字IC设计 FPGA——再谈乘法器设计(使用Verilog 原语 LUT 进行四位乘法器设计)
乘法器同加法器一样,在数字信号的各种算法中被频繁的使用,并且对于整个系统的速度的影响是很大的。那么如何实现快速高效的乘法器关系着整个系统的运算速度和资源效率最大化的利用。
乘法操作分为有符号操作和无符号操作两大类,无符号操作相对于有符号乘法操作相对简单,但也只需要简单的变换就能有符号乘法器变换为无符号乘法器。
本次主要是基于Verilog 原语LUT 进行乘法器的设计。
相关的乘法器知识可以参考之前的博文:
数字电路基础知识——组合逻辑电路之乘法器的设计(一)—— 并行、移位相加、加法树、查找表乘法器
数字电路基础知识——乘法器的设计(二)( 串行、流水线、有符号数八位乘法器)
module addr_4bit(
A,B,Y
);
input [3:0] A,B;
output [7:0] Y;
wire [3:0] t0,t1,t2,t3; //每一行相与结果
wire [3:0] ts0,ts1,ts2,ts3; //每一行的相加的结果输出
wire [3:0] tc0,tc1,tc2,tc3; //每一行的进位输出
genvar i;
generate
for (i=0;i<4;i=i+1)
begin: label1
assign t0[i] = A[i] & B[0];
assign t1[i] = A[i] & B[1];
assign t2[i] = A[i] & B[2];
assign t3[i] = A[i] & B[3];
end
endgenerate
genvar j;
generate
for (j=0;j<4;j=j+1)
begin:label2
assign ts0[j]= t0[j];
assign tc0[j] = 1'b0;
end
endgenerate
genvar m;
generate
for (m=0;m<3;m=m+1)
begin: label3
addr_bit u1(
.A(t1[m]),
.B(ts0[m+1]),
.S(ts1[m]),
.Cout(tc1[m]),
.Cin(tc0[m])
);
end
for (m=0;m<3;m=m+1)
begin: label4
addr_bit u2(
.A(t2[m]),
.B(ts1[m+1]),
.S(ts2[m]),
.Cout(tc2[m]),
.Cin(tc1[m])
);
end
for (m=0;m<3;m=m+1)
begin: label5
addr_bit u3(
.A(t3[m]),
.B(ts2[m+1]),
.S(ts3[m]),
.Cout(tc3[m]),
.Cin(tc2[m])
);
end
endgenerate
assign ts1[3]=t1[3];
assign ts2[3]=t2[3];
assign ts3[3]=t3[3];
wire [3:0] rac,ras;
assign rac[0]= 1'b0;
genvar n;
generate
for (n=0;n<3;n=n+1)
begin :label6
addr_bit u4(
.A(rac[n]),
.B(ts3[n+1]),
.S(ras[n]),
.Cin(tc3[n]),
.Cout(rac[n+1])
);
end
endgenerate
assign Y[0]=ts0[0];
assign Y[1]=ts1[0];
assign Y[2]=ts2[0];
assign Y[3]=ts3[0];
genvar p;
generate
for (p=4;p<7;p=p+1)
begin:label7
assign Y[p]=ras[p-4];
end
endgenerate
assign Y[7]=rac[3];
endmodule
rac和ras是高四位的进位输出和结果输出相与的结果。必须要想加才能得到正确的结果。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。