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 呼吸灯)相关推荐

  1. 基于FPGA开发板使用Verilog设计PWM呼吸灯实验

    基于FPGA开发板使用Verilog设计PWM呼吸灯实验 1,实验原理 2,实验模块设计 2.1 RTL设计,呼吸灯模块设计 2.2,测试数据,下载到FPGA开发板板级的数据 2.3,两个模块综合的n ...

  2. FPGA项目三:PWM呼吸灯

    文章目录 第一节 项目背景 第二节 设计目标 第三节 设计实现 3.1顶层设计 3.2 信号设计 3.3 信号定义 第四节 综合和上板 4.1 新建工程 4.2 综合 4.3 配置管脚 4.4 再次综 ...

  3. LabVIEW控制Arduino实现PWM呼吸灯(基础篇—5)

    目录 1.实验目的 2.实验环境 3.程序设计 4.实验演示 1.实验目的 利用LIAT中的模拟I/O函数库,通过LabVIEW和Arduino Uno控制板实现LED灯亮度的调节,产生灯会呼吸的效果 ...

  4. STM32F030C8T6单片机PWM呼吸灯寄存器配置

    STM32F030C8T6单片机PWM呼吸灯寄存器配置: TIM3_CR1:控制寄存器 BIT8~BIT9:CKD 与外部输入时钟有关,不使用外部时钟输入,所以不操作BIT8~BIT9,设置为00 B ...

  5. 赛元微SC92F7352 PWM呼吸灯应用

    赛元微SC92F7352 PWM呼吸灯应用 单片机脚位图 #include <SC92F735X_C.H> #include "intrins.h" #define u ...

  6. STM32 CubeMx(二)定时器中断和PWM呼吸灯

    STM32 CubeMx(一)时钟树配置与GPIO输入输出 文章目录 1.定时器 1.1 定时器概念 1.2 定时器分类 1.3 定时器功能 1.4 配置过程和编写代码 1.5 代码分享 2.PWM产 ...

  7. 【Verilog HDL 训练】第 11 天(分频电路)

    设计一个占空比50%的三分频电路. 针对这个分频器,博文的末尾会给出一个反面教材,这是我上次写的一个分频器,看起来很好,其实是不能综合的.针对其中的错误,我令立博文记录之:[ Verilog ]alw ...

  8. 【Verilog HDL 训练】第 06 天(边沿检测)

    1. 复习verilog语法 [选做题] - reg和wire的区别 寄存器数据类型 Verilog中规定,凡是在程序块中被赋值的变量,都必须是寄存器类型的.(程序块:例如always块) 这里未免还 ...

  9. stm32定时器输出pwmIO口模拟pwm——呼吸灯

    文章目录 前言 一.pwm(脉冲宽度调制) 1.基本原理 2.PWM的优点 3.PWM波的控制方法 二.定时器的相关介绍 1.stm32定时器 2.通用定时器计数模式 3.定时器的基本工作原理 三.定 ...

最新文章

  1. 眼下最流行的五大CSS框架_你都知道么?
  2. 更新自定义表时的通用锁对象
  3. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(三)
  4. 深度学习(Deep Learning):循环神经网络一(RNN)
  5. estemplate 导入MySQL_[数据库]es~通过ElasticsearchTemplate进行聚合操作
  6. bzoj千题计划282:bzoj4517: [Sdoi2016]排列计数
  7. 前端学习(1351)模板引擎
  8. Vue数据绑定v-bind
  9. 扫描sdcard文件(递归)
  10. tar+openssl加密压缩解压缩
  11. 为什么会有宇宙?宇宙之外会有什么?
  12. Redis 和 Memcached的对比
  13. AutoCAD工程制图 常见命令与注意事项全总结(120例)
  14. maxon电机驱动简介
  15. 腾讯内部出品Android编程入门教程,快快收藏吧!!!
  16. 马克思主义原理 - 圣才思维导图
  17. 如何让你的程序员不要厌倦工作?
  18. 服务器SAS硬盘raid5崩溃lvm丢失的数据恢复过程
  19. postgresql 优势
  20. linux 环境命令行导出dmp文件

热门文章

  1. Python 国际化
  2. document对象详解
  3. python语言函数库_Python 的标准库,从0到1学Python
  4. 用计算机怎么开启音乐模式,XP开机音乐怎么设置?如何设置电脑开机音乐?
  5. js调用python脚本_javascript – 如何从NodeJs调用python脚本
  6. java 异常 理解_java中的异常理解
  7. acu风格是什么意思_“高街风格”是什么意思?
  8. 基于蔡氏混沌电路进行非线性共振探究
  9. 第十六届全国大学生智能车竞赛线上赛点赛道审核 - 西部赛区
  10. 基于ESP32的竞赛裁判系统功能调试-与微机通讯