本文移植於tutortecho 2021年5月16日 撰寫
由於最近在幫別人寫code
所以接觸到 vivado 的 synthesis 和 post simulation
所以碰到了一些工作上沒機會遇到的問題
這篇就純紀錄一下 debug 的過程
在做 post simulation 的時候發現跟 behavior simulation 結果不一樣
我第一個直覺是 timing violation
所以我直接把 testbench 的 clock 調很慢
結果還是一樣的錯誤
所以應該不是 timing 的問題
接著我只好去 trace 出現錯誤的 flip flop 前面的 combinational 電路
結果發現在敲進 DFF 之前電路還沒有呈現一個穩定的狀態
在整個 clock 周期內都一直改變值
這樣其實蠻不合理的
那段 RTL code 其實只有頂多四個或五個 mux
Gate delay 應該不會很久
也不會花太多時間來達到穩定
這看起來就是因為有 logic loop 導致電路結果又重新灌入電路輸入來讓電路運算無法達到穩定
所以我回去檢查發現某一行寫成
xxx_nx = xxx_nx + …..;
沒想到這個筆誤在 no timing simulation 居然可以動
後來再回去檢查 synthesis log
發現 vivado 早就有報 warning給我
所以 Warning 還是不要偷懶要好好看一下比較好啊
發表留言