完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 Bob-Liu 于 2018-5-2 16:41 编辑
1. 讲废话 作为一个电子爱好者,我也会常常买个开发板回家鼓捣一番,总是对未知充满着好奇。而有时候,当我闲下来,默默凝视它的时候,又觉得它冷冰冰的,像个沉睡的宝宝。 在这个激情四射的年纪,我多想让每天陪伴我的“宝宝”能够有一份春意盎然的生机,让我感受她的呼吸,她的心跳。 。。。。。咳咳。。。此处省略9999个字。。。。。。 说点正事儿,那就是如何让你的板子上那颗晶莹剔透的LED,摇身变成一个会呼吸的小精灵,像你智能手机上的呼吸灯一样,每一次闪烁都给你暖暖的感觉。 现在,电脑前的你,不要犹豫,果断的把下面的干货放到你的CPLD/FPGA里吧,瞬间实现你盼望已久的呼吸灯效果,赋予她(LED)生命的气息! 2. 晒干货 例化时,仅需要按您的需求修改代码中带★号的参数 ps. 只有一处需要修改哦亲 /***************************************** Declaration *************************************************** File Name: breathe_led.v Function: 实现呼吸灯功能 Author: Bob Liu E-mail: shuangfeiyanworld@163.com Version: V1.0 Update: 2013-04-07 **********************************************************************************************************/ module breathe_led ( input clk, output reg led ); parameter FREQUENCE=50_000_000; //★此默认值是基于50MHZ的系统时钟设置的,当您调用此呼吸灯模块的时候, // 仅仅需要将此值改为连接到clk端口上的实际频率值即可(这样使得呼吸一次的时间为2s),以下所有参数均不需改动; // 如果想加快呼吸速度,可减小此值,反之增大此值 parameter WIDTH=9; reg [WIDTH:0] state0; reg [WIDTH-1:0] state1; //============================================= //控制每个占空比的持续时间 //============================================= reg [31:0] cnt0; always @ (posedge clk) begin if(cnt0==(FREQUENCE/(2**WIDTH))) begin cnt0<=0; state0<=state0+1'b1; end else begin cnt0<=cnt0+1'b1; end end //============================================= //控制占空比增大与减小 //============================================= always @ (posedge clk) begin if(state0[WIDTH]) state1<=state0[WIDTH-1:0]; else state1<=~state0[WIDTH-1:0]; end //============================================= //生成与state1进行大小比较的计数器cnt1 //============================================= wire [WIDTH-1:0] time_over; assign time_over={WIDTH{1'b1}}; reg [WIDTH-1:0] cnt1; always @ (posedge clk) begin if(cnt1==time_over) begin cnt1<=0; end else begin cnt1<=cnt1+1'b1; end end //============================================= //计数器cnt1与state1进行大小比较,以使led脉冲的占空比实现渐变 //============================================= always @ (posedge clk) begin if((cnt1+time_over/3)<=state1) //其实写成if(cnt1<=state1)即可实现led的渐亮与渐灭,但为了真实的模拟呼吸灯(可参考手机上的呼吸灯), //在此增加了time_over/3这个量,是为了使led呼吸一次之后保持1/3时间的熄灭状态 led<=0; //led亮; 如果led高电平亮,此处改为led<=1; else led<=1; //led灭; 如果led低电平灭,此处改为led<=0; end endmodule 3. 扯犊子 上面扯的有点多,嘿嘿,这里就不浪费大家时间听我叨叨了,用上述代码成功实现的好基友们,过来回帖mark一下,就算是对LZ最大的慰藉了,咱们下个帖子见 。。。 发完这一贴,我又相信爱情了! 楼主原创帖汇总: 1. 单总线传输协议b2s (附全部verilog源码) 2. 脉冲信号正常与否的判断(附全部verilog源码) 3. 基于CPLD/FPGA的呼吸灯效果实现(附全部verilog源码) 4. “同频异宽”脉冲的选择(附全部verilog源码) 5. 基于verilog的分频器设计 (可实现任意整数分频) (附全部源码) 6. 《ZedBoard高手之路》入门篇视频教程 如果对FPGA开发感兴趣,可加入《FPGA开发者联盟》QQ群:485678884 或通过QQ手机版扫描以下二维码加群: 也可以加入微信公众号“FPGA攻城狮之家”,接收FPGA相关技术知识推送。 评分 |
|
相关推荐
|
|
试一试。。。在回来
|
|
|
|
|
|
//=============================================
//控制占空比增大与减小 //============================================= always @ (posedge clk) begin if(state0[WIDTH]) state1<=state0[WIDTH-1:0]; else state1<=~state0[WIDTH-1:0]; end 这是怎么实现占空比增大与减小的啊???? |
|
|
|
|
|
很有用,最近做一个玩玩
|
|
|
|
|
|
好啊,我看不懂啊
always @ (posedge clk) begin if(state0[WIDTH]) state1<=state0[WIDTH-1:0]; else state1<=~state0[WIDTH-1:0]; end |
|
|
|
|
|
好东西,太感谢楼主了
|
|
|
|
|
|
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-3 01:20 , Processed in 0.549878 second(s), Total 51, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号