呼吸灯--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 呼吸灯就是从完全熄灭到完全点亮,再从完全点亮到完全熄灭。具体就是通过控制PWM的占空比控制亮灭程度。 绘制PWM波的步骤就是,首先灯是在第一个时钟周期保持高电平熄灭状态,在第二个时钟周期保持1/1…...
MySQL数据库①_MySQL入门(概念+使用)
目录 1. 数据库的概念 1.1 数据库的存储介质 1.2 主流数据库 2. MySQL的基本使用 2.1 链接数据库 2.2 服务器管理 2.3 数据库,服务器和表关系 2.4 简单MySQL语句 3. MySQL架构 4. SQL分类 5. 存储引擎 本篇完。 1. 数据库的概念 数据库是按照数据结构来…...
虚幻UE 特效-Niagara特效实战-魔法阵
回顾Niagara特效基础知识:虚幻UE 特效-Niagara特效初识 其他四篇实战:UE 特效-Niagara特效实战-烟雾、喷泉、 虚幻UE 特效-Niagara特效实战-火焰、烛火、 虚幻UE 特效-Niagara特效实战-雨天、 虚幻UE 特效-Niagara特效实战-眩晕。 本篇笔记记录了使用空模…...
Qt多语言翻译
Qt多语言翻译概述 Qt提供了非常简单易用的多语言翻译机制,其核心类为QTranslator.概括来说就是利用Qt的lupdate工具将项目中所有tr函数包裹的字符串提取到.ts文件中,然后使用Qt Linguist由专门的翻译人员对提取的.ts文件进行逐个单词短语的翻译工作. 翻译…...
Latex学习记录
目录 1.Latex各种箭头符号总结 2.[Latex]公式编辑,编号、对齐 3.Latex公式编号: 多行公式多编号,多行公式单编号 4.LaTex中输入空格以及换行 1.Latex各种箭头符号总结 箭头符号 - ➚ (piliapp.com)https://cn.piliapp.com/symbol/arrow/Latex各种箭头…...
你在做绩效考核,还是绩效管理?二者有什么区别
绩效考核,为什么99%都失败,最后一地鸡毛?败在指标! 绩效管理,为什么大多数企业都能成功,而且越做越好?成在目标! 丢掉层层指标,人人制定目标,这是企业重新定…...
ele-h5项目使用vue3+vite+vant4开发:第四节、业务组件-SearchView组件开发
需求分析 展示切换动画搜索框输入文字,自动发送请求搜索结果展示搜索状态维护历史搜索展示,点击历史搜索后发送请求历史搜索更多切换动画效果 <script setup lang"ts"> import OpSearch from /components/OpSearch.vue import { ref } f…...
C系列-柔性数组
🌈个人主页: 会编程的果子君 💫个人格言:“成为自己未来的主人~” 目录 编辑 柔性数组 柔性数组的特点 柔性数组的使用 柔性数组的优势 柔性数组 也许你从来没有听说过柔性数组这个概念,但是它确实是存在的,C99中&#…...
【Linux网络编程一】网络基础1(网络框架)
【Linux网络编程一】网络基础1(网络框架) 一.什么是协议1.通信问题2.协议本质3.网络协议标准 二.协议分层1.为什么协议要分层2.如何具体的分层 三.操作系统OS与网络协议栈的关系1.核心点:网络通信贯穿协议栈 四.局域网中通信的基本原理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早期版本中默认的存储引擎,后来被InnoDB所取代。尽管InnoDB在许多方面提供了更高级的特性,如事务处理、行级锁定和外键支持,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
想要在前端项目中压缩图片,然后再上传到后端保存,就需要一个压缩工具的帮助,暂时有两个依赖库可以选择:image-conversion和yireen/squoosh-browser,看了官方仓库地址和更新时间等详情,发现还是yireen/squoo…...
悬而未决:daterangepicker设置默认选择日期时间后点确认无值的BUG
daterangepicker有两个BUG: 1、startDate和endDate对设置默认日期没有问题,但对设置默认时间的支持有BUG!比如设为 moment().add( 1, day ).hours(8).minutes(20).seconds(0), //如果现在是9点,则设置的时间8:20因为比…...
composer常用命令
查看全局配置信息 composer config -gl 设置镜全局像地址 composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 去掉-g,即表示只有当前项目使用该镜像 批量安装composer项目依赖 composer install 执行该命令后,会读取当…...
2024年1月27日~2月2日周报
一、前言 上周主要完成了SeisInvNet加强版论文的阅读,并尝试跑了一下代码。 本周阅读师兄的论文《DD-Net》,并尝试思考新的点子修改网络架构。 二、DD-Net阅读情况 标题:Dual decoder network with curriculumlearning for full waveform in…...
红黑树,以及其在C++的set、map等数据结构中应用
红黑树介绍: 红黑树(Red-Black Tree)是一种自平衡的二叉搜索树,它在插入和删除操作后通过一系列的旋转和着色操作来维持平衡。红黑树的命名来自于节点上的额外颜色属性,每个节点要么是红色,要么是黑色。 红…...
C++(11)——内存管理
C内存分布 我们先看一段代码以及相关问题。 这道题的答案是多少呢? 答案在这里哦,看一下有没有问题呀。如果这么简单的题做错了,怕不是要被电击一下。 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类型:字符和小整数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…...
SN74181芯片逻辑图解析:从Cn+1进位信号看加法器设计
SN74181芯片逻辑图解析:从Cn1进位信号看加法器设计 在数字电路设计的经典教材中,SN74181算术逻辑单元(ALU)芯片总是占据着重要位置。这款诞生于上世纪60年代的4位ALU芯片,至今仍是理解计算机算术运算基础的绝佳案例。特别是其进位信号Cn1的生…...
Phi-3-vision-128k-instruct Ollama国内镜像源加速部署与多模型管理
Phi-3-vision-128k-instruct Ollama国内镜像源加速部署与多模型管理 1. 为什么需要国内镜像源 如果你在国内尝试使用Ollama拉取Phi-3-vision这样的大型模型,可能会遇到下载速度慢甚至失败的问题。这是因为默认的模型仓库位于海外服务器,网络连接不稳定…...
标题诊断报告如何与其他 SEO 数据结合分析
标题诊断报告在SEO中的重要性 在当今的数字营销世界中,标题诊断报告是每一个SEO优化者都必须了解和运用的工具。标题不仅是吸引用户点击的关键因素,也是搜索引擎评估页面相关性的重要元素。掌握如何有效利用标题诊断报告,可以帮助你提高网站…...
手把手教你用Postman调试DolphinScheduler 3.x创建任务API(附数据库查Code指南)
手把手教你用Postman调试DolphinScheduler 3.x创建任务API(附数据库查Code指南) 在分布式任务调度系统的日常运维中,API调试是开发者和运维人员必须掌握的硬核技能。DolphinScheduler作为一款开源的分布式易扩展可视化工作流任务调度平台&…...
零基础玩转Qwen3-VL-8B:上传图片提问,本地AI助手秒答
零基础玩转Qwen3-VL-8B:上传图片提问,本地AI助手秒答 1. 项目简介 Qwen3-VL-8B是一款基于阿里云通义实验室最新多模态模型开发的本地交互工具。它最大的特点就是能让你的电脑变成一个"会看图的智能助手"——你上传一张照片,然后像…...
玩转哔哩哔哩视频下载:3分钟掌握DownKyi的高效秘籍
玩转哔哩哔哩视频下载:3分钟掌握DownKyi的高效秘籍 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等ÿ…...
Pixel Language Portal惊艳案例:用Hunyuan-MT-7B将甲骨文识别结果实时译为多语种学术注解
Pixel Language Portal惊艳案例:用Hunyuan-MT-7B将甲骨文识别结果实时译为多语种学术注解 1. 项目概览:当古老文字遇见现代AI Pixel Language Portal(像素语言跨维传送门)是一款基于腾讯Hunyuan-MT-7B大模型构建的创新翻译工具。…...
社区补丁系统深度解析:如何为 Emacs 添加高级功能
社区补丁系统深度解析:如何为 Emacs 添加高级功能 【免费下载链接】homebrew-emacs-plus Emacs Plus formulae for the Homebrew package manager 项目地址: https://gitcode.com/gh_mirrors/ho/homebrew-emacs-plus Homebrew-emacs-plus 是一个专为 Homebre…...
OpenClaw学术助手:Qwen2.5-VL-7B论文图表解析与总结
OpenClaw学术助手:Qwen2.5-VL-7B论文图表解析与总结 1. 为什么需要学术文献自动化处理 作为一名经常需要阅读大量文献的研究人员,我深刻体会到手动处理论文的痛点。每次下载几十篇PDF,光是浏览摘要筛选出相关文献就要耗费半天时间。更不用说…...
GLM-4.1V-9B-Base部署指南:模型权重校验+SHA256完整性验证流程
GLM-4.1V-9B-Base部署指南:模型权重校验SHA256完整性验证流程 1. 模型简介 GLM-4.1V-9B-Base是智谱开源的视觉多模态理解模型,支持以下核心功能: 图像内容识别与描述场景理解与分析目标检测与问答中文视觉理解任务 该模型采用9B参数规模&…...
