Analye the control_set_detail.rpt generated by the impl_utils.tcl function analyze_control_sets_and_slice
python filter_control_sets.py control_set_details.rpt --min_sets 10 --max_ratio 25 --sort merit --desc
python filter_control_sets.py ../../reports/control_sets/control_set_details.rpt --min_sets 10 --max_ratio 25 --sort ratio
Vivado tcl example to generate the initial report (when no filtered yet)
report_control_sets -verbose -sort_by {clk set} -hierarchical -hierarchical_depth 1 -cells [get_cells *smi_sniffer*] -file sniffer_gather_cs.rpt
report_control_sets -verbose -sort_by {clk set} -hierarchical -hierarchical_depth 1 -cells [get_cells *sniffer_gather*] -file sniffer_gather_cs.rpt
Replication is bad for reducing control sets. https://docs.amd.com/r/en-US/ug949-vivado-design-methodology/Follow-Control-Set-Guidelines
Analyze the utilization report:
This script allows to pass a module name and to receive back the corresponding utilization
python utilization_filter.py ../../reports/utilization/hierarchical_utilization.rpt spisniffer