尝试在Verilog中闪烁LED [英] Trying to blink LED in Verilog
本文介绍了尝试在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屋!
查看全文