一、半加器
对于两个二进制数字的加法器通过下面的真值表来表示。
| A | B | S | C |
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
其中,A、B是两个输入的数值,S是所求得的求和项,C为进位项。可以得到其逻辑表达式:
S = A^B;
C = A&B;
上述表达式通常被称为半加器,他是加法器的基本单元。可以很容易用verilog语言进行描述,并得到综合后的门级电路。
module half_adder(
input A,
input B,
output S,
output C
);
assign S = A^B;
assign C = A&B;
endmodule
对应的电路结构
二、全加器
全加器实在半加器上的基础上附带进位功能的电路,下面考虑全加器的逻辑表达式及4bit的全加器的verilog语言描述。
全加器的公式描述:
S = A^B^C;
C = A&B+C&(A^B);
module add_4b(
input [3:0] a_in,
input [3:0] b_in,
input c_in,
output [3:0] sum,
output c_out
);
wire [2:0] cy;
full_adder(a_in[0],b_in[0],c_in,sum[0],cy[0]);
full_adder(a_in[1],b_in[1],cy[0],sum[1],cy[1]);
full_adder(a_in[2],b_in[3],cy[1],sum[2],cy[2]);
full_adder(a_in[2],b_in[3],cy[2],sum[3],c_out);
endmodule
module full_adder(
input a,
input b,
input c_in,
output sum,
output c_out
);
assign {c_out,sum} = a+b+c_in;
endmodule
根据上述描述的语言可以综合出原始的串行进位电路结构,如下图所示。对于普遍情况,一个N bit的串行进位加法器必须由N个1 bit 加法器组成,其中的进位输出到下一加法器作为输入。但是这种电路存存在一个问题,就是必须先算出低位的进位输出,才能把这个进位输出当作更高一级的进位输入。每一级之间存在依赖关系,所以加法器的输出延迟与位宽成正比,对于高位的加法器,电路的是很慢的。为了实现高速设计,必须要修改加法器的计算机构,如超前进位加法器。
以上内容来自于《FPGA/ASIC高性能数字系统设计 》