FPGA排序-冒泡排序介绍

时间:2025-11-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))}

 


审核编辑:刘清

猜您喜欢

EWARRY艾维伦熔断器凭借其独特的设计理念和很好的性能,成为了行业内的佼佼者。本文将深入探讨艾维伦熔断器的核心特性及其在多个应用领域的适用性,旨在为读者提供全...
2023-05-12 21:08:30

随着5G、人工智能、新能源汽车等新兴产业的快速发展,电子设备的性能不断提升,随之而来的散热问题也日益突出。而热管理芯片作为解决这一难题的关键器件,正迎来前所未有...
2024-05-07 00:00:00

检流电阻是应用于电路中的元器件,主要用于测量电流的大小。通过产生一个与电流成正比的电压降来实现电流的检测。在电力系统、电子设备和工业自动化等领域,检流电阻是重要...
2025-04-18 13:01:43


PTC热敏电阻作为重要的电子元件,应用于过流保护、温度检测和电路保护等领域。TOKEN(德键)作为国内知名的PTC热敏电阻品牌,优良的品质和稳定的性能赢得了市场...
2013-11-17 11:37:26

贴片电阻上的5112并不是直接表示阻值,而是采用了一种数字编码方式。其中,前两位数字51表示有效数字,后两位数字12表示10的幂次方。具体来说,51代表有效数字...
2024-11-29 10:26:32

在选择吹尘器时,了解其规格尺寸非常重要。吹尘器的规格一般包括风力、风速、噪音等级和电源要求等。常见的吹尘器风速范围在每分钟100公里至300公里之间,适合不同的...
2009-05-21 00:00:00

您是否正在寻找优质且价格合理的国产贴片电阻? 选择合适的供应商很重要,直接关系到产品的最终质量和稳定性。我们为您整理了多家信誉良好的国产贴片电阻生产厂家的联系方...
2024-11-29 10:25:54

声光报警器是应用于安全防范领域的设备,其规格和尺寸因型号和用途而异。声光报警器的尺寸通常在15厘米到30厘米之间,具体取决于产品的设计和功能需求。大多数家用型报...
2008-08-15 00:00:00

在电子领域,贴片电阻是必不可少的元器件。选用合适的贴片电阻时,了解其封装尺寸至关重要。您经常会看到类似「0603」或「0805」这样的数字组合,但有时也会遇到用...
2025-04-14 15:03:37