题解 | #超前进位加法器#
超前进位加法器
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

查看24道真题和解析
曼迪匹艾公司福利 135人发布