我們在FPGA設計過程中,通常會經歷方案設計、模塊劃分、Coding、仿真、綜合實現、調試等階段,并且常常伴隨著debug,對設計中的缺陷進行優化。
如何有效進行設計優化,一直是FPGA設計中繞不過的主題。對于FPGA工程師而言,用什么硬件編程語言做設計不是那么重要,用什么編輯器coding也不是那么重要。最重的是,用最短的時間,將整個設計從方案到調試完成。
對于邏輯設計而言,數字電路、信號處理和接口協議是設計的核心,我們需要從整個系統的設計角度去評估如何實現,資源和性能是否到達較好的折中。
RTL邏輯代碼的編寫固然重要,做好方案設計同樣重要,并且結合EDA工具的編譯特性進行設計也很重要。
最近高亞軍老師針對Xilinx公司的FPGA設計優化問題,出版了《AMD FPGA設計優化寶典:面向Vivado/VHDL》以及《AMD FPGA設計優化寶典:面向Vivado/SystemVerilog》兩本書,以便于針對使用不同的硬件描述語言。VHDL語法嚴謹,但比較冗長;verilog HDL是大部分工程師比較容易接受的語言,同時SystemVerilog作為Verilog的升級版,受到不少FPGA工程師和數字IC工程師的親睞。
在設計優化前,我們需要確保設計的邏輯功能是正確的,并且需要確保優化后邏輯功能不受影響,魯棒性更高。
正如高老師在本書的《前言》中的提到:
“設計收斂是FPGA工程師面臨的一個重要課題:既要保證功耗收斂,又要保證時序收斂。兩者均與設計自身有很大關系。”
“就代碼風格而言,目前已有越來越多的工程師意識到其重要性。往往“良好的代碼風格”能起到事半功倍的效果。“良好的代碼風格”的一個重要指標就是代碼風格與FPGA內部結構相匹配,保證綜合工具能夠完美地推斷出期望結果,而這一點被很多工程師忽略。”
“就工具而言,Vivado的功能越來越強大,自身越來越智能,分析手段越來越多。這就需要工程師深入理解工具在各個階段所提供的選項含義,能夠在工程實踐中正確、合理地使用這些選項對應的功能,同時,面對未能收斂的設計,能夠找到其中的根本原因。”
在FPGA設計優化中,高老師總結了9大優化領域:

《AMD FPGA設計優化寶典》內容比較全面,介紹的方法多樣,方便FPGA工程師在設計過程中采用適當的方法,達到設計優化的目的。

VHDL版和SV版大體上差不多,附帶額外的新特性。

以VHDL版為例,重點章節目錄如下:
由于FPGA和IC設計講究實戰,只有通過實際檢驗才能哪些方法適用,我們在大大小小的項目中,會遇到各種各樣的場景和問題。大部分問題都具有普遍性,這類問題具備可解決的方法,則借鑒以改善設計。一些特例或者低級錯誤導致的問題,盡量在設計過程中做好設計規劃,養成良好的代碼設計風格,并經過技術經驗的積累,可以避免。
我們期望,可以通過優化時鐘網絡、優化設計中的組合邏輯、觸發器和移位寄存器改善時序,優化存儲器、乘加運算,適應底層邏輯單元以優化設計。
狀態機的設計也是設計的重要部分,根據外部變化實現狀態轉移,并根據特定狀態和輸入數值來驅動輸出,我們需要根據實際情況,選擇是否需要設計狀態機。我們知道,狀態機如果不穩定,或者某些條件不滿足導致卡死,很可能整個模塊就掛掉。因此,必須設計安全狀態機,具備高穩定性。如何優化狀態機,高老師也從狀態機的代碼風格、狀態機編碼方式等給出了優化思路。
另外,如何優化高扇出,也是在設計中經常遇到的問題。高扇出網線會增加布局布線的壓力,很容易導致時序違例。這是因為在布局時過高的扇出使得工具很難將扇出的驅動(源端)與所有的負載(目的端)放置得比較緊湊,從而使有些負載距離驅動比較遠,導致線延遲比較大。如何降低扇出,高老師總結如下:

布線擁塞問題,是工程師們經常遇到的老大難問題。隨著設計規模的增大和復雜度的提升,布線擁塞成為常見的問題,尤其是在用UltraScale FPGA或UltraScale+FPGA時,布線擁塞往往成為時序收斂的瓶頸,也成為編譯時間過長的“罪魁禍首”。筆者在工作項目中,也遇到過類似的情況,由于資源消耗多,系統復雜龐大,在實現階段遭遇過直接布線失敗的情況,通過查看log和實現報告,發現布線擁塞程度達到了6,布線遭遇困難在所難免。
高老師總結了布線擁塞的三種類型:全局擁塞、短線擁塞和長線擁塞。

我們可以通過Vivado工具查看擁塞報告,了解擁塞的類型及其根本原因,專業有助于我們解決布線擁塞問題。對于優化布線擁塞,我們依然可以從設計流程、約束、代碼等方向入手,高老師總結緩解布線擁塞流程如下:

更多詳細的設計優化方法,參閱《AMD FPGA設計優化寶典》書中的介紹,我們的目標是順利完成設計,達到可交付的狀態。
本文的目的不是為了打廣告為作者做宣傳賣書,我們以務實的態度,為有需要的工程師提供一種設計優化的解決途徑。
由于VHDL和SV版本大同小異,什么語言并不重要,選擇一本適合自己開發需要即可。關鍵是掌握這些優化方法,利用好Vivado設計環境,進而做好設計優化。
更多關于5G、衛星通信、FPGA、數字IC、通信算法等內容,可關注微信公眾號【FPGA算法工程師】

- End -
往期精選?
?
?

FPGA技術江湖廣發江湖帖
無廣告純凈模式,給技術交流一片凈土,從初學小白到行業精英業界大佬等,從軍工領域到民用企業等,從通信、圖像處理到人工智能等各個方向應有盡有,QQ微信雙選,FPGA技術江湖打造最純凈最專業的技術交流學習平臺。
FPGA技術江湖微信交流群

加群主微信,備注職業+方向+名字進群
FPGA技術江湖QQ交流群

備注地區+職業+方向+名字進群
