FPGA排序-冒泡排序介绍

时间:2025-04-28  作者: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))}

 


审核编辑:刘清

猜您喜欢

LED灯已经成为我们生活中重要的一部分,但有时也会出现故障。与其直接更换新的LED灯,不如学习一些简单的维修技巧,自己动手修复,既省钱又环保。本教程将为您提供L...
2024-08-15 00:00:00

贴片电阻,因其小巧的体积和便捷的贴装方式,广泛应用于各种电子产品中。了解其封装型号规格对于选择合适的电阻至关重要。封装型号通常以数字代码表示,例如01005、0...
2024-11-26 11:29:43

降低功耗对于高速、DSP 密集型系统设计越来越重要。例如,在通信系统中,通信必须在周期性突发中启用,从而消除放大器和系统其余部分的恒定功率使用。在传感器网络中,...
2022-07-12 11:33:00

是的,贴片电阻的规格尺寸和功率有密切关系。尺寸越大的贴片电阻,其功率也越大。这是因为更大的尺寸意味着更大的散热面积,可以承受更大的电流和更高的温度,从而能够承载...
2025-04-14 15:04:03

该电容式触摸传感器开关采用555定时器电路和一些常见的电子元件设计。在该电容式触摸传感器开关电路中,矩形波由三重RC网络集成,而IC2用作比较器(具有基线变量...
2023-10-06 11:05:00

气体传感器在现代工业和环境监测中是重要配件,其规格和尺寸直接影响到安装和使用的便利性。气体传感器的规格尺寸因型号和用途而异。常见的传感器尺寸通常在直径为20毫米...
2010-12-26 00:00:00


电子设备中,连接器是不可或缺的组成部分。随着科技的不断进步,连接器的种类和功能也在持续演变。本文将重点介绍一种名为“TERMINAL_24.5X17.3MM_T...
2025-02-26 13:52:46

贴片电阻测阻值的核心原理是欧姆定律:电阻值(R)等于电压(V)除以电流(I)。具体测量方法主要有以下两种:两线法: 这是最简单的测量方法。万用表的两根表笔分别接...
2024-11-26 11:30:17

想为你的家或店铺增添一份安全保障,却为室外监控摄像头的电源安装而烦恼?别担心,这份简单易懂的指南将带你逐步完成室外监控电源适配器的安装,让你轻松搞定,安心享受安...
2024-03-29 00:00:00