当前位置: 首页 > news >正文

打工人日报#20251003

打工人日报#20251003

知识点

呼吸灯

将由亮到暗的渐变过程定义为 2s,接下来我们将这 2s 分成 1000 份,就是由亮到暗的渐
变过程中有 1000 个亮度过渡,每一份过渡时间为 2ms;接下开我们再将每一份过渡时间 2ms 均分为 1000
份,每份时间为 2us,我们以 2us 为单位递减 2ms 中的高电平的占空比,随着高电平占空比的不断减少,led
灯的亮度不断变暗。
在这里插入图片描述
在这里插入图片描述
当连接用户 LED 灯的 IO 电压为高时,用户 LED 灯熄灭,当连接 IO 电压为低时,用户 LED 会被点亮。

led.v

// 三个计时器集成模块:2us、2ms、2S
// 时钟频率默认为50MHz,可通过参数调整
module three_timers (input           sys_clk,        // 时钟信号input           sys_rst_n,      // 复位信号,低电平有效output reg      led
);// parameter define
// CNT_2US_MAX 定义2us计数器的最大值,对于50MHz时钟,2us内时钟周期数为50 * 2 = 100,减1是因为从0开始计数
parameter CNT_2US_MAX = 7'd100; 
// CNT_2MS_MAX 定义2ms计数器的最大值,50MHz时钟下,2ms内时钟周期数为50000 * 2 = 100000,这里设置为10'd1000只是示例,实际应调整
parameter CNT_2MS_MAX = 10'd1000; 
// CNT_2S_MAX 定义2s计数器的最大值,50MHz时钟下,2s内时钟周期数为50000000 * 2 = 100000000,这里设置为10'd1000只是示例,实际应调整
parameter CNT_2S_MAX = 10'd1000; // reg define
reg [6:0] cnt_2us; // 用于2us计数的寄存器,7位足以表示0到100的计数值
reg [16:0] cnt_2ms; // 用于2ms计数的寄存器,17位足以表示较大计数值,目前参数设置下能满足1000的计数
reg [25:0] cnt_2s; // 用于2s计数的寄存器,26位足以表示较大计数值,目前参数设置下能满足1000的计数
reg inc_dec_flag; // 亮度控制标志,0表示亮度递增,1表示亮度递减//*****************************************************
//** main code
//*****************************************************
// cnt_2us:计数 2us
// 该always块在时钟上升沿或复位信号下降沿触发
// 当复位信号有效(低电平)时,将2us计数器清零
// 当2us计数器达到最大值减1时,将其清零,重新开始计数
// 否则,计数器递增1
always  @(posedge sys_clk or negedge sys_rst_n) beginif (!sys_rst_n) begincnt_2us <= 7'b0;end else if (cnt_2us == (CNT_2US_MAX - 7'b1)) begincnt_2us <= 7'b0;end else begincnt_2us <= cnt_2us + 7'b1;end
end
// cnt_2ms:计数 2ms
// 该always块在时钟上升沿或复位信号下降沿触发
// 当复位信号有效(低电平)时,将2ms计数器清零
// 当2ms计数器达到最大值减1且2us计数器达到最大值减1时,将2ms计数器清零,重新开始计数
// 当2us计数器达到最大值减1时,2ms计数器递增1
// 否则,2ms计数器保持当前值
always @(posedge sys_clk or negedge sys_rst_n) beginif (!sys_rst_n) begincnt_2ms <= 10'b0;end else if ((cnt_2ms == (CNT_2MS_MAX - 10'b1)) && (cnt_2us == (CNT_2US_MAX - 7'b1))) begincnt_2ms <= 10'b0;end else if (cnt_2us == (CNT_2US_MAX - 7'b1)) begincnt_2ms <= cnt_2ms + 10'b1;end else begincnt_2ms <= cnt_2ms;end
end
// cnt_2s:计数 2s
// 该always块在时钟上升沿或复位信号下降沿触发
// 当复位信号有效(低电平)时,将2s计数器清零
// 当2s计数器达到最大值减1、2ms计数器达到最大值减1且2us计数器达到最大值减1时,将2s计数器清零,重新开始计数
// 当2ms计数器达到最大值减1且2us计数器达到最大值减1时,2s计数器递增1
// 否则,2s计数器保持当前值
always @(posedge sys_clk or negedge sys_rst_n) beginif (!sys_rst_n) begincnt_2s <= 10'b0;end else if ((cnt_2s == (CNT_2S_MAX - 10'b1)) && (cnt_2ms == (CNT_2MS_MAX - 10'b1)) && (cnt_2us == (CNT_2US_MAX - 7'b1))) begincnt_2s <= 10'b0;end else if ((cnt_2ms == (CNT_2MS_MAX - 10'b1)) && (cnt_2us == (CNT_2US_MAX - 7'b1))) begincnt_2s <= cnt_2s + 10'b1;end else begincnt_2s <= cnt_2s; end
end
// inc_dec_flag为低电平,led灯由暗变亮,inc_dec_flag为高电平,led灯由亮变暗
// 该always块在时钟上升沿或复位信号下降沿触发
// 当复位信号有效(低电平)时,亮度控制标志初始化为0(亮度递增)
// 当2s、2ms和2us计数器都达到各自最大值减1时,翻转亮度控制标志
// 否则,亮度控制标志保持当前值
always @(posedge sys_clk or negedge sys_rst_n) beginif (!sys_rst_n) begininc_dec_flag <= 1'b0;end else if ((cnt_2s == (CNT_2S_MAX - 10'b1)) && (cnt_2ms == (CNT_2MS_MAX - 10'b1)) && (cnt_2us == (CNT_2US_MAX - 7'b1))) begininc_dec_flag <= ~inc_dec_flag;end else begininc_dec_flag <= inc_dec_flag;end
end
// led:输出信号连接到外部的led灯
// 该always块在时钟上升沿或复位信号下降沿触发
// 当复位信号有效(低电平)时,led熄灭
// 当亮度控制标志为1且2ms计数器值大于等于2s计数器值,或者亮度控制标志为0且2ms计数器值小于等于2s计数器值时,led点亮
// 否则,led熄灭
always @(posedge sys_clk or negedge sys_rst_n) beginif (!sys_rst_n) beginled <= 1'b0;end else if ((inc_dec_flag == 1'b1 && cnt_2ms >= cnt_2s) || (inc_dec_flag == 1'b0 && cnt_2ms <= cnt_2s)) beginled <= 1'b1;end else beginled <= 1'b0;end
end
endmodule 

led.xdc

set_property IOSTANDARD LVCMOS33 [get_ports led]
set_property PACKAGE_PIN J14 [get_ports led]create_clock -period 20.000 -name clk -waveform {0.000 10.000} [get_ports clk]set_property IOSTANDARD LVCMOS33 [get_ports sys_clk]
set_property IOSTANDARD LVCMOS33 [get_ports sys_rst_n]
set_property PACKAGE_PIN U18 [get_ports sys_clk]
set_property PACKAGE_PIN N15 [get_ports sys_rst_n]

阅读

《杀死一只知跟鸟》
第八章 结束
在这里插入图片描述

http://www.dtcms.com/a/438522.html

相关文章:

  • Java学习之旅第一季-27:输入与输出
  • 地方网站域名选择嘉伟网络智能建站
  • Leetcode 3695. Maximize Alternating Sum Using Swaps
  • 模型瘦身四剑客:剪枝、量化、低秩分解、知识蒸馏详解
  • php 校园网站设计如何做网站流程图
  • 如何高效下载 YouTube 视频?实用工具推荐
  • 【洛谷】6 道题吃透堆的应用:模板堆、第 k 小、最小函数值等全攻略
  • MySQL库的操作(ubuntu)
  • 利用AI赋能抑郁症管理:创业项目与技术方案
  • 中国网站建设市场分析报告上海网站设计合理柚v米科技
  • 【IMX6ULL项目复现】sg90电机-pwm
  • 2025软件供应链安全实战:从漏洞修补到风险预测的转型指南
  • iOS26 打开开发者模式
  • 注销主体备案与网站备案沧州最火网站
  • AI智能体在研究分析中的仿真应用:AI驱动的复杂系统建模与“理论压缩”
  • 表格识别技术:突破传统OCR的局限,通过定位-解析-重建三步策略攻克无边框、合并单元格等视觉难题
  • 免费企业模板网站制作网页设计公司
  • 开放定址法的平均查找长度计算
  • MEVless,MEV解决之道
  • 网站 自适应文字大小怎么做响应式网站建设公司
  • 手写MyBatis第89弹:动态SQL解析与执行时机深度剖析
  • 解读172页“十五五”企业战略规划指导手册【附全文阅读】
  • 网站开发个人工作室网站推送怎么做的
  • 机器学习:逻辑回归
  • 机器学习——SVM支持向量机详解
  • app网站开发wordpress 自定义字段 调用
  • 互动网站建设什么意思wordpress 公众号插件
  • CUDA 13.0 中 CCCL 2.x 到 CCCL 3.0 迁移介绍
  • 临沂企业网站建设网站建设 技术方案
  • 《计算机视觉度量:从特征描述到深度学习》-- 基于MAE预训练模型DinoV3的图像特征分析