原创 FPGA实现冒泡排序法(VHDL)

2016-3-22 15:05 4811 10 11 分类: FPGA/CPLD

可能很多人会问,为什么用FPGA来实现冒泡排序?放CPU中用C语言只需短短几行代码即可实现的事情为啥用逻辑来实现,没办法我加入这个项目的时候系统方案已确定下来了。

通过一个小采集板实现一个窄脉冲(10ns)信号的个数计算功能,控制单元只有一个FPGA(基于成本考虑没有加一个小CPU),与中位机CPU通信采用UART串口(波特率19200),为了减少串口的数据量,系统功能要求将采集到16个数据作为一组,去掉最大值和最小值然后求平均,最后通过串口将平均值输出至中位机CPU。在此不讨论系统方案,只和大家分享一下冒泡排序功能模块的实现。

1. 冒泡排序模块功能概述:

(1)通过冒泡法实现数据的排序

(2)数据宽度16bit,数量不固定(后期系统方案可能会更改),因此数量作为一个变量参数,但最多不大于128个

(3)逻辑资源和系统时序相对还比较宽松,因此模块的资源和排序耗费时间都还算宽裕,适中即可。

2.  设计方案确定

       冒泡法排序在学校学习C语言的时候,这个是可是必考的,包括普通变量/数组/指针等不同形式的冒泡排序,怀念一下学校时候的美好时光。简单回忆一下冒泡排序,每次将相邻两数进行比较,较大或较小的数调到前面,n个数需要进行n-1轮比较,第一轮进行n-1次两两比较,第n-1轮只需进行1次比较。这样,没经过一轮的比较,较大或较小的数都会上升一位,如同水底气泡逐步冒出水面一样,故称冒泡排序。

       开始考虑通过RAM来存储排序过程的数,但在排序数的数量不固定的时候,对RAM地址的处理略麻烦一些,而采用FIFO来实现,则可不考虑FIFO中数的数量,只要FIFO中存有数据则会一直进行排序比较。本方案采用三个128*16bit的FIFO来缓存排序数据,其中外部接口将数据写入FIFO1,开始排序之后,FIFO1的数据进行第一轮比较,比较后最大的数存入FIFO3待外部读取,其他数据存入FIFO2。第二轮读取FIFO2的数据进行比较,第三轮读取FIFO1的数据,以此循环,直到所有数据排序完成存入FIFO3。

 未完待续。。。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1749058 2016-3-18 10:42

期待后续
相关推荐阅读
用户54562 2010-09-09 13:20
32个最热CPLD-FPGA论坛(转)CPLD-FPGA论坛
1. OPENCORES.ORG 这里提供非常多,非常好的PLD了内核,8051内核就可以在里面找到。进入后,选择project或者由http//www.opencores.org/browse.cg...
用户54562 2010-04-21 18:49
电子工程师笔试题目收集1
一.Verilog如何消除毛刺?1.出现"毛刺"的原因  当信号在FPGA器件内部通过连线和逻辑门时,一般都有一定的延时。延时的大小与连线的长短和门单元的数目有关,同时还受器件的制造工艺、工作电压、温...
用户54562 2010-04-12 13:27
有关FPGA中.mif文件
在FPGA设计中ROM的应用时比较常见的,在调用ROM时经常要加载mif文件,对于初学者,无论mif还是hex都是很令人疑惑的东西,这里就对mif文件的格式及其创建做一点简单的说明。mif在fpga设...
用户54562 2010-03-24 15:38
Nios II系统外扩FLASH
这几天一直在调试外部存储器,也积累了一些经验和教训,养成良好的习惯,将这些记录下来。我用的FLASH是AM29LV160DB-90EC,主要管教功能:A:地址线DQ:数据线DQ15/A-1:如果是字(...
用户54562 2010-03-24 15:38
Nios II系统外扩FLASH
这几天一直在调试外部存储器,也积累了一些经验和教训,养成良好的习惯,将这些记录下来。我用的FLASH是AM29LV160DB-90EC,主要管教功能:A:地址线DQ:数据线DQ15/A-1:如果是字(...
我要评论
1
10
关闭 站长推荐上一条 /3 下一条