《FPGA学习》->呼吸灯_fpga呼吸灯_朽木自雕i
披露的时间:2023-08-25 16:18:21 硬件开发 49次
标签:fpga开发
Powered by 金山文档
呼吸灯,简而言之就像人类呼吸一样,有节奏的让LED灯从:灭->微微亮->微亮->亮->高亮,然后再从:高亮->亮->微亮->微微亮->灭的这样一个过程。...
🍎 与其担心未来,不如现在好好努力。在这条路上,只有奋斗才能给你安全感。你若努力,全世界都会为你让路。 深吸气灯,简现阶段之就好比人类历史深吸气不一样,有节凑的让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程序所在。 源编码正确:
生成二维码的RTL电源线路图相应: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) begin if(sys_rst_n == 1'b0) //复位信号到来 begin cnt_1us <= 6'd0; //使cnt_1us清零 end else if(cnt_1us == CNT_1US_MAX) //判断cnt_1us是否计数到最大值 begin cnt_1us <= 6'd0; //使cnt_1us清零 end else cnt_1us <= cnt_1us + 6'd1; //使cnt_1us + 1 end always@(posedge sys_clk or negedge sys_rst_n) begin if(sys_rst_n == 1'b0) //复位信号到来 begin cnt_1ms <= 10'd0; //使cnt_1ms清零 end else if((cnt_1ms == CNT_1MS_MAX)&&(cnt_1us == CNT_1US_MAX)) //判断cnt_1us和cnt_1ms是否同时计数到最大值 begin cnt_1ms <= 10'd0; //使cnt_1ms清零 end else if(cnt_1us == CNT_1US_MAX) //判断cnt_1us是否计数到最大值 begin cnt_1ms <= cnt_1ms + 10'd1; //使cnt_1ms + 1 end else cnt_1ms <= cnt_1ms; end always@(posedge sys_clk or negedge sys_rst_n) begin if(sys_rst_n == 1'b0) //复位信号到来 begin cnt_1s <= 10'd0; //使cnt_1s清零 end else if((cnt_1s == CNT_1S_MAX)&& (cnt_1ms == CNT_1MS_MAX)&&(cnt_1us == CNT_1US_MAX)) //判断cnt_1us,cnt_1ms,cnt_1s是否同时计数到最大值 begin cnt_1s <= 10'd0; //使cnt_1s清零 end else if((cnt_1ms == CNT_1MS_MAX)&&(cnt_1us == CNT_1US_MAX)) //判断cnt_1us和cnt_1ms是否同时计数到最大值 begin cnt_1s <= cnt_1s + 10'd1; //使cnt_1s + 1 end else cnt_1s <= cnt_1s; //使cnt_1s保持不变 end always@(posedge sys_clk or negedge sys_rst_n) begin if(sys_rst_n == 1'b0) //复位信号到来 begin cnt_en <= 1'b0; //使cnt_1s清零 end else if((cnt_1s == CNT_1S_MAX)&& (cnt_1ms == CNT_1MS_MAX)&&(cnt_1us == CNT_1US_MAX)) //判断cnt_1us,cnt_1ms,cnt_1s是否同时计数到最大值 begin cnt_en <= ~cnt_en; //使cnt_en取反 end else cnt_en <= cnt_en; //使cnt_en保持不变 end always@(posedge sys_clk or negedge sys_rst_n) begin if(sys_rst_n == 1'b0) //复位信号到来 begin led_out <= 1'b1; //使led_out置1 end else if(((cnt_en == 1'b0)&&(cnt_1ms <= cnt_1s)) || ((cnt_en == 1'b1)&&(cnt_1ms > cnt_1s))) //判断cnt_en为0且cnt_1ms计数值小于等于cnt_1s begin //或者判断cnt_en为1且cnt_1ms计数值大于cnt_1s执行 led_out <= 1'b0; //使led_out置0 end else led_out <= 1'b1; //使led_out置1 end endmodule //模块结束
模仿编号给出:
逼真正弦波形方式:`timescale 1ns/1ns //时间尺度预编译指令 时间单位/时间精度 module tb_breath_led (); //定义模块名称为tb_breath_led reg 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 //延时20ns sys_rst_n = 1'b1 ; //使sys_rst_n电平拉高 end always #10 sys_clk = ~sys_clk; //使sys_clk电平10ns电平状态反转一次 endmodule //模块结束
从该图是可以分辨出,执行后的仿真技术弧形与的设计意愿维持相符,钓鱼任务搞定。
🔥🔥🔥本系列文章持续更新,喜欢的话可以关注收藏~🔥🔥🔥
皇冠新体育APP相关的文章
- 皇冠新体育APP:基于Restful页面数据交互案例_后端成长小白
- 分页、过滤,排序、限流_qishaoawei
- 皇冠新体育APP:Spring Boot2配置Swagger2生成API接口文档_java小姜在线冲
- 皇冠新体育APP:测试智慧城市项目API接口_智慧城市接口_howard2005
- 皇冠新体育APP:@RequestBody实验总结_剑陈佣兵连_@requestbody boolean
- hutool工具-----JSON工具-JSONUtil_伏加特遇上西柚_hutool jsonutil
- Beanshell相关_beanshell prev_c1207062631
- 皇冠新体育APP:String类型转换成json对象_string转jsonobject_周超能
- Go Web开发框架 Gin_shiyivei
- REST学习_bobo洁厕灵_rest学习
- ubuntu虚拟机中安装Hadoop全过程(单机分布方式+伪分布方式)_m0_61083409_ubuntu安装伪分布式hadoop
- 分布式存储技术解读系列之一:Ceph| 架构进阶_米朵儿技术屋
- 10.Rest原理_我就要用HashMap
- Json字符串和对象相互转换_AloneDrifters_json字符串转对象
- springmvc,springboot,mybatisplus_springboot mvc mybatisplus_绥阳朱韬
- drf_day04_怼怼哎