【Verilog】通过任务(task)完成3个8bit数据的冒泡排序

2023-05-16

题目:

设计一个模块,通过任务完成3个8位2进制输入数据的冒泡排序。要求:时钟触发任务的执行,每个时钟周期完成一次数据交换的操作。


Verilog代码:

module	sort(
	input				sys_clk,
	input				sys_rst,
	input		[7:0]	a,
	input		[7:0]	b,
	input		[7:0]	c,
	output	reg	[7:0]	max,
	output	reg	[7:0]	mid,
	output	reg	[7:0]	min
);

localparam	S0		=	5'b00001,
			S1		=	5'b00010,
			S2		=	5'b00100,
			S3		=	5'b01000,
			S4		=	5'b10000;
			
reg	[4:0]	state;
reg	[7:0]	a_temp 	= 	0;
reg	[7:0]	b_temp 	= 	0;
reg	[7:0]	c_temp 	= 	0;

always @ (posedge	sys_clk	or	posedge	sys_rst)begin
	if(sys_rst	== 1'b1)begin
		max			<=	8'b0;
		mid			<=	8'b0;
		min			<=	8'b0;
		state		<=	S0;
		end
	else case(state)
		S0	:begin
			a_temp	<=	a;
		    b_temp  <=	b;
		    c_temp  <=	c;
			state	<=	S1;
			end
		S1  :begin
			sort2(a_temp,b_temp);
			state	<=	S2;
			end
		S2  :begin
			sort2(c_temp,b_temp);
			state	<=	S3;
			end
		S3  :begin
			sort2(a_temp,c_temp);
			state	<=	S4;
			end
		S4  :begin
			max		<=	b_temp;
			mid		<=	c_temp;
			min		<=	a_temp;
			state	<=	S0;
			end
		default  :
			state	<=	S0;
		endcase
end
		
task	sort2;
	inout	[7:0]	x,y;
	reg		[7:0]	temp;
	if(x>y)begin
		temp	=	x;
		x		=	y;
		y		=	temp;
		end
endtask

endmodule					
		

test bench:

`timescale	1ns/1ps

module	tb;
reg			clk,rst;
reg	[7:0]	a,b,c;
wire[7:0]	max,mid,min;

initial	begin
	clk		=	0;
	rst		=	1;
	a		=	0;
	b		=	0;
	c 		=	0;
	#40
	rst		=	0;
	a		=	14;
	b		=	12;
	c 		=	37;
	#60
	a		=	2;
	b		=	15;
	c 		=	3;
end

always #5	clk	=	~clk;

sort	u_sort(
	.sys_clk	( clk	),	
	.sys_rst    ( rst   ),
	.a          ( a     ),
	.b          ( b     ),
	.c          ( c     ),
	.max        ( max   ),
	.mid        ( mid   ),
	.min        ( min   )
);

endmodule

仿真结果:

后记

若有其他描述方式,欢迎讨论。

后续会继续更新verilog有意思的或可移植的模块。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Verilog】通过任务(task)完成3个8bit数据的冒泡排序 的相关文章

  • C++ freeRTOS任务,非静态成员函数的无效使用

    哪里有问题 void MyClass task void pvParameter while 1 this gt update void MyClass startTask xTaskCreate this gt task Task 204
  • Visual Studio 2015 - 用户任务消失了?

    我最近从 Visual Studio 2013 切换到 2015 并转换了所有旧项目 但是 现在我似乎找不到我的用户任务了 任务列表中曾经有一个下拉菜单 但看起来在新版本中已经消失了 除非我遗漏了一些东西 用户任务是否被删除 如果是这样 我
  • 为什么我的 Spark 工作中有这么多任务?默认获取 200 个任务

    我有一个 Spark 作业 它从 hdfs 获取一个包含 8 条记录的文件 进行简单的聚合并将其保存回 hdfs 我注意到当我这样做时有数百个任务 我也不确定为什么有多个工作 我认为工作更像是一个动作发生的时候 我可以推测原因 但我的理解是
  • 使用VB.net创建计划任务[重复]

    这个问题在这里已经有答案了 如何使用 VB NET 创建计划任务 单击按钮时从 vb net 程序填充计划任务字段 我现在什么都没有 也不知道是否可能 您必须围绕本机 COM 接口创建包装器 如果你不想自己做 你可以使用这个库https t
  • Task.WhenAll 是否在后台线程并行运行任务

    以下2个代码片段的作用相同吗 1 var producer Task Run async gt await bar ReadDataAsync var consumer Task Run async gt await bar WriteDa
  • 为什么 Verilog 不被视为编程语言? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 教授在课堂上说学生不应该说他们学会了用Verilog 编程 他说 Verilog 之类的东西不是用来编程的 而是用来设计的 那么 Verilog
  • Gradle 插件从插件 jar 复制文件

    我正在创建我的第一个 gradle 插件 我正在尝试将文件从分发 jar 复制到我在项目中创建的目录中 尽管该文件存在于 jar 内 但我无法将其复制到目录中 这是我的任务代码 import org gradle api DefaultTa
  • 如何在Verilog中将二维数组中的所有位设置为0?

    我构建了一个 8 2bits 数组来表示 Verilog 中的一块内存 reg 1 0 m 0 7 该存储器有一个复位信号 如果复位为1 则该存储器中的所有位都应重置为0 但是我不知道如何以简洁的方式设置m的所有位 因为如果有数百个内存中有
  • Verilog 中的 If 语句和分配连线

    我试图弄清楚基于组合逻辑分配电线的基础知识 I have wire val wire x wire a wire b always begin if val 00 I want to assign x a if val 01 I want
  • Verilog 中的大括号是什么意思?

    我很难理解 Verilog 中的以下语法 input 15 0 a 16 bit input output 31 0 result 32 bit output assign result 16 a 15 a 15 0 我知道assign语句
  • 在页面视图之间导航时如何取消所有正在运行的传奇

    当用户决定导航到应用程序内的另一个 页面 时 我正在尝试找到一种简单易用的方法来取消 页面 内所有正在运行的传奇 我们不使用路由 而是使用每个 页面 是一个更大的主机应用程序中自己的小部件 负责在用户导航时创建和加载每个页面 目前 我们正在
  • 仅当 gradle 中另一个任务不是最新时才运行任务

    我想在 Gradle 中进行功能测试时自动添加 serverRun 任务 因此我添加了一个依赖项 funcTestTask dependsOn serverRun 无论 funcTestTask 是否运行 任务都会运行 compile se
  • 在 UI 线程上创建并启动任务

    当在工作线程上调用的方法需要在 UI 线程上运行代码并等待其完成后再执行其他操作时 可以这样做 public int RunOnUi Func
  • 如何取消等待中的任务?

    我正在处理这些 Windows 8 WinRT 任务 并且尝试使用下面的方法取消任务 并且它在某种程度上有效 CancelNotification 方法确实被调用 这使您认为任务已被取消 但在后台任务仍在运行 然后在完成后 任务的状态始终为
  • 系统 verilog 中没有类型的输入

    我在一个系统 verilog 代码的输入和输出的示例中遇到过module没有说明它们的类型 例如logic wire module mat to stream input 2 0 2 0 2 0 a b input newdata inpu
  • 在特定时间启动应用程序

    我想知道是否有可能 以及如何 在特定时间启动我的应用程序 就像在特定时间响起的闹钟一样 假设我希望我的应用程序在早上 8 点启动 这可行吗 您可以使用 AlarmManager 来完成此操作 这是一个简短的示例 首先你需要设置闹钟 Alar
  • 如何在 icarus verilog 中包含文件?

    我知道基本的 include filename v 命令 但是 我试图包含另一个文件夹中的模块 现在 该模块还包括同一文件夹中存在的其他模块 但是 当我尝试在最顶层运行该模块时 出现错误 C Users Dell Desktop MIPS
  • 适用于多应用项目的 Grunt 和 requirejs 优化器

    我在让 Grunt 对具有以下结构的项目执行 requirejs 优化时遇到问题 static js apps app js dash js news js many more app files build collections lib
  • Verilog 数组语法

    我是 Verilog 新手 并且遇到了很多麻烦 例如 我想要一个包含八个单元的数组 每个单元都是 8 位宽 以下不起作用 reg 7 0 transitionTable 0 7 assign transitionTable 0 10 仅仅做
  • ASP.NET Web API 客户端 ProgressMessageHandler Post 任务卡在 WinForm 应用程序中

    我在用着HttpClient and ProgressMessageHandler来自MS ASP NET Web API 客户端库 http nuget org packages Microsoft AspNet WebApi Clien

随机推荐

  • C++中cin输入过程中如何处理ctrl+c输入

    引子 今天在写一个while true 循环程序 xff0c 程序中有用到SetConsoleCtrlHandler函数处理CTRL 43 C输入 xff0c 用到cin输入时不小心按下ctrl 43 c进入了无限循环 xff0c cin不
  • 如果正确修改数据库编码为utf8仍然无法插入中文可以试试用Navicat插入数据

    我的MySQL编码已经修改为utf8 但是仍然无法插入中文数据 如下 这是我的MySQL编码格式 此时插入中文数据就会报错 我的解决办法是使用Navicat插入数据 使用eclipse连接并输出后可以正常执行 lt 64 page lang
  • 如何用LaTeX写一个PPT

    如何用LaTeX写一个PPT 说到写PPT大家一般会想到的是微软的Microsoft PowerPoint xff0c 因为他更易于制作并且拥有丰富的动画 xff0c 但是当你需要制作一个学术相关的ppt时 xff0c 你需要更好的排版以及
  • Ubuntu 22.04图形界面的卸载

    如果你想在 Ubuntu 上卸载图形界面 xff0c 可以按照以下步骤操作 xff1a 进入终端界面 xff1a 按下 Ctrl 43 Alt 43 F3 xff08 或者其他 F1 F6 xff09 可以切换到终端界面 xff0c 然后使
  • 百鸡百钱问题

    我国古代数学家张丘建在 算经 一书中曾提出过著名的 百钱买百鸡 问题 该问题叙述如下 xff1a 鸡翁一 xff0c 值钱五 xff1b 鸡母一 xff0c 值钱三 xff1b 鸡雏三 xff0c 值钱一 xff1b 百钱买百鸡 xff0c
  • 2.【已修复】windows10更新:你的设备中缺少重要的安全和质量修复。

    问题 xff1a 由于自己给笔记本重装Windows10 专业版系统 xff0c 用一段时间后发现系统更新失败 xff0c 更新错误 xff1a 你的设备中缺少重要的安全和质量修复 危 xff1a 电脑有问题先备份资料 解决问题 xff1a
  • Python实现用户注册登录功能

    一 环境 python3 43 vscode 二 文件 xff1a 程序文件 用户 管理员 注册 登陆 py 启动标记文件 flag txt gt 文件内容 xff1a 0 三 程序步骤分块 xff1a 主程序入口 初次启动后 xff0c
  • 5.MySQL建立表的关系(外键)

    目录 1 前言 2 表与表关系 1 一对多关系 2 多对多关系 xff1a 3 一对一关系 3 对表总结 xff1a 4 补充 xff1a 1 修改表 2 复制表 1 前言 1 方法 xff1a foreign key xff1a 外键 外
  • 41.Django之web注册登录修改注销功能实现

    目录 1 django配置步骤 2 django链接数据库 MySQL 3 利用orm创建数据库表 4 django的myweb01项目中的url py添加路由 5 django的app01应用中的views py添加逻辑函数 6 temp
  • 1. 403 错误 html

    目录 1 效果图 2 code 3 使用 1 效果图 2 code lt DOCTYPE html gt lt html lang zh gt lt head gt lt meta charset utf 8 gt lt title gt
  • linux vi/vim命令学习

    一 依据个人理解 xff0c vi和vim主要有以下几点区别 xff1a 1 vim命令编辑脚本时 xff0c 能够检查出一些基本的语法错误 xff0c 比如括号匹配等 xff0c vi命令不具有这一功能 2 一般linux系统安装时都是自
  • 2. 404 错误 html

    目录 1 效果图 2 code 3 使用 1 效果图 2 code lt DOCTYPE html gt lt html gt lt head gt lt meta charset utf 8 gt lt title gt 404 lt t
  • 3. 500 服务器异常 html

    目录 1 效果图 2 code 1 效果图 2 code lt DOCTYPE html gt lt html gt lt head gt lt meta charset utf 8 gt lt title gt 500 lt title
  • 蓝桥杯之单片机学习(三)——共阳数码管的静态显示

    文章目录 一 训练任务二 训练重点三 训练准备3 1 原理图展示3 2 数字对照表3 3 数码管分路3 4 一些解释 四 代码实现注意事项 一 训练任务 在CT107D单片机综合训练平台上 xff0c 8个数码管分别依次显示0 9的值 xf
  • Dockerfile 定制专属镜像|果断收藏

    前言 大家好 xff0c 本文是对 Docker 自定义镜像的详细讲解 xff0c 讲解了如何进行构建自己的 Docker 镜像以及 Dockerfile 的操作指令 希望对大家有所帮助 一 使用 Dockerfile 定制镜像 1 1 D
  • 蓝桥杯python组练题第六天——七段码——蓝桥杯官网题库

    单词分析 题目描述 本题为填空题 xff0c 只需要算出结果后 xff0c 在代码中使用输出语句将所填结果输出即可 不建议写代码 小蓝要用七段码数码管来表示一种特殊的文字 上图给出了七段码数码管的一个图示 xff0c 数码管中一共有 7 段
  • Ubuntu22.04开机网络无法连接,ping不通解决方案

    从前天开始 xff0c 虚拟机不知道为什么开机之后就无法联网 xff0c 也ping不通 xff0c 而且ifconfig显示我只有lo 没有ens33 xff0c 之后就开始找解决方案 失败的方案有很多 xff0c 比如 xff1a 重置
  • 计蒜客 T1096 石头剪刀布--C语言

    计蒜客 T1096 石头剪刀布 题目 石头剪刀布是常见的猜拳游戏 石头胜剪刀 xff0c 剪刀胜布 xff0c 布胜石头 如果两个人出拳一样 xff0c 则不分胜负 一天 xff0c 小 AA 和小 BB 正好在玩石头剪刀布 已知他们的出拳
  • AT89C52流水灯+外部中断INT0+定时器(汇编语言)

    AT89C52流水灯 43 外部中断INT0 43 定时器 xff08 汇编语言 xff09 任务要求 用 AT89S52 单片机控制彩灯 xff08 流水灯 xff09 图形及继电器 即 xff1a AT89S52 单片机上电时控制由发光
  • 【Verilog】通过任务(task)完成3个8bit数据的冒泡排序

    题目 xff1a 设计一个模块 xff0c 通过任务完成3个8位2进制输入数据的冒泡排序 要求 xff1a 时钟触发任务的执行 xff0c 每个时钟周期完成一次数据交换的操作 Verilog代码 xff1a module sort inpu