FPGA排序-冒泡排序介绍

时间:2025-05-02  作者:Diven  阅读:0

排序算法是图像处理中经常使用算法,常见的排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序。
如下图:

FPGA排序-冒泡排序介绍

冒泡排序的排序过程如下:

整个排序的过程就是两两比较,然后做交换。整个过程的时间复杂度n的平方,也就是说需要交换很多次,如果把这么多交换过程都在一个时钟周期内完成的话,组合逻辑会很长,这样直接影响最后的时序。如果每个时钟周期进行一次交换的话,pipeline是会很长的。

那么我们可以通过变通一下,整个排序过程只做比较,而不做交换。每一次比较的结果都记录下来,然后设置一个计分板,通过计分板就可以知道排序的结果了。

首先是比较的过程:判断输入的两个数哪个大,使用1bit变量来记录比较结果。

然后是计分板的生成:

最后是排序结果的输出:

仿真代码如下:

仿真波形:

一共三级流水,占用的资源也不多,可以自己通过reduceBalancedTree来增加更多的流水。

照例提供SpinalHDL的源码,Verilog有需要的私聊:

 

import spinal.core._import spinal.lib._class BubbleSort(DATA_WIDTH: Int, DATA_NUM: Int) extends Component { val io = new Bundle { val dataIn = in Vec(UInt(DATA_WIDTH bits), DATA_NUM) val dataInValid = in Bool() val dataOut = out Vec(Reg(UInt(DATA_WIDTH bits)), DATA_NUM) val dataOutValid = out(Reg(Bool()) init False) } noIoPrefix() val sortV = Vec(Vec(UInt(1 bits), DATA_NUM - 1), DATA_NUM) for (i <- 0 until DATA_NUM) { for (j <- (i + 1) until DATA_NUM) { sort(io.dataIn(i), io.dataIn(j), sortV(i)(j - 1), sortV(j)(i)) } } val scoreBoard = Vec(Reg(UInt(log2Up(DATA_NUM - 1) bits)), DATA_NUM) for (i <- 0 until DATA_NUM) {        scoreBoard(i) := sortV(i).reduceBalancedTree(_ +^ _).resized    }    def sort(data1: UInt, data2: UInt, out1: UInt, out2: UInt): Unit = {        val out = Reg(UInt(1 bits))        when(data1 >= data2) { out := 1 } otherwise { out := 0 } out1 := out out2 := ~out1 } val dataTemp = RegNext(RegNext((io.dataIn))) val dataTempValid = RegNext(RegNext(io.dataInValid, init = False), init = False) for (i <- 0 until DATA_NUM) { io.dataOut(scoreBoard(i)) := dataTemp(i) } io.dataOutValid := dataTempValid}object BubbleSort extends App { SpinalConfig(inlineConditionalExpression = true,anonymSignalPrefix="temp").generateVerilog(new BubbleSort(8, 8))}

 


审核编辑:刘清

猜您喜欢

光敏电阻作为重要的光电元件,在各种电子设备中有着着关键作用。丽景电子作为行业内知名的光敏电阻制造商,凭借其高品质的产品和完善的服务,赢得了广大客户的认可。本文将...
2013-10-12 11:00:50

电阻器作为电子元器件中的基础组件,其性能和品质直接影响到整个电子设备的稳定性和寿命。SEI(世达柏科技)作为国内知名的铝壳电阻品牌,很好的产品性能和高品质的服务...
2018-12-21 19:08:26

电阻作为电子元件中的基础部件,其性能的优劣直接影响到整个电路的稳定性和可靠性。尤其是在恶劣环境下,防硫化电阻的需求日益增加。美磊(Mag.Layers)作为知名...
2017-11-16 11:46:30

专用开关是特定功能的电气装置,主要用于控制电路的通断。与普通开关不同,专用开关通常设计用于特定的设备或系统,以满足特定的操作需求。可以在工业、家居或商业环境中应...
2014-01-24 00:00:00



电子元器件领域,国产贴片电阻电容品牌近年来发展迅速,涌现出一批品质可靠、性价比高的选择。如果您正在寻找合适的国产品牌,以下几个值得关注:风华高科:作为国内MLC...
2024-11-29 10:26:30

基于PSOC6的人体交互式智能家居系统:本项目是基于PSOC6 进行开发,它具有以下特性 Psoc6-evaluationkit-062S2 是 RT-Thre...
2023-07-28 16:02:00

反光贴是特殊的材料,具有良好的反射性能,能够在光线照射下将光线反射回源头。通常由反光微珠或反光膜制成,应用于交通安全、广告标识、工艺品以及户外活动等领域。反光贴...
2011-03-28 00:00:00

排阻体积作为电子元器件中的重要组成部分,受到关注。三星(Samsung)作为全球知名的电子品牌,其排阻体积产品因质量过硬、性能稳定而受到认可。本文将围绕三星排阻...
2021-11-25 13:16:16