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

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

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

FPGA設(shè)計中二分法查表算法的實現(xiàn)

CHANBAEK ? 來源:FPGA的現(xiàn)今未 ? 作者:FPGA的現(xiàn)今未 ? 2023-09-06 18:26 ? 次閱讀

二分化查找算法是在軟件中廣泛應(yīng)用的一種算法,那么在FPGA的設(shè)計中是否可以用這種算法呢?什么場景下會可能用到這種算法呢?

二分法簡介

這里先簡單的說明下二分法查找,不涉及具體的算法原理。要實現(xiàn)二分法查表,有一個前提,那就是這個表是一個有序表。

假定表的深度為N(從0到N-1),那么首先從N/2地址讀出內(nèi)容比較,如果待比較的值x比從表中讀出的值M小,說明x只可能位于0——(N/2-1)之間,然后采用同樣的方式從0——(N/2-1)中繼續(xù)查找;如果待比較的值x比從表中讀出的值M大,說明x只可能位于(N/2+1)——N-1之間,然后采用同樣的方式從(N/2+1)——N-1中繼續(xù)查找。

應(yīng)用場景

在FPGA設(shè)計中,什么場景可以用到二分法查找呢?只有一個條件,那就是表項是一個有序表。要得到一個有序表,有幾種情況:

1、表項由邏輯實現(xiàn)寫操作,那么在寫入的過程中,先要把表項中的內(nèi)容讀出來,和即將要寫入的內(nèi)容做排序后,再寫回。這種方案相對來說還是比較復(fù)雜的,尤其是在高性能的場景下。

2、表項由CPU實現(xiàn)寫操作,如果表項不需要動態(tài)更新,那這就是一件很容易的事情了,如果表項需要CPU來更新,那么也需要將表項讀出來后進行排序然后再寫入FPGA。

網(wǎng)絡(luò)通信中,有如下一種場景,就是收到的報文依據(jù)源IP地址進行過濾(不是真正意義上的防火墻),只允許特定的IP地址通過,IP地址的個數(shù)最多為1024個,由軟件來維護。當(dāng)然可以采用hash算法,實現(xiàn)稍微復(fù)雜點,也可以采用最原始的辦法,就是把每個IP地址讀出來比較,這種方案性能不穩(wěn)定,最差的情況有可能需要1024個cycle才能出結(jié)果。如果用二分法查找,最多只需要10次就可以出結(jié)果。

實現(xiàn)方案

知道了原理,其實該算法的方案實現(xiàn)是比較簡單的,就是通過跳表項的讀地址來實現(xiàn)比較,如下圖所示:

圖片

對min_addr和max_addr初始化后,計算出raddr,然后從raddr中讀出數(shù)據(jù)比較比較后,根據(jù)比較的結(jié)果來刷新min_addr或者max_addr,然后重新計算raddr的值,直到匹配中,或者min_addr=max_addr。

總結(jié)

在FPGA中需要查找的表項,如果能實現(xiàn)有序排列,采用二分法查找是一個不錯的選擇。相比其他算法,它在性能上保持一定優(yōu)勢的前提下,實現(xiàn)也比較簡單。

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

    關(guān)注

    1625

    文章

    21624

    瀏覽量

    601245
  • FPGA設(shè)計
    +關(guān)注

    關(guān)注

    9

    文章

    428

    瀏覽量

    26465
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4588

    瀏覽量

    92505
收藏 人收藏

    評論

    相關(guān)推薦

    如何用C語言實現(xiàn)高效查找(二分法

    今天給分享一下使用C語言實現(xiàn)二分算法,主要包含以下幾部分內(nèi)容:二分查找算法介紹二分查找
    的頭像 發(fā)表于 06-04 08:04 ?908次閱讀
    如何用C語言<b class='flag-5'>實現(xiàn)</b>高效查找(<b class='flag-5'>二分法</b>)

    Java常用排序算法&程序員必須掌握的8大排序算法+二分法查找

    Java常用排序算法&程序員必須掌握的8大排序算法+二分法查找
    發(fā)表于 10-19 19:33

    Labview實現(xiàn)二分法查找數(shù)值區(qū)間

    二分法是檢索里經(jīng)常用到的一種方法,可以實現(xiàn)對有序數(shù)組進行檢索,本程序通過二分法實現(xiàn)對數(shù)據(jù)進行區(qū)間匹配,并輸出最小匹配區(qū)間和匹配區(qū)間的索引值,尤其適合多段函數(shù)的數(shù)值計算。
    發(fā)表于 04-18 13:22

    淺析漸近表示二分法

    算法圖解》NOTE 1 算法的漸近表示以及二分法
    發(fā)表于 10-10 10:58

    高信噪比條件下(大于40dB)獲得極值的算法

    對于實時測控系統(tǒng),尋找單一通道的極值可以歸結(jié)為一維極小化問題的搜索,常見的算法二分法、牛頓、黃金分割法、Brent 等[1]。這些算法
    發(fā)表于 04-15 09:11 ?21次下載

    適合于單片機實現(xiàn)的極值搜索算法

    在測控系統(tǒng)中,極值通常是表征信號特性最有意義的參量之一。對于實時測控系統(tǒng),尋找單一通道的極值可以歸結(jié)為一維極小化問題的搜索,常見的算法二分法、牛頓、黃金
    發(fā)表于 05-18 13:20 ?33次下載

    CRC(查表)-表的由來

    利用查表實現(xiàn)CRC算法,CRC算法廣泛應(yīng)用與各行業(yè),查表
    發(fā)表于 01-06 11:29 ?15次下載

    java實現(xiàn)計算方法中的算法綜合

    利用java實現(xiàn)了計算方法中的各種算法,包括:雅可比迭代、高斯-賽德爾迭代、拉格朗日差值、列主元高斯消去、不含列主元高斯約當(dāng)、高斯-約當(dāng)消去、牛頓插值、牛頓迭代、次多項式擬合、一次
    發(fā)表于 04-25 10:54 ?0次下載

    基于二分法與移動Sink的無線傳感器網(wǎng)絡(luò)數(shù)據(jù)收集協(xié)議

    傳感器節(jié)點能量的有限性,嚴(yán)重制約了無線傳感器網(wǎng)絡(luò)的推廣與發(fā)展。因此,如何改善傳感器節(jié)點能源的利用率、節(jié)約能耗以及提高整個網(wǎng)絡(luò)的生存周期成為該領(lǐng)域研究者面臨的挑戰(zhàn)之一。 為延長網(wǎng)絡(luò)生存周期,提出一種基于二分法與移動Sink的無線傳感器網(wǎng)絡(luò)數(shù)據(jù)收集協(xié)
    發(fā)表于 03-12 10:43 ?0次下載
    基于<b class='flag-5'>二分法</b>與移動Sink的無線傳感器網(wǎng)絡(luò)數(shù)據(jù)收集協(xié)議

    圖像處理算法二分查找

    二分查找又稱折半查找,優(yōu)點是比較次數(shù)少,查找速度快,平均性能好;其缺點是要求待查表為有序表,且插入刪除困難。
    的頭像 發(fā)表于 03-17 11:29 ?4843次閱讀

    二分法查找在實際電路中的應(yīng)用

    進制搜索實現(xiàn)的逐次逼近常常用于需要校準(zhǔn)的場景中,比如SAR ADC、DRAM ZQ 校準(zhǔn)、儀器校準(zhǔn)算法等。
    的頭像 發(fā)表于 10-29 10:03 ?6215次閱讀
    <b class='flag-5'>二分法</b>查找在實際電路中的應(yīng)用

    現(xiàn)代混合云服務(wù)對未來托管數(shù)據(jù)中心的意義

    與以前的版本不同,新的混合云框架更易于部署,并且消除了“云計算vs托管數(shù)據(jù)中心”的二分法。
    的頭像 發(fā)表于 08-21 11:00 ?1818次閱讀

    二分搜索算法運用的框架套路

    我們前文 我作了首詩,保你閉著眼睛也能寫對二分查找 詳細介紹了二分搜索的細節(jié)問題,探討了「搜索一個元素」,「搜索左側(cè)邊界」,「搜索右側(cè)邊界」這三個情況,教你如何寫出正確無 bug 的二分搜索
    的頭像 發(fā)表于 08-25 16:06 ?1792次閱讀

    Python實現(xiàn)所有算法-基本牛頓

    Python實現(xiàn)所有算法-二分法 Python實現(xiàn)所有算法-力系統(tǒng)是否靜態(tài)平衡 Python實現(xiàn)
    的頭像 發(fā)表于 07-13 10:40 ?1603次閱讀

    如何理解二分查找算法

    本文就來探究幾個最常用的二分查找場景:尋找一個數(shù)、尋找左側(cè)邊界、尋找右側(cè)邊界。 而且,我們就是要深入細節(jié),比如不等號是否應(yīng)該帶等號,mid 是否應(yīng)該加一等等。分析這些細節(jié)的差異以及出現(xiàn)這些差異的原因,保證你能靈活準(zhǔn)確地寫出正確的二分查找
    的頭像 發(fā)表于 04-19 11:10 ?591次閱讀
    如何理解<b class='flag-5'>二分</b>查找<b class='flag-5'>算法</b>