Verilog学习之路(7)— 数字加法器

Verilog学习之路(7)— 数字加法器

一、前言

数字加法器是一种较为常见的逻辑运算器件,被广泛用于计算机、通信和多媒体数字集成电路中。广义发加法器包括加法器和减法器,在实际系统中加法器的输入信号通常采用的是补码形式,因此就电路结构而言,加法器和减法电路是一样的,只不过输入信号采用的是补码输入。

二、全加器

如果运算考虑了来自低位的进位,那么该运算就为全加运算,实现全加运算的电路称为全加器。2输入1bit信号全加器的真值表如下所示, 其中A、B是两个加数,CI是来自低位的进位,SUM是相加的和,CO是向高位的进位。

ABCISUMCO
00000
00110
01010
01101
10010
10101
11001
11111

通过真值表结合卡诺图我们可以化简得到逻辑表达式为如下所示

	SUM = A⊕B⊕CI
	CO  = AB+(A⊕B)CI

我们则可以得到与之对应的电路图如下所示
在这里插入图片描述
在verilog中使用连续赋值语句实现如下所示

module fulladder(SUM, CO, A, B, CI);
	input A, B, CI;
	output SUM, CO;
	assign SUM = A^B^CI;
	assign CO = (A&B)|((A^B)&CI);
endmodule

另外还可以直接使用行为级描述方法实现

module fulladder(SUM, CO, A, B, CI);
	input A, B, CI;
	output SUM, CO;
	assign {CO, SUM} = A+B+CI;
endmodule

三、超前进位加法器

超前进位加法器是一种高速加法器,每级进位由附加的组合电路产生,高位的运算不需等待低位运算完成,因此可提供运算速度。如下为超前进位加法器的设计原理,来自《数字电子技术基础(第6版)》
在这里插入图片描述
然后我们可以编写一个4位超前进位加法器如下所示

module four_bits_fast_addr(sum, cout, a, b, cin);
	input	[3:0]	a, b;
	input 		 	cin;
	output 	[3:0] 	sum;
	output		 	cout;
	wire 	[4:0]	g,p,c;

	assign c[0] = cin;
	assign p = a | b;
	assign g = a & b;
	assign c[1] = g[0] | (p[0] & c[0]);
	assign c[2] = g[1] | (p[1] & (g[0] | (p[0] & c[0])));
	assign c[3] = g[2] | (p[2] & (g[1] | (p[1] & (g[0] | (p[0] & c[0])))));
	assign c[4] = g[3] | (p[3] & (g[2] | (p[2] & (g[1] | (p[1] & (g[0] | (p[0] & c[0])))))));	 

	assign sum = p ^ c[3:0];
	assign cout = c[4];
endmodule

综合后的电路如图所示
在这里插入图片描述
将每一位分拆后如下所示
在这里插入图片描述

四、附录

上一篇:Verilog学习之路(6)— 组合电路的设计
下一篇:Verilog学习之路(8)— 时序电路的设计

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值