Back End

Standard Delay Format

SDF file is how you represent your circuit delays. We have earlier seen SPEF format which is the circuit’s RC representation. SDF now has the delay numbers derived from these as well as the cell delays associated with the digital cells. SDF or Standard Delay Format is an IEEE specification. SDF is an ASCII format and can include:

1. Delays: module path, device, interconnect, and port
2. Timing checks: setup, hold, recovery, removal, skew, width, period, and nochange
3. Timing constraints: path, skew, period, sum, and diff
4. Timing environment: intended operating timing environment
5. Incremental and absolute delays
6. Conditional and unconditional module path delays and timing checks
7. Design/instance-specific or type/library-specific data
8. Scaling, environmental, and technology parameters

SDFs can be used at any stage in the design flow for an accurate and tool independent representation of circuit delays. In physical design flow, SDF files are used for postlayout simulation & backannotation. The STA tool typically writes out the SDF. This will have both interconnect and cell delay.After P&R you give the following inputs to the STA tool.

  • Netlist
  • .lib file for cell delays
  • SPEF file for extracted parasitics from the layout
  • SDC file for timing constraints

The .lib only has the cell delays in a table form, and the SPEF file has the interconnect parasitics. SDF file combines these information and gives out a file that has accurate delays for each component in the layout database, for the given constraints. This is used along with the netlist in a simulator to verify that design meets its functional & timing requirements.

Let us now try to understand the format in detail. I will skip the header section, since it is more or less self explanatory. Make sure you look at the (TIMESCALE ) statement to verify you are using the correct timescale though.

An SDF file typically has a section similar to the one below.

The SDF INTERCONNECT construct allows interconnect delays to be specified on a point-to-point basis. This is the most general method of specifying interconnect delay.

The above snippet gives the interconnect delays as calculated by the analysis tool. in1 is a port (a physical pin in layout) and there is a wire connecting to the D pin of register top/test_reg. There are two parentheses next to it,with colon separated values.(0.0029::0.0028) corresponds to the delay values when top/test_reg/D makes a 0->1 transition. Similarly the value in the second parenthesis (0.0029::0.0029) corresponds to when this port makes a 1->0 transition. (A typical SDF may only have two such groups, but SDF file can have upto 12 delay values, which corresponds to when the ports makes the following transitions. 0->1, 1->0, 0->Z, Z->1, 1->Z, Z->0, 0->X, X->1, 1->X, X->0, X->Z, Z->X)

Inside each of the delay group, we can have a triplet of values, separated by colon.In the example, we only have two.This means the minimum & maximum corner values are written out by the tool.(With typical values missing.It is NOT zero.)

Now, let us see how cell delay information is incorporated in SDF file.

Let us take the DELAY statement from the above. There are two IOPATHs defined. The CLK->Q delay and the CLRZ-Q delay of the cell. See that the first parenthesis is empty for CLRZ->Q path delay. This means 0->1 values are not specified and might not even be present in the timing model(.lib).

We also have a TIMINGCHECK section above. Timing check entries specify limits in the way in which a signal can change or two signals can change in relation to each other for reliable circuit operation. EDA analysis tools use this information in different ways:

  1. Simulation tools issue warnings about signal transitions that violate timing checks.
  2. Timing analysis tools identify delay paths that might cause timing check violations and may determine the constraints for those paths.

Take (SETUPHOLD (posedge D) (posedge CLK) (0.5805::0.5805) (-0.1512::-0.1512))

The syntax for SETUPHOLD timingcheck statement is ( SETUPHOLD port_tchk port_tchk rvalue rvalue )

The first port_tchk is (posedge D),and identifies the data port D. Since there is a posedge specification, this value is for posedge transition at D.(posedge CLK) identifies the clock port and identifies posedge as the active transition edge.The first rvale (0.5805::0.5805) gives the SETUP time.The second rvale (-0.1512::-0.1512) gives the hold time.Either can be negative, however their sum must be greater than zero.
The WIDTH entry specifies limits for a minimum pulse width timing check.
(WIDTH (posedge CLK) (0.3692::0.3692)) gives the min & max minimum width required of the clock CLK from its positive edge. We can also have a similar statement for (negedge CLK).

There is another common statement which is COND. The COND construct allows any path delay to be made conditional, that is, its value applies only when the specified condition is true.This allows for state-dependency of path delays where the path appears more than once in the timing model with conditions to identify the circuit state when it applies.Annotator must locate a path delay with a condition matching the one specified and apply the data only to that. Other path delays from the same input port to the same output port but with different conditions in the timing model will not receive the data.

(COND A&&!B (IOPATH S Y (0.7427::0.7427) (0.6942::0.6942)))

The Path delay from S->Y is the given values only when the condition A&&!B is matched. i.e. the example below gives the different delays the MUX has depending on which signal is being selected.

COND statements can be used as part of TIMINGCHECKS as well. You may encounter those in your SDFs.

This just starts you off with understanding the SDF file you use for postlayout simulations, and these are the most common statements you encounter in the file.



  1. Siddarth

    April 2, 2014 at 11:38 am

    Thanks Sini. This is a very good article & gives clear understanding on sdf file.

  2. srinivas

    April 5, 2014 at 11:09 am

    Very useful article..thank you

  3. vijay

    July 27, 2014 at 9:56 pm

    Thanks a ton, i’d been forever confused b/w sdf and lib and how they integrate into the flow, till now.

    The detailed sdf description completes the understanding. Thanks!

  4. T siva

    November 18, 2014 at 12:13 am

    Thank u sini for giving valuable knowledge to young generation.This article clarified every doubt regarding SDF

  5. Jay Singh Walia

    December 17, 2014 at 8:20 am

    Nice brief intro Thanks.

  6. Narasimha Rao

    March 1, 2015 at 3:54 pm

    Thanks very nice web site.

  7. Rama

    June 11, 2015 at 7:50 pm

    Hi Mam,

    I am interested to know how the core utilization and std cell utilization done ? i am trying to learn PD.

  8. Pratik

    June 22, 2015 at 11:26 am

    Hi Sini,
    Thanks for your detail explanation about SDF.
    I got doubt in SDF syntax. In my case- SDF generated in ETS tool. and in triplet I see only two values (min::max) as explained. But I see in my SDF min values is higher than max value. Is it possible? and if yes then how?
    And second question I have, is how to generate typical values also?
    Waiting for your reply.

    SDF snippet for reference:
    (INSTANCE RECC_SPLT1_edt_i/RECC_SPLT1_edt_decompressor_i/g1436)
    (IOPATH AN Y (0.02830::0.02830) (0.02630::0.02630))
    (IOPATH B Y (
    0.02060::0.02050) (0.02240::0.02240))

    Thank You,

    • Sini

      June 23, 2015 at 11:52 am

      Please see the .lib values.. Are the rise_transition values for MAX and MIN libraries for this pin different and the MIN library value higher than the MAX?

      To get the typical values, use the option -typ_view

      write_sdf -typ_view NOM_setup test.sdf

  9. manasa

    February 1, 2016 at 3:02 am

    Assume the timescale is in ps

    (INSTANCE Inst_UART_TX_CTRL/bitTmr_1_rt)
    (PORT ADR1 (231:231:667)(231:231:667))
    (PORT ADR5 ( 0 )( 0 ))
    (IOPATH ADR1 O (45:124:124)(45:124:124))
    (IOPATH ADR5 O (45:124:124)(45:124:124))

    from this SDF snippet, the given delay is only for the component and does not include wire delay ???

    Assuming that the given SDF snippet shows the delay of a component alone is the total delay the largest delay of the two IOPATH i.e. 124ps or the addition of the individual delays of the two IOPATH i.e. (124+124)ps
    (Assuming i’m calculating the worst case delay for the component)

    • mm

      Sini Mukundan

      February 1, 2016 at 9:02 am

      This doesn’t have INTERCONNECT statement because you have some other model available. Is X_LUT6 a standard cell or a hard macro with a .lib available? Check Inst_UART_TX_CTRL for wire delays.

      (IOPATH ADR1 O (45:124:124)(45:124:124)) –> The path delay from ADR1 to O is 124ps when the transition is 0->1 & 1->0 for worst case.

      • manasa

        February 1, 2016 at 10:05 am

        x_lut6 is a component as part of xilinx FPGA board. Specifically the SDF file snippet is from a circuit on a virtex 7 board.

        What I understand from the IOPATH statement is that it gives the delay from the i/p to o/p port (minimum:typical:maximum). Now when a instance has more than one IOPATH statement as in the above case what would be the delay of that instance ??

  10. Rameez Raza

    February 15, 2016 at 12:46 pm

    The article is very helpful in understanding the SDF files.
    I have a doubt related to SDF files , if wea have different sdf files for min,max and typ corners and each file have delay values like this (0.0029::0.0028), so does it mean i am missing typical values.Please clarify

    • mm

      Sini Mukundan

      February 15, 2016 at 1:46 pm

      Yes, that’s the default for many tools.To get typ values, you usually have an option–

      write_sdf -typ_view typ.sdf

  11. samarshekar

    March 22, 2016 at 9:34 pm

    My work is criticality computation in SSTA. For this i converted circuit into timing graph G(V,E). For all ISCAS 85 bench circuits. I synthesized synopsys DC for all and primetime also.

    Now i need to extract gate and net delays from SDF files for individual nodes for the timing graph. I have to calculate timing quantity for each node. To calculate i need to extract delays from SDF file and Perform timing calculation at each node.
    How to extract delays from sdf …do we have any script for that or we need to do back annotation……hel me…plz

  12. samarshekar

    March 22, 2016 at 9:43 pm

    You can refer “fast and accurate Statistical static timing analysis” IEEE paper …

  13. Samarshekar

    March 28, 2016 at 12:32 pm

    How to extract gate delays and net delays from SDF files. Do we have any scripts for that. I need to extract these delays values to perform statistical timing analysis.

    Fats and accurate SSTA ieee paper

  14. Robin

    July 12, 2016 at 2:52 am

    I have the same question, why sometimes MIN delay in SDF will be larger than MAX delay (SDF from EDI)?

    • mm

      Sini Mukundan

      July 13, 2016 at 9:19 am

      Please see the .lib values.. Are the rise_transition values for MAX and MIN libraries for this pin different and the MIN library value higher than the MAX?

  15. kvin

    August 5, 2016 at 3:55 pm

    .After P&R you give the following inputs to the STA tool.
    ◾.lib file for cell delays
    ◾ SPEF file for extracted parasitics from the layout
    ◾ SDC file for timing constraints
    I am confused of SDC file needed for generating sdf, why we need the timing constraints ? And which constraint only in the SDC file ? which should not be inside SDC file ? ex set_ideal_network etc ?

    • mm

      Sini Mukundan

      August 6, 2016 at 10:51 am

      SDC file is required for analysing timing. SDC format document should be available from Synopsis.

  16. raghu

    February 19, 2017 at 8:18 pm

    when we have cell delays from .libs and net delays from spef , why would be sdfs needed ..?

    • mm

      Sini Mukundan

      February 21, 2017 at 9:24 pm

      I don’t think simulation tools will accept spef & .lib..
      Most flows have verilog models + sdf annotations.

  17. sy

    August 28, 2017 at 6:48 pm

    Thanks for the valuable information.

    When a timing triplet is defined, like in your example above


    and the typical value is missing, and I instruct the elaborator to use the typical values of the SDF file, will the simulation either not be functional or use some default value related to the time scale?

    • mm

      Sini Mukundan

      August 29, 2017 at 9:16 pm

      Most tools use 0.

  18. Sonal

    August 31, 2017 at 4:17 am

    Hi Sini – I have a question. Can the INTERCONNECT delay values be negative? I see negative numbers in the SDF for INTERCONNECT delays and it doesn’t make sense to me.
    (INTERCONNECT DIGITAL_IO[23] u_padring_dig/gen_mipi_1__i_mipi/I_dig_mipi/p (0.766::0.766) (-0.042::-0.042))

    • mm

      Sini Mukundan

      August 31, 2017 at 10:51 am

      I am not sure what that signify…

  19. Gunnesh

    October 30, 2017 at 1:59 pm

    Thanks sini for providing valuable information

  20. Ankit Berde

    December 3, 2017 at 12:06 pm

    Valuable efforts Madam!!
    I had a doubt though and i would be really thankful if you find time to help me with it.
    Is sdf file to be specified instead of library file? Since if both are specified tool will be in conjecture about where to use cell delays from.

  21. Saravanakumar

    January 7, 2019 at 2:36 pm


    In my sdf I found “RECREM” .. Can u explain?

Leave a Reply

Your email address will not be published. Required fields are marked *

Most Popular

VLSI Pro is a professional network of VLSI engineers. Here you can find latest news, helpful articles and more on VLSI technology.

Copyright © 2016 VLSI Pro

To Top