0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

如何在FPGA中實現(xiàn)高效的compressor加法樹呢?

FPGA之家 ? 來源:AI加速 ? 2023-11-08 09:06 ? 次閱讀

大規(guī)模的整數(shù)加法在數(shù)字信號處理和圖像視頻處理領域應用很多,其對資源消耗很多,如何能依據(jù)FPGA物理結(jié)構(gòu)特點來有效降低加法樹的資源和改善其時序特征是非常有意義的。本篇論文是基于altera公司的FPGA,利用其LUT特點,探索設計最大程度利用LUT以及改善時序的compressor樹的結(jié)構(gòu)。

01

半加器和全加器

半加器是兩個輸入bit相加,輸出結(jié)果S和進位C。表達式為:

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

全加器是三個bit相加,有進位參與,表達式為:

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

Compressor樹就是在全加器的基礎上建立的,通過全加器的S和C結(jié)果相互連接形成多層樹狀結(jié)構(gòu),其相比于普通的進位加法樹消耗更少資源。普通進位加法樹是用兩個或者三個加法模塊連接成樹,形成多層結(jié)構(gòu)來計算多輸入加法。放一張wallace樹的經(jīng)典文獻中的圖片來大致了解一下compressor樹的結(jié)構(gòu)。

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

圖1.1 compressor樹結(jié)構(gòu)

02

Compressor樹

Compressor樹就是在圖1.1中carry propagating adder以上的部分,其目的就是為了減少被加數(shù)個數(shù),上圖中降低到S和C兩個后送到進位鏈加法器完成最后求和。這樣就可以降低加法對資源的消耗。假設有如下加數(shù):

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

Compressor樹的結(jié)果就是:

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

Compressor樹就是由以上的全加器構(gòu)成的。全加器構(gòu)成一個基本的并行計數(shù)器,并行計數(shù)器(Generalized parallel counters)GPC可以用一個元組表示:

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

其中Ki表示的是輸入的被加數(shù)中處于同一位置的bit個數(shù),如果用點來代表bit,那么下圖中的bit0的個數(shù)有1,而bit1有2,bit2有3,…。假設一個GPC允許的最大輸入bit數(shù)為M,這個條件是考慮到FPGA中LUT的結(jié)構(gòu),比如在altera的stratix等器件中,LUT是6輸入的,為了更好的利用LUT資源,需要適配LUT輸入。那么根據(jù)這個條件,可以得到以下的約束:

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

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

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

第一個約束條件是所有列的bit數(shù)被限制在M以內(nèi),第二個條件是所能實現(xiàn)的最大數(shù)據(jù)范圍。后邊會根據(jù)這兩個條件提出一個在FPGA上優(yōu)化compressor樹的算法。

用GPC來實現(xiàn)元組(1, 4, 1, 5; 5)為下圖:

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

圖2.2 實現(xiàn)元組(1, 4, 1, 5; 5)的GPC結(jié)構(gòu)

從圖中看出其延時包括一個FA的延時和4個進位鏈產(chǎn)生的延時。在FPGA中提供了高速的進位鏈,所以GPC很適合在FPGA中實現(xiàn)。因此在FPGA上利用好GPC可以降低加法樹的級數(shù)。

比如舉個例子,如圖2.3所示,計算兩列數(shù)據(jù)和,如果使用華萊士樹的方式,會采用兩級電路,第一級用兩個全加器,將三行數(shù)據(jù)降低到兩行數(shù)據(jù),最后再用一個進位鏈加法器實現(xiàn)最后數(shù)據(jù)相加。而如果使用GPC(3, 3; 4)僅僅用一級電路就能實現(xiàn)這三行數(shù)據(jù)的相加。

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

圖2.3 compressor樹構(gòu)建方式:a)用連個全加器和進位鏈加法器 b)用一個(3, 3; 4)GPC

現(xiàn)在結(jié)合altera的器件結(jié)構(gòu)來分析如何能更好的利用LUT來搭建一個GPC。Stratix器件中的adaptive logic module(ALM)包含兩個6-LUT,這兩個LUT共享輸入,因此一個ALM模塊可以實現(xiàn)6-2的功能。

通過圖2.4可以看出,如果將6輸入3輸出進行映射,會有一個LUT空置,利用率為75%。如果將6輸入4輸出映射到LUT,那么利用率為100%。如果將2個6輸入3輸出映射到2個ALM,這個無法實現(xiàn),因為ALM中兩個LUT共享輸入則無法綜合。

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

圖2.4 (a)一個6-3GPC映射,只有75%利用率(b)6-4GPC映射,利用率100%(c)2個6-3映射到2個ALM不可實現(xiàn)

03

高效映射算法

為了提高LUT利用率,降低器件中邏輯使用面積,論文基于以上的兩個約束以及altera LUT結(jié)構(gòu)特點提出了GPC選擇的算法。

首先我們定義兩個概念,primitive GPC是滿足以上約束的所有GPC集。比如對于M=6,n=3,一共有12個GPC。Covering GPC是指可以不被其它GPC實現(xiàn)的,即其實現(xiàn)是唯一的。比如(2, 2; 3)就不是一個covering GPC,因為其利用(2, 3; 3)GPC同樣可以實現(xiàn),只要將bit0對應的一個數(shù)置為0就行了。比如對于6-3GPC的covering GPC有{(0, 6; 3), (1, 5; 3), (2, 3; 3)}。而(3, 1; 3)是一個不夠高效的GPC,因為其bit0只有一個bit有數(shù),其可以繞過GPC直接輸出。compressor ratio是輸入對輸出的比率,比如(2, 3; 3)的比率是5/3=1.66。

算法步驟如下:

1) 首先依據(jù)M和n生成covering GPC;

2) 產(chǎn)生一些列primitive GPC,compressor樹將會由這些GPC來構(gòu)建,但是最后將由對應的covering GPC來替代;

3) 計算每個primitive GPC的compressor ratio并分類;

接下來的4-6步是一個不斷迭代過程,每一次迭代生成一級GPC,直到達到k行和kbit每列的限制條件。

4) 首先從所有求和列中選擇一個bit數(shù)最多的列作為基準,然后再同時向前和向后進行搜索,比較前后兩個列的compressor ratio,選擇最大的作為將要用于GPC映射的列。不斷重復這個過程直到所有列都完成搜索。

比如圖3.1展示的是一個6-3GPC建立過程。

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

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

第三個高列有4bit,可以用(1, 4; 3)GPC實現(xiàn);

…。

這樣共實現(xiàn)了4個GPC,余下的沒有實現(xiàn)的bit使用GPC實現(xiàn)不能有效提高LUT利用率,直接傳遞到下一級。

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

圖3.1 GPC生成過程

5) 對步驟4生成的新bit重復步驟4,進行提取新的GPC;

6) 當最終生成的bit行數(shù)小于k或者列數(shù)bit數(shù)小于k,迭代過程結(jié)束,這時上一級沒有被分配GPC的bit傳遞到本級,通過一個進位鏈加法器將所有結(jié)果相加;

04

結(jié)果

論文比較了GPC和另外兩種加法器實現(xiàn)方式的邏輯面積和資源對比,這另種加法器分別為:

1 ADD:由一個三輸入加法器作為基本結(jié)構(gòu)構(gòu)建的加法樹;

2 3GD:采用carry-save 加法器來實現(xiàn),這種結(jié)構(gòu)沒有利用ALM中的進位鏈;

延時、邏輯面積、資源利用對比如下圖所示:

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

圖4.1 不同加法器實現(xiàn)方式的對比結(jié)果

總結(jié)

論文探索了利用FPGA的LUT和進位鏈結(jié)構(gòu)來實現(xiàn)GPC,相比于ADD和3GD有更低的延時,而資源使用和ADD相差不大,比3GD小很多。這主要是源于ADD和GPC都使用了進位鏈。







審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1629

    文章

    21736

    瀏覽量

    603375
  • 全加器
    +關注

    關注

    10

    文章

    62

    瀏覽量

    28506
  • LUT
    LUT
    +關注

    關注

    0

    文章

    49

    瀏覽量

    12507
  • 半加器
    +關注

    關注

    1

    文章

    29

    瀏覽量

    8793
  • gpc
    gpc
    +關注

    關注

    0

    文章

    5

    瀏覽量

    1341

原文標題:在FPGA中實現(xiàn)高效的compressor加法樹

文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FPGA工程師:如何在FPGA實現(xiàn)狀態(tài)機?

    安全高效的狀態(tài)機設計對于任何使用FPGA的工程師而言都是一項重要技能。選擇Moore狀態(tài)機、Mealy狀態(tài)機還是混合機取決于整個系統(tǒng)的需求。無論選擇哪種類型的狀態(tài)機,充分掌握實現(xiàn)方案所需的工具和技巧,將確保您
    發(fā)表于 03-29 15:02 ?1.3w次閱讀
    <b class='flag-5'>FPGA</b>工程師:如<b class='flag-5'>何在</b><b class='flag-5'>FPGA</b><b class='flag-5'>中</b><b class='flag-5'>實現(xiàn)</b>狀態(tài)機?

    為什么研究浮點加法運算,對FPGA實現(xiàn)方法很有必要?

    處理等方面受到了限制,由于FPGA關于浮點數(shù)的運算只能自行設計,因此,研究浮點加法運算的FPGA實現(xiàn)方法很有必要。
    發(fā)表于 07-05 06:21

    如何利用FPGA實現(xiàn)高速流水線浮點加法器研究?

    處理等方面受到了限制,為什么研究浮點加法運算的FPGA實現(xiàn)方法很有必要? 因為FPGA關于浮點數(shù)的運算只能自行設計 。
    發(fā)表于 08-15 08:00

    何在低端FPGA實現(xiàn)DPA的功能?

    FPGA,動態(tài)相位調(diào)整(DPA)主要是實現(xiàn)LVDS接口接收時對時鐘和數(shù)據(jù)通道的相位補償,以達到正確接收的目的。那么該如何在低端FPGA
    發(fā)表于 04-08 06:47

    何在FPGA利用低頻源同步時鐘實現(xiàn)LVDS接收字對齊

    在串行數(shù)據(jù)傳輸?shù)倪^程,如何在FPGA利用低頻源同步時鐘實現(xiàn)LVDS接收字對齊
    發(fā)表于 04-08 06:39

    請問一下如何在A40i開發(fā)板添加設備信息

    請問一下如何在A40i開發(fā)板添加設備信息?
    發(fā)表于 01-14 09:00

    何在設備文件里面添加心跳燈節(jié)點

    何在設備文件里面添加心跳燈節(jié)點?有哪些步驟?
    發(fā)表于 03-04 06:44

    何在EasyEDA創(chuàng)建圣誕

    描述Gerber_PCB_test_2_2022-02-08這是用于教育目的的假日 PCB。如何在 EasyEDA 創(chuàng)建它的教程在 Youtube 上的“初學者圣誕 PCB 設計教程”下。
    發(fā)表于 06-29 08:00

    用Verilog/SystemVerilog快速實現(xiàn)一個加法

    )=>s,即對層級間不做任何的操作。上面的加法我們在加法的每個層級添加寄存器:僅在
    發(fā)表于 08-01 14:29

    采用StratixⅡ FPGA器件提高加法性能并實現(xiàn)設計

    圖2列出了和傳統(tǒng)的4輸入LUT結(jié)構(gòu)的FPGA相比較,采用ALM的StratixⅡFPGA器件例化3輸入加法器的優(yōu)勢。從圖2可以清楚地看出,對于同樣3個2 b數(shù)據(jù)相加的邏輯結(jié)構(gòu),傳統(tǒng)4
    發(fā)表于 03-03 10:45 ?1253次閱讀
    采用StratixⅡ <b class='flag-5'>FPGA</b>器件提高<b class='flag-5'>加法</b><b class='flag-5'>樹</b>性能并<b class='flag-5'>實現(xiàn)</b>設計

    FPGA_ASIC-MAC在FPGA高效實現(xiàn)

    FPGA_ASIC-MAC在FPGA高效實現(xiàn)(理士電源技術有限公司)-該文檔為FPGA_AS
    發(fā)表于 08-04 19:03 ?8次下載
    <b class='flag-5'>FPGA</b>_ASIC-MAC在<b class='flag-5'>FPGA</b><b class='flag-5'>中</b>的<b class='flag-5'>高效</b><b class='flag-5'>實現(xiàn)</b>

    fpga實現(xiàn)加法和減法運算的方法是什么

    FPGA實現(xiàn)加法和減法運算非常簡單,實現(xiàn)乘法和除法可以用IP,那實現(xiàn)對數(shù)和指數(shù)運算該用什么
    發(fā)表于 08-05 09:37 ?1465次閱讀
    <b class='flag-5'>fpga</b><b class='flag-5'>實現(xiàn)</b><b class='flag-5'>加法</b>和減法運算的方法是什么

    基于FPGA實現(xiàn)Mem加法

    前段時間和幾個人閑談,看看在FPGA里面實現(xiàn)一個Mem加法器怎么玩兒
    的頭像 發(fā)表于 10-17 10:22 ?618次閱讀
    基于<b class='flag-5'>FPGA</b><b class='flag-5'>實現(xiàn)</b>Mem<b class='flag-5'>加法</b>器

    何在FPGA實現(xiàn)狀態(tài)機

    FPGA(現(xiàn)場可編程門陣列)實現(xiàn)狀態(tài)機是一種常見的做法,用于控制復雜的數(shù)字系統(tǒng)行為。狀態(tài)機能夠根據(jù)當前的輸入和系統(tǒng)狀態(tài),決定下一步的動作和新的狀態(tài)。這里,我們將詳細探討如何在
    的頭像 發(fā)表于 07-18 15:57 ?601次閱讀

    何在FPGA實現(xiàn)隨機數(shù)發(fā)生器

    分享如何在Xilinx Breadboardable Spartan-7 FPGA, CMOD S7實現(xiàn)4位偽隨機數(shù)發(fā)生器(PRNGs)。
    的頭像 發(fā)表于 08-06 11:20 ?676次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>FPGA</b><b class='flag-5'>中</b><b class='flag-5'>實現(xiàn)</b>隨機數(shù)發(fā)生器