Best Practices for Constraining Routing
Follow these guidelines when constraining routing to ensure consistency for register and signal names when you re-compile.
- Use a consistent naming convention, such as
netname_LOCKED, for all constrained nets. This methodology lets you identify them in the template files more easily. - Limit routing constraints (if possible) to named single-fanout signals between named registers.
- Use the
syn_keepsynthesis attribute—for all locked registers and the signals between locked registers—to tell synthesis to keep the signals during optimization. If you do not usesyn_keep, the software might optimize away the net you want to constrain.(* syn_keep = "true" *) wire netname_LOCKED; - In your .rcf, do not point to the
.troutingtraces file in the project
outflow directory. This file is overwritten each time
you compile. Instead, move the .troutingtraces file into
another directory and point to it in that location.Note: Titanium and Topaz only.
- Use routing constraints sparingly; excessive constraints make it hard to close timing.
- Implement constrained routing as late in the design cycle as possible (when you have fewer changes to your design).
Note: Although you can use constrained routing on combinational paths, primitive cell names
(for example LUT names) on these paths may change if you modify unrelated sections of
the design and re-run synthesis. As a result, you may need to update your
<project>.out.placeloc file to reflect the new
primitive cell names.