数码管的动态显示(三)

1.原理

data_reg寄存,只寄存符号位和数据位不包含小数点位。

动态数码管每个显示1ms,所以计数到5*10^4-1

为了将sel和seg同步,把sel打了一拍。

6位都使用到了可以这么计算,6位都显示的是数据。或者最高位显示的是小数点,低5位是数据,

因为数码管是共阳数码管,低电平才能点亮。

2.代码

2.1 seg_dynamic.v

module seg_dynamic(
	input wire 			sys_clk		,
	input wire 			sys_rst_n	,
	input wire[19:0] 	data		,
	input wire[5:0]		point		,
	input wire			sign		,
	input wire 			seg_en		,
	
	output reg[7:0]		seg			,//因为一个数码管包括小数点位有8位
	output reg[5:0]		sel //因为总共有6个数码管需要显示
);

parameter CNT_MAX=16'd499_99;

wire [3:0] unit;
wire [3:0] ten;
wire [3:0] hun;
wire [3:0] tho;
wire [3:0] t_tho;
wire [3:0] h_hun; //999_999需要这6个位
reg [23:0] data_reg;  //6个数码管,每个数码管是BCD码表示,一共有4位,因为上面的ten是4位
reg [15:0] cnt_1ms;//因为计数1ms
reg flag_1ms;
reg [2:0] cnt_sel; //因为要计数6个数码管表示一次扫描周期的结束
reg [5:0] sel_reg; //这个是位选信号,控制哪个数码管亮
reg [3:0] data_disp; //这是上面的data_reg的每个位数的拆分,控制它显示十六进制码
reg dot_disp;


always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		data_reg<=24'd0;
	else if((h_hun)||(point[5]))
		data_reg<={h_hun,t_tho,tho,hun,ten,unit};
	else if(((t_tho)||(point[4]))&&(sign==1'b0)) //sign=0就是要使用符号位的意思
		data_reg<={4'd11,t_tho,tho,hun,ten,unit};
	else if(((t_tho)||(point[4]))&&(sign==1'b1))
		data_reg<={4'd10,t_tho,tho,hun,ten,unit};	
	else if(((tho)||(point[3]))&&(sign==1'b0))
		data_reg<={4'd11,4'd11,tho,hun,ten,unit};	
	else if(((tho)||(point[3]))&&(sign==1'b1))
    	data_reg<={4'd11,4'd10,tho,hun,ten,unit};
	else if(((hun)||(point[2]))&&(sign==1'b0))
		data_reg<={4'd11,4'd11,4'd11,hun,ten,unit};
	else if(((hun)||(point[2]))&&(sign==1'b1))	
		data_reg<={4'd11,4'd11,4'd10,hun,ten,unit};
	else if(((ten)||(point[1]))&&(sign==1'b0))
		data_reg<={4'd11,4'd11,4'd11,4'd11,ten,unit};	
	else if(((ten)||(point[1]))&&(sign==1'b1))		
		data_reg<={4'd11,4'd11,4'd11,4'd10,ten,unit};	
	else if(((unit)||(point[0]))&&(sign==1'b0))
		data_reg<={4'd11,4'd11,4'd11,4'd11,4'd11,unit};	
	else 			
		data_reg<={4'd11,4'd11,4'd11,4'd11,4'd10,unit};	
		
always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		cnt_1ms<=16'd0;
	else if(cnt_1ms==CNT_MAX)
		cnt_1ms<=16'd0;
	else
		cnt_1ms<=cnt_1ms+1'b1;
		
always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		flag_1ms<=1'b0;
	else if(cnt_1ms==CNT_MAX-1'b1)
		flag_1ms<=1'b1;
	else
		flag_1ms<=1'b0;

always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		cnt_sel<=3'd0;
	else if((flag_1ms==1'b1)&&(cnt_sel==3'd5))
		cnt_sel<=3'd0;
	else if(flag_1ms==1'b1)
		cnt_sel<=cnt_sel+1'b1;
	else
		cnt_sel<=cnt_sel;
		
always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		sel_reg<=6'd0;
	else if ((cnt_sel==3'd0)&&(flag_1ms==1'b1))
		sel_reg<=6'b000_001;
	else if(flag_1ms==1'b1)
		sel_reg<=sel_reg<<1;
	else
		sel_reg<=sel_reg;
		

always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		data_disp<=4'd0;
	else if((seg_en==1'b1)&&(flag_1ms==1'b1))
		case(cnt_sel)
			3'd0: data_disp<=data_reg[3:0];
			3'd1: data_disp<=data_reg[7:4];
			3'd2: data_disp<=data_reg[11:8];
			3'd3: data_disp<=data_reg[15:12];
			3'd4: data_disp<=data_reg[19:16];
			3'd5: data_disp<=data_reg[23:20];
			default: data_disp<=4'b0;
		endcase
	else
		data_disp<=data_disp;
		
always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)
		dot_disp<=1'b1;
	else if(flag_1ms==1'b1)
		dot_disp<=~point[cnt_sel];
	else 
		dot_disp<=dot_disp;

always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)	
		seg<=8'd0;
	else 
		case(data_disp)
			4'd0: seg<={dot_disp,7'b100_0000};
			4'd1: seg<={dot_disp,7'b111_1001};
			4'd2: seg<={dot_disp,7'b010_0100};
			4'd3: seg<={dot_disp,7'b011_0000};
			4'd4: seg<={dot_disp,7'b011_1001};
			4'd5: seg<={dot_disp,7'b001_0010};
			4'd6: seg<={dot_disp,7'b000_0010};
			4'd7: seg<={dot_disp,7'b111_1000};
			4'd8: seg<={dot_disp,7'b000_0000};
			4'd9: seg<={dot_disp,7'b001_0000};
			4'd10: seg<=8'b1011_1111;//10就是符号,只显示中间的那条杠,因此是
			4'd11: seg<=8'b1111_1111;//就是显示0
			default:seg<=8'b1100_0000;
		endcase

always@(posedge sys_clk or negedge sys_rst_n)
	if(sys_rst_n==1'b0)	
		sel<=6'd0;
	else
		sel<=sel_reg;

					
bcd_8421 bcd_8421_inst(
	.sys_clk	(sys_clk	)		,
	.sys_rst_n	(sys_rst_n)	,
	.data		(data		)	,
				
	.unit		(unit		)	,
	.ten		(ten		)		,
	.hun		(hun		)		,
    .tho		(tho		)		,
	.t_tho		(t_tho		)	,
    .h_hun      (h_hun    )
);

endmodule




2.2 tb_seg_dynamic.v

module tb_seg_dynamic();

reg 		sys_clk		;
reg 		sys_rst_n   ;
reg[19:0]  data		;
reg[5:0]	point		;
reg		sign		;
reg 		seg_en		;
     
wire[7:0] 	seg;			
wire[5:0]    sel;

initial 
	begin
		sys_clk=1'b1;
		sys_rst_n<=1'b0;
		data<=20'd0;
		point<=6'b000_000;
		sign<=1'b0;
		seg_en<=1'b0;
		#30
		sys_rst_n<=1'b1;
		data<=20'd98_76;
        point<=6'b000_010;
        sign<=1'b1;
        seg_en<=1'b1;
	end
	
always #10 sys_clk=~sys_clk;
defparam seg_dynamic_inst.CNT_MAX=20'd5;

seg_dynamic seg_dynamic_inst(
	.sys_clk	(sys_clk	)	,
	.sys_rst_n	(sys_rst_n),
	.data		(data		),
	.point		(point		),
	.sign		(sign		),
	.seg_en		(seg_en		),
                 
	.seg		(seg		)	,
	.sel        (sel      )
);
endmodule

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

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

相关文章

ubuntu 下git常用指令【持续更新中】

1.下载 sudo apt install git 2. 查看版本 git --version3. 登录git账号 git config --global user.email "youexample.com" git config --global user.name "Your Name"4.生成密钥对 ssh-keygen -t rsa -C "your_emailyouremail.com"复制公…

鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:EffectComponent)

特效合并容器组件&#xff0c;用于子节点特效绘制的合并&#xff0c;实现特效的绘制性能优化。 说明&#xff1a; 该组件从API Version 10开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 该组件为系统接口。 目前该组件仅支持子组件背景…

LORA_ LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

paper: https://arxiv.org/pdf/2106.09685.pdf code: https://github.com/microsoft/LoRA 摘要 作者提出了低秩自适应&#xff0c;或称LoRA&#xff0c;它冻结了预先训练的模型权值&#xff0c;并将可训练的秩分解矩阵注入变压器架构的每一层&#xff0c;大大减少了下游任务的…

接上一篇:分布式调用链追踪系统设计

所以必须得记录父子关系&#xff1a; A---->B 是 B---->C 的父调用 A---->D 是 D---->E 的父调用 A---->D 还是 D---->F 的父调用 如何记录呢&#xff1f;需要给每个调用分配一个ID (称为 SpanID)&#xff0c;并且把这个 ID 传递给子调用&#xff0c; 子…

网络基础 - 预备知识(协议、网络协议、网络传输流程、地址管理)

文章目录 1. 认识 协议2. 了解 网络协议2.1 引入 协议分层2.2 OSI 七层模型 与 TCP/IP 四层模型 3. 网络传输 流程&#xff01;&#xff01;&#xff01;3.1 网络传输流程图3.2 关于报头3.3 实例解释 传输过程&#xff08;封装与解包&#xff09; 4. 网络中的地址管理4.1 认识 …

使用Python批量实现在Excel里新加一列

目录 一、引言 二、所需库介绍 三、代码实现 四、批量处理多个Excel文件 五、注意事项与扩展 六、案例演示 七、总结与展望 一、引言 Excel作为广泛使用的电子表格软件&#xff0c;在数据处理和分析中扮演着重要角色。然而&#xff0c;当面对大量Excel文件需要批量处理…

Apache Paimon 的 CDC Ingestion 概述

CDC Ingestion 1&#xff09;概述 Paimon支持schema evolution将数据插入到Paimon表中&#xff0c;添加的列将实时同步到Paimon表&#xff0c;并且无需重启同步作业。 目前支持的同步方式如下&#xff1a; MySQL Synchronizing Table: 将MySQL中的一个或多个表同步到一个Pa…

win11系统qtcreator构建运行程序首次启动卡顿(win11首次启动应用程序卡顿)

首先可以参考一下这个博客&#xff1a;为什么win11系统开机后第一次打开一个软件很慢&#xff0c;关闭进程重新打开速度就正常了&#xff0c;该怎样解决呢&#xff1f; - 知乎 经过上述博客&#xff0c;但是我没有完全解决&#xff0c;这里说一下自己的方法&#xff1a; 打开任…

ArrayList 和 LinkedList 有什么区别?

1、典型回答 ArrayList 和 LinkedList 是 Java 中常用的集合类&#xff0c;它们都实现了 List 接口&#xff0c;如下图所示&#xff1a; 但二者有以下几点不同&#xff1a; 1、底层数据结构实现不同&#xff1a; ArrayList 底层使用数组实现&#xff0c;它通过一个可调整大小…

泽众云真机-机型支持ADB调试功能即将上线

最近云真机平台在线客服&#xff0c;收到很多咨询关于ADB调试功能&#xff0c;什么时候能更新&#xff1f;据小编所知&#xff0c;正在升级之中&#xff0c;有一块专门为了解决ADB调试功能提前准备&#xff0c;升级网络硬件设备&#xff0c;目前平台的功能已开发完成&#xff0…

Python Web开发记录 Day8:Django part2 部门管理

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1、部门列表2、模板的继承3、添加部门4、编辑部…

【Leetcode每日一刷】顺/逆时针旋转矩阵 |48. 旋转图像、矩阵的螺旋遍历 |54. 螺旋矩阵

一、48. 旋转图像 1.1&#xff1a;题目 48. 旋转图像 1.2&#xff1a;解题思路 题型&#xff1a;顺/逆时针旋转矩阵&#xff1b; ❗❗核心思想/ 关键&#xff1a;不可暴力模拟&#xff0c;先镜像&#xff0c;后水平翻转 这题的意思很简单&#xff0c;就是让我们把矩阵顺时…

解决内网环境预览ArcGIS地图服务

目录 背景分析解决思路操作步骤1、登录ArcGIS Server后台修改 2、将预览服务请求资源部署到内网①下载ArcGIS API for JavaScript 库②修改ArcGIS API for JavaScript 库③映射ArcGIS API for JavaScript 库④验证ArcGIS API for JavaScript 映射3、验证ArcGIS Server的服务 背…

unity3d Animal Controller的Animal组件中Speeds,States和modes基础部分理解

Speeds 速度集是修改你可以做的原始动画,增加或减少运动,旋转,或动画速度。它们与 州 所以,当动物在运动状态下,在飞行或游泳时,你可以有不同的速度 如果你的性格动画是 (已到位), 你一定要调整速度 位置 和 旋转 每一种的价值观 速度装置 …否则,它们不会移动或旋转。 每个速…

C#,图论与图算法,图着色问题(Graph Coloring)的威尔士-鲍威尔(Welch Powell Algorithm)算法与源代码

Welsh, D.J.A. and Powell, M.B. (1967) An Upper Bound for the Chromatic Number of a Graph and Its Application to Timetabling Problems. 《The Computer Journal》, 10, 85-86. 《The Computer Journal》 1 图着色算法概述 1967年&#xff0c;Welsh和Powell算法引入了…

【机器学习】AI训练,为什么需要GPU?【源码独家】GPU池化平台 AI训练平台 AI推理平台

随着由ChatGPT引发的人工智能热潮&#xff0c;GPU成为了AI大模型训练平台的基石&#xff0c;甚至是决定性的算力底座。为什么GPU能力压CPU&#xff0c;成为炙手可热的主角呢&#xff1f; 要回答这个问题&#xff0c;首先需要了解当前人工智能&#xff08;AI&#xff0c;Artific…

【计算机图形学】End-to-End Affordance Learning for Robotic Manipulation

对RLAfford&#xff1a;End-to-End Affordance Learning for Robotic Manipulation的简单理解 1. 为什么要做这件事 在交互环境中学习如何操纵3D物体是RL中的挑战性问题。很难去训练出一个能够泛化到具有不同语义类别、不同几何形状和不同功能物体上的策略。 Visual Afforda…

前端接口防止重复请求实现方案

虽然大部分的接口处理我们都是加了loading的&#xff0c;但又不能确保真的是每个接口都加了的&#xff0c;可是如果要一个接口一个接口的排查&#xff0c;那这维护了四五年的系统&#xff0c;成百上千的接口肯定要耗费非常多的精力&#xff0c;根本就是不现实的&#xff0c;所以…

webpack5零基础入门-7webpack修改输出文件目录

1.修改output中的path后打包 path: path.resolve(__dirname, dist/js),//所有文件的输出目录 可以看到dist目录下多了个js目录 但所有文件都在js目录中 我们想要的是根据不同的资源进行分类很显然这样不行 从这里可以看出path是所有文件的输出目录 2.修改output中的filename…

CVPR2024 | 大核卷积新高度101x101,美团提出PeLK

https://arxiv.org/pdf/2403.07589.pdf 本文概述 最近&#xff0c;一些大核卷积网络以吸引人的性能和效率进行了反击。然而&#xff0c;考虑到卷积的平方复杂度&#xff0c;扩大内核会带来大量的参数&#xff0c;而大量的参数会引发严重的优化问题。由于这些问题&#xff0c;当…