私が持っているもの
可能な文字が「1」と「0」である1行のファイルがあるテストベンチを作成しようとしています。それらをすべて読み、DUT の入力として 1 つずつ使用する必要があります。
そのため、私の TB では、ファイルを読み取ってその値を DUT に渡すために、次のようなプロセスを定義しました。
stim_proc: process
file input_file: TEXT is in "DatosEntrada.dat";
variable rdline : LINE;
variable line_content : string ( 1 to 4);
variable readed_char : character;
variable j : integer := 0;
begin
while not endfile(input_file) loop
readline(input_file, rdline);
--read(rdline, line_content);
for j in 1 to rdline'length-1 loop
readed_char := line_content(j);
if (readed_char = '1') then
input <= '1';
else
input <= '0';
end if;
wait for clk_period;
end loop;
end loop;
end process;
何が起こっていると思いますか
最初の実行でファイルの最初の (そして唯一の) 行を読んでいますreadline。その後、このループは再び実行されません。
次に、ファイルからのデータは内部にある必要がありますrdline。だから私はそれを処理しなければなりません。それを行うために、rdline長さを超えてループしようとしましたが、このループは実行されません。
for j in 1 to rdline'length-1 loop
そのため、ループするにはこの行を読み取る必要があると考え、そのデータをstring変数に移動しようとしました。問題は、文字列のようなベクトル var には定義されたサイズが必要であり、ファイルの行サイズがわからないことです。
私は何を試しましたか
毎回4文字をrdline文字列に読み込み、処理してから繰り返すなど、さまざまな方法でそれを達成しようとしました。しかし、私はそれを機能させることができませんでした。
VHDL を使用したファイルの読み取りについて、Google で非常に多くの例を見つけましたが、それらはすべてほとんど同じであり、列や予想される整数などの行形式が定義されており、1 行の不明なテキストしかありません。
rdline何らかの方法で varから読み取ることで実現できると思いますが、実現できません。コーディングを手伝ってもらえますか?
前もって感謝します
