FC2カウンター FPGAの部屋 2024年02月05日
fc2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Tang Primer 25K で Lチカする1(シミュレーション)

Tang Primer 25K で Lチカしてみよう。
今回は blink.sv と blink_tb.sv を作成し、Icarus Verilog でシミュレーションした。

blink.sv を示す。

module blink #(
    parameter COUNT_LIMINT = 32'd12500000 // 50MHz / 4
) (
    input clk,
    output led
);
    wire clk;
    logic led = 0;
    logic [31:0] count = 0;

    always_ff @( posedge clk ) begin : COUNTER
        if(count < COUNT_LIMINT) begin
            count <= count + 32'd1;
        end else begin
            count <= 32'd0;
        end
    end

    always_ff @( posedge clk ) begin : LED_OUTPUT
        if(count == COUNT_LIMINT-1) begin
            led <= ~led;
        end
    end
endmodule


テストベンチの blink_tb.sv を示す。

`timescale 1ns / 1ns

module blink_tb;
    logic clk;
    logic led;
    
    task gen_clk;
        forever begin
            #10 clk = ~clk; // 10 単位時間ごとに反転
        end
    endtask
    
    initial begin
        #10 fork
            gen_clk;
        join_none
    end

    initial begin // 一回のみ順番に実行される
        clk <= 1'b0;
        #510000000;
        $finish;
    end
    
    blink blint_inst(
        .clk(clk),
        .led(led)
    );

    // シミュレーション時に blink.vcd を出力する
    initial begin
        $dumpfile("blink.vcd");
        $dumpvars (0, blint_inst);
        #1;
    end
endmodule


Gowin/HDL/Examples/blink ディレクトリを作成し、blink.sv と blink_tb.sv を入れた。
Tang_Primer_25K_63_240205.png

Icarus Verilog でコンパイルした。
iverilog -o blink *.sv -g 2012
blink 実行ファイルが生成された。
シミュレーションを行った。
vpp blink
blink.vcd ファイルが生成された。
Tang_Primer_25K_64_240205.png

blink.vcd ファイルを GTKWave で開いて、波形を確認した。
Tang_Primer_25K_65_240205.png

led 出力が 250 ms で 1 になって、500 ms で 0 に戻っている。よって、LED が 1 秒間に 2 回の点滅をするはずだ。
250 ms 付近を拡大した。
Tang_Primer_25K_66_240205.png

しまった。。。12500000 までカウントしてしまって 1 多いが、どのみち LED の点滅なので、ここのままにしよう。
久しぶりに Verilog 書いた。
  1. 2024年02月05日 04:59 |
  2. Tang_Primer_25K
  3. | トラックバック:0
  4. | コメント:0