当前位置:网站首页>加法器—笔记
加法器—笔记
2022-06-28 03:08:00 【江南小作坊】
加法器
- 加法器是完成加法功能的单元,它有两个或三个数据输入端口和两个输出端口。
- 针对二进制的加法运算,如
0+0=0,0+1=1,1+1=0,进位为1。 - 根据输入端口的个数不同,加法器分为半加器和全加器。
半加器
- 两个输入端口,加数与被加数;两个输出端口,进位和结果。
- 常见符号

- 逻辑表达式 F = A ⋅ B ˉ + B ⋅ A ˉ = A ⊕ B F=A\cdot\bar{B}+B\cdot\bar{A}=A\oplus B F=A⋅Bˉ+B⋅Aˉ=A⊕B C o u n t = A ⋅ B Count=A\cdot B Count=A⋅B
- 对应真值表

- 可以发现, F F F与 A . B A.B A.B的关系是异或门, C o u n t Count Count与 A . B A.B A.B的关系是与门。因此一个半加器可以用一个异或门与一个与门构成。

- Verilog描述
module half_adder( input A, input B, output F, output Cout ); assign F = A ^ B; assign Cout = A & B; endmodule - RTL视图

全加器
在半加器的基础上,考虑低位运算的进位,因此全加器有三个输入端口。

逻辑表达式 F = A ⊕ B ⊕ C i n F=A\oplus B\oplus Cin F=A⊕B⊕Cin C o u t = A ⋅ B + C i n ( A ⊕ B ) Cout = A\cdot B+Cin(A\oplus B) Cout=A⋅B+Cin(A⊕B)
对应的真值表

Verilog语法
module full_adder( input A, input B, input Cin, output F, output Cout ); assign F = A^B^Cin; assign Cout = A&B|(Cin&(A^B)); endmoduleRTL视图

另外一种实现全加器,利用两个半加器实现

由于全加器考虑了低位运算的进位,由此我们可以使用级联多个全加器来轻松实现多位数据的加法,如8位数据

采用这种级联方式也叫行波进位加法器,如有进位,就像波纹一样从低位传至高位。这种加法器,由于每一个全加器都需要等待它的前一级全加器的进位输出才能完成计算,因此耗时长、效率低。为了提升加法的时间效率,人们引入了进位选择加法器和超前进位加法器。
HDLBits上面有个有关加法器题目:给出一个16位的加法器add16,设计一个32位加法器。

这个16位加法器,可以通过行波进位的级联方式构成,其内部结构可以先不纠结,就如何构成32位加法器进行理解。
Verilog 实现
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, cin_2, cout_1; // 注意,这里可以看到下面那个进位是没有输出的,所以,可以不定义。 // 将线与端口数据连接起来 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,sum_1}; // 调用add16模块 add16 add16_inst_1(.a(a_1),.b(b_1),.cin(cin_1),.cout(cout_1)); add16 add16_inst_2(.a(a_2),.b(b_2),.cin(cin_2)); endmodule前面谈到了,对于多位总线数据的加法,如果使用行波进位,具有很长的进位链和关键途经,耗时长,效率低。因此去引进基于行波进位衍生的几种加法器。
进位选择加法器
- 已经学过多路选择器,是否可以加入多路选择器来改善行波进位的效率问题呢?还是以上述为例,给出一个16位的加法器add16,设计一个32位加法器。
- 用进位选择的方式,框图如下

- 使用3个16位加法器:构建两个高16位加法器,一个进位给0,一个进位给1。通过低16位加法器的进位信号去选择输出哪个加法器的值。
- Verilog 实现

- 仿真结果

- 优缺点:
- 高位与低位可以同时运算,降低耗时;
- 电路面积大(如上图,多用一路加法器跟选择器);
边栏推荐
- Is Guotai Junan Securities reliable? Is it safe to open a securities account?
- django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3
- 力扣每日一题-第29天-575.分糖果
- 资源管理、高可用与自动化(下)
- INFO:  HHH000397:  Using…
- crond BAD FILE MODE /etc/cron. d
- 数据库乱码问题
- 音频 scipy 中 spectrogram 的运作机制
- 可扩展数据库(下)
- Learning - useful resources
猜你喜欢
随机推荐
Set drop-down options on Excel files
多线程与高并发五:等待队列及Executor和线程池详解(重点)
用于 C# 的 SQL 基本语法总结
matlab习题 —— 数据的基本处理
Li Kou daily question - day 29 -1491 Average wage after removing minimum wage and maximum wage
如何修改SE38编辑器主题
Typescript union type
猴子都会用的圆形滑动自动吸附UI工具
Learning - useful resources
WPF 下的自定义控件以及 Grid 中控件的自适应
TypeError: 'module&#03…
JVM一:JVM入门以及Class文件认识
解析STEAM教育框架下未来教师研究能力
Introduction to kubernetes resource object and common commands
kubernetes资源对象介绍及常用命令
Win 10出现bitlocke恢复,蓝屏错误代码0x1600007e
荣耀v8 真机调试时不显示 Logcat 日志的解决办法
数据库系列之MySQL中的分页查询优化
云应用、服务的“5层”架构
从遇见大咖到成为大咖,昇腾AI开发者创享日给开发者带来无限可能








