《FPGA学习》->呼吸灯
🍎与其担心未来,不如现在好好努力。在这条路上,只有奋斗才能给你安全感。你若努力,全世界都会为你让路。
呼吸灯,简而言之就像人类呼吸一样,有节奏的让LED灯从:灭->微微亮->微亮->亮->高亮,然后再从:高亮->亮->微亮->微微亮->灭的这样一个过程。
而LED的亮暗程度取决与电压的高低,在安全范围内,电压越高LED亮度越大,电压越低LED亮度越小。但是我们没办法去自动控制电压的高低,所以我们采用通过改变其占空比的方式来调节,即PWM(脉冲宽度调制)技术。简单来说就是在一定的时间周期内,改变高电平所占用的时间。
呼吸灯框架图如下:

PWM调制原理如下图所示:

对PWM有了了解以后,我们开始画波形图,然后对照波形图编写代码,波形图如下:


①sys_clk:时钟信号;
②sys_rst_n:复位信号,低电平有效;
③cnt_1us:因为开发板为50MHz,所以一个时钟周期为20ns,那1us秒即50个时钟周期;
④cnt_1ms:1000个1us进1;
⑤cnt_1s:1000个1ms进1;
⑥cnt_en:使能信号标志位,用来判断LED状态是否到了反转时刻;
⑦led_out:LED状态输出。
源代码如下:
module breath_led //模块开始,定义名称为waterfall_light
#(parameter CNT_1US_MAX = 6'd49 , //定义全局变量CNT_1US_MAX,时间周期为1us parameter CNT_1MS_MAX = 10'd999 , //定义全局变量CNT_1MS_MAX,时间周期为1ms parameter CNT_1S_MAX = 10'd999 //定义全局变量CNT_1S_MAX,时间周期为1s
)
(input wire sys_clk , //定义sys_clk为输入模式 (时钟)input wire sys_rst_n , //定义sys_rst_n为输入模式 (复位)output reg led_out //定义led_out为寄存器类型的输出模式
);reg [5:0] cnt_1us; //定义cnt_1us为6位宽的寄存器类型reg [9:0] cnt_1ms; //定义cnt_1ms为10位宽的寄存器类型reg [9:0] cnt_1s ; //定义cnt_1s为10位宽的寄存器类型reg cnt_en ; //定义cnt_en为寄存器类型always@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 1'b0) //复位信号到来begincnt_1us <= 6'd0; //使cnt_1us清零endelse if(cnt_1us == CNT_1US_MAX) //判断cnt_1us是否计数到最大值begincnt_1us <= 6'd0; //使cnt_1us清零endelse cnt_1us <= cnt_1us + 6'd1; //使cnt_1us + 1endalways@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 1'b0) //复位信号到来begincnt_1ms <= 10'd0; //使cnt_1ms清零endelse if((cnt_1ms == CNT_1MS_MAX)&&(cnt_1us == CNT_1US_MAX)) //判断cnt_1us和cnt_1ms是否同时计数到最大值 begincnt_1ms <= 10'd0; //使cnt_1ms清零endelse if(cnt_1us == CNT_1US_MAX) //判断cnt_1us是否计数到最大值begincnt_1ms <= cnt_1ms + 10'd1; //使cnt_1ms + 1endelse cnt_1ms <= cnt_1ms;endalways@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 1'b0) //复位信号到来begincnt_1s <= 10'd0; //使cnt_1s清零endelse if((cnt_1s == CNT_1S_MAX)&& (cnt_1ms == CNT_1MS_MAX)&&(cnt_1us == CNT_1US_MAX)) //判断cnt_1us,cnt_1ms,cnt_1s是否同时计数到最大值 begincnt_1s <= 10'd0; //使cnt_1s清零endelse if((cnt_1ms == CNT_1MS_MAX)&&(cnt_1us == CNT_1US_MAX)) //判断cnt_1us和cnt_1ms是否同时计数到最大值 begincnt_1s <= cnt_1s + 10'd1; //使cnt_1s + 1endelse cnt_1s <= cnt_1s; //使cnt_1s保持不变endalways@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 1'b0) //复位信号到来begincnt_en <= 1'b0; //使cnt_1s清零endelse if((cnt_1s == CNT_1S_MAX)&& (cnt_1ms == CNT_1MS_MAX)&&(cnt_1us == CNT_1US_MAX)) //判断cnt_1us,cnt_1ms,cnt_1s是否同时计数到最大值 begincnt_en <= ~cnt_en; //使cnt_en取反endelse cnt_en <= cnt_en; //使cnt_en保持不变 endalways@(posedge sys_clk or negedge sys_rst_n)beginif(sys_rst_n == 1'b0) //复位信号到来beginled_out <= 1'b1; //使led_out置1endelse if(((cnt_en == 1'b0)&&(cnt_1ms <= cnt_1s)) || ((cnt_en == 1'b1)&&(cnt_1ms > cnt_1s))) //判断cnt_en为0且cnt_1ms计数值小于等于cnt_1sbegin //或者判断cnt_en为1且cnt_1ms计数值大于cnt_1s执行led_out <= 1'b0; //使led_out置0endelse led_out <= 1'b1; //使led_out置1endendmodule //模块结束生成的RTL电路图如下:

仿真代码如下:
`timescale 1ns/1ns //时间尺度预编译指令 时间单位/时间精度module tb_breath_led (); //定义模块名称为tb_breath_ledreg sys_clk ; //定义sys_clk为reg型
reg sys_rst_n ; //定义sys_rst_n为reg型
wire led_out ; //定义led_out为reg型breath_led //例化对象名称
#(.CNT_1US_MAX (6'd4) , //改变parameter定义的参数.CNT_1MS_MAX (10'd9) , //改变parameter定义的参数.CNT_1S_MAX (10'd9) //改变parameter定义的参数
)
breath_led_inst //实例化名称
(.sys_clk (sys_clk), //使sys_clk信号端口例化为sys_clk.sys_rst_n (sys_rst_n), //使sys_rst_n信号端口例化为sys_rst_n.led_out (led_out) //使led_out信号端口例化为led_out
);initial //初始化begin sys_clk = 1'b1 ; //使sys_clk初始化为高电平状态sys_rst_n = 1'b0 ; //使sys_clk初始化为低电平状态#20 //延时20nssys_rst_n = 1'b1 ; //使sys_rst_n电平拉高end always #10 sys_clk = ~sys_clk; //使sys_clk电平10ns电平状态反转一次endmodule //模块结束仿真波形如下:

从图中可以看出,运行后的仿真波形与设计需求保持一致,任务完成。
🔥🔥🔥本系列文章持续更新,喜欢的话可以关注收藏~🔥🔥🔥
相关文章:
《FPGA学习》->呼吸灯
🍎与其担心未来,不如现在好好努力。在这条路上,只有奋斗才能给你安全感。你若努力,全世界都会为你让路。呼吸灯,简而言之就像人类呼吸一样,有节奏的让LED灯从:灭->微微亮->微亮->亮-&g…...
【大数据离线开发】7.4 HBase数据保存和过滤器
7.4 数据保存的过程 注意:数据的存储,都需要注意Region的分裂 HDFS:数据的平衡 ——> 数据的移动(拷贝)HBase:数据越来越多 ——> Region的分裂 ——> 数据的移动(拷贝) …...
CentOS7安装MariaDB步骤
文章目录1.配置MariaDB yum源2.安装MariaDBMariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。 CentOS 6 或早期的版…...
软件测试13个最容易犯的错误
目录 一、 输入框测试 二、 搜索功能测试 三、 添加/修改功能 四、 删除功能 五、 上传图片功能测试 六、 查询结果列表 七、 返回键检查 八、 回车键检查 九、 刷新键检查 十、 直接URL链接检查(盗链问题) 十一、并发问题 十二、 业务流程测…...
华为OD机试真题Java实现【5键键盘的输出】真题+解题思路+代码(20222023)
🔥系列专栏 华为OD机试(Python)真题目录汇总华为OD机试(JAVA)真题目录汇总华为OD机试(C++)真题目录汇总华为OD机试(JavaScript)真题目录汇总文章目录 🔥系列专栏题目输入输出描述:示例1:示例2:解题思路代码实现运行结果:版权说明:题目...
化解射频和微波设计挑战的六个技巧
即使是最自信的设计人员,对于射频电路也往往望而却步,因为它会带来巨大的设计挑战,并且需要专业的设计和分析工具。这里将为您介绍六条技巧,来帮助您简化任何射频PCB 设计任务和减轻工作压力! 1、保持完好、精确的射频…...
linux内核—进程调度(核心)
目录 核心函数__schedule() 处理过程 1、选择下一个进程 2、切换线程 1)切换进程的虚拟地址空间 2)切换寄存器 3)执行清理工作 核心函数__schedule() 主要的调度程序 进入次函数的主要方法是: 1、显示阻塞:互…...
【STM32笔记】__WFI();进入不了休眠的可能原因(系统定时器SysTick一直产生中断)
【STM32笔记】__WFI();进入不了休眠的可能原因(系统定时器SysTick一直产生中断) 【STM32笔记】低功耗模式配置及避坑汇总 前文: blog.csdn.net/weixin_53403301/article/details/128216064 【STM32笔记】HAL库低功耗模式配置&am…...
【期末复习】例题讲解Dijkstra算法
使用场景Dijkstra算法用于解决单源点最短路径问题,即给一个顶点作为源点,依次求它到图中其他n-1个顶点的最短距离。例题讲解Dijkstra算法将图中所有顶点分成两部分,第一部分是已知到源点最短距离的顶点Known(K),第二部分是不知道到…...
Pytorch 基础之张量索引
本次将介绍一下 Tensor 张量常用的索引与切片的方法: 1. index 索引 index 索引值表示相应维度值的对应索引 a torch.rand(4, 3, 28, 28) print(a[0].shape) # 返回维度一的第 0 索引 tensor print(a[0, 0].shape) # 返回维度一 0 索引位置…...
JVM系统优化实践(1):JVM概览
您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~这是多年之前做过的学习笔记,今天再翻出来,觉得仍然是记忆犹新。「独乐乐不如众乐乐」,就拿出来分享给「众乐乐」吧。目前大多…...
优秀!19年后,它再次成为TIOBE年度编程语言
新年伊始,TIOBE发布了2022年度编程语言,C时隔19年再度登顶,成为2022年最受欢迎的编程语言。TIOBE在2003年首次统计编程语言的流行指数时,C便成为年度编程语言。2022年,C获得了最高的人气4.62%,紧随其后的是…...
剑指 Offer 26. 树的子结构
摘要 剑指 Offer 26. 树的子结构 输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构),B是A的子结构, 即 A中有出现和B相同的结构和节点值。 一、子树解析 思路解析:若树B是树A的子结构,则…...
他是00年的,我们卷不过他...
现在的小年轻真的卷得过分了。前段时间我们公司来了个00年的,工作没两年,跳槽到我们公司起薪18K,都快接近我了。后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天,原来这位小老弟家里条…...
C#开发的OpenRA的OpenGL创建纹理流程
C#开发的OpenRA的OpenGL创建纹理流程 由于OpenRA采用的是OpenGL来显示游戏画面, 那么它就必然采用纹理来显示了。 并且由于它是2D的游戏,所以3D的模型是没有的,只要使用纹理贴图,就可以完全实现了游戏的功能。 OpenGL的纹理要起作用,需要经过一系列的动作。 先要使用glGen…...
3D目标检测(一)—— 基于Point-Based方法的PointNet系列
3D目标检测(一)—— PointNet,PointNet,PointNeXt, PointMLP 目录 3D目标检测(一)—— PointNet,PointNet,PointNeXt, PointMLP 前言 零、网络使用算法 …...
《设计模式》策略模式
策略模式 前言 先了解一下设计模式的几种类似: 行为型设计模式(Behavioral Design Pattern)是指一组设计模式,它们关注的是对象之间的通信和协作。行为型设计模式描述了对象之间的职责分配和算法的封装,以及如何在运…...
【离散数学】1. 数理逻辑
1.数理逻辑 2. 集合论 3. 代数系统 4. 图论 离散数学:研究离散量结构及相互关系的学科 数理逻辑集合论代数系统图论 逻辑:研究推理的科学 数学方法:引进一套符号系统的方法 数理逻辑是用数学方法研究形式逻辑的科学,即使用符号化…...
Java8新特性学习
Java8新特性学习为啥使用Lambda表达式Lambda表达式的基础语法无参无返回有参无返回一个参数多参单个语句体类型推断四大内置核心函数式接口其他接口方法引用与构造器引用Stream简介什么是StreamStream操作步骤创建Stream中间操作终止操作(终端操作)归约与收集并行流…...
SPARK outputDeterministicLevel的作用--任务全部重试或者部分重试
背景 目前spark的repartition()方法是随机分配数据到下游,这会导致一个问题,有时候如果我们用repartition方法的时候,如果任务发生了重试,就有可能导致任务的数据不准确,那这个时候改怎么解决这个问题呢? …...
python打卡day49
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...
LangChain【6】之输出解析器:结构化LLM响应的关键工具
文章目录 一 LangChain输出解析器概述1.1 什么是输出解析器?1.2 主要功能与工作原理1.3 常用解析器类型 二 主要输出解析器类型2.1 Pydantic/Json输出解析器2.2 结构化输出解析器2.3 列表解析器2.4 日期解析器2.5 Json输出解析器2.6 xml输出解析器 三 高级使用技巧3…...
