Skip to content
VLSI Mentor

Tcl · Module 22

Libraries and Parasitics

Cell delay comes from the libraries; wire delay comes from the parasitics. Leave the parasitics out and the tool does not leave wire delay out — it guesses, and does not say so in the report.

Intermediate15 min readtcledapart-iistalibrariesparasiticscorners

Part II · Module 22 · Chapter 22.3 · Libraries and Parasitics

Timing analysis adds up two kinds of delay: through the cells, and along the wires between them. The libraries supply the first and the parasitics supply the second.

Chapter 21.4 covered libraries for synthesis, and the argument is the same here — which libraries, at which corner, checked before the run, recorded afterwards. This chapter does not repeat it. What is new in STA is the second half.

1. Both halves of the delay

  • Cell delay — how long a gate takes to switch, as a function of input slew and output load. From the library.
  • Wire delay — how long the signal takes along the interconnect, which depends on resistance and capacitance. From the extracted parasitics.

In older, larger technologies cell delay dominated and wire delay was a correction. In modern nodes it is routinely the other way round, which is why the parasitics are not an optional refinement.

2. Libraries: the same discipline as synthesis

Briefly, because Chapter 21.4 has it in full:

Azvya Education Pvt. Ltd.VLSI Mentor
Snippet
proc check_libraries {paths} {
    set missing {}
    foreach p $paths { if {![file isfile $p]} { lappend missing $p } }
    if {[llength $missing]} {
        error "[llength $missing] library file(s) missing: [join $missing {, }]" \
              {} [list LIB MISSING $missing]
    }
    return [llength $paths]
}

Check before the run, print what you used, record it in the log. The one thing worth adding here: at signoff the libraries should be compared against the ones synthesis used, from the provenance record in Chapter 22.2 §3. A difference is not necessarily wrong, but it should be a decision.

3. Parasitics

Parasitics are the extracted resistance and capacitance of the actual routed wires, produced after place-and-route and supplied per corner.

Azvya Education Pvt. Ltd.VLSI Mentor
Snippet
proc spef_for {corner} { return [file join $::SPEFDIR ${::TOP}_${corner}.spef] }

set spef [spef_for $CORNER]
if {![file isfile $spef]} {
    puts stderr "  WARNING no parasitics for the $CORNER corner: [file tail $spef]"
} else {
    read_parasitics $spef        ;# a tool command
    puts "  parasitics: [file tail $spef]"
}

The per-corner path comes from the helper in Chapter 22.1 §2, which is what makes Chapter 22.8's loop possible.

4. What is assumed when they are missing

The registry purpose's question, and the answer is the thing to take from this chapter.

That is why the warning above goes to stderr and into the log, and why Chapter 22.9's review treats missing parasitics as a finding rather than a detail.

5. The corner must be coherent

Here is the check that is specific to this chapter.

Three things carry a corner: the libraries, the parasitics, and the corner you declared. All three must agree.

Azvya Education Pvt. Ltd.VLSI Mentor
Snippet
proc check_corner_coherence {corner libs spef} {
    set problems {}
    foreach l $libs {
        if {![string match *${corner}* [file tail $l]]} {
            lappend problems "library [file tail $l] does not look like the $corner corner"
        }
    }
    if {$spef ne "" && ![string match *${corner}* [file tail $spef]]} {
        lappend problems "parasitics [file tail $spef] does not look like the $corner corner"
    }
    return $problems
}

6. Recording what was used

Everything in this chapter ends up in the same place: the log, and the run's record.

Azvya Education Pvt. Ltd.VLSI Mentor
Snippet
puts "  corner     : $CORNER"
puts "  libraries  : [llength $LIBS] file(s)"
foreach l $LIBS { puts "      [file tail $l]" }
puts "  parasitics : [expr {$spef eq "" ? "<none — wire delay estimated>" : [file tail $spef]}]"

That last line is the important one. A timing report whose log says <none — wire delay estimated> is interpretable; one that simply does not mention parasitics is not, and six months later nobody can tell which kind of run it was.

7. Exercises

Exercise 1. Which part of the delay comes from the libraries, and which from the parasitics?

Exercise 2. Why are parasitics not an optional refinement in modern nodes?

Exercise 3. What does a tool do when parasitics are missing?

Exercise 4. Why is the error from estimated wire delay not uniform across paths?

Exercise 5. Why can pre-layout timing never be signoff, and what makes that easy to forget?

Exercise 6. Name the three things that carry a corner, and what mixing them produces.

Exercise 7. What are the limits of the filename-based corner check?

Where this fits

Part of the Tcl curriculum.