4个led呼吸不同步(野火升腾拓展)

任务

本例中我们实现了一个 led 灯的"呼吸",而板子上有 4 个 led 灯,我们可以修改代码让 4 个 led 灯的呼吸频率都不同步,大家可以尝试一下。

代码

module breath_led

#(

parameter CNT_1US_MAX = 6'd49,

parameter CNT_1MS_MAX = 10'd999,

parameter CNT_1S_MAX = 10'd999

)

(

input sys_clk,

input sys_rst_n,

output reg 3:0 led_out

);

// 计数器定义

reg 5:0 cnt_1us;

reg 9:0 cnt_1ms;

reg 9:0 cnt_1s 3:0;

reg cnt_1s_en 3:0;

// 1us计数器

always @(posedge sys_clk or negedge sys_rst_n)

if(!sys_rst_n)

cnt_1us <= 6'd0;

else if(cnt_1us == CNT_1US_MAX)

cnt_1us <= 6'd0;

else

cnt_1us <= cnt_1us + 1'b1;

// 1ms计数器

always @(posedge sys_clk or negedge sys_rst_n)

if(!sys_rst_n)

cnt_1ms <= 10'd0;

else if(cnt_1ms == CNT_1MS_MAX && cnt_1us == CNT_1US_MAX)

cnt_1ms <= 10'd0;

else if(cnt_1us == CNT_1US_MAX)

cnt_1ms <= cnt_1ms + 1'b1;

// 为每个LED生成独立的秒计数器和控制逻辑

genvar i;

generate

for (i = 0; i < 4; i = i + 1) begin : led_inst

// 独立的秒计数器,初始相位错开

always @(posedge sys_clk or negedge sys_rst_n)

if(!sys_rst_n)

cnt_1si <= i * 10'd250;

else if(cnt_1si == CNT_1S_MAX && cnt_1ms == CNT_1MS_MAX && cnt_1us == CNT_1US_MAX)

cnt_1si <= 10'd0;

else if(cnt_1ms == CNT_1MS_MAX && cnt_1us == CNT_1US_MAX)

cnt_1si <= cnt_1si + 1'b1;

// 独立的方向标志

always @(posedge sys_clk or negedge sys_rst_n)

if(!sys_rst_n)

cnt_1s_eni <= 1'b0;

else if(cnt_1si == CNT_1S_MAX && cnt_1ms == CNT_1MS_MAX && cnt_1us == CNT_1US_MAX)

cnt_1s_eni <= ~cnt_1s_eni;

// PWM输出控制

always @(posedge sys_clk or negedge sys_rst_n)

if(!sys_rst_n)

led_outi <= 1'b0;

else if((cnt_1s_eni && cnt_1ms < cnt_1si) || (!cnt_1s_eni && cnt_1ms > cnt_1si))

led_outi <= 1'b0;

else

led_outi <= 1'b1;

end

endgenerate

endmodule

引脚限制

=============================================================================

时钟与复位信号约束

=============================================================================

系统时钟输入(50MHz晶振)

set_property PACKAGE_PIN W19 get_ports sys_clk

set_property IOSTANDARD LVCMOS33 get_ports sys_clk

全局复位按键(低电平有效)

set_property PACKAGE_PIN N15 get_ports sys_rst_n

set_property IOSTANDARD LVCMOS33 get_ports sys_rst_n

=============================================================================

LED灯引脚约束

开发板LED为共阳极接法:led_out=0时灯亮,led_out=1时灯灭

=============================================================================

LED0 控制信号

set_property PACKAGE_PIN M21 get_ports {led_out\[0}]

set_property IOSTANDARD LVCMOS33 get_ports {led_out\[0}]

LED1 控制信号

set_property PACKAGE_PIN L21 get_ports {led_out\[1}]

set_property IOSTANDARD LVCMOS33 get_ports {led_out\[1}]

LED2 控制信号

set_property PACKAGE_PIN K21 get_ports {led_out\[2}]

set_property IOSTANDARD LVCMOS33 get_ports {led_out\[2}]

LED3 控制信号

set_property PACKAGE_PIN K22 get_ports {led_out\[3}]

set_property IOSTANDARD LVCMOS33 get_ports {led_out\[3}]

相关推荐
Eloudy8 小时前
FPGA (QSFP28 + CMAC US+ RoCEv2) 与 Ubuntu22 + Mellanox 网卡直连分析
fpga开发
szxinmai主板定制专家9 小时前
RK3568+FPGA高速并行采集|半导体探针测试设备多通道同步数据采集系统设计
人工智能·嵌入式硬件·计算机视觉·fpga开发
ARM|X86+FPGA工业主板厂家1 天前
RK3588+FPGA+EtherCAT异构架构解析|工业场景如何同时保住AI算力与微秒级运动实时性
人工智能·fpga开发·架构
zlinear数据采集卡2 天前
从“脏信号”到“纳伏级纯净”:硬核拆解DABL7606的多级抗混叠滤波与24位过采样算法
arm开发·科技·嵌入式硬件·fpga开发·开源
尤老师FPGA2 天前
HDMI数据的接收发送实验(二十)
fpga开发
千寻xun2 天前
三、实战篇-NVME SSD控制之FPGA实现(一)
fpga开发·nvme ssd·nvme协议
XMAIPC_Robot3 天前
软硬协同实时控制|RK3588业务调度+FPGA硬件时序,ethercat实现半导体设备微秒级响应(125us)
linux·arm开发·人工智能·fpga开发
upper20203 天前
从零开始设计riscv cpu记录之七
fpga开发·riscv·riscv设计·btb·分支预测
ARM|X86+FPGA工业主板厂家3 天前
AI视觉跟随运动控制实战|RK3588 NPU检测+FPGA EtherCAT多轴联动精准跟随方案,适用于半导体视觉对位等
人工智能·fpga开发·硬件工程·ethercat·实时系统
XMAIPC_Robot3 天前
RK3588+FPGA半导体设备量产踩坑大全|发热、时序漂移、推理抖动、成像干扰、EMC干扰方案
人工智能·嵌入式硬件·fpga开发·arm+fpga