- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//Wire declaration
wire [5:0] add_a,add_b;
wire [6:0] add_out;
wire [2*size-1:0] out;
assign
a={x[3],x[3],x[2],x[2],x[1],x[3],x[1],x[0],x[3],x
[2],x[1],x[0],x[2],x[1],x[0],x[0]}
Microelectronics School Xidian University
6
例10.1-1: 用Verilog HDL设计实部和虚部均为4位2进制书的复数乘法器
module complex(a,b,c,d,out_real,out_im); input [3:0]a,b,c,d; output [8:0] out_real,out_im; wire [7:0] sub1,sub2,add1,add2; wallace U1(.x(a),.y(c),.out(sub1)); wallace U2(.x(b),.y(d),.out(sub2)); wallace U3(.x(a),.y(d),.out(add1)); wallace U4(.x(b),.y(c),.out(add2)); assign out_real=sub1-sub2; assign out_im = add1+ add2;
第10章 Verilog HDL
10.10.2020
Microelectronics School Xidian University
1
10.1 乘法器设计
10.1.1 Wallace树乘法器
10.10.2020
Microelectronics School Xidian University
2
部分积 x3y3 x3y2 x2y3
endmodule
module complex_tb; reg [3:0] a, b,c,d; wire [8:0] out_real; wire [8:0] out_im; complex
U1(.a(a),.b(b),.c(c),.d(d),.out_real(out_real),.o ut_im(out_im)); initial
3
module wallace(x,y,out);
parameter size=4;
// Define
parameters
input [size-1:0] x,y;
output [2*size-1:0] out;
// IO declaration
wire [size*size-1:0] a;
wire [1:0] b0,b1,c0,c1,c2,c3;
Microelectronics School Xidian University
4
module fadd(x, y, z, out); output [1:0]out; input x,y, z; assign out=x+y+z; endmodule module hadd(x, y, out); output [1:0]out; input x,y; assign out=x+y; endmodul12]),.out(b1)); hadd U3(.x(a[4]),.y(a[5]),.out(c0));
fadd U4(.x(a[6]),.y(a[7]),.z(b0[0]),.out(c1)); //3 input full adder
fadd U5(.x(a[13]),.y(a[14]),.z(b0[1]),.out(c2)); fadd U6(.x(b1[0]),.y(a[10]),.z(b1[1]),.out(c3));
begin a=2; b=2; c=5; d=4; #10 a=4; b=3; c=2; d=1; #10 a=3; b=2; c=3; d=4;
end endmodule
10.10.2020
Microelectronics School Xidian University
7
10.1.3 向量乘法器
module wallace_tb;
reg [3:0] x, y;
wire [7:0] out;
wallace m(.x(x),.y(y),.out(out));
// module instance
initial
// Stimuli signal
begin
x=3; y=4;
#20 x=2; y=3;
a1 b1 a2 b2 a3 b3 a4 b4
assign add_a={c3[1],c2[1],c1[1],c0[1],a[3],a[1]}; //adder
assign add_b={a[15],c3[0],c2[0],c1[0],c0[0],a[2]};
assign add_out=add_a+add_b; assign out={add_out,a[0]}; endmodule
#20 x=6; y=8;
end
endmodule
10.10.2020
Microelectronics School Xidian University
5
10.1.2 复数乘法器
a
a*c
×
c
sub1
实部输出
-
b
sub2
×
d
b*d
a
× a*d
d
add1
虚部输出
+
add2 b
×
c
b*c
10.10.2020
x2y2 x1y3 x3y1 x1y2 x0y3 x3y0 x2y1 x1y1x0y2 x2y0x1y0 x0y1 x0y0
第1级
HA
HA
第2级
简单两输 入加法器
FA
FA
FA
HA
图10.1-2 Wallace树乘法器结构图
10.10.2020
Microelectronics School Xidian University
&{y[3],y[2],y[3],y[2],y[3],y[1],y[2],y[3],y[0],y[
1],y[1],y[2],y[0],y[0],y[1],y[0]};
//Pre part multiplier
10.10.2020
hadd U1(.x(a[8]),.y(a[9]),.out(b0)); //2 input half adder