SystemVerilogでファイル入出力
前回テストデータと比較データを自動生成しました。その比較結果は標準出力に表示していましたが、ログとしてファイル出力できると便利そう。比較はSystemVerilg側で実施しているので、そのままSystemVerilogで出来るならやってしまいたい。ということで試してみたところ簡単にできました。
今回は前回のソースからtest_sv.svのみ変更しています。変更・追記箇所のみ以下に記載します。
・test_sv.sv
// 比較タイミング生成のためのイネーブル // VHDLモジュールへ入力してから結果出力までのクロック数を指定 bit d_c_en; assign d_c_en = (d_c_que.size() >= 1) ? 1: 0; // キューを読み出して結果と比較 byte cmp; always @(posedge clk_i) begin if (d_c_en == 1) begin cmp = d_c_que.pop_front(); // [変更点]display -> fdisplayに変更 if (d_o != cmp) begin $fdisplay(fileHandle, "NG,%d,%d", d_o, cmp); end end end // [以下追記] // ファイルオープン -> csv最初の行出力 -> テスト終了時にファイルクローズ int fileHandle; initial begin fileHandle = $fopen("test.csv","a"); $fdisplay(fileHandle, "Cmp Result,Input,Output"); @(negedge d_c_en); $fclose(fileHandle); end
出力ファイル(test.csv)の内容が以下になります。エラー時の比較値と出力結果が出力されています。
Cmp Result,Input,Output NG, 8, 12 NG, 10, 15 NG, 12, 18 NG, 14, 21
やりたいことは出来ましたが、入力値もログとして出力すると分かりやすいですね…。でも比較値と一緒にキューで遅らせるだけです。キュー便利。