二、基于verilog的由半加器构成的16位全加器设计

 

  • 1、设计分析

          利用半加器设计一个16位全加器。

         16位全加器由四个4位全加器构成,4位全加器由四个1位全加器构成,1位全加器由2个半加器和1个与门构成。

  • 2、架构设计

         在顶层设计中,采用4个4位全加器构成。

          

           在设计4位全加器时,采用4个1位全加器构成。

          

            在设计1位全加器时,采用2个半加器和1个与门构成。

           

  • 3、代码编写

                 首先设计顶层模块:例化了4个4位的全加器。

module adder16(

				input		wire	[15:0]	    a,
				input		wire	[15:0]	    b,
				input		wire				cin,
				output	    wire	[15:0]	    sum,
				output	    wire				cout
		);
		
		wire	c1;    //第1个4位全加器的进位输出,需要把这个值给下一个4位全加器的输入
		wire	c2;    //第2个4位全加器的进位输出,需要把这个值给下一个4位全加器的输入
		wire	c3;    //第3个4位全加器的进位输出,需要把这个值给下一个4位全加器的输入

	adder4 adder4_inst1(
				.a				(a[3:0]),
				.b				(b[3:0]),
				.cin			(cin),
				.sum			(sum[3:0]),
				.cout			(c1)
			);
			
	adder4 adder4_inst2(
				.a				(a[7:4]),
				.b				(b[7:4]),
				.cin			(c1),
				.sum			(sum[7:4]),
				.cout			(c2)
			);
			
	adder4 adder4_inst3(
				.a				(a[11:8]),
				.b				(b[11:8]),
				.cin			(c2),
				.sum			(sum[11:8]),
				.cout			(c3)
			);
			
	adder4 adder4_inst4(
				.a				(a[15:12]),
				.b				(b[15:12]),
				.cin			(c3),
				.sum			(sum[15:12]),
				.cout			(cout)
			);

endmodule

                   设计4位全加器模块,例化4个1位全加器:

module adder4(

				input		wire		[3:0]		a,
				input		wire		[3:0]		b,
				input		wire					cin,
				output	    wire		[3:0]		sum,
				output	    wire					cout

			);
			
	wire c1;
	wire c2;
	wire c3;

	adder1 adder1_inst1(
	
				.a(a[0]),
				.b(b[0]),
				.c(cin),
				.sum(sum[0]),
				.cout(c1)
	);
	
	adder1 adder1_inst2(
	
				.a(a[1]),
				.b(b[1]),
				.c(c1),
				.sum(sum[1]),
				.cout(c2)
	);
	
	adder1 adder1_inst3(
	
				.a(a[2]),
				.b(b[2]),
				.c(c2),
				.sum(sum[2]),
				.cout(c3)
	);
	
	adder1 adder1_inst4(
	
				.a(a[3]),
				.b(b[3]),
				.c(c3),
				.sum(sum[3]),
				.cout(cout)
	);

endmodule

            接下来是设计1位全加器模块(由于这里采用半加器构成16位加法器,所以1位全加器在这里需要由半加器构成,而不是直接使 用),例化2个半加器和1个与门:

module adder1(
	
				input		wire	a,
				input		wire	b,
				input 	    wire	c,
				output	    wire	sum,
				output	    wire	cout
	);
	
	wire temp;
	wire c1, c2;
	
	adder_half adder_half_inst1(

					.a(a),
					.b(b),
					.sum(temp),
					.cout(c1)

			);
			
	adder_half adder_half_inst2(

					.a(temp),
					.b(c),
					.sum(sum),
					.cout(c2)

			);
			
	
	or_gate or_gate_inst(

					.a(c1),
					.b(c2),
					.y(cout)
		);

endmodule

      编写半加器模块和与门模块:

//半加器模块
module adder_half(

					input		wire	a,
					input		wire	b,
					output	    reg	sum,
					output	    reg	cout

			);

	always @(*)
	begin
		sum = a ^ b;
		cout = a & b;
	end
	
endmodule


//与门模块


module	or_gate(

					input wire a,
					input	wire	b,
					output	reg y
		);
	
	always @(*)
		y = a | b;

endmodule

大家如果需要下载上述代码,可点击链接https://download.csdn.net/download/qq_31799983/10566852进行下载,供大家参考学习使用。

  • 8
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值