VHDLでコンパイルを実行したときに、以下の二つのエラーが出ました。「Error (10384): VHDL assignment error at imem.vhdl(37): index 64 is outside the range (0 to 63) of object "mem"」「Error (10442): VHDL Process Statement error at imem.vhdl(20): Process Statement must contain either a sensitivity list or a Wait Statement」
該当する箇所を確認し、改善を試みましたがエラーは直らず困っています。一つ目のエラーは恐らくループが関係していると思うのですが...。このエラーの原因と対処法が分かれば教えて下さい。該当するソースコードは以下の通りです。
VHDL
1library ieee; 2use ieee.std_logic_1164.all; 3use ieee.std_logic_unsigned.all; 4use STD.textio.all; 5use ieee.std_logic_textio.all; 6 7-- 命令メモリの内容をファイルから読み込む 8-- dc_shellを使った合成はできないので注意 9entity imem is 10 port ( 11 addr : in std_logic_vector(31 downto 0); 12 rd : out std_logic_vector(31 downto 0)); 13end imem; 14 15architecture behv of imem is 16begin 17 18 -- ファイル memfile.dat からプログラムを読み込んで初期化 19 process 20 file FI : text is in "memfile.dat"; 21 variable LI : line; 22 variable inst : std_logic_vector(31 downto 0); 23 variable index : integer; 24 25 type romtype is array (0 to 63) of std_logic_vector(31 downto 0); 26 variable mem : romtype; 27 begin 28 for I in 0 to 63 loop -- initialize memory 29 mem(I) := (others => '0'); 30 end loop; 31 32 index := 0; 33 34 while not endfile(FI) loop 35 readline(FI, LI); -- 1行読む 36 read(LI, inst); -- 命令(32ビット)をinstへ 37 mem(index) := inst; 38 index := index + 1; 39 end loop; 40 41 -- メモリの内容を読む 42 loop 43 rd <= mem(conv_integer(addr(7 downto 2))); 44 wait on addr; -- addrが変化するまで実行をストップ 45 end loop; 46 end process; 47end behv; 48 49 50
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。