Simulator support¶
Sentinel DV is simulator-agnostic. It indexes exported verification artifacts and exposes them through read-only MCP tools; it does not start simulator jobs, open proprietary databases, or stream raw waveform files.
Supported artifact types¶
| Artifact | Files indexed today | Notes |
|---|---|---|
| UVM logs | *.log | Parses common UVM report lines from VCS, Questa, Xcelium, Verilator, and generic logs. |
| cocotb/JUnit | results.xml, results_*.xml, junit.xml, *junit*.xml | Produces tests and failure events. |
| Assertions | *.assert.json, *.assertions.txt, assertions*.rpt, vcs_assert*.log, vsim_assertions*.log, questa_assertions*.txt | Produces assertion definitions and runtime failures. |
| Coverage summaries | coverage.json, coverage_summary.json, coverage.xml, *.cov.json, *.cov.txt, coverage.dat.summary, dashboard.html (VCS URG), overalldu.js (Questa vcover), cov_report.html / imc_summary.html / xcoverage_report.html (Xcelium IMC HTML) | Exported summaries or HTML/JS reports from URG, vcover, and IMC HTML are supported. Raw proprietary databases (UCDB, VDB) are not parsed directly. |
| Waveform summaries | *.wave.json, *_waveform.json, waveform_summary.json, *.vcd | VCD can be parsed directly; FSDB/WLF/SHM/VPD should be converted to bounded JSON summaries first. |
Checked-in simulator examples¶
| Simulator | Fixture | Verify all MCP tools |
|---|---|---|
| VCS | demo/vcs_counter/ | python scripts/verify_all_mcp_tools.py --sim vcs |
| Questa | demo/questa_counter/ | python scripts/verify_all_mcp_tools.py --sim questa |
| Cadence Xcelium | demo/cadence_counter/ | python scripts/verify_all_mcp_tools.py --sim cadence |
| Verilator | demo/verilator_counter/ | python scripts/verify_all_mcp_tools.py --sim verilator |
Run all simulator fixtures:
Configuration¶
Point artifact_roots at directories that contain exported artifacts:
artifact_roots:
- ./demo/vcs_counter
index:
type: duckdb
path: ./sentinel_dv.db
adapters:
uvm: true
cocotb: true
assertions: true
coverage: true
waveform_summary: true
Then build the index:
Relative paths in config.yaml are resolved relative to the config file location.
Export guidance¶
VCS¶
Export text reports and summaries next to your regression artifacts:
Recommended files for Sentinel DV:
results.xmlfrom your regression runner or CI harnessrun.logorsimv.logassertions/*.assert.jsonor bounded assertion report textcoverage/coverage.jsonor exported XML/text summariescoverage/report/dashboard.htmlfromurg -report— automatically detected and parsed for LINE, TOGGLE, ASSERT, GROUP, and SCORE percentageswaveforms/*.wave.jsongenerated from VPD/FSDB/VCD as a bounded summary
Questa¶
Use Questa logs and exported summaries:
vlog counter.sv tb.sv
vsim -c work.tb -do "run -all; quit" -l vsim.log
vcover report -html -output coverage_html coverage.ucdb
Point artifact_roots at the HTML report directory (the one that contains files/overalldu.js):
The files/overalldu.js data file is automatically detected (confirmed by a var g_data block with "ds" key) and parsed for statement, branch, toggle, assertion, functional, and total coverage percentages.
For other coverage/assertion/waveform data, export to bounded JSON/XML/text files before indexing. Raw WLF/UCDB files are not parsed directly.
Cadence Xcelium¶
Use Xcelium logs and exported summaries:
HTML coverage reports — Sentinel DV directly parses Xcelium IMC HTML reports generated by:
imc -exec "load coverage.vdb; report -html -out html_report"
# or
xcrg -report -db coverage.vdb -reportdir html_report
Place cov_report.html, imc_summary.html, or xcoverage_report.html in an artifact root and Sentinel DV auto-detects and parses them (the coverage.summary and coverage.trend MCP tools will include Xcelium metrics).
For other coverage/assertion/waveform data, export to bounded JSON/XML/text files before indexing. Raw SHM/ICCR coverage databases are not parsed directly.
UVM log parsing details¶
Sentinel DV ships patterns for the four common UVM log formats:
| Format | Example line |
|---|---|
| VCS native | UVM_ERROR /path/file.svh(10) @ 887915000000: uvm_test_top.comp [TAG] message |
| VCS Jenkins | UVM_ERROR /path/file.svh @ 887915000000: uvm_test_top.comp message |
| Questa | # UVM_ERROR @ 100 ns: uvm_test_top.comp message |
| Generic fallback | UVM_ERROR @ 100 ns: message |
Patterns are tried in the order shown; the first match wins.
Count-summary lines are always skipped: VCS appends UVM_ERROR : 0 and Questa appends # UVM_ERROR : 0 at end-of-simulation to report per-severity counts. These lines are not failures and are filtered before any pattern is attempted. Additionally, the report demote/catch counters (Number of caught UVM_FATAL reports : 4, Number of demoted UVM_ERROR reports : 0) are also filtered — these are housekeeping statistics, not individual failure events.
Test status values — the parser returns one of three statuses:
| Status | Meaning |
|---|---|
pass | No UVM_ERROR/FATAL, simulation completed normally (VCS report, $finish, or UVM TEST DONE present) |
fail | UVM_ERROR or UVM_FATAL messages found, or explicit FAILED marker present |
aborted | No UVM errors, but the simulation never reached a clean exit — typically a license pre-emption, OOM kill, or run-script timeout that terminated the process mid-simulation |
The aborted status is important: a simulation that exits abnormally (ending with just Releasing License for VCS-BASE-RUNTIME but no VCS Simulation Report footer) was previously mis-classified as pass. The parser now correctly distinguishes a clean zero-error exit from a mid-flight process kill.
Security model¶
Sentinel DV keeps simulator support artifact-based by design:
- MCP tools are read-only.
- Evidence paths are normalized and cannot escape configured artifact roots.
- Output size, evidence count, and excerpts are bounded by
securitysettings. - Redaction is applied to parsed log messages and failure details.