Vivado綜合設置選項分析:-control_set_opt_threshold
- 2019 年 10 月 31 日
- 筆記

觸發器的控制集由時鐘訊號、複位/置位訊號和使能訊號構成,通常只有{clk,rst/set,ce}均相同的觸發器才可以被放置在一個SLICE中。但是,對於同步置位、同步複位和同步使能訊號,Vivado會根據-control_set_opt_threshold的設置進行優化,其目的是減少控制集的個數。優化的方法如下圖所示。在優化之前,3個觸發器被分別放置在3個SLICE中,而優化後,被放置在1個SLICE中,但此時需佔用查找表資源。

-control_set_opt_threshold的值為控制訊號(不包括時鐘)的扇出個數,表明對小於此值的同步訊號進行優化,顯然此值越大,被優化的觸發器越多,但佔用的查找表也越多。若此值為0,則不進行優化。通常情況下,按默認值auto運行即可。
UG949(V2017.4版本)Table 5-9給出了控制集的百分比(適用於7系列FPGA和UltraScale FPGA),如下圖所示。可以看到當這個百分比超過15%時,表明需要降低控制集。

該百分比的具體計算步驟如下:
第一步:打開綜合後的設計,通過report_control_sets -verbose命令獲取unique_ctrl_set,如下圖中的紅色標記。

第二步:通過下面兩條命令獲得當前晶片中SLICE的個數slice_num
set part [get_property PART[current_design]]
set slice_num [get_property SLICES[get_parts $part]]
第三步:控制集百分比即為:
unique_ctrl_set/slice_num*100%。
此外,CONTROL_SET_THRESHOLD(可選值0-128)也是Vivado模組綜合(關於模組綜合技術後續會寫文章介紹)的一個選項,利用該選項可以根據設計需求靈活地對某些模組的控制集進行控制。例如:
set_property
BLOCK_SYNTH. CONTROL_SET_THRESHOLD{ 8 } [get_cells uart_rx]
set_property
BLOCK_SYNTH. CONTROL_SET_THRESHOLD{ 16 } [get_cells uart_rx]
(上述命令中「」表示一行內容分多行寫)
可將上述兩條語句寫入一個單獨的.xdc文件中,並將文件設定為綜合階段使用。