题解 | #串行进位加法器#

串行进位加法器

https://www.nowcoder.com/practice/83c5850805004b6d8c48742f582f304a

//	
//	串行进位加法器,4位 进位加法器
`timescale 1ns/1ns
module add_4(
   input         [3:0]  A   ,
   input         [3:0]  B   ,
   input                Ci  , 

   output	wire [3:0]  S   ,
   output   wire        Co   
);

wire	[4:0]		cout;
assign	cout[0] = Ci;

genvar		i;
generate
	for(i = 0; i < 4; i = i+1)	begin: add_full_4
		add_full	u1_add_full(
		.A			(A[i]				),
		.B			(B[i]				),
		.Ci			(cout[i]			),
		.S			(S[i]				),
		.Co			(cout[i+1]			)
		);
end
endgenerate

assign	Co = cout[4];

endmodule

//	全加器
module	add_full(
input			A,
input			B,
input			Ci,

output	wire	S,
output	wire	Co
);
//	第一个,半加
wire		Si;
wire		Coi;
//	第二个,半加
wire		Coo;

add_half	u1_add_half(
.A			(A		),
.B			(B		),
.S			(Si		),	//	Si = A ^ B;
.C			(Coi	)	//	Coi = A & B;
);

add_half	u2_add_half(
.A			(Si		),
.B			(Ci		),
.S			(S		),	//	S 	= A ^ B ^ Ci;
.C			(Coo	)	//	Coo = (A ^ B) & Ci;
);

//	进位
assign		Co = Coo | Coi;

endmodule


//	半加器
module	add_half(
input			A,
input			B,

output	wire	S,
output	wire	C
);

assign			S = A^B;
assign			C = A&B; 

endmodule

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务