【HDL系列】进位选择加法器原理与设计_carry select adder-程序员宅基地

技术标签: Carry Select Adder  行波进位加法器  纸上谈芯  进位选择加法器  verilog  

目录

一、进位选择加法器

二、Verilog设计


前期已介绍了行波进位加法器(Ripple Carry Adder, RCA)依赖于低位进位,所以具有超长的进位链和关键路径。对于RCA的改进中,进位选择加法器(Carry Select Adder)是比较特别的一种,鉴于有太多的加法器缩写是CSA,此处使用全称。

一、进位选择加法器

进位选择加法器由2个行波进位加法器和1个选择器构成,其中一个RCA加法器假定进位进位为0,另外一个RCA加法器假定进位为1,其结构如下:

4比特进位选择加法器基础块结构

由4个蓝色全加器组成的RCA,假定进位输入c0=0;由4个绿色全加器组成的RCA假定进位输入c0=1。如果来自低级的进位Cin为0,则选择蓝色RCA的进位c4作为该加法器的进位输出;如果来自低级的进位Cin为1,则选择绿色RCA的进位c4作为该加法器的进位输出。同时Cin作为选择器选择信号,控制S3~S0的输出来自于蓝色RCA还是绿色RCA

如下图16比特进位选择加法器,以4比特进位选择加法器为结构级联,每一级的进位可以同时经过4个全加器延迟同时生成,而选择信号在经过最低位的4比特RCA后生效,经过三个数据选择器的延迟,c16就会生成。所以,相比于同等16比特的行波进位加法器,进位选择加法器极大地提高了速度,是面积换取速度设计的典型代表。

16比特进位选择加法器

 

其关键路径见下图红色描绘路径:

进位选择加法器总结:

  1. 优势:对于更大位宽加法器高位进位不取决于进位传播,速度更快。但正确的输出必须等待正确的进位选择信号输出。
  2. 缺点:电路面积花费巨大,对于N比特加法器,需要几乎比RCA翻倍的全加器个数和许多多余的数据选择器。

另外对于N比特进位选择加法器构成的基础块,其大小可以相同,也可以不同,即其中的RCA全加器个数可以不同。

由进位选择加法器组成的加法器器又称为Conditional Sum Adder。

 

二、Verilog设计

基于4比特RCA模块,加入数据选择器,构成基础4比特进位选择加法器,由4比特进位选择加法器级联4级搭建成为16比特进位选择加法器,第一级进位延迟为4个全加器和1个数据选择器。

16比特进位选择加法器

 

16比特进位选择加法器网表

 

欢迎批评指正,更多阅读,关注“纸上谈芯”,不定期更新,共同学习:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhouxuanyuye/article/details/103931564

智能推荐

消息队列(kafka/nsq等)与任务队列(celery/ytask等)到底有什么不同?_任务队列和消息队列-程序员宅基地

文章浏览阅读3.1k次,点赞5次,收藏7次。原文链接:https://www.ikaze.cn/article/43写这篇博文的起因是,我在论坛宣传我开源的新项目YTask(go语言异步任务队列)时,有小伙伴在下面回了一句“为什么不用nsq?”。这使我想起,我在和同事介绍celery时同事说了一句“这不就是kafka吗?”。那么YTask和nsq,celery和kafka?他们之间到底有什么不同呢?下面我结合自己的理解。简单的分析一..._任务队列和消息队列

Java调KT类_java 调用kt 对象-程序员宅基地

文章浏览阅读1.5k次。1,MyUtuils.kt将被调用的文件class MyUtils { fun show(info:String){ println(info) }}fun show(info:String){ println(info)}2,Java文件调用该类,ClientJava.javapublic class ClientJava { public static void main(String[] args) { /** _java 调用kt 对象

UDP报文最大长度_最大请求报文大小-程序员宅基地

文章浏览阅读6.6k次,点赞4次,收藏4次。在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好? 当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,我这里仅对 像ICQ一类的发送聊天消息的情况作分析,对于其他情况,你或许也能得到一点帮助: 首先,我们知道,TCP/IP通常被认为是一个四层协议系统,包括链路层,网络层,运输层,应用层. UDP属于运输层_最大请求报文大小

Windows CMD命令行程序中 无限死循环 执行一段命令_cmd装比代码无限循环-程序员宅基地

文章浏览阅读10w+次,点赞14次,收藏18次。代码如下:for /l %a in (0,0,1) do echo hello,world粘贴在cmd命令行窗口中,回车即可无限死循环输出hello,world。如果需要停止,可以按ctrl+c中断。解析通用形式:for /l %variable IN (start,step,end) DO command [command-parameters] 该集表示以增量形式从start到end的一个数字序列。具体到第一段代码,如果是 (0,0,1) 就是从0开始,每次增_cmd装比代码无限循环

Android IPC机制-程序员宅基地

文章浏览阅读917次,点赞18次,收藏11次。为了方便有学习需要的朋友,我把资料都整理成了视频教程(实际上比预期多花了不少精力)当程序员容易,当一个优秀的程序员是需要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每个阶段都需要掌握不同的能力。早早确定自己的职业方向,才能在工作和能力提升中甩开同龄人。无论你现在水平怎么样一定要 持续学习 没有鸡汤,别人看起来的毫不费力,其实费了很大力,这四个字就是我的建议!!我希望每一个努力生活的IT工程师,都会得到自己想要的,因为我们很辛苦,我们应得的。

利用ode45求解含控制量并且控制量为离散点的动力学方程_ode函数离散-程序员宅基地

文章浏览阅读2k次,点赞5次,收藏14次。1、写出微分方程函数2、求解function dy=rigid(t,y)dy=zeros(3,1);dy(1)=y(2)*y(3);dy(2)=-y(1)*y(3);dy(3)=-0.51*y(1)*y(2);end%将微分方程写成函数形式,待调用options=odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]);[T Y]=ode45(@rigid,[0 12],[0 1 1],options);plot(T,Y(:,1),'-',T,Y_ode函数离散

随便推点

GQA分组注意力机制

【代码】GQA分组注意力机制。

android 耗电分析与性能优化-程序员宅基地

文章浏览阅读218次。1.官方的建议1.1 电池续航时间优化(Optimizing Battery Life)参考文章:优化电池使用时间已有中文的详细说明,此处做简要说明:(1)监控电池电量和充电状态(Monitoring the Battery Level and Charging State)通过系统广播,获取充电状态和电池电量的变化来调整数据更新等操作;如在充电时,更新数据及应用,在低电量时,减少更新频..._com.tencent.mm:exdevice

pytorch基础 神经网络构建-程序员宅基地

文章浏览阅读818次,点赞14次,收藏9次。计算e1=2.718,e5=148.413,e3=20.086,e1+e5+e3=171.217。“人/B 们/E 常/S 说/S 生/B 活/E 是/S 一/S 部/S 教/B 科/M 书/E ”给一段文字做分词标注,标注每个字对应的标号。图中是双向的三层 RNNs,堆叠多层的RNN网络,可以增加模型的参数,提高模型的拟合。双向的 RNN 是同时考虑“过去”和“未来”的信息,输入(黑色点)沿着黑色的实线箭。比如标签0将表示为([1,0,0,0,0,0,0,0,0,0]),标签3将表示为。

怎样实现c#生成的exe文件脱离Halcon的安装环境运行_c#如何免安装halcon12-程序员宅基地

文章浏览阅读513次,点赞9次,收藏10次。无法加载DLL"halconxl": 找不到指定的模块。(异常来自HRESULT:0X8007007E)。在exe安装目录中中添加halconxl.dll文件继续运行就了。_c#如何免安装halcon12

发现电脑一直默认按住Ctrl键如何解决_键盘一直自动按ctrl-程序员宅基地

文章浏览阅读1k次,点赞11次,收藏9次。你的键盘上应该有两个Ctrl键,按右边的Ctrl解决了。_键盘一直自动按ctrl

Linux 命令【6】:cut_cut使用特殊字符为分隔符-程序员宅基地

文章浏览阅读141次。Linux 命令【6】:cut文章目录一、简介二、命令详解三、实例演示一、简介cut 命令是一个将文本按列进行切分的小工具,它可以指定分隔每列的定界符。二、命令详解命令格式:cut {选项} {文件名}选项:-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。-c :以字符为单位进行分割。-d :自定义分隔符,默认为制表符。-f :与-d一起使用,指定显示哪个区域。-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一._cut使用特殊字符为分隔符