get_signals_around_time
Inspect signal values and transitions in a narrow window around a target timestamp to trace causal chains at a specific failure time. Ideal for localized debugging of simulation failures.
Instructions
Return values and transitions for multiple signals in a NARROW window around a target timestamp (typically the failure time). Designed for local causal-chain inspection; NOT for bulk trace extraction. For round-by-round or multi-cycle sampling use get_signals_by_cycle.
Unit reminder: all times are picoseconds. If the sim log reports Time: X ns, set center_time_ps = X*1000 (example: 75,100 ns -> 75,100,000 ps).
Typical window_ps:
Glitch inspection: 1,000 - 5,000 ps
One clock cycle: = clock_period_ps (NOT exposed by get_waveform_summary; use get_signals_by_cycle after you identify a clock_path, or read it from your sim environment / compile log)
N cycles around fail: N * clock_period_ps
The server enforces a cap of MAX_WAVE_WINDOW_CYCLES (default 256) clock cycles per call, computed at runtime from an auto-detected clock_period_ps. It also rejects center_time_ps past the recorded simulation end. For multi-cycle sampling, get_signals_by_cycle still requires an explicit clock_path. FSDB support depends on fsdb_runtime.enabled.
If a value_at_center is a SUB-CYCLE TRANSIENT — a combinational glitch at the clock edge that settles back within the same cycle (e.g. an interconnect mux re-settling to idle for ~1ns at each edge) — the result sets transient_note and the signal carries center_transient/center_settles_to/center_settle_ps. Treat the SETTLED value as the protocol value; do not attribute a root cause to an edge-sampled value that is flagged transient.
return_mode="values_only" keeps the atomic multi-signal sample but strips the transition lists from every signal: each entry carries value_at_center + window_transition_count (+ any transient annotation, computed before stripping). Use it when you only need the values at one instant — e.g. comparing the same time point across several traces — instead of paying for transition history or falling back to one get_signal_at_time call per signal.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| wave_path | Yes | ||
| window_ps | No | Half-window in ps (center +/- window_ps). Default: 2000. Hard cap: MAX_WAVE_WINDOW_CYCLES clock cycles. For N-cycle sweeps prefer get_signals_by_cycle. | |
| return_mode | No | values_only drops transitions_in_window/pre_window_transitions from every signal, returning value_at_center + window_transition_count (+ transient annotation). Compact point-sample mode for multi-trace value comparison. | full |
| signal_paths | Yes | List of full hierarchical signal paths. A bare bus name (no [msb:lsb]) is auto-completed when unique (see resolved_aliases); unresolved names get did_you_mean entries in signal_suggestions. | |
| center_time_ps | Yes | Center time in PICOSECONDS (not ns). Convert sim-log ns via *1000. Must be within the waveform duration reported by get_waveform_summary. Accepts an integer (ps), a cursor reference like '@div_3a7c', or a unit literal like '12.34ns'. | |
| extra_transitions | No | Extra transitions to include before the time window. Default: 5. 0 means none. |