FC2カウンター FPGAの部屋 2011年05月29日
FC2ブログ

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

FPGAの部屋

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

Verilatorを試してみる6(SystemCモード2:dice_state_machine.v のテストベンチ)

Verilatorを試してみる5(SystemCモード1:SystemCのインストール)”の続き。

今度は、自分で作ったVerilogファイルのdice_state_machine.v のSystemCテストベンチを自分で書きなおしてみた。

武内さんの”電気回路/HDL/SystemC によるテストベンチ”がとても参考になった。書いてあるSystemCのテストベンチの実装の仕方のうちの”new で作成してポインタ変数に代入する”方法でSystemCテストベンチを書いてみた。そのdsm_sc.cppを下に示す。dice_state_machine.v のコードはここを参照

#include "Vdice_state_machine.h"

int sc_main(int argc, char **argv) {

    Verilated::commandArgs(argc, argv);

    sc_clock clk ("clk"10, SC_NS);
    sc_signal<bool> reset_sw, roll, roll_ena;
    sc_signal<uint32_t> spots;
    Vdice_state_machine *top;
    int clk_count;
    
    top = new Vdice_state_machine("top");
    
    top->clk(clk);
    top->reset_sw(reset_sw);
    top->roll(roll);
    top->roll_ena(roll_ena);
    top->spots(spots);
    
    reset_sw = 1;
    roll = 0;
    roll_ena = 0;
    
    sc_start(11, SC_NS);    // 1nsずらす
    reset_sw = 0;
    
    sc_start(10, SC_NS);
    roll = 1;
    
    for (clk_count=0; clk_count<20; clk_count++){
        sc_start(10, SC_NS);
        roll_ena = !roll_ena;
        cout << "roll_ena = " << roll_ena << " spots = " << spots << endl;
    }
    
    delete top;
    
    exit(0);        // シミュレーション終了
}


実行したコマンドは下の通り。

$ verlator -Wno-lint -sc dice_sta_machine.v --exe dsm_sc.cpp
$ cd obj_dir
$ make -j -f Vdice_state_machine.mk Vdice_state_machine
$ ./Vdice_state_machine.exe


上のコマンドを実行すると、下の様な結果を得られた。
Verilator_17_110529.png


次に、VCDファイルを出力するdsm_sc_vcd.cpp を下に示す。

#include "Vdice_state_machine.h"
#include "verilated_vcd_sc.h"

int sc_main(int argc, char **argv) {

    Verilated::commandArgs(argc, argv);

    sc_clock clk ("clk"10, SC_NS);
    sc_signal<bool> reset_sw, roll, roll_ena;
    sc_signal<uint32_t> spots;
    Vdice_state_machine *top;
    int clk_count;
    
    top = new Vdice_state_machine("top");
    
    top->clk(clk);
    top->reset_sw(reset_sw);
    top->roll(roll);
    top->roll_ena(roll_ena);
    top->spots(spots);

    Verilated::traceEverOn(true);
    VerilatedVcdSc* tfp = new VerilatedVcdSc;
    top->trace (tfp, 99);
    tfp->open ("simx.vcd");
    
    reset_sw = 1;
    roll = 0;
    roll_ena = 0;
    
    sc_start(11, SC_NS);    // 1nsずらす
    reset_sw = 0;
    
    sc_start(10, SC_NS);
    roll = 1;
    
    for (clk_count=0; clk_count<20; clk_count++){
        sc_start(10, SC_NS);
        roll_ena = !roll_ena;
        cout << "roll_ena = " << roll_ena << " spots = " << spots << endl;
    }
    
    tfp->close();
    delete top;
    
    exit(0);        // シミュレーション終了
}


これをコンパイル、make、実行するのに使用したコマンドを下に示す。

$ verlator -Wno-lint --trace -sc dice_sta_machine.v --exe dsm_sc_vcd.cpp
$ cd obj_dir
$ make -j -f Vdice_state_machine.mk Vdice_state_machine
$ ./Vdice_state_machine.exe


実行まで行うと、simx.vcd ファイルが生成される。それをVeritakで表示すると下のようになる。
Verilator_18_110529.png
  1. 2011年05月29日 20:44 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:0

プリンセストヨトミ(映画)を見てきた

今日は奥さんとプリンセストヨトミを見てきた。大阪の映画だった。キャストは豪華でいい味出していたと思うが、ストーリーはハチャメチャの様な?それが良いのかもしれない?
ブッダ(手塚治虫)も見てみたい。
  1. 2011年05月29日 14:56 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0