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

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

3天内不再提示

FPGA设计中二分法查表算法的实现

CHANBAEK 来源:FPGA的现今未 作者:FPGA的现今未 2023-09-06 18:26 次阅读

二分化查找算法是在软件中广泛应用的一种算法,那么在FPGA的设计中是否可以用这种算法呢?什么场景下会可能用到这种算法呢?

二分法简介

这里先简单的说明下二分法查找,不涉及具体的算法原理。要实现二分法查表,有一个前提,那就是这个表是一个有序表。

假定表的深度为N(从0到N-1),那么首先从N/2地址读出内容比较,如果待比较的值x比从表中读出的值M小,说明x只可能位于0——(N/2-1)之间,然后采用同样的方式从0——(N/2-1)中继续查找;如果待比较的值x比从表中读出的值M大,说明x只可能位于(N/2+1)——N-1之间,然后采用同样的方式从(N/2+1)——N-1中继续查找。

应用场景

在FPGA设计中,什么场景可以用到二分法查找呢?只有一个条件,那就是表项是一个有序表。要得到一个有序表,有几种情况:

1、表项由逻辑实现写操作,那么在写入的过程中,先要把表项中的内容读出来,和即将要写入的内容做排序后,再写回。这种方案相对来说还是比较复杂的,尤其是在高性能的场景下。

2、表项由CPU实现写操作,如果表项不需要动态更新,那这就是一件很容易的事情了,如果表项需要CPU来更新,那么也需要将表项读出来后进行排序然后再写入FPGA。

网络通信中,有如下一种场景,就是收到的报文依据源IP地址进行过滤(不是真正意义上的防火墙),只允许特定的IP地址通过,IP地址的个数最多为1024个,由软件来维护。当然可以采用hash算法,实现稍微复杂点,也可以采用最原始的办法,就是把每个IP地址读出来比较,这种方案性能不稳定,最差的情况有可能需要1024个cycle才能出结果。如果用二分法查找,最多只需要10次就可以出结果。

实现方案

知道了原理,其实该算法的方案实现是比较简单的,就是通过跳表项的读地址来实现比较,如下图所示:

图片

对min_addr和max_addr初始化后,计算出raddr,然后从raddr中读出数据比较比较后,根据比较的结果来刷新min_addr或者max_addr,然后重新计算raddr的值,直到匹配中,或者min_addr=max_addr。

总结

在FPGA中需要查找的表项,如果能实现有序排列,采用二分法查找是一个不错的选择。相比其他算法,它在性能上保持一定优势的前提下,实现也比较简单。

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

    关注

    1631

    文章

    21806

    浏览量

    606691
  • FPGA设计
    +关注

    关注

    9

    文章

    428

    浏览量

    26665
  • 算法
    +关注

    关注

    23

    文章

    4633

    浏览量

    93474
收藏 人收藏

    评论

    相关推荐

    如何用C语言实现高效查找(二分法

    今天给分享一下使用C语言实现二分算法,主要包含以下几部分内容:二分查找算法介绍二分查找
    的头像 发表于 06-04 08:04 1291次阅读
    如何用C语言<b class='flag-5'>实现</b>高效查找(<b class='flag-5'>二分法</b>)

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

    Java常用排序算法&程序员必须掌握的8大排序算法+二分法查找
    发表于 10-19 19:33

    Labview实现二分法查找数值区间

    二分法是检索里经常用到的一种方法,可以实现对有序数组进行检索,本程序通过二分法实现对数据进行区间匹配,并输出最小匹配区间和匹配区间的索引值,尤其适合多段函数的数值计算。
    发表于 04-18 13:22

    浅析渐近表示二分法

    算法图解》NOTE 1 算法的渐近表示以及二分法
    发表于 10-10 10:58

    高信噪比条件下(大于40dB)获得极值的算法

    对于实时测控系统,寻找单一通道的极值可以归结为一维极小化问题的搜索,常见的算法二分法、牛顿、黄金分割法、Brent 等[1]。这些算法
    发表于 04-15 09:11 21次下载

    适合于单片机实现的极值搜索算法

    在测控系统中,极值通常是表征信号特性最有意义的参量之一。对于实时测控系统,寻找单一通道的极值可以归结为一维极小化问题的搜索,常见的算法二分法、牛顿、黄金
    发表于 05-18 13:20 33次下载

    CRC(查表)-表的由来

    利用查表实现CRC算法,CRC算法广泛应用与各行业,查表
    发表于 01-06 11:29 15次下载

    java实现计算方法中的算法综合

    利用java实现了计算方法中的各种算法,包括:雅可比迭代、高斯-赛德尔迭代、拉格朗日差值、列主元高斯消去、不含列主元高斯约当、高斯-约当消去、牛顿插值、牛顿迭代、次多项式拟合、一次
    发表于 04-25 10:54 0次下载

    基于二分法与移动Sink的无线传感器网络数据收集协议

    传感器节点能量的有限性,严重制约了无线传感器网络的推广与发展。因此,如何改善传感器节点能源的利用率、节约能耗以及提高整个网络的生存周期成为该领域研究者面临的挑战之一。 为延长网络生存周期,提出一种基于二分法与移动Sink的无线传感器网络数据收集协
    发表于 03-12 10:43 0次下载
    基于<b class='flag-5'>二分法</b>与移动Sink的无线传感器网络数据收集协议

    图像处理算法二分查找

    二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。
    的头像 发表于 03-17 11:29 4935次阅读

    二分法查找在实际电路中的应用

    进制搜索实现的逐次逼近常常用于需要校准的场景中,比如SAR ADC、DRAM ZQ 校准、仪器校准算法等。
    的头像 发表于 10-29 10:03 6397次阅读
    <b class='flag-5'>二分法</b>查找在实际电路中的应用

    现代混合云服务对未来托管数据中心的意义

    与以前的版本不同,新的混合云框架更易于部署,并且消除了“云计算vs托管数据中心”的二分法
    的头像 发表于 08-21 11:00 1886次阅读

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

    我们前文 我作了首诗,保你闭着眼睛也能写对二分查找 详细介绍了二分搜索的细节问题,探讨了「搜索一个元素」,「搜索左侧边界」,「搜索右侧边界」这三个情况,教你如何写出正确无 bug 的二分搜索
    的头像 发表于 08-25 16:06 1877次阅读

    Python实现所有算法-基本牛顿

    Python实现所有算法-二分法 Python实现所有算法-力系统是否静态平衡 Python实现
    的头像 发表于 07-13 10:40 1697次阅读

    如何理解二分查找算法

    本文就来探究几个最常用的二分查找场景:寻找一个数、寻找左侧边界、寻找右侧边界。 而且,我们就是要深入细节,比如不等号是否应该带等号,mid 是否应该加一等等。分析这些细节的差异以及出现这些差异的原因,保证你能灵活准确地写出正确的二分查找
    的头像 发表于 04-19 11:10 680次阅读
    如何理解<b class='flag-5'>二分</b>查找<b class='flag-5'>算法</b>