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

超前进位加法器

https://www.nowcoder.com/practice/c4c6afdab9ce45a3a2279a98391686ca

`timescale 1ns/1ns
//g = a&b,p = a^b,ci = gi-1 i ci-1 & pi-1
module huawei8//四位超前进位加法器
(
	input wire [3:0]A,
	input wire [3:0]B,
	output wire [4:0]OUT
);

//*************code***********//
wire [4:1] c_i;
wire[4:0] co;
wire [3:0] sum;
wire [3:0] g;
wire [3:0] p;
assign co = {c_i,1'b0};
genvar i;
generate
	for(i = 0;i<4;i=i+1)
	begin:add_multi
		Add1 add_inst(
			.a(A[i]),
			.b(B[i]),
			.C_in(co[i]),
			.f(sum[i]),
			. g(g[i]),
			. p(p[i])
		);
	end
endgenerate
CLA_4 CLA_4_INST(
		.P       (p),
		.G       (g),
		.C_in    (co[0]),
		.Ci      (c_i),
		. Gm     (),
		. Pm()
	);
//*************code***********//
assign OUT = {c_i[4],sum};
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






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]&(G[0]|P[0]&C_in);
	assign Ci[3] = G[2]|P[2]&(G[1]|P[1]&(G[0]|P[0]&C_in));
	assign Ci[4] = G[3]|P[3]&(G[2]|P[2]&(G[1]|P[1]&(G[0]|P[0]&C_in)));

endmodule

#超前进位加法器#
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-07 12:04
毕业生招你惹你了,问一个发薪日来一句别看网上乱七八糟的你看哪个工作没有固定发薪日扭头就取消了面试就问了一句公司都是这个态度吗还搞上人身攻击了...
程序员小白条:呃呃呃,都还没面试,我都不会问这么细,何况通不通过,去不去都另说,你没实力和学历的话,在外面就这样,说实话没直接已读不回就不错了,浪费时间基本上
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-04 14:35
点赞 评论 收藏
分享
Yki_:你要算时间成本呀,研究生两三年,博士三四年,加起来就五六年了,如果你本科去腾讯干五年,多领五年的年薪,加上公司内涨薪,可能到时候十五年总薪资也跟博士差不多
点赞 评论 收藏
分享
牛客83700679...:简历抄别人的,然后再投,有反馈就是简历不行,没反馈就是学历不行,多投多改只要技术不差机会总会有的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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