質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VHDL

VHDLは、デジタル回路設計用のハードウェア記述言語の一つ。明確な回路を加味せず、動作のみを書くだけでハードウェアの動作を定義することが可能。ソフトウェアのプログラミングと同じような設計ができます。

CPU

CPUは、コンピュータの中心となる処理装置(プロセッサ)で中央処理装置とも呼ばれています。プログラム演算や数値計算、その他の演算ユニットをコントロール。スマホやPCによって内蔵されているCPUは異なりますが、処理性能が早いほど良いとされています。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

Q&A

解決済

1回答

3005閲覧

VHDLでprocess文とループ関係のエラー

Ryuuse

総合スコア27

VHDL

VHDLは、デジタル回路設計用のハードウェア記述言語の一つ。明確な回路を加味せず、動作のみを書くだけでハードウェアの動作を定義することが可能。ソフトウェアのプログラミングと同じような設計ができます。

CPU

CPUは、コンピュータの中心となる処理装置(プロセッサ)で中央処理装置とも呼ばれています。プログラム演算や数値計算、その他の演算ユニットをコントロール。スマホやPCによって内蔵されているCPUは異なりますが、処理性能が早いほど良いとされています。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

0グッド

0クリップ

投稿2021/02/06 16:02

編集2021/02/06 23:43

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

意味不明と切り捨ててしまわずに、読む努力をしましょう

google翻訳
Error (10442): VHDL Process Statement error at imem.vhdl(20): プロセスステートメントには、 sensitivity list または Wait Statementのいずれかが含まれている必要があります

投稿2021/02/06 22:59

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問