時鐘篇
選用全局時鐘緩沖區(qū)(BUFG)作為時鐘輸入信號,BUFG是最穩(wěn)定的時鐘輸入源,可以避免誤差。
只用一個時鐘沿來寄存數(shù)據(jù),使用時鐘的兩個沿是不可靠的,如果時鐘沿“漂移”,就會導(dǎo)致時序錯誤。
不要隨意將內(nèi)部信號作為時鐘,如門控時鐘和分頻時鐘,而要使用CLKDLL或者DCM產(chǎn)生的時鐘,或者可以通過建立時鐘使能或者DCM產(chǎn)生不同的時鐘信號。
FPGA盡量采取同步設(shè)計,也就是所有時鐘都是同一個源頭,如果使用兩個沒有相位關(guān)系的異步時鐘,必須要解決跨時鐘域問題。
性能篇
邏輯級的時延不要超過時序預(yù)算的百分之五十,否則會影響系統(tǒng)的運行頻率??梢酝ㄟ^分析時序報告中某個路徑的時序統(tǒng)計量來掌握系統(tǒng)的邏輯級時延。
對于關(guān)鍵的輸出選擇快速轉(zhuǎn)換速率,可以為LVCMOS和LVTTL電平選擇轉(zhuǎn)換速率來降低輸出時延。
如果設(shè)計允許增加延遲,可以對組合邏輯采用流水操作來提高性能。
利用四種全局約束來對設(shè)計進(jìn)行全局約束,周期、偏置、輸入/輸出,管腳到管腳。
I/O寄存器提供了最快的時鐘到輸入、輸出到時鐘的延時,對于輸入、輸出信號,管腳到寄存器、寄存器到管腳都不可以有組合邏輯存在,對于三態(tài)寄存器,必須低電平有效,才能被綜合到IOB當(dāng)中。
盡量使用IP核進(jìn)行設(shè)計,因為IP核都是針對FPGA器件進(jìn)行了優(yōu)化,性能更高。
編程篇
使用Case語句而不是if-then-else語句
復(fù)雜的if-then-else語句在綜合布局布線以后會生成優(yōu)先級譯碼邏輯,增加路徑上的時延。然而,case語句則綜合為并行邏輯,沒有時延。
有限狀態(tài)機(jī)盡量不要包含有算術(shù)邏輯、數(shù)據(jù)通路邏輯以及其它與狀態(tài)機(jī)不相關(guān)的組合邏輯;
狀態(tài)機(jī)編寫的時候,下一狀態(tài)邏輯和輸出譯碼邏輯必須放在獨立的進(jìn)程中或者always語句中,綜合工具在輸出和下一狀態(tài)邏輯之間不允許共享資源。
盡量使用一位編碼有限狀態(tài)機(jī);
使用不同風(fēng)格的計數(shù)器,二進(jìn)制計數(shù)器是非常慢的,可以考慮LFSR,Pre -scalar,Johnson.
代碼設(shè)計要按照功能塊劃分成不同的層次,層次化有助于設(shè)計更加容易讀懂,也容易調(diào)試和復(fù)用。
編輯:hfy
-
FPGA
+關(guān)注
關(guān)注
1624文章
21538瀏覽量
600467
發(fā)布評論請先 登錄
相關(guān)推薦
評論