FC2カウンター FPGAの部屋 高位合成言語+ツールのKaruta を使ってみる3(生成されたVerilog ファイルをシミュレーション)
fc2ブログ

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

FPGAの部屋

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

高位合成言語+ツールのKaruta を使ってみる3(生成されたVerilog ファイルをシミュレーション)

高位合成言語+ツールのKaruta を使ってみる2(Verilog ファイルを生成)”の続き。

前回は、Karuta でサンプルコードをコンパイルして、Verilog ファイルを生成した。今回は、Karuta で生成したVerilog ファイルをシミュレーションしてみよう。

シミュレーションはVivado 2019.1 でVivaoSim を使用してRTL シミュレーションを行う。
calc.v は clk と rst のみの外部端子なので、リセットを外して、クロックを入れれば動作するはずだ。
まずは calc プロジェクトを作成して、テストベンチの calc_tb.v を作成した。
calc_tb.v を貼っておく。

// calc_tb.v
// 2019/10/22 by marsee

`default_nettype none
`timescale 1ns / 1ps

module calc_tb;
    wire clk;
    wire rst;
    
    calc calc_inst(
        .clk(clk),
        .rst(rst)
    );
    
    // clk_gen のインスタンス(clk)
    clk_gen #(
        .CLK_PERIOD(10),    // 10 nsec, 100 MHz
        .CLK_DUTY_CYCLE(0.5),
        .CLK_OFFSET(0),
        .START_STATE(1'b0)
    ) ACLKi (
        .clk_out(clk)
    );

    // rst のインスタンス
    reset_gen #(
        .RESET_STATE(1'b1),
        .RESET_TIME(100)    // 100nsec
    ) RESETi (
        .reset_out(rst),
        .init_done()
    );
endmodule

module clk_gen #(
    parameter         CLK_PERIOD = 100,
    parameter real    CLK_DUTY_CYCLE = 0.5,
    parameter        CLK_OFFSET = 0,
    parameter        START_STATE    = 1'b0 )
(
    output    reg        clk_out
);
    begin
        initial begin
            #CLK_OFFSET;
            forever
            begin
                clk_out = START_STATE;
                #(CLK_PERIOD-(CLK_PERIOD*CLK_DUTY_CYCLE)) clk_out = ~START_STATE;
                #(CLK_PERIOD*CLK_DUTY_CYCLE);
            end
        end
    end
endmodule

module reset_gen #(
    parameter    RESET_STATE = 1'b1,
    parameter    RESET_TIME = 100 )
(
    output    reg        reset_out,
    output    reg        init_done
);
    begin
        initial begin
            reset_out = RESET_STATE;
            init_done = 1'b0;
            #RESET_TIME;
            reset_out = ~RESET_STATE;
            init_done = 1'b1;
        end
    end
endmodule

`default_nettype wire


karuta_12_191022.png

PROJECT MANAGER から SIMULATION -> Run Simulation -> Run Behavioral Simulation を選択した。
論理シミュレーションが成功した。
karuta_13_191022.png

波形をFloat した。
karuta_14_191022.png

リセットが外れたクロックの立ち上がりから sram_wdate_en5 が 1 になって、SRAM に 25 を書くまでの実行している部分を拡大した。この間は 200 ns なので、 20 クロック分ということになる。
karuta_15_191022.png
  1. 2019年10月22日 20:25 |
  2. Karuta
  3. | トラックバック:0
  4. | コメント:0

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/4681-abda937a
この記事にトラックバックする(FC2ブログユーザー)