現有的工具和技術可幫助您有效地實現時序性能目標。
當您的FPGA 設計無法滿足時序性能目標時,其原因可能并不明顯。解決方案不僅取決于FPGA 實現工具為滿足時序要求而優化設計的能力,還取決于設計人員指定前方目標,診斷并隔離下游時序問題的能力。目前,設計人員掌握了一些使用技巧,可以幫助您設置時鐘;通過Synopsys Synplify Premier 等工具正確設置時序約束;然后調整參數,以滿足賽靈思FPGA 設計的性能目標。
有多個攻克角度,其中包括:
?更好的設計設置,例如完整、準確的時序約束和時鐘規格;
?節省時間的設計技術,例如仔細RTL編碼,以求更佳的性能效果,以及將造成最大性能問題的設計部件整合在一起,從而縮短隨后調整設計時序的迭代運行時間。
?綜合關聯,并布局布線時序,以產生更好的時序結果質量(QoR)和時序收斂。
現在從三個方面詳細介紹一下這些技術,并檢測如何使用以實現您的時序目標。
您需要確認您已經充分、完全地對您的設計進行約束,且未過度約束。
第一步:更好的設計設置
最大的成本開銷來自于指定正確、完整的設計約束條件。這些約束條件可以在設計意圖和設計性能目標與綜合工具之間實現通信。綜合設計之后,這些約束條件和關鍵路徑信息將自動傳遞至Vivado?Design Suite布局布線(P&R)工具,以進一步確保滿足時序要求。
綜合工具可以幫助您應對設置綜合前約束這項艱巨的任務。您的任務清單如下:
1.識別時鐘
2.識別并創建時鐘組和時鐘關系
3.約束時鐘
4.約束設計輸入和輸出
5.定義多周期路徑和錯誤的路徑
您需要確認已經充分、完全地對您的設計進行約束,且未過度約束。過度約束將導致運行時間延長,并有可能報告錯誤的關鍵路徑。務必要指定多周期和錯誤路徑,并對衍生時鐘設置約束(define_path_delay, define_false_path)。
設置Vivado流程的初始約束文件
由于約束條件設置工作非常困難,因此綜合軟件可以提供一個初始約束模版,其中的基礎約束和語法可以作為此項工作的起點。例如,在Synplify綜合軟件中,運行TCL實用程序為特定的設計創建一個初始FDC文件:
TCL: create_fdc_template
圖1給出了該流程將生成的約束文件(.fdc)的實例。該實例中,您可以看到聲明時鐘、時鐘組(時鐘之間的關系)和輸入/輸出延遲等關鍵項目已經納入考慮范圍。
針對Vivado Design Suite流程中約束設置的最佳實踐
在Vivado Design Suite流程中設置約束條件時,要確保進行以下操作:
?定義黑盒輸出引腳上的時鐘。
?定義網絡上生成的時鐘。
?不要定義邏輯選通時鐘。
?提供正確的時鐘約束:不要過度約束,并確保將不相關的(又稱異步)時鐘放置在單獨的時鐘組中。
?定義時序例外,例如錯誤路徑和多周期路徑。
提示:在Vivado Design Suite中,時鐘約束應盡量接近源時鐘,而不是賽靈思 ISE? Design Suite流程中的BUFG。
確保您的約束條件正確無誤
我們建議在設計設置階段采用四種約束驗證技術。為了讓您了解應該做的約束檢查類型,我們來看一下Synplify軟件執行的各項檢查。
?
首先,運行“語法檢查”—即快速進行約束條件檢查,其中包括其嵌入的“get_XX” 和 “all_XX”命令,用以發現和清理任何約束語法錯誤。錯誤會顯示在日志文件中,并可以超鏈接至錯誤手冊,以解釋錯誤并提出修改建議。使用Tcl命令check_fdc_query。
第二,運行“綜合檢查”以檢測與硬件相關的錯誤,例如錯誤編寫的觸發器。這些錯誤會以單獨的日志文件報告。
第三,運行基礎“快速綜合”,以檢查時鐘設置問題,包括聲明、衍生和推斷時鐘。快速綜合支持執行時鐘設置檢查,因其可生成時鐘報告和時序報告,進而使時鐘設置問題明朗化。
一些綜合工具可支持在“快速”模式下運行綜合,其為了實現較短的運行時間,其會禁用一些綜合優化。在Synplify Premier綜合軟件中,您可以通過以下命令實現:
set_option –fast_synthesis 1
綜合編譯器將創建一個綜合報告時鐘總結,您可以使用其中有關推斷時鐘的信息用以識別、定義和約束時鐘。
第四,運行全面的“約束條件檢查”。該檢查會查找關于時鐘關系、未約束開始/結束點、未鎖定I/O和無約束I/O的約束設置問題。
一個全面的約束檢查還會查找正確應用的約束和實例名稱。例如,它會標記出應用于不存在或無效參數和對象的時序約束。然后該工具會針對不可應用的約束和未找到的實例生成詳細的解釋性報告,以便糾正約束文件。Synplify綜合工具將在綜合預先映射階段自動運行這些檢查,或者您可以在綜合開始時使用以下TCL命令運行約束檢查:
TCL: project -run constraint_check
運行這些基本的檢查類型可在綜合周期的早期就能找出潛在的錯誤,從而改進結果的質量(見圖2)。
?
運行綜合之后,請務必要分析后期綜合時序報告,因為其可以提供重要的信息。例如在使用Synplify軟件時,時序報告的起始時鐘部分中的“系統時鐘”顯示,一些I/O沒有被約束。此報告的接口信息將確認情況是否如此。
第二步:RTL代碼風格和關鍵路徑調整
為了收斂更好的時序,我們建議您針對有限狀態機、RAMS、數學/DSP功能、時鐘樹和移位寄存器使用特定的代碼風格。結果將改進時序QoR,因為通過FPGA原語構建模塊,綜合工具能夠更好地推斷實現。
另外,這些代碼風格可以避免創建不必要的邏輯,例如推斷鎖存器、RAMS的讀取/寫入檢查邏輯,以及已經裝入DSP原語中的邏輯。關于這個話題我們已經談了很多,使用綜合工具中的核生成器性能是關鍵考慮因素。例如,Synplify軟件包含一個SynCore IP向導,它可以為支持字節的RAM自動生成所需的RTL代碼風格。其他IP生成器,例如賽靈思IP Catalog、Synopsys Synphony Model Compiler或Synopsys DesignWare coreTools和DesignWare Building Blocks,也可以幫助您配置IP,執行許多DSP和數學功能,并創建良好的RTL代碼風格。如果是手動編碼,請記住以下內容:
針對有限狀態機
?對于賽靈思流程,啟動后請使用同步復位將硬件設置為有效狀態,或者在操作期間復位硬件。
?將時序模塊從combinational-always模塊中分離。
?為所有可能的現態指定次態。
針對模塊RAM
?在一切可能的地方盡量編碼同步RAM,因為它們一般會以較高的時鐘頻率運行。
?將RAM編碼放置在單獨的模塊里,以便易于在網表級別進行調試。
?在決定使用RAM(帶特定復位條件、支持雙端口或字節的RAM,或非對稱RAM)之前,請看一下推薦的代碼風格,并查看是否支持推斷。如果不支持,則網表結束時可能創建較多的控制邏輯。
?請勿從寫入相同時鐘周期的同一個地址中讀取。
?如果其他方法均告失敗,可以使用屬性(syn_ramstyle for Synplify software)強制讓使用寄存器實現,釋放RAM資源供以用于更重要的時序和更大的RAM。
針對DSP模塊
您可以使用這些原語執行過濾器和數學函數,例如計數器、加法器、乘法器、除法器等。
?將DSP編碼放在單獨的模塊里,以便易于在網表級別進行調試。
?如果其他方法均告失敗,可以使用屬性(syn_ dspstyle for Synplify in Vivado Design Suite flows)強制使用DSP 模塊實現。
針對SRL
您可以將移位寄存器裝入選擇select_SRL Xilinx SRL原語或在寄存器中執行。
?封裝自動進行。對于移位寄存器鏈,Synplify軟件始終會將鏈中最后一個寄存器留在封裝select_srl之外,以便優化時序QoR。
?如果其他方法均告失敗,可以使用syn_srl風格屬性來控制SRL的實現方式。
針對時鐘樹
?由于在綜合期間其不會自動推斷,因此建議在RTL中實例化鎖相環(PLL)、時鐘生成器或時鐘多路復用器。
?PLL的輸入時鐘的時序約束會在PLL輸出針腳上自動生成衍生時鐘約束
為了更好地檢查時鐘約束,可以在原理圖查看器中進行檢查。例如,Synplify HDL Analyst工具就可在時鐘樹上運行過濾器,使您可以觀察并調試時鐘樹和時鐘約束(見圖3)。
使用模塊化以改進關鍵路徑性能
設計的某些部分可能比其他部分對于時序更加關鍵,您需要調節并逐漸改進不執行的部分。有一項技術您可以用于在RTL和網表階段實現快速調節,那就是將關鍵路徑隔離在單個模塊或子項目中,然后您可以不斷重復地逐漸改進。另外,您可以強制Vivado布局布線工具將元素緊密放置,從而進一步確保時序QoR。綜合期間您可針對該模塊使用的功能包括:
?綜合之前指定RTL分區(在Synplify軟件中,它被稱作“編譯點”)或者創建分級子項目。
?綜合之后隔離(導出)為子項目,由于設計的部分沒有使用層級項目管理流程執行。迭代、修復和合并結果。
?使綜合軟件與Vivado布局布線工具實現通信,將關鍵路徑放置在多個SLR設備的同一個層級內,例如Virtex?-7 2000T FPGA,以避免跨SLR延遲。
第三步:實現最終時序收斂
一般時序可以在綜合后和布局布線后報告(見圖4)。例如,Synplify軟件支持使用TCL命令報告感興趣的設計特定部分(report_timing)。
為了進一步改進時序QoR,我們建議您關聯后綜合和后P&R的時序結果,尤其是針對時序關鍵路徑上的給定起點和終點的時序裕量。在Synplify Premier綜合軟件中,例如您可以并排顯示后綜合和P&R時序報告,以讀取時序結果。
關聯工具可并排對比結束點、起始點和所需階段的狀態。根據終點時鐘報告路徑。而在指定“時序裕量”條件中前后P&R時序沒有關聯好的路徑將標記為“關聯不匹配”,以便您采取措施。典型的措施是針對綜合工具指定所謂的“布線”約束,其僅在綜合階段加強時序路徑約束。例如:
FDC約束輸入文件至綜合:
set_clock_route_delay {c:clka} 1.4
這些約束使綜合在這些路徑上“更加努力”地滿足時序性能的要求,從而產生更好的關聯和QoR。
時序關聯性能的好處是,您可以從深層次查看引起問題的準確路徑,例如改變每個結束點顯示的路徑數量。您可以搜索感興趣的特定時鐘或實例,并顯示他們的時序路徑。此外,還可以對時鐘進行比較和顯示,以進一步幫助時序關聯(見圖5)。
您可以看到,您需要完成一些步驟并需要在Vivado Design Suite流程中花一些時間,才能實現更好的時序性能。我們所述的方法可以及早發現時鐘約束設置問題,同時還可以提供各種技術以調節和關聯設計和RTL中的時序,以快速實現時序收斂。
評論
查看更多