【Verilog】进位选择加法器-创新互联

假设已经有16位的加法器add16,设计一个32位加法器。 一、原始加法器

用两个16位的加法器连在一起,将第一个加法器的进位输出作为第二个加法器的进位输入。

创新互联坚持“要么做到,要么别承诺”的工作理念,服务领域包括:做网站、成都网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的五寨网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!1.1 框图

在这里插入图片描述

1.2代码
module top_module(
	input [31:0] a,
	input [31:0] b,
	output [31:0] sum
	);

wire [15:0] a_1,a_2;
wire [15:0] b_1,b_2;
wire [15:0] sum_1,sum_2;
wire cin_1,cout_1,cin_2,cout_2;
assign cin_1 = 0;
assign a_1 = a [15:0];
assign a_2 = a[31:16];
assign b_1 = b[15:0];
assign b_2 = b[31:16];
assign sum = {sum_2[15:0],sum_1[15:0]};
add16 u_add16_1(.a(a_1),.b(b_1),.sum(sum_1),.cin(cin_1),.cout(cout_1));
add16 u_add16_2(.a(a_2),.b(b_2),.sum(sum_2),.cin(cout_1));
endmodule
1.3 不足

加法器计算进位的延迟(在最坏的情况下,从进位开始)相当慢,并且在第一级加法器完成之前,第二级加法器无法开始计算其进位,这会使加法器变慢。

二、32位进位选择加法器

由三个16位加法器组成,一个负责低16位的加法计算。另外两个对高16位进行计算,一个假设进位=0,一个假设进位=1,,然后使用快速2-1多路复用器,用第一个16位加法器的cout对高位的加法器进行选择。

2.1框图

在这里插入图片描述

2.2 代码
module top_module(
	input [31:0]a,
	input [31:0]b,
	output [31:0]sum
	);

wire [15:0] a_1,a_2;
wire [15:0] b_1,b_2;
wire cin_1,cin_2,cin_3;
wire cout_1,cout_2,cout_3;
wire [15:0] sum_1,sum_2,sum_3;
assign a_1 = a[15:0];
assign a_2 = a[31:16];
assign b_1 = b[15:0];
assign b_2 = b[31:16];
assign sum[15:0] = sum_1;
assign cin_1 = 1'b0 ;
assign cin_2 = 1'b0 ;
assign cin_3 = 1'b1 ;

assign sum[31:16]= cout_1 ? sum_3:sum_2;
add16 u1_add16(
	.a(a_1),
	.b(b_1),
	.cin(cin_1),
	.sum(sum_1),
	.cout(cout_1)
	);
add16 u2_add16(
	.a(a_2),
	.b(b_2),
	.cin(cin_2),
	.sum(sum_2),
	.cout(cout_2)
	);
add16 u3_add16(
	.a(a_2),
	.b(b_2),
	.cin(cin_3),
	.sum(sum_3),
	.cout(cout_3)
	);

endmodule

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前标题:【Verilog】进位选择加法器-创新互联
标题网址:http://myzitong.com/article/cshcdi.html