题解 | #超前进位加法器#
超前进位加法器
https://www.nowcoder.com/practice/c4c6afdab9ce45a3a2279a98391686ca
`timescale 1ns/1ns module huawei8//四位超前进位加法器 ( input wire [3:0]A, input wire [3:0]B, output wire [4:0]OUT ); //*************code***********// wire [3:0] G, P; wire G_blk, P_blk; // 块产生与块传播 wire [4:0] C; assign C[0] = 1'b0; CLA_4 CLA(P, G, C[0], C[3:0], G_blk, P_blk); assign OUT[4] = G_blk | P_blk&C[0]; genvar i; generate begin:BLK for(i=0; i<=3; i=i+1) Add1 ADDER(A[i], B[i], C[i], OUT[i], G[i], P[i]); end endgenerate //*************code***********// endmodule //////////////下面是两个子模块//////// module Add1 ( input a, input b, input C_in, output f, output g, output p ); assign g = a&b; assign p = a|b; assign f = a^b^C_in; endmodule module CLA_4( input [3:0]P, input [3:0]G, input C_in, output [4:1]Ci, output Gm, output Pm ); assign Ci = { //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_in, G[2] | P[2]&G[1] | P[2]&P[1]&G[0] | P[2]&P[1]&P[0]&C_in, G[1] | P[1]&G[0] | P[1]&P[0]&C_in, G[0] | C_in&P[0], C_in }; assign Pm = P[3]&P[2]&P[1]&P[0]; assign Gm = G[3] | P[3]&G[2] | P[3]&P[2]&G[1] | P[3]&P[2]&P[1]&G[0]; endmodule