繁体   English   中英

Verilog进位超前加法器传播混乱

[英]Verilog carry look ahead adder propagation confusion

我刚刚了解到CLA加法器对获取总和有些困惑。 我看到p有两个版本,p = a或b和p = a或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它将给出不正确的总和。 要使其与P = A | B一起使用,需要对代码进行什么更改P = A | B P = A | B

SP^C )的公式对于使用XOR运算计算的P有效。 您可能知道, ORXOR操作之间真值表的唯一区别是两个位均为1 这就是为什么使用OR运算时S的公式应该略有不同的原因:

S = (P & (~G)) ^ C

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM