20.呼吸灯:利用PWM控制小灯在相同时间段内的不同占空比

news/2024/7/21 10:12:32 标签: fpga开发

(1)设计一段代码,实现led灯在一秒内由完全熄灭到完全点亮,在第二秒由完全点亮转为完全熄灭,循环往复。

(2)Verilog代码:

module breath_led(clk,reset_n,led);

    input clk;
    input reset_n;
    
    output led;
// 1 us = 1000 ns = 20ns *50;    
    reg [5:0] cnt_1us;
// 1 ms = 1000 us < 2 ^ 11 us
    reg [9:0] cnt_1ms;
// 1s   = 1000 ms < 2 ^ 11 ms
    reg [9:0] cnt_1s;
    reg overturn;   //翻转信号
    
    parameter MCNT_1us = 6'd49;
    parameter MCNT_1ms = 10'd999;
    parameter MCNT_1s  = 10'd999;

//1us计数器模块设计    
    always@(posedge clk or negedge reset_n)
        if(!reset_n)
            cnt_1us <= 6'd0;
        else if(cnt_1us == MCNT_1us)
            cnt_1us <= 6'd0;
        else 
            cnt_1us <= cnt_1us + 6'd1;

//1ms计数器模块设计
    always@(posedge clk or negedge reset_n)
        if(!reset_n)
            cnt_1ms <= 10'd0;
        else if((cnt_1ms == MCNT_1ms)&&(cnt_1us == MCNT_1us))
            cnt_1ms <= 10'd0;
        else if(cnt_1us == MCNT_1us)
            cnt_1ms <= cnt_1ms + 10'd1;
        else    
            cnt_1ms <= cnt_1ms;

//1s计数器模块设计
    always@(posedge clk or negedge reset_n)
        if(!reset_n)
            cnt_1s  <= 10'd0;
        else if((cnt_1s == MCNT_1s)&&(cnt_1ms == MCNT_1ms)&&(cnt_1us == MCNT_1us))
            cnt_1s <= 10'd0;
        else if((cnt_1ms == MCNT_1ms)&&(cnt_1us == MCNT_1us))
            cnt_1s <= cnt_1s + 10'd1;
        else 
            cnt_1s <= cnt_1s;

//翻转逻辑设计overturn
    always@(posedge clk or negedge reset_n)
        if(!reset_n)
            overturn <= 1'd0;
        else if((cnt_1s == MCNT_1s)&&(cnt_1ms == MCNT_1ms)&&(cnt_1us == MCNT_1us))
            overturn <= ~overturn;
        else    
            overturn <= overturn;

//led主程序设计
    
    assign led = (((overturn == 0)&&(cnt_1ms <= cnt_1s)) ||((overturn == 1)&&(cnt_1ms <= MCNT_1s - cnt_1s)));
    
endmodule

(3)仿真文件代码:

`timescale 1ns / 1ps

module breath_led_tb;

    reg clk;
    reg reset_n;
    
    wire led;

    breath_led breath_led_inst(
        .clk(clk),
        .reset_n(reset_n),
        .led(led)
    );
    
    defparam breath_led_inst.MCNT_1us = 4;
    defparam breath_led_inst.MCNT_1ms = 9;
    defparam breath_led_inst.MCNT_1s  = 9;

    initial clk = 1'd1;
    always #10 clk = ~clk;
    
    initial begin
        reset_n <= 1'd0;
        #15;
        reset_n <= 1'd1;
        #50000;
        $stop;
    end
    
endmodule

(4)仿真波形:

(5)引脚绑定:


http://www.niftyadmin.cn/n/5545141.html

相关文章

ansible常见问题配置好了密码还是报错

| FAILED! > { “msg”: “Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host’s fingerprint to your known_hosts file to manage this host.” } 怎么解决&#xf…

线程交互现象

线程交互现象 小明对自家的狗子有个规定&#xff0c;就是在狗狗还没吃完的时候&#xff0c;可以继续给他加饭 不好的解决方式 狗狗感觉一千年没吃饭了&#xff0c;狼吞虎咽起来&#xff0c;最后饭只剩下最后一点点&#xff0c;吃饭线程中使用while循环判断是否是1&#xff0c;…

数据分析如何正确地学习与使用

我们面对很多问题的认知和解决方案&#xff0c;会极大地影响我们在数据分析之路上的成长&#xff0c;甚至是很长一段时间内的职业发展 一、如何正确地学习数据分析&#xff1f; 一定要不断积累搭建自己的知识框架&#xff01; 1.先充分理解别人的框架。 2.看已有的知识框架能不…

Mysql之Using index for skip scan

一、Using index for skip scan 在 MySQL 中&#xff0c;EXPLAIN 语句用于显示查询执行计划&#xff0c;帮助我们理解查询是如何被执行的&#xff0c;以及如何优化查询。其中&#xff0c;Extra 列提供了关于查询执行的一些额外信息。当 Extra 列显示 Using index for skip sca…

DNF手游攻略:云手机辅助刷副本!内置辅助工具!

DNF手游是一款备受玩家喜爱的角色扮演类游戏&#xff0c;以其独特的地下城探险和多样化的装备系统而闻名。玩家需要通过不断的挑战和升级&#xff0c;逐步增强自己的角色实力&#xff0c;最终完成各种高难度的副本任务。游戏的核心玩法包括打怪、刷装备、升级技能等。 游戏辅助…

《金山 WPS AI 2.0:重塑办公未来的智能引擎》

AITOP100平台获悉&#xff0c;在 2024 世界人工智能大会这一科技盛宴上&#xff0c;金山办公以其前瞻性的视野和创新的技术&#xff0c;正式发布了 WPS AI 2.0&#xff0c;犹如一颗璀璨的星辰&#xff0c;照亮了智能办公的新征程&#xff0c;同时首次公开的金山政务办公模型 1.…

ScreenAI ——能理解从信息图表到用户界面的图像和文本算法解析

概述 论文地址&#xff1a;https://arxiv.org/pdf/2402.04615.pdf 信息图表&#xff08;图表、示意图、插图、地图、表格、文档布局等&#xff09;能够将复杂的数据和想法转化为简单的视觉效果&#xff0c;因此一直以来都被视为传播的重要元素。这种能力来自于通过布局和视觉线…

计算机毕业设计Python美食推荐系统 美团爬虫 美食可视化 机器学习 深度学习 混合神经网络推荐算法 Hadoop Spark 人工智能 大数据毕业设计

一、项目简介 随着大数据和人工智能技术的迅速发展&#xff0c;我们设计并开发了一款基于大数据的北京美食系统。该系统旨在为用户提供全面而个性化的美食服务体验。在这个时代背景下&#xff0c;人们对美食的需求不仅停留在简单的满足口腹之欲&#xff0c;更加注重个性化、健…