题解 | #超前进位加法器#

超前进位加法器

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
);
wire [3:0] P,G,F;
wire [4:1] Ci;
//*************code***********//
CLA_4 cla_4(.P(P),.G(G),.C_in(1'b0),.Ci(Ci),.Gm(),.Pm());
Add1 add1(.a(A[0]),.b(B[0]),.C_in(1'b0),.f(F[0]),.g(G[0]),.p(P[0]));
Add1 add2(.a(A[1]),.b(B[1]),.C_in(Ci[1]),.f(F[1]),.g(G[1]),.p(P[1]));
Add1 add3(.a(A[2]),.b(B[2]),.C_in(Ci[2]),.f(F[2]),.g(G[2]),.p(P[2]));
Add1 add4(.a(A[3]),.b(B[3]),.C_in(Ci[3]),.f(F[3]),.g(G[3]),.p(P[3]));
assign OUT ={Ci[4],F};
//*************code***********//
endmodule

//////////////下面是两个子模块////////

module Add1
(
		input a,
		input b,
		input C_in,
		output f,
		output g,
		output p
		);
assign f=a^b^C_in;
assign g=a&b;
assign p=a|b;
endmodule


//负责算进位Ci
module CLA_4(
		input [3:0]P,
		input [3:0]G,
		input C_in,
		output [4:1]Ci,
		output Gm,
		output Pm
	);

 assign Ci[1]=G[0]|(P[0]&C_in);	
 assign Ci[2]=G[1]|(P[1]&Ci[1]);
 assign Ci[3]=G[2]|(P[2]&Ci[2]);
 assign Ci[4]=G[3]|(P[3]&Ci[3]);
endmodule

全部评论

相关推荐

牛客41406533...:回答他在课上学,一辈子待在学校的老教授用三十年前的祖传PPT一字一句的讲解,使用谭浩强红皮书作为教材在devc++里面敲出a+++++a的瞬间爆出114514个编译错误来学这样才显得专业
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务