我正在尝试使用vhdl对8位数字进行排序。 我试图找出一种优化延迟的方法,另一种方法是使用较少的硬件。
数组的大小是固定的。但我也有兴趣将功能扩展到可变长度。 到目前为止,我遇到过3种算法:
哪一个能做得最好?我还应该关注其他方法吗? 感谢。
答案 0 :(得分:0)
在这件事上有很多研究文章。您可以尝试在网上搜索它。我搜索了“排序网络”,并提出了很多不同算法的比较以及它们与FPGA的匹配程度。
您选择的算法将在很大程度上取决于哪个参数最适合优化,即延迟,区域等。另一个重要因素是值存储在排序的开头和结尾。如果它们存储在寄存器中,则可以立即访问所有寄存器,但是如果必须从宽度有限的存储器中读取它们,则应该在实现中考虑它们,因为那样您将不得不在流中对值进行排序,并在将其保存回内存之前重新排列该流。
就个人而言,我会考虑像merge-sort这样的时间常量,它有一个恒定的排序时间,因此您可以轻松地为固定大小的数组安排排序。然而,我不确定它是如何扩展或适用于任意大小的数组。您可能必须设置数组大小的上限,如果所有数据都存储在寄存器中,这种方法也会起作用。
答案 1 :(得分:0)
我在Knuth的一本书中读过这篇文章,根据那本书,Batcher的并行合并排序是最快的算法,也是最有效的硬件。