35 / 37 · 概念
編譯、lint 與合成:診斷能證明什麼
固定原始碼清單、top 和語言模式,區分語法、位元寬度、鎖存器診斷與功能驗證。
單元可免費閱讀,註冊課程即可儲存學習進度。
明確要求工具檢查什麼
結果必須繫結原始碼清單、top、參數、語言模式和工具版本。編譯 DUT 及依賴,把測試平台作為獨立模擬 top;不要合成時脈發生器或把未例項化模組當作被測設計。課程採用實用的可合成 SystemVerilog 子集。通用模擬器與產品引擎可能支援不同範圍,不能僅憑 .sv 副檔名假定支援所有特性。
編譯檢查結構,模擬檢查已執行行為
編譯可拒絕語法、缺少模組及無效引用,不證明算術與重置優先順序。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這是額外建議,不聲稱已執行 Verilator。區分實際命令與建議命令。
合成是另一個邊界
可用 Yosys 做通用結構檢查:
yosys -p 'read_verilog -sv modulo_tick.sv periodic_accumulator.sv; hierarchy -check -top periodic_accumulator; proc; opt; check -assert; stat'它檢查前端和通用電路,不提供目標 FPGA 資源、佈局佈線、時序收斂或製造驗收。技術對映與約束流程是額外工作。
練習:失敗副本與交付 DUT 分開
做三個一次性副本:拼錯子模組名,將九位和截到八位,漏掉組合分支賦值。記錄哪種工具發現、哪種需要功能測試。位元寬度警告可能有意,鎖存器也可能編譯成功;要比較需求與行為。保留恢復的正常原始碼和一份相關故意失敗日誌。無法解釋的診斷記為待解決,不稱結果乾淨。
✓ 已學習