Vivado使用技巧(25):Block Synthesis技術
本系列第22~24篇介紹了Vivado綜合技術中的各個方面,這裡先概述一下:Vivado綜合支援使用多種策略(Strategy)和全域性設定(Setting)。在RTL或XDC檔案中,可以用綜合屬性來改寫某些設定選項。目前設計越複雜,全域性設定方式限制了設計的潛在效能,同一設計中不同層次結構可能在不同設定下才能獲得最佳表現。
針對此問題,一個解決方法便是Out-of-context(OOC)模式。OOC模式下的層次結構會脫離設計中的其它部分獨立執行,但這樣也增加了設計流程的複雜度。比如一個設計中需要執行多次綜合、OOC模組必須要獨立的約束等等。
本文將介紹Vivado提供的塊級綜合流程(Block Synthesis Flow),允許設計者將某些全域性設定和策略應用於特定的層次結構中,且可以與設計中的其它模組不同。
設定塊級流程
塊級流程的必須在XDC檔案中使用BLOCK_SYNTH屬性設定,語法如下 :
set_property BLOCK_SYNTH.<option name> <value> [get_cells <instance_name>]
#舉例
set_property BLOCK SYNTH.MAX_LUT_INPUT 4 [get_cells FFT]
option_name和value為設定的選項名稱和值;instance_name為設定作用的模組例項化名稱(不是模組名稱)。這樣提供了更大的靈活性,比如一個模組可能會例項化多次,不同的例項之間也可以採用不同的設定。
設定之後,選項會應用於該例項和內部所有電路(包括內部呼叫的其它模組)。一個例項可以設定多個BLOCK_SYNTH屬性,沒有設定的選項採用預設值。如果僅希望將設定應用於該例項,而不應用於其中的子模組,需要做額外的設定,如:
set_property BLOCK SYNTH.MAX_LUT_INPUT 6 [get_cells FFT/childLevel]
使用該命令將子模組的選項設定為預設值(當然也可以設定為其他值)。當使用塊級綜合流程時,Vivado會採用自頂向下綜合模式。首先綜合頂層模組,確保不會影響到設定了其它選項的層次結構。
塊級流程選項
Vivado同樣也提供了一些預定義的塊級流程策略,包括DEFAULT
set_property BLOCK_SYNTH.STRATEGY {<value>} [get_cells <inst_name>]
Vivado支援設定的塊級綜合策略選項如下所示:
選項 | 型別 | 值 | 描述 |
---|---|---|---|
RETIMING | 整型 | 0/1 | 是否啟用Retiming功能 |
ADDER_THRESHOLD | 整型 | 4-128 | 設定綜合加法器時開始使用進位鏈的閾值,該值大於加法運算元位寬之和時採用進位鏈;小於時採用LUT組合實現。 |
COMPARATOR_THRESHOLD | 整型 | 4-128 | 設定綜合比較器時開始使用進位鏈的閾值 |
SHREG_MIN_SIZE | 整型 | 3-32 | 設定綜合暫存器鏈時開始使用SRL的閾值,大小超過此值時用SRL實現;小於時用暫存器實現 |
FSM_EXTRACTION | 字串 | AUTO等 | 設定狀態機的編碼方式 |
LUT_COMBINING | 整型 | 0/1 | 是否啟用查詢表組合 |
CONTROL_SET_THRESHOLD | 整型 | 0-128 | 設定綜合暫存器時開始使用控制訊號的閾值,當控制訊號扇出大於此值時多采用D輸入;小於時多采用控制訊號輸入 |
MAX_LUT_INPUT | 整型 | 4-6 | 4不會使用LUT5/LUT6原語;5不會使用LUT6原語;6會使用所有的LUT |
MUXF_MAPPING | 整型 | 0/1 | 是否啟用MUXF7/F8/F9介面 |
KEEP_EQUIVALENT_REGISTER | 整型 | 0/1 | 合併/保留等效的暫存器 |