呼吸灯--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…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...
ZYNQ学习记录FPGA(一)ZYNQ简介
一、知识准备 1.一些术语,缩写和概念: 1)ZYNQ全称:ZYNQ7000 All Pgrammable SoC 2)SoC:system on chips(片上系统),对比集成电路的SoB(system on board) 3)ARM:处理器…...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...
MySQL体系架构解析(三):MySQL目录与启动配置全解析
MySQL中的目录和文件 bin目录 在 MySQL 的安装目录下有一个特别重要的 bin 目录,这个目录下存放着许多可执行文件。与其他系统的可执行文件类似,这些可执行文件都是与服务器和客户端程序相关的。 启动MySQL服务器程序 在 UNIX 系统中,用…...
