2 Feasibility filter used during packing that determines if various necessary conditions for legality are met
3
4 Important for 2 reasons:
5 1) Quickly reject cases that are bad so that we don't waste time exploring useless cases in packing
6 2) Robustness issue. During packing, we have a limited size queue to store candidates to try to pack. A good filter helps keep that queue filled with candidates likely to pass.
7
8 1st major filter: Pin counting based on pin classes
9 Rationale: If the number of a particular gruop of pins supplied by the pb_graph_node in the architecture is insufficient to meet a candidate packing solution's demand for that group of pins, then that
10 candidate solution is for sure invalid without any further legalization checks. For example, if a candidate solution requires 2 clock pins but the architecture only has one clock, then that solution
11 can't be legal.
12
13 Implementation details:
14 a) Definition of a pin class - If there exists a path (ignoring directionality of connections) from pin A to pin B and pin A and pin B are of the same type (input, output, or clock), then pin A and pin B are in the same pin class. Otherwise, pin A and pin B are in different pin classes.
15 b) Code Identifies pin classes. Given a candidate solution