题解 | #超前进位加法器#
超前进位加法器
http://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
);
wire [3:0] P;
wire [3:0] G;
reg [4:0] temp;
assign P=A^B;
assign G=A&B;
reg[4:0] C;
//*************code***********//
integer i;
always@(P or G) begin
C[0]=G[0] ;
C[1]=G[1] || P[1]&G[0];
C[2]=G[2] || P[2]&G[1] || P[2]&P[1]&G[0];
C[3]=G[3] || P[3]&G[2] || P[3]&P[2]&G[1] || P[3]&P[2]&P[1]&G[0];
temp[0]=P[0];
temp[4]=C[3];
for(i=1;i<4;i=i+1) begin
temp[i] <= P[i]^C[i-1];
end
end
assign OUT=temp;
//*************code***********//
endmodule
module huawei8//四位超前进位加法器
(
input wire [3:0]A,
input wire [3:0]B,
output wire [4:0]OUT
);
wire [3:0] P;
wire [3:0] G;
reg [4:0] temp;
assign P=A^B;
assign G=A&B;
reg[4:0] C;
//*************code***********//
integer i;
always@(P or G) begin
C[0]=G[0] ;
C[1]=G[1] || P[1]&G[0];
C[2]=G[2] || P[2]&G[1] || P[2]&P[1]&G[0];
C[3]=G[3] || P[3]&G[2] || P[3]&P[2]&G[1] || P[3]&P[2]&P[1]&G[0];
temp[0]=P[0];
temp[4]=C[3];
for(i=1;i<4;i=i+1) begin
temp[i] <= P[i]^C[i-1];
end
end
assign OUT=temp;
//*************code***********//
endmodule