微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 有没有人用FPGA实现过堆排序或者快速排序啊!?

有没有人用FPGA实现过堆排序或者快速排序啊!?

时间:10-02 整理:3721RD 点击:
我现在要做2048点的数据排序,请问用什么排序方法比较适合FPGA啊?

搞一个大一点的RAM不就可以实现了么?估计你这2048点的数据输入进去,同时肯定就能输出排序完成的结果了,这个应该不难的,就是一比较。



   我考虑过用一个RAM来做,但是没次都要改变地址来读出上一个节点的数来比较。而且没次读出一个数有两个周期的延时,每插入一个节点比较次数不同,时序比较难控制。如果用一个reg [15:0] men[2047:0] 的数字来做是不是要方便点啊?


资源消耗太大了



    那我只有在时序控制上再看看了,RAM每次读一个数要等2个周期比较烦,不是连续读数就不好弄了......

用RAM,sdram等等就是对写入读出地址进行控制,只是FPGA中RAM资源有限,不适合做大数据的缓存,但是如果你自己写控制sdram的逻辑,就稍微负载一点。
如果用ip核可能好一点,看具体fpga型号了。

如果那2048个数据点每个值都不一样,而且取值范围不是很大的话,比如就是1,2,3,..,2048或是1001,1002,1003,...,3048,那只需一个映射模块,将数据值映射RAM地址值,这样一个数据进来,直接就写入RAM,无须再读RAM作比较。


     我用的是Cyclone V FPGA,资源肯定是够用了,用RAM来缓存是可以。只是感觉地址线控制比较复杂,地址不断变化,想问问大家有没有什么好点的建议。所以想用数组来做,不过似乎比较耗LE。



   肯定是无规律的有符号数排序啊,如果输入有规律,也不需要这么麻烦了、、、、



   可以用一个小软核配合FPGA排序,所需要的资源不一定比直接硬件实现多



    我最主要是要找中位数不是找最大最小值,不然直接冒泡法处理会简单很多。我用102.4MHz晶振,希望排序速度在ms级别。另外堆排序不需要全并行比较,而且也不可能一个周期从RAM中读出这么多数来比较吧。所以我觉得还是在地址线控制上试试吧。

你可以试试vivado hls之类的软件,很方便的。



    恩,我没用过FPGA上搭建的系统,等做完这个任务,好好去学下软核。



    不一定吧,如果用冒泡法,要用(2048+1)*2048/2次比较,这都快21ms了,所以只能用堆排序和快速排序了。



    而且我希望是在ms级别以下,几百us左右吧。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top