Vivado综合设置选项分析:-control_set_opt_threshold

触发器的控制集由时钟信号、复位/置位信号和使能信号构成,通常只有{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文件中,并将文件设定为综合阶段使用。