agod_night 2022-08-09 11:37 采纳率: 100%
浏览 57
已结题

fpga实现了呼吸灯功能 但存在灯闪烁现象

用的zynq7020的板子 代码功能正常 但是一直会时不时闪烁 后面增加了一个寄存器存储灯还是存在该现象 这个是什么原因呢?

代码如下 板子频率125mhz
`timescale 1ns / 1ps
module breath_led(
input sysclk ,
input rst_n ,
output led
);
reg [31:0] cnt_ms ;
reg [31:0] cnt_us ;
reg [31:0] cnt_ns ;
reg cnt_s ;
reg led_green;
always@(posedge sysclk)
if(!rst_n)
begin
cnt_s <= 1'd0;
cnt_ms <= 32'd0;
cnt_us <= 32'd0;
cnt_ns <= 32'd0;
end
else if(cnt_ms >= 998 && cnt_us >= 998 && cnt_ns >= 249)//计数秒
begin
cnt_s <= ~cnt_s;
cnt_ms <= 32'd0;
cnt_us <= 32'd0;
cnt_ns <= 32'd0;
end
else if(cnt_us >= 998 && cnt_ns >= 249)//计数毫秒
begin
cnt_s <= cnt_s;
cnt_ms <= cnt_ms + 32'd1;
cnt_us <= 32'd0;
cnt_ns <= 32'd0;
end
else if(cnt_ns >= 249)//计数微秒
begin
cnt_s <= cnt_s;
cnt_ms <= cnt_ms;
cnt_us <= cnt_us + 32'd1;
cnt_ns <= 32'd0;
end
else //计数纳秒
begin
cnt_s <= cnt_s;
cnt_ms <= cnt_ms;
cnt_us <= cnt_us;
cnt_ns <= cnt_ns + 32'd1;
end

always@(posedge sysclk)
if(!rst_n)
led_green <= 1'd1;
else if(cnt_us <= cnt_ms && cnt_s == 1'd0)
led_green <= 1'd1;
else if(cnt_us >= cnt_ms && cnt_s == 1'd1)
led_green <= 1'd1;
else
led_green <= 1'd0;
assign led = led_green;

endmodule

  • 写回答

1条回答 默认 最新

  • 老皮芽子 2022-08-09 14:27
    关注

    代码看不出问题,怀疑是板子硬件方面可能有问题。
    从代码上看 rst_n = 0 时,LED 会亮一下。需要你去检查板子的复位 rst_n 信号是不是稳定。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月23日
  • 已采纳回答 8月15日
  • 创建了问题 8月9日