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
    +关注

    关注

    1603

    文章

    21328

    浏览量

    593275
  • FPGA设计
    +关注

    关注

    9

    文章

    425

    浏览量

    26273
  • 算法
    +关注

    关注

    23

    文章

    4458

    浏览量

    90764
收藏 人收藏

    评论

    相关推荐

    [5.2.1]--5.2二分法查找

    数据结构数据结构与算法
    jf_75936199
    发布于 :2023年03月15日 10:53:36

    算法基础:3 二分法求方程的根(1)#算法基础

    算法程序设计
    jf_49750429
    发布于 :2023年04月15日 11:46:56

    算法基础:3 二分法求方程的根(2)#算法基础

    算法程序设计
    jf_49750429
    发布于 :2023年04月15日 11:47:23

    基于查表的快速CRC算法设计

    基于查表的快速CRC算法设计
    发表于 08-20 20:01

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

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

    简单的查找算法

    ; } return 0;} 3. 有序数组表的查找:一般使用二分法查找。通过判断查找元素与中间元素(mid)的大小来决定下一次的查找在低分区还是高分区。查找代码:intbinarySerch(int key
    发表于 12-27 22:33

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

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

    怎么实现Matlab电路计算未知电阻

    无法直接建立系统,我想到的办法是首先假设一个电阻值,然后建立系统进行计算,再由系统反馈的量确定这个电阻值不是否符合要求。是一种试错式的求解办法。类似于牛顿二分法
    发表于 05-24 06:00

    基于逻辑回归算法的乳腺癌肿瘤二分类预测

    ML之LoR:基于LoR(逻辑回归)算法对乳腺癌肿瘤进行二分类预测(良恶性)
    发表于 06-18 07:06

    浅析渐近表示二分法

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

    请问怎样去实现二分压电路?

    实现二分压电路的经典方法有哪些?怎样来实现这种二分压电路?
    发表于 04-20 06:09

    基于二分图构造LDPC码的校验矩阵算法及性能解析,不看肯定后悔

    依据二分图构造LDPC码的算法矩阵及性能解析,看不出必然
    发表于 06-22 06:52

    MCU裸系统下快速平方根实现相关资料推荐

    个快速平方根。以下是一个典型的逼近实现的快速平方根函数,只用了整数乘法就可以做到32位范围内的整数平方根计算,并且计算中边界值始终按照二分法定位可以显著缩短查找逼近时间,算法复杂度近
    发表于 12-08 08:26

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

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

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

    如果大家学过C或者C++,应该有二分法查找的概念,先把这堆数分成2堆,把第一堆的最后一个数跟55比较,发现55比它大,所以55应该在第2堆。再重复这个过程,大概需要7次就可以确定55的位置。
    的头像 发表于 11-26 09:29 2670次阅读
    浅析<b class='flag-5'>二分法</b>查找在实际电路中的应用