Implementing modules out-of-context from the rest of the design prevents the optimization across modules that might normally occur in a typical top-down flow. To limit the loss of performance due to these restrictions, follow these guidelines:
- Choose the module(s) to be implemented out-of-context carefully. Select modules that are logically isolated from other logic in the design, and that can be physically constrained to a contiguous area of the device.
- Build an effective hierarchy with the selected modules in mind. Structure the hierarchy for independent implementation. Design hierarchy is an important consideration. Where a design is partitioned can have significant effects on the quality of the results, and in some cases hierarchy might need to be added or modified to group appropriate modules together for an out-of-context implementation.
- Keep critical paths contained entirely within modules, either in submodules or in top.
- Register inputs and outputs between modules to maximize optimization within the modules, and to allow for maximum placer and router flexibility.
- Provide information on how the module will be used by defining context constraints. Context constraints define how the module will be connected in the top level, allowing for additional optimization and accurate timing analysis. See Out-of-Context Design Constraints.
- Dedicated connections cannot always be handled properly across an OOC module boundary. All related design elements must be partitioned together. Examples of this are I/O components with dedicated connection such as transceivers or IOLOGIC components. See Dedicated Connections Between Components.