硬件(fpga)中的快速/区域优化排序



我正在尝试使用vhdl对8位数字数组进行排序。我正在尝试找到一种方法来优化延迟,另一种方法可以使用更少的硬件。

数组的大小是固定的。但我也有兴趣将功能扩展到可变长度。到目前为止,我已经遇到了3种算法:

  1. Bathcher平行
  2. 方法绿色排序
  3. Van Vorris Sort

哪一个会做得最好?还有其他的方法吗?谢谢。

关于这个问题有很多研究文章。你可以在网上搜索一下。我搜索了"排序网络",并提出了许多不同算法的比较,以及它们如何适合FPGA。

你选择的算法将在很大程度上取决于哪个参数是最重要的优化,即延迟,面积等。另一个重要因素是值存储在排序开始和结束时的位置。如果它们存储在寄存器中,可以一次访问它们,但是如果你必须从有限宽度的内存中读取它们,你应该在实现中也考虑到这一点,因为这样你就必须对流中的值进行排序,并在将其保存回内存之前重新排列该流。

就我个人而言,我会考虑一些时间常数的东西,比如归并排序,它有一个固定的排序时间,所以你可以很容易地为一个固定大小的数组安排排序。然而,我不确定这对任意大小的数组有多好。您可能必须设置数组大小的上限,并且如果所有数据都存储在寄存器中,这种方法效果最好。

我在Knuth的一本书中读到过这个,根据那本书,Batcher的并行合并排序是最快的算法,也是最有效的硬件。

最新更新