所以我是Verilog
和CPLD的新手。我写了一些打开LED的代码,现在我想让它闪烁。
module LEDON(LED);
output LED;
reg LED;
always
begin
LED=1'b1;
end
endmodule
那么如何添加一个延迟,让我看到LED开启和关闭?我已经读过,我必须使用触发器降低时钟速度,但我不太清楚这意味着什么。
答案 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的值。