verilog实现加法器,从底层的门级电路级到行为级,本文对其做出了相应的阐述。
1、一位半加器
所谓半加器就是有两个输入,两个输出,不考虑进位。其真值表如下:
A | B | S | C |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
由此,我们可以得到S=A^B,C=A&B。用相应的与门、异或门来实现半加器。
对应的Verilog代码如下:
module half_add_1(
A,
B,
S,
C);
input A,B;
output S,C;
assign S=A^B;
assign C=A&B;
endmodule
2、一位全加器
全加器包含三个输入,两个输出,其中包含一个进位。
2.1 实现方式一
与半加器类似画出其真值表,进一步通过画卡诺图得到相应的函数表达式。
S=A^ B^cin,co=(A&B)|(A&cin)|(B&cin)。
2.2 实现方式二
利用两个半加器和一个或门实现全加器。其电路结构图如下:
module full_add_1_gate(
A,
B,
cin,
S,
co);
input A,B,cin;
output S,co;
wire S,co;
wire C1,C2,S1;
half_add_1 uut1(
.A(A),
.B(B),
.S(S1),
.C(C1)
);
half_add_1 uut2(
.A(cin),
.B(S1),
.S(S),
.C(C2)
);
assign co=C1|C2;
endmodule
3、多位加法器的实现
在数字信号处理的快速运算电路中常常用到多位数字量的加法运算,对于多位宽加法器的处理,我们以逐位进位加法器为例。
代码和电路结构框图如下:
module full_add_8_gate(
A,
B,
cin,
S,
co);
input [7:0] A,B;
input cin;
output [7:0] S;
output co;
wire [7:0] C;
full_add_1_gate uut0(
.A(A[0]),
.B(B[0]),
.cin(cin),
.S(S[0]),
.co(C[0])
);
full_add_1_gate uut1(
.A(A[1]),
.B(B[1]),
.cin(C[0]),
.S(S[1]),
.co(C[1])
);
full_add_1_gate uut2(
.A(A[2]),
.B(B[2]),
.cin(C[1]),
.S(S[2]),
.co(C[2])
);
full_add_1_gate uut3(
.A(A[3]),
.B(B[3]),
.cin(C[2]),
.S(S[3]),
.co(C[3])
);
full_add_1_gate uut4(
.A(A[4]),
.B(B[4]),
.cin(C[3]),
.S(S[4]),
.co(C[4])
);
full_add_1_gate uut5(
.A(A[5]),
.B(B[5]),
.cin(C[4]),
.S(S[5]),
.co(C[5])
);
full_add_1_gate uut6(
.A(A[6]),
.B(B[6]),
.cin(C[5]),
.S(S[6]),
.co(C[6])
);
full_add_1_gate uut7(
.A(A[7]),
.B(B[7]),
.cin(C[6]),
.S(S[7]),
.co(C[7])
);
assign co=C[7];
endmodule
串行加法器限制了运行的速度,在实际应用中,我们一般用到并行加法器。大致可以分为以下几类:进位旁路加法器、线性进位选择加法器、平方根进位选择加法器、超前进位加法器、对数超前进位加法器。并行加法器比串行加法器快得多,电路结构也不太复杂,它的原理很容易理解。
3、行为级描述加法器
用Verilog HDL来描述加法器是相当容易的,只需要将运算表达式写出就可以了。
一位全加器
module full_add_1(
A,
B,
C_in,
S,
C_out);
input A,B,C_in;
output S,C_out;
assign {C_out, S}= A + B + C_in;
endmodule
八位加法器
module full_add_8(
A,
B,
C_in,
S,
C_out);
input [7:0]A,B;
input C_in;
output [7:0]S;
output C_out;
assign {C_out, S}= A + B + C_in;
endmodule
这样设计的加法器在行为仿真时是没有延时的。借助综合器,可以根据以上Verilog HDL源代码将其自动综合成典型的加法器电路结构。综合器有许多选项可供设计者选择,以控制自动生成电路的性能。设计者可以考虑提高电路的速度,也可以考虑节省电路元件以减少电路占用硅片的面积。在FPGA的库中或某工艺的ASIC库中,都有参数化的加法器供设计者选用。