1

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

module LEDON(LED);    

    output LED;

    reg LED;

    always 
    begin
        LED=1'b1;
    end
 endmodule

那么如何添加一个延迟来让我看到 LED 亮起和熄灭呢?我读过我必须使用触发器降低时钟速度,但我不太确定这意味着什么。

4

1 回答 1

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 的值。

于 2012-06-29T20:57:26.593 回答