![](http://img.inpai.com.cn/2023/0410/20230410091623448.jpg)
本文列出了FPGA設計中常見的十個錯誤。我們收集了 FPGA 工程師在其設計中犯的 10 個最常見錯誤,并提供了解決方案的建議和替代方案。本文假定讀者已經(jīng)具備 RTL 設計和數(shù)字電路方面的基礎。接下來讓我們深入探討在FPGA 設計中要避免的 10 大錯誤。
【資料圖】
異步邏輯
FPGA 設計適用于同步系統(tǒng),即使異步邏輯是可綜合的,它也會導致設計中的時序違規(guī)(亞穩(wěn)態(tài))。有 FPGA 工程經(jīng)驗的人往往會避免在他們的 FPGA 設計中使用任何異步邏輯。緩解此問題的一種方法是在驅動 LUT 的設計中同步鎖存所有異步邏輯。
設計中的異步循環(huán)會增加 FPGA 的功耗,從而增加熱量并可能導致不必要的“過熱”問題。
以下是使用異步邏輯有益的情況:
在 AXI-stream協(xié)議中,最好將“tready”表示為異步,這里可以使用reg slice來減輕異步邏輯,這會增加整個設計的利用率。
基于 DSPslice 的計算。使用 DSP slice 的除法、乘法可以異步完成,對時序幾乎沒有影響。
不使用廠商提供的原語
這是 FPGA 初學者常犯的錯誤。以Xilinx器件為例,Xilinx為時鐘緩沖器、CDC、DLL、時鐘分頻器等提供原語。充分利用器件中現(xiàn)有的原語將帶來更高效的設計,并大幅縮短開發(fā)時間。
例如:
1、 將 xpm-cdc 用于同步器將減少為其編寫 RTL 以及為該信號定義約束的麻煩。
2、使用 bufr 進行時鐘分頻會自動將生成的時鐘放置在時鐘樹上,并推斷生成的時鐘約束。
未充分利用 DSP Slice
在 Xilinx FPGA 中,DSP Slice 能夠用作累加器、加法器、減法器、除法器和乘法器。當需要這些功能時,最好使用 DSP slice 而不是 LUT/Fabric 來執(zhí)行此操作。這將減少花在設計優(yōu)化以及設計結束時的時序收斂上的時間。
有些設計需要非常高的時鐘頻率才能工作,在這種情況下,DSP Slice可以大大減少時序問題。
檢查設計中推斷的鎖存器
這是一個可以用例子很好解釋的案例。編寫狀態(tài)機時,應該有 1 個同步狀態(tài)和 2 個異步狀態(tài)。在異步的 NEXT STATE LOGIC中,如果忘記考慮所有條件,工具將推斷一個鎖存器,即 next_state 信號將被預期為設計中的生成時鐘,因為它將驅動多個 LUT。盲目忽略這種情況會導致狀態(tài)機停止,并且在出現(xiàn)故障時無法恢復。
不在每個階段運行 DRC 檢查
DRC 檢查是必須的,應該在綜合和實現(xiàn)之后進行。應正確分析 DRC 中的任何嚴重警告,并在設計中加以考慮。如果不這樣做,可能會導致系統(tǒng)不穩(wěn)定,并可能在某個時間點發(fā)生故障。
不遵循正確的命名和編碼約定
所有 RTL 設計工程師都應遵循其設計的標準命名約定,例如。
為所有輸入添加 i_
為所有輸出添加 o_
為所有信號添加 s_
為所有常量添加 c_
為所有通用信號添加 g_
時鐘應命名為 i_clk_m:例如 i_clk_122m88
復位應命名為 i_rst_
所有代碼都應正確記錄、注釋和測試(綜合前和綜合后)
復位信號的不必要使用
在 Xilinx 設備中,使用復位引腳驅動所有信號并不是首選,因為它會大大增加設計中的扇出。相反,最好將 gsr 引腳用于所有中間信號。
即:當聲明信號時,將其本身初始化為復位值。
利用率計算
在 FPGA 中,不建議完全利用所有可用資源。開始設計時,選擇一個可以容納設計并有額外 10% 到 20% 可用空間的FPGA。這樣做是為了讓路由有余地使用其內(nèi)置邏輯滿足建立和保持時間。
如果不這樣做,后續(xù)的時序很難收斂,就不得不降低系統(tǒng)時鐘。
將block design用于大型設計
block design是輕松互連 RTL 的好方法,但對于大型項目,block design在 Xilinx Vivado 中也有很多固有的錯誤,這會在設計中引起很多不必要的警告。
不檢查仿真設置中的記錄所有信號選項
在仿真設計時,最好首先檢查 vivado 中的記錄所有信號選項。這將避免為了向仿真波形添加附加信號而不得不重新運行整個仿真。這適用于與 vivado 結合使用的所有第三方仿真軟件。
審核編輯:湯梓紅
標簽: