找回密码
 注册
关于网站域名变更的通知
查看: 990|回复: 1
打印 上一主题 下一主题

FPGA实现冒泡排序法(VHDL)

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-10-12 11:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
FPGA实现冒泡排序法(VHDL)

. a! V, g3 D, t" x; e, N4 C! S% P. G
       可能很多人会问,为什么用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。
6 R: n' l+ |$ Y8 D8 E2 _1 A+ x) H

6 }( F$ `7 |5 v- G
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-22 20:05 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表