05. 基于Verilog的呼吸灯程序设计

05_led_breath_v0

一个基于Verilog的呼吸灯程序示例,该程序通过PWM(脉冲宽度调制)技术来模拟呼吸灯的效果,逐渐变亮再逐渐变暗的LED灯,给人一种灯光在“呼吸”的感觉。

原理解释:

  1. PWM(脉冲宽度调制):通过改变输出信号的占空比来模拟不同亮度的LED灯。

  2. 呼吸灯周期:呼吸灯的周期由breathing_cnt控制,这里假设周期为1/4秒钟。

  3. 呼吸灯亮度变化:呼吸灯的亮度变化通过改变占空比的值来模拟。

  • 当pwm_cnt小于当前pwm_duty时,LED亮;
  • 当pwm_cnt大于pwm_duty时,LED不亮。

知识点:

  • PWM(脉冲宽度调制)
  • Duty(占空比)
  • 位宽确定可表达的最大整数值
  • 位拼接语法 assign led = {6{led_breathing}};
module led_breath #(parameter CLK_FREQ = 50000000,parameter LED_ON = 1'b0
)(input wire clk,       input wire rst_n,     output wire [5:0] led      
);// 定义一个计数器用于产生PWM波形
reg [11:0] pwm_cnt;
reg [11:0] pwm_duty;reg [31:0] breath_cnt;// 呼吸灯周期,假设为1秒钟4个周期
localparam CYCLE = CLK_FREQ/4;always @(posedge clk) beginif (!rst_n) breath_cnt <= 0;else beginbreath_cnt <= breath_cnt + 1'b1;if (breath_cnt == CYCLE-1) breath_cnt <= 0;end
endwire breath_done = (breath_cnt == CYCLE-1);//PWM CNT
always @(posedge clk) beginif (!rst_n) pwm_cnt <= 0;else pwm_cnt <= pwm_cnt + 1'b1;
end//PWM Duty
//light to off
always @(posedge clk) beginif (!rst_n) pwm_duty <= 12'hFFF;else if(breath_done) beginif(pwm_duty == 0) pwm_duty <= 12'hFFF;else pwm_duty <= {1'b0,pwm_duty[11:1]};end//else pwm_duty <= pwm_duty;
end/*
//off to light on
always @(posedge clk) beginif (!rst_n) pwm_duty <= 12'b0;else if(breath_done) beginif(pwm_duty == 12'hFFF) pwm_duty <= 12'b0;else pwm_duty <= {pwm_duty[10:0],1'b1};end//else pwm_duty <= pwm_duty;
end
*/// 根据PWM计数器的值和呼吸灯的亮度变化来控制LED的亮度
reg led_breathing;
//parameter LED_ON = 1'b0; //led active low on our board
localparam LED_OFF = ~LED_ON;always @(posedge clk) beginif (!rst_n) led_breathing <= LED_OFF;else if (pwm_cnt < pwm_duty) beginled_breathing <= LED_ON;end else led_breathing <= LED_OFF;
endassign led = {6{led_breathing}};endmodule

扩展思维

  1. 学习了点亮LED、LED闪烁、LED跑马灯和LED呼吸灯这样多种模式LED效果,思考如何将这些不同的效果在一个工程里全部实现,并利用DIP开关选择不同的运行模式,呈现不同的效果。

  2. 尝试修改代码实现6个LED分为两组,每组以不同的频率呼吸。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/6909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里实习生:面试阿里其实并没有那么难。

愉快的五一假期已经结束了, 又要投入到学习和工作当中了。 今天分享一位同学在阿里的Go后端实习面经详解, 希望对你有帮助。 Go里有哪些数据结构是并发安全的&#xff1f; 并发安全就是程序在并发的情况下执行的结果都是正确的&#xff1b; Go中数据类型分为两大类&#xff…

Python 连接 Oracle 数据库加入超时处理机制

Python 连接 Oracle 数据库加入超时处理机制 0. 引言1. 示例代码 0. 引言 Python 连接 Oracle 数据库&#xff0c;如何 SQL 语句有问题时还不加入超时机制&#xff0c;就会一致执行停止在那里。 1. 示例代码 1-1. 代码讲解 下面的代码展示了如何在 Python 中使用多线程来处…

24年最新抖音、视频号0成本挂机,单号每天收益上百,可无限挂

详情介绍 这次给大家带来5月份最新的短视频挂机项目&#xff0c;简单易上手&#xff0c;而且不需要任何投入&#xff0c;经过测试收益非常可观&#xff0c;软件完全免费&#xff0c;特别适合没有时间但是想做副业的家人们

ai生图什么软件好?推荐7个不错的AI绘画软件

ai生图什么软件好&#xff1f;推荐7个不错的AI绘画软件&#xff01;小编带你进入一个创意与科技交融的奇妙世界——AI绘画&#xff0c;让我们一同领略其中的魅力吧~ 一、爱制作AI 这款AI人工智能软件是一款多功能的工具平台&#xff0c;集合了AI问答、AI绘画和AI智能写作等功能…

在离线环境中将运行 Oracle DB 12c 的 CentOS 7.5 原地升级并迁移至 RHEL 7.9

《OpenShift / RHEL / DevSecOps 汇总目录》 说明 本文只是说明如何在 CentOS 7.5 上准备 Oracle DB 12c 验证环境&#xff0c;而将该环境升级并迁移至 RHEL 7.9 的操作过程请参见&#xff1a;《在离线环境中将 CentOS 7.5 原地升级并迁移至 RHEL 7.9》一文。 另外&#xff…

我希望未来10年,人工智能可以帮我解决这4件小事

生活在一线大城市的我&#xff0c;现在几乎整天被大数据、人工智能、机器学习、智慧生活的词汇环绕立体包围着&#xff0c;让我时刻感觉到&#xff0c;再过10年&#xff0c;我们五一假期真的可以摆脱现在擦肩接踵的旅游盛况了。但我其实要求倒是没这么高&#xff0c;我真心希望…

生产者与消费者 PV操作 与 阻塞队列

文章目录 普通方式 wait 与 notifyAll消费者生产者桌子测试类运行结果 阻塞队列Cook生产者Customer消费者测试类 普通方式 wait 与 notifyAll 消费者 package abc;public class Customer extends Thread{Overridepublic void run() {while (true) {synchronized (Desk.lock) {…

音频文件转文字怎么操作?3个方法手把手教你

音频文件转文字怎么操作&#xff1f;音频文件转文字&#xff0c;即将音频中的语音内容转换为可编辑和搜索的文本格式&#xff0c;是一项在多个场景中都非常实用的技术。无论是在会议记录、采访整理、学习笔记&#xff0c;还是视频字幕制作等场景中&#xff0c;音频转文字技术都…

吴恩达机器学习笔记:第 8 周-14降维(Dimensionality Reduction) 14.6-14.7

目录 第 8 周 14、 降维(Dimensionality Reduction)14.6 重建的压缩表示14.7 主成分分析法的应用建议 第 8 周 14、 降维(Dimensionality Reduction) 14.6 重建的压缩表示 在以前的视频中&#xff0c;我谈论 PCA 作为压缩算法。在那里你可能需要把 1000 维的数据压缩100 维特…

企业计算机服务器中了rmallox勒索病毒怎么处理,rmallox勒索病毒解密恢复

网络在为企业提供便利的同时&#xff0c;也为企业的数据安全带来严重威胁。随着网络技术的不断发展&#xff0c;越来越多的企业利用网络开展各项工作业务&#xff0c;网络数据安全问题&#xff0c;一直成为企业关心的主要话题&#xff0c;但网络威胁随着网络技术的不断成熟&…

nginx--反向代理

反向代理 指的是代理外网用户的请求到内部的指定web服务器器&#xff0c;并将数据返回给用户的一种方式&#xff0c;这是用的比较多的一种方式 模块和功能 ngx_http_proxy_module&#xff1a; 将客户端的请求以http协议转发至指定服务器进行处理。ngx_stream_proxy_module&…

CDGA|企业的不同阶段如何做数据治理?

随着数字化时代的到来&#xff0c;数据已经成为企业运营和决策的核心要素。因此&#xff0c;数据治理成为企业在不同阶段必须面对的重要课题。 本文将探讨企业在初创期、成长期、成熟期和转型期四个阶段应如何进行数据治理。 初创期&#xff1a;建立数据治理基础 在初创期&…

美的集团太子惨败五一档,一顿火锅解决不了什么事

杨幂于谦的组合&#xff0c;很新鲜。 联丰策略拥有一支由知名互联网公司和国内证券金融机构的行业专家组成的一流运营团队。凭借他们在互联网产品开发和金融风险管理方面的丰富经验,我们的团队致力于为客户提供专业和个性化的证券交易服务。 当初&#xff0c;由丁晟导演的电影…

CUDA CPP Unity Compute Shader

为学 开始一个新的学习计划&#xff0c;涵盖&#xff1a; 主题学习内容CUDAProfessional CUDA C Programming/NVIDIA CUDA初级教程视频(周斌)CCPrimer / The Cherno CPPUnity Compute ShaderUdemy Learn to Write Unity Compute ShadersLinear AlgebraMIT 18.06 Prof.Gilbert…

21.使用哈希桶封装unordered_set和unordered_map(哈希桶的迭代器的实现)

1. hash表迭代器的实现 1.1 普通迭代器 // 由于迭代器的实现&#xff0c;需要使用哈希桶&#xff0c;但是哈希桶的实现&#xff0c;又在迭代器之后 // 因此&#xff0c;我们给出一个前置声明&#xff0c;旨在告诉系统&#xff0c;哈希桶已经被实现了 // 前置声明 template<…

产品经理应该懂业务吗?

最近看到一个对新一代产品经理的定义&#xff1a;懂技术、擅运营、会管理、懂业务、能决策 第一反应是&#xff1a;哇偶&#xff0c;产品经理更牛掰了~~~ 说真的&#xff0c;产品经理岗位发展这么多年&#xff0c;还把产品经理定位在十项全能 不是进步&#xff0c;而是倒退。…

Aigtek射频功率放大器的主要功能是什么

射频功率放大器是一种专门用于放大射频信号功率的电子器件&#xff0c;它在无线通信、雷达系统、卫星通信等射频应用中起着至关重要的作用。下面将详细介绍射频功率放大器的主要功能。 信号放大&#xff1a;射频功率放大器的主要功能之一就是将传入的射频信号放大到所需的功率水…

Flask与HTTP

一、请求响应循环 “请求-响应循环”&#xff1a;客户端发出请求&#xff0c;服务器处理请求并返回响应。 Flask Web程序的工作流程&#xff1a; 当用户访问一个URL&#xff0c;浏览器便生成对应的HTTP请求&#xff0c;经由互联网发送到对应的Web服务器。Web服务器接收请求&a…

pandas学习笔记13

map,apply,applymap ** apply&#xff1a;应用在DataFrame的行或列中&#xff1b; applymap&#xff1a;应用在DataFrame的每个元素中&#xff1b; map&#xff1a;应用在单独一列&#xff08;Series&#xff09;的每个元素中。** apply()方法 前面也说了apply方法是一般性的…

【计算机网络】FTP站点配置搭建教程以及相关问题解决方案(超详细)

文章目录 1、安装Window Server 20082、搭建FTP环境&#xff08;1&#xff09;安装FTP服务器&#xff08;2&#xff09;配置FTP服务器&#xff08;3&#xff09;测试FTP连接 3、遇到的问题以及解决方案&#xff08;1&#xff09;Windows无法访问此文件夹&#xff08;2&#xff…