よくある質問とその答え(FAQ: Frequency Asked Question)

新しく追加した項目,以前から存在していた項目に追記および変更した部分は,しばらくの間,[New]で表示します.
FAQのさらにFrequentlyな項目には,[Check]で表示します.
スケマ設計や旧ボードのみに関係する項目もありますが,しばらくそのまま残しておきます.
こびっどさん対応2020で関係ない/異なる項目もありますが,適宜で読み替えてください.


目次


CADの使用方法

* Quartusの起動方法

* コンパイルしようとするとライセンスがないと言われて止まる

* シミュレーションしようとするとライセンスがないと言われて止まる

* ライブラリを開くなどの操作の際,ツールが固まって落ちるようになった

* MegaWizard が固まる

* Helpが見られない

* Assignment→Pinsでピン指定に候補が出ない

* Assignment→Pinsで異なるピンが候補に出る

  1. FPGAのピンにアサインできるのは,Top-Level EntityのBlock Diagramの 入出力だけです.FPGAのピンにアサインしたい入出力は, Top-Level EntityのBlock Diagramまで引っ張ってきましょう.
  2. 1つのプロジェクトの中で,複数のFPGA用データを 作ろうとしていませんか? 別のFPGA用データを作るのでしたら,新しいプロジェクトを立ち上げてください.

* コンパイル時に,コンパイルすべきファイルが ない旨を表示して停止する

トップのBlock Diagramのファイル名がプロジェクト作成時に していたTop-Level Entityと同じでないと, コンパイルがうまくいきません.

解決方法(いずれかの方法を取ること)
  1. Block Diagramのファイル名をTop-Level Entitiyと同じに変更する.
  2. Project Navigatorで"Projectを右クリック→Settings→Generalで Top-Level Entity"をトップのつもりで編集していたBlock Diagramのファイル名に変更する.
  3. Project NavigatorのFilesタブでファイルを右クリックし,Set as Top-Level Entityとする.

* バスの中の1本の線はどのように引き出すか

[0..15][15..0]ではバスのbit順が逆になります.実験で使っているCADの仕様で,RAMからの出力が[15..0]の順序なので,こちらに統一しておくのがよいでしょう.

* バス間をつなぐ配線の名前のつけ方は?

シフタの製作時に,バスA[15..0]のA[0]とバスB[15..0]のB[1]を つなぎたいことがあるかもしれません. この時,バス間の配線を直線で引いてしまうと, その配線には1つのプロパティしかつけれないので,うまくつなげません.

この場合,配線の途中にバッファを置いて配線を分割し, バスA[15..0]につながっている部分にA[0], バスB[15..0]につながっている部分にB[1]のプロパティを与えることで実現できます.

バッファには色々種類がありますが, 単純に配線を名前を変えたい場合は,"wire"のバッファを使えば良いでしょう. "wire"はバス間もつなげます.複数の配線をバスとして束ねるには,","で区切った名前のリストをバスに貼り付けます.例えば下図のようにできます.

bus_wire

* 波形シミュレーションでブロック図の途中の配線の値を見たい

デバッグ用に途中の配線に出力ピンを追加し, それを用いて観測して下さい.

一応,"Insert Node or Bus→Node Finder→Customize"で, Filterを"Design Entity (all name)"にしてOKを押し, さらにListを押すと,全インスタンスの出力等も 候補に出てきます.しかしながら,通常, これらの観測点はコンパイル中の最適化によって 消えてしまうことが多いため, QuartusII自体がデバッグ用の出力ピンを 追加することを勧めています.

* ファイルが開けません

  1. ファイルの読み出し権限がない
    エクスプローラ等でファイルを右クリックし→プロパティ→セキュリティで, 自分に読み出し権限があるかどうか調べる. 無ければ,必要に応じて変更する(他人のファイルなら「してもらう」).
  2. ファイルが壊れている
    過去にCADが保存時にファイルを壊してしまったと思われるケースがありました. この時は,メモ帳で対象ファイルと他の無事に開けるファイルを開いて見たところ, 開けないファイルは後ろの方の書式がおかしくなっていることが確認できました. 一般的なソフトウェア同様,CADにもバグはあります. 受講上の注意の最後にあるように, ファイルは適時バックアップして,このような状況に備えて下さい.

* CADがちゃんと動作していないようなのですが

上記にあるように,CADもソフトウェアですのでバグはあります. CADの動作が時々おかしくなるという報告もあがっています. このような時には,一度CADを終了して,再度立ち上げなおして動かしてください.

変な動作らしきものの例

  1. FPGAボードへのダウンロード時に,再コンパイル前の.sofが送られているようで, 動作を変更した部分が反映されない.
  2. シミュレーションの入力ファイルを変更したのに,どうも変更前のファイルで シミュレーションを行っているようだ.

* 他のプロジェクトで作った回路をインクルードしたい

"Assignments→Settings...→Libraries"を選択後,インクルードしたい 回路があるディレクトリを選択し,Addボタンを押します. そうすれば,ライブラリの呼び出し時の一覧に上記のディレクトリが追加されます.

* CADのエラー・メッセージが分からない

"Help→Message List"でCADのメッセージの解説(英語)を見ることができます. ここで調べて下さい.

* 正しくバス/配線/ファイル等に名前をつけているのにどうも正しく認識されていないようだ

* タブ・バーを間違って消してしまい,戻し方がわからない

Tools->Options->Generalで, "Display tabs for child windows"をチェックすると復活します.

* タイミング制約のかけ方

QuartusII は,与えられたタイミング制約の下でハードウェア資源を最小化します. 制約をかけないと遅い (しかし小さい) 回路が合成されますので,適切な値を設定して下さい.

* 回路性能の見方

Compilation Report に回路サイズ,動作速度などの見積もりが出ています.

* 組み合わせ回路の動作速度の見方

組み合わせ回路の動作速度は遅延時間で確認をします。
Time Quest Timing AnalyzerのReport DatasheetsのPropagation Delay(遅延時間)から見ることができます。

* デザインパーティション

Assignments -> Design Partitions Window または Tools -> Design Partitions Planner で design partition を設定できます.

* GUIじゃやってられないんですけど

慣れてくるとそうなりますよね.


実験の進め方

* 実験時間内だけで実験を終わらせる自信がないのですが

Quartus Prime Lite Editionを手に入れ,自宅で作業を行う

* 最終報告までに完成させてデモをできなかったのですが

最終報告以降も実装を続け,デモができる程度に完成させて, デモを行ってください. 実験期間終了後でも,平日昼間は計算機室を使えます. 平日昼間以外に計算機室を使用するつもりならば, 「時間外実験演習申請書」を提出し, 教官の許可を受けて計算機室を使用してください.

* グループ内でのファイルの受渡しはどうやればいいか

GitHub Classroom の共有リポジトリを利用してください.

* コンピュータの問題から,設計データが消えてしまいました

バックアップから復元してください.

コンピュータのディスクが壊れたり,ソフトが異常終了して重要なデータを壊したり, はたまた,操作ミスから空データで重要なデータを上書きしてしまうことは, この先,コンピュータを使用する上で多々経験することでしょう. そういった時のために,ちゃんとバックアップを取っておきましょう.

Gitプロジェクト,ブランチの管理ポリシーを決め,有効活用して下さい. 原始的ですが,USBメモリなどに時々保存しておくのも方法です.

* 途中からグループの相方が出てこなくなりました

組んだ相手(orグループor下請けor上司)が外れだったという不幸なことは, 長い人生の中では何回か経験することになるでしょう. 今回も,その中の1回が巡って来たとして, あきらめて,自分で相手の担当部分も自分で行い,帳尻合わせをしましょう.

幸い,ここは大学ですので,企業のように, 「相方が出てこなくなろうが何だろうが, ちゃんと期日までにきちんと仕事を終わらせて下さい.」 という厳しいことは言いません. 相方が出てこなくなったことを考慮して成績をつけます. 全ての命令を実装できなくてもかまいませんから, 何とか,プロセッサと言える最低レベルのもの(メモリ・アクセス, 演算,条件分岐による制御が可能なもの)を作り,デモを行ってください.


設計/デバッグ

* D-フリップフロップにあるPRN入力の意味が分かりません

PRN入力はプリセット入力です.動作は,クリア(CLR)入力の反対で, 信号が入力されるとD-フリップフロップの値が1になります. ちなみに,このPRNとCLRは負論理ですので注意して下さい.

* 各論理素子の動作が分からない(真理値表が見たい)

Help → Search で探して下さい. 各論理素子の説明は Using HDL with the Quartus II Software → Primitives にあります.

* アドレス・バスやデータ・バスで複数のレジスタからの値が混ざる

3状態バッファ(Tri-state buffer)なる素子があります. これは,状態切替え用の入力により,以下の2つの状態を切替えることできる素子です.

信号が出力されると困る場合,この素子を使って信号を遮断して下さい. 余談ですが,「3状態」の由来は,出力の状態が「0/1/ハイ・インピーダンス」の3つを 取れることから名付けられています.

* RAMからデータが出てこない

RAMの作り方の最後に書いたように, Megafunctionで作ったRAMはアドレスを入力した後に クロックを入れないとデータが出てきません. どのようにしてクロックを入力するかは, マルチサイクルの読み出しを行うとか, 逆位相のクロックを有効利用するとか考えて下さい.

* SIMPLEの仕様に則って64kWのRAMを作ろうとすると合成エラーになる

RAMの作り方にも書きましたが, SIMPLE仕様通りの 64k words が載せられるほどFPGAのエンベデッドRAMの容量が無いため,妥協してもらって構いません. ソートプログラムでも 4096 words あれば十分でしょう. EP4C30は540672ビットなので最大16 bits x 33792 words となります.

* LEDのダイナミック点灯とは何か

ここを見ましょう

PowerMedusaボード

* FPGAボードの各モジュールが正常に動作しているか確認したい

演習室から運搬した際にボードが破損していることがあるかもしれません.また,設計した回路が意図通りに動作せずFPGAボードの不良を疑いたくなることがあるかもしれません.動作検証済みの回路イメージでボード動作を確かめることは,ハードウェア設計においても問題の切分けにとても有効です.
ボードの各モジュール動作を確認するための board_check.sof を用意しました.アクセス制限を掛けていますのでPandAにログインしてアクセスしてください.

使い方は下記のとおりです.

  1. Quartus Prime Programmerを単体で起動する
  2. FPGAボードとPCをUSB接続し,FPGAボードの電源を入れる.
  3. Programmerの左上にある [Hardware Setup...] を開いて設定する
  4. Programmer の左側にある [Add File] を開いて設定する(メニューバーの Edit > Add File... でもよい).
  5. [Start] でFPGAに書き込む.右上のProgress:が"100% (Successful)"で緑色になればおけ.

期待される動作はだいたい下記のとおりです.下記のモジュール名と番号はPowerMedusaユーザーズマニュアルのP.17 3.2 ブロック構成図を参照してください.

期待される動作が確認できなかった場合は,Slackかメールで速やかにスタッフまでご連絡ください.形あるものいつか壊れます.

* USBでボードを接続するとドライバをインストールしろと言われる

すでにドライバをインストール済なのに, 再度ドライバのインストールを要求されることがしばしばあるようです. その場合は,TAを捕まえて,Administrator権限でドライバを入れてもらって下さい.

* WindowsでボードUSBケーブルのドライバが認識しない

こちらのページを参考にしてドライバをインストールしてください. このUser Guideが公式資料です.特にSection 3を参照してください.

* LinuxでボードUSBケーブルのドライバが認識しない

/etc/udev/rules.d/51-usbblaster.rules
にroot権限で下記を記入してください.(してあります)

# USB-Blaster
BUS=="usb", SYSFS{idVendor}=="09fb", SYSFS{idProduct}=="6001", MODE="0666"
BUS=="usb", SYSFS{idVendor}=="09fb", SYSFS{idProduct}=="6002", MODE="0666"
BUS=="usb", SYSFS{idVendor}=="09fb", SYSFS{idProduct}=="6003", MODE="0666"

# USB-Blaster II
BUS=="usb", SYSFS{idVendor}=="09fb", SYSFS{idProduct}=="6010", MODE="0666"
BUS=="usb", SYSFS{idVendor}=="09fb", SYSFS{idProduct}=="6810", MODE="0666"

上記が公式資料での記述内容ですが,うまくいかないようなら下記も試してください(Ubuntu 18.04.3以上だとこっちが良いようです。(Ubuntu 16.04でもこちらの方が良い場合もあるようです))

# USB-Blaster
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6001", MODE="0666", SYMLINK+="usbblaster/%k"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6002", MODE="0666", SYMLINK+="usbblaster/%k"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6003", MODE="0666", SYMLINK+="usbblaster/%k"

# USB-Blaster II
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6010", MODE="0666", SYMLINK+="usbblaster2/%k"
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="09fb", ATTRS{idProduct}=="6810", MODE="0666", SYMLINK+="usbblaster2/%k"

こちらのページを参考にしてください. このUser Guideが公式資料です.特にSection 3を参照してください.

トラブルシューティングとしてさらにこの辺りも参考になりそうです.

* 設定と接続は正しいはずなのにProgrammerがFailedになる

* 設計した回路をFPGAにダウンロードしようとすると "Can't recognize sillicon ID for device 1"と出てダウンロードできない

* FPGAへのダウンロード時のファイルで.pofファイルや.sofファイルを指定できない

FPGAへのダウンロード時のファイル指定をする時, "Error: Can't locate programming file hogehoge.sof (;) in Chain Description File" というエラーが出て.pofファイルや.sofファイルを指定できないことがあります. これは,対応する.cdfファイルの中で.pofファイルや.sofファイルへの 正しくパスが書かれていないのが原因です. 他のマシン等で作成したプロジェクトを持ってきた時に発生します.

解決方法(いずれかの方法を取ること)
  1. 対応する.cdfをメモ帳等のテキスト・エディタで開き, "Device Part Name..."で始まる行のPathの項目を正しいパスに直す
  2. 新しいプロジェクトを作成し,そこに前のプロジェクトのファイルを持ってきてやり直す

* In-System Memory Content EditorでRAMが出てこない

  1. RAM作成時の設定で"Allow In-System Memory Content Editor..."を指定していない
  2. USB-Blasterとの接続悪くてボードと通信できていない

* 機能シミュレーションではちゃんと動くのに,ボード上では動かない

実際の論理回路では,信号が論理ゲートを通過するに一定の時間がかかりますが, 機能シミュレーションではこの遅延時間を考慮せず,単純に論理の正しさのみを評価します. このため,実際にはレジスタ(レジスタ・ファイルのみならず,一時的に値を保持するレジスタも含む)の 書き込み時にセットアップ時間やホールド時間を満たせない回路でも, 機能シミュレーションの上では動いてしまいます.

そこで,以下のように,コンパイル時のタイミング解析の結果を元に, あやしい信号パスを見つけ,問題が発生しないように修正します.

※ 以下は Ver.9 までの Timing Analyzer の記述です. 新しい TimeQuest でも基本的には同じですが,回路性能の見方 のほうに追記します.

* 40MHzより速いクロックで動かしたい

MegaFunction ALTPLLを使って下さい. 外部入力クロックのM/N倍のクロックを内部で作れます. PLLを使うときは外部入力クロックは40MHzまたは20MHzにして下さい (遅いクロックでは変な動きになると思います). ちなみに,このFPGAの動作周波数は275MHzぐらいが上限です.


その他

* レポートの図を書くソフトは?

* Git管理でゴミファイルのconflictがやってられない(gitignore)

* Quartus Primeを自身のPCからアンインストールしたい

* 演習室のPCから学外 (GitHub等) にSSHで接続できない

Host *
   ProxyCommand nc -x socks-proxy.kuins.kyoto-u.ac.jp:1080 %h %p