行波进位加法器和超前进位加法器比较

news/2024/9/24 1:14:34/

文章目录

1.行波进位加法器

行波进位加法器就是将全加器串联起来,将低位的进位输出作为高位的进位输入。

由全加器公式可知:

S = A ⊕ B ⊕ C i n C o u t = A B + B C i n + A C i n S=A\oplus B\oplus C_{in}\\ C_{out}= AB+BC_{in}+AC_{in} S=ABCinCout=AB+BCin+ACin

我们可以发现,单级的全加器产生和(将Cin视作已知量)需要1个三输入异或门,即1级电路;产生进位需要两级门电路,即AB/BCIN/ACIN之间的与门以及三项之间的或门。如果将全加器串联起来,后级全加器的进位输入需要前级全加器计算出进位之后才能进行计算,因此串联的全加器越多,其产生进位以及和的链路越长,延迟越大

4bit行波进位加法器verilog如下:

module twave_carry #(parameter width = 4
)(input  [width-1:0] A,input  [width-1:0] B,output [width-1:0] S,input  C_i,output C_o
);wire [width:0] C;genvar i;generatefor (i=0; i<width; i=i+1)beginfull_adder myadder(.A    (A[i]),.B    (B[i]),.C_i  (C[i]),.S    (S[i]),.C_o  (C[i+1]));endendgenerateassign C[0] = C_i;assign C_o  = C[width];
endmodulemodule full_adder(input  A,input  B,input  C_i,output S,output C_o
);assign S    = A ^ B ^ C_i;assign C_o  = A & B | C_i&(A^B);
endmodule

其RTL电路如下图:

在这里插入图片描述

将myadder展开:

在这里插入图片描述

2.超前进位加法器

超前进位加法器的本质就是并行计算各个进位,无需通过进位传递计算,缩短关键路径

我们定义生成项G和传输项P:

{ P k = A k ⊕ B k , k = 0 , … , N − 1 G k = A k B k k = 0 , … , N − 1 \left\{\begin{array}{ll}P_{k}=A_{k} \oplus B_{k}, & \mathrm{k}=0, \ldots, \mathrm{N}-1 \\ G_{k}=A_{k} B_{k} & \mathrm{k}=0, \ldots, \mathrm{N}-1\end{array}\right. {Pk=AkBk,Gk=AkBkk=0,,N1k=0,,N1

则和与进位对应的关系表达式为:

{ S k = P k ⊕ C k , k = 1 , … , N C k = G k − 1 + C k − 1 P k − 1 k = 1 , … , N C N = C out  C 0 = C in  \left\{\begin{array}{ll}S_{k}=P_{k} \oplus C_{k}, & \mathrm{k}=1, \ldots, \mathrm{N} \\ C_{k}=G_{k-1}+C_{k-1} P_{k-1} & \mathrm{k}=1, \ldots, \mathrm{N} \\ C_{N}=C_{\text {out }} & \\ C_{0}=C_{\text {in }} & \end{array}\right. Sk=PkCk,Ck=Gk1+Ck1Pk1CN=Cout C0=Cin k=1,,Nk=1,,N

我们将各个进位展开:

{ C 1 = G 0 + C 0 P 0 C 2 = G 1 + C 1 P 1 = G 1 + G 0 P 1 + C 0 P 1 P 0 C 3 = G 2 + C 2 P 2 = G 2 + G 1 P 2 + G 0 P 2 P 1 + C 0 P 2 P 1 P 0 C 4 = G 3 + C 3 P 3 = G 3 + G 2 P 3 + G 1 P 3 P 2 + G 0 P 3 P 2 P 1 + C 0 P 3 P 2 P 1 P 0 \left\{\begin{array}{l}C_{1}=G_{0}+C_{0} P_{0} \\ C_{2}=G_{1}+C_{1} P_{1}=G_{1}+G_{0} P_{1}+C_{0} P_{1} P_{0} \\ C_{3}=G_{2}+C_{2} P_{2}=G_{2}+G_{1} P_{2}+G_{0} P_{2} P_{1}+C_{0} P_{2} P_{1} P_{0} \\ C_{4}=G_{3}+C_{3} P_{3}=G_{3}+G_{2} P_{3}+G_{1} P_{3} P_{2}+G_{0} P_{3} P_{2} P_{1}+C_{0} P_{3} P_{2} P_{1} P_{0}\end{array}\right. C1=G0+C0P0C2=G1+C1P1=G1+G0P1+C0P1P0C3=G2+C2P2=G2+G1P2+G0P2P1+C0P2P1P0C4=G3+C3P3=G3+G2P3+G1P3P2+G0P3P2P1+C0P3P2P1P0

在上述公式中,以C4举例,比如对于G0P3P2P1这一项,G0、P3、P2、P1四个是并行结构,并且他们四个都是只有一级门电路(与门/或门),因此对于C4来说其一共有三级门电路,从低层次往高层次看分别是G或P中的与门/或门、G与P的相与(与门)、各项(G3、G2P3、…、G0P3P2P1P0)的或门。其结构如下:

在这里插入图片描述

S k = P k ⊕ C k S_{k}=P_{k} \oplus C_{k} Sk=PkCk

则产生和的门电路级数比Ck的门电路多一级(Pk和Ck的异或门,Pk自己内部的异或门和Ck内部的三级门电路视作是并行结构),即4级

无论加法器位宽是多少,其产生和的级数均为4级,产生进位的级数均为3级。

其verilog如下:

module carry_ahead #( width=4 ) (input  [width-1:0] op1,input  [width-1:0] op2,input  C_i,output [width-1:0] S,output C_o
);wire [width-1:0] G;wire [width-1:0] P;wire [width:0] C;genvar i;for( i=0; i<width; i=i+1) beginpg_gen u_pg_gen(.A( op1[i]),.B( op2[i]),.G( G[i]  ),.P( P[i]  ));endassign C[0] = C_i;assign C[1] = G[0] || ( C[0] & P[0] );assign C[2] = G[1] || ( (G[0] || ( C[0] & P[0]) ) & P[1] );assign C[3] = G[2] || ( (G[1] || ( (G[0] || (C[0] & P[0]) ) & P[1])) & P[2] );assign C[4] = G[3] || ( (G[2] || ( (G[1] || ( (G[0] || (C[0] & P[0]) ) & P[1])) & P[2] )) & P[3]);assign C_o = C[width-1];genvar k;for( k=0; k<width; k=k+1) beginassign S[k] = P[k] ^ C[k];end
endmodulemodule pg_gen(input A,input B,output G,output P
);assign G = A & B;assign P = A ^ B;
endmodule

RTL电路结果如下图:

在这里插入图片描述

在这里插入图片描述


http://www.ppmy.cn/news/1463720.html

相关文章

小林coding笔记

MySQL执行流程 MySQL 的架构共分为两层&#xff1a;Server 层和存储引擎层。Server 层负责建立连接、分析和执行 SQL。存储引擎层负责数据的存储和提取。 Mysql执行 启动Mysql net start mysql登陆 mysql -u root -p输入密码

【Android14 ShellTransitions】(一)开篇

说来惭愧&#xff0c;AndroidU都已经开发这么久了&#xff0c;但是我还没有整理过ShellTransition相关的知识。我本来希望能够系统的写一篇关于ShellTransition的笔记出来&#xff0c;但是发现一来这是一个比较庞大的模块&#xff0c;二来我个人能力有限&#xff0c;对ShellTra…

智慧林业云巡平台 客户端和移动端(支持语音和视频)自动定位巡护,后端离线路线监测

目前现状 无法客观、方便地掌握护林员的到位情况&#xff0c;因而无法有效地保证巡护人员按计划要求&#xff0c;按时按周期对所负责的林区开展巡护&#xff0c;使巡护工作的质量得不到保证。遇到火情、乱砍滥伐等灾情时无法及时上报处理&#xff0c;现场状况、位置等信息描述…

【Flutter】动画介绍隐式动画

&#x1f525; 本文由 程序喵正在路上 原创&#xff0c;CSDN首发&#xff01; &#x1f496; 系列专栏&#xff1a;Flutter学习 &#x1f320; 首发时间&#xff1a;2024年5月28日 &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e; 目…

【源码】2024心悦搜剧源码百万级网盘资源

1、一键转存他人链接&#xff1a;就是将别人的分享链接转为你自己的 2、转存心悦搜剧资源&#xff1a;就是将心悦搜剧平台上的所有资源都转成你自己的 3、每日自动更新&#xff1a;自动转存每天的资源并入库 前端uin-app&#xff0c;后端PHP&#xff0c;兼容微信小程序

JavaWeb开发 2.Web开发 Web前端开发 ①介绍

内心一旦平静&#xff0c;外界便鸦雀无声 —— 24.5.27 一、初识Web前端 网页有哪些部分组成? 文字、图片、音频、视频、超链接 ...网页&#xff0c;背后的本质是什么? 前端代码前端的代码是如何转换成用户眼中的网页的? 通过浏览器转化(解析和渲染)成用户看…

使用java远程提交spark任务到yarn集群

要使用Java远程提交Spark任务到YARN集群&#xff0c;你需要遵循几个步骤。以下是一个简化的指南&#xff0c;帮助你完成这个过程&#xff1a; 1. 设置Spark和YARN环境 确保你的YARN集群已经正确配置并且可以运行Spark任务。在你的开发机器上安装Spark&#xff0c;并设置SPARK…

微信小程序仿胖东来轮播和背景效果(有效果图)

效果图 .wxml <view class"swiper-index" style"--width--:{{windowWidth}}px;"><image src"{{swiperList[(cardCur bgIndex -1?swiperList.length - 1:cardCur bgIndex > swiperList.length -1?0:cardCur bgIndex)]}}" clas…