library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
--use ieee.std_logic_textio.all;  -- これと

library std;
use std.textio.all;             -- これが 必要!

entity SAMPLE is
end SAMPLE;

architecture RTL of SAMPLE is
  signal A , B , Q : std_logic_vector(7 downto 0);
  signal CLK     : std_logic;

  file  READ_FILE : text open read_mode is "in.dat";  -- ここで file のオープンをする。
  file WRITE_FILE : text open write_mode is "out.dat"; -- process 文の中でも良い。
begin

  process
  begin
    for I in 1 to 10 loop
      CLK <= '0'; wait for 50 ns;
      CLK <= '1'; wait for 50 ns;
    end loop;
    wait;
  end process;

  process 
    variable li : line;
    variable VAR_A , VAR_B : bit_vector(7 downto 0);
  begin

    wait until CLK'event and CLK = '1'; -- 立上りで読み込んでみる。
--    readline(READ_FILE,li); -- ここで 1行を読み出す。
    readline(READ_FILE,li); -- ここで 1行を読み出す。
    read(li,VAR_A); -- 一度、変数に入れてから
    read(li,VAR_B);
    A <= to_stdlogicvector(VAR_A);      -- 代入をする。
    B <= to_stdlogicvector(VAR_B);
  end process;

---- 出力に 信号に代入
  Q <= A + B;

  process 
    variable lo : line;
  begin

    wait until CLK'event and CLK = '0'; -- 立ち下がりで 書き込んでみる。
    
--    hwrite(lo,A,right,3); -- 書き込みは signal のままで OK!
--    hwrite(lo,B,right,3);
    
--    write(lo,Q,right,10); -- これは2進数
--    owrite(lo,'0' & Q,right,5); -- これは8進数 bit長 は3の倍数でないといけない
--    hwrite(lo,Q,right,3); -- これは16進数で書き出す。bit 長は 4の倍数。
--    writeline(WRITE_FILE,lo); -- ここで 本当に 1行を書き出す。
    write(lo, string'("fefe"));
    writeline(output, lo);
  end process;


end RTL;
