输入5个数,求中值,verilog实现

1实现思路

有5个数a,b,c,d,e

将其分为3组,ab, cd, e
e留到最后再比较,
先比较ab 和 cd
设得出了ab的较小值 a a < b
设得出了cd的较小值 c c < d

第一个分支

比较ac, 设a < c
那么 a < c < d , a < b
将b,e比较 ,
1,b< e
a < c < d
a < b < e
接着对c和b比较,
c<b,则 a<c<b<e,
再比较b、d,若b<d,b是中位数,若b>d,d是中位数
若b<c,则a<b<c<d,
再比较c、e,若c<e,c是中位数,若c>e,e是中位数
2,b>e
a<c<d
a<b,e<b
比较e,c,若e<c
比较b,c,若b<c,b是中位数,否则c是中位数
若e>c,
比较d,e,若d<e,d是中位数,否则是中位数

第2个分支

若 a > c
则按照上面的步骤推即可。

verilog实现


module sort5(
	input       clk,
	input       rst_n,
	input [7:0] data1,
	input [7:0] data2,
	input [7:0] data3,
	input [7:0] data4,
	input [7:0] data5,
	
	output reg [7:0] max_data,
	output reg [7:0] mid_data,
	output reg [7:0] min_data
);
 
 
 //-----------第一步-----------
reg [7:0] min_d12;
reg [7:0] max_d12;
//对 data1 和data2 比较
always@(posedge clk or negedge rst_n)begin
	if(!rst_n) begin
		min_d12 <= 8'd0;
		max_d12 <= 8'd0;
	end
	else if(data2 < data1)  begin
		min_d12 <= data2;
		max_d12 <= data1;
	end
	else  begin
		min_d12 <= data1;
		max_d12 <= data2;
	end
end

reg [7:0] min_d34;
reg [7:0] max_d34;
//对 data3 和data4 比较
always@(posedge clk or negedge rst_n)begin
	if(!rst_n) begin
		min_d34 <= 8'd0;
		max_d34 <= 8'd0;
	end
	else if(data3 < data4) begin 
		min_d34 <= data3;
		max_d34 <= data4;
	end
	else begin
		min_d34 <= data4;
		max_d34 <= data3;
	end
end



//-----------第2步-----------
reg [7:0] data5_reg;
always@(posedge clk or negedge rst_n)begin
	if(!rst_n) 
		data5_reg <= 8'd0; 
	else 
		data5_reg <= data5; 
end


reg [7:0] min_data;    //求最小值
always@(posedge clk or negedge rst_n)begin
	if(!rst_n) begin
		min_data <= 8'd0; 
	end
	else if(min_d34 < min_d12)  begin
		if(min_d34 < data5_reg)
			min_data <= min_d34; 
		else 
			min_data <= data5_reg; 
	end
	else  begin
		if(min_d12 < data5_reg)
			min_data <= min_d12; 
		else 
			min_data <= data5_reg; 
	end
end

reg [7:0] max_data;     //求最大值
always@(posedge clk or negedge rst_n)begin
	if(!rst_n) begin
		max_data <= 8'd0; 
	end
	else if(max_d34 < max_d12)  begin
		if(max_d12 < data5_reg)
			max_data <= data5_reg; 
		else 
			max_data <= max_d12; 
	end
	else  begin
		if(max_d34 < data5_reg)
			max_data <= data5_reg; 
		else 
			max_data <= max_d34; 
	end
end


//得到5个数的中值
always@(posedge clk or negedge rst_n)begin
	if(!rst_n) begin
		mid_data<= 8'd0;
	end
	else if(min_d12 < min_d34) begin 
		if(max_d12 < data5_reg)  begin   
			if(min_d34 < max_d12)   
				if(max_d12 < data5_reg)
					mid_data <= max_d12;
				else 
					mid_data <= data5_reg;
			else 
				if(max_d34 < data5_reg)
					mid_data <= max_d34;
				else 
					mid_data <= data5_reg;
		end
		else  begin
			if(data5_reg < min_d34) 
				if(max_d12 < min_d34)
					mid_data <= max_d12;
				else 
					mid_data <= min_d34;
			else 
				if(max_d34 < data5_reg)
					mid_data <= max_d34;
				else 
					mid_data <= data5_reg;
		end
	end
	else begin
		if(max_d34 < data5_reg)  begin   
			if(min_d12 < max_d12)   
				if(max_d34 < data5_reg)
					mid_data <= max_d34;
				else 
					mid_data <= data5_reg;
			else 
				if(max_d12 < data5_reg)
					mid_data <= max_d12;
				else 
					mid_data <= data5_reg;
		end
		else  begin
			if(data5_reg < min_d12) 
				if(max_d34 < min_d12)
					mid_data <= max_d34;
				else 
					mid_data <= min_d12;
			else 
				if(max_d12 < data5_reg)
					mid_data <= max_d12;
				else 
					mid_data <= data5_reg;
		end 
	end
end


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/881164.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniapp 如何自定义导航栏并自适应机型

如今的移动设备有各种不同的屏幕形状&#xff0c;如刘海屏、水滴屏等。这些异形屏会影响页面的布局&#xff0c;尤其是导航栏和底部栏的显示。通过获取安全区域信息&#xff0c;可以确保页面内容不会被异形屏的特殊区域遮挡。 在设计页面顶部导航栏时&#xff0c;可以根据 saf…

模拟自然的本质:与IBM量子计算研究的问答

量子计算可能是计算领域的下一个重大突破&#xff0c;但它的一般概念仍然处于炒作和猜测的现状&#xff1f;它能破解所有已知的加密算法吗&#xff1f;它能设计出治愈所有疾病的新分子吗&#xff1f;它能很好地模拟过去和未来&#xff0c;以至于尼克奥弗曼能和他死去的儿子说话…

【Redis入门到精通二】Redis核心数据类型(String,Hash)详解

目录 Redis数据类型 1.String类型 &#xff08;1&#xff09;常见命令 &#xff08;2&#xff09;内部编码 2.Hash类型 &#xff08;1&#xff09;常见命令 &#xff08;2&#xff09;内部编码 Redis数据类型 查阅Redis官方文档可知&#xff0c;Redis提供给用户的核心数据…

dockercompose指定配置文件

dockercompose指定配置文件 文件名字必须是以下的集中形式&#xff1a; docker-compose.yaml docker-compose.yml compose.yaml compose.yml 其他名字就失败的。 一般白眉大叔都是用 compose.yaml 这个格式&#xff0c; 用习惯了。 但是我们必须知道它有几种格式都是可以…

如何利用nw.js打包vue项目

引言 最近有一个开发windows桌面应用的需求, 需要将vue项目打包成.exe文件&#xff0c;最好是变成可安装版(非绿色版)。特此记录一下如何通过nw.js将vue项目打包成.exe。可能这种方式不是最优&#xff0c;仅供大家参考&#xff01; nw.js简介&#xff08;以下描述来自nw.js官…

C#|.net core 基础 - 扩展数组添加删除性能最好的方法

今天在编码的时候遇到了一个问题&#xff0c;需要对数组变量添加新元素和删除元素&#xff0c;因为数组是固定大小的&#xff0c;因此对新增和删除并不友好&#xff0c;但有时候又会用到&#xff0c;因此想针对数组封装两个扩展方法&#xff1a;新增元素与删除元素&#xff0c;…

大数据概念与价值

文章目录 引言大数据的概念高德纳咨询公司的定义麦肯锡全球研究所的定义什么是大数据&#xff1f; 大数据的特征Volume&#xff08;体积&#xff09;Variety&#xff08;种类&#xff09;Velocity&#xff08;速度&#xff09;Value&#xff08;价值&#xff09;Veracity&#…

【Redis入门到精通三】Redis核心数据类型(List,Set)详解

目录 Redis数据类型 ​编辑 1.List类型 &#xff08;1&#xff09;常见命令 &#xff08;2&#xff09;内部编码 2.Set类型 &#xff08;1&#xff09;常见命令 &#xff08;2&#xff09;内部编码 Redis数据类型 查阅Redis官方文档可知&#xff0c;Redis提供给用户的核…

ASP.NET Core高效管理字符串集合

我们在开发 Web 项目时经常遇到需要管理各种来源的字符串集合&#xff08;例如HTTP 标头、查询字符串、设置的值等&#xff09;的情况。合理的管理这些字符串集合不仅可以减少出bug的几率&#xff0c;也能提高应用程序的性能。ASP.NET Core 为我们提供了一种特殊的只读结构体 S…

多层感知机paddle

多层感知机——paddle部分 本文部分为paddle框架以及部分理论分析&#xff0c;torch框架对应代码可见多层感知机 import paddle print("paddle version:",paddle.__version__)paddle version: 2.6.1多层感知机&#xff08;MLP&#xff0c;也称为神经网络&#xff0…

有关JS下隐藏的敏感信息

免责声明&#xff1a;本文仅做分享&#xff01; 目录 JavaScript 介绍 核心组成 工具 FindSomething ** 浏览器检查 ** LinkFinder URLfinder ** SuperSearchPlus ** ffuf ParasCollector waymore Packer Fuzzer JS逆向 应用&#xff1a; 小结&#xff1a; Ja…

java-----IDE(集成开发环境)

IDE&#xff08;集成开发环境&#xff09; IDE&#xff08;集成开发环境&#xff09;-IDEA IDEA 介绍 1) IDEA 全称 IntelliJ IDEA2) 在业界被公认为最好的Java开发工具3) IDEA是JetBrains 公司的产品&#xff0c;总部位于捷克的首都布拉格4) 除了支持Java开发&#xff0c;还…

54.【C语言】 字符函数和字符串函数(strncpy,strncat,strncmp函数)

和strcpy,strcat,strcmp函数对应的是strncpy,strncat,strncmp函数 8.strncpy函数 *简单使用 cplusplus的介绍 点我跳转 翻译: 函数 strncpy char * strncpy ( char * destination, const char * source, size_t num ); 从字符串中复制一些字符 复制源(source)字符串的前num个…

【专题】2024新能源企业“出海”系列之驶向中东、东南亚报告合集PDF分享(附原数据表)

原文链接&#xff1a; https://tecdat.cn/?p37698 在“双碳”目标引领下&#xff0c;中国新能源产业近年迅猛发展&#xff0c;新能源企业凭借技术革新、政策支持与市场驱动实现快速增长&#xff0c;在产业链完备、技术领先、生产效能及成本控制等方面优势显著。面对国内外环境…

MySQL中的LIMIT与ORDER BY关键字详解

前言 众所周知&#xff0c;LIMIT和ORDER BY在数据库中&#xff0c;是两个非常关键并且经常一起使用的SQL语句部分&#xff0c;它们在数据处理和分页展示方面发挥着重要作用。 今天就结合工作中遇到的实际问题&#xff0c;回顾一下这块的知识点。同时希望这篇文章可以帮助到正…

ZXing.Net:一个开源条码生成和识别器,支持二维码、条形码等

推荐一个跨平台的非常流行的条码库&#xff0c;方便我们在.Net项目集成条码扫描和生成功能。 01 项目简介 ZXing.Net是ZXing的.Net版本的开源库。支持跨多个平台工作&#xff0c;包括 Windows、Linux 和 macOS&#xff0c;以及在 .NET Core 和 .NET Framework 上运行。 解码…

【数据结构】设有一带头结点的单链表,编程将链表颠倒过来。要求不用另外的数 组或结点完成。

编程题&#xff1a; 设有一带头结点的单链表&#xff0c;编程将链表颠倒过来。要求不用另外的数 组或结点完成。 分析&#xff1a; 该算法通过维护三个指针&#xff08;prev、curr 和 next&#xff09;逐步遍历单链表&#xff0c;实现链表的逆转。在遍历过程中&#xff0c;cur…

IDEA Cody 插件实现原理

近年来&#xff0c;智能编程助手 在开发者日常工作中变得越来越重要。IDEA Cody 插件是 JetBrains 生态中一个重要的插件&#xff0c;它可以帮助开发者 快速生成代码、自动补全、并提供智能提示&#xff0c;从而大大提升开发效率。今天我们将深入探讨 Cody 插件的实现原理&…

技术成神之路:设计模式(十四)享元模式

介绍 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构性设计模式&#xff0c;旨在通过共享对象来有效地支持大量细粒度的对象。 1.定义 享元模式通过将对象状态分为内部状态&#xff08;可以共享&#xff09;和外部状态&#xff08;不可共享&#xff09;&#xf…

AI免费UI页面生成

https://v0.dev/chat v0 - UI设计 cursor - 编写代码 参考&#xff1a;https://www.youtube.com/watch?vIyIVvAu1KZ4 界面和claude类似&#xff0c;右侧展示效果和代码 https://pagen.so/