3

データを読み書きするために VHDL でプログラムを実行しています。私のプログラムは、行からデータを読み取って処理し、新しい値を古い位置に保存する必要があります。私のコードは次のようなものです:

WRITE_FILE: process (CLK)
variable VEC_LINE : line;
file VEC_FILE : text is out "results";
 begin

if CLK='0' then
write (VEC_LINE, OUT_DATA);
writeline (VEC_FILE, VEC_LINE);
end if;
end process WRITE_FILE;

15 行目を読みたい場合、どうすれば指定できますか? 次に、15行目をクリアして、そこに新しいデータを書き込む必要があります。LINE はアクセス型ですが、整数値を受け入れますか?

4

2 に答える 2

3

ラッセルの答え - 2 つのファイルを使用する - が答えです。

15 行目を見つける (シークする) 良い方法はありませんが、VHDL の目的では、最初の 14 行を読み取って破棄するだけで十分です。「シーク」という名前のプロシージャでラップして続行するだけです。

すでに 17 行目にいる場合は、逆方向にシークしたり、先頭に巻き戻したりすることはできません。できることは、出力ファイルをフラッシュすることです (開いている行を保存し、残りの入力ファイルをそこにコピーし、両方のファイルを閉じてから再度開きます。当然、ファイル操作には VHDL-87 構文ではなく VHDL-93 構文が必要です)。それを「巻き戻し」と呼ばれる手順でラップして、続けてください!

現在の行番号を追跡しておけば、どこにいても 15 行目を探すことができます。

きれいではありませんし、高速ではありませんが、問題なく動作します。VHDL の目的にはこれで十分です。

言い換えると、必要に応じて VHDL でテキスト エディターを作成できます(読み取りは機能するはずですが、対話型入力の問題は無視します)。そのうちの 1 つは、オブジェクト指向の VHDL によく似ています...stdin

于 2013-10-05T12:25:06.140 に答える
2

入力ファイルと出力ファイルの 2 つのファイルを使用します。

file_open(vectors, "stimulus/input_vectors.txt", read_mode);
file_open(results, "stimulus/output_results.txt", write_mode);

while not endfile(vectors) loop
   readline(vectors, iline);
   read(iline, a_in);
   etc for all your input data...

   write(oline, <output data>
end loop;

file_close(vectors);
file_close(results);
于 2013-10-04T14:58:42.887 に答える