From 8480e941a5a650438276f7fde31d618358ea1b19 Mon Sep 17 00:00:00 2001 From: gatecat Date: Fri, 27 Mar 2026 12:31:47 +0100 Subject: [PATCH] heap: Add some notes about control sets Signed-off-by: gatecat --- common/place/placer_heap.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/common/place/placer_heap.h b/common/place/placer_heap.h index 8157a2c0..922fb094 100644 --- a/common/place/placer_heap.h +++ b/common/place/placer_heap.h @@ -61,6 +61,24 @@ struct PlacerHeapCfg std::function get_cell_legalisation_weight = [](Context *, CellInfo *) { return 1; }; bool disableCtrlSet; + + /* + Control set API + HeAP legalisation can be sped up by directly searching for nearby tiles to place an FF with a compatible control set. + Only one shared control set is currently supported, however, as a full validity check is always performed too, this doesn't + need to encompass every possible incompatibility (this is only for performance/QoR not correctness) + + ff_bel_bucket is the bel bucket ID for the flipflop (or logic cell if combined with LUT) bel type + + ff_control_set_groups contains the Z-location of flipflops in a control set group. + Each entry in this represents a SLICE, i.e. the set of flipflops that share the control set. In XC7 this would be + the two SLICEs in a tile. + + get_cell_control_set should return a unique index for every control set possibility. i.e. if this function returns the same + value the flipflops could be placed in the same group. + */ + + BelBucketId ff_bel_bucket = BelBucketId(); std::vector> ff_control_set_groups; int ctrl_set_max_radius = 10;