FPGA技術聯盟 發表於 2020-12-11 10:26:44
時鐘篇
選用全局時鐘緩衝區(BUFG)作為時鐘輸入信號,BUFG是最穩定的時鐘輸入源,可以避免誤差。
只用一個時鐘沿來寄存數據,使用時鐘的兩個沿是不可靠的,如果時鐘沿「漂移」,就會導致時序錯誤。
不要隨意將內部信號作為時鐘,如門控時鐘和分頻時鐘,而要使用CLKDLL或者DCM產生的時鐘,或者可以通過建立時鐘使能或者DCM產生不同的時鐘信號。
FPGA儘量採取同步設計,也就是所有時鐘都是同一個源頭,如果使用兩個沒有相位關係的異步時鐘,必須要解決跨時鐘域問題。
性能篇
邏輯級的時延不要超過時序預算的百分之五十,否則會影響系統的運行頻率。可以通過分析時序報告中某個路徑的時序統計量來掌握系統的邏輯級時延。
對於關鍵的輸出選擇快速轉換速率,可以為LVCMOS和LVTTL電平選擇轉換速率來降低輸出時延。
如果設計允許增加延遲,可以對組合邏輯採用流水操作來提高性能。
利用四種全局約束來對設計進行全局約束,周期、偏置、輸入/輸出,管腳到管腳。
I/O寄存器提供了最快的時鐘到輸入、輸出到時鐘的延時,對於輸入、輸出信號,管腳到寄存器、寄存器到管腳都不可以有組合邏輯存在,對於三態寄存器,必須低電平有效,才能被綜合到IOB當中。
儘量使用IP核進行設計,因為IP核都是針對FPGA器件進行了優化,性能更高。
編程篇
使用Case語句而不是if-then-else語句
複雜的if-then-else語句在綜合布局布線以後會生成優先級解碼邏輯,增加路徑上的時延。然而,case語句則綜合為並行邏輯,沒有時延。
有限狀態機儘量不要包含有算術邏輯、數據通路邏輯以及其它與狀態機不相關的組合邏輯;
狀態機編寫的時候,下一狀態邏輯和輸出解碼邏輯必須放在獨立的進程中或者always語句中,綜合工具在輸出和下一狀態邏輯之間不允許共享資源。
儘量使用一位編碼有限狀態機;
使用不同風格的計數器,二進位計數器是非常慢的,可以考慮LFSR,Pre -scalar,Johnson.
代碼設計要按照功能塊劃分成不同的層次,層次化有助於設計更加容易讀懂,也容易調試和復用。
編輯:hfy
打開APP閱讀更多精彩內容
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容圖片侵權或者其他問題,請聯繫本站作侵刪。 侵權投訴