xilinx/ross-ai-assistant/hw-ila-debug
Claude Code and agent skill by xilinx/ross-ai-assistant
- community
Checking that the SKILL.md file is still in the repository.
Interact with ILA debug cores via vivado-mcp or chipscope-mcp. Discover cores, configure triggers, arm, capture, upload, export waveform data (CSV/VCD), and analyze results. ILA in vivado-mcp supports every device family supported by Vivado. chipscope-mcp supports Versal only. Use when user asks to "capture ILA data", "set ILA trigger", "trigger on signal", "export waveform", "arm ILA", or "trigger immediately".
Install
npx vskill@latest install xilinx/ross-ai-assistant/hw-ila-debugSKILL.md
ILA Debug (EA)
Early Access — this skill may change before general availability.
Interacts with ILA debug cores on live hardware: discover → configure trigger → arm → capture → upload → export → analyze.
See REFERENCE.md for ILA property tables, Tcl command reference, TSM syntax, compare value encoding, and report schema.
Routing: Try Vivado MCP (vivado_execute + Hardware Manager Tcl, below) first if a Vivado MCP session is available — it works across all device families. Fall back to chipscope-mcp (chipscope_ila_core/chipscope_ila_capture) if Vivado MCP is not installed. See Chipscope-mcp Fallback below.
Tools Used
Primary path — Vivado MCP (plus the agent's own file tools):
| Tool | Purpose | |
|---|---|---|
vivado_execute | Run all Tcl commands (get_hw_ilas, run_hw_ila, etc.). Every Tcl block MUST be run via vivado_execute(session_id=..., command=<tcl>). | |
vivado_doc_search | Look up unfamiliar ILA properties, probe compare value syntax, TSM syntax. No session_id needed. | |
vivado_status | Check Vivado session health. | |
vivado_list_sessions | Find an active session to use (get its session_id). | |
| Agent file tools | Write output files (report_data.json, REPORT.md, CSV/VCD exports). |
Fallback path — chipscope-mcp (when Vivado MCP is unavailable): chipscope_session, chipscope_device, chipscope_scan, chipscope_ila_core, chipscope_ila_capture. See Chipscope-mcp Fallback.
No terminal commands, no Python. Everything goes through Vivado MCP or, as fallback, chipscope-mcp.
Session Setup: Vivado Version Must Match hw_server
vivado_list_sessions→ check for an active session.- Before reusing one, run
version -shortand compare to the targethw_server's version. - Mismatch →
ERROR: [Labtools 27-3366] Cannot support older hw_server version. - On mismatch: do not retry or restart automatically.
vivado_startdoes not pick a
matching Vivado version for you — an omitted vivado_path just resolves from PATH, which is often the same mismatched install. Report the exact error, the session's version, and the target hw_server's version to the user, and ask them to point at the correct Vivado install (vivado_path) or the correct hw_server.
- This only applies to an already-running, independently-started
hw_server. A
hw_server that Vivado auto-starts itself when connecting to a locally attached board is launched from that same Vivado install, so it cannot be version-mismatched — see "No hw_server" below.
- Only reuse a session once its version matches.
Efficiency Guidelines
- Pass `session_id` to every
vivado_executecall — get it fromvivado_list_sessionsif unknown. - Verify session version against `hw_server` before reuse, and report a mismatch to the user rather than retrying — see Session Setup above.
- Batch Tcl — discover all ILA cores in one
vivado_execute, not separate calls. - Write reports to file — do not dump full waveform data in chat. Give a short summary only.
- Use `vivado_doc_search` for unfamiliar probe properties, TSM syntax, or compare value encoding.
- Do NOT use
display_hw_ila_data— it opens a GUI window. Usewrite_hw_ila_data+list_hw_samplesfor data extraction. - Do NOT use
shellcommands or Vivado Tcl file I/O. Use agent file tools. - Do NOT retry failed Tcl with different syntax. Search docs first, then report the error.
Capture & Analysis Workflow
Step 1: Discover ILA Cores & Probes
Run via vivado_execute(session_id=<id>, command=<tcl below>):
No ILA found → STOP. Guide: "No ILA cores detected. Ensure the device was programmed with a bitstream containing ILA cores and the correct .ltx probes file is associated."
On the chipscope-mcp fallback path:
- A zero-ILA reading before
chipscope_scan(action="scan", ltx_path=...)has run is not authoritative — don't treat it as "no ILA found" yet. - After scanning, if the server reports a
debug_readyfield, treatdebug_ready: trueas confirmation. - If
debug_readyis absent, fall back to the scan's own reported core count instead.
Step 2: Configure Trigger
Basic trigger — map user's NL request to probe compare values:
Compare value syntax: eq<width>'<radix><value> — see REFERENCE.md for full encoding (=, !=, <, >, R, F, B, N, X).
Advanced trigger (TSM) — for multi-phase triggers (e.g., AXI transactions). See REFERENCE.md for the full grammar, rejection rules, and worked examples:
- Generate a
.tsmfile with state machine code - Write it using agent file tools
- Set:
set_property CONTROL.TRIGGER_MODE ADVANCED_ONLY $ila - Set:
set_property CONTROL.TSM_FILE <path> $ila - Compile-check:
run_hw_ila -compile_only $ila
Capture condition (storage qualifier):
Step 3: Arm, Wait & Upload
For immediate capture (no trigger, "aliveness" check):
⚠️ `wait_on_hw_ila` blocks until trigger fires. If the trigger condition is never met, the agent will hang. For conditions that may not fire, use run_hw_ila -trigger_now first to verify probe connectivity.
⚠️ `wait_on_hw_ila -timeout N` is in MINUTES (not seconds). Use -timeout 1 for a 1-minute cap. Omitting -timeout waits indefinitely.
⚠️ Versal DPC arm latency. On Versal (axis_ila via DPC JTAG), there is a brief latency between run_hw_ila returning and the ILA hardware being fully armed. If the triggering event is driven by VIO in the same Vivado session, issue the commit_hw_vio that fires the trigger in a separate `vivado_execute` call — not in the same command as run_hw_ila. The natural inter-call latency (~100 ms) is sufficient for the ILA to settle into WAITING_FOR_TRIGGER state.
Step 4: Export & Analyze Data
Export formats: -csv_file (spreadsheet), -vcd_file (waveform viewer), or native .ila (Vivado reload).
To read specific probe sample values programmatically:
Step 5: Write Output Files — MANDATORY after every successful capture
This step is not optional and does not depend on the user asking for a report. Any prompt that results in a completed ILA capture — including "display captured data", "show the waveform", "upload and display", or "arm and capture" — MUST produce all three output files before any chat summary is given.
Write every file below under vivado_agentic_ai_reports/hw-ila-debug/. The file tool creates missing parent directories, so do not shell out to mkdir (this skill forbids terminal commands).
| File | Format | Content | |
|---|---|---|---|
capture_data.csv | CSV | Raw waveform data from ILA (via write_hw_ila_data) | |
report_data.json | JSON | Structured capture metadata + analysis (schema in REFERENCE.md) | |
REPORT.md | Markdown | Executive summary: trigger config, capture stats, signal observations |
Prompt mapping — these user phrases all require files to be written before summarizing in chat:
| User says | Agent does | |
|---|---|---|
| "display the captured ILA data" | upload → export CSV → write JSON + REPORT.md → chat summary | |
| "show me the waveform" | upload → export CSV → write JSON + REPORT.md → chat summary | |
| "arm and capture" | arm → wait → upload → export → write JSON + REPORT.md → chat summary | |
| "upload and display" | upload → export → write JSON + REPORT.md → chat summary |
After writing files, confirm in chat: "Files written to vivado_agentic_ai_reports/hw-ila-debug/: capture_data.csv, report_data.json, REPORT.md."
Where to find the report: vivado_agentic_ai_reports/hw-ila-debug/REPORT.md in the working directory where the agent session was started. If the report was not generated, the capture data is still uploaded (from Step 3) — write the output files from that existing upload without re-arming. Only retry from Step 3 if the capture itself failed (e.g. trigger never fired, upload returned no samples).
Design-Specific Rules
All outputs MUST use ACTUAL values.
| Rule | Wrong | Correct | |
|---|---|---|---|
| Probe value | "signal is high" | "axi_arvalid (hw_ila_1/probe3): 1'b1 at sample 512" | |
| Trigger config | "set up trigger" | "TRIGGER_MODE: BASIC_ONLY, CONDITION: AND, probe3 == eq1'b1, POSITION: 512/1024" | |
| Core info | "found ILA" | "hw_ila_1: 6 probes, depth 4096, adv trigger supported" |
Error Handling
| Error | Symptom | Action | |
|---|---|---|---|
| No ILA cores | get_hw_ilas empty | Check: bitstream has debug cores? .ltx file associated? | |
| No hw_server | get_hw_servers empty | Guide: connect_hw_server -url localhost:3121 | |
| Trigger never fires | wait_on_hw_ila hangs | Use run_hw_ila -trigger_now to verify connectivity first | |
| Probe not found | get_hw_probes returns empty | Check: .ltx file matches bitstream? vivado_doc_search for probe naming | |
| TSM compile error | run_hw_ila -compile_only fails | Check the exact rule in REFERENCE.md first (it lists the specific rejection error strings); vivado_doc_search for anything not covered there | |
TSM arm() rejected (chipscope-mcp path) | chipscope_ila_core(action="arm", trigger_state_machine=...) returns success: false with a parser error | Match the exact error string against REFERENCE.md's "Rejected patterns" table first |
Examples
"Capture whatever is on the ILA right now" → Discover ILA → run_hw_ila -trigger_now → wait_on_hw_ila → upload_hw_ila_data → export CSV → summarize.
"Trigger when AXI RVALID goes high" → Find probe for axi_rvalid → set_property TRIGGER_COMPARE_VALUE eq1'b1 → arm → wait → upload → export.
"Trigger on AXI read transaction (address then data then last)" → Generate 3-state TSM → write .tsm file → set ADVANCED_ONLY → arm → capture.
Chipscope-mcp Fallback
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/hw-ila-debug/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/xilinx/ross-ai-assistant/hw-ila-debug)