<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
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
    +關注

    關注

    1603

    文章

    21328

    瀏覽量

    593251
  • 全加器
    +關注

    關注

    10

    文章

    59

    瀏覽量

    28109
  • 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 ?312次閱讀
    基于<b class='flag-5'>FPGA</b><b class='flag-5'>實現</b>Mem<b class='flag-5'>加法</b>器
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>