1

だから私はVerilogCPLDに不慣れです。LEDを点灯させるコードを書きましたが、今度はLEDを点滅させたいと思います。

module LEDON(LED);    

    output LED;

    reg LED;

    always 
    begin
        LED=1'b1;
    end
 endmodule

では、LEDのオンとオフを確認できるようにする遅延を追加するにはどうすればよいですか?フリップフロップを使用してクロック速度を遅くする必要があることを読みましたが、これが何を意味するのかよくわかりません。

4

1 に答える 1

4

クロック周波数を遅くする必要はありません。あなたがしたいのは、非常に多くのクロックサイクルの後にLEDを切り替えるカウンターを作ることです。

1MHzのクロックがあり、LEDを1秒に1回切り替えたい場合は、次のようにします。

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 に答える