首页 > 其他分享 >推排序 Verilog实现原理

推排序 Verilog实现原理

时间:2023-04-19 17:58:29浏览次数:42  
标签:大根堆 交换 堆排序 Verilog 原理 排序 节点

引言

推排序常常应用在操作系统的任务调度中,尝试使用硬件对堆排序进行实现,在实现的过程中不使用functiontasks语法,即真·硬件实现

参考的博客

也就这一个博客有介绍
堆排序的Verilog实现

原理

堆排序还需要复习一遍吗? 我肯定是要的
菜鸟-堆排序
图解排序算法(三)之堆排序

可以看到,推排序很复杂,所以我们需要祭出我们的FSM(有限状态机)

首先,将整个堆排序分为两个阶段:

  1. 构建大根堆或小根堆
  2. 从最后一个节点开始,和根节点交换,并维护大根堆

我们这里统一构建大根堆

大根堆的构建

直接上流程:

  1. 从第一个非叶子节点开始,读取左右孩子的值;

  2. 比较大小,确定是否需要交换,以及交换的数据;

  3. 写入或不写入,如果这个节点是根节点,那么构建结束。

还是很简单的,就是需要在读写时注意控制,以及节点编号的判断与更改

交换数据,进行排序

流程如下:

  1. 从最后一个节点开始;
  2. 交换根节点和这个节点的值;
  3. 维护大根堆
    3.1 从根节点开始,读取左右孩子的值;
    3.2 比较大小,确定是否需要交换,以及交换的数据;
    3.3 写入或不写入,如果这个节点是叶子节点,那么维护结束。
  4. 如果这个节点已经是根节点,排序结束。

我们可以发现在这个第三步和之前构建的步骤是相似的,虽然我很想优化掉它,但是能力不太够

实现

自己实现的读写时序存在问题,改好bug后再贴出来

缺陷

我觉得最大的缺陷就是:排序的数比较固定,就是和其他Verilog实现的排序算法相似,都是存在这个问题,如果更改排序的数的个数,这个模块或多或少都要修改一部分

标签:大根堆,交换,堆排序,Verilog,原理,排序,节点
From: https://www.cnblogs.com/csycmcc8023/p/17334115.html

相关文章

  • 动态拨号代理池的应用场景与实现原理解析
    随着互联网的发展和应用场景的不断扩大,数据采集和爬虫技术也日渐成为一项重要的任务。然而,很多网站为了保护自身权益,设置了严格的反爬虫策略,让数据采集变得更加困难。在这种情况下,动态拨号代理池成为了解决方案之一。动态拨号代理池的应用场景动态拨号代理池主要在以下几方......
  • 第六周--冒泡排序
    题目描述读入N个整数,利用冒泡排序法对这些数排序,输出排序后的N个数,两个数之间用空格间隔。这里排序指的是升序。输入格式两行,第一行一个正整数N,表示待排序的数的个数。第二行为N个整数。输出格式一行,排序后的N个数。输入输出样例输入 542451输出 124......
  • 一千个需求如何快速排序?MoSCoW排序法用上了!【No.2】
    什么是MoSCoW排序法?莫斯科排序法是一种优先级排序法,用于管理需求、任务或功能列表。该方法可以帮助团队确定哪些需求、任务或功能是最重要的,并决定在特定时间段内是否需要完成它们。所以在对需求进行排序时,可以从以下维度考虑:能为业务目标产出高价值的需求优先做;节省时间、人......
  • 计算机组成原理
    计算机组成原理第二章计算机系统中的数据表示一)数值数据的编码1、补码1)补码概念引入2)补码的定义计算机中的浮点数是以纯小数和纯整数部分构成的,所以要表示一个浮点数只需要知道它的小数部分和整数部分怎么表示。n位二进制纯小数的编码由一位整数位(也是符号位),和n-1位小......
  • 一些排序相关典题
    HDU6231&P2824HDU6231K-thNumber给你一个长度为\(n\)的序列\(A\),有一个初始为空的序列\(B\),把\(A\)中所有子区间的第\(K\)大加入序列\(B\)中,求\(B\)中的第\(M\)大\(n\le10^5,K\len\)考虑二分答案,假设当前答案是\(x\),把原序列中所有\(<x\)的元素变成\(......
  • MYSQL索引失效场景及其原理
    MySQL索引失效是指查询时不能有效利用索引,从而导致查询性能下降的现象。以下是一些常见的MySQL索引失效场景及原理:使用函数或表达式:在WHERE子句中对索引列使用函数或表达式会导致索引失效。因为MySQL无法预先计算表达式的结果,所以无法使用索引进行查找。例:SELECT*FROMusersWH......
  • MySQL事务实现原理
    事务是什么?首先思考一个问题,事务是什么?以下是事务的相关解释MySQL中的事务是一种用于确保数据库操作的完整性和一致性的机制。事务处理具有以下四个基本特性,通常被称为ACID特性:原子性(Atomicity):原子性是指事务中的所有操作要么全部完成,要么全部不完成。事务中的操作不可分割,如果......
  • 图像识别技术原理和神经网络的图像识别技术
    图像识别技术是信息时代的一门重要的技术,其产生目的是为了让计算机代替人类去处理大量的物理信息。随着计算机技术的发展,人类对图像识别技术的认识越来越深刻。图像识别技术的过程分为信息的获取、预处理、特征抽取和选择、分类器设计和分类决策。简单分析了图像识别技术的引入、其......
  • List<Integer>排序
    List<Integer>list=newArrayList<Integer>();从小到大方法:Collections.sort(list);从大到小方法:Collections.sort(list,Collections.reverseOrder());  Java8将List<Integer>转换成以逗号分割的String字符串publicstaticvoidmain(String[]args){List<Int......
  • 技术文档 | OpenSCA技术原理之composer依赖解析
    OpenSCA知识小课堂开课了!今天主要介绍基于composer包管理器的组件成分解析原理。composer介绍composer是PHP的依赖管理工具。开发者受到Node.js的npm及Ruby的bundler启发,composer设计上与两者有诸多相似。composer的依赖管理文件是composer.json。开发者可以在composer.j......