0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在FPGA中实现高效的compressor加法树呢?

FPGA之家 来源:AI加速 2023-11-08 09:06 次阅读

大规模的整数加法在数字信号处理和图像视频处理领域应用很多,其对资源消耗很多,如何能依据FPGA物理结构特点来有效降低加法树的资源和改善其时序特征是非常有意义的。本篇论文是基于altera公司的FPGA,利用其LUT特点,探索设计最大程度利用LUT以及改善时序的compressor树的结构。

01

半加器和全加器

半加器是两个输入bit相加,输出结果S和进位C。表达式为:

4a0f0034-7dd2-11ee-939d-92fbcf53809c.png

全加器是三个bit相加,有进位参与,表达式为:

4a2faba4-7dd2-11ee-939d-92fbcf53809c.png

Compressor树就是在全加器的基础上建立的,通过全加器的S和C结果相互连接形成多层树状结构,其相比于普通的进位加法树消耗更少资源。普通进位加法树是用两个或者三个加法模块连接成树,形成多层结构来计算多输入加法。放一张wallace树的经典文献中的图片来大致了解一下compressor树的结构。

4a4d1090-7dd2-11ee-939d-92fbcf53809c.jpg

图1.1 compressor树结构

02

Compressor树

Compressor树就是在图1.1中carry propagating adder以上的部分,其目的就是为了减少被加数个数,上图中降低到S和C两个后送到进位链加法器完成最后求和。这样就可以降低加法对资源的消耗。假设有如下加数:

4a6ce974-7dd2-11ee-939d-92fbcf53809c.png

Compressor树的结果就是:

4a807d86-7dd2-11ee-939d-92fbcf53809c.png

Compressor树就是由以上的全加器构成的。全加器构成一个基本的并行计数器,并行计数器(Generalized parallel counters)GPC可以用一个元组表示:

4a9c0d4e-7dd2-11ee-939d-92fbcf53809c.png

其中Ki表示的是输入的被加数中处于同一位置的bit个数,如果用点来代表bit,那么下图中的bit0的个数有1,而bit1有2,bit2有3,…。假设一个GPC允许的最大输入bit数为M,这个条件是考虑到FPGA中LUT的结构,比如在altera的stratix等器件中,LUT是6输入的,为了更好的利用LUT资源,需要适配LUT输入。那么根据这个条件,可以得到以下的约束:

4abc6e18-7dd2-11ee-939d-92fbcf53809c.png

4ada4afa-7dd2-11ee-939d-92fbcf53809c.jpg

图2.1 (1, 4, 1, 5; 5)

第一个约束条件是所有列的bit数被限制在M以内,第二个条件是所能实现的最大数据范围。后边会根据这两个条件提出一个在FPGA上优化compressor树的算法

用GPC来实现元组(1, 4, 1, 5; 5)为下图:

4aed94d4-7dd2-11ee-939d-92fbcf53809c.png

图2.2 实现元组(1, 4, 1, 5; 5)的GPC结构

从图中看出其延时包括一个FA的延时和4个进位链产生的延时。在FPGA中提供了高速的进位链,所以GPC很适合在FPGA中实现。因此在FPGA上利用好GPC可以降低加法树的级数。

比如举个例子,如图2.3所示,计算两列数据和,如果使用华莱士树的方式,会采用两级电路,第一级用两个全加器,将三行数据降低到两行数据,最后再用一个进位链加法器实现最后数据相加。而如果使用GPC(3, 3; 4)仅仅用一级电路就能实现这三行数据的相加。

4b0c51bc-7dd2-11ee-939d-92fbcf53809c.png

图2.3 compressor树构建方式:a)用连个全加器和进位链加法器 b)用一个(3, 3; 4)GPC

现在结合altera的器件结构来分析如何能更好的利用LUT来搭建一个GPC。Stratix器件中的adaptive logic module(ALM)包含两个6-LUT,这两个LUT共享输入,因此一个ALM模块可以实现6-2的功能。

通过图2.4可以看出,如果将6输入3输出进行映射,会有一个LUT空置,利用率为75%。如果将6输入4输出映射到LUT,那么利用率为100%。如果将2个6输入3输出映射到2个ALM,这个无法实现,因为ALM中两个LUT共享输入则无法综合。

4b2fe9a6-7dd2-11ee-939d-92fbcf53809c.jpg

图2.4 (a)一个6-3GPC映射,只有75%利用率(b)6-4GPC映射,利用率100%(c)2个6-3映射到2个ALM不可实现

03

高效映射算法

为了提高LUT利用率,降低器件中逻辑使用面积,论文基于以上的两个约束以及altera LUT结构特点提出了GPC选择的算法。

首先我们定义两个概念,primitive GPC是满足以上约束的所有GPC集。比如对于M=6,n=3,一共有12个GPC。Covering GPC是指可以不被其它GPC实现的,即其实现是唯一的。比如(2, 2; 3)就不是一个covering GPC,因为其利用(2, 3; 3)GPC同样可以实现,只要将bit0对应的一个数置为0就行了。比如对于6-3GPC的covering GPC有{(0, 6; 3), (1, 5; 3), (2, 3; 3)}。而(3, 1; 3)是一个不够高效的GPC,因为其bit0只有一个bit有数,其可以绕过GPC直接输出。compressor ratio是输入对输出的比率,比如(2, 3; 3)的比率是5/3=1.66。

算法步骤如下:

1) 首先依据M和n生成covering GPC;

2) 产生一些列primitive GPC,compressor树将会由这些GPC来构建,但是最后将由对应的covering GPC来替代;

3) 计算每个primitive GPC的compressor ratio并分类;

接下来的4-6步是一个不断迭代过程,每一次迭代生成一级GPC,直到达到k行和kbit每列的限制条件。

4) 首先从所有求和列中选择一个bit数最多的列作为基准,然后再同时向前和向后进行搜索,比较前后两个列的compressor ratio,选择最大的作为将要用于GPC映射的列。不断重复这个过程直到所有列都完成搜索。

比如图3.1展示的是一个6-3GPC建立过程。

第一个GPC是有6个bit的列,可以用(0, 6; 3)GPC来表示;

第二个最高列是有5bit,可以用(1, 5; 3)表示,附带上旁边的一个bit;

第三个高列有4bit,可以用(1, 4; 3)GPC实现;

…。

这样共实现了4个GPC,余下的没有实现的bit使用GPC实现不能有效提高LUT利用率,直接传递到下一级。

4b4f43dc-7dd2-11ee-939d-92fbcf53809c.png

图3.1 GPC生成过程

5) 对步骤4生成的新bit重复步骤4,进行提取新的GPC;

6) 当最终生成的bit行数小于k或者列数bit数小于k,迭代过程结束,这时上一级没有被分配GPC的bit传递到本级,通过一个进位链加法器将所有结果相加;

04

结果

论文比较了GPC和另外两种加法器实现方式的逻辑面积和资源对比,这另种加法器分别为:

1 ADD:由一个三输入加法器作为基本结构构建的加法树;

2 3GD:采用carry-save 加法器来实现,这种结构没有利用ALM中的进位链;

延时、逻辑面积、资源利用对比如下图所示:

4b6b1012-7dd2-11ee-939d-92fbcf53809c.jpg4b8edbc8-7dd2-11ee-939d-92fbcf53809c.jpg4bb17e58-7dd2-11ee-939d-92fbcf53809c.jpg

图4.1 不同加法器实现方式的对比结果

总结

论文探索了利用FPGA的LUT和进位链结构来实现GPC,相比于ADD和3GD有更低的延时,而资源使用和ADD相差不大,比3GD小很多。这主要是源于ADD和GPC都使用了进位链。







审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1602

    文章

    21324

    浏览量

    593215
  • 全加器
    +关注

    关注

    10

    文章

    59

    浏览量

    28108
  • LUT
    LUT
    +关注

    关注

    0

    文章

    49

    浏览量

    12397
  • 半加器
    +关注

    关注

    1

    文章

    27

    浏览量

    8661
  • gpc
    gpc
    +关注

    关注

    0

    文章

    4

    浏览量

    1287

原文标题:在FPGA中实现高效的compressor加法树

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGA工程师:如何在FPGA实现状态机?

    安全高效的状态机设计对于任何使用FPGA的工程师而言都是一项重要技能。选择Moore状态机、Mealy状态机还是混合机取决于整个系统的需求。无论选择哪种类型的状态机,充分掌握实现方案所需的工具和技巧,将确保您
    发表于 03-29 15:02 1.2w次阅读
    <b class='flag-5'>FPGA</b>工程师:如<b class='flag-5'>何在</b><b class='flag-5'>FPGA</b>中<b class='flag-5'>实现</b>状态机?

    LABVIEW如何实现16进制加法啊?

    LABVIEW如何实现16进制加法啊?
    发表于 12-20 20:50

    请问如何在std rms模块读取相关电平值?

    的跳动、在编译保存的头文件也无法找到相关的电平读取地址。请问我该如何在std rms模块读取相关电平值?附件Compressor.bmp694.8 KB
    发表于 10-19 15:08

    何在FPGA实现过零检测器?

    大家好!我想知道如何在FPGA中使用VHDL实现过零检测器。所以我想实现一个数字常数小数鉴别器。 firt部分提供了双极性信号,但我想知道如何在
    发表于 01-29 08:16

    为什么研究浮点加法运算,对FPGA实现方法很有必要?

    处理等方面受到了限制,由于FPGA关于浮点数的运算只能自行设计,因此,研究浮点加法运算的FPGA实现方法很有必要。
    发表于 07-05 06:21

    如何利用FPGA实现高速流水线浮点加法器研究?

    处理等方面受到了限制,为什么研究浮点加法运算的FPGA实现方法很有必要? 因为FPGA关于浮点数的运算只能自行设计 。
    发表于 08-15 08:00

    何在低端FPGA实现DPA的功能?

    FPGA,动态相位调整(DPA)主要是实现LVDS接口接收时对时钟和数据通道的相位补偿,以达到正确接收的目的。那么该如何在低端FPGA
    发表于 04-08 06:47

    何在FPGA利用低频源同步时钟实现LVDS接收字对齐

    在串行数据传输的过程,如何在FPGA利用低频源同步时钟实现LVDS接收字对齐
    发表于 04-08 06:39

    在设备声明i2c eeprom驱动该怎样去实现

    何在设备声明i2c eeprom驱动?求大神解答
    发表于 12-31 06:30

    请问一下如何在A40i开发板添加设备信息

    请问一下如何在A40i开发板添加设备信息
    发表于 01-14 09:00

    何在设备文件里面添加心跳灯节点

    何在设备文件里面添加心跳灯节点?有哪些步骤?
    发表于 03-04 06:44

    何在EasyEDA创建圣诞

    描述Gerber_PCB_test_2_2022-02-08这是用于教育目的的假日 PCB。如何在 EasyEDA 创建它的教程在 Youtube 上的“初学者圣诞 PCB 设计教程”下。
    发表于 06-29 08:00

    用Verilog/SystemVerilog快速实现一个加法

    )=>s,即对层级间不做任何的操作。上面的加法我们在加法的每个层级添加寄存器:仅在
    发表于 08-01 14:29

    fpga实现加法和减法运算的方法是什么

    FPGA实现加法和减法运算非常简单,实现乘法和除法可以用IP,那实现对数和指数运算该用什么呢?
    发表于 08-05 09:37 926次阅读
    <b class='flag-5'>fpga</b><b class='flag-5'>实现</b><b class='flag-5'>加法</b>和减法运算的方法是什么

    基于FPGA实现Mem加法

    前段时间和几个人闲谈,看看在FPGA里面实现一个Mem加法器怎么玩儿
    的头像 发表于 10-17 10:22 311次阅读
    基于<b class='flag-5'>FPGA</b><b class='flag-5'>实现</b>Mem<b class='flag-5'>加法</b>器