在前面的文章《FPGA工程師的核心競爭力-學習篇(一)》中,提到要做一名合格的FPGA工程師,需要從底層做起,模塊編寫、工程搭建、系統開發、平臺架構設計,到系統級的軟硬件全棧能力。對于FPGA工程師而言,概括起來,日常工作主要集中于算法邏輯設計和接口驅動設計。然而,從初級工程師到高級工程師,直至技術專家,不能永遠停留在底層設計,有了成熟的邏輯開發經驗后,需要往更高層次轉變,做系統級設計,達到系統架構師或總師的級別,這時候需要的是全局觀。
有沒有好的設計方法,可以讓工程師們走得更順利、更遠呢?全球數十萬FPGA工程師正致力于讓系統設計更簡單、更高效,具體怎樣開展呢?Xilinx隆重推出了UltraFast設計方法論。
關于UltraFast設計方法論
Xilinx推出的UltraFast設計方法論是一整套旨在幫助簡化當今器件設計進程的最佳實踐。這些設計的規模與復雜性需要執行特定的步驟與設計任務,從而確保設計每個階段的成功開展。當您遵循這些步驟和最佳實踐進行操作,將有助于您盡可能最快且最高效的方式實現期望的設計目標。
具體設計方法論是什么呢?這里提供設計指南:
(1)《UltraFast設計方法指南》(UG949),該指南中描述了各種設計任務、分析與報告功能,以及用于設計創建和收斂的最佳實踐。
(2)《UltraFast 設計方法快捷參考指南》(UG1231) 中采用易于使用的雙面卡格式著重講解了主要設計方法論步驟。
(3)《UltraFast 設計方法時序收斂快捷參考指南》(UG1292) 提供了有關時序收斂的建議,包括運行初始設計檢查、設定設計基線和解決時序違例。
(4)《UltraFast 設計方法檢查表》(XTP301) 可從賽靈思 Documentation Navigator 獲取,也可作為獨立電子數據表獲取。您可使用此檢查表來識別整個設計進程中的常見錯誤和決策點。
(5)《UltraFast 設計方法論系統級設計流程》圖展示了 賽靈思 Documentation Navigator 中提供的整個 Vivado?Design Suite 設計流程。您可單擊圖中的設計步驟以打開相關文檔、宣傳材料以及常見問題及解答以幫助您入門。
另外建議:除上述資源外,賽靈思建議,處理嵌入式設計時請參閱《UltraFast 嵌入式設計方法指南》(UG1046),使用含基于 C 的 IP 的 Vivado IP integrator 開發復雜系統時請參閱《UltraFast Vivado HLS 方法指南》(UG1197)。
本文主要參考UG949,進行重點闡述。在最新的UG949(2020版)中,共240頁,內容主要分為6章,分別為:
?引言
?開發板和器件規劃
?利用RTL創建設計
?設計約束
?設計實現
?設計收斂
指點迷津:做任何事情,只講勤奮努力是不夠的,最重要的是找到好的方法可以高效完成任務,這條真理,放之四海而皆準。
引言
介紹UltraFast設計方法論,如何使用該指南,使用UltraFast設計方法檢查表,使用UltraFast設計方法論DRC,使用UltraFast設計方法系統級設計流程,以及了解UltraFast設計方法概念。
其中,使用UltraFast設計方法論進行DRC,即設計規則檢查,個人覺得很重要,可以為后面節省不少時間。能在綜合和實現前搞定的東西,就別留在調試中去,不然累死了還找不到問題原因。
Vivado Design Suite 包含一組方法論相關 DRC,可使用 report_methodology Tcl 命令來運行。此命令針對以下每個設計階段都具有相應的規則:
? 在綜合前,在細化 RTL 設計中用于驗證 RTL 結構
? 在綜合后,用于驗證網表和約束
? 在實現后,用于驗證約束和時序相關問題。
建議:為了最大限度發揮作用,請在每個設計階段運行方法論DRC,并解決其中所有問題,然后再繼續執行下一個階段。
TCL命令其實功能很強大,能完成所有界面引導操作,還能完成在界面引導不能勝任的操作。TCL的用戶指南為《Vivado Design Suite Tcl 命令參考指南》(UG835)。
對于UltraFast設計方法系統級設計流程,用一張圖來表示最直觀:

在UltraFast 設計方法概念中,最重要的思想就是,從設計之初即采用正確方法并盡早關注設計目標(包括 RTL、時鐘、管腳和 PCB 管腳分配)至關重要。在每個設計階段中正確定義和驗證設計有助于減少后續實現階段的時序收斂、布線收斂和功耗問題。
在開發周期早期,需要注意時序設計目標。設計流程的早期階段(C、C++ 和 RTL 綜合)對于設計性能、密度和功耗的影響遠超后期實現階段的影響。因此,如果設計不滿足時序目標,建議重新評估綜合階段(包括 HDL 和約束),而不是僅在實現階段通過迭代來尋找解決方案。圖2中關于HLS,高層次綜合,主要面對從事軟件開發人員,但是他想利用FPGA進行工程設計,說不定他不懂RTL,不懂HDL,因此采用高級語言C或C++來設計。

UltraFast設計方法強調對設計預算(例如,面積、功耗、時延和時序)進行監控以及盡早采取如下措施更正設計的重要性:
? 利用賽靈思模板創建最佳 RTL 結構,并在執行細化后進行綜合前采用方法 DRC 來驗證 RTL。由于 Vivado 工具從始至終使用時序驅動的算法,設計必須從設計流程開始就得到正確的約束。
? 在綜合后開展時序分析。要指定正確的時序,您必須分析設計中每個主時鐘及有關生成時鐘之間的關系。在 Vivado 工具中,每次時鐘交互都必須滿足時序要求,除非顯式聲明為異步時鐘交互或偽路徑 (false path)。
? 在繼續執行下一個設計階段前采用正確的約束滿足時序要求。可遵循如下建議并使用 Vivado Design Suite 的交互式分析環境來加速總體時序與實現收斂。

如能夠通過正時序裕度 (positive margin) 或相對較小的負時序裕度 (negative timing margin) 滿足設計目標,那么綜合即可視為完成。例如,如果綜合后未能滿足時序要求,那么布局布線結果也不太可能滿足時序要求。
時序違例對電路運行會產生較大影響,很可能跑飛,導致邏輯混亂。關于時序約束,在UG949中會講到。另外,在UG612、UG625、UG903等也有講到進行時序收斂和約束的方法。
開發板和器件規劃
正確規劃開發板上的器件朝向并向特定管腳分配信號可以顯著提升總體系統性能、降低功耗、提升散熱性能并縮短設計周期。將器件與印刷電路板 (PCB) 進行物理或邏輯交互的方式以直觀方式展現出來,即可精簡通過器件的數據流。
未正確規劃 I/O 配置則可能導致系統性能下降和設計收斂時間延長。賽靈思強烈建議在考慮 I/O 管腳分配的同時進行開發板級規劃。
當然,對于從事邏輯算法開發的人員,不太關注器件規劃,硬件工程師一張原理圖和器件表扔過去就可以開始干活了。
這一章就不詳細說明了,去官網下載沒有興趣慢慢看吧。
利用RTL創建設計
完成器件 I/O 管腳分配、PCB 布局規劃并決定 Vivado? Design Suite 的使用模型后,即可開始創建設計。設計創建包括:
? 規劃設計的層級
? 識別要在設計中使用和定制的 IP 核
? 對于沒有合適的 IP 可用的互連邏輯和功能,請創建定制 RTL
? 創建時序約束、功耗約束和物理約束
? 指定綜合與實現階段所使用的其它約束、屬性及其它元件
創建設計時,主要的考慮要素包括:
? 實現所需的功能
? 按期望的頻率運行
? 按期望的可靠程度運行
? 符合硅片資源和功耗預算要求
在此階段做出的決策將影響最終產品。在這一階段的錯誤決策會導致后續階段問題層出不窮,進而造成整個設計周期中不斷返工。在此過程中盡早花時間詳細規劃設計有助于達成設計目標并最大限度縮短實驗室中的調試時間。
特別是開始一個新的項目時,這一步實在是太重要了。我們講究邏輯,沒有邏輯的世界是飄渺的,會導致矛盾重重,做事效率低,漏洞百出。
1.定義理想的設計層級
設計創建的第一步是決定如何對設計進行邏輯分區。定義層級時主要考慮的是如何對含特定功能的設計部分進行分區。
這樣便于特定設計人員單獨設計 IP,以及隔離一段代碼以供復用。
說白一點,就是功能模塊劃分。一個完整的功能系統,總是由若干個功能單元構成,就好比一個人,眼、耳、口、鼻、四肢、內臟、肌肉,各司其職,同時又協同工作。
但僅根據功能來確定層級會導致對時序收斂、運行時間和調試的最優化方法考慮不周。在層級規劃過程考慮如下因素也有助于時序收斂。
1.1 在頂層附近添加 I/O 組件
盡可能在頂層附近添加 I/O 組件,以保障設計可讀性。推斷組件時,請提供要完成功能的描述。然后,綜合工具會對HDL 代碼進行解釋,以確定使用哪些硬件組件來執行該功能。可推斷的組件為簡單的單端 I/O(IBUF、OBUF、OBUFT 和 IOBUF)以及 I/O 中的單數據速率寄存器。
1.2 在頂層附近插入時鐘元件
朝頂層方向插入時鐘元件便于模塊間的時鐘共享。時鐘共享可以減少時鐘資源占用,從而提高資源利用率,提升性能,并降低功耗。除了在其中創建時鐘的模塊之外,時鐘路徑只能向下驅動進入模塊。任何先自上而下而后又自下而上貫穿的路徑都會在VHDL 仿真中造成 delta cycle 問題,此類問題的調試既艱難又費時。
1.3 在邏輯邊界處寄存數據路徑
對層級邊界輸出進行寄存可將關鍵路徑包含在單一模塊或邊界內。輸入同樣可以寄存在層級邊界處。相比于遍布多個模塊的路徑,模塊內部的時序路徑始終更便于分析和修復。未在層級邊界處寄存的任何路徑都應采用層級重構來加以綜合或者扁平化以便實現跨層級最優化。在邏輯邊界處寄存數據路徑有助于保留整個設計進程中的可追溯性(用于調試),因為這樣可以最大限度避免跨層級最優化,并且邏輯不會跨模塊遷移。
模塊之間有交互,當一個模塊的輸出信號送入下一個模塊時,最好通過寄存再輸出。同樣,很多時候為了避免跨時鐘處理以及模塊復用,會對輸入信號進行打拍處理。
1.4 針對功能和時序調試最優化層級
把關鍵路徑限定在同一層級邊界內有助于時序的調試和滿足時序要求。同樣,出于功能調試(及修改)目的,相關信號應限定在同一層級上。這樣即可使相關信號的探測和修改變得相對簡單,因為當信號限定在單個層級中時,更易于跟蹤通過綜合對信號名稱進行的最優化。
2.IP 的使用
使用預先驗證的 IP 核能夠大幅減少設計和驗證工作量,從而加速產品上市進程。如需了解有關使用 IP 的更多信息,請參閱以下資源:
? 《Vivado Design Suite 用戶指南:采用 IP 進行設計》(UG896)
? 《Vivado Design Suite 用戶指南:采用 IP integrator 設計 IP 子系統》(UG994)
? Vivado Design Suite QuickTake 視頻:在 Vivado 中配置和管理可復用 IP
當然,有時候我們對第三方IP不放心,自己進行IP開發和封裝,方便移植和復用。
2.1 規劃IP要求
根據所需功能以及其它設計目標,評估賽靈思或其它第三方合作伙伴提供的 IP 選項。
考慮需要使用的接口,例如,存儲器接口、網絡接口和外設接口。
2.2 AMBA AXI
AXI4 專為高性能、高時鐘頻率系統設計制定,適用于高速互連。
AXI4-Lite 是 AXI4 的精簡版,主要用于訪問控制寄存器和狀態寄存器。
AXI4-Stream 用于從主接口到從接口的單向數據流。典型應用包括 DSP、視頻和通信。
用的最多的算是AXI4-Stream,接口和時序簡單,比較方便使用。
關于如何使用IP,就不贅述了,本文的長度已經可以預感,會比較長。
3 RTL 編碼指南
可創建定制 RTL 來實現膠合邏輯功能以及不含適合 IP 的功能。
創建 RTL 或例化賽靈思原語時使用 Vivado Design Suite 語言模板。這些語言模板包含建議的編碼結構,用于正確推斷賽靈思器件架構。使用語言模板可以簡化設計進程,并改進結果。要從 Vivado IDE 打開“語言模板”,請選擇“Flow Navigator”中的“Language Templates”選項,然后選擇所需模板。
在工程開發中,我本人其實沒有這樣做,習慣于自己創建文件,定義接口,然后進行邏輯設計。當然,好的方法我們要虛心學習借鑒。關注FPGA器件映射的本質,也許會有助于進行RTL設計。
3.1 控制信號和控制集
控制集是控制信號(置位/復位信號、時鐘使能信號和時鐘信號)的組合,用于驅動任意給定 SRL、LUTRAM 或寄存器。對于控制信號的任意獨特組合,都會組成 1 個獨立控制集。由于 7 系列 slice 中的寄存器全部共享公用控制信號,導致只能將含公用控制集的寄存器封裝到相同 slice 中,因此該功能十分重要。例如,如果具有給定控制集的寄存器僅具有 1 個寄存器作為負載,那么其占據的 slice 中的另 7 個寄存器將變為不可用。
復位
復位是需要在設計中考慮并加以限制的較為常見且重要的控制信號之一。復位會對設計的性能、面積和功耗產生顯著影響。
多路復用器的輸入輸出中所描述的異步復位可能導致將寄存器放置到 slice 中而不是放置到 DSP 塊中。在此類情況下,將使用額外邏輯資源,從而對功耗和設計性能產生負面影響。
使用復位的時間和位置
賽靈思器件具有專用的全局置位/復位信號 (GSR)。在器件配置結束時,此信號會設置硬件中所有時序單元的初始值。
謹慎判斷何時設計需要復位以及何時不需要復位。大多數情況下,在控制路徑邏輯上可能需要復位以確保正常運行。然而在數據路徑邏輯上通常不需要復位。復位的使用限制如下:
? 限制復位信號線的總體扇出。
? 減少復位布線所需的互連數量。
? 簡化復位路徑的時序。
? 在大多數情況下,這樣即可整體改進性能、面積和功耗。
同步復位對比異步復位
如需復位,賽靈思建議使用同步復位。同步復位相比于異步復位具有諸多優勢。詳細說明,參考UG949。
3.2 掌握推斷的結果
代碼最終必須映射到器件中存在的資源上。請盡力理清所處理的關鍵架構中的關鍵算法、存儲和邏輯元件。這樣在對設計功能進行編碼時,即可預測代碼將映射到的硬件資源。
3.3 有助于提升性能的編碼方式
關鍵路徑上的高扇出
高扇出信號線在設計進程早期階段更便于處理。性能要求和路徑的結構往往會導致高扇出問題。
流水線設置注意事項
另一種提升性能的方法是對具有多個邏輯層次的長數據路徑進行重構并將其分布在多個時鐘周期中。此方法可加速時鐘周期并增加數據吞吐量,但代價是時延和流水線開銷邏輯管理工作增加。
自動流水線設置注意事項
可以選擇在布局期間插入額外的流水線寄存器,以解決特定總線和接口上的時序收斂難題。
3.4 提升功耗的編碼方式
?時鐘或數據路徑門控
?最大限度增加門控元件數量
?使用專用時鐘緩存的時鐘使能管腳
?無需優先級編碼器時使用 Case 塊
由于篇幅較長,先到此為止,下篇我們將針對設計約束、設計實現和設計收斂進行學習分析。
參考文獻
[1]Xiinx ,《UltraFast設計方法指南》(UG949)。
審核編輯:符乾江
-
FPGA
+關注
關注
1643文章
21985瀏覽量
615097 -
編碼
+關注
關注
6文章
967瀏覽量
55576
發布評論請先 登錄
機械工程師的九個段位,你現在處于哪一層?
物聯網工程師為什么要學Linux?
電子工程師自學速成 —— 提高篇
電子工程師自學速成——入門篇
如何成為一名合格的KaihongOS北向應用開發工程師
【社區之星】張飛:做技術值不值錢,核心競爭力在于精

嵌入式軟件工程師就業好不好?
如何成為嵌入式開發工程師?
芯和半導體榮獲2024上海軟件核心競爭力企業

評論