【Verilog HDL 训练】第 10 天(PWM 呼吸灯)
5月8日
PWM
用verilog实现PWM控制呼吸灯。呼吸周期2秒:1秒逐渐变亮,1秒逐渐变暗。系统时钟24MHz,pwm周期1ms,精度1us。
今天的题目我是第一次见,答案借鉴大神的:Verilog没有葵花宝典打卡day10.md
简述PWM
PWM——脉宽调制信号(Pulse Width Modulation),它利用微处理器的数字输出来实现,是对模拟电路控制的一种非常有效的技术,广泛应用于测量、通信、功率控制与变化等许多领域。
LED特效呼吸灯原理
采用pwm的方式,在固定的频率下,采用占空比的方式来实现LED亮度的变化。占空比为0,LED灯不亮,占空比为100%,则LED灯最亮。所以将占空比从0到100%,再从100%到0不断变化,就可以实现LED灯实现特效呼吸。
下面是Verilog描述:
注:上硬件测试时,参数DELAY1000 还是要改为1000,下面代码中的DELAY1000 = 10是愿作者为了仿真方便定的值。
module Breath_LED(input clk, //24Mhzinput rst_n,output led_out
);parameter DELAY24 = 24;
//parameter DELAY1000 = 1000;
parameter DELAY1000 = 10;//just testwire delay_1us;
wire delay_1ms;
wire delay_1s;
reg pwm;
reg [7:0] cnt1;
reg [10:0] cnt2;
reg [10:0] cnt3;
reg display_state;//延时1us
always @(posedge clk or negedge rst_n)beginif(!rst_n)cnt1 <= 6'b0;else if(cnt1 == DELAY24 - 1'b1)cnt1 <= 6'b0;else cnt1 <= cnt1 + 1'b1;
endassign delay_1us = (cnt1 == DELAY24 - 1'b1)? 1'b1:1'b0;//延时1ms
always @(posedge clk or negedge rst_n)beginif(!rst_n)cnt2 <= 10'b0;else if(delay_1us == 1'b1)beginif(cnt2 == DELAY1000 - 1'b1) cnt2 <= 10'b0;else cnt2 <= cnt2 + 1'b1;endelse cnt2 <= cnt2;
end
assign delay_1ms = ((delay_1us == 1'b1) && (cnt2 == DELAY1000 - 1'b1))? 1'b1:1'b0;//延时1s
always @(posedge clk or negedge rst_n)beginif(!rst_n)cnt3 <= 10'b0;else if(delay_1ms)beginif(cnt3 == DELAY1000 - 1'b1)cnt3 <= 10'b0;else cnt3 <= cnt3 + 1'b1;endelse cnt3 <= cnt3;
endassign delay_1s = ((delay_1ms == 1'b1) && (cnt3 == DELAY1000 - 1'b1))? 1'b1:1'b0;//state change
always @(posedge clk or negedge rst_n)beginif(!rst_n)display_state <= 1'b0;else if(delay_1s)//每一秒切换一次led灯显示状态display_state <= ~display_state;else display_state <= display_state;
end//pwm信号的产生
always @(posedge clk or negedge rst_n)beginif(!rst_n)pwm <= 1'b0;else case(display_state)1'b0: pwm <= (cnt2 < cnt3)? 1'b1:1'b0;1'b1: pwm <= (cnt2 < cnt3)? 1'b0:1'b1;default: pwm <= pwm;endcase
endassign led_out = pwm;endmodule
我给出测试代码:
module Breath_LED_tb();reg clk;reg rst_n;wire led_out;//generate clockinitial beginclk = 0;forever #20 clk = ~clk;end//initializationinitial beginrst_n = 0;#10000rst_n = 1;end//instantiationBreath_LED u_led(.clk(clk),.rst_n(rst_n),.led_out(led_out));endmodule
行为仿真时序图:
参考链接:http://www.cnblogs.com/ninghechuan/p/6291499.html
【Verilog HDL 训练】第 10 天(PWM 呼吸灯)相关推荐
- 基于FPGA开发板使用Verilog设计PWM呼吸灯实验
基于FPGA开发板使用Verilog设计PWM呼吸灯实验 1,实验原理 2,实验模块设计 2.1 RTL设计,呼吸灯模块设计 2.2,测试数据,下载到FPGA开发板板级的数据 2.3,两个模块综合的n ...
- FPGA项目三:PWM呼吸灯
文章目录 第一节 项目背景 第二节 设计目标 第三节 设计实现 3.1顶层设计 3.2 信号设计 3.3 信号定义 第四节 综合和上板 4.1 新建工程 4.2 综合 4.3 配置管脚 4.4 再次综 ...
- LabVIEW控制Arduino实现PWM呼吸灯(基础篇—5)
目录 1.实验目的 2.实验环境 3.程序设计 4.实验演示 1.实验目的 利用LIAT中的模拟I/O函数库,通过LabVIEW和Arduino Uno控制板实现LED灯亮度的调节,产生灯会呼吸的效果 ...
- STM32F030C8T6单片机PWM呼吸灯寄存器配置
STM32F030C8T6单片机PWM呼吸灯寄存器配置: TIM3_CR1:控制寄存器 BIT8~BIT9:CKD 与外部输入时钟有关,不使用外部时钟输入,所以不操作BIT8~BIT9,设置为00 B ...
- 赛元微SC92F7352 PWM呼吸灯应用
赛元微SC92F7352 PWM呼吸灯应用 单片机脚位图 #include <SC92F735X_C.H> #include "intrins.h" #define u ...
- STM32 CubeMx(二)定时器中断和PWM呼吸灯
STM32 CubeMx(一)时钟树配置与GPIO输入输出 文章目录 1.定时器 1.1 定时器概念 1.2 定时器分类 1.3 定时器功能 1.4 配置过程和编写代码 1.5 代码分享 2.PWM产 ...
- 【Verilog HDL 训练】第 11 天(分频电路)
设计一个占空比50%的三分频电路. 针对这个分频器,博文的末尾会给出一个反面教材,这是我上次写的一个分频器,看起来很好,其实是不能综合的.针对其中的错误,我令立博文记录之:[ Verilog ]alw ...
- 【Verilog HDL 训练】第 06 天(边沿检测)
1. 复习verilog语法 [选做题] - reg和wire的区别 寄存器数据类型 Verilog中规定,凡是在程序块中被赋值的变量,都必须是寄存器类型的.(程序块:例如always块) 这里未免还 ...
- stm32定时器输出pwmIO口模拟pwm——呼吸灯
文章目录 前言 一.pwm(脉冲宽度调制) 1.基本原理 2.PWM的优点 3.PWM波的控制方法 二.定时器的相关介绍 1.stm32定时器 2.通用定时器计数模式 3.定时器的基本工作原理 三.定 ...
最新文章
- 眼下最流行的五大CSS框架_你都知道么?
- 更新自定义表时的通用锁对象
- 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三)
- 深度学习(Deep Learning):循环神经网络一(RNN)
- estemplate 导入MySQL_[数据库]es~通过ElasticsearchTemplate进行聚合操作
- bzoj千题计划282:bzoj4517: [Sdoi2016]排列计数
- 前端学习(1351)模板引擎
- Vue数据绑定v-bind
- 扫描sdcard文件(递归)
- tar+openssl加密压缩解压缩
- 为什么会有宇宙?宇宙之外会有什么?
- Redis 和 Memcached的对比
- AutoCAD工程制图 常见命令与注意事项全总结(120例)
- maxon电机驱动简介
- 腾讯内部出品Android编程入门教程,快快收藏吧!!!
- 马克思主义原理 - 圣才思维导图
- 如何让你的程序员不要厌倦工作?
- 服务器SAS硬盘raid5崩溃lvm丢失的数据恢复过程
- postgresql 优势
- linux 环境命令行导出dmp文件
热门文章
- Python 国际化
- document对象详解
- python语言函数库_Python 的标准库,从0到1学Python
- 用计算机怎么开启音乐模式,XP开机音乐怎么设置?如何设置电脑开机音乐?
- js调用python脚本_javascript – 如何从NodeJs调用python脚本
- java 异常 理解_java中的异常理解
- acu风格是什么意思_“高街风格”是什么意思?
- 基于蔡氏混沌电路进行非线性共振探究
- 第十六届全国大学生智能车竞赛线上赛点赛道审核 - 西部赛区
- 基于ESP32的竞赛裁判系统功能调试-与微机通讯