← Physical Design Interviews

Interview Question · Concept

Corners and Multi-Mode Multi-Corner Analysis

L1 JuniorL2 Mid-Levelstacornersmcmm
  • Likely at Google
  • Likely at Apple
  • Likely at NVIDIA

The Question

The interviewer asks

What are timing corners and modes, and how would you choose which ones to sign off?

Reveal the Model Answer

A corner is one process, voltage and temperature, with its own library. A mode is one set of constraints, such as functional or test. Sign-off times every required mode at every corner where some check could be worst: slow corners for setup, fast for hold. Both temperatures are needed, because which one is slower depends on the process. In the lesson the cold slow corner was worse than the hot one.

Timing pathThe Same Setup Path at the Slow CornerFlop ffl launches, ffc captures; both clocks come from one clkbuf_4 and their own clkbuf_1. Liberty sky130_fd_sc_hd__ss_n40C_1v60.

ffl → ffcsetup check, latest arrival2 cells

  • Clock latency
  • Cell delay
  • Setup time
The same setup path at the slow corner00.20.40.60.811.21.4time (ns)launch clk ↑capture clk ↑Data arrivesRequired byclock 0.3654 nsclock 0.3654ffl/CLK → ffl/Q (dfxtp_1): 0.6990 ns1 dfxtp_1u2/B → u2/Y (nand2_1): 0.0921 ns2clock 0.3654 nssetup −0.3416 nsslack −0.1328 ns · violatedarrival 1.1566required 1.0238The same setup path at the slow corner00.51time (ns)launch clk ↑capture clk ↑Data arrivesRequired byclock 0.3654 nsffl/CLK → ffl/Q (dfxtp_1): 0.6990 ns1 dfxtp_1u2/B → u2/Y (nand2_1): 0.0921 ns2clock 0.3654 nssetup −0.3416 nsslack −0.1328 ns · violatedarrival 1.1566required 1.0238
  1. A slower clock

    The clock reaches ffl after 0.3654 ns, against 0.2071 ns at typical.

  2. A slower path

    Clock-to-Q and two gates: arrival 1.1566 ns, against 0.5768 ns.

  3. Violated

    The flop's setup time grows too, to 0.3416 ns. Slack -0.1328 ns.

Read the path as a table

Launch: clk rise edge at 0.0000 ns, clock latency 0.3654 ns. Capture: clk rise edge at 1.0000 ns, latency 0.3654 ns, library setup time −0.3416 ns.

Arrival 1.1566 ns, required 1.0238 ns, slack −0.1328 ns (violated).

CellArcThroughEdgeDelay (ns)Time (ns)Slew (ns)
1ffl/CLK → ffl/Qdfxtp_1rise0.69901.06440.1122
ffl/Q → u2/Bwire q1rise0.00001.06440.1122
2u2/B → u2/Ynand2_1fall0.09211.15660.0374
u2/Y → ffc/Dwire n2fall0.00001.15660.0374
The report
Startpoint: ffl (rising edge-triggered flip-flop clocked by clk)
Endpoint: ffc (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max

Fanout       Cap      Slew     Delay      Time   Description
-------------------------------------------------------------------------------------
                              0.0000    0.0000   clock clk (rise edge)
                              0.0000    0.0000   clock source latency
     1    0.0021    0.1000    0.0000    0.0000 ^ clk (in)
                                                 clk (net)
                    0.1000    0.0000    0.0000 ^ root/A (sky130_fd_sc_hd__clkbuf_4)
     2    0.0040    0.0573    0.2271    0.2271 ^ root/X (sky130_fd_sc_hd__clkbuf_4)
                                                 cr (net)
                    0.0573    0.0000    0.2271 ^ bl/A (sky130_fd_sc_hd__clkbuf_1)
     1    0.0016    0.0684    0.1383    0.3654 ^ bl/X (sky130_fd_sc_hd__clkbuf_1)
                                                 cl (net)
                    0.0684    0.0000    0.3654 ^ ffl/CLK (sky130_fd_sc_hd__dfxtp_1)
     2    0.0044    0.1122    0.6990    1.0644 ^ ffl/Q (sky130_fd_sc_hd__dfxtp_1)
                                                 q1 (net)
                    0.1122    0.0000    1.0644 ^ u2/B (sky130_fd_sc_hd__nand2_1)
     1    0.0015    0.0374    0.0921    1.1566 v u2/Y (sky130_fd_sc_hd__nand2_1)
                                                 n2 (net)
                    0.0374    0.0000    1.1566 v ffc/D (sky130_fd_sc_hd__dfxtp_1)
                                        1.1566   data arrival time

                              1.0000    1.0000   clock clk (rise edge)
                              0.0000    1.0000   clock source latency
     1    0.0021    0.1000    0.0000    1.0000 ^ clk (in)
                                                 clk (net)
                    0.1000    0.0000    1.0000 ^ root/A (sky130_fd_sc_hd__clkbuf_4)
     2    0.0040    0.0573    0.2271    1.2271 ^ root/X (sky130_fd_sc_hd__clkbuf_4)
                                                 cr (net)
                    0.0573    0.0000    1.2271 ^ bc/A (sky130_fd_sc_hd__clkbuf_1)
     1    0.0016    0.0684    0.1383    1.3654 ^ bc/X (sky130_fd_sc_hd__clkbuf_1)
                                                 cc (net)
                    0.0684    0.0000    1.3654 ^ ffc/CLK (sky130_fd_sc_hd__dfxtp_1)
                              0.0000    1.3654   clock reconvergence pessimism
                             -0.3416    1.0238   library setup time
                                        1.0238   data required time
-------------------------------------------------------------------------------------
                                        1.0238   data required time
                                       -1.1566   data arrival time
-------------------------------------------------------------------------------------
                                       -0.1328   slack (VIOLATED)

The same setup path at the slow, cold corner fails by 0.1328 ns. At the typical corner it passes.

Self-Check

Tick each key point you covered in your answer.

What Interviewers Listen For (Junior)

A good junior answer defines a corner and a mode. It says setup is usually worst at the slow corner and hold at the fast one.

Cross-Questions

Where the interviewer goes next. Open a node to practise that follow-up.

WhyWhat IfProve ItBreak ItCompareScale It

  1. Corners and Multi-Mode Multi-Corner Analysis
  2. WhyWhy the Cold Corner Can Be SlowerL2 Mid-Level

    Why can a cold corner be slower than a hot one?

    Reveal the Model Answer

    Temperature moves two things in opposite directions. Carrier mobility falls as it gets hotter, which slows cells. The threshold voltage also falls, which speeds them up. At low supply voltage, where the overdrive above threshold is small, the threshold effect can win, so cells are slower when cold. That is why the corner list includes both temperatures and the result is measured per library.

    Timing pathSetup at ss_100C_1v60

    ffl → ffcsetup check, latest arrival2 cells

    • Clock latency
    • Cell delay
    • Setup time
    Setup at ss_100C_1v6000.20.40.60.811.21.4time (ns)launch clk ↑capture clk ↑Data arrivesRequired byclock 0.3593 nsclock 0.3593ffl/CLK → ffl/Q (dfxtp_1): 0.6394 ns1 dfxtp_1u2/B → u2/Y (nand2_1): 0.1006 ns2clock 0.3593 nssetup −0.2659 nsslack −0.0059 ns · violatedarrival 1.0993required 1.0934Setup at ss_100C_1v6000.51time (ns)launch clk ↑capture clk ↑Data arrivesRequired byclock 0.3593 nsffl/CLK → ffl/Q (dfxtp_1): 0.6394 ns1 dfxtp_1u2/B → u2/Y (nand2_1): 0.1006 ns2clock 0.3593 nssetup −0.2659 nsslack −0.0059 ns · violatedarrival 1.0993required 1.0934
    Read the path as a table

    Launch: clk rise edge at 0.0000 ns, clock latency 0.3593 ns. Capture: clk rise edge at 1.0000 ns, latency 0.3593 ns, library setup time −0.2659 ns.

    Arrival 1.0993 ns, required 1.0934 ns, slack −0.0059 ns (violated).

    CellArcThroughEdgeDelay (ns)Time (ns)Slew (ns)
    1ffl/CLK → ffl/Qdfxtp_1rise0.63940.99870.0971
    ffl/Q → u2/Bwire q1rise0.00000.99870.0971
    2u2/B → u2/Ynand2_1fall0.10061.09930.0535
    u2/Y → ffc/Dwire n2fall0.00001.09930.0535
    The report
    Startpoint: ffl (rising edge-triggered flip-flop clocked by clk)
    Endpoint: ffc (rising edge-triggered flip-flop clocked by clk)
    Path Group: clk
    Path Type: max
    
    Fanout       Cap      Slew     Delay      Time   Description
    -------------------------------------------------------------------------------------
                                  0.0000    0.0000   clock clk (rise edge)
                                  0.0000    0.0000   clock source latency
         1    0.0022    0.1000    0.0000    0.0000 ^ clk (in)
                                                     clk (net)
                        0.1000    0.0000    0.0000 ^ root/A (sky130_fd_sc_hd__clkbuf_4)
         2    0.0042    0.0568    0.2295    0.2295 ^ root/X (sky130_fd_sc_hd__clkbuf_4)
                                                     cr (net)
                        0.0568    0.0000    0.2295 ^ bl/A (sky130_fd_sc_hd__clkbuf_1)
         1    0.0017    0.0560    0.1298    0.3593 ^ bl/X (sky130_fd_sc_hd__clkbuf_1)
                                                     cl (net)
                        0.0560    0.0000    0.3593 ^ ffl/CLK (sky130_fd_sc_hd__dfxtp_1)
         2    0.0047    0.0971    0.6394    0.9987 ^ ffl/Q (sky130_fd_sc_hd__dfxtp_1)
                                                     q1 (net)
                        0.0971    0.0000    0.9987 ^ u2/B (sky130_fd_sc_hd__nand2_1)
         1    0.0016    0.0535    0.1006    1.0993 v u2/Y (sky130_fd_sc_hd__nand2_1)
                                                     n2 (net)
                        0.0535    0.0000    1.0993 v ffc/D (sky130_fd_sc_hd__dfxtp_1)
                                            1.0993   data arrival time
    
                                  1.0000    1.0000   clock clk (rise edge)
                                  0.0000    1.0000   clock source latency
         1    0.0022    0.1000    0.0000    1.0000 ^ clk (in)
                                                     clk (net)
                        0.1000    0.0000    1.0000 ^ root/A (sky130_fd_sc_hd__clkbuf_4)
         2    0.0042    0.0568    0.2295    1.2295 ^ root/X (sky130_fd_sc_hd__clkbuf_4)
                                                     cr (net)
                        0.0568    0.0000    1.2295 ^ bc/A (sky130_fd_sc_hd__clkbuf_1)
         1    0.0017    0.0560    0.1298    1.3593 ^ bc/X (sky130_fd_sc_hd__clkbuf_1)
                                                     cc (net)
                        0.0560    0.0000    1.3593 ^ ffc/CLK (sky130_fd_sc_hd__dfxtp_1)
                                  0.0000    1.3593   clock reconvergence pessimism
                                 -0.2659    1.0934   library setup time
                                            1.0934   data required time
    -------------------------------------------------------------------------------------
                                            1.0934   data required time
                                           -1.0993   data arrival time
    -------------------------------------------------------------------------------------
                                           -0.0059   slack (VIOLATED)

    The same path at the slow, hot corner: -0.0059 ns. That is better than the cold corner's -0.1328 ns.

    Self-Check

    Tick each key point you covered in your answer.

  3. Prove ItSolve L2.9.1: A Checker for Timing and Electrical LimitsSimulator-graded

    Show it, don't just say it: this Silicon Lab problem is graded by the simulator.

    Open Problem L2.9.1

  4. CompareWhich Corner Is Worst for Setup and for HoldL1 JuniorL2 Mid-Level

    Compare the corners at which setup and hold are usually worst, and say why you check both everywhere.

    Reveal the Model Answer

    Setup is usually worst where cells are slowest: a slow process at low voltage. Hold is usually worst where they are fastest: a fast process at high voltage. In the lesson's small clock tree the fast cold corner had the smallest hold slack, 0.2397 ns, and the slow corners failed setup. Skew and wire delays do not scale like cell delays, so sign-off still runs both checks at every corner.

    Timing pathHold at ff_n40C_1v95

    ffl → ffchold check, earliest arrival2 cells

    • Clock latency
    • Cell delay
    • Hold time
    Hold at ff_n40C_1v9500.050.10.150.20.250.30.35time (ns)launch and capture clk ↑Data arrivesRequired afterclock 0.1420 nsclock 0.1420ffl/CLK → ffl/Q (dfxtp_1): 0.1879 ns1 dfxtp_1u2/B → u2/Y (nand2_1): 0.0351 ns2clock 0.1420 nshold −0.0167 nsslack +0.2397 ns · metarrival 0.3650required 0.1253Hold at ff_n40C_1v9500.10.20.3time (ns)launch and capture clk ↑Data arrivesRequired afterclock 0.1420 nsclock 0.1420ffl/CLK → ffl/Q (dfxtp_1): 0.1879 ns1 dfxtp_1u2/B → u2/Y (nand2_1): 0.0351 ns2clock 0.1420 nshold −0.0167 nsslack +0.2397 ns · metarrival 0.3650required 0.1253
    Read the path as a table

    Launch: clk rise edge at 0.0000 ns, clock latency 0.1420 ns. Capture: clk rise edge at 0.0000 ns, latency 0.1420 ns, library hold time −0.0167 ns.

    Arrival 0.3650 ns, required 0.1253 ns, slack 0.2397 ns (met).

    CellArcThroughEdgeDelay (ns)Time (ns)Slew (ns)
    1ffl/CLK → ffl/Qdfxtp_1fall0.18790.33000.0247
    ffl/Q → u2/Bwire q1fall0.00000.33000.0247
    2u2/B → u2/Ynand2_1rise0.03510.36500.0210
    u2/Y → ffc/Dwire n2rise0.00000.36500.0210
    The report
    Startpoint: ffl (rising edge-triggered flip-flop clocked by clk)
    Endpoint: ffc (rising edge-triggered flip-flop clocked by clk)
    Path Group: clk
    Path Type: min
    
    Fanout       Cap      Slew     Delay      Time   Description
    -------------------------------------------------------------------------------------
                                  0.0000    0.0000   clock clk (rise edge)
                                  0.0000    0.0000   clock source latency
         1    0.0023    0.1000    0.0000    0.0000 ^ clk (in)
                                                     clk (net)
                        0.1000    0.0000    0.0000 ^ root/A (sky130_fd_sc_hd__clkbuf_4)
         2    0.0045    0.0251    0.0966    0.0966 ^ root/X (sky130_fd_sc_hd__clkbuf_4)
                                                     cr (net)
                        0.0251    0.0000    0.0966 ^ bl/A (sky130_fd_sc_hd__clkbuf_1)
         1    0.0019    0.0260    0.0454    0.1420 ^ bl/X (sky130_fd_sc_hd__clkbuf_1)
                                                     cl (net)
                        0.0260    0.0000    0.1420 ^ ffl/CLK (sky130_fd_sc_hd__dfxtp_1)
         2    0.0044    0.0247    0.1879    0.3300 v ffl/Q (sky130_fd_sc_hd__dfxtp_1)
                                                     q1 (net)
                        0.0247    0.0000    0.3300 v u2/B (sky130_fd_sc_hd__nand2_1)
         1    0.0017    0.0210    0.0351    0.3650 ^ u2/Y (sky130_fd_sc_hd__nand2_1)
                                                     n2 (net)
                        0.0210    0.0000    0.3650 ^ ffc/D (sky130_fd_sc_hd__dfxtp_1)
                                            0.3650   data arrival time
    
                                  0.0000    0.0000   clock clk (rise edge)
                                  0.0000    0.0000   clock source latency
         1    0.0023    0.1000    0.0000    0.0000 ^ clk (in)
                                                     clk (net)
                        0.1000    0.0000    0.0000 ^ root/A (sky130_fd_sc_hd__clkbuf_4)
         2    0.0045    0.0251    0.0966    0.0966 ^ root/X (sky130_fd_sc_hd__clkbuf_4)
                                                     cr (net)
                        0.0251    0.0000    0.0966 ^ bc/A (sky130_fd_sc_hd__clkbuf_1)
         1    0.0019    0.0260    0.0454    0.1420 ^ bc/X (sky130_fd_sc_hd__clkbuf_1)
                                                     cc (net)
                        0.0260    0.0000    0.1420 ^ ffc/CLK (sky130_fd_sc_hd__dfxtp_1)
                                  0.0000    0.1420   clock reconvergence pessimism
                                 -0.0167    0.1253   library hold time
                                            0.1253   data required time
    -------------------------------------------------------------------------------------
                                            0.1253   data required time
                                           -0.3650   data arrival time
    -------------------------------------------------------------------------------------
                                            0.2397   slack (MET)

    Hold at the fast, cold corner: 0.2397 ns, the smallest hold slack of the three corners.

    create_clock -name clk -period 1.0 [get_ports clk]
    set_propagated_clock [all_clocks]
    set_input_transition 0.1 [get_ports clk]
    

    Prints: 0.6973 slack (MET) 0.2397 slack (MET)

    Self-Check

    Tick each key point you covered in your answer.

  5. Scale ItPruning the Mode and Corner MatrixL3 SeniorL4 Staff

    Your chip has five modes and twelve corners. How do you keep sign-off affordable without missing the worst case?

    Reveal the Model Answer

    Start from the full matrix, and drop a view only with evidence that another view always dominates it. Get that evidence by running everything once on an early netlist, for example. Keep every view that is worst for some endpoint group in any check. Optimise on a small set of dominant views, but run the full set at sign-off and after every late change.

    Self-Check

    Tick each key point you covered in your answer.

  6. What IfHold Repair Across Four CornersL2 Mid-LevelL3 Senior

    Your hold repair passes at the fast corner but fails setup at the slow corner. How do you close both?

    Reveal the Model Answer

    Repair against all required corners at once. Then the tool sees the setup cost at the slow corner when it inserts delay at the fast one. Prefer delay on paths with setup slack to spare at every corner. Fix shared skew in the clock tree before adding cells. A repair that must break setup to fix hold shows the constraints or the clock tree need work, not more cells.

    Self-Check

    Tick each key point you covered in your answer.

  7. Prove ItSolve L7.1.1: Make the Hold Repair Survive Four CornersSimulator-graded

    Show it, don't just say it: this Silicon Lab problem is graded by the simulator.

    Open Problem L7.1.1

  8. Break ItOne Delay Cell for Forty Hold FixesL2 Mid-LevelL3 Senior

    Break it: the repair fixes forty hold violations with one delay cell on a shared net. What can go wrong?

    Reveal the Model Answer

    The shared net also feeds long paths, and they slow down by the same delay. With tight setup at the slow corner, those paths now fail. Put the delay near each failing D pin instead, where only the short path passes. Then check setup at every corner again.

    Self-Check

    Tick each key point you covered in your answer.

    Half-Truth

    "One cell for forty fixes is always the best repair."

    It is the cheapest in area, but its delay lands on every path through that net. Paths with no setup margin then fail.

    Source Lesson L5.5 key points

What People Get Wrong

Common wrong answers and why they fail. Run It shows the wrong belief failing on a real simulator.

Misconception

"The slow, hot corner is always the setup worst case."

At low voltage, cells can get slower when cold. In the lesson's clock tree the hot slow corner fails setup by 0.0059 ns and the cold slow corner by 0.1328 ns.

Run It

The lesson L2.9 clock tree at the slow, hot corner (100 °C, 1.60 V).

create_clock -name clk -period 1.0 [get_ports clk]
set_propagated_clock [all_clocks]
set_input_transition 0.1 [get_ports clk]

Prints: -0.0059 slack (VIOLATED) 0.7329 slack (MET)

See the Fix
create_clock -name clk -period 1.0 [get_ports clk]
set_propagated_clock [all_clocks]
set_input_transition 0.1 [get_ports clk]

Prints: -0.1328 slack (VIOLATED) 0.7501 slack (MET)

Half-Truth

"One typical corner with a margin is enough for sign-off."

A margin cannot capture hold at the fast corner or the temperature behaviour of the process. Each check must be met where it is worst.

Source ASIC Point lesson L7.1

Learn It, Then Prove It