Verilog 4位总和

时间:2012-05-02 08:35:32

标签: verilog

有人知道这里的PG和GG变量是什么:

module sum(S, Cout,PG,GG,A,B,Cin);

wire [3:0] G,P,C;

output [3:0] S;
output Cout,PG,GG;
input [3:0] A,B;
input Cin;

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[0] = P[0] ^ C[0];
assign S[1] = P[1] ^ C[1];
assign S[2] = P[2] ^ C[2];
assign S[3] = P[3] ^ C[3];
endmodule

2 个答案:

答案 0 :(得分:3)

您的代码是一个四位进位超前加法器单元。 PG和GG可以是Group Propagate和Group Generate。 PG和GG可以被给予另一个CLA加法器单元以组合这些单元以形成更高位的加法器。它们是

assign PG = P[3] & P[2] & P[1] & P[0];

assign GG = G[3] | P[3] & G[2] | P[3] & P[2] | G[1] | P[3] & P[2] & P[1] & G[0];

这里有更多细节。 http://en.wikipedia.org/wiki/Lookahead_Carry_Unit#16-bit_adder

答案 1 :(得分:0)

GGPGoutput个端口,这些端口不是由您显示的代码驱动的。我想不出他们的用途。除非它们由此模块之外的分层说明符驱动(这是可能的,但不常见),否则它们的值将始终未知(x)。

也许原始设计师打算使用这些输出,然后忘记删除它们。

相关问题