Following are the MAP options to have registers absorbed into the IOB:
map -pr o
map -pr b
The first absorbs registers for output registers, and the second absorbs registers for both input and output registers.
Virtex devices no longer have primitives that correspond to the synchronous elements in the IOBs. There are a few ways to infer usage of these Flip-Flops if the rules for pulling them into the IOB are followed.
All Flip-Flops to be pulled into the IOB must have a fanout of 1. This applies to output and 3-state enable registers. For example, if a 32-bit bidirectional bus exists, then the 3-state enable signal must be replicated in the original design so that it will have a fanout of 1.
All Flip-Flops must share the same clock and reset signal, but they can have independent clock enables.
One way to pull Flip-Flops into the IOB is to use the IOB=TRUE/FALSE attribute on the instantiated Flip-Flops; this gets applied to the instance name:
INST <FF_instance_name> IOB = TRUE|FALSE;
The other way to pull Flip-Flops into the IOB is to use a MAP directive. If using the command line flow, use the "-pr i/o/b" option ("i" for input FFs only, "o" for output Flip-Flops only or "b" for both input and output).
If using the GUIs, go to the Implementation Options on the "Optimize and MAP" window, and use the pull-down menu that is near the bottom.
One way to push 3-state Flip-Flops inside the IOB is to infer the Flip-Flops in the HDL codes, and use the MAP "-pr o" or "b" option.