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

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

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

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

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

在前面的文章中主要介紹了hash表及其鏈表的結(jié)構(gòu),以及key值的插入方法,既然有key值的插入,那就有key值的刪除,一種刪除是CPU通過重新刷新鏈表來刪除,另外一種就是FPGA刪除了,這里主要討論FPGA如何刪除鏈表。

應用場景

什么場景需要刪除hash表項呢?其實很多時候是不需要刪除表現(xiàn)的,比如最常見的類似bitmap的場景,還有字符串匹配場景等。但是如果hash表項需要老化的時候,就需要刪除hash鏈表了。

比如MAC地址學習建立的MAC地址表,需要在一定的間隔時間內(nèi)對所有的MAC地址進行一次老化。如果采用hash算法來實現(xiàn)MAC地址表,那就是要刪除長期沒有匹配的鏈表節(jié)點。我們知道,在鏈表插入的時候,需要對鏈表地址進行有效的管理,同理,當鏈表地址刪除后,也需要對鏈表地址重新管理,這里不討論具體業(yè)務,只討論在刪除鏈表的時候如何管理鏈表。

鏈表的刪除

我們先看一個例子,如下圖所示,hash桶后面跟了3個鏈表(鏈表的刪除,和鏈表實現(xiàn)的方案沒有關(guān)系)。那如何刪除鏈表呢?

圖片

假如我們要刪除addr1,刪除后的形式如下圖所示,只需要修改hash桶中下一鏈的地址,即把要刪除的鏈表節(jié)點addr1中下一鏈的地址addr2,寫回到hansh桶中即可。

圖片

但是這里有一個問題,我們鏈表可以從頭鏈到尾,即可以從上家找到下家,但是沒有辦法從下家找到上家。要刪除的鏈表節(jié)點addr1,知道下一鏈是addr2,但是它不知道它的上一鏈在哪里?這里就引出一個新的問題,雙向鏈表。

雙向鏈表

關(guān)于什么是雙向鏈表,這里不做解釋,網(wǎng)上有很多資料,這里先用一個圖來表示,我們把上面有3個鏈表的圖做一個改造,就可以得到雙向鏈表,如下圖所示:

圖片

每個鏈表節(jié)點包含有2個地址,左邊的地址指向上一鏈,右邊的地址指向下一鏈。比如keyB所在的鏈表節(jié)點,它的下一鏈地址為addr3,上一鏈地址為addr1。

再回到開始的問題,假如addr1要被刪除掉。我們知道addr1的上一鏈是NULL,即沒有鏈表,是hash桶,下一鏈是addr2,所以,我們只需要把addr1的下一鏈的地址addr2,寫入到addr1的上一鏈hash桶中,同時把add2的上一鏈指向addr1的上一鏈即可。

同理,如果要刪除addr2的時候,我們只需要把addr2的下一鏈的地址addr3,寫入addr2的上一鏈addr1中即可,同時把addr3的上一鏈指向addr2的上一鏈,即addr1即可,如下圖所示:

圖片

總結(jié)

當需要刪除鏈表的時候,需要做的就是2讀2寫。

1、分別讀出要刪除鏈表addr2的上一鏈和下一鏈(讀出addr1和addr3的內(nèi)容);

2、將要刪除鏈表addr2的上一鏈地址addr1,寫入下一鏈的上一鏈地址中;

3、將要刪除鏈表addr2的下一鏈地址addr3,寫入上一鏈的下一鏈地址中;

hash在FPGA中的設(shè)計已經(jīng)完全介紹完畢,這些都是一些基礎(chǔ)的典型方法,當然肯定還有其他一些更加優(yōu)秀的方案,歡迎討論交流。

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

    關(guān)注

    1620

    文章

    21510

    瀏覽量

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

    關(guān)注

    68

    文章

    10702

    瀏覽量

    209419
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    566

    瀏覽量

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

    關(guān)注

    0

    文章

    43

    瀏覽量

    7374
收藏 人收藏

    評論

    相關(guān)推薦

    RC4加密算法FPGA設(shè)計與實現(xiàn)

    ,它的局限性也逐漸暴露出來.很多計算機信息安全系統(tǒng),硬件加密手段被應用到設(shè)備來提高密碼運算速度和系統(tǒng)的安全性. 給出了一種RC4加密算法
    發(fā)表于 08-11 11:48

    FPGA實現(xiàn)PID算法

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

    實用AGC算法的工作原理及音頻FPGA的應用

    在-3~30 dB。通過以上4個步驟,可將實用AGC算法音頻信號處理的應用流程,設(shè)計如圖1所示。實用AGC算法的工作原理及
    發(fā)表于 10-21 16:42

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

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

    MACFPGA的高效實現(xiàn)

    乘累加器DSP算法中有著舉足輕重的地位?,F(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)稱重儀表的應用

    摘 要: 本文介紹了用FPGA實現(xiàn)的FIR算法,并對這種算法應用于汽車動態(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>的應用

    RC4加密算法FPGA設(shè)計與實現(xiàn)

    RC4加密算法FPGA設(shè)計與實現(xiàn),下來看看。
    發(fā)表于 05-10 11:24 ?27次下載

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

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

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

    算法進行深入研究,面向Xilinx K7 410T FPGA 芯片設(shè)計SHA-1算法實現(xiàn)結(jié)構(gòu),完成SHA-1算法編程,進行測試和后續(xù)應用。該
    發(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算法的原理和實際應用等幾個角度,對hash算法進行一個講解

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

    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)(3)

    在前面的文章主要介紹了hash表及其鏈表的結(jié)構(gòu),同時說明了如何讀取表項。那表項是如何寫入的了?前期的文章中有少量的提及,這里單獨寫一篇,介紹兩種常見的方案。
    的頭像 發(fā)表于 09-07 17:02 ?614次閱讀
    <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>(3)