1.1.2 −control_set_opt_threshold
−control_set_opt_threshold在综合设置中的位置如图1.2所示。
图1.2
触发器的控制集由时钟信号、复位/置位信号和使能信号构成。在通常情况下,只有{clk,rst/ set, ce}均相同的触发器才可以被放置在一个SLICE中。但是,对于同步复位、同步置位和同步使能信号,Vivado会根据−control_set_opt_threshold的设置进行优化,其目的是减少控制集的个数。优化的方法如图1.3所示。在优化之前,3个触发器被分别放置在3个SLICE中;而在优化后,3个触发器被放置在1个SLICE中,但此时需要占用LUT(Look Up Table,查找表)资源。
−control_set_opt_threshold的值为控制信号(不包括时钟)的扇出个数,表明对小于此值的同步信号进行优化。显然,此值越大,被优化的触发器越多,被占用的LUT也越多。若此值为0,则不进行优化。在通常情况下,按默认值auto运行即可。
图1.3
对控制集百分比的说明(适用于7系列FPGA和UltraScale FPGA)如图1.4所示。从图中可以看到:当控制集的百分比超过15%时,需要降低控制集。
图1.4
计算控制集百分比的步骤如下:
❶ 打开综合阶段或实现阶段生成的DCP(Design Checkpoint,Vivado专用网表文件),通过report_control_sets −verbose命令获取unique_ctrl_set,即unique control sets值,如图1.5所示。
图1.5
❷ 通过两条命令获得当前芯片中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)也是综合设置中的一个选项。利用该选项可以根据设计需求灵活地对某些模块的控制集进行控制。例如:
set_property BLOCK_SYNTH. CONTROL_SET_THRESHOLD { 8 } [get_cells uart_rx]
set_property BLOCK_SYNTH. CONTROL_SET_THRESHOLD { 16 } [get_cells uart_tx]
可将上述两条语句写入一个单独的XDC文件中,并将文件设置为综合阶段使用。