目录

  • 一、原理
  • 二、Verilog实现及仿真
    • 1、1位超前进位加法器
    • 2、4位超前加法器
    • 3、16位超前进位加法器

在上篇文章,介绍了串行进位加法器: 数字电子技术基础(七):加法器
这种加法器在运算过程中,所花费的时间比较长。假设4位串行进位加法器,一共需要4个1位全加器。

如上图,s1的进位输入是s0的进位输出,相当于是等到第一个加法器运算完成,第二个加法器才开始工作,等到第二个加法器运算完成,第三个加法器才开始运算,一直等到第四个加法器运算完成。

假设每个加法器运算需要的时间为a,则s0的输出需要a;s1的输出需要2a;s2的输出需要3a;s3的输出需要4a;co的输出需要4a。
当等待4a的时间后,4位串行进位加法器才能输出正确的数据。

当位数更多的时候,需要花费的时间会更多,于是超前进位加法器出现了。

一、原理


上图为一位全加器的真值表。

我们假设这是n位加法器中的第 i 位相加。从表中我们可以得到 (CO)i 的逻辑表达式:

其中,我们令进位函数Gi = AiBi, 令进位传送函数 Pi = Ai + Bi

其中 (CI)i 为第i-1位的加法进位输出 (CI)i = (CO)i-1
我们通过看这个可以展开出以下公式

再从真值表推导出第i位 Si 的逻辑表达式

二、Verilog实现及仿真

1、1位超前进位加法器

/******  一位超前进位加法器   ********/module pre_1_adder(input                   ain,input                   bin,input                   cin,output              SO,output               Gi,output               Pi);assign Gi = ain & bin;assign Pi = ain | bin;assign SO = ain ^ bin ^ cin;endmodule

2、4位超前加法器

4位超前加法器可以用4个1位超前加法器并联而成

/*******     四位超前加法器    *******/module pre_4_adder(input         [3:0]       ain,input           [3:0]       bin,input                       cin,output          [3:0]       SO,output                       Pm,output                       Gm,output                       CO);wire            [4:1]    CI;wire            [3:0]    Pi;wire            [3:0]    Gi;pre_1_adder u0(.ain             (ain[0]),.bin               (bin[0]),.cin               (cin),.SO                   (SO[0]),.Gi                 (Gi[0]),.Pi                 (Pi[0]));
pre_1_adder u1(.ain             (ain[1]),.bin               (bin[1]),.cin               (CI[1]),.SO                 (SO[1]),.Gi                 (Gi[1]),.Pi                 (Pi[1]));
pre_1_adder u2(.ain             (ain[2]),.bin               (bin[2]),.cin               (CI[2]),.SO                 (SO[2]),.Gi                 (Gi[2]),.Pi                 (Pi[2]));
pre_1_adder u3(.ain             (ain[3]),.bin               (bin[3]),.cin               (CI[3]),.SO                 (SO[3]),.Gi                 (Gi[3]),.Pi                 (Pi[3]));CLA_4 uut(.P                   (Pi),.G                 (Gi),.cin               (cin),.Ci                   (CI),.Gm                    (Gm),.Pm                    (Pm));assign CO = CI[4];endmodule

其中的CLA_4为4位超前进位部件CLA 专门用来计算进位的


/************  4位超前进位部件CLA 专门用来计算进位的**********/
module CLA_4(input  [3:0]       P,input     [3:0]       G,input                 cin,output  [4:1]       Ci,output               Gm,output               Pm);assign Ci[1]=G[0]|P[0]&cin;assign Ci[2]=G[1]|P[1]&G[0]|P[1]&P[0]&cin;assign Ci[3]=G[2]|P[2]&G[1]|P[2]&P[1]&G[0]|P[2]&P[1]&P[0]&cin;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]&cin;assign Gm=G[3]|P[3]&G[2]|P[3]&P[2]&G[1]|P[3]&P[2]&P[1]&G[0];     // 可以从ci4,也就是最终进位输出CO得到,从ci4可以看出,// 整个进位输出由两个部分构成,G和P的函数,以及有cin的函数// 我们之前令与cin无关的项为Gi,与cin有关的为Pi。可以得到// 可以得到每四位的进位函数和进位传送函数assign Pm=P[3]&P[2]&P[1]&P[0];endmodule

从代码中可以看到,我们输出了Pm和Gm,这两个是什么意思呢?

我们再看看一位超前进位输出的Pi和Gi

其中,我们令进位函数Gi = AiBi, 令进位传送函数 Pi = Ai + Bi
这是一位超前进位加法的两个函数,那么我们写出四位的最终进位函数可以从ci4,也就是最终进位输出CO得到,从ci4可以看出,整个进位输出由两个部分构成,G和P的函数,以及有cin的函数,我们之前令与cin无关的项为Gi,与cin有关的为Pi。可以得到每四位的进位函数和进位传送函数


标号1就是Gm,标号2就是Pm
Gm=G[3]|P[3]&G[2]|P[3]&P[2]&G[1]|P[3]&P[2]&P[1]&G[0];
Pm=P[3]&P[2]&P[1]&P[0];

RTL视图

可以从图中看出,从输入到输出,4位超前加法器大概会延迟6个门电路的时间

3、16位超前进位加法器

16位超前进位加法器可以由四个4位超前进位加法器加上一个4位超前进位部件CLA构成


/*******     16位超前加法器    *******/module pre_16_adder(input  [15:0]      ain,input   [15:0]      bin,input                   cin,output  [15:0]      SO,output                   Gm,output                   Pm,output                   CO);wire        [3:0]           Gi;wire         [3:0]           Pi;wire         [4:1]           CI;pre_4_adder U0(.ain      (ain[3:0]),.bin     (bin[3:0]),.cin     (cin),.SO       (SO[3:0]),.Gm       (Gi[0]),.Pm     (Pi[0]));pre_4_adder U1(.ain        (ain[7:4]),.bin     (bin[7:4]),.cin     (CI[1]),.SO     (SO[7:4]),.Gm       (Gi[1]),.Pm     (Pi[1]));pre_4_adder U2(.ain        (ain[11:8]),.bin        (bin[11:8]),.cin        (CI[2]),.SO     (SO[11:8]),.Gm      (Gi[2]),.Pm     (Pi[2]));pre_4_adder U3(.ain        (ain[15:12]),.bin       (bin[15:12]),.cin       (CI[3]),.SO     (SO[15:12]),.Gm     (Gi[3]),.Pm     (Pi[3]));CLA_4 CLA_4(.P                 (Pi),.G                 (Gi),.cin               (cin),.Ci               (CI),.Gm                (Gm),.Pm                (Pm));assign CO=CI[4];endmodule

仿真文件

`timescale  1ns/1ps
`define clk_period 20module pre_16_adder_tb();reg  [15:0]      ain;reg [15:0]      bin;reg                 cin;wire    [15:0]      SO;wire                 Gi;wire                 Pi;wire                 CO;initial beginain = 16'b0001_1111_1010_0101;bin = 16'b1010_1010_1110_0110;cin = 0;#50 $stop;endpre_16_adder pre_16_adder(.ain                (ain),.bin              (bin),.cin              (cin),.Gm               (Gi),.Pm                (Pi),.SO                (SO),.CO                (CO));endmodule

RTL视图


可以从图中看出,从输入到输出,16位超前加法器大概会延迟11个门电路的时间

参考:
https://blog.csdn.net/JohnHe1994/article/details/79709711
https://blog.csdn.net/qq_26707507/article/details/106146619

数字电子技术基础(八):超前进位加法器相关推荐

  1. 山东大学继续教育计算机3,山东大学继续教育数字电子技术基础试题3及答案.doc...

    数字电子技术基础模拟卷 3 一 填空. 1 逻辑代数中,基本的运算关系是 与 . 或 和 非 . 2 十进制数27转换成二进制数为 11011 :转换成8421BCD码是 00011011 . 3 在 ...

  2. 数字电子技术基础第三版杨志忠_阎石数字电子技术基础第6版笔记和课后习题详解...

    阎石<数字电子技术基础>(第6版)笔记和课后习题(含考研真题)详解 第1章 数制和码制 1.1 复习笔记 本章作为<数字电子技术基础>的开篇章节,是数字电路学习的基础.本章介绍 ...

  3. 数字电子技术基础大作业---电子表、流水灯

    数字电子技术基础大作业 电子表.流水灯 一.电子表 1.1应用的元件 555.六片74LS160N.三片74LS26D.两片74LS04D.六个个D_HEX(十六进制输入的显示数码管).电阻.电容若干 ...

  4. (一)《数字电子技术基础》——引言

    目录 课程背景 数字电子技术的特点 数字电路的分类 课程背景 数字电子技术是电子信息类.电气工程类.自动控制类.机电类.计算机及其应用专业的一门专业技术基础课程.电子技术领域的两大支柱是模拟电子技术和 ...

  5. 《数字电子技术基础》6.4 时序逻辑电路——设计方法(FSM)有限状态机

    前言 <数字电子技术基础>第6.4节学习笔记,本人在编写Verilog时序逻辑代码时,关于这一部分的状态图需要好好学一下. 6.4.1 同步时序逻辑电路的设计方法 一般步骤 一.逻辑抽象, ...

  6. 《数字电子技术基础》4.4/6.5 组合逻辑/时序逻辑电路中的竞争-冒险

    前言 <数字电子技术基础>第4.4节和第6.5节 组合逻辑电路和时序逻辑电路中的竞争-冒险现象学习笔记 4.4 组合逻辑电路中的竞争-冒险 4.4.1 竞争-冒险现象及其成因 之前讨论组合 ...

  7. 数字电子技术基础知识点总结,包含习题!

    数电/数字电子技术基础全面知识点及习题总结(看这一篇就够了!!!)_数电知识点整理_徐二苗的博客-CSDN博客

  8. 《数字电子技术基础》5.1 触发器 概述

    前言 <数字电子技术基础>第5.1节学习笔记 <数字逻辑电路设计>第4.1节学习笔记 5.1 触发器 概述 数字电路分为组合逻辑电路和时序逻辑电路. 组合逻辑电路由门电路组成, ...

  9. 【数字电子技术基础】逻辑代数基本运算公式证明

    参考书目:<数字电子技术基础>第三版.侯建军.高等教育出版社 名称 公式1 公式2 0-1律 A⋅1=AA⋅0=0A\cdot 1=A \\ A\cdot 0=0A⋅1=AA⋅0=0 A+ ...

最新文章

  1. 美多商城之用户注册(展示用户注册页面)
  2. RabbitMQ入门-Routing直连模式
  3. python第二大奇数_python-2.7 – matplotlib,包含奇数个子图
  4. HDU1001 Easy h-index
  5. oracle10g 开机自启动
  6. 每日一题:leetcode191.位1的个数
  7. 使用IDEA创建Maven项目和Maven使用入门(配图详解)
  8. 清华大学大数据研究中心成立
  9. sqldataadapter.fill 索引超出了数组界限_小学生学习C++||第十五节 数组
  10. 连接oracle出现ORA-12514错误
  11. 计算机多媒体技术怎么考一建,一建考试视频
  12. The Learning route of GNN
  13. 【老生谈算法】matlab实现遗传算法优化源码——遗传算法
  14. PC机通过二层交换机连接三层交换机
  15. 未能启动apache服务器,教你apache服务无法启动一直失败怎么办
  16. 中国结构性心脏病年度报告2020发布会圆满召开!
  17. java计算机毕业设计银创科技有限公司人事信息系统源码+数据库+系统+lw文档+部署
  18. 前端项目添加自定义icont图标步骤
  19. 运维工程师主要做什么_网络工程师和网络运维工程师到底有什么不同?
  20. AndroidStudio开启debug调试模式

热门文章

  1. R语言导入excel数据
  2. 希尔伯特空间、拓扑空间概念理解
  3. MATLAB GUI界面编程——一些细节问题
  4. 知道一点怎么设直线方程_知道两个点的坐标怎么快速求出直线的方程
  5. 并联串联混合的电压和电流_详解三相并联型有源滤波器(APF)控制仿真!
  6. \t\t北京社保卡 问题汇总 参保人 结算问题
  7. 3Par 8000存储的一些命令
  8. java epson,JavaFX和打印到Epson打印机
  9. 《OSPF和IS-IS详解》一6.2 IS-IS数据库同步
  10. 基于STM32F103ZET6的(单/三)路HC-SR04超声波测距+TFTLCD实时显示+距离报警