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

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

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

hash算法在FPGA中的實現(xiàn)(3)

CHANBAEK ? 來源:FPGA的現(xiàn)今未 ? 作者:FPGA的現(xiàn)今未 ? 2023-09-07 17:02 ? 次閱讀

在前面的文章中主要介紹了hash表及其鏈表的結(jié)構(gòu),同時說明了如何讀取表項。那表項是如何寫入的了?前期的文章中有少量的提及,這里單獨(dú)寫一篇,介紹兩種常見的方案。

CPU寫入表項

當(dāng)表項由CPU寫入的時候,FPGA只進(jìn)行讀?。ú楸恚┑臅r候,那么表項的插入就和FPGA沒有什么關(guān)系了。唯一要注意的就是表項要有一個CPU的寫接口。以hash表為例,如果hash表在內(nèi)部ram中,那么該ram就是CPU寫,邏輯讀;如果hash表在DDR中,那只需要給DDR留一個CPU的讀寫接口即可。

FPGA寫入表項

FPGA寫入表項的情況相對就要復(fù)雜一些,總體來說,不管什么場景,它都是用key計算hash值,然后查表,命中就返回命中結(jié)果,不命中就把key寫入表中的過程,用一個流程圖表示,如下圖所示:

圖片

hash表的寫入

根據(jù)前面hash表的構(gòu)建,我們討論一種情況,hash桶中存放多個key的場景,其他情況都是相似的處理方式。如下表所示:

圖片

當(dāng)key6來查表時,如果計算出hash值為3,如果讀取addr3,發(fā)現(xiàn)里面已經(jīng)有key6,所以查表得到的結(jié)果是key6命中的;

當(dāng)key10來查表時,如果計算出的hash值也是3,讀取addr3,發(fā)現(xiàn)里面沒有key10,返回的結(jié)果是不命中,同時還需要把key10和已經(jīng)存在的其他的key一起寫入addr3中,變成如下表:

圖片

hash鏈表的寫入

hash鏈表的寫入比hash表的寫入要復(fù)雜,因為除了key的寫入,還涉及到鏈表地址的回寫。以一個具體的例子說明插入鏈表的過程。

假定hash桶的內(nèi)容如下圖所示,此時假定hash桶已經(jīng)滿了,但是還沒有鏈表,hash桶中具體存放什么key,如何存放key不影響hash鏈表的寫入,所以不在這里說明。

圖片

現(xiàn)在來了一個keyA,其hash值對應(yīng)到上述hash桶,且沒有命中,由于hash桶已經(jīng)滿了,無法繼續(xù)寫入hash桶中,必須寫入鏈表了。因為將該keyA給到鏈表處理模塊,鏈表處理模塊會返回一個地址,addr1,表示當(dāng)前的keyA,已經(jīng)寫入鏈表,位置在addr1,這時需要把a(bǔ)ddr1這個地址寫回到hash桶中,這樣鏈表才能建立,如下圖所示,這樣在查表的時候,就可以根據(jù)hash桶中的addr1,得到keyA。

圖片

同理,如果繼續(xù)來一個keyB,hash值和keyA相同,在進(jìn)行key比較的時候,發(fā)現(xiàn)hash桶中沒有命中,同時鏈表addr1中也沒有命中,即keyB沒有命中,需要寫入hash桶或者h(yuǎn)ash鏈表中。我們在查表的時候得知addr1是最后一鏈(NULL),因此將keyB送給鏈表處理模塊,鏈表處理模塊返回一個地址,假定為addr2,表示keyB已經(jīng)寫入addr2中,這次也需要把地址addr2寫入地址addr1中,實現(xiàn)鏈表在尾部的插入。如下圖所示:

圖片

當(dāng)有key需要繼續(xù)插入時,以此類推。

對于鏈表插入的位置,可以在尾部插入外,也可以在頭部插入。當(dāng)鏈表處理模塊返回keyB寫入的地址addr2后,將該地址寫入hash桶中,同時將hash桶中的地址addr1和keyB寫入到addr2中。如下圖所示:

圖片

無論是從鏈表頭插入還是鏈表尾插入,都不影響最終結(jié)果,可以根據(jù)自己設(shè)計,選擇相對簡單的實現(xiàn)方案。

總結(jié)

hash鏈表的插入,一般就是CPU寫入和邏輯自己寫入。邏輯寫入的時候,無論hash桶或者鏈表每一鏈的結(jié)構(gòu)如何,都可以采用上述的方式插入鏈表。

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

    關(guān)注

    1620

    文章

    21510

    瀏覽量

    598994
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10702

    瀏覽量

    209417
  • Hash算法
    +關(guān)注

    關(guān)注

    0

    文章

    43

    瀏覽量

    7374
  • 鏈表
    +關(guān)注

    關(guān)注

    0

    文章

    80

    瀏覽量

    10520
收藏 人收藏

    評論

    相關(guān)推薦

    FPGA實現(xiàn)PID算法

    本帖最后由 發(fā)燒友LV 于 2014-12-29 20:13 編輯 FPGA實現(xiàn)PID算法,面臨著小數(shù)的計算,請問大家一般是怎么處
    發(fā)表于 12-03 21:59

    怎么spartan 3AN fpga實現(xiàn)遺傳算法

    我正在做我的遺傳算法項目,有沒有辦法斯巴達(dá)3AN fpga實現(xiàn)遺傳
    發(fā)表于 04-03 13:16

    1HASH函數(shù)軟件自保護(hù)的應(yīng)用

    本文介紹了HASH 函數(shù)的原理,并重點(diǎn)討論了其中的SHA-1 算法及其軟件自保護(hù)的應(yīng)用和實現(xiàn)技術(shù)。關(guān)鍵詞:
    發(fā)表于 08-07 09:28 ?17次下載

    MACFPGA的高效實現(xiàn)

    乘累加器DSP算法中有著舉足輕重的地位。現(xiàn)在,很多前端DSP算法都通過FPGA實現(xiàn)。結(jié)合FPGA
    發(fā)表于 08-06 14:41 ?29次下載

    AESSubBytes算法FPGA實現(xiàn)

    介紹了AES,SubBytes算法FPGA的具體實現(xiàn).構(gòu)造SubBytes的S-Box轉(zhuǎn)換表可以直接查找ROM表來
    發(fā)表于 11-09 16:42 ?25次下載

    FPGA實現(xiàn)的FIR算法汽車動態(tài)稱重儀表的應(yīng)用

    摘 要: 本文介紹了用FPGA實現(xiàn)的FIR算法,并對這種算法應(yīng)用于汽車動態(tài)稱重儀表的結(jié)果做了分析。實踐證明此
    發(fā)表于 03-11 13:46 ?841次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>實現(xiàn)</b>的FIR<b class='flag-5'>算法</b><b class='flag-5'>在</b>汽車動態(tài)稱重儀表<b class='flag-5'>中</b>的應(yīng)用

    3DES算法FPGA高速實現(xiàn)

    摘要:介紹3-DES算法的概要;以Xilinx公司SPARTANII結(jié)構(gòu)的XC2S100為例,闡述用FPGA高速實現(xiàn)3-DES
    發(fā)表于 06-20 14:22 ?1425次閱讀
    <b class='flag-5'>3</b>DES<b class='flag-5'>算法</b>的<b class='flag-5'>FPGA</b>高速<b class='flag-5'>實現(xiàn)</b>

    基于FPGA的SM3算法優(yōu)化設(shè)計與實現(xiàn)

    基于FPGA的SM3算法優(yōu)化設(shè)計與實現(xiàn)的論文
    發(fā)表于 10-29 17:16 ?5次下載

    FPGA實現(xiàn)CRC算法的程序

    Xilinx FPGA工程例子源碼:FPGA實現(xiàn)CRC算法的程序
    發(fā)表于 06-07 15:07 ?28次下載

    基于SHA-1算法的硬件設(shè)計及實現(xiàn)FPGA實現(xiàn)

    算法進(jìn)行深入研究,面向Xilinx K7 410T FPGA 芯片設(shè)計SHA-1算法實現(xiàn)結(jié)構(gòu),完成SHA-1算法編程,進(jìn)行測試和后續(xù)應(yīng)用。該
    發(fā)表于 10-30 16:25 ?4次下載
    基于SHA-1<b class='flag-5'>算法</b>的硬件設(shè)計及<b class='flag-5'>實現(xiàn)</b>(<b class='flag-5'>FPGA</b><b class='flag-5'>實現(xiàn)</b>)

    Hash算法簡介

    區(qū)塊Hash值時(即挖礦的過程),都使用了Hash算法,特別是SHA256算法。比特幣系統(tǒng)本身也就是加密算法的衍生物。
    的頭像 發(fā)表于 06-08 14:01 ?4945次閱讀

    hash算法的原理和實際應(yīng)用等幾個角度,對hash算法進(jìn)行一個講解

    由于hash的原理是將輸入空間的值映射成hash空間內(nèi),而hash值的空間遠(yuǎn)小于輸入的空間。根據(jù)抽屜原理,一定會存在不同的輸入被映射成相同輸出的情況。那么作為一個好的hash
    的頭像 發(fā)表于 06-03 17:34 ?3162次閱讀
    從<b class='flag-5'>hash</b><b class='flag-5'>算法</b>的原理和實際應(yīng)用等幾個角度,對<b class='flag-5'>hash</b><b class='flag-5'>算法</b>進(jìn)行一個講解

    hash算法FPGA實現(xiàn)(1)

    FPGA的設(shè)計,尤其是通信領(lǐng)域,經(jīng)常會遇到hash算法
    的頭像 發(fā)表于 09-07 17:01 ?1001次閱讀
    <b class='flag-5'>hash</b><b class='flag-5'>算法</b><b class='flag-5'>在</b><b class='flag-5'>FPGA</b><b class='flag-5'>中</b>的<b class='flag-5'>實現(xiàn)</b>(1)

    hash算法FPGA實現(xiàn)(2)

    在前面的文章hash算法FPGA實現(xiàn)(一)
    的頭像 發(fā)表于 09-07 17:02 ?640次閱讀
    <b class='flag-5'>hash</b><b class='flag-5'>算法</b><b class='flag-5'>在</b><b class='flag-5'>FPGA</b><b class='flag-5'>中</b>的<b class='flag-5'>實現(xiàn)</b>(2)

    hash算法FPGA實現(xiàn)(4)

    在前面的文章主要介紹了hash表及其鏈表的結(jié)構(gòu),以及key值的插入方法,既然有key值的插入,那就有key值的刪除,一種刪除是CPU通過重新刷新鏈表來刪除,另外一種就是FPGA刪除了,這里主要討論
    的頭像 發(fā)表于 09-07 17:03 ?590次閱讀
    <b class='flag-5'>hash</b><b class='flag-5'>算法</b><b class='flag-5'>在</b><b class='flag-5'>FPGA</b><b class='flag-5'>中</b>的<b class='flag-5'>實現(xiàn)</b>(4)