Crosstalk and signal integrity
Distinguish a noise glitch from a delay change, and use measured coupling sensitivity without mistaking it for full signal-integrity analysis.
- Lesson
- L6.5
- Time
- 25 min
- Runs on
- OpenROAD
- Check
- 5 questions
The extracted MAC meets its 5 ns clock with 0.1207 ns slack when coupling is folded into ground capacitance at factor 1. Doubling that contribution changes slack to -0.1311 ns. The quiet-neighbor assumption can therefore hide a setup risk in this sensitivity experiment.
| Coupling factor | Idealized interpretation | Setup slack | Hold slack |
|---|---|---|---|
| 0 | Matched same-direction edges | 0.3792 ns | 0.4527 ns |
| 1 | Quiet neighbor | 0.1207 ns | 0.4549 ns |
| 2 | Matched opposite-direction edges | -0.1311 ns | 0.4572 ns |
One detailed route and extraction model, re-timed with three effective coupling loads. These are hypothetical sensitivities, not an aggressor-window analysis.
A quiet victim can still move
The neighboring wire that changes voltage is the aggressor, and the wire receiving its disturbance is the victim. Their coupling capacitor transfers charge whenever the voltage difference changes, even when the victim’s own logic is holding a constant value.
- Weak hold: 10 kΩ
- Strong hold: 1 kΩ
Read the plot as a table
| Time | Weak hold: 10 kΩ | Strong hold: 1 kΩ |
|---|---|---|
| 0 s | 0 V | 0 V |
| 100 ps | 0 V | 0 V |
| 200 ps | 0 V | 0 V |
| 300 ps | 313.2 mV | 905.9 µV |
| 400 ps | 160.8 mV | 1.152 µV |
| 500 ps | 82.57 mV | 1.465 nV |
| 600 ps | 42.39 mV | 1.867 pV |
| 700 ps | 21.77 mV | 8.993 fV |
| 800 ps | 11.17 mV | 8.993 fV |
ngspice linear RC simulation: peaks 0.590 V and 0.510 V. No transistor switching threshold is modeled.
For an instantaneous aggressor step and an initially floating victim, charge sharing gives ΔV = VDD·Cc/(Cc+Cg). The chosen 5 fF and 10 fF values give 0.600 V at 1.8 V. A conducting driver and finite edge time reduce that idealized peak in this passive model.
The stronger holding path also removes charge faster, shortening the disturbance after the aggressor stops changing. A real cell adds nonlinear drive, pin capacitance and voltage limits, so this plot does not predict a chip’s exact noise waveform.
Noise becomes a functional risk when its amplitude, duration and timing cause a receiving circuit to respond. A false clock edge or asynchronous-reset pulse can be harmful without an ordinary setup failure. A data glitch must be evaluated with the receiver’s behavior and the time at which the value is sampled.
A switching victim sees a different load
For a capacitor between two wires, current follows the rate of change of their voltage difference. If matched edges move together, that difference barely changes and little coupling current flows. Opposite edges change the difference twice as fast, increasing the effective load seen by the victim.
Read the diagram as text
- Victim driver
- Victim wire
- Aggressor wire
- Receiver
- Ground
- Victim driver → Victim wire: drive current
- Victim wire → Aggressor wire: C_c
- Victim wire → Ground: C_g
- Victim wire → Receiver: received edge
Factors 0, 1 and 2 describe matched idealized edges. Different slopes and switching times need waveform-aware analysis.
Added effective load generally slows a data transition and can threaten setup, while reduced load can speed a transition and threaten hold. Clock coupling can also move launch or capture edges, making the path-level effect depend on which branch is disturbed.
| Extracted net | Ground C | Incident coupling C | Coupling share |
|---|---|---|---|
| _130_ | 0.094 fF | 0.397 fF | 80.9 % |
| _344_ | 0.107 fF | 0.411 fF | 79.3 % |
| _387_ | 0.166 fF | 0.622 fF | 79.0 % |
| _278_ | 0.124 fF | 0.434 fF | 77.8 % |
Highest coupling fractions among extracted MAC networks. This ratio excludes library pin capacitance and does not rank functional noise risk.
A high coupling fraction identifies a network worth inspecting, but does not prove that its neighbors switch at harmful times. Signal-integrity timing analysis considers aggressor switching windows, meaning the intervals in which their edges can arrive. Mutually exclusive activity or nonoverlapping windows can remove a hypothetical worst case.
Use sensitivity to choose the next check
The table changes all coupling factors uniformly, which cannot represent a consistent switching relationship among every net in a real design. It provides sensitivity cases rather than guaranteed best and worst whole-chip timing bounds. It also computes no receiver glitch waveform or logical probability of simultaneous switching.
Preserve the extracted coupling
Read SPEF with keep_capacitive_coupling, then apply the chosen reduction factor when forming the timing network. This preserves fractional factors in the pinned engine.
Locate a sensitive path
Compare setup and hold changes, then examine the victim’s neighboring nets and the clock branches involved in that path.
Change the coupling or the drive
Increase spacing, use a suitable shield, shorten the parallel run, or strengthen the victim driver. Re-extract after changing geometry.
Spacing reduces coupling but consumes routing resources, while a shield trades signal-to-signal coupling for capacitance to a reference conductor. Strengthening the victim changes loading upstream and consumes cell area and power. A proposed fix therefore needs both electrical and physical checks before it is accepted.
f0 → f1setup check, latest arrival2 cells
- Clock latency
- Cell delay
- Setup time
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 1.0000 ns, latency 0.0000 ns, library setup time −0.0825 ns.
Arrival 0.5036 ns, required 0.9175 ns, slack 0.4138 ns (met).
| Cell | Arc | Through | Edge | Delay (ns) | Time (ns) | Slew (ns) |
|---|---|---|---|---|---|---|
| 1 | f0/CLK → f0/Q | dfxtp_1 | rise | 0.3156 | 0.3156 | 0.0372 |
f0/Q → victim_driver/A | wire launch | rise | 0.0000 | 0.3156 | 0.0372 | |
| 2 | victim_driver/A → victim_driver/X | buf_1 | rise | 0.1880 | 0.5036 | 0.2043 |
victim_driver/X → f1/D | wire observe | rise | 0.0000 | 0.5036 | 0.2043 |
The report
Startpoint: f0 (rising edge-triggered flip-flop clocked by clk)
Endpoint: f1 (rising edge-triggered flip-flop clocked by clk)
Path Group: clk
Path Type: max
Fanout Cap Slew Delay Time Description
-------------------------------------------------------------------------------------
0.1000 0.0000 0.0000 clock clk (rise edge)
0.0000 0.0000 clock network delay (ideal)
0.1000 0.0000 0.0000 ^ f0/CLK (sky130_fd_sc_hd__dfxtp_1)
1 0.0022 0.0372 0.3156 0.3156 ^ f0/Q (sky130_fd_sc_hd__dfxtp_1)
launch (net)
0.0372 0.0000 0.3156 ^ victim_driver/A (sky130_fd_sc_hd__buf_1)
2 0.0167 0.2043 0.1880 0.5036 ^ victim_driver/X (sky130_fd_sc_hd__buf_1)
observe (net)
0.2043 0.0000 0.5036 ^ f1/D (sky130_fd_sc_hd__dfxtp_1)
0.5036 data arrival time
0.1000 1.0000 1.0000 clock clk (rise edge)
0.0000 1.0000 clock network delay (ideal)
0.0000 1.0000 clock reconvergence pessimism
1.0000 ^ f1/CLK (sky130_fd_sc_hd__dfxtp_1)
-0.0825 0.9175 library setup time
0.9175 data required time
-------------------------------------------------------------------------------------
0.9175 data required time
-0.5036 data arrival time
-------------------------------------------------------------------------------------
0.4138 slack (MET)A live OpenSTA load experiment with ideal clock timing and no extracted wires.
The live experiment isolates effective load using a buffer between two flops, with a chosen load attached to its observed output. Change that load to represent different assumed coupling contributions, then read the setup and hold results. This exercise has no aggressor waveform and does not replace the RC noise simulation above.
Asked in interviews
Can crosstalk cause a hold problem?
Yes. Favorable switching can reduce effective load and make data arrive earlier; clock disturbances can also change the launch-to-capture relationship.
How do noise and delta delay differ?
Noise disturbs an otherwise quiet victim. Delta delay changes the arrival of a victim that is already switching.
Why consider aggressor windows?
Coupling only causes the modeled interaction when edges overlap appropriately. Timing windows help identify which simultaneous-switching assumptions are feasible.
Try it
The chosen 0.015 pF external load gives 0.4138 ns setup slack. The receiving flop’s pin capacitance is added separately.
Try 0.010 pF and 0.020 pF for ground-only and doubled-coupling load assumptions. Those loads model a single victim’s sensitivity, not actual neighboring waveforms.
Run to draw the timing paths here.
WNS 0.4138 nsRead the netlist: victim.v
module victim(clk, d, observe, q);
input clk, d; output observe, q; wire launch;
sky130_fd_sc_hd__dfxtp_1 f0 (.CLK(clk), .D(d), .Q(launch));
sky130_fd_sc_hd__buf_1 victim_driver (.A(launch), .X(observe));
sky130_fd_sc_hd__dfxtp_1 f1 (.CLK(clk), .D(observe), .Q(q));
endmodule
Check yourself
Remember
- Coupling can disturb a quiet victim or change the delay of a switching victim.
- Relative switching direction changes the effective coupling load.
- Faster data can threaten hold, while noise can create functional failures.
- Uniform coupling factors are sensitivity cases; SI closure needs feasible activity, timing windows and receiver behavior.