Altifigence Academy

35 / 37 · 概念

編譯、lint 與合成:診斷能證明什麼

固定原始碼清單、top 和語言模式,區分語法、位元寬度、鎖存器診斷與功能驗證。

明確要求工具檢查什麼

結果必須繫結原始碼清單、top、參數、語言模式和工具版本。編譯 DUT 及依賴,把測試平台作為獨立模擬 top;不要合成時脈發生器或把未例項化模組當作被測設計。課程採用實用的可合成 SystemVerilog 子集。通用模擬器與產品引擎可能支援不同範圍,不能僅憑 .sv 副檔名假定支援所有特性。

編譯檢查結構,模擬檢查已執行行為

編譯可拒絕語法、缺少模組及無效引用,不證明算術與重置優先順序。PASS 僅支援該原始碼、工具和場景下的比較。參數實驗:

text
iverilog -g2012 -s tb -o sim.vvp modulo_tick.sv tb.sv
vvp sim.vvp

記錄兩條命令的退出狀態。編譯失敗後執行舊 sim.vvp 會誤報 PASS。每個配置生成新輸出,編譯失敗就停止。

按原因處理診斷

診斷要回答的問題
缺少模組檔案在清單中嗎,名字正確嗎
位元寬度截斷丟棄哪些高位,進位或符號是否需要
推斷鎖存器哪條組合路徑沒賦值
多驅動誰擁有此訊號
未用訊號有意不用還是連線遺漏
組合環無暫存器地回傳自身輸入嗎

不要隱藏全部警告。修復原因,或記錄經過測試的狹窄有意例外。分類與嚴重程度隨版本不同。Verilator 的官方警告文件解釋 WIDTH、LATCH 等;安裝後可增加 lint:

text
verilator --lint-only --top-module periodic_accumulator modulo_tick.sv periodic_accumulator.sv

這是額外建議,不聲稱已執行 Verilator。區分實際命令與建議命令。

合成是另一個邊界

可用 Yosys 做通用結構檢查:

text
yosys -p 'read_verilog -sv modulo_tick.sv periodic_accumulator.sv; hierarchy -check -top periodic_accumulator; proc; opt; check -assert; stat'

它檢查前端和通用電路,不提供目標 FPGA 資源、佈局佈線、時序收斂或製造驗收。技術對映與約束流程是額外工作。

練習:失敗副本與交付 DUT 分開

做三個一次性副本:拼錯子模組名,將九位和截到八位,漏掉組合分支賦值。記錄哪種工具發現、哪種需要功能測試。位元寬度警告可能有意,鎖存器也可能編譯成功;要比較需求與行為。保留恢復的正常原始碼和一份相關故意失敗日誌。無法解釋的診斷記為待解決,不稱結果乾淨。

此選擇適用於本瀏覽器,隨時可從頁尾變更。