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

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

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

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

CPU

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

コンパイルエラー

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

解決済

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

Ryuuse
Ryuuse

総合スコア27

VHDL

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

CPU

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

コンパイルエラー

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

1回答

0評価

0クリップ

1277閲覧

投稿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

library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use STD.textio.all; use ieee.std_logic_textio.all; -- 命令メモリの内容をファイルから読み込む -- dc_shellを使った合成はできないので注意 entity imem is port ( addr : in std_logic_vector(31 downto 0); rd : out std_logic_vector(31 downto 0)); end imem; architecture behv of imem is begin -- ファイル memfile.dat からプログラムを読み込んで初期化 process file FI : text is in "memfile.dat"; variable LI : line; variable inst : std_logic_vector(31 downto 0); variable index : integer; type romtype is array (0 to 63) of std_logic_vector(31 downto 0); variable mem : romtype; begin for I in 0 to 63 loop -- initialize memory mem(I) := (others => '0'); end loop; index := 0; while not endfile(FI) loop readline(FI, LI); -- 1行読む read(LI, inst); -- 命令(32ビット)をinstへ mem(index) := inst; index := index + 1; end loop; -- メモリの内容を読む loop rd <= mem(conv_integer(addr(7 downto 2))); wait on addr; -- addrが変化するまで実行をストップ end loop; end process; end behv;

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

VHDL

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

CPU

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

コンパイルエラー

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