题解 | #4bit超前进位加法器电路#

4bit超前进位加法器电路

https://www.nowcoder.com/practice/4d5b6dc4bb2848039da2ee40f9738363

`timescale 1ns/1ns

module lca_4(
	input		[3:0]       A_in  ,
	input	    [3:0]		B_in  ,
    input                   C_1   ,
 
 	output	 wire			CO    ,
	output   wire [3:0]	    S
);
wire [3:0]G;
wire [3:0]P;
    assign G[0] = A_in[0] & B_in[0];
	assign G[1] = A_in[1] & B_in[1];
	assign G[2] = A_in[2] & B_in[2];
	assign G[3] = A_in[3] & B_in[3];

	assign P[0] = A_in[0] ^ B_in[0];
	assign P[1] = A_in[1] ^ B_in[1];
	assign P[2] = A_in[2] ^ B_in[2];
	assign P[3] = A_in[3] ^ B_in[3];

wire [3:0] C;

	assign S[0] = P[0] ^ C_1;
	assign S[1] = P[1] ^ C[0];
	assign S[2] = P[2] ^ C[1];
	assign S[3] = P[3] ^ C[2];
	assign CO = C[3];

	assign C[0] = G[0] | P[0]&C_1;
	assign C[1] = G[1] | P[1]&C[0];
	assign C[2] = G[2] | P[2]&C[1];
	assign C[3] = G[3] | P[3]&C[2];
endmodule

这种写法是最基础的写法。

尝试用别的方法来写:

`timescale 1ns/1ns

module lca_4(
	input		[3:0]       A_in  ,
	input	    [3:0]		B_in  ,
    input                   C_1   ,
 
 	output	 wire			CO    ,
	output   wire [3:0]	    S
);
wire [3:0]G;
wire [3:0]P;
	genvar gi;
	generate
		for(gi=0;gi<4;gi=gi+1)begin:G_module
			assign G[gi]=A_in[gi]&B_in[gi];
		end
	endgenerate

	genvar pi;
	generate
		for(pi=0;pi<4;pi=pi+1)begin:P_module
			assign P[pi]=A_in[pi]^B_in[pi];
		end
	endgenerate

wire [3:0] C;

	assign S[0] = P[0] ^ C_1;
	assign S[1] = P[1] ^ C[0];
	assign S[2] = P[2] ^ C[1];
	assign S[3] = P[3] ^ C[2];
	assign CO = C[3];

	assign C[0] = G[0] | P[0]&C_1;
	assign C[1] = G[1] | P[1]&C[0];
	assign C[2] = G[2] | P[2]&C[1];
	assign C[3] = G[3] | P[3]&C[2];
endmodule

全部评论

相关推荐

06-25 16:53
门头沟学院 Java
人力小鱼姐:简历可以直接用飞书模板 模拟面试可以试试ai,现在好多都还是免费阶段 像Sugar云面、多面鹅都不错,主要看面试后自己能不能复盘出有效信息
为了找工作你花了哪些钱?
点赞 评论 收藏
分享
zYvv:双一流加大加粗再标红,然后广投。主要是获奖荣誉不够,建议开始不用追求大厂,去别的厂子刷下实习。
点赞 评论 收藏
分享
程序员小白条:你是沟通了900个,不是投了900份简历,你能投900份,意味着对面都要回复你900次,你早就找到实习了,没亮点就是这样的,别局限地区,时间投的也要早,现在都要7月了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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