数字电子技术基础(八):超前进位加法器
目录
- 一、原理
- 二、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
数字电子技术基础(八):超前进位加法器相关推荐
- 山东大学继续教育计算机3,山东大学继续教育数字电子技术基础试题3及答案.doc...
数字电子技术基础模拟卷 3 一 填空. 1 逻辑代数中,基本的运算关系是 与 . 或 和 非 . 2 十进制数27转换成二进制数为 11011 :转换成8421BCD码是 00011011 . 3 在 ...
- 数字电子技术基础第三版杨志忠_阎石数字电子技术基础第6版笔记和课后习题详解...
阎石<数字电子技术基础>(第6版)笔记和课后习题(含考研真题)详解 第1章 数制和码制 1.1 复习笔记 本章作为<数字电子技术基础>的开篇章节,是数字电路学习的基础.本章介绍 ...
- 数字电子技术基础大作业---电子表、流水灯
数字电子技术基础大作业 电子表.流水灯 一.电子表 1.1应用的元件 555.六片74LS160N.三片74LS26D.两片74LS04D.六个个D_HEX(十六进制输入的显示数码管).电阻.电容若干 ...
- (一)《数字电子技术基础》——引言
目录 课程背景 数字电子技术的特点 数字电路的分类 课程背景 数字电子技术是电子信息类.电气工程类.自动控制类.机电类.计算机及其应用专业的一门专业技术基础课程.电子技术领域的两大支柱是模拟电子技术和 ...
- 《数字电子技术基础》6.4 时序逻辑电路——设计方法(FSM)有限状态机
前言 <数字电子技术基础>第6.4节学习笔记,本人在编写Verilog时序逻辑代码时,关于这一部分的状态图需要好好学一下. 6.4.1 同步时序逻辑电路的设计方法 一般步骤 一.逻辑抽象, ...
- 《数字电子技术基础》4.4/6.5 组合逻辑/时序逻辑电路中的竞争-冒险
前言 <数字电子技术基础>第4.4节和第6.5节 组合逻辑电路和时序逻辑电路中的竞争-冒险现象学习笔记 4.4 组合逻辑电路中的竞争-冒险 4.4.1 竞争-冒险现象及其成因 之前讨论组合 ...
- 数字电子技术基础知识点总结,包含习题!
数电/数字电子技术基础全面知识点及习题总结(看这一篇就够了!!!)_数电知识点整理_徐二苗的博客-CSDN博客
- 《数字电子技术基础》5.1 触发器 概述
前言 <数字电子技术基础>第5.1节学习笔记 <数字逻辑电路设计>第4.1节学习笔记 5.1 触发器 概述 数字电路分为组合逻辑电路和时序逻辑电路. 组合逻辑电路由门电路组成, ...
- 【数字电子技术基础】逻辑代数基本运算公式证明
参考书目:<数字电子技术基础>第三版.侯建军.高等教育出版社 名称 公式1 公式2 0-1律 A⋅1=AA⋅0=0A\cdot 1=A \\ A\cdot 0=0A⋅1=AA⋅0=0 A+ ...
最新文章
- 美多商城之用户注册(展示用户注册页面)
- RabbitMQ入门-Routing直连模式
- python第二大奇数_python-2.7 – matplotlib,包含奇数个子图
- HDU1001 Easy h-index
- oracle10g 开机自启动
- 每日一题:leetcode191.位1的个数
- 使用IDEA创建Maven项目和Maven使用入门(配图详解)
- 清华大学大数据研究中心成立
- sqldataadapter.fill 索引超出了数组界限_小学生学习C++||第十五节 数组
- 连接oracle出现ORA-12514错误
- 计算机多媒体技术怎么考一建,一建考试视频
- The Learning route of GNN
- 【老生谈算法】matlab实现遗传算法优化源码——遗传算法
- PC机通过二层交换机连接三层交换机
- 未能启动apache服务器,教你apache服务无法启动一直失败怎么办
- 中国结构性心脏病年度报告2020发布会圆满召开!
- java计算机毕业设计银创科技有限公司人事信息系统源码+数据库+系统+lw文档+部署
- 前端项目添加自定义icont图标步骤
- 运维工程师主要做什么_网络工程师和网络运维工程师到底有什么不同?
- AndroidStudio开启debug调试模式
热门文章
- R语言导入excel数据
- 希尔伯特空间、拓扑空间概念理解
- MATLAB GUI界面编程——一些细节问题
- 知道一点怎么设直线方程_知道两个点的坐标怎么快速求出直线的方程
- 并联串联混合的电压和电流_详解三相并联型有源滤波器(APF)控制仿真!
- \t\t北京社保卡 问题汇总 参保人 结算问题
- 3Par 8000存储的一些命令
- java epson,JavaFX和打印到Epson打印机
- 《OSPF和IS-IS详解》一6.2 IS-IS数据库同步
- 基于STM32F103ZET6的(单/三)路HC-SR04超声波测距+TFTLCD实时显示+距离报警