当前位置: 首页 > news >正文

呼吸灯--FPGA

目录

1.breath_led.v

2.tb_breath_led.v


呼吸灯就是从完全熄灭到完全点亮,再从完全点亮到完全熄灭。具体就是通过控制PWM的占空比控制亮灭程度。

绘制PWM波的步骤就是,首先灯是在第一个时钟周期保持高电平熄灭状态,在第二个时钟周期保持1/10个时钟周期的低电平,其余都是高电平。在第3个时钟周期保持2/10的低电平,剩余都是高电平,依次绘制下去直到第11个时钟周期在一个周期内都是低电平点亮状态。然后下一个周期还是点亮状态,之后开始逐渐熄灭的波形图的绘制。首先1/10的高电平其余全是低电平...

首先要知道从完全熄灭到完全点亮的时间是多少,定义为1S。声明一个1S的计数器。初识状态不在周期里面因此设置为10个周期,把1S分成1000份,1S/1000=0.001s=1ms,每个T就是1ms。为什么要分成1000份呢,因为分的份数越大,看起来就越细腻,呼吸效果就越好。再把T分成1000份,每次增加一小份。1ms/1000=0.001ms=1us。因此这里就有3个计数器,我们可以先从1us绘制波形图,当满足1000份就是1ms,这样比全部用时钟信号计数可以节约逻辑资源,最大计数都是999。

50Mhz,一个时钟周期就是20ns,那么1us/20ns=1000ns/20ns=50,因此1us要计数50个时钟周期,最大值就是49。当us计数器从0计数到49的时候,ms计数器加1,目的是为了计算1ms计数器的数量,当ms计数器计数到999的时候,s计数器就加1。当s计数器计数到999的时候,此时就花了1s,就表示走过了从全暗到全亮的一个过程。

完整的波形图如下:

以上的波形图还不对,因为还有完全点亮到逐渐熄灭的逆过程,可以通过对led_out取反获得

增加了一个cnt_en使能信号,前1s是低电平,后1s是高电平。

以上是从亮变暗的过程。当cnt_en为低电平并且cnt_1ms<=cnt_1s时,或者cnt_en为高电平并且cnt_1ms>cnt_1s时,输出led_out为低电平,反之为高电平。

1.breath_led.v

module breath_led#(parameter CNT_1US_MAX=6'd49,parameter CNT_1MS_MAX=10'd999,parameter CNT_1S_MAX=10'd999)
(input wire 			sys_clk		,input wire     		sys_rst_n	,output 	reg		led_out
);reg [9:0]cnt_1s	;
reg [9:0] cnt_1ms;
reg [5:0] cnt_1us;
reg       cnt_en;always@(posedge sys_clk or negedge sys_rst_n)if (sys_rst_n==1'b0)cnt_1us<=6'd0;else if(cnt_1us==CNT_1US_MAX)cnt_1us<=6'd0;elsecnt_1us<=cnt_1us+1'd1;always@(posedge sys_clk or negedge sys_rst_n)if (sys_rst_n==1'b0)cnt_1ms<=10'd0;else if((cnt_1us==CNT_1US_MAX)&&(cnt_1ms==CNT_1MS_MAX))cnt_1ms<=10'd0;else if(cnt_1us==CNT_1US_MAX)cnt_1ms<=cnt_1ms+1'd1;elsecnt_1ms<=cnt_1ms;always@(posedge sys_clk or negedge sys_rst_n)if (sys_rst_n==1'b0)cnt_1s<=10'd0;else if((cnt_1s==CNT_1S_MAX)&&(cnt_1ms==CNT_1MS_MAX)&&(cnt_1us==CNT_1US_MAX))cnt_1s<=10'd0;else if((cnt_1us==CNT_1US_MAX)&&(cnt_1ms==CNT_1MS_MAX))cnt_1s<=cnt_1s+1'd1;elsecnt_1s<=cnt_1s;always@(posedge sys_clk or negedge sys_rst_n)if (sys_rst_n==1'b0)cnt_en<=1'b0;else if ((cnt_1s==CNT_1S_MAX)&&(cnt_1ms==CNT_1MS_MAX)&&(cnt_1us==CNT_1US_MAX))cnt_en=~cnt_en;else cnt_en<=cnt_en;always@(posedge sys_clk or negedge sys_rst_n)if (sys_rst_n==1'b0)led_out<=1'b1;else if(((cnt_en==1'b0)&&(cnt_1ms<=cnt_1s))||((cnt_en==1'b1)&&(cnt_1ms>cnt_1s)))led_out<=1'b0;else led_out=1'b1;endmodule

2.tb_breath_led.v

`timescale 1ns/1nsmodule tb_breath_led();reg sys_clk;
reg sys_rst_n;wire led_out;initial beginsys_clk=1'b1;sys_rst_n<=1'b0;#20sys_rst_n<=1'b1;	endalways #10 sys_clk=~sys_clk;breath_led
#(.CNT_1US_MAX (6'd4),.CNT_1MS_MAX (10'd9),.CNT_1S_MAX  (10'd9)) 
breath_led_inst
(.sys_clk	(sys_clk)	,.sys_rst_n	(sys_rst_n),.led_out    (led_out)
);
endmodule

相关文章:

呼吸灯--FPGA

目录 1.breath_led.v 2.tb_breath_led.v 呼吸灯就是从完全熄灭到完全点亮&#xff0c;再从完全点亮到完全熄灭。具体就是通过控制PWM的占空比控制亮灭程度。 绘制PWM波的步骤就是&#xff0c;首先灯是在第一个时钟周期保持高电平熄灭状态&#xff0c;在第二个时钟周期保持1/1…...

MySQL数据库①_MySQL入门(概念+使用)

目录 1. 数据库的概念 1.1 数据库的存储介质 1.2 主流数据库 2. MySQL的基本使用 2.1 链接数据库 2.2 服务器管理 2.3 数据库&#xff0c;服务器和表关系 2.4 简单MySQL语句 3. MySQL架构 4. SQL分类 5. 存储引擎 本篇完。 1. 数据库的概念 数据库是按照数据结构来…...

虚幻UE 特效-Niagara特效实战-魔法阵

回顾Niagara特效基础知识&#xff1a;虚幻UE 特效-Niagara特效初识 其他四篇实战&#xff1a;UE 特效-Niagara特效实战-烟雾、喷泉、 虚幻UE 特效-Niagara特效实战-火焰、烛火、 虚幻UE 特效-Niagara特效实战-雨天、 虚幻UE 特效-Niagara特效实战-眩晕。 本篇笔记记录了使用空模…...

Qt多语言翻译

Qt多语言翻译概述 Qt提供了非常简单易用的多语言翻译机制&#xff0c;其核心类为QTranslator.概括来说就是利用Qt的lupdate工具将项目中所有tr函数包裹的字符串提取到.ts文件中&#xff0c;然后使用Qt Linguist由专门的翻译人员对提取的.ts文件进行逐个单词短语的翻译工作. 翻译…...

Latex学习记录

目录 1.Latex各种箭头符号总结 2.[Latex]公式编辑&#xff0c;编号、对齐 3.Latex公式编号: 多行公式多编号&#xff0c;多行公式单编号 4.LaTex中输入空格以及换行 1.Latex各种箭头符号总结 箭头符号 - ➚ (piliapp.com)https://cn.piliapp.com/symbol/arrow/Latex各种箭头…...

你在做绩效考核,还是绩效管理?二者有什么区别

绩效考核&#xff0c;为什么99%都失败&#xff0c;最后一地鸡毛&#xff1f;败在指标&#xff01; 绩效管理&#xff0c;为什么大多数企业都能成功&#xff0c;而且越做越好&#xff1f;成在目标&#xff01; 丢掉层层指标&#xff0c;人人制定目标&#xff0c;这是企业重新定…...

ele-h5项目使用vue3+vite+vant4开发:第四节、业务组件-SearchView组件开发

需求分析 展示切换动画搜索框输入文字&#xff0c;自动发送请求搜索结果展示搜索状态维护历史搜索展示&#xff0c;点击历史搜索后发送请求历史搜索更多切换动画效果 <script setup lang"ts"> import OpSearch from /components/OpSearch.vue import { ref } f…...

C系列-柔性数组

&#x1f308;个人主页: 会编程的果子君 ​&#x1f4ab;个人格言:“成为自己未来的主人~” 目录 ​编辑 柔性数组 柔性数组的特点 柔性数组的使用 柔性数组的优势 柔性数组 也许你从来没有听说过柔性数组这个概念&#xff0c;但是它确实是存在的&#xff0c;C99中&#…...

【Linux网络编程一】网络基础1(网络框架)

【Linux网络编程一】网络基础1&#xff08;网络框架&#xff09; 一.什么是协议1.通信问题2.协议本质3.网络协议标准 二.协议分层1.为什么协议要分层2.如何具体的分层 三.操作系统OS与网络协议栈的关系1.核心点&#xff1a;网络通信贯穿协议栈 四.局域网中通信的基本原理1.封装…...

springboot156基于SpringBoot+Vue的常规应急物资管理系统

基于SpringBootVue的常规应急物资管理系统的设计与实现 摘 要 1 ABSTRACT 2 第一章 绪论 3 1.1研究背景 3 1.2研究意义 3 1.3国内外研究现状 4 1.3.1国外研究现状 4 1.3.2国内研究现状 4 1.4研究内容与方法 5 1.4.1研究内容 5 1.4.2研究方法 5 1.5论文的组织结构 5…...

学习MySQL的MyISAM存储引擎

学习MySQL的MyISAM存储引擎 MySQL的MyISAM存储引擎是MySQL早期版本中默认的存储引擎&#xff0c;后来被InnoDB所取代。尽管InnoDB在许多方面提供了更高级的特性&#xff0c;如事务处理、行级锁定和外键支持&#xff0c;MyISAM仍然因其简单性、高性能以及对全文搜索的支持而被广…...

nginx 的 ngx_http_upstream_dynamic_module 动态域名解析功能的使用和源码详解

tengine ngx_http_upstream_dynamic_module 动态域名解析功能的代码详细解析 1. 为什么需要域名动态解析2. 配置指令3. 加载模块3. 源码分析3.1 指令解析3.2 upstream负载均衡算法的初始化3.3 upstream负载均衡上下文的初始化3.4 获取upstream的服务器地址3.5 域名解析回调处理…...

前端vue/react项目压缩图片工具@yireen/squoosh-browser

想要在前端项目中压缩图片&#xff0c;然后再上传到后端保存&#xff0c;就需要一个压缩工具的帮助&#xff0c;暂时有两个依赖库可以选择&#xff1a;image-conversion和yireen/squoosh-browser&#xff0c;看了官方仓库地址和更新时间等详情&#xff0c;发现还是yireen/squoo…...

悬而未决:daterangepicker设置默认选择日期时间后点确认无值的BUG

daterangepicker有两个BUG&#xff1a; 1、startDate和endDate对设置默认日期没有问题&#xff0c;但对设置默认时间的支持有BUG&#xff01;比如设为 moment().add( 1, day ).hours(8).minutes(20).seconds(0), //如果现在是9点&#xff0c;则设置的时间8&#xff1a;20因为比…...

composer常用命令

查看全局配置信息 composer config -gl 设置镜全局像地址 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 去掉-g&#xff0c;即表示只有当前项目使用该镜像 批量安装composer项目依赖 composer install 执行该命令后&#xff0c;会读取当…...

2024年1月27日~2月2日周报

一、前言 上周主要完成了SeisInvNet加强版论文的阅读&#xff0c;并尝试跑了一下代码。 本周阅读师兄的论文《DD-Net》&#xff0c;并尝试思考新的点子修改网络架构。 二、DD-Net阅读情况 标题&#xff1a;Dual decoder network with curriculumlearning for full waveform in…...

红黑树,以及其在C++的set、map等数据结构中应用

红黑树介绍&#xff1a; 红黑树&#xff08;Red-Black Tree&#xff09;是一种自平衡的二叉搜索树&#xff0c;它在插入和删除操作后通过一系列的旋转和着色操作来维持平衡。红黑树的命名来自于节点上的额外颜色属性&#xff0c;每个节点要么是红色&#xff0c;要么是黑色。 红…...

C++(11)——内存管理

C内存分布 我们先看一段代码以及相关问题。 这道题的答案是多少呢&#xff1f; 答案在这里哦&#xff0c;看一下有没有问题呀。如果这么简单的题做错了&#xff0c;怕不是要被电击一下。 C内存管理方式 我们知道C语言中动态内存管理的方式是 malloc realloc calloc free 这几…...

《C++ Primer Plus》《3、数据处理》

文章目录 0 前言1 简单变量1.1变量名1.2整型1.3整型short,int,long和long long1.4无符号类型1.5选择整型类型1.6整型字面值1.7C如何确定常量的类型1.8char类型&#xff1a;字符和小整数1.9bool类型 2 cost限定符3浮点数3.1书写浮点数3.2浮点类型3.3浮点常量3.4浮点数的优缺点 4…...

Java 正则匹配sql

文章目录 正则匹配sql表名称insert intoupdate 正则表达式什么时候要加^$ 在线正则校验 正则匹配sql表名称 insert into insert into PING_TABLE (CODE, NAME) VALUES(0, 待提交),(1, 审核中),(2, 审核通过),(3, 已驳回); regex -> insert\sinto\s(\w)\s*\(?update upda…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!

简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求&#xff0c;并检查收到的响应。它以以下模式之一…...

Web中间件--tomcat学习

Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机&#xff0c;它可以执行Java字节码。Java虚拟机是Java平台的一部分&#xff0c;Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...