VHDLにおけるtxtファイルの読み書き
4594 ワード
VHDLコードをModelSimシミュレーションする場合、IPCoreを簡単にテストするなど、比較的簡単な機能をテストすると、
類似のコードは私たちの要求を満たすことができます.
しかし、大きなcomponentをテストしたり、データのシーケンスをテストしたり、画像をテストしたりすると、ファイルを通じてデータを読み取ることが簡単になります.同時に,試験結果を保存するために,文書を用いることもしばしばある.特にFPGAの画像処理では、ファイルの読み取りが少なくない.まず、正常な画像を1つのtxtファイルに変換し、FPGAの入力として処理した画像データをtxtファイルに保存し、このtxtファイルを画像に変換することで、画像処理の効果を直感的に見ることができる.
では今日はVHDLのtxtファイルの読み込みと書き込みについてお話しします.
上記のコードは、
txtテキストの読み書き方式は全部で3種類あり、それぞれ
これは別の2つのモードです.
これは
ここでは、
次に、テキストの書き込みについて説明します.
上記のコードと同様に、ここにもdataOutのフラグsignalがあり、
テキストが開いているので、閉じるに違いありません.write_を使うとmodeというモードで開くと、
注意したいのは、書き込みの状態で、テキストを閉じていない場合は、テキストのサイズは常に0 Kですが、開いているかテキストのデータ情報が見えるか、中のデータもコピーできますが、これらのデータはこのテキストには本当に存在しません.このテキストもModelSimに占有され、コピー、切り取りなどの操作はできません.
ここでは、シミュレーションを終了するフラグsignal
注意したいのは、入力されたデータと出力されたデータはすべてバイナリデータなので、MatlabやVisual Studioなどのツールでデータをバイナリデータに変換することです.同様に、出力されたデータも通常のデータに変換してこそ、その特性をよく観察することができる.
signalName <= x"01"; wait for cam_period*5;
signalName <= x"10"; wait for cam_period*5;
類似のコードは私たちの要求を満たすことができます.
しかし、大きなcomponentをテストしたり、データのシーケンスをテストしたり、画像をテストしたりすると、ファイルを通じてデータを読み取ることが簡単になります.同時に,試験結果を保存するために,文書を用いることもしばしばある.特にFPGAの画像処理では、ファイルの読み取りが少なくない.まず、正常な画像を1つのtxtファイルに変換し、FPGAの入力として処理した画像データをtxtファイルに保存し、このtxtファイルを画像に変換することで、画像処理の効果を直感的に見ることができる.
では今日はVHDLのtxtファイルの読み込みと書き込みについてお話しします.
file_open(file_status,FILE_OUT,"data_record.txt",write_mode);
上記のコードは、
write Mode
というドキュメントを開くdata_record.txt
という意味で、ファイル全体の読み取りと書き込みシステムの中で最も重要です.txtテキストの読み書き方式は全部で3種類あり、それぞれ
read_mode
、write_mode
とappend_mode
である.文字通り、読み取りモード、書き込みモード、拡張モードである.append_mode
とwrite_mode
の違いは、write_mode
はテキストに元々存在していた内容を消去し、append_mode
は消去しないことです.file_open(file_status,FILE_OUT,"data_record.txt",read_mode);
file_open(file_status,FILE_OUT,"data_record.txt",append_mode);
これは別の2つのモードです.
--
stim_process : process(cam_clk)
variable i : integer:= 0;
file TEST_IN : TEXT;
variable LINE_IN: line;
variable dat_in : std_logic_vector(31 downto 0);
begin
if(rst_n = '0' and dataIn = '0') then
file_open(TEST_IN, "image-binary-data.txt", READ_MODE);
dataIn <= '1';
elsif(rising_edge(cam_clk)) then
if((i mod ((512*135) + 300)) < 300) then
vs_i <= '0';
else
vs_i <= '1';
end if;
if (((i mod ((512*135) + 300)) < 300) or (((i mod (512*135+300))-300) mod 135) < 7) then
hs_i <= '0';
dv_i <= '0';
da_i <= (others => '0');
else
hs_i <= '1';
dv_i <= '1';
readline(TEST_IN, LINE_IN);
read(LINE_IN, dat_in);
da_i <= dat_in;
end if;
i := i + 1;
end if;
end process;
これは
image-binary-data.txt
からデータを読み出すプロセスであり、もちろん、特定の時点でのみテキストからデータを読み出す判断プロセスも含まれている.ここでは、
dataIn
を設定し、その初期値を'0'
に設定します.テキストが開いた後、このsignalを'1'
に設定し、rst_n = '0'
とdataIn = '0'
の2つの条件が満たされた場合にテキストの開きを行い、その後、テキストを行単位で読み取り、次のcomponentに入力します.次に、テキストの書き込みについて説明します.
--
process(cam_clk)
FILE FILE_OUT : TEXT;
variable file_status:file_open_status;
variable buf:LINE;
begin
if(rst_n = '0' and dataOut = '0') then
file_open(file_status,FILE_OUT,"data_record.txt",write_mode);
file_close(FILE_OUT);
file_open(file_status,FILE_OUT,"data_record.txt",append_mode);
dataOut <= '1';
elsif(rising_edge(cam_clk))then
if(dv_o='1') then
write(buf,da_o);
writeline(FILE_OUT,buf);
end if;
if(sim_end = '1') then
file_close(FILE_OUT);
end if;
end if;
end process;
上記のコードと同様に、ここにもdataOutのフラグsignalがあり、
rst_n = '0' and dataOut = '0'
この2つの要求が同時に満たされたときにテキストを開きます.しかし、rst_n = '0' and dataOut = '0'
という条件の下で4つのことをしたのを見て、テキストを開いて、閉じて、開けて、それからフラグsignalを‘1’に置いて、しかも2回開くモードが違って、1回はwrite_mode
、1回はappend_mode
で、どうしてこのように処理しますか.この理由をお話しします.テキストが開いているので、閉じるに違いありません.write_を使うとmodeというモードで開くと、
file_close(FILE_OUT)
のとき、つまりテキストが閉じるとき、テキストには1行のデータしか残っていません.また,append_mode
というパターンに置き換えると,file_close(FILE_OUT)
の場合,以前にテキストに書き込まれたデータが残る.では、なぜ先にwrite_mode
というモードで開くのでしょうか.私はこのモードで開いてから閉じます.ドキュメント全体の内容がクリアされ、次の操作が空のテキストであることが保証されます.これが先にwrite_mode
で開く理由です.注意したいのは、書き込みの状態で、テキストを閉じていない場合は、テキストのサイズは常に0 Kですが、開いているかテキストのデータ情報が見えるか、中のデータもコピーできますが、これらのデータはこのテキストには本当に存在しません.このテキストもModelSimに占有され、コピー、切り取りなどの操作はできません.
ここでは、シミュレーションを終了するフラグsignal
sim_end
が設定され、このデフォルト値も'0'
である.2つの使い方があります.1つは、シミュレーションコードにどのような状況が記載されているかというsignal置'1'
です.例えば、遅延がどれだけ後になったか、あるフラグビットが変化したかなどです.もう一つの暴力は、ModelSimのsignalのForceを利用して、しばらくシミュレーションしたと思っていたので、その値を「1」に強制し、テキストを閉じてシミュレーションが終わりました.write_mode
とappend_mode
の場合、書き込むテキストは自動的に生成され、事前に生成する必要がなく、シミュレーションの場合、出力ドキュメントを時間と命名したり、パラメータの変更に関連するファイル名を複数シミュレーションしてから処理したりするのが便利です.注意したいのは、入力されたデータと出力されたデータはすべてバイナリデータなので、MatlabやVisual Studioなどのツールでデータをバイナリデータに変換することです.同様に、出力されたデータも通常のデータに変換してこそ、その特性をよく観察することができる.