Skip to main content

vcd_tools_rs

Fast streaming waveform analysis tool and Python library, written in Rust.

The current query engine provides commands to list signals, query metadata, extract time/value pairs, count toggles, search for value occurrences, and diff two VCD files — all with a memory-efficient streaming parser.

Current format support

Surface VCD FST
Rust format detection API Supported Supported
Native CLI queries (list, meta, extract, toggle, find) Supported Supported
Python query functions Supported Supported
Unix serve mode Supported Supported
compare Supported Supported
vcd2trace Supported Not supported

FST read/query support uses the pure-Rust fst-reader backend and content-based format detection. Supported FST surfaces include native CLI and Python list/metadata/extract/find/toggle operations, same- or cross-format comparison when physical timescales match, and Unix server mode. vcd2trace remains VCD-only. The implementation includes:

  • the pure-Rust fst-reader 0.17 backend dependency;
  • content-based VCD/FST format detection through the Rust API;
  • explicit format assertions and deterministic mismatch errors;
  • parser-panic containment, bounded error text, an 8 GiB file limit, and rejection of whole-file gzip-wrapped FST;
  • bounded FST hierarchy depth, declaration count, retained name bytes, and catalog ownership, with compressed hierarchy expansion preflight before decompression;
  • callback-based streaming for native CLI and Unix server extraction;
  • a reproducible generated FST fixture with a committed semantic oracle.

The CLI, Python query functions, comparison engine, and Unix server auto-detect VCD/FST content. Native CLI users may assert the input with --format auto|vcd|fst; a mismatch fails deterministically. A .fst extension is not required. Whole-file gzip-wrapped FST and incomplete FST requiring an external .hier file are intentionally unsupported; vcd2trace remains VCD-only.

The established VCD-named Rust functions remain VCD-only. Format-neutral Rust callers use OpenedWaveform; OpenedFst exposes project-owned metadata and signal types without leaking fst-reader types.

Current additive Rust API:

use vcd_tools_rs::{detect_waveform_format, WaveformFormatHint};

let format = detect_waveform_format("simulation.fst", WaveformFormatHint::Auto)?;
println!("{format}"); // "fst" or "vcd"

Detection uses file contents, not the extension. It classifies and validates the input at detection time; a later consumer must still open and validate its own file generation. See FST_PLAN.md and the FST architecture for implementation status and supported-subset decisions.

Installation

Option 1: pip (Python users)

Installs the vcd_tools_rs command and the vcd_tools Python module:

pip install vcd-tools

The vcd_tools_rs CLI is backed by the compiled Rust extension, so performance is equivalent to the native binary.

Option 2: Precompiled binaries

Download for your platform from GitHub Releases:

Platform Archive
Linux x64 vcd_tools_rs-vX.X.X-x86_64-unknown-linux-gnu.tar.gz
Linux ARM64 vcd_tools_rs-vX.X.X-aarch64-unknown-linux-gnu.tar.gz
macOS Intel vcd_tools_rs-vX.X.X-x86_64-apple-darwin.tar.gz
macOS Apple Silicon vcd_tools_rs-vX.X.X-aarch64-apple-darwin.tar.gz
Windows x64 vcd_tools_rs-vX.X.X-x86_64-pc-windows-msvc.zip
tar xzf vcd_tools_rs-vX.X.X-x86_64-unknown-linux-gnu.tar.gz
./vcd_tools_rs --help

Option 3: Build from source

cargo build --release
# optional: install into ~/.cargo/bin
cargo install --path .

CLI usage

# List signals (optional substring filter)
vcd_tools_rs list simulation.vcd [--filter clk]

# File metadata (signal count, timescale, time bounds)
vcd_tools_rs meta simulation.vcd [--pretty]

# Extract time/value pairs for selected signals
vcd_tools_rs extract simulation.vcd \
  --signal "tb.clk" --signal "tb.rst_n" \
  --start 0 --end 1000000 \
  [--signals-file signals.txt] [--pretty]

# Count value transitions per signal
vcd_tools_rs toggle simulation.vcd \
  --signal "tb.clk" --signal "tb.counter[7:0]" \
  [--start 0 --end 500000]

# Find the Nth occurrence of a signal value
vcd_tools_rs find simulation.vcd \
  --signal "tb.clk" --value 1 --occurrence 3

# Compare two VCD files
vcd_tools_rs compare reference.vcd actual.vcd \
  [--max-mismatches 10] [--ignore-unknown] [--output json|compact]

# Experimental local VCD query server (Unix native build or Unix PyPI wheel)
mkdir -m 700 /tmp/vcd-tools-$USER
vcd_tools_rs serve simulation.vcd \
  --socket /tmp/vcd-tools-$USER/server.sock

Global flags: --pretty (table output), --log-level (error/warn/info/debug).

Experimental server availability

Server mode is available from native Unix builds, Linux/macOS release archives, and Unix PyPI wheels. It accepts one VCD or FST selected at startup and reports source_format from describe. The server binds that waveform to an owner-only Unix-domain socket and supports ping, describe, list, metadata, extract, find, toggles, and cancel using protocol v1 JSON Lines.

After pip install vcd-tools, the same command is available on Unix:

mkdir -m 700 /tmp/vcd-tools-$USER
vcd_tools_rs serve simulation.vcd --socket /tmp/vcd-tools-$USER/server.sock

The socket parent directory must already exist, be owned by the current user, and have no group/other permissions. Windows does not expose this Unix socket mode.

See the protocol contract for request schemas and limits.

See CLI_REFERENCE.md for the complete option reference.

Signals file

One signal name per line. Lines starting with # and inline # comments are ignored:

# signals.txt
tb.U_CHIP.counter[7:0]
tb.U_CHIP.enable
tb.clk          # clock signal

Python API

After pip install vcd-tools:

import vcd_tools

# List signals
signals = vcd_tools.list_signals("simulation.vcd")
signals = vcd_tools.list_signals("simulation.vcd", filter="clk")

# Metadata
meta = vcd_tools.metadata("simulation.vcd")
# → {"signal_count": 42, "timescale": "1 ns", "start_time": 0, "end_time": 1000000}

# Extract time/value pairs
values = vcd_tools.extract("simulation.vcd",
                           signals=["tb.clk", "tb.rst_n"],
                           start=0, end=500000)
# → [{"signal": "tb.clk", "time": 0, "value": "0"}, ...]

# Count toggles
counts = vcd_tools.toggles("simulation.vcd", signals=["tb.clk"])
# → {"tb.clk": 500}

# Find Nth occurrence of a value
result = vcd_tools.find("simulation.vcd",
                        signal="tb.clk", value="1", occurrence=3)
# → {"found": True, "signal": "tb.clk", "time": 30, "value": "1"}

# Compare two VCD files
diff = vcd_tools.compare("reference.vcd", "actual.vcd",
                         max_mismatches=10, ignore_unknown=True)
# → {"passed": False, "total_mismatches": 3,
#    "mismatches": [{"signal": ..., "time": ..., "value1": ..., "value2": ...}], ...}

All query functions auto-detect VCD or FST content and raise RuntimeError on parse errors or missing signals. compare supports VCD/VCD, FST/FST, and VCD/FST when physical timescales match.


vcd2trace (RISC-V trace extraction)

vcd2trace recreates a RISC-V architectural trace from a VCD file (Aldebaran-style format).

# Default signal paths
vcd2trace simulation.vcd --output trace.txt

# Override paths via JSON
vcd2trace simulation.vcd \
  --signal-path examples/signal_paths.json \
  --output trace.txt

See CLI_REFERENCE.md for the full signal path reference.


Tests

cargo test

Tests use tests/waveform.vcd as the reference fixture.

Notes

  • Large VCDs are streamed from disk; header scope names are sanitized to tolerate special characters.
  • Release builds (cargo build --release) provide the best performance (~6× faster than Python VCD parsers in local measurements).
  • The pip-installed vcd_tools_rs command is a Python entry point backed by the same compiled Rust code; there is no performance difference vs. the native binary.

Metadata

Release files for vcd-tools 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for vcd-tools 0.3.0
File Size Uploaded Provenance
vcd_tools-0.3.0.tar.gz 3.3 MB With provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for vcd-tools 0.3.0
File
vcd_tools-0.3.0-cp38-abi3-win_amd64.whl CPython 3.8 abi3 Windows x86-64 Details
vcd_tools-0.3.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.8 abi3 Linux glibc 2.17+ x86-64 Details
vcd_tools-0.3.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.8 abi3 Linux glibc 2.17+ ARM64 Details
vcd_tools-0.3.0-cp38-abi3-macosx_11_0_arm64.whl CPython 3.8 abi3 macOS 11.0+ ARM64 Details
vcd_tools-0.3.0-cp38-abi3-macosx_10_12_x86_64.whl CPython 3.8 abi3 macOS 10.12+ x86-64 Details

Total release size: 6.7 MB

Release files / vcd_tools-0.3.0.tar.gz

Download URL vcd_tools-0.3.0.tar.gz
Size 3.3 MB
Tags Source
SHA-256 checksum
How to use checksums
bbe8dda4953fd3ae8b134934586c00a0ff2e3f22cd5f6f6ab8b11e82111c025b
BLAKE2b-256 checksum
How to use checksums
efc51fae5aaa8fc8657ab8c262be19814f4c840952c86917407a76c7b731780d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.

Transparency log

Release files / vcd_tools-0.3.0-cp38-abi3-win_amd64.whl

Download URL vcd_tools-0.3.0-cp38-abi3-win_amd64.whl
Size 404.5 kB
Tags CPython 3.8 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
3e5e13dd5e45c6925b78caafea719751ef45b747ab222101b21d36775e563250
BLAKE2b-256 checksum
How to use checksums
67c35b23a90d755ec092b93b76bc517457003543443c904228915fd0c5238425
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.

Transparency log

Release files / vcd_tools-0.3.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL vcd_tools-0.3.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 775.9 kB
Tags CPython 3.8 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
b041379f939de864358ec7f17442215687e8a9ccc2e771baa7709b9775b583ee
BLAKE2b-256 checksum
How to use checksums
2ec14282bb3c5ce73d5dcf02a000615e594f7f5e1da0b85ca3565f01c9ce485f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.

Transparency log

Release files / vcd_tools-0.3.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL vcd_tools-0.3.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 756.8 kB
Tags CPython 3.8 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
9bb32920a639c74364139fd5d67cfa5dacf18e55f2b6dd53ac42a5f07f2a3b06
BLAKE2b-256 checksum
How to use checksums
aeffd02e45bf98deb04d6830ad672bc1ae1cba66c9bdb34d399ef070bd4bbd1e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.

Transparency log

Release files / vcd_tools-0.3.0-cp38-abi3-macosx_11_0_arm64.whl

Download URL vcd_tools-0.3.0-cp38-abi3-macosx_11_0_arm64.whl
Size 682.7 kB
Tags CPython 3.8 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
25ac5ee003a36aa17a80fdd323865b4593c0955a3001769e4f45cac50dddcb8f
BLAKE2b-256 checksum
How to use checksums
cdb7b4bade23c5b115be4d08133b30d9cec7110ec5609bdbb75db372909d3b68
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.

Transparency log

Release files / vcd_tools-0.3.0-cp38-abi3-macosx_10_12_x86_64.whl

Download URL vcd_tools-0.3.0-cp38-abi3-macosx_10_12_x86_64.whl
Size 719.1 kB
Tags CPython 3.8 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
2927d8e3927335943aef5983c85a572b7b90163c943fc6e15b3599c24358e9c7
BLAKE2b-256 checksum
How to use checksums
2fa63f211b3bed97ab49e0b1be578cffc44a59dde1243340a955a459cbe707f0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.

Transparency log

Security for vcd-tools 0.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 6 files in this release have been uploaded with provenance metadata.

Select from 6 files

Attestation for vcd_tools-0.3.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page