AR# 46249

Vivado Constraints - How do I constrain ODDR/IDDR interfaces

Description

How do I constrain my IDDR/ODDR interfaces?

Solution

In the IDDR/ODDR application, you must specify the set_output_delay for the rising edged portion and one for the falling edged portion.

Example of ODDR:

set_output_delay -clock [get_clocks clk_pin_p] -max 1.0 [get_ports {spi_pin}]
set_output_delay -clock [get_clocks clk_pin_p] -max 1.0 [get_ports {spi_pin}] -clock_fall -add_delay
set_output_delay -clock [get_clocks clk_pin_p] -min 0.5 [get_ports {spi_pin}] -add_delay
set_output_delay -clock [get_clocks clk_pin_p] -min 0.5 [get_ports {spi_pin}] -add_delay -clock_fall

Example of IDDR:

set_input_delay -clock [get_clocks clk_pin_p] -max 1.0 [get_ports {spi_pin}]
set_input_delay -clock [get_clocks clk_pin_p] -max 1.0 [get_ports {spi_pin}] -clock_fall -add_delay
set_input_delay -clock [get_clocks clk_pin_p] -min 0.5 [get_ports {spi_pin}] -add_delay
set_input_delay -clock [get_clocks clk_pin_p] -min 0.5 [get_ports {spi_pin}] -add_delay -clock_fall

Then I ran:

report_timing -to [get_ports {spi_pin}] -delay_type max -max_paths 18 -nworst 18
report_timing -from [get_ports {spi_pin}] -delay_type max -max_paths 18 -nworst 18

You will get the rising to rising, rising to falling, falling to falling, and falling to rising paths for the ODDR/IDDR.

AR# 46249
Date 08/07/2013
Status Active
Type Release Notes
Tools