基于FPGA的排序提取中值算法

本文介绍了一种在FPGA上实现的中值选择算法,通过并行全比较排序,将数据存入大数组并比较大小,找到中值。设计过程中参考了相关文献,并提供了发送、接收、排序和仿真模块的详细流程,特别强调了排序标志位在控制排序过程中的作用。在1~256个数的排序中,中值被正确识别为129。
摘要由CSDN通过智能技术生成

分享一个fpga的选取中值的算法,在排序中选取中值,算法参考的下面这篇文章,本人的设计流程如下所示:

发送:这个没啥好说的,就是个仿真。发送1~256个数,每发送一个数都发送一个有效位

接收流程图如下所示:

排序:参考的这篇文章《基于FPGA的并行全比较排序算法》,所以就不罗嗦了。

整体思想就是先把数都存到一个大数组中,分别比较每个数与其他数据的大小,当总数已知时,有总数一半个小于这个数的,就说明这个数为中值。本人的仿真,1~256,共256个数,中值记为129(有128个比它小的数)。程序留了一个排序标志位(sort_start),开始排序后置1,在数组内所有数寻遍历后标志位才清零。

直接上代码吧,xilinx公司的芯片,编译环境ISE

发送数据模块

module data_tx(
    input clk,
    input rst,
    output [8:0] dout,
	 output Done
    );
	 
	 reg [8:0]data = 9'd0;
	 integer i = 0;
	 reg [1:0]state = 2'd1;
	 reg Done = 1'b0;
	 
	 always @ (posedge clk or negedge rst)
	 if (!rst)
	 begin
	   data <= 9'd0;
		i <= 0;
	 end
	 else
	 case (state)
	 2'd0:                              //无意义,从state = 1开始
	   begin
	    state <= state + 1'b1;
		end
	 2'd1:                              //发送数值
	   begin
		state <= state + 1'b1;
		data <= (data + 1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值