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 factorIdealized interpretationSetup slackHold slack
0Matched same-direction edges0.3792 ns0.4527 ns
1Quiet neighbor0.1207 ns0.4549 ns
2Matched opposite-direction edges-0.1311 ns0.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.

TransientThe same aggressor disturbs two quiet victimsA chosen linear RC model uses 5 fF coupling, 10 fF to ground and a 1.8 V aggressor with a 5 ps rise.
  • Weak hold: 10 kΩ
  • Strong hold: 1 kΩ
0100 mV200 mV300 mV400 mV500 mV600 mV700 mVWeak hold: 10 kΩ, Strong hold: 1 kΩ0100 ps200 ps300 ps400 ps500 ps600 ps700 ps800 psTime0200 mV400 mV600 mV800 mVWeak hold: 10 kΩ, Strong hold: 1 kΩ0200 ps400 ps600 ps800 psTime
Read the plot as a table
TimeWeak hold: 10 kΩStrong hold: 1 kΩ
0 s0 V0 V
100 ps0 V0 V
200 ps0 V0 V
300 ps313.2 mV905.9 µV
400 ps160.8 mV1.152 µV
500 ps82.57 mV1.465 nV
600 ps42.39 mV1.867 pV
700 ps21.77 mV8.993 fV
800 ps11.17 mV8.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.

Switching direction changes the coupling currentThe victim driver supplies its own ground capacitance and current through the capacitor joining it to an aggressor.
Switching direction changes the coupling currentThe victim driver supplies its own ground capacitance and current through the capacitor joining it to an aggressor. component Victim driver component Victim wire component Aggressor wire component Receiver component Ground drive currentC_cC_greceived edge
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 netGround CIncident coupling CCoupling share
_130_0.094 fF0.397 fF80.9 %
_344_0.107 fF0.411 fF79.3 %
_387_0.166 fF0.622 fF79.0 %
_278_0.124 fF0.434 fF77.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.

  1. 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.

  2. Locate a sensitive path

    Compare setup and hold changes, then examine the victim’s neighboring nets and the clock branches involved in that path.

  3. 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.

Timing pathThe loaded victim between two flops

f0 → f1setup check, latest arrival2 cells

  • Clock latency
  • Cell delay
  • Setup time
The loaded victim between two flops00.10.20.30.40.50.60.70.80.91time (ns)launch clk ↑capture clk ↑Data arrivesRequired byf0/CLK → f0/Q (dfxtp_1): 0.3156 ns1 dfxtp_1victim_driver/A → victim_driver/X (buf_1): 0.1880 ns2 buf_1setup −0.0825 nsslack +0.4138 ns · metarrival 0.5036required 0.9175The loaded victim between two flops00.20.40.60.81time (ns)launch clk ↑capture clk ↑Data arrivesRequired byf0/CLK → f0/Q (dfxtp_1): 0.3156 ns1 dfxtp_1victim_driver/A → victim_driver/X (buf_1): 0.1880 ns2 buf_1setup −0.0825 nsslack +0.4138 ns · metarrival 0.5036required 0.9175
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).

CellArcThroughEdgeDelay (ns)Time (ns)Slew (ns)
1f0/CLK → f0/Qdfxtp_1rise0.31560.31560.0372
f0/Q → victim_driver/Awire launchrise0.00000.31560.0372
2victim_driver/A → victim_driver/Xbuf_1rise0.18800.50360.2043
victim_driver/X → f1/Dwire observerise0.00000.50360.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
  1. 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.

  2. 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.

  3. 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.

STAOpenSTA in OpenROAD 26Q2 · sky130hd tt_025C_1v80 Liberty · simulator service
Edit the constraints, then run them

          
Expected: WNS 0.4138 ns
Read 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

Predict the outputChange the live victim’s external load from 0.015 pF to 0.020 pF. What setup slack does OpenSTA report, in ns?
create_clock -name clk -period 1 [get_ports clk]
set_clock_transition 0.1 [get_clocks clk]
set_load 0.020 [get_ports observe]
Read the netlist: design.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
ConceptThe aggressor and victim have matched simultaneous edges in the same direction. What happens to their coupling current?
ConceptWhich effect directly describes crosstalk noise?
ConceptWhy is the factor-2 table not a complete SI sign-off result?
ConceptA grounded shield reduces direct coupling between two signals. What additional effect should be considered?

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.