Verilog实现呼吸灯效果

这篇具有很好参考价值的文章主要介绍了Verilog实现呼吸灯效果。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

呼吸灯的效果采用PWM调波的形式,即快速的改变每个周期的占空比(一个周期内高电平时间占一个周期时间的比值)来实现点亮到熄灭的效果。示意如下图

Verilog实现呼吸灯效果

而关于整个波形图,用50MHz的晶振,从0开始计数到49则为1us。

而1ms是1us的1000倍,以1us为基准,从0开始计数到999则为1ms。

同理,以1ms为基准,从0开始计数到999则为1s。

cnt_en为使能信号,当其为0的时候,实现【完全熄灭】——【完全点亮】过程

当cen_en为1的时候,实现【完全点亮】——【完全熄灭】过程

下图实现的是以2s为周期,前1s实现【完全熄灭】——【完全点亮】,后1s实现【完全点亮】——【完全熄灭】。

Verilog实现呼吸灯效果 Verilog代码为

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 [5:0]cnt_1us;
	reg [9:0]cnt_1ms;
	reg [9:0]cnt_1s;
	reg cnt_en;
	
always@(posedge sys_clk or negedge sys_rst_n)//1us计数器的波形变化过程
	if(sys_rst_n==1'b0)
		cnt_1us<=6'd0;
	else if(cnt_1us==CNT_1US_MAX)
		cnt_1us<=6'd0;
	else
		cnt_1us<=cnt_1us+6'd1;

always@(posedge sys_clk or negedge sys_rst_n)//1ms计数器的波形变化过程
	if(sys_rst_n==1'b0)
		cnt_1ms<=10'd0;
	else if((cnt_1ms==CNT_1MS_MAX)&&(cnt_1us==CNT_1US_MAX))
		cnt_1ms<=10'd0;
	else if((cnt_1us==CNT_1US_MAX))
		cnt_1ms<=cnt_1ms+10'd1;
	else
		cnt_1ms<=cnt_1ms;
			
always@(posedge sys_clk or negedge sys_rst_n)//1s计数器的波形变化过程
	if(sys_rst_n==1'b0)
		cnt_1s<=10'd0;
	else if((cnt_1ms==CNT_1MS_MAX)&&(cnt_1us==CNT_1US_MAX)&&(cnt_1s==CNT_1S_MAX))
		cnt_1s<=10'd0;
	else if((cnt_1ms==CNT_1MS_MAX)&&(cnt_1us==CNT_1US_MAX))
		cnt_1s<=cnt_1s+10'd1;
	else
		cnt_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_1ms==CNT_1MS_MAX)&&(cnt_1us==CNT_1US_MAX)&&(cnt_1s==CNT_1S_MAX))
		cnt_en<=~cnt_en;
	else
		cnt_en<=cnt_en;
			
always@(posedge sys_clk or negedge sys_rst_n)//LED灯的效果
	if(sys_rst_n==1'b0)
		led_out<=1'b1;
	else if((cnt_en==0)&&(cnt_1ms<=cnt_1s)||(cnt_en==1)&&(cnt_1ms>cnt_1s))
		led_out<=1'b0;
	else
		led_out<=1'b1;
endmodule

 仿真测试代码如下

`timescale 1ns / 1ns

module tb_breath_led();
reg sys_clk;
reg sys_rst_n;
wire led_out;

initial
 begin
	sys_clk=1'b1;
	sys_rst_n<=1'b0;
	#20
	sys_rst_n<=1'b1;
 end
 always #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

vivado仿真波形图

三个计数器的计数波形 

Verilog实现呼吸灯效果

使能端和呼吸效果

注:LED灯为低电平点亮,高电平熄灭。

Verilog实现呼吸灯效果文章来源地址https://www.toymoban.com/news/detail-493064.html

到了这里,关于Verilog实现呼吸灯效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用STM32单击按键实现LED闪烁和双击按键实现LED呼吸灯效果

    在嵌入式系统中,按键和LED是最常见的外设之一。本文将介绍如何使用STM32微控制器实现按键的单击和双击检测,并通过控制LED的闪烁和呼吸灯效果来呈现按键的触发效果。 第一部分:硬件准备 准备一块STM32开发板,如STM32F103C8T6。 连接一个按键到开发板上的GPIO引脚,并通过

    2024年02月05日
    浏览(82)
  • Mars3d采用ellipsoid球实现模拟地球旋转效果

    1.Mars3d采用ellipsoid球实现模拟地球旋转效果 2.开始自选装之后,模型一直闪烁 http://mars3d.cn/editor-vue.html?id=graphic/entity/ellipsoid 3.相关代码:   4.采用属性机制即可实现球体模拟地球旋转的效果: 采用属性机制即可

    2024年02月16日
    浏览(49)
  • 【FPGA协议篇】UART通信及其verilog实现(代码采用传参实现模块通用性,适用于快速开发)

    ​ 即通用异步收发器(Universal Asynchronous Receiver/Transmitter),是一种 串行、异步、全双工 的通信协议。特点是通信线路简单,适用于远距离通信,但传输速度慢。 数据传输速率:波特率(单位:baud,波特) 常见波特率有:1200、2400、4800、19200、38400、57600等,最常用的是9600和11520

    2024年02月05日
    浏览(50)
  • 呼吸灯效果css

    2024年02月15日
    浏览(36)
  • 通过元气派达到呼吸灯的效果

    项目编写¶ 在  applications/genkipi/app  下新建  pwm_led01  文件夹 在 pwm_led01  下新建  main.c  文件 在 pwm_led01  下新建  BUILD.gn 文件 代码部分¶ main.c  文件内容 项目Build.gn¶ pwm_led01  目录下  BUILD.gn  内容为 外部Build.gn¶ pwm_led01 文件夹上一级目录下 BUILD.gn 内容为 接线要求¶ GN

    2024年02月11日
    浏览(34)
  • STM32通过串口控制LED闪烁或者呼吸效果

    目录 STM32通过串口控制LED闪烁或者呼吸效果 1、准备工作 2、思路分析 3、实际操作 4、小结 1.首先我们需要准备32的最小系统板或者开发板。 2.准备一个LED灯(如果使用板子上的灯来实现则不需要,下面我是使用最小系统板上的LED灯来实现)。 3.若干杜邦线。 4.软件方面的准备

    2024年02月08日
    浏览(45)
  • verilog写rom,采用端口排序顺序例化

    1,介绍rom,以及rom与ram的区别 参考文献: 1, 转载-ROM、RAM存储器原理详解以及DRAM、SRAM、SDRAM 、FLASH存储器的介绍

    2024年02月09日
    浏览(59)
  • 北邮22级信通院数电:Verilog-FPGA(12)第十二周实验(2)彩虹呼吸灯(bug已解决 更新至3.0)

    北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.代码部分 1.1一些更新和讲解 1.2改正后的代码  二.管脚分配 三

    2024年02月04日
    浏览(51)
  • ZYNQ——脉宽调制之呼吸灯实现

    呼吸灯的实现过程就是把不同占空比的脉冲输出后加在LED上,LED灯就会显示不同的亮度,通过不断地调节方波的占空比,LED灯的亮度也会跟着变化,看起来就像是“呼吸”一样。 要得到不同占空比的脉冲,就要采用脉宽调制(Pulse Width Modulation, PWM)的方法,脉宽调制是比较常用

    2024年02月12日
    浏览(41)
  • C51单片机实现呼吸灯

         呼吸灯的效果是灯的亮度由暗缓慢变亮再缓慢变暗。      实现思路是改变小灯亮与暗在单位周期的占空比。如下图 具体代码如下:

    2024年02月11日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包