2012-05-02 4 views
-1

Кто-нибудь знает, что это для PG и GG переменных здесь:Verilog 4 бита просуммировать

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 

ответ

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

0

GG и PG являются output порты, которые не ведомые кодом, который вы показали. Я не могу придумать их для использования. Если они не управляются иерархическим спецификатором вне этого модуля (что возможно, но необычно), их значение всегда будет неизвестно (x).

Возможно, первоначальный дизайнер намеревался использовать эти выходы, а затем забыл удалить их.

Смежные вопросы