設計データ提出時の注意点


項目

実験3HWの設計データをGitHubに提出する際の注意点をまとめます.
最終報告において,「finalというタグ名(Tag version)のリリース」で提出された設計データが下記の項目に該当する場合,再提出を指示することがあります.内容を理解して十分に注意するようにしてください.

1. スタッフの手元で合成できない/ボードへの書き込みができない

Quartusプロジェクトの必要なファイルがgitリポジトリにaddされていないケースです.

まず,Quartusプロジェクトの設定情報が記録されているファイル .qpf がGitHubリモートリポジトリには存在しないことがあります.スタッフ(第三者)がcloneしてきたリポジトリのファイルだけでは合成ができないことも多いです..gitignoreの管理を丁寧にされている方は,丁寧すぎないかチェックしてください.

プロジェクトに必要なファイルが登録されていない(Add Files in Project... が漏れている)ことがあります.また,git管理外のローカルディレクトリにあるファイルを参照している場合があります.例えば,導入課題で作成した回路や別ディレクトリで設計したモジュールを利用している場合には注意してください.(安直にはそれらをsimple-<GitAccount>のディレクトリにコピーしてきて,プロジェクトにAdd Filesするのが楽です)
このような状況の時,Compilationの際に下記のようなエラーや警告が出力されます.

Warning (12019): Can't analyze file -- file ../../intro/led.v is missing
Error (12006): Node instance ""inst1"" instantiates undefined entity ""LED"". Ensure that required library paths are specified correctly, define the specified entity, or change the instantiation. If this entity represents Intel FPGA or third-party IP, generate the synthesis files for the IP.

スタッフ(第三者)のPCでは合成は完了できるものの,FPGAボードへの書き込みができないことがあります.原因として,ピン配置が記録されているファイル .qsf がGitHubリモートリポジトリには存在しないことがあります.これも.gitignore管理に注意してください.
このような状況の時,Compilationの際に下記の警告が出力されます(x pins of x total pinsの数値xがそれぞれ一致している場合は特に該当します).

Critical Warning (169085): No exact pin location assignment(s) for x pins of x total pins. For the list of pins please refer to the I/O Assignment Warnings table in the fitter report.

RAMのデータファイルである .mif がgit管理外になっていることも多いです.この場合は,皆さんの手元ではRAMに初期データを食わせているのに,スタッフの手元では初期値ゼロのままになります.つまり,スタッフ(第三者)の手元のFPGAボードでは動作再現ができなくなります.
このような状況の時,Compilationの際に下記の警告が出力されます.

Critical Warning (127003): Can't find Memory Initialization File or Hexadecimal (Intel-Format) File C:/hogehoge/memory.mif -- setting all initial values to 0

本項目が問題ないかを確認する手っ取り早い方法は,いつもとは全く違うディレクトリに,自身のGitHubリモートリポジトリをcloneしてみることです.ディレクトリ階層がいつもと同レベルは避けたほうが良いでしょう(Quartusプロジェクト内では相対パスでファイル位置を記録しているため)
いつもとは違うディレクトリに自身のリポジトリをcloneしてきて,そこで合成・書き込み・実機動作を試してみてください.

2. Critical Warningが残っている

Critical Warningは必ず解消し,メッセージ出力されないようにしてください.この場合は,合成がうまくいっただけでシミュレーションや実機検証でコケることが多いです.メッセージの意味は,代表的なものは「HDLてにをは集」にて説明しています.もちろんコピーしてググるのも良いでしょう.
Quartus下部のMessagesウインドウにて紫色の"Show Critical Warning Messages"を選択すると,メッセージをフィルタ表示できます.

ただし,下記のCritical Warningは許容することとします.

Critical Warning (169085): No exact pin location assignment(s) for m pins of n total pins. For the list of pins please refer to the I/O Assignment Warnings table in the fitter report.

上記は,Pin Plannerで未割当てのピンがあるときに出力されます.
デバッグ用に多くの信号をoutputに繋いだり,プローブしたい信号だけを時に応じて繋ぎ変えたいこともあるでしょう.また,altera_reserved_{tck,tdi,tdo,tms}はJTAG関係の信号線なので無視して良いです.

本項目に関連して,合成がうまくいっている場合でも,定期的に合成時のメッセージを見るようにしましょう.よりよい設計にするためのヒントが示されていることが多いです.
青の"Show Warning Messages"は,どんなことに対して出力された警告なのかを理解した上で,問題ないと判断できるなら,無視しても構いません.CADツールは警告がシビアに出力されがちで,絶対に消せないWarningもあります.また,合成エラーとなった場合は,赤字のメッセージだけでなく,付近にある青字のWarningに問題のヒントが示されていることが多いです.ネストしていることもあるので > をクリックして開いてください.

3. タイミング制約が設定されていない(.sdcが存在しない)

タイミング制約の設定は必須です.
資料「
タイミング制約の設定と検証」を参考にしてTimeQuest Timing Analyzerを必ず実行してください.なお,TimeQuest Timing Analyzerは実行したけど .sdc ファイルを書き出しできていなかったり,.out.sdc から .sdc に名前替えしたけどプロジェクトへの登録(Add Files to Project...)から漏れていたり,あるいはgit管理外になっていることもあります.
このような状況の時,Compilationの際に下記のような警告が出力されます.

Critical Warning (332012): Synopsys Design Constraints File file not found: 'simple.sdc'. A Synopsys Design Constraints File is required by the TimeQuest Timing Analyzer to get proper timing constraints. Without it, the Compiler will not properly optimize the design.

きちんとタイミング制約が設定されているか(意図通りの .sdc ファイルがプロジェクトに登録されているか)は,Compilation Report > Table of Contentsの "TimeQuest Timing Analyzer" に "SDC File List" の項目が表示されていることを確認してみるとよいでしょう.もしくは,"Clocks" の項目にクロック信号が表示されていない(altera_reserved_tckのみある)場合は,クロックの制約が上手くいっていません.

4. タイミング制約を満足していない

タイミング制約を検証してこれを満たすことも必須です.
Compilation Report > Table of Contentsの "TimeQuest Timing Analyzer" が赤字になっている場合は,なんらか制約を満たしていません.また,このような状況の時,Compilationの際に下記のような警告が出力されます.

Critical Warning (332168): The following clock transfers have no clock uncertainty assignment. For more accurate results, apply clock uncertainty assignments or use the derive_clock_uncertainty command.
        Critical Warning (332169): From clock (Rise) to clock (Rise) (setup and hold)

資料「タイミング制約の設定と検証」を参考にして,Critical Pathに関係するモジュールの設計を見直したり,制約を変更したりしてみてください.