使用CPLD闪烁LED

时间:2012-06-29 20:50:50

标签: verilog led

所以我是Verilog和CPLD的新手。我写了一些打开LED的代码,现在我想让它闪烁。

module LEDON(LED);    

    output LED;

    reg LED;

    always 
    begin
        LED=1'b1;
    end
 endmodule

那么如何添加一个延迟,让我看到LED开启和关闭?我已经读过,我必须使用触发器降低时钟速度,但我不太清楚这意味着什么。

1 个答案:

答案 0 :(得分:4)

您不必减慢时钟频率。你想要做的是制造一个在很多时钟周期后切换LED的计数器。

如果您有1MHz的时钟,并且想要每秒切换一次LED,那么就这样做

reg [31:0] count;
reg        led_state;
wire count_max = 32'd1_000_000;


assign count_nxt = (count >= count_max) ? 32'd0 : count + 32'd1;
assign led_state_nxt = (count == count_max) ? ~led_state : led_state;

always @(posedge clk)
begin
    count <= count_nxt;
    led_state <= led_state_nxt;
end

基本上这只是一个自由运行的计数器,每次达到某个值时,它都会切换led_state并重置自己。

您必须根据所需的闪烁速率和时钟频率调整count_max的值。