IntermediateQuestion 7 of 112

How do you constrain a DDR-style interface where data needs both -clock and -clock_fall input delays?

From PDVerse STA Mentor Guide, part of the pdVerse Mentor Guide

Short Answer

A DDR (double data rate) interface launches or captures data on both the rising and falling clock edges, so one input delay referencing only the rising edge covers half the data. The -clock_fall option on set_input_delay/set_output_delay (SDC) tells the constraint to reference the falling edge instead, and the rising and falling constraints must be applied together, not one overwriting the other.

Technical Reference DiagramHow do you constrain a DDR-style interface where data needs both -clock and -clock_fall input delays?

Technical Explanation

  • Why a single-edge constraint isn't enough. A DDR interface moves twice as much data per clock period by using both clock edges โ€” one data bit is valid around the rising edge, the next around the falling edge. A normal set_input_delay (SDC) constraint, which defaults to referencing the rising edge, only describes half of that behavior.
  • What -clock_fall does. Adding -clock_fall to set_input_delay or set_output_delay (SDC) tells the tool to measure that delay relative to the clock's falling edge instead of its rising edge โ€” describing the second half of the DDR data.
  • Both constraints must coexist. Applying -clock_fall on a port does not replace the rising-edge constraint already on that port; the tool needs both the rise-referenced and fall-referenced constraints active at once so it can check the path launched or captured on each edge independently.
  • -add_delay (SDC) keeps both from colliding. Because SDC by default treats a second set_input_delay on the same port and pin as overriding the first, the -add_delay option is needed so the rising and falling constraints are added as separate, independent delay specifications rather than one replacing the other.
  • What this changes in analysis. With both constraints active, the tool now analyzes two separate timing paths through the same physical port โ€” one relative to each clock edge โ€” doubling the effective number of input or output timing checks on that pin, exactly matching how the real DDR protocol uses the clock.

Common Mistake

The Trap: Adding a -clock_fall constraint on a DDR port without -add_delay, expecting it to sit alongside the existing rising-edge constraint.

  • Without -add_delay, the second set_input_delay call silently replaces the first instead of adding to it.
  • The design ends up constrained on only one edge, and the other edge's data path goes completely unchecked โ€” a real functional timing gap that produces no error message at all.

Follow-up Question & Model Response

How would you tell, just from reading a timing report, whether both the rising-edge and falling-edge constraints on a DDR port are actually active?

Candidate Model Response: Run report_timing (PT) or check_timing (PT) on the port and look for two distinct arrival/required timing paths referencing the same physical pin, one clocked off the rising edge and one off the falling edge. If only one edge shows up in the report despite both set_input_delay calls being in the SDC file, that is a strong sign the second call replaced the first because -add_delay was missing. Cross-checking the SDC source against the actual constraints the tool loaded, using report_port or a similar query command, confirms which delay specification survived.

Practical Example

A DDR3-style memory interface running at 800 MHz (1.25 ns period) needs input delay constraints on its DQ data pins referenced to both edges of the DQS strobe clock. The SDC applies set_input_delay -clock DQS -max 0.3 [get_ports DQ] for the rising-edge data, then set_input_delay -clock_fall -clock DQS -max 0.3 -add_delay [get_ports DQ] for the falling-edge data. Without -add_delay on the second line, report_timing -to [get_ports DQ0] would show only one clock edge in the startpoint list; with it, the report correctly shows two separate arrival checks on DQ0 โ€” one per DQS edge โ€” matching the real double-data-rate behavior of the interface.

Complete STA Handbook

Get the complete 10-chapter STA handbook covering setup/hold margins, clock modeling, OCV/POCV, crosstalk noise, and PrimeTime closure.

Offline PDF Bundle

Want all 1109 questions offline?

Get the complete 4-book PDF bundle (PnR, STA, MMMC, Low Power) with a clickable table of contents - no ads, no internet needed.

See what's inside the bundle
Timing Constraints (SDC) Handbook โ€” nine chaptersSDC ConstraintsNine chapters on clocks, exceptions, and constraint linting.