Trace Vivado Timing to RTL
Build a measured map from Vivado timing evidence to processor RTL. Match the
amount of evidence collection and reporting to the claim being made.
Keep the boundary clear
Use this skill for read-only timing forensics:
Vivado reports or routed DCP
-> selected path population
-> primitive and net stages
-> RTL and pipeline meaning
-> ranked structural directions
Use optimize-chisel-fpga-timing for cycle-contract proof, RTL edits,
assertions, functional verification, emitted-RTL comparison, and routed A/B
closure. For a combined request, freeze this skill's evidence before editing.
Read authority and artifacts
- Read repository instructions, target Design, current RTL, generated RTL, and report-directory rules.
- Identify source revision, dirty state, parameters, top, device, Vivado version, clocks, constraints, strategies, directives, seed, DCP path, and DCP hash.
- Treat an implementation run as immutable evidence. Compare source hashes with its manifest before semantic mapping.
- If source drifted, map through the run snapshot, generated RTL, routed netlist, and DCP. Mark current-source correspondence as unverified.
- Prefer routed DCP evidence. Use post-place, post-synth, emitted RTL, or source only for questions that evidence level can answer.
- Preserve raw reports and supplemental queries. Write analysis only to the user or project-designated report path.
Read evidence-and-queries.md when a DCP is
available, reports are incomplete, or exact Tcl queries are needed.
Select the task mode
Choose the smallest mode that supports the requested conclusion.
Targeted Path Trace
Use for one named path, endpoint, module boundary, signal family, or timing
hypothesis. Query the named path plus its producer, consumer, feedback, and
control boundaries. A full endpoint universe is optional and must not be
generated unless the report makes a global absence, ranking, coverage, or
closure claim.
Whole-design Timing Audit
Use for global closure, limiting-population, module-coverage, or prioritization
claims. Build the endpoint-worst path universe, distributions, family summaries,
and representative paths. State query caps and truncation.
Cross-run Comparison
Use for before/after or configuration comparison. First prove top, part, clock,
constraints, strategies, parameters, and source identities are comparable. Use
the same targeted population for a local claim. Use matching endpoint universes
and family classifiers for a global claim.
If the request combines modes, keep each claim bound to the evidence population
that supports it.
Build the selected path population
For every mode, record setup and hold status separately and preserve the raw
Slack-sorted paths used by the analysis. Explain that longest data delay and
worst Slack can differ because skew, uncertainty, CPR, and endpoint clock paths
differ.
For a whole-design audit or global comparison:
- Build one worst setup path per endpoint using a stated threshold.
- Record returned object count, query cap, and truncation status.
- Summarize delay bins, endpoint pin types, setup violations, and route-ratio distribution.
- Group by physical startpoint class, endpoint class, shared prefix, pipeline boundary, and event type.
- Report each family's count, maximum data delay, worst Slack, logic and route split, levels, and representative path.
- Preserve the identities of both maximum-data and worst-Slack paths when they differ.
For a targeted trace, save exact -from, -to, and -through expressions,
expanded object counts, warnings, and raw path reports. Do not call a module
timing-clean from absence in a top-N list.
Expand representative paths
Expand every user-targeted family. In a whole-design audit, also expand global
WNS, highest-count families, and longest-data families. Record:
source and destination pins
launch and capture clocks
requirement, slack, uncertainty, skew, CPR
data, logic, and route delay
logic levels and primitive counts
ordered primitive cells and sites
following net delay and fanout
cumulative data delay
hierarchy crossings
endpoint pin type
Pair each primitive with its following routed net. Run
extract_timing_path.py on text reports for an
initial stage table, then verify the selected block and semantic labels against
the raw report.
Map physical stages to RTL
- From the startpoint, follow generated net names, cell inputs, and source fanout into the path.
- From the endpoint, trace the consuming register, memory pin, enable, or reset back to its RTL assignment.
- Search emitted SystemVerilog, Chisel source, parameters, and Design.
- Partition the path into regions such as decode, compare, overlay, arbitration, mux, add, correction, ready propagation, state maintenance, and memory control.
- Label each statement
measured, mapped, inferred, or unknown.
Never infer an exact LUT function from an optimized name. Query INIT, input
pins, driving nets, fanout, and generated-RTL correspondence when exact per-LUT
attribution matters. Read
rtl-mapping-and-reporting.md for
confidence rules and mode-sized report structures.
Diagnose logic and routing
- Report logic depth and route share independently.
- Call a net high-fanout only from measured fanout. Call it causal only when it appears on the path with a material route segment.
- Record sites for long routes and inspect replication, hierarchy crossings, endpoint spread, congestion, control sets, and
DONT_TOUCH.
- Treat parallel cones as parallel unless one ordered primitive chain traverses both.
- Determine whether a proposed early signal starts the path or joins it mid-cone.
- Separate BRAM
DOUT, ADDR, EN, WE, and DIN families.
Quantify modification directions
For each candidate, identify:
targeted primitive levels and route segments
old cumulative delay to the cut
remaining measured suffix
covered and unaffected path families
new or migrated startpoints
new D, Q, feedback, enable, reset, flush, and hold paths
Count removable logic levels separately from routes. Placement replaces removed
routes with new routes, so old route delay is never a guaranteed gain. If only a
mux selector moves, state whether the data mux remains.
For every proposed register cut, measure the producer-side D cone and request:
old end-to-end path
new register D input
new register Q output
feedback or maintenance path
CE, reset, flush, and hold controls
Compare implementations
In Cross-run Comparison mode:
- Record every configuration or source difference.
- For a local claim, compare matching boundaries, physical stages, and path families.
- For a global claim, also compare WNS, TNS, WHS, path populations, delay bins, route ratios, resources, and qualified power.
- Track families that entered, left, or changed position in the limiting set.
- Attribute a change to RTL only when source identity and physical evidence support it. Classify isolated route movement as implementation variance.
Rank recommendations
Rank by measured coverage and structural certainty:
- Removes primitive levels from the current limiting family.
- Shortens a high-count shared prefix.
- Reduces route width, fanout, or physical span.
- Moves pressure to a measurable D or feedback cone.
- Changes pipeline, visibility, ordering, forwarding, or flush semantics.
Separate topology edits from microarchitecture changes. This skill does not
claim cycle equivalence. State the contract that an implementation task must
prove.
Deliver
Every report contains:
- Answer-first conclusion and exact claim scope.
- Run and source identity with hashes.
- Evidence used, missing evidence, and confidence labels.
- Representative physical paths with primitive and route stages.
- RTL and cycle-semantic mapping.
- Ranked modification directions and the boundaries they affect.
- Exact supplemental DCP queries and raw report index.
- Implementation handoff with required D, Q, feedback, control, and hold checks.
Add the mode-specific sections defined in
rtl-mapping-and-reporting.md. Keep
measured facts, mapping, inference, comparison, and recommendation visibly
separate. Report no RTL modification or functional verification unless another
workflow actually performed it.