先谈谈超前进位加法器设计的初衷。
我们从数电书学到的最基本的加法器的结构是下图这样的:
从图中很好理解加法器的组成。
一位的加法器直接卡诺图既可以画出来。
但是这样的结构有什么缺点?最直接的就是第4号全加器要输出计算结果至少要等到第3号全加器把进位信息传过来。那如果级数很高会出现组合逻辑延时过长的情况。
下面这篇文章很详细的分析了门级延时的情况。
https://www.jianshu.com
其实问题的关键在于如何解决这个等待进位信息的问题。我们可以想可不可以不等后级把进位算完再传过来,我们直接通过输入的数据把这个进位直接算出来发给每一级不就好了。
我们看看怎么实现这样的想法.
简单的1级加法器的进位信号计算的方式如下所示:
那4级的加法器进位信息可以这样表示:

//一位加法器
module Add1
(input a,input b,input C_in,output f,output g,output p);
assign f=a^b^C_in;
assign g=a&b;
assign p=a|b;
endmodule
//4位CLA部件
module CLA_4(input [3:0]P,input [3:0]G,input C_in,output [4:1]Ci,output Gm,output Pm);
assign Ci[1]=G[0]|P[0]&C_in;
assign Ci[2]=G[1]|P[1]&G[0]|P[1]&P[0]&C_in;
assign Ci[3]=G[2]|P[2]&G[1]|P[2]&P[1]&G[0]|P[2]&P[1]&P[0]&C_in;
assign Ci[4]=G[3]|P[3]&G[2]|P[3]&P[2]&G[1]|P[3]&P[2]&P[1]&G[0]|P[3]&P[2]&P[1]&P[0]&C_in;assign Gm=G[3]|P[3]&G[2]|P[3]&P[2]&G[1]|P[3]&P[2]&P[1]&G[0];
assign Pm=P[3]&P[2]&P[1]&P[0];
endmodule

上面是根据公式写出来的1位加法器和进位计算模块。
但是貌似与传统的加法器不太一样,这里的P和G就是传播信号和生成信号。

总体的的4位超前进位加法器如下图所示:

//四位超前进位加法器
module Add4_head
(input [3:0]A,input [3:0]B,input C_in,output [3:0]F,output Gm,output Pm,output C_out
);wire [3:0] G;wire [3:0] P;wire [4:1] C;Add1 u1(   .a(A[0]),.b(B[0]),.C_in(C_in),.f(F[0]),.g(G[0]),.p(P[0]));Add1 u2(  .a(A[1]),.b(B[1]),.C_in(C[1]),.f(F[1]),.g(G[1]),.p(P[1]));Add1 u3(  .a(A[2]),.b(B[2]),.C_in(C[2]),.f(F[2]),.g(G[2]),.p(P[2]));Add1 u4(  .a(A[3]),.b(B[3]),.C_in(C[3]),.f(F[3]),.g(G[3]),.p(P[3]));CLA_4 uut(.P(P),.G(G),.C_in(C_in),.Ci(C),.Gm(Gm),.Pm(Pm));assign C_out=C[4];endmodule

新的问题来了,4位的好解决,但是16位的,这样直接算进位太复杂了。有没有什么好的办法。
注意到我们这里的4位的加法器把Pm,Gm也引出来了。我们可不可以仿照类似4位的加法器,把1个4位的加法器当成之前的1位加法器,同样是将Pm,Gm这两个用CLA计算进位信息即可。

 //16位module Add16_head(input [15:0]A,input [15:0]B,input C_in,output [15:0] F,output Gm,output Pm,output C_out);wire [3:0]G;wire [3:0]P;wire [4:1]C;
Add4_head A0(.A(A[3:0]),.B(B[3:0]),.C_in(C_in),.F(F[3:0]),.Gm(G[0]),.Pm(P[0]));Add4_head A1(.A(A[7:4]),.B(B[7:4]),.C_in(C[1]),.F(F[7:4]),.Gm(G[1]),.Pm(P[1]));Add4_head A3(.A(A[11:8]),.B(B[11:8]),.C_in(C[2]),.F(F[11:8]),.Gm(G[2]),.Pm(P[2]));Add4_head A4(.A(A[15:12]),.B(B[15:12]),.C_in(C[3]),.F(F[15:12]),.Gm(G[3]),.Pm(P[3]));CLA_4 AAt(.P(P),.G(G),.C_in(C_in),.Ci(C),.Gm(Gm),.Pm(Pm));assign C_out=C[4];endmodule

所以还是原来的套路。
对于一些比较奇葩的位数,我们可以通过级联4位和16位的加法器组合起来用,
比如24位的可以这样做:

//24位加法
module Add24_head
(input [23:0]A,input [23:0]B,input C_in,output [23:0]Result,output C_out
);
wire [3:0]G;wire [3:0]P;
wire [2:1]C;
Add16_head add16_11
(.A(A[15:0]),.B(B[15:0]),.C_in(C_in),.F(Result[15:0]),.C_out(C[1]));
Add4_head add4_11
(.A(A[19:16]),.B(B[19:16]),.C_in(C[1]),.F(Result[19:16]),.C_out(C[2])
);
Add4_head add4_12
(.A(A[23:20]),.B(B[23:20]),.C_in(C[2]),.F(Result[23:20]),.C_out(C_out)
);endmodule

对于32位的除了级联两个16位的,更优化的是可以参照计算两位加法器的进位运算

 //32位加法
module Add32_head
(input [31:0]A,input [31:0]B,input C_in,output [31:0]Result,output C_out
);
wire [3:0]G;wire [3:0]P;
assign G[3:2]=2'b00;
assign P[3:2]=2'b00;
Add16_head add16_1
(.A(A[15:0]),.B(B[15:0]),.C_in(C_in),.F(Result[15:0]),.Gm(G[0]),.Pm(P[0]));wire C_16;Add16_head add16_2
(.A(A[31:16]),.B(B[31:16]),.C_in(C_16),.F(Result[31:16]),.Gm(G[1]),.Pm(P[1]));assign C_16=G[0]|P[0]&C_in;assign C_out=G[1]|P[1]&G[0]|P[1]&P[0]&C_in;
endmodule

实际上依然运用的思想还是通过预算出进位信息来达到减少延时的功能。

超前进位加法器(较为详细讲解)相关推荐

  1. 超前进位加法器原理与递推式超详细推导+verilog实现与测试

    当记忆的线缠绕过往支离破碎,是慌乱占据了心扉.----<寂寞沙洲冷> 超前进位加法器原理 1. 一位二进制的加法 首先考虑两个1位二进制相加 a+b,不考虑上一级的进位,0和1简单相加,即 ...

  2. 超前进位加法器(附Verilog代码)

    超前进位加法器: 普通全加器(行波进位加法器)是单比特全加器的级联,高位需要低位的进位位,故位宽增大时,加法的组合逻辑不断增大,超前进位加法器解决了这一问题. 优点:不需要等待低位的进位.直接计算就可 ...

  3. Verilog中的加法器(半加器,全加器,串行、超前进位加法器)

    加法器为半加器和全加器: 半加器:不考虑低位向高位的进位.2输入,2输出. 全加器:考虑低位向高位的进位.3输入(多了进位输入C),2输出. Verilog代码如下: module half_add( ...

  4. 原码一位乘法器设计_数字IC校招基础知识点复习(七)——超前进位加法器、Wallace树、Booth乘法器...

    1.超前进位加法器 看了一些面经,提到会让你用基础的门搭加法器,因此首先得熟悉半加器,全加器等最基础的加法器才能理解之后的超前进位加法器,树型加法器等复杂的加法器. 半加器的输入为a,b,输出为结果s ...

  5. 计算机组成原理超前进位加法器原理,计算机组成原理课程设计—超前进位加法器的设计.doc...

    PAGE 沈阳航空航天大学 课 程 设 计 报 告 课程设计名称:计算机组成原理课程设计 课程设计题目:超前进位加法器的设计 院(系):计算机学院 专 业: 班 级: 学 号: 姓 名: 指导教师: ...

  6. 32位进位选择加法器_超前进位加法器amp;行波进位加法器

    超前进位加法器&行波进位加法器 八位超前进位加法器 原理 设计文件 综合电路 测试文件 仿真波形 八位行波进位加法器 原理 设计文件 测试文件 仿真波形 总结 八位超前进位加法器 原理 有学弟 ...

  7. 四位行波进位加法器_超前进位加法器amp;行波进位加法器

    超前进位加法器&行波进位加法器 八位超前进位加法器 原理 设计文件 综合电路 测试文件 仿真波形 八位行波进位加法器 原理 设计文件 测试文件 仿真波形 总结 八位超前进位加法器 原理 有学弟 ...

  8. 四位先行进位电路逻辑表达式_四位超前进位加法器

    1 1. 课程设计名称 四位超前进位加法器 2. 课程设计内容 设计一个四位加法器, 要求要有超前进位, 减小输出的延迟, 采用 0.13um 工艺设计 . 3. 课程设计目的 训练学生综合运用学过的 ...

  9. 4位先行进位加法器_行波进位/超前进位加法器详解

    行波进位加法器是串行执行的,其高位的运算要依赖低位的进位,所以当输入数据的位数较多时,会形成很大的延迟并可能成为芯片的关键路径. 采用超前进位加法器(也叫先行进位加法器)可以有效减小这种延迟.下面介绍 ...

最新文章

  1. Java反编译Jar包和Android APK(类似.NET Reflector)
  2. IDE之VS:利用 Visual Studio中的IDE配置python语言进行编程
  3. MySQL使用SHOW PROFILE进行SQL分析
  4. JUC队列-ArrayBlockingQueue(一)
  5. 《Inside XAML》翻译半成品
  6. Linux 进程管理数据结构
  7. CSS单位之战:EM与。 REMs ...打架! ?
  8. 手把手教你如何使用Python执行js代码
  9. 汇编:汇编语言实现冒泡排序(loop指令实现)
  10. 单链表头插法和尾插法
  11. Web***系列教程之跨站脚本***和防范技巧详解
  12. paip.gui控件form窗体的原理实现以及easyui的新建以及编辑实现
  13. Java后端开发笔试题
  14. 解决windows 10电脑插入耳机无声音的问题
  15. rust连接不上社区服务器 显示超过时间,rust链接服务器超时
  16. phpStudy2018中Apache启动失败
  17. 台式计算机的打印机端口,打印机端口设置,高手教你如何搞定电脑打印机端口设置...
  18. 知识图谱:R2RDF转换之D2RQ
  19. java这一年第几天_java 输入年月日,计算该日是这一年的第几天
  20. Tracup丨产品管理与项目管理的区别

热门文章

  1. win7计算机管理对话框功能,win7如何打开运行对话框_win7电脑系统运行窗口怎么打开...
  2. 日报2022-05-02
  3. 【内网—内网转发】——代理转发_ew(Earthworm)代理转发
  4. python网络爬虫之使用scrapy爬取图片
  5. 5-DOF机械臂课程设计(二)之视觉引导
  6. 大学物理——波动光学
  7. java生成二维码,读取(解析)二维码图片
  8. python循环构建多个类_Python高级特性:Python迭代、生成器、列表生成式
  9. 嵌入式软件测试的小结
  10. 中级java面试题_最新中级Java面试题及答案