When I use an RLOC_ORIGIN constraint to lock RPM macros, the following warning message is reported if the macro is placed in a slice type (S0, S1, S2, and S3 are the four slice types in a CLB) that is not the same slice type as the origin of the macro, which is the lower leftmost component of the macro:
"WARNING:Place:206 - This design contains an RPM macro for which a specific alignment on the CLB grid was desired. The macro can not be aligned in this specific way. The placer will disregard this alignment."
Improving the warning message for this issue is currently under consideration.
The current message indicates that the relative positioning of the slices in the macro is disrupted by your choice of placement location. The severity of this problem depends upon the contents of the macro. For example, an RPM containing only LUTs and FFs is not severely affected, but an RPM containing a carry chain or a wide gate structure might become unroutable.
While this issue can occur because of a poor site location choice, it can also occur unexpectedly when a macro is defined so that the origin (lower leftmost slice) is not SLICE_X0Y0. In this case, the macro becomes normalized and this affects the way that an RLOC_ORIGIN constraint is processed. If it is not possible to define the RPM with an X0Y0 origin, use the following formula to calculate RLOC_ORIGIN:
RLOC_ORIGIN = TARGET_SLICE - MACRO_ORIGIN
For example, if a macro is defined such that X1Y0 is the lower leftmost slice and it is to be placed in SLICE_X10Y10, use the following calculation:
RLOC_ORIGIN = X10Y10 - X1Y0 = X9Y0