Bootstrap

Verilog HDL实现12个数据的快速排序

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

;