0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

hash算法在FPGA中的实现(4)

CHANBAEK 来源:FPGA的现今未 作者:FPGA的现今未 2023-09-07 17:03 次阅读

在前面的文章中主要介绍了hash表及其链表的结构,以及key值的插入方法,既然有key值的插入,那就有key值的删除,一种删除是CPU通过重新刷新链表来删除,另外一种就是FPGA删除了,这里主要讨论FPGA如何删除链表。

应用场景

什么场景需要删除hash表项呢?其实很多时候是不需要删除表现的,比如最常见的类似bitmap的场景,还有字符串匹配场景等。但是如果hash表项需要老化的时候,就需要删除hash链表了。

比如MAC地址学习建立的MAC地址表,需要在一定的间隔时间内对所有的MAC地址进行一次老化。如果采用hash算法来实现MAC地址表,那就是要删除长期没有匹配的链表节点。我们知道,在链表插入的时候,需要对链表地址进行有效的管理,同理,当链表地址删除后,也需要对链表地址重新管理,这里不讨论具体业务,只讨论在删除链表的时候如何管理链表。

链表的删除

我们先看一个例子,如下图所示,hash桶后面跟了3个链表(链表的删除,和链表实现的方案没有关系)。那如何删除链表呢?

图片

假如我们要删除addr1,删除后的形式如下图所示,只需要修改hash桶中下一链的地址,即把要删除的链表节点addr1中下一链的地址addr2,写回到hansh桶中即可。

图片

但是这里有一个问题,我们链表可以从头链到尾,即可以从上家找到下家,但是没有办法从下家找到上家。要删除的链表节点addr1,知道下一链是addr2,但是它不知道它的上一链在哪里?这里就引出一个新的问题,双向链表。

双向链表

关于什么是双向链表,这里不做解释,网上有很多资料,这里先用一个图来表示,我们把上面有3个链表的图做一个改造,就可以得到双向链表,如下图所示:

图片

每个链表节点包含有2个地址,左边的地址指向上一链,右边的地址指向下一链。比如keyB所在的链表节点,它的下一链地址为addr3,上一链地址为addr1。

再回到开始的问题,假如addr1要被删除掉。我们知道addr1的上一链是NULL,即没有链表,是hash桶,下一链是addr2,所以,我们只需要把addr1的下一链的地址addr2,写入到addr1的上一链hash桶中,同时把add2的上一链指向addr1的上一链即可。

同理,如果要删除addr2的时候,我们只需要把addr2的下一链的地址addr3,写入addr2的上一链addr1中即可,同时把addr3的上一链指向addr2的上一链,即addr1即可,如下图所示:

图片

总结

当需要删除链表的时候,需要做的就是2读2写。

1、分别读出要删除链表addr2的上一链和下一链(读出addr1和addr3的内容);

2、将要删除链表addr2的上一链地址addr1,写入下一链的上一链地址中;

3、将要删除链表addr2的下一链地址addr3,写入上一链的下一链地址中;

hash在FPGA中的设计已经完全介绍完毕,这些都是一些基础的典型方法,当然肯定还有其他一些更加优秀的方案,欢迎讨论交流。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1626

    文章

    21665

    浏览量

    601792
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10824

    浏览量

    211126
  • 字符串
    +关注

    关注

    1

    文章

    577

    浏览量

    20485
  • Hash算法
    +关注

    关注

    0

    文章

    43

    浏览量

    7379
收藏 人收藏

    评论

    相关推荐

    RC4加密算法FPGA设计与实现

    ,它的局限性也逐渐暴露出来.很多计算机信息安全系统,硬件加密手段被应用到设备来提高密码运算速度和系统的安全性. 给出了一种RC4加密算法
    发表于 08-11 11:48

    FPGA实现PID算法

    本帖最后由 发烧友LV 于 2014-12-29 20:13 编辑 FPGA实现PID算法,面临着小数的计算,请问大家一般是怎么处
    发表于 12-03 21:59

    1HASH函数软件自保护的应用

    本文介绍了HASH 函数的原理,并重点讨论了其中的SHA-1 算法及其软件自保护的应用和实现技术。关键词:
    发表于 08-07 09:28 17次下载

    MACFPGA的高效实现

    乘累加器DSP算法中有着举足轻重的地位。现在,很多前端DSP算法都通过FPGA实现。结合FPGA
    发表于 08-06 14:41 29次下载

    AESSubBytes算法FPGA实现

    介绍了AES,SubBytes算法FPGA的具体实现.构造SubBytes的S-Box转换表可以直接查找ROM表来
    发表于 11-09 16:42 25次下载

    FPGA实现的FIR算法汽车动态称重仪表的应用

    摘 要: 本文介绍了用FPGA实现的FIR算法,并对这种算法应用于汽车动态称重仪表的结果做了分析。实践证明此
    发表于 03-11 13:46 871次阅读
    <b class='flag-5'>FPGA</b><b class='flag-5'>实现</b>的FIR<b class='flag-5'>算法</b><b class='flag-5'>在</b>汽车动态称重仪表<b class='flag-5'>中</b>的应用

    RC4加密算法FPGA设计与实现

    RC4加密算法FPGA设计与实现,下来看看。
    发表于 05-10 11:24 27次下载

    FPGA实现CRC算法的程序

    Xilinx FPGA工程例子源码:FPGA实现CRC算法的程序
    发表于 06-07 15:07 28次下载

    hash表的实现原理

    软件开发,一个hash表相当于把n个key随机放入到b个bucket,以实现n个数据b个单位空间的存储。 我们发现
    发表于 09-28 14:31 0次下载
    <b class='flag-5'>hash</b>表的<b class='flag-5'>实现</b>原理

    基于SHA-1算法的硬件设计及实现FPGA实现

    算法进行深入研究,面向Xilinx K7 410T FPGA 芯片设计SHA-1算法实现结构,完成SHA-1算法编程,进行测试和后续应用。该
    发表于 10-30 16:25 4次下载
    基于SHA-1<b class='flag-5'>算法</b>的硬件设计及<b class='flag-5'>实现</b>(<b class='flag-5'>FPGA</b><b class='flag-5'>实现</b>)

    Hash算法简介

    区块Hash值时(即挖矿的过程),都使用了Hash算法,特别是SHA256算法。比特币系统本身也就是加密算法的衍生物。
    的头像 发表于 06-08 14:01 5012次阅读

    hash算法的原理和实际应用等几个角度,对hash算法进行一个讲解

    由于hash的原理是将输入空间的值映射成hash空间内,而hash值的空间远小于输入的空间。根据抽屉原理,一定会存在不同的输入被映射成相同输出的情况。那么作为一个好的hash
    的头像 发表于 06-03 17:34 3235次阅读
    从<b class='flag-5'>hash</b><b class='flag-5'>算法</b>的原理和实际应用等几个角度,对<b class='flag-5'>hash</b><b class='flag-5'>算法</b>进行一个讲解

    hash算法FPGA实现(1)

    FPGA的设计,尤其是通信领域,经常会遇到hash算法
    的头像 发表于 09-07 17:01 1169次阅读
    <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'>实现</b>(1)

    hash算法FPGA实现(2)

    在前面的文章hash算法FPGA实现(一)
    的头像 发表于 09-07 17:02 747次阅读
    <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'>实现</b>(2)

    hash算法FPGA实现(3)

    在前面的文章主要介绍了hash表及其链表的结构,同时说明了如何读取表项。那表项是如何写入的了?前期的文章中有少量的提及,这里单独写一篇,介绍两种常见的方案。
    的头像 发表于 09-07 17:02 725次阅读
    <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'>实现</b>(3)