田中太郎
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型の変数に代入するサンプルコードの解説をしました
コメント