Verilog HDL实现12个数据的快速排序
排序原理
本文介绍的排序是并行排序,需要消耗一定的逻辑资源。输入为12个数据,输出是这12个数据经过降序排序后的序号。
算法可以调节输入数据的位宽,默认为12bit。下面介绍排序的原理。
要确定一个数据在N个数据中降序排序的序号,其实就是计算比此数大的数有多少个。根据这个原理,在FPGA中可以使用generate for语句生成N个模块,该模块的输入为当前数据的索引,当前数据,以及所有数据,输出为当前数据排序后的序号。
matlab实现
首先采用matlab进行编写,代码如下:
for i = 1:N
for j = 1:N
if(data(i) < data(j))
score(i, j) = 1;
elseif(data(i) == data(j))
if(i <= j)
score(i,j) = 0;
else
score(i,j) = 1;
end
else
score(i,j) = 0;
end
end
end
核心代码其实就是与所有数据比较大小,比较的结果存入score数组,数组共有12个元素中,这样的数组共有12个。当前数据<某个数据时,将其对应的score置为1,相等时需要判断下标的大小,若下标小于当前数据的下标,则将score