Interview Question · Debug
Fixing Setup Violations
The Question
The interviewer asks
The stage summary below shows a block that met timing as a netlist and fails after global placement. What changed, and what would you try, in order?
MAC, 4.6 ns clock, 40 % utilization (lesson L4.5, measured)
stage WNS (ns)
netlist, no wires 0.3041
global placement, wirelength only -0.1371 TNS -0.3753
legalized -0.2361You have two and a half minutes. Speak or type, then press Get Feedback under your answer. No credits needed.
Speech-to-text runs in your browser. Chrome and Edge may send audio to their own speech service.
You can edit your answer before you send it. Feedback uses AI and checks your answer only against our written answer. No credits are used and your answer is not saved.
Reveal the Model Answer
Placement added wire capacitance, which the driving cells now charge, so the same cells got slower. Try the cheap moves first: timing-driven placement, resizing the drivers and swapping to faster input pins. Also buffer long or heavily loaded nets, and clone high-fanout drivers. In lesson L4.5 timing-driven placement alone turned -0.1371 ns into +0.2145 ns. A path that no tool can fix goes back to the RTL for retiming or pipelining.
_809_ → _827_setup check, latest arrival16 cells
- Clock latency
- Cell delay
- Wire delay
- Setup time
- The shared cells take longer in total
The cells drive wire now as well as pins. Over the 16 cells this path shares with the netlist's worst path, the delay grew by 0.4353 ns.
- Violated
Slack -0.1371 ns, against 0.3041 ns before placement.
Read the path as a table
Launch: clk rise edge at 0.0000 ns, clock latency 0.0000 ns (ideal). Capture: clk rise edge at 4.6000 ns, latency 0.0000 ns, library setup time −0.0823 ns.
Arrival 4.6549 ns, required 4.5177 ns, slack −0.1371 ns (violated).
| Cell | Arc | Through | Edge | Delay (ns) | Time (ns) | Slew (ns) |
|---|---|---|---|---|---|---|
| 1 | _809_/CLK → _809_/Q | dfrtp_1 | fall | 0.3844 | 0.3844 | 0.0797 |
_809_/Q → _607_/A | wire acc[1] | fall | 0.0002 | 0.3846 | 0.0797 | |
| 2 | _607_/A → _607_/Y | xnor2_1 | rise | 0.2200 | 0.6046 | 0.1940 |
_607_/Y → _619_/A2 | wire _080_ | rise | 0.0001 | 0.6047 | 0.1940 | |
| 3 | _619_/A2 → _619_/Y | o21ai_0 | fall | 0.1720 | 0.7767 | 0.1428 |
_619_/Y → _641_/C | wire _081_ | fall | 0.0002 | 0.7769 | 0.1428 | |
| 4 | _641_/C → _641_/X | maj3_1 | fall | 0.4277 | 1.2046 | 0.1041 |
_641_/X → _663_/C | wire _083_ | fall | 0.0003 | 1.2049 | 0.1041 | |
| 5 | _663_/C → _663_/X | maj3_1 | fall | 0.4101 | 1.6150 | 0.1002 |
_663_/X → _685_/C | wire _085_ | fall | 0.0002 | 1.6153 | 0.1002 | |
| 6 | _685_/C → _685_/X | maj3_1 | fall | 0.4107 | 2.0260 | 0.1017 |
_685_/X → _707_/C | wire _087_ | fall | 0.0003 | 2.0262 | 0.1017 | |
| 7 | _707_/C → _707_/X | maj3_1 | fall | 0.4222 | 2.4485 | 0.1119 |
_707_/X → _727_/A1 | wire _089_ | fall | 0.0003 | 2.4488 | 0.1119 | |
| 8 | _727_/A1 → _727_/Y | a211oi_1 | rise | 0.3093 | 2.7581 | 0.2965 |
_727_/Y → _729_/A3 | wire _093_ | rise | 0.0002 | 2.7582 | 0.2965 | |
| 9 | _729_/A3 → _729_/Y | o31ai_1 | fall | 0.1727 | 2.9310 | 0.1170 |
_729_/Y → _731_/A2 | wire _095_ | fall | 0.0004 | 2.9313 | 0.1170 | |
| 10 | _731_/A2 → _731_/X | o211a_1 | fall | 0.2483 | 3.1796 | 0.0557 |
_731_/X → _734_/A3 | wire _097_ | fall | 0.0002 | 3.1798 | 0.0557 | |
| 11 | _734_/A3 → _734_/Y | o311ai_0 | rise | 0.5155 | 3.6953 | 0.5886 |
_734_/Y → _736_/A3 | wire _100_ | rise | 0.0003 | 3.6956 | 0.5886 | |
| 12 | _736_/A3 → _736_/Y | a31oi_1 | fall | 0.2184 | 3.9140 | 0.1495 |
_736_/Y → _737_/A2 | wire _101_ | fall | 0.0002 | 3.9141 | 0.1495 | |
| 13 | _737_/A2 → _737_/Y | a21oi_1 | rise | 0.3057 | 4.2198 | 0.2757 |
_737_/Y → _740_/A2 | wire _102_ | rise | 0.0003 | 4.2201 | 0.2757 | |
| 14 | _740_/A2 → _740_/Y | a211oi_1 | fall | 0.1879 | 4.4080 | 0.1324 |
_740_/Y → _742_/C | wire _105_ | fall | 0.0003 | 4.4083 | 0.1324 | |
| 15 | _742_/C → _742_/Y | nand3_1 | rise | 0.1316 | 4.5399 | 0.0857 |
_742_/Y → _748_/B | wire _107_ | rise | 0.0001 | 4.5400 | 0.0857 | |
| 16 | _748_/B → _748_/Y | xnor2_1 | rise | 0.1148 | 4.6548 | 0.1121 |
_748_/Y → _827_/D | wire _048_ | rise | 0.0001 | 4.6549 | 0.1121 |
The report
Startpoint: _809_ (rising edge-triggered flip-flop clocked by clk)
Endpoint: _827_ (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Fanout Cap Slew Delay Time Description
-------------------------------------------------------------------------------------
0.0000 0.0000 0.0000 clock clk (rise edge)
0.0000 0.0000 clock network delay (ideal)
0.0000 0.0000 0.0000 ^ _809_/CLK (sky130_fd_sc_hd__dfrtp_1)
4 0.0122 0.0797 0.3844 0.3844 v _809_/Q (sky130_fd_sc_hd__dfrtp_1)
acc[1] (net)
0.0797 0.0002 0.3846 v _607_/A (sky130_fd_sc_hd__xnor2_1)
2 0.0069 0.1940 0.2200 0.6046 ^ _607_/Y (sky130_fd_sc_hd__xnor2_1)
_080_ (net)
0.1940 0.0001 0.6047 ^ _619_/A2 (sky130_fd_sc_hd__o21ai_0)
2 0.0098 0.1428 0.1720 0.7767 v _619_/Y (sky130_fd_sc_hd__o21ai_0)
_081_ (net)
0.1428 0.0002 0.7769 v _641_/C (sky130_fd_sc_hd__maj3_1)
2 0.0105 0.1041 0.4277 1.2046 v _641_/X (sky130_fd_sc_hd__maj3_1)
_083_ (net)
0.1041 0.0003 1.2049 v _663_/C (sky130_fd_sc_hd__maj3_1)
2 0.0096 0.1002 0.4101 1.6150 v _663_/X (sky130_fd_sc_hd__maj3_1)
_085_ (net)
0.1002 0.0002 1.6153 v _685_/C (sky130_fd_sc_hd__maj3_1)
2 0.0100 0.1017 0.4107 2.0260 v _685_/X (sky130_fd_sc_hd__maj3_1)
_087_ (net)
0.1017 0.0003 2.0262 v _707_/C (sky130_fd_sc_hd__maj3_1)
3 0.0122 0.1119 0.4222 2.4485 v _707_/X (sky130_fd_sc_hd__maj3_1)
_089_ (net)
0.1119 0.0003 2.4488 v _727_/A1 (sky130_fd_sc_hd__a211oi_1)
2 0.0071 0.2965 0.3093 2.7581 ^ _727_/Y (sky130_fd_sc_hd__a211oi_1)
_093_ (net)
0.2965 0.0002 2.7582 ^ _729_/A3 (sky130_fd_sc_hd__o31ai_1)
3 0.0124 0.1170 0.1727 2.9310 v _729_/Y (sky130_fd_sc_hd__o31ai_1)
_095_ (net)
0.1170 0.0004 2.9313 v _731_/A2 (sky130_fd_sc_hd__o211a_1)
2 0.0066 0.0557 0.2483 3.1796 v _731_/X (sky130_fd_sc_hd__o211a_1)
_097_ (net)
0.0557 0.0002 3.1798 v _734_/A3 (sky130_fd_sc_hd__o311ai_0)
3 0.0100 0.5886 0.5155 3.6953 ^ _734_/Y (sky130_fd_sc_hd__o311ai_0)
_100_ (net)
0.5886 0.0003 3.6956 ^ _736_/A3 (sky130_fd_sc_hd__a31oi_1)
2 0.0085 0.1495 0.2184 3.9140 v _736_/Y (sky130_fd_sc_hd__a31oi_1)
_101_ (net)
0.1495 0.0002 3.9141 v _737_/A2 (sky130_fd_sc_hd__a21oi_1)
3 0.0120 0.2757 0.3057 4.2198 ^ _737_/Y (sky130_fd_sc_hd__a21oi_1)
_102_ (net)
0.2757 0.0003 4.2201 ^ _740_/A2 (sky130_fd_sc_hd__a211oi_1)
4 0.0132 0.1324 0.1879 4.4080 v _740_/Y (sky130_fd_sc_hd__a211oi_1)
_105_ (net)
0.1324 0.0003 4.4083 v _742_/C (sky130_fd_sc_hd__nand3_1)
1 0.0054 0.0857 0.1316 4.5399 ^ _742_/Y (sky130_fd_sc_hd__nand3_1)
_107_ (net)
0.0857 0.0001 4.5400 ^ _748_/B (sky130_fd_sc_hd__xnor2_1)
1 0.0026 0.1121 0.1148 4.6548 ^ _748_/Y (sky130_fd_sc_hd__xnor2_1)
_048_ (net)
0.1121 0.0001 4.6549 ^ _827_/D (sky130_fd_sc_hd__dfrtp_1)
4.6549 data arrival time
0.0000 4.6000 4.6000 clock clk (rise edge)
0.0000 4.6000 clock network delay (ideal)
0.0000 4.6000 clock reconvergence pessimism
4.6000 ^ _827_/CLK (sky130_fd_sc_hd__dfrtp_1)
-0.0823 4.5177 library setup time
4.5177 data required time
-------------------------------------------------------------------------------------
4.5177 data required time
-4.6549 data arrival time
-------------------------------------------------------------------------------------
-0.1371 slack (VIOLATED)The worst path of lesson L4.5's MAC after global placement. The new wire delays push it to -0.1371 ns.
Self-Check
Tick each key point you covered in your answer.
What Interviewers Listen For (Junior)
A good junior answer explains that the load of the new wires slowed the cells. It lists cell sizing and buffering as fixes.
What Interviewers Listen For (Senior)
A good senior answer orders the fixes by cost and risk, and first checks that the constraint is real. It watches hold and area after every change. It knows when to send a path back to RTL.
Cross-Questions
Where the interviewer goes next. Open a node to practise that follow-up.
WhyWhat IfProve ItBreak ItCompare
- Fixing Setup Violations
-
WhyWhy Wire Capacitance Hurts More Than Wire ResistanceL1 JuniorL2 Mid-Level
On short nets, why does the wire's capacitance cost more delay than its resistance?
2:30You have two and a half minutes. Speak or type, then press Get Feedback under your answer. No credits needed.
Speech-to-text runs in your browser. Chrome and Edge may send audio to their own speech service.
You can edit your answer before you send it. Feedback uses AI and checks your answer only against our written answer. No credits are used and your answer is not saved.
Reveal the Model Answer
The driving cell has to charge the wire's capacitance through its own output resistance, which is far larger than the wire's resistance. In lesson L4.5, 100 µm of met1 adds about 17 fF and 121 Ω, and an
inv_1driving it slows from 0.044 to 0.143 ns. The wire's own RC delay grows with length squared and only dominates on long nets.Measured sweepinv_1 Falling Delay Against Load, One Curve per Input SlewEvery point is a delay OpenSTA reported. The load axis is logarithmic, like the table's own index. Whole plot- input slew 0.01 ns
- input slew 0.0388 ns
- input slew 0.28 ns
- input slew 1.5 ns
- Load 2.254 fFinput slew 0.01 ns = 20.7 ps · input slew 0.0388 ns = 30.3 ps · input slew 0.28 ns = 65.3 ps · input slew 1.5 ns = 83.7 ps
The worked lookup: 2.254 fF at a 0.0388 ns slew gives 0.0303 ns.
- Load 100 fFinput slew 0.01 ns = 346.4 ps · input slew 0.0388 ns = 357.2 ps · input slew 0.28 ns = 451.5 ps · input slew 1.5 ns = 853.2 ps
At 100 fF the fast input gives 0.3464 ns and the 1.5 ns input gives 0.8532 ns. The 1.5 ns input is slower than the 0.01 ns one at every load.
- Load 250 fFinput slew 0.01 ns = 845.4 ps · input slew 0.0388 ns = 855.8 ps · input slew 0.28 ns = 952.3 ps · input slew 1.5 ns = 1.496 ns
At 0.25 pF the load is past the table's last column, 0.1813 pF. The tool extrapolates the last two columns in a straight line: 0.8558 ns.
Read the plot as a table
Load input slew 0.01 ns input slew 0.0388 ns input slew 0.28 ns input slew 1.5 ns 1 fF 16.2 ps 24.9 ps 50.1 ps 48.1 ps 2.254 fF 20.7 ps 30.3 ps 65.3 ps 83.7 ps 10 fF 47.1 ps 57.7 ps 126.9 ps 233.4 ps 100 fF 346.4 ps 357.2 ps 451.5 ps 853.2 ps 250 fF 845.4 ps 855.8 ps 952.3 ps 1.496 ns Measured
inv_1delays: more load capacitance means more delay, at every input slew.Self-Check
Tick each key point you covered in your answer.
-
CompareTiming-Driven Placement vs Post-Placement RepairL2 Mid-Level
Compare timing-driven placement with running
repair_timing -setupon a placed design.2:30You have two and a half minutes. Speak or type, then press Get Feedback under your answer. No credits needed.
Speech-to-text runs in your browser. Chrome and Edge may send audio to their own speech service.
You can edit your answer before you send it. Feedback uses AI and checks your answer only against our written answer. No credits are used and your answer is not saved.
Reveal the Model Answer
Timing-driven placement re-weights the nets on critical paths while cells are still moving, so the fix costs little area.
repair_timingworks on fixed positions by resizing, buffering, swapping pins and cloning, which adds cells and needs another legalization. In lesson L4.5 the repair alone reached +0.056 ns while timing-driven placement reached +0.2145 ns on the same block.Self-Check
Tick each key point you covered in your answer.
-
Prove ItSolve L4.5.1: Close Placement Timing Within AreaSimulator-graded
Show it, don't just say it: this Silicon Lab problem is graded by the simulator.
-
Break ItDesign-Rule Violations Before TimingL1 JuniorL2 Mid-Level
Your timing looks fine, but 123 nets break max transition. Why does that matter, and what do you do first?
2:30You have two and a half minutes. Speak or type, then press Get Feedback under your answer. No credits needed.
Speech-to-text runs in your browser. Chrome and Edge may send audio to their own speech service.
You can edit your answer before you send it. Feedback uses AI and checks your answer only against our written answer. No credits are used and your answer is not saved.
Reveal the Model Answer
Past the library's max transition or max capacitance, the delay tables are extrapolated. So the slack is a number the library never measured. Repair the design rules first, with buffer trees and stronger drivers, then trust the timing. In lesson L4.4
repair_designadded six buffers and took 123 slew violations to zero.One Large Net Split into a Buffer TreeArrows are signal flow. Each buffer drives a share of the loads, so no output sees the whole load. Illustrative sequence- The port sees two pins
The weak driver now loads only two buffer inputs and the wire to them.
- Each buffer sees its group
Each buffer sits near its flops, so its wire is short and its load is within its limit.
Read the diagram as text
- rst_n port: Driven by a weak cell
- Buffer: Near the first group
- Buffer: Near the second group
- Flops, group 1: RESET_B pins
- Flops, group 2: RESET_B pins
- rst_n port → Buffer
- rst_n port → Buffer
- Buffer → Flops, group 1
- Buffer → Flops, group 2
The shape only; repair_design chooses the number of buffers, their cells and their places.
Self-Check
Tick each key point you covered in your answer.
- The port sees two pins
-
What IfWhen a Path Goes Back to RTLL3 Senior
Asked if no physical fix closes the path
A path still fails by 15 % of the period after every physical fix. What do you do?
2:30You have two and a half minutes. Speak or type, then press Get Feedback under your answer. No credits needed.
Speech-to-text runs in your browser. Chrome and Edge may send audio to their own speech service.
You can edit your answer before you send it. Feedback uses AI and checks your answer only against our written answer. No credits are used and your answer is not saved.
Reveal the Model Answer
Stop spending flow iterations on it. Take it to the RTL owner with the evidence: the path, its logic depth and the best slack each fix reached. The structural options are pipelining, retiming, or restructuring the logic, each with a cost in latency or verification. Agree on it early, because an RTL change late in the schedule restarts synthesis, equivalence and the flow.
Self-Check
Tick each key point you covered in your answer.
-
ComparePipelining Versus Retiming as the RTL FixL3 Senior
Compare pipelining with retiming as the fix. What does each one cost the verification team?
2:30You have two and a half minutes. Speak or type, then press Get Feedback under your answer. No credits needed.
Speech-to-text runs in your browser. Chrome and Edge may send audio to their own speech service.
You can edit your answer before you send it. Feedback uses AI and checks your answer only against our written answer. No credits are used and your answer is not saved.
Reveal the Model Answer
Pipelining adds a register stage, so latency grows by a cycle. Every interface, model and test that counts cycles must change. Retiming moves existing registers and keeps the latency at the ports. But the internal flops no longer match the RTL, so equivalence needs a sequential check.
Self-Check
Tick each key point you covered in your answer.
Half-Truth
"Retiming is free; the tool just does it."
It changes which flops exist. Combinational equivalence cannot map them, and debug sees different internal state.
What People Get Wrong
Common wrong answers and why they fail.
Misconception
"Upsize every cell on the critical path."
A bigger cell has a bigger input capacitance, which slows the cell that drives it. In lesson L2.2 upsizing one inverter from inv_1 to inv_4 raised the path arrival from 0.3713 to 0.4113 ns.
Source ASIC Point lesson L2.2 (measured, OpenSTA 3.1.0)
Wrong Altitude
Starts by asking for a higher-performance library or a lower utilization.
Those are expensive, block-wide answers. Check the constraint, then the local fixes; escalate only when they run out.