テキスト ファイルを読み取るためのサンプル ソース コードをテストしています。このファイルの各行には、2 つの整数 (スペースで区切られています) が含まれており、これらを読み取って合計する必要があります。以下のコードでは、アーキテクチャのみを報告しています。
architecture behav of tb is
signal xb, yb, zb: std_logic_vector(7 downto 0);
begin
process
file fp: text is in "in.txt";
variable ln: line;
variable x, y, z: integer;
begin
readline( fp, ln ); read( ln, x ); read( ln, y );
xb <= conv_std_logic_vector( x, 8 );
yb <= conv_std_logic_vector( y, 8 );
if endfile( fp ) = true then
wait;
else
wait for 10 ns;
end if;
end process;
DUT: zb <= xb + yb;
end behav;
ソース コードをコンパイルした後、シミュレーションを実行し、テキスト ファイルの最後まで適切に続行します。しかし、ソース コードを次のように変更すると、テキスト ファイルの最後でシミュレーションが終了しません。なんで?
architecture behav of tb is
signal xb, yb, zb: std_logic_vector(7 downto 0);
begin
process
file fp: text is in "in.txt";
variable ln: line;
variable x, y, z: integer;
begin
while not endfile(fp) loop
readline( fp, ln ); read( ln, x ); read( ln, y );
xb <= conv_std_logic_vector( x, 8 );
yb <= conv_std_logic_vector( y, 8 );
wait for 10 ns;
end loop;
end process;
DUT: zb <= xb + yb;
end behav;