Skip to content

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:

python examples/simulator_matrix.py --sim all

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:

sentinel-dv-index --config config.yaml --index-all

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:

vcs -sverilog -full64 -debug_access+all -l simv.log ...
./simv +UVM_TESTNAME=my_test -l run.log

Recommended files for Sentinel DV:

  • results.xml from your regression runner or CI harness
  • run.log or simv.log
  • assertions/*.assert.json or bounded assertion report text
  • coverage/coverage.json or exported XML/text summaries
  • coverage/report/dashboard.html from urg -report — automatically detected and parsed for LINE, TOGGLE, ASSERT, GROUP, and SCORE percentages
  • waveforms/*.wave.json generated 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):

artifact_roots:
  - path/to/coverage_html/files   # contains overalldu.js — auto-detected and parsed

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:

xrun -sv -coverage all counter.sv tb.sv -l xrun.log

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 security settings.
  • Redaction is applied to parsed log messages and failure details.