Quartusのエラーと対処

ここでは、Quartus を使用する際に出てくるエラーメッセージの収集と対処方法について紹介します。

エラーメッセージとその対処方法データベース

  • Error: Port “FromIP” does not exist in macrofunction “inst8”
    • 回路図中の”inst8″というシンボルの中に”FromIP”という入出力ポートが存在しないというエラーですね。inst8の本体を修正して、入出力ポートの数や名称を変更したにもかかわらず、シンボル化したものをupdateしていないまま、古いシンボルを使っているために、ポートが存在しませんというエラーになっているように思います。シンボル化した本体を修正した場合には、シンボルをアップデートして、使用しているシンボルも新しいシンボルで置き直すことが必要です。
    • 予約語を使ったり,シンボル名・インスタンス名がInterface回路内などで使っているシンボル名などと重複して,正しく参照できない場合もこのエラーが出ることがあるようです.
      以下の単語(前方一致)はエラーが出がちなので,シンボル名では使用しない方が無難です.

      • reg
      • register
      • selector
  • Error: Bus contains incompatible signal names — “PR[15..12]” and “PR[10..0]
    • 回路図ファイル(.bdf)中に2つのバスを接続したが、バスネットワーク中の指定されたノード名が一致しなかった、または別のバス名あるいはバス名の部分集合でない場合にこのエラーが発生する。 バスネットワーク中の単一のノードの名前は同じである必要があります。またはバスネットワーク中の別のバスあるいはバスの部分集合に含まれていなければなりません。 余分なノード名を削除するか、あるいはバスネットワーク中のノード名称がすべて一致するか、バスネットワーク中の別のバスあるいはバスの部分集合に含まれているように、バスノードをリネームしてください。
  • Error: The pin “ABROM[13]” has multiple drivers.
    • このエラーは、「信号線(この場合はABROM[13])がmultiple drivers(複数の信号入力)を持っている」。すなわち、信号線を駆動するゲートの出力が衝突していますよということ。口頭試問にもあるように、ゲートの出力どうしを接続しているというやってはならない結線があるということ。配線(実線で結線)されていなくても、信号名の対応で接続されているように解釈されることもある。同一名称の信号線が他にないかどうかチェックすること。
    • “ABROM[13]”のようにinterface3_2で使われている信号線の場合、特に、このABROM[13〜8]でエラーが表示されている場合、RW信号が’0’になっている可能性がある。RW信号は、Read時に1をWrite時には0をセットすること。
      • 原因はinterface3_2のRW信号の論理を反転した。Read動作をする場合には、1を入れなければならないが、0のままになっていた。ABROMのようなバスは内部でトラステートバッファがついいて双方向(入出力)信号の方向をRW信号により管理している。RW信号が0や1のどちらかに固定されてしまうと、双方向に信号を制御する必要がないために最適化としてトライステートバッファごと入力や出力のどちらかの回路をまるごと削除してしまう。トライステートバッファがあって入出力が衝突しなかったものが、トライステートバッファを削除されることで信号が衝突してしまうことに原因がある。それだけQuartusの最適化能力が向上したのでしょう。
  • Error: The tri-state buffer “interface3_2:inst1|memaccess:inst|busctrl:251|22[7]” feeding the pin “ABRAM[15]” directly or indirectly feeds itself.
    • このエラーは信号が循環している(feeding pin 〜 直接または間接的にfeeds itself)。RW信号をDTBUSの信号(16ビットスイッチ入力)によって制御しようとしている場合に発生する。
  • Error: Project requires xxx I/O pins, but the selected device can contain only 141 I/O pins
    • レジスタファイルをコンパイルするとfiterのところで、 Error: Project requires 221 I/O pins, but the selected device can contain only 141 I/O pins Error: Can’t find fitというエラーが表示されることがある。 これは、「FPGAには141ピンしか入出力ピンがないのに、xxx本(FPGAが持っている以上)の入出力ポートを定義しようとしているので、FPGAに入りませんよ」というエラーメッセージである。正確にはコンパイルエラーではなく、「Fitter」(FPGAへの配置配線を制御する部分)のエラーである。このメッセージが出ていやなら、「start Analysis & Synthesis」ボタンを使うこと。fitterでエラーが出ても、シミュレーションは行える。動作確認後、シンボル化して上の階層でちゃんと使ってください。
  • Error: Assertion error: Can’t create synchronous RAM from a DFFE array unless all inputs are registered

    • このエラーはメッセージに書かれていることが原因ではなく、デバイスが正しく選ばれていないことが原因だと思われる。Compilation Reportウィンドウを確認してみよう。大方の場合、Deviceがデフォルトの「Stratix」になっていると思う。正しく、Family: 「FLEX10KE」, Device:「EPF10KE30EQC208-3」に設定してください。設定は、「Assignments」→「Device」を選択。
  • Error: Node instance “inst1” instantiates undefined entity “interface3_2”
    • このエラーは、ユーザライブラリフォルダの指定が正しく行われていないことによると思われる。”interface3_2″のように自分が作ったモジュールでない場合には、ライブラリ指定を疑ってみる。 interface_libの指定に間違いがある、または指定がない。~ ユーザライブラリの指定は、「Setting …」→「User Library(Current Project)」を選択し、Library Nameにライブラリフォルダを追加すること。すでに入っている場合には、指導書に指定されたフォルダ名と一致しているかどうか、綴りなどをチェックすること。
  • Error: Node instance “126” instantiates undefined entity “bus2bus”
    • このエラーは、ユーザライブラリフォルダの指定が正しく行われていないことによると思われる。”bus2bus”のように自分が作ったモジュールでない場合には、ライブラリ指定を疑ってみる。 mega_lpmの指定に間違いがある、または指定がない。~ ユーザライブラリの指定は、「Setting …」→「User Library(Current Project)」を選択し、Library Nameにライブラリフォルダを追加すること。すでに入っている場合には、指導書に指定されたフォルダ名と一致しているかどうか、綴りなどをチェックすること。
  • Error: Node instance “inst23” instantiates undefined entity “cap1_1”
    • このエラーは、ユーザライブラリフォルダの指定が正しく行われていないことによると思われる。”cap1_1″のように自分が作ったモジュールでない場合には、ライブラリ指定を疑ってみる。 caps_libの指定に間違いがある、または指定がない。~ ユーザライブラリの指定は、「Setting …」→「User Library(Current Project)」を選択し、Library Nameにライブラリフォルダを追加すること。すでに入っている場合には、指導書に指定されたフォルダ名と一致しているかどうか、綴りなどをチェックすること。
  • Error: Net “QR0[15]”, which fans out to “interface3_2:inst1|R0[15]”, cannot be assigned more than one value
    • 信号線(Net(この場合は、信号線QR0[15]))に複数の値を与えようとしていうエラーである。 -正確には、以下のように複数行のエラーメッセージとなる。
      Error: Net “QR0[15]”, which fans out to “interface3_2:inst1|R0[15]”, cannot be assigned more than one value
      Error: Net is fed by “cap16_0080:inst|cap16[15]”
      └Error: Net is fed by “cap16_0c8c:inst41|cap16[15]”
      Netに信号を割り当てようとしている該当するものは、”コンポーネント名:インスタンス名|信号名”の順に表記されているので、メッセージ中のコンポーネント名やインスタンス名を検索してみる。~ エラーをダブルクリックして該当箇所にジャンプするが、このエラーは、それらのコンポーネントを使っているところが問題であり、定義しているところに問題があるわけではない。ジャンプするのは定義しているところ。
    • 多くの場合、以下のようなcapのはずし忘れ。~ &ref{cap_conf.png};
      Error: Net “gdfx_temp0”, which fans out to “inst”, cannot be assigned more than one value~
      ├Error: Net is fed by “inst1″~
      └Error: Net is fed by “inst2″~
      普通はこんなエラーメッセージで信号がループしていたりする。
  • Error: Node “QB[15]” is missing source
    • このエラーは、入力信号(この場合は”QB[15]”)を駆動する信号やゲートがない/つながっていないと言う意味。該当信号の入力の配線をチェックしてください。主な原因は、配線ミス。別のところにつないでしまって空いてしまっているとか、つなぐつもりでcapを外したけれども未配線のままだった等。
  • Error: Port “D” of type DFF of instance “inst” is missing source signal
    • このエラーは、上記と同様に駆動する信号がないということ。ただし、以下の図のようにバスの線を引いているが、バス信号線との対応が取れないとき(つながっていないことになっている)に出力される。 バス信号線の対応を取るためには、バスの本数と並びを指定する必要がある。
  • Error: Can’t synthesize current design — design does not contain any logic
    • このエラーは、設計がロジックを含んでいないので、Analysis&Synthesisは設計を合成することができません。正しいファイルを設計に使用していること(Top Level Entityに指定されていること)を確かめてください。設計がロジックを含んでいる場合は、その回路図に入出力ポートが指定されていないことが原因。inputやoutputのポートを作ってつなげてください。回路の解析&合成は、Top Level Entityのinputやoutputのポートを解析&合成の糸口とします。
  • Error: Width mismatch in port “D” of instance “inst” and type DFF — source is “data[3..0]”
    • このエラーは、ノード(DFF)の入力と出力の数が異なるときに、バスの幅が違うよ(“Width mismatch”)という時に出てくる。
  • Error: Can’t compile duplicate declarations of entity “sample1” into library “work”
    • 正確には、以下のように複数行のエラーメッセージとなる。
      Error: Can’t compile duplicate declarations of entity “sample1” into library “work”
      ├Error: Found entity “sample1” in file ../sample1.bdf
      └Error: Found entity “sample1” in file sample1.bdf
    • このエラーは、回路図をコピーやSave_Asで複製を作ってしまって、同じ名前のエンティティ(Entity)(この場合はsample1.bdf)が存在することを表している。表示されたファイル名のどちらか正しい方を残して削除するか、一方を別名に変更するとこで対処する。
  • Error: The node “interface3_2:inst1|memaccess:inst|busctrl:251|23[0]” has multiple drivers.
    • 複数の信号が衝突しているというメッセージ。インターフェース内部のモジュールが衝突している場合には、interface3_2の使い方に問題がある(RW,IOREQ_N,MREQ_N信号などの使い方が間違っている)か、ピンの割り当てか壊れているので .qsf ファイルをsample1.qsfから作り直して見てください。
  • Error: Signal “D[15..4]” drives an input pin
    • バスの名前の対応による接続が間違っていて、入力ピンを駆動している。エラーメッセージが表示された信号線だけではなく、その信号線によそからつながっている信号や、名前で結合されているバス線を疑ってみてください。
  • Error: Illegal wire or bus name “A'” of type pin
    • このエラーは名前に使用できない記号(ダッシュ、アポストロフィー)を使っているので、「A’は不正な名前ですよ」というメッセージです。「わかっているなら自分で直せよ!!」なんて言わずに、素直に名前を変えてコンパイルしなおしましょう。