FPGA算法.流水线二分法实现

科技   2024-05-01 21:25   湖南  



最近狼哥写一个图像算法,需要将一个指定的数,在一个数组中,查找到第一个比指定的数大的索引值,这个事情,如果不要求流水处理的话,最简单的办法就是逐个查询查询就完事了,但是由于需要做流水实现,同时还需要控制资源使用,单纯的使用查询也没有问题,但是资源上不够划算,所以这个时候就需要我们的二分法上线了,帮助我们快速的实现查找定位工作。

再写代码之前,我们的知道二分法是个啥玩意,维基百科二分法定义如下:在计算机科学中,二分查找算法也称折半搜索算法,对数搜索算法,是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半

二分法里说了两个核心的点,一个是有序数组,这个就限定了它的使用范围,必须是有序的序列,无序的没法用;第二个是每一次搜索范围缩小一半,这个就极大的加快了搜索速度。举个简单的例子,对于256个数据的有序数组,顺序查找最慢需要256个周期,而二分法则只需要8个周期即可。

二分法实现时需要注意两个问题,一是跳出循环的条件,另一个是左右端点的变化规则,这里我们以闭区间的情况来说明,即搜索范围为[L,R],这里L和R都是可以取到值。此种情况下:

跳出循环的条件为 L <=R

左右端点变化规则如下:

定义mid为中值,即 mid = (L + R)/ 2;目标值为T,数组为X[n],        如果X[mid] < T, L = mid + 1; 否则 R= mid - 1。

以上就是二分法的原理和实现需要注意的事项点。基于此,狼哥做了一个流水线的二分查找算法的实现,可以流水搜索特定值索引值,适合图像算法的流水线实现,算法可以在256个数据中,一个周期给出一个搜索结果,整个模块消耗资源也不多,1k左右的lut即可。matlab实现代码可以去星球获取。



图像课程,开发板-->淘宝店铺:胡狼FPGA   

咨询微信:MyWork666888

*******往期精彩文章列表********

CLAHE算法课程上新

2024功利性学习目录合集

Zynq系统化入门进阶详细教程

基于Zynq的图像处理入门课程

FPGA图像Canny四图拼接显示项目

FPGA之Mpsoc的VCU压缩解压demo

FPGA图像无极缩放.Demo2
FPGA图像算法.无极缩放
FPGA图像算法.导向滤波
狼板001PLUS上线,首发优惠进行中
点击上面链接查看详情







胡狼FPGA
专注FPGA开发,图像接口和图像算法开发,技术之余扯扯家常,让FPGA服务生活,让生活更美好
 最新文章