各种加法器的比对分析与Verilog实现(2)

2024-01-18 21:10

本文主要是介绍各种加法器的比对分析与Verilog实现(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

      本文将介绍Kogge-Stone加法器和brent-kung加法器的原理,在下一篇博客中我将用Verilog进行实现。

目录

1. 并行前缀加法器(Parallel-Prefix Adder, PPA) 

2. Kogge-Stone加法器原理

3. brent-kung加法器原理


1. 并行前缀加法器(Parallel-Prefix Adder, PPA

       为了减少AND门的深度,PPA对CLA进行了进一步优化。不过PPA和CLA进行的计算流程大致一致,只是在计算进位Ci的时候进行了充分的并行优化。在PPA的设计中,主要有两种结构组件:processing component 和 buffer component,两种结构的构造和逻辑意义如下:

        目前的多种PPA变体,其主要设计思路是在加法器范围、电路深度、节点输出数量和整体布线四点上做出均衡。常见的变体有下面三种(这里的结构图是递推的意思):

Sklansky
Kogge-Stone
Beaumont-Smith

2. Kogge-Stone加法器原理

参考文献:

A Parallel Algorithm for the Efficient Solutionof a General Class of Recurrence Equations

       Kogge-Stone加法器是利用Peter M. Kogge和Harold S.Stone于1972年提出的一种并行算法生成的一种树形加法器。

       下面是我的一部分理解:

       使用CLA的计算流程:

       可以把它抽象为下面的数学问题:

       为解决如上问题,论文中定义了下式:

       从而可以把问题转化为:

       因此递推公式如下:

        Q(i,1)和Q(2i,i+1)可以独立计算,Q(i,1)和Q(2i,i+1)又可以单独分解独立计算,每个层级都可以独立计算,因此加快了运算速度。

       然后就出现一张神奇的递推结构图(x8的计算图例):

       以及X1至X8的计算步骤、系数与公式表:

       因此,可以比较快速的得出各项进位Ci:

       对于C1-C4等的生成,其算式如下:

        这就是之前这张图的来源(就是把论文那张递推结构图倒过来)

3. brent-kung加法器原理

       brent-kung加法器是树形结构,由Richard P.Brent 和 H.T.Kung教授于上世纪80年代提出。设计的思想类似于超前进位加法器,但是brent和kung教授充分的考虑了开销和电路结构本身的拓扑学特性,针对性的升级了超前进位加法器的性能,使其达到了N比特加法器延迟正比于logN, 面积正比于N的效果。

       Brent-Kung加法器定义了以下运算“o”:

        也就是:

  • 输入p,g,g’,p’,输出g+p.g’
  • 输入p,g,g’,p’,输出p.p’

       可以用归纳出下面这个结论:

       当n=8时,(G8,P8)的计算方法如下图:

       其中白色圈表示数据传递,数据前后没有变化;黑色圈表示上文中定义的“o”操作,其计算示意图如下:

        在T=3时刻G8和P8的计算如下:

        (G8,P8)=(g8,p8)o(g7,p7)o(g6,p6)o(g5,p5)o(g4,p4)o(g3,p3)o(g2,p2)o(g1,p1)

       对于一般问题(Gi,Pi),i=1,2,3,…N的计算,其结构图如下:

       brent-kung加法器主要展示了一种在电路上无法直接减少面积增加速度的情况下,进行数学上的抽象建模并优化结构的思路。二进制可以表示一切函数关系,这是二进制的完备性,因此我们可以把一切电路问题优化为数学问题进而求解,这种一种非常重要的思路。

       从逻辑层数,扇入扇出和布线拥塞度三个方面看该树形加法器,Brent-Kung加法器的拓扑结构经历逻辑层数较多,需要(2logN–1)级,扇入扇出和布线拥塞度较低。

体会:我认为,不论是Kogge-Stone方法还是brent-kung方法,本质上都是在CLA的基础上,对Ci=Gi+Pi·Ci-1这个递推式进行转化,用类似于整体代换的思想,解决CLA中随着i增大,Ci通项表达式复杂度疯狂上升的问题。有点类似于编程里从算法上降低时间复杂度的感觉。但是这必然会造成空间复杂度的上升,在硬件上的体现可能就是布线更加拥堵。

参考链接:

Kogge-Stone加法器原理与设计

Brent-Kung树形加法器原理与设计

求学路上,你我共勉(๑•̀ㅂ•́)و✧

这篇关于各种加法器的比对分析与Verilog实现(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/620264

相关文章

C++中unordered_set哈希集合的实现

《C++中unordered_set哈希集合的实现》std::unordered_set是C++标准库中的无序关联容器,基于哈希表实现,具有元素唯一性和无序性特点,本文就来详细的介绍一下unorder... 目录一、概述二、头文件与命名空间三、常用方法与示例1. 构造与析构2. 迭代器与遍历3. 容量相关4

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

SpringBoot基于注解实现数据库字段回填的完整方案

《SpringBoot基于注解实现数据库字段回填的完整方案》这篇文章主要为大家详细介绍了SpringBoot如何基于注解实现数据库字段回填的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解... 目录数据库表pom.XMLRelationFieldRelationFieldMapping基础的一些代

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Python实现字典转字符串的五种方法

《Python实现字典转字符串的五种方法》本文介绍了在Python中如何将字典数据结构转换为字符串格式的多种方法,首先可以通过内置的str()函数进行简单转换;其次利用ison.dumps()函数能够... 目录1、使用json模块的dumps方法:2、使用str方法:3、使用循环和字符串拼接:4、使用字符

Linux下利用select实现串口数据读取过程

《Linux下利用select实现串口数据读取过程》文章介绍Linux中使用select、poll或epoll实现串口数据读取,通过I/O多路复用机制在数据到达时触发读取,避免持续轮询,示例代码展示设... 目录示例代码(使用select实现)代码解释总结在 linux 系统里,我们可以借助 select、

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配