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

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

FPGAの部屋

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

Verilatorを試してみる3(C++モード3:VCDファイルを出力)

Verilatorを試してみる2(C++モード2:モジュール内部信号の観測)”の続き。

今度はVCDファイルを出力する。”Verilator Manual”の”How do I generate waveforms (traces) in C++?”を参考に、dsm_test.cppを修正した。そのソースを下に示す。

#include <iostream>
#include <verilated.h>    // Defines common routines
#include "verilated_vcd_c.h"
#include "Vdice_state_machine.h"

unsigned int main_time = 0;     // Current simulation time

double sc_time_stamp () {       // Called by $time in Verilog
    return main_time;
}

int main(int argc, char** argv) {
    Verilated::commandArgs(argc, argv);   // Remember args
    
    Vdice_state_machine *top = new Vdice_state_machine();
    
    Verilated::traceEverOn(true);
    VerilatedVcdC* tfp = new VerilatedVcdC;
    top->trace (tfp, 99);
    tfp->open ("simx.vcd");
    
    top->reset_sw = 1;        // Set some inputs
    top->clk = 0;
    top->roll = 0;
    top->roll_ena = 0;
    
    while (!Verilated::gotFinish()) {
        if (main_time > 10
            top->reset_sw = 0;    // リセットを解除する
        
        if ((main_time % 5) == 0)    // クロックを生成する
            top->clk = !top->clk;
            
        if (main_time > 20)    // roll を1にする
            top->roll = 1;
            
        if (!top->reset_sw) {    // リセットが解除された後で
            if ((main_time % 10) == 1// クロックが立ち上がった1デルタ時間後
                top->roll_ena = !top->roll_ena;
        }
        
        top->eval();    // 評価
        
        printf("Time %d : clk = %d roll_ena = %d spots = %d current_state = %.2x\n", main_time, top->clk, top->roll_ena, top->spots, top->v__DOT__current_state);

        tfp->dump(main_time);
        
        if (main_time>200)
            break;         // 終了
        
        main_time++;
    }
    
    tfp->close();
    
    top->final();        // シミュレーション終了
}


更に、コンパイルコマンドに--traceを追加した。

verilator --cc --trace -Wno-lint dice_state_machine.v --exe dsm_test.cpp


これで前回同様にmake, 実行ファイルを実行すると、simx.vcdができた。simx.vcdをveritakで表示するとDICE_STATEも表示することができた。
Verilator_10_110524.png
  1. 2011年05月24日 04:57 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:0