1. 程式人生 > >Vivado使用技巧(25):Block Synthesis技術

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

AREA_OPTIMIZEDALTERNATE_ROUTABILITYPERFORMANCE_OPTIMIZED。可以使用如下命令設定塊級綜合策略:

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 合併/保留等效的暫存器