トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

Diary/2008-8-28

FreeHDLでtextio


VHDLのtextioを使ったシミュレーションをFreeHDLでやってみた.
ieee.std_logic_textioがないみたいなので,std.textioで頑張る.
# つまりhreadが使えない.
たとえば,

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

library std;
use std.textio.all;

entity test is
end test;

architecture Behavior of test is
  signal a   : std_logic_vector(7 downto 0);
  signal clk : std_logic;
  file   src : text open read_mode is "in_file_name";
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 l     : line;
    variable var_a : bit_vector(7 downto 0);
  begin
    wait until CLK'event and CLK = '1';
    readline(src, l); -- 1行読む
    read(l, var_a); -- デリミタ(空白)までを切り出して変数に代入
    a <= to_stdlogicvector(var_a); -- std_logic_vectorに変換して代入
  end process;
end Behavior;

書き出すファイルが欲しければ,

 file dest : text open write_mode is "out_file_name";

とかして定義して,

write(l, string'("test"));
writeline(dest, l);

とすれば,書き出せる.標準出力に書き出したいときは,
destの代わりにoutputと書くとよい...みたい.

readlineで読んだデータは空白で分割されて,
readの記述順に従って変数に格納される.
実行時に開きたいファイルがあれば,実行中にデータを書き足しても
ちゃんと読んでくれるよう.便利〜♪