有没有人用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左右吧。
