16 - Xilinx Design Constraints
16 - Xilinx Design Constraints
˃ Pin Constraints
˃ Timing Constraints
Period
Input Delay
Output Delay
Virtual Clocks
˃ Constraints Wizard
˃ Summary
˃ When creating a new project from the Getting Started page you have the option to
create an I/O planning project without RTL
This allows testing of pin assignments
‒ I/O banking rules
‒ Avoid ground bounce
‒ The I/O Planner performs error checking for
your pinout
However, it is recommended that you have
RTL associated
‒ Error checking is better
˃ Static timing paths start at clocked elements and end at clocked elements
Paths from internal flip-flop to internal flip-flop are constrained by clock
˃ Inputs and outputs of the FPGA are not start-points/end-points of static timing
paths
By default, any logic between a primary I/O and an internal clocked element are not part of a
complete static timing path
Without additional commands, no setup/hold checks are done on logic associated with I/O
˃ The Vivado Design Suite timing engine allows for two sources of jitter
System Jitter: Jitter introduced by the clocking network inside the FPGA
‒ A single value for all clocks in the system
‒ Set with the set_system_jitter command
‒ set_system_jitter <value>
▪ <value> is the jitter in time units (nanoseconds)
Input Jitter: Jitter that exists on the input clock
‒ Set independently for each clock source
‒ Set with the set_input_jitter command
‒ set_input_jitter <clock_name> <value>
▪ <clock_name> is the name of a clock (not the clock object)
▪ <value> is the jitter in time units
˃ The latency of the clock can be controlled with the set_clock_latency Tcl
command
set_clock_latency –source <latency> <objects>
<latency> is the latency to apply
<objects> is the list of clocks, ports or pins to which to apply the latency
˃ The latency is an additional clock delay that is added between the clock object and
the pin, port, or net to which the clock is attached
If the set_clock_latency specifies a clock object, the latency is added to all destinations
of the clock
If the set_clock_latency specifies a port or pin, it applies to all clocks that go through that
port or pin
‒ If the port or pin has more than one clock associated with it, the –clock <clocks> option can be
used to specify which clocks to apply the latency to
˃ The Timing Constraint window can be opened using the menu Window > Timing
Constraints
A clock can be created by double clicking on the Create Clock, or a new row in the Create
Clock table
˃ Alternatively can be set via the Constraints Wizard
Covered later in this presentation
Tcl command to
create clock
˃ To complete the static timing path, you need to describe the external elements to
the Vivado static timing engine
What clock is used by the external device
Delay between the external device’s clock and the arrival at the input port of the FPGA
‒ Includes the CLK > Q time of the external device and the board delay
˃ By default, each input port can have one maximum delay and one minimum delay
Maximum delay is used for the setup check
Minimum delay is used for the hold check
˃ Without the –max or –min option, the value supplied is used for both
˃ To complete the static timing path, you need to describe the external elements to
the Vivado Design Suite static timing engine
What clock is used by the external device
Delay between the output port of the FPGA and the external device’s clock
‒ Includes the required time of the external device and the board delay
˃ External devices need a setup and hold time around the clock
set_output_delay –max specifies the required setup time
set_output_delay –min specifies the negative of the required hold time
˃ There are many reasons for using virtual clocks for clocking I/O
Device external to the FPGA uses a different clock than the FPGA
‒ Runs at a different frequency
‒ Maybe a multiple/division of the FPGA clock
‒ Maybe the frequency of an internal FPGA clock generated by an MMCM/PLL
Has a different delay path on the board
‒ Maybe has a clock buffer chip on the board
˃ User flexibility
The user has the choice to ignore the selected
constraints
The wizard can be launched even if timing
constraints have already been entered into the
XDC file
˃ Combinatorial Delay
Cover paths that traverse the FPGA without being captured by any sequential elements
˃ The I/O Planner view in the Vivado IDE provides an easy-to-use interface for
assigning pin locations
˃ Use I/O Planning project for pin planning early in the design analysis
DRC checking
SSO analysis
Verify I/O banking rules
˃ Static timing paths start at clocked elements and end at clocked elements
˃ Static timing paths are analyzed for setup and hold violations at both fastest and
slowest process corners
˃ Clocks are objects
˃ Clocks can be created with the create_clock command