-1

有人知道这里的 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
4

2 回答 2

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

于 2012-05-02T12:35:02.590 回答
0

GG并且PGoutput不是由您显示的代码驱动的端口。我想不出它们的用途。除非它们由该模块之外的分层说明符驱动(这是可能的,但不寻常),它们的值将始终是未知的 (x)。

也许最初的设计者打算使用这些输出,然后忘记删除它们。

于 2012-05-02T12:24:40.870 回答