我刚刚了解到CLA加法器对获得总和有点困惑。我看到有两个版本的p,p = a或b,p = a xor b。
如果我模拟此代码,它将给出正确的结果:
module CLA_4bit(
output [3:0] S,
output Cout,
input [3:0] A,B,
input Cin
);
wire [3:0] G,P,C;
assign G = A & B;
assign P = A ^ B;
assign C[0] = Cin;
assign C[1] = G[0] | (P[0] & C[0]);
assign C[2] = G[1] | (P[1] & G[0]) | (P[1] & P[0] & C[0]);
assign C[3] = G[2] | (P[2] & G[1]) | (P[2] & P[1] & G[0]) | (P[2] & P[1] & P[0] & C[0]);
assign Cout = 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[0]);
assign S = P ^ C;
endmodule
但是,如果我将P = A ^ B
更改为P = A | B
,则会给出错误的总和。要使代码与P = A | B
一起使用,需要对代码进行哪些更改?
答案 0 :(得分:1)
S
(P^C
)的公式对于使用P
操作计算的XOR
有效。您可能知道,OR
和XOR
操作之间真值表的唯一区别是两个位都是1
。这就是为什么如果您使用S
操作,OR
的公式应略有不同:
S = (P & (~G)) ^ C