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_OPTIMIZED、ALTERNATE_ROUTABILITY和PERFORMANCE_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 | 合併/保留等效的暫存器 |
相關文章
- Vivado使用技巧(19):使用Vivado Simulator
- Vivado使用技巧(27):RAM編寫技巧
- Vivado使用技巧(26):HDL編寫技巧
- Vivado使用技巧(17):建立IBIS模型模型
- Vivado使用技巧(6):Messages視窗管理
- Vivado使用技巧(29):約束功能概述
- Vivado使用技巧(20):Waveform功能詳解ORM
- Vivado使用技巧(18):模擬功能概述
- Vivado使用技巧(33):時序異常
- Vivado使用技巧(9):COE檔案使用方法
- Vivado使用技巧(4):查詢功能詳解
- Vivado使用技巧(3):Force Up-to-Date功能
- Vivado使用技巧(11):設定FPGA配置模式FPGA模式
- Vivado使用技巧(8):Core Container打包IP核AI
- Vivado使用技巧(34):路徑分割現象
- Vivado使用技巧(28):支援的Verilog語法
- Vivado使用技巧(5):屬性編輯器的使用
- Vivado使用技巧(30):使用時序約束嚮導
- Vivado使用技巧(16):SSN轉換噪聲分析
- Vivado使用技巧(14):IO規劃方法詳解
- Vivado使用技巧(31):時鐘的約束方法
- Vivado使用技巧(23):綜合執行與OOC
- Vivado使用技巧(21):模擬中的Debug特性
- Vivado使用技巧(15):DRC設計規則檢查
- Vivado使用技巧(13):CSV檔案定義IO Ports
- Vivado使用技巧(32):IO延遲的約束方法
- Vivado使用技巧(7):使用IP核自帶Testbench進行模擬
- Vivado使用技巧(10):編輯與改寫IP核原始檔
- Vivado使用技巧(24):HDL/XDC中設定綜合屬性
- Vivado使用技巧(22):綜合策略與設定的選擇
- __block使用BloC
- Vivado使用技巧(12):設定DCI與內部參考電壓
- 成功使用機器學習技術的3個技巧機器學習
- BetterFE 前端技術週刊 - 2019/03/25前端
- BetterFE 前端技術週刊 - 2019/02/25前端
- Redis核心技術筆記21-25Redis筆記
- 執行時Hook所有Block方法呼叫的技術實現HookBloC
- Mac使用者必備的25個小技巧Mac