我有一个50Mhz时钟的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上工作,具有完全相同的引脚分配和时序约束
3 回答
时钟频率为50MHz,开 - 关环路为2 ** 33-1(8589934591)个周期 .
这意味着LED正试图闪烁:
任何超过25Hz的东西都不会被察觉,但这不是问题 .
当计数在0到10000000之间时,灯应关闭:
关闭时间为0.2秒,开启时间约为170秒 . 这个比例可能很难被观察到 . 切换到50/50的开/关比和更快的速度观察将更容易 .
我建议将count1 24位宽,并将输出基于count1的MSB;
您可以在0.025%的时间内关闭LED,这样您也可能不会闪烁 .
您可能希望在计数达到20000000时将计数重置为零,以便每次打开和关闭一半的时间 . 或者在状态达到1000000时切换状态 -
如果上面的解释不够充分,那么这里有一个完整代码的full explanation .