SystemVerilog|テキストファイルを読み込む

Systemverilog
田中太郎
田中太郎

SystemVerilogでテキストファイルを読み込むサンプルコードです

はじめに

テキストファイルに書いてある数字を読み込んでint型の変数に代入します

サンプルコード

text.txt

text.txtに1行ずつ数字を書き込んでいきます

0
1
2
33
44
555
66
777
sample.sv

text.txtに書いた数字を1行ずつ読み込んでint型の変数に代入します

module sample;
    initial #1000 $finish;

    function automatic void txt2data (
        string file_name,
        ref int data[]
    );
        int cnt = 0;
        string line;
        int f = $fopen(file_name, "r"); // readモードでファイルを開く
        while (!$feof(f)) begin // ファイルの最後までwhileループを回す
            if ($fgets(line, f)) begin // 1行ずつ読み込む
                data[cnt] = line.atoi(); // string型で読み込まれるのでint型に変換する
                cnt += 1;
            end
        end
        $fclose(f);
    endfunction

    int data[];
    initial begin
        data = new[10];
        txt2data("text.txt", data);
        foreach (data[i]) begin // data内の変数をすべて出力する(ここでは10個)
            $display(data[i]);
        end
    end

endmodule

解説

function automatic void txt2data (
    string file_name,
    ref int data[]
);

txt2dataのfunctionを作成しています

引数はファイル名とint型の動的配列です

int f = $fopen(file_name, "r"); // readモードでファイルを開く

$fopen(<ファイル名>, <モード>)

でファイルを開きます

モードは、”r”:readモード、”w”:writeモードです

while (!$feof(f)) begin // ファイルの最後までwhileループを回す

ファイルが終了するまでループを回します

if ($fgets(line, f)) begin // 1行ずつ読み込む

$fgets(<変数>, <ファイル変数>)

は1行ずつファイルを読み込んで<変数>に格納します

data[cnt] = line.atoi(); // string型で読み込まれるのでint型に変換する

<string型>.atoi()

でstring型をint型にコンバートします

まとめ

SystemVerilogでテキストファイルを読み込んでint型の変数に代入するサンプルコードの解説をしました

コメント

タイトルとURLをコピーしました