尝试在Verilog中闪烁LED [英] Trying to blink LED in Verilog

查看:4
本文介绍了尝试在Verilog中闪烁LED的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个50 Mhz时钟的CPLD。

这是我的代码:

module FirstProject(clk, LED);
  output LED;
  input  clk;

  reg [32:0] count1;
  reg        LEDstatus;


  assign LED = LEDstatus;

  always @ (posedge clk) begin
    if (count1 < 10000000) begin
      LEDstatus <= 0;
    end
    else begin
      LEDstatus <= 1;
    end
    count1 <= count1 +1;
  end

endmodule

我不知道为什么这不起作用。它部署在CPLD上,但灯始终亮着

此代码在我的CPLD上运行,具有完全相同的引脚分配和时序约束

http://www.fpga4fun.com/Opto2.html

推荐答案

时钟频率为50 MHz,开关环路为2**33-1(8589934591)周期。

1/Hz = seconds
slowdown factor * 1/Hz = seconds to complete loop

这表示LED尝试在以下位置闪烁:

(8589934591 / 50000000) = 171s, slower than 1Hz

任何超过25 hz的东西都不会被察觉,但这不是这里的问题。

当计数介于0和10000000之间时,灯应熄灭:

10000000 / 50000000 = 0.2 Seconds

关闭时间为0.2秒,打开时间约为170秒。这一比例很可能很难观察到。切换到50/50的开/关比和更快的速度观察会更容易。

我建议将Count1设置为24位宽,并将输出基于Count1的MSB;

reg [23:0] count1; 

always @(posedge clk) begin
  LEDstatus <= count1[23];
  count1    <= count1 + 1;
end

这篇关于尝试在Verilog中闪烁LED的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆