lcytms
发表于 2017-4-6 23:43:35
16位超前进位加法器CLA的FPGA实现
其调用的子模块无需修改,沿用即可。
module cla16_adder (a, b, cin, s, cout); //顶层模块
input a, b;
input cin;
output s;
output cout;
wire gg, gp, gc; //
wire ggg, ggp; //
bitslice4 b0 (a[ 3: 0], b[ 3: 0], gc, s[ 3: 0], gp, gg);
bitslice4 b1 (a[ 7: 4], b[ 7: 4], gc, s[ 7: 4], gp, gg);
bitslice4 b2 (a, b, gc, s, gp, gg);
bitslice4 b3 (a, b, gc, s, gp, gg);
cla4 c0 (gp, gg, cin, gc, ggp, ggg);
assign cout = ggg | (ggp & cin);
endmodule
lcytms
发表于 2017-4-6 23:45:01
编写cla16_adder的testbench。
编写cla16_adder_tb.v代码如下。
`timescale 1ns/1ps
module cla16_adder_tb;
reg a, b;
reg cin;
wire s;
wire cout;
cla16_adder dut(.a(a), .b(b), .cin(cin), .s(s), .cout(cout));
integer i;
initial begin
a = 0; b = 0; cin = 0;
for (i=0; i<65536; i=i+1) begin
#10 a = i; b = i; cin = 0;
#10 a = i; b = i; cin = 1;
end
for (i=0; i<65536; i=i+1) begin
#10 a = i; b = i; cin = 0;
#10 a = i; b = i; cin = 1;
end
#200 $stop;
end
endmodule
lcytms
发表于 2017-4-6 23:48:40
设置好仿真之后,cla16_adder仿真结果如下图。
lcytms
发表于 2017-4-6 23:54:47
32位超前进位加法器CLA的FPGA实现
其调用的子模块无需修改,沿用即可。
module cla32_adder (a, b, cin, s, cout); //顶层模块
input a, b;
input cin;
output s;
output cout;
wire gg, gp, gc; //
wire ggg, ggp, ggc; //
wire gggg, gggp; //
//first level
bitslice4 b0(a[ 3: 0], b[ 3: 0], gc, s[ 3: 0], gp, gg);
bitslice4 b1(a[ 7: 4], b[ 7: 4], gc, s[ 7: 4], gp, gg);
bitslice4 b2(a, b, gc, s, gp, gg);
bitslice4 b3(a, b, gc, s, gp, gg);
bitslice4 b4(a, b, gc, s, gp, gg);
bitslice4 b5(a, b, gc, s, gp, gg);
bitslice4 b6(a, b, gc, s, gp, gg);
bitslice4 b7(a, b, gc, s, gp, gg);
//second level
cla4 c0 (gp, gg, ggc, gc, ggp, ggg);
cla4 c1 (gp, gg, ggc, gc, ggp, ggg);
assign ggp = 2'b11;
assign ggg = 2'b00;
//third level
cla4 c2 (ggp, ggg, cin, ggc, gggp, gggg);
assign cout = gggg | (gggp & cin);
endmodule
lcytms
发表于 2017-4-6 23:57:42
32位超前进位加法器CLA的FPGA实现架构图如下。
注意观察图中红线部分的进位信号走向。
lcytms
发表于 2017-4-7 00:02:31
64位甚至更高位数的依次类推。
小结:
通过查阅资料,借鉴了各方的一个叙述,综合出自认为比较清楚的超前进位加法器CLA及其FPGA实现的介绍。
原理方面,有待继续深入领悟。
也请大神们不吝赐教,多谢多谢!
谈及超前进位加法器CLA有感而发,匆匆整理成文,谨供参考。
lcytms
发表于 2017-4-7 15:41:34
关于真值表的补充说明
参考信息:http://tekkamanninja.blog.chinaunix.net/uid-24875436-id-3328681.html
附图如下。
lcytms
发表于 2017-4-7 15:44:21
根据真值表可知二进制加法与十进制加法一样,进位值是逢二进一。
而和值则是上级进位值跟被加数跟加数总和模二的余数。
根据卡诺图化简得到S与Ci+1的全加器电路为:
小舍YZ
发表于 2017-4-20 14:02:00
赞 ,,,,,,谢谢分享。。。。。。。:)
fpga_wuhan
发表于 2017-4-22 09:42:02
前进位加法器CLA及其FPGA实现