Block-level constraints must follow these rules:
- Avoid defining clocks in block‑level constraints if they are created at the
top level. Use the following command to query them inside the
block:
set blockClock [get_clocks -of_objects [get_ports clkIn]] - Define a clock inside the block only if all of the following conditions are
met:
- The clock is on an
inputorinoutport driving an instantiatedinputorinoutbuffer. - The clock exists on the output of a cell that creates or
transforms a clock. Exceptions include
MMCM,PLL, or special buffers automatically handled by timing tools. - Examples include the following:
- Input clock with an input buffer
- Clock divider
- GT recovered clock
- The clock is on an
- Specify input and output delay only if the port connects directly to a
top-level port and the I/O buffer is inside the IP.
- Examples include the following:
- Input data ports with input buffers
- Output data ports with output buffers
- Examples include the following:
- Avoid defining timing exceptions between clocks not bound to the IP.
- Do not refer to clocks by name, as names can vary with top-level clocks or multiple instances.
- Avoid placement constraints if the block can be instantiated multiple times in the same top-level design.