先谈谈超前进位加法器设计的初衷。
我们从数电书学到的最基本的加法器的结构是下图这样的:
从图中很好理解加法器的组成。
一位的加法器直接卡诺图既可以画出来。
但是这样的结构有什么缺点?最直接的就是第4号全加器要输出计算结果至少要等到第3号全加器把进位信息传过来。那如果级数很高会出现组合逻辑延时过长的情况。
下面这篇文章很详细的分析了门级延时的情况。
https://www.jianshu.com
其实问题的关键在于如何解决这个等待进位信息的问题。我们可以想可不可以不等后级把进位算完再传过来,我们直接通过输入的数据把这个进位直接算出来发给每一级不就好了。
我们看看怎么实现这样的想法.
简单的1级加法器的进位信号计算的方式如下所示:
那4级的加法器进位信息可以这样表示:
//一位加法器
module Add1
(
input a,
input b,
input C_in,
output f,
output g,
output p
);
assign f=a^b^C_in;
assign g=a&b;
assign p=a|b;
endmodule
//4位CLA部件
module CLA_4(
input [3:0]P,
input [3:0]G,
input C_in,
output [4:1]Ci,
output Gm,
output Pm
);
assign Ci[1]=G[0]|P[0]&C_in;
assign Ci[2]=G[1]|P[1]&G[0]|P[1]&P[0]&C_in;
assign Ci[3]=G[2]|P[2]&G[1]|P[2]&P[1]&G[0]|P[2]&P[1]&P[0]&C_in;
assign Ci[4]=G[3]|P[3]&G[2]|P[3]&P[2]&G[1]|P[3]&P[2]&P[1]&G[0]|P[3]&P[2]&P[1]&P[0]&C_in;
assign Gm=G[3]|P[3]&G[2]|P[3]&P[2]&G[1]|P[3]&P[2]&P[1]&G[0];
assign Pm=P