网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > Verilog >

基于CPLD/FPGA的呼吸灯效果实现(附全部verilog源码

时间:2024-12-06 21:33

人气:

作者:admin

标签:

导读:一、功能介绍 此设计可以让你的FPGA板子上那颗LED具有呼吸效果,像智能手机上的呼吸灯一样。以下源码已上板验证通过,大家可直接使用。 二、呼吸灯Verilog源码 ps1. 带★号处可根据需...

一、功能介绍

此设计可以让你的FPGA板子上那颗LED具有呼吸效果,像智能手机上的呼吸灯一样。以下源码已上板验证通过,大家可直接使用。

二、呼吸灯Verilog源码

ps1. 带★号处可根据需要进行修改.

ps2. 有需要的话可自行添加rst复位信号.

 

/***************************************** Declaration ***************************************************
File Name:    breathe_led.v
Function:     实现呼吸灯功能
**********************************************************************************************************/

module    breathe_led
(
    input            clk,
    output    reg        led
);
parameter    FREQUENCE=50_000_000;    //★调用的时候仅仅需要将此值改为连接到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

三、各种呼吸灯效果演示

  

 

  

  

 

 


 

 

如您有此功能的定制开发或其他的FPGA设计需求,请查看下面这篇文章了解我们的业务范围和联系方式,我们将竭诚为您服务。

 

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信