The IOB constraint is applied to FF instances with one of three values (TRUE, FALSE, FORCE) and takes precedence over use of the "-pr" switch. If an IOB constraint is attached to a FF, the "-pr" switch has no effect on that register.
Example UCF syntax:
INST "some_ff" IOB = TRUE;
There is no difference in the resulting FF pack behavior when the values "TRUE" and "FORCE" are used. The difference is in the behavior when the FF is found to be ineligible for an IOB pack. If "TRUE" is used on an ineligible FF, a warning message is printed in the MAP report (.mrp); whereas if "FORCE" is used, an error message is printed and MAP fails.
An exception to the above is that inverter pushes into FF inputs for V5/V5 OLOGIC components depends on the certainty that the FF will actually be packed into an OLOGIC component. For this reason, the inverted pushes only occur upstream in MAP if IOB=FORCE is used. For more details, see (Xilinx Answer 34120)
When IOB=FALSE is used, the FF is never packed into an IOB or OLOGIC component.
A FF is eligible to be packed into an IOB or OLOGIC component if it drives only an output buffer, is not constrained elsewhere (area group constraint for example) and the pack is not blocked by KEEP HIERARCHY constraints or a KEEP constraint on the output net. The FF control signals must also be compatible with other FFs in the target component.