首页 > 其他分享 >FPGA呼吸灯

FPGA呼吸灯

时间:2023-06-06 12:34:40浏览次数:36  
标签:1us led FPGA 1ms cnt 呼吸 1s reg

呼吸灯时序图如下图所示,cnt_1us=49(即1us)时,cnt_1ms加一;当cnt_1ms=999(即1ms)时,cnt_1s加一;当cnt_1s=999(即1s)时,en翻转;要实现led逐渐由灭到亮,即led每次低电平的时间逐渐有规律的增加。利用PWM改变占空比达到实现呼吸灯。

当满足cnt_1ms<=cnt_1s时,led低电平时间可以满足逐渐增加的条件,1s后en翻转,灯从亮-->灭。满足的条件应该是cnt_1ms>cnt_1s。

使用Verilog语言实现1个呼吸灯,led由灭逐渐变亮,再逐渐熄灭,源码如下:

module breath_led
#(
	parameter CNT_1US_MAX = 6'd49,
	parameter CNT_1MS_MAX = 10'd999,
	parameter CNT_1S_MAX = 10'd999
)
(
	input 	wire	clk,
	input 	wire	reset_n,
	output 	reg		led
);

reg [5:0] cnt_1us;	//1us计时器,记满50个时钟周期=50*20ns=1us
reg [9:0] cnt_1ms;	//1ms计数器,cnt_1ms=999为1ms
reg [9:0] cnt_1s;		//1s计数器,1000*cnt_1ms
reg cnt_1s_en;		//1s使能信号

always@(posedge clk or negedge reset_n)	//20ns*50=1us
	if(!reset_n)
		cnt_1us <= 6'b0;
	else if(cnt_1us == CNT_1US_MAX)
		cnt_1us <= 6'b0;
	else
		cnt_1us <= cnt_1us + 1;
		
always@(posedge clk or negedge reset_n)	
	if(!reset_n)
		cnt_1ms <= 6'b0;
	else if(cnt_1us == CNT_1US_MAX && cnt_1ms == CNT_1MS_MAX)	//记满一秒
		cnt_1ms <= 6'b0;
	else if(cnt_1us == CNT_1US_MAX)	//记满一毫秒
		cnt_1ms <= cnt_1ms + 1;
		
always@(posedge clk or negedge reset_n)	
	if(!reset_n)
		cnt_1s <= 6'b0;
	else if(cnt_1us == CNT_1US_MAX && cnt_1ms == CNT_1MS_MAX
								   && cnt_1s == CNT_1S_MAX)	//记满一秒
		cnt_1s <= 6'b0;
	else if(cnt_1us == CNT_1US_MAX && cnt_1ms == CNT_1MS_MAX)
		cnt_1s <= cnt_1s + 1;
		
//cnt_1s_en:1s计数器标志信号		
always@(posedge clk or negedge reset_n)	
	if(!reset_n)
		cnt_1s_en <= 1'b0;
	else if(cnt_1us == CNT_1US_MAX && cnt_1ms == CNT_1MS_MAX
								   && cnt_1s == CNT_1S_MAX)	//记满一秒
		cnt_1s_en <= ~cnt_1s_en;	//每1s翻转使能信号一次

//输出led灯状态
always@(posedge clk or negedge reset_n)	
	if(!reset_n)
		led <= 1'b1;	//复位熄灭
	else if((cnt_1s_en && cnt_1ms <= cnt_1s) || 	//en为高电平时,灯灭-->灯亮,en为低电平时,灯亮-->灯灭
			(!cnt_1s_en && cnt_1ms > cnt_1s))	//记满一秒
		led <= 1'b0;	//点亮
	else
		led <= 1'b1;	//熄灭

endmodule

标签:1us,led,FPGA,1ms,cnt,呼吸,1s,reg
From: https://www.cnblogs.com/qianxiaohan/p/17460204.html

相关文章

  • 10课程设计收尾及优秀作品展示答辩【FPGA模型机课程设计】
    10课程设计收尾及优秀作品展示答辩【FPGA模型机课程设计】前言说明推荐10课程设计收尾及优秀作品展示答辩安排目录一、单周期CPU的设计过程1、基本的20条指令固定指令格式设计I型指令设计J型指令设计lwsw指令设计2、扩展的20条指令J型扩展指令设计乘法除法指令格式3、实现中断异......
  • 6设计指令流水线-1【FPGA模型机课程设计】
    6设计指令流水线【FPGA模型机课程设计】前言推荐修改6设计指令流水线安排测试与结果指令流水线理论MIPS的一种简单实现基本的MIPS流水线指令流水线实现MIPS五段流水CPU设计视频中的测试代码基于单周期CPU的流水线设计代码设计流水寄存器的引脚设计IF_IDID_EXEX_MEMMEM_WB流水寄存......
  • 6设计指令流水线-3【FPGA模型机课程设计】
    6设计指令流水线-3【FPGA模型机课程设计】前言推荐6设计指令流水线-3安排测试与结果指令流水线理论MIPS的一种简单实现基本的MIPS流水线指令流水线实现MIPS五段流水CPU设计基于单周期CPU的流水线设计乘除流水线的设计原子流水线的设计代码设计EX_Mem附录0框架最后前言2023-5-25......
  • 单周期CPU模型机下载【FPGA模型机课程设计】
    模型机下载【FPGA模型机课程设计】前言推荐单周期CPU模型机下载安排测试与结果5.7.2模型机下载FPGA设计代码设计MIOCIOIO1SoCInstMem附录0框架EMIOC接口FIO外设IO1测试MIOC分流9InstMem指令存储器10SoC顶层最后前言2023-5-2707:55:09周六早上睡不着了起来学习推荐5模......
  • 6设计指令流水线-2【FPGA模型机课程设计】
    6设计指令流水线-2【FPGA模型机课程设计】前言推荐6设计指令流水线-2安排测试与结果指令流水线理论MIPS的一种简单实现基本的MIPS流水线指令流水线实现MIPS五段流水CPU设计视频中的测试代码设计分析设计思路问题回答代码设计IDEXMEMRegFileMIPSInstMem附录3ID译码4EX执行5MEM......
  • m基于FPGA的RGB转ycrcb颜色空间转换算法实现,包含testbench,对比三种转换方法
    1.算法仿真效果vivado2019.2仿真结果如下:其中1为直接乘法公式计算;2为移位法计算;3为分布式计算;2.算法涉及理论知识概要人类获得信息的主要方式是视觉,通常情况下颜色有2种描述方式,一种是RGB色度空间表示,一种是YCbCr色度空间表示。然而,普通的RGB颜色空间对视频的显示存在......
  • m基于FPGA的RGB转ycrcb颜色空间转换算法实现,包含testbench,对比三种转换方法
    1.算法仿真效果vivado2019.2仿真结果如下: 其中1为直接乘法公式计算; 2为移位法计算; 3为分布式计算; 2.算法涉及理论知识概要        人类获得信息的主要方式是视觉,通常情况下颜色有2种描述方式,一种是RGB色度空间表示,一种是YCbCr色度空间表示。然而,普通......
  • 基于FPGA的LFSR16位伪随机数产生算法实现,可以配置不同的随机数种子和改生成多项式,包
    1.算法仿真效果vivado2019.2仿真结果如下:2.算法涉及理论知识概要LFSR(线性反馈移位寄存器)提供了一种在微控制器上快速生成非序列数字列表的简单方法。生成伪随机数只需要右移操作和XOR操作。LFSR完全由其多项式指定。例如,6千-次多项式与每个项存在用方程x表示6+x5+x4+x3......
  • 3模型机指令系统设计-2【FPGA模型机课程设计】
    3模型机指令系统设计-2【FPGA模型机课程设计】前言推荐3模型机指令系统设计-2安排MIPS12条整数指令测试与结果乘除法指令实现和功能仿真要点1乘法除法指令格式2通路增加部件3对整体通路的影响4功能验证代码设计defineIDEXEX1HiLo高位低位寄存器MIPSInstMem附录0框架1defin......
  • m基于FPGA的PID控制器实现,包含testbench测试程序,PID整定通过matlab使用RBF网络计算
    1.算法仿真效果vivado2019.2、matlab2022a仿真结果如下:    2.算法涉及理论知识概要        PID控制器产生于1915年,PID控制律的概念最早是由LYAPIMOV提出的,到目前为止,PID控制器以及改进的PID控制器在工业控制领域里最为常见。PID控制器(比例-积分-微分控制器......