35 / 37 · 概念
コンパイル・lint・合成:診断が示す範囲
ソース一覧・top・言語モードを固定し、構文・幅・ラッチと機能検証を区別します。
レッスンは無料で読めます。受講登録すると進捗を保存できます。
ツールへ何を検査させたか固定します
ソース一覧・top・パラメータ・言語モード・バージョンが結果の前提です。DUTと依存関係をコンパイルし、テストベンチを別のシミュレーションtopにします。クロック生成器を合成したり未インスタンス化モジュールを検査対象と誤認したりしないでください。本教材は実用的な合成可能SystemVerilog部分集合です。.sv拡張子だけで全機能対応を仮定せず、実際のfront endと診断を確認します。
コンパイルとシミュレーションの範囲
コンパイルは構文・欠落モジュール・不正参照を拒否できますが算術やreset優先順位を証明しません。テストベンチのPASSはそのソース・ツール・シナリオでの比較を支えます。
iverilog -g2012 -s tb -o sim.vvp modulo_tick.sv tb.sv
vvp sim.vvp両方の終了状態を記録します。コンパイル失敗後に古いsim.vvpを動かすと誤解を招くPASSになります。設定ごとに新規出力を作り、コンパイル失敗時は止めます。
原因ごとに診断を確認します
| 診断 | 確認事項 |
|---|---|
| 欠落モジュール | 定義ファイルと名前は正しいか |
| 幅切捨て | 失う上位ビット、キャリー、符号は必要か |
| ラッチ推論 | どの組合せ経路に代入がないか |
| 多重駆動 | 所有する手続き・子出力は何か |
| 未使用信号 | 意図的か、接続漏れか |
| 組合せループ | レジスタなしで入力へ戻るか |
全警告を隠さず原因を修正するか、狭い意図的例外を検査付きで文書化します。分類と重大度はバージョンで変わり得ます。Verilatorの公式警告文書はWIDTHやLATCHを説明します。導入済みなら追加lintに次を使えます。
verilator --lint-only --top-module periodic_accumulator modulo_tick.sv periodic_accumulator.svこれは追加経路の提案であり実行済みの主張ではありません。実行命令と提案命令を区別します。
合成は別の境界です
yosys -p 'read_verilog -sv modulo_tick.sv periodic_accumulator.sv; hierarchy -check -top periodic_accumulator; proc; opt; check -assert; stat'このYosys検査はfront endと一般的な回路構造を確認します。対象FPGAの資源・配置・配線・タイミングclosure・製造受入れではありません。技術マッピングと制約フローは追加作業です。
実習・失敗例を納品DUTから分離する
使い捨てコピーで子名を誤記し、9ビット和を8ビットへ切り捨て、組合せ分岐の代入を省きます。どのツールが検出し何に機能検査が必要か調べます。幅警告は意図的な場合もあり、ラッチでもコンパイルは成功し得ます。要求と動作を比較し、正常ソースに関連する意図的失敗ログを保持してください。説明できない診断は未解決として記録します。