Vivado使用技巧(22):綜合策略與設定的選擇
綜合(Synthesis)是指將RTL設計轉換為門級描述。Vivado開發套件中的綜合工具是一款時序驅動型、專為記憶體使用率和效能優化的綜合工具,支援System Verilog 2012、Verilog 2005、VHDL 2008、混合語言中的可綜合子集,以及XDC設計約束檔案(基於工業標準的SDC檔案),此外還支援RTL屬性來控制綜合細節。
綜合設定選項
在Flow Navigator中點選Settings,切換到Synthesis標籤中:
1.Constraints部分
選擇用於綜合的約束集,一個約束集是一組XDC約束檔案,預設選擇狀態為active的約束集。設計約束分兩種:
- 物理約束:定義管腳佈局、單元(如塊RAM、查詢表、觸發器等)佈局的的絕對或相對位置;
- 時序約束:定義設計的頻率需求。如果沒有時序約束,Vivado會根據佈線長度和佈局擁擠度優化設計。
2.Options部分
選擇綜合執行時使用的策略(strategy)。Vivado提供了幾種預定義的策略,後文將講述如何建立自定義策略。這裡給出綜合策略中每個設定選項的含義:
- flatten_hierarchy:定義綜合工具如何控制層次結構(比如模組之間的呼叫),選擇將所有層次展開融為一體進行綜合,還是分別獨立綜合再連線到一起。
- none表示從不展開層次結構,綜合輸出與原始RTL有相同的層次;
- full表示全部展開層次結構,只留下頂層;
- rebuilt讓綜合工具展開層次結構後進行綜合,綜合後再按原始RTL重建層次結構。這樣既保留了跨界優化的好處,又讓最終層次結構與RTL類似,便於分析。
- gated_clock_conversion:選擇是否將門控時鐘轉換為使能訊號。設計中應該避免使用門控時鐘,需要的時鐘訊號應儘可能由MMCM/PLL產生。轉換過程需要與RTL屬性配合工作,具體在第24篇介紹。
- bufg:設定綜合工具可以從設計中推斷出多少個BUFG。比如使用預設的12時,如果RTL中例項化了3個BUFG,那麼綜合工具最多還可以推測出9個沒有明確例項化的BUFG。
- fanout_limit:設定一個訊號的最大驅動負載數量,如果超出了該限制,就會複製一個相同的邏輯來驅動超出的負載。這裡只是一個總體設定,在RTL設計中還可以使用RTL屬性進行更具體的設定,具體在第24篇介紹。
- directive:設定Vivado綜合執行時擦愛去的優化方式,具體包括
- Default,預設設定。
- RuntimeOptimized,執行最短時間的優化選項,會忽略一些RTL優化來減少綜合執行時間。
- AreaOptimized_high/medium,執行一些通用的面積優化。
- AlternateRoutability,使用演算法提高佈線能力,減少MUXF和CARRY的使用。
- AreaMapLargeShiftRegToBRAM,將大型的移位暫存器用塊RAM來實現。
- AreaMultThresholdDSP,會更多地使用DSP塊資源。
- FewerCarryChains,位寬較大的運算元使用查詢表(LUT)實現,而不用進位鏈。
- retiming:啟用該功能,可以通過在組合門和LUT之間移動暫存器(達到暫存器平衡狀態)提高內部時鐘時序路徑的電路效能。該功能會保留原來的功能和電路延遲,也不需要改變RTL原始檔。
- fsm_extraction:設定綜合如何從設計中提取和對映有限狀態機,具體在第24篇介紹。
- keep_equivalent_registers:阻止合併有相同輸入邏輯的暫存器。
- resource_sharing:設定不同訊號間共享算數操作符,選擇為auto時設計會根據設計時序判斷是否進行資源共享。
- no_lc:選中會關閉LUT組合。
- no_srlextract:選中該選項時,移位暫存器會用普通的暫存器實現,而不用FPGA內部專用的SRL資源。
- max_bram:設定設計中執行使用的最大塊RAM數量。通常當設計中有黑盒子或第三方網表時,使用該選項來節省空間。預設值為-1,表示允許使用該FPGA中所有的塊RAM。
- max_uram:設定設計中執行使用的最大UltraRAM數量(對於UltraScale架構FPGA而言)。-1,表示允許使用該FPGA中所有的UltraRAM。
- max_dsp:設定設計中執行使用的最大DSP塊數量。通常當設計中有黑盒子或第三方網表時,使用該選項來節省空間。預設值為-1,表示允許使用該FPGA中所有的DSP資源。
- max_bram_cascade_height:設定可以將BRAM級聯在一起的最大數量。
- max_uram_cascade_height:設定可以將URAM級聯在一起的最大數量。
- cascade_dsp:設定在求DSP塊輸出總數時使用多少個加法器,預設計算時會使用塊內部的加法器鏈。設定為tree會強制將該計算在fabric結構中實現。
- no_timing_driven:禁用預設的時序驅動綜合演算法,這樣可以減少綜合執行時間,但會忽略綜合中時序的影響。
- sfcu:在單檔案編譯單元模式下執行綜合。
- assert:將VHDL中的assert狀態納入評估。失敗或錯誤級別會停止綜合程式併產生一個錯誤資訊;警報級別會產生一個警告資訊。
- tcl.pre/tcl.post:選擇tcl檔案,在綜合前和綜合後會自動執行其中的命令。這兩個檔案應該放在相應的執行目錄下,如project/project.runs/run_name。
建立綜合策略
除了Vivado提供的配置好的綜合策略外,還可以自行配置。在Settings中根據需要修改了設定選項後,點選右側的Save strategy as按鈕(如下圖紅框),會彈出視窗,填寫策略名稱和相關描述,即可儲存為使用者自定義的綜合策略。綜合策略列表的User defined strategies中即會出現自定義的綜合策略。
在Settings->Tool Settings->Strategies中也可以設定綜合策略,點選“+”即可新建策略。如果想在已有策略的基礎上修改,則選中一個策略,點選上方的Copy Strategy按鈕,User Defined Strategies中就會出現備份以供修改(Vivado提供的策略是不能修改的)。點選Apply應用配置後,綜合策略列表中就會出現自定義的策略。
控制檔案編譯順序
綜合時必須選取合適的編譯順序,比如一個檔案需要用到另一個檔案中的相關申明。Vivado按照RTL檔案的層次化結構編譯檔案,相關順序顯示在Sources視窗的Compile Order子視窗中(在底部選擇切換)。
Vivado可以自動識別和設定最佳的頂層模組,同時自動管理編譯順序。頂層模組檔案和該層次結構下所有的檔案,都會以正確的順序用於綜合和模擬。Sources視窗的右鍵選單->Hierarchy Update命令用於設定Vivado如何處理設計中檔案的改動。
Automatic Update and Compile Order設定當原始檔發生改動時,工具自動管理編譯順序,Compile Order視窗中將顯示編譯順序,Hierarchy視窗中顯示檔案是否在層次結構中使用以及所處的位置。
Automatic Update, Manual Compile Order設定Vivado可以自動決定最佳頂層模組,但是允許人工設定編譯順序。在Compile Order視窗中拖動檔案所處位置即可完成修改。
Vivado支援將Verilog(.v)或Verilog Header(.vh)檔案作為全域性`include檔案。Vivado會在其它原始檔前優先處理此類檔案。選中需要新增的檔案,右鍵->Set Global Include即可,或者在屬性視窗中選中相應核取方塊。
相關文章
- Vivado使用技巧(24):HDL/XDC中設定綜合屬性
- Vivado使用技巧(23):綜合執行與OOC
- Vivado使用技巧(11):設定FPGA配置模式FPGA模式
- Vivado使用技巧(12):設定DCI與內部參考電壓
- Vivado使用技巧(19):使用Vivado Simulator
- Vivado與notepad++的聯合使用
- 如何選擇免費OA綜合分析
- Vivado使用技巧(13):CSV檔案定義IO Ports
- JAVA技巧:使用java生成word文件選擇合適元件Java元件
- Vivado使用技巧(27):RAM編寫技巧
- Vivado使用技巧(26):HDL編寫技巧
- 團隊如何選擇合適的Git分支策略?Git
- Vivado使用技巧(15):DRC設計規則檢查
- Vivado使用技巧(28):支援的Verilog語法
- Vivado使用技巧(17):建立IBIS模型模型
- 獨享ip與共享ip的選擇技巧
- Vivado使用技巧(5):屬性編輯器的使用
- Vivado使用技巧(31):時鐘的約束方法
- Vivado使用技巧(21):模擬中的Debug特性
- 提高API效能的幾個綜合策略API
- Vivado使用技巧(6):Messages視窗管理
- Vivado使用技巧(29):約束功能概述
- Vivado使用技巧(20):Waveform功能詳解ORM
- Vivado使用技巧(18):模擬功能概述
- Vivado使用技巧(33):時序異常
- Vivado使用技巧(25):Block Synthesis技術BloC
- Vivado使用技巧(10):編輯與改寫IP核原始檔
- Vivado使用技巧(9):COE檔案使用方法
- Vivado使用技巧(32):IO延遲的約束方法
- Vivado使用技巧(4):查詢功能詳解
- Vivado使用技巧(3):Force Up-to-Date功能
- Vivado使用技巧(8):Core Container打包IP核AI
- Vivado使用技巧(34):路徑分割現象
- 綜合實驗,策略路由(BFD,NAT)路由
- MySQL中如何選擇合適的備份策略和備份工具MySql
- 伺服器選擇的技巧伺服器
- Vivado使用技巧(30):使用時序約束嚮導
- 如何選擇適合大學使用的郵箱