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 Not yet supported
Python query functions Supported Not yet supported
Unix serve mode Supported Not yet supported
compare and vcd2trace Supported Not yet supported

FST support is currently limited to safe format detection and validation through the Rust API. The current implementation foundation 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 detection limit, and rejection of whole-file gzip-wrapped FST;
  • a reproducible generated FST fixture with a committed semantic oracle.

The CLI, Python query functions, Unix server, comparison engine, and OpenedVcd remain VCD-only. A .fst extension does not make an input queryable: the released CLI and Python APIs reject FST because the OpenedFst and OpenedWaveform query backends are not implemented yet. User-facing FST query support will be documented when those backends are available.

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 currently accepts one VCD only; FST server support is not available yet. The server binds that VCD 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 currently accept VCD files only and raise RuntimeError on parse errors or missing signals. FST detection is available only through the Rust API shown above; FST query support is not yet exposed through Python.


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.2.1

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.2.1
File Size Uploaded Provenance
vcd_tools-0.2.1.tar.gz 3.3 MB With provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for vcd-tools 0.2.1
File
vcd_tools-0.2.1-cp38-abi3-win_amd64.whl CPython 3.8 abi3 Windows x86-64 Details
vcd_tools-0.2.1-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.2.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.8 abi3 Linux glibc 2.17+ ARM64 Details
vcd_tools-0.2.1-cp38-abi3-macosx_11_0_arm64.whl CPython 3.8 abi3 macOS 11.0+ ARM64 Details
vcd_tools-0.2.1-cp38-abi3-macosx_10_12_x86_64.whl CPython 3.8 abi3 macOS 10.12+ x86-64 Details

Total release size: 6.1 MB

Release files / vcd_tools-0.2.1.tar.gz

Download URL vcd_tools-0.2.1.tar.gz
Size 3.3 MB
Tags Source
SHA-256 checksum
How to use checksums
302caf2d10acf38d987569406b8726efd712f1e239b8003f5c9a90e2c3b43d6b
BLAKE2b-256 checksum
How to use checksums
1093216c0af2359852568ddb70ba0ed39350ec12b2cf3e3f0aa1ce76f467c1d6
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 14, 2026.

Transparency log

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

Download URL vcd_tools-0.2.1-cp38-abi3-win_amd64.whl
Size 288.8 kB
Tags CPython 3.8 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
6831895092403baf98705a37651fe082797bb12b470729183083e20314e5d1b7
BLAKE2b-256 checksum
How to use checksums
98e688ed5cbaefa22e76ac1697ca8f52d78541a8060a45e7838d17a52ee2448e
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 14, 2026.

Transparency log

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

Download URL vcd_tools-0.2.1-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 660.2 kB
Tags CPython 3.8 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
21cab8f11f5cbf245e0edfccf903e3dd4045911e414cbd85f1f38c671e151537
BLAKE2b-256 checksum
How to use checksums
c0c2b502dc3cf969ad56be3e849523cfcaa389772590b5628920c602eff0696c
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 14, 2026.

Transparency log

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

Download URL vcd_tools-0.2.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 637.0 kB
Tags CPython 3.8 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
bb10e7b4cf7af7c853c4475ee88c7480a7aa05086e87bb934662b0c852b44966
BLAKE2b-256 checksum
How to use checksums
81df73040290d1befba2e488afa81a1735463e9f1715ddc0fb0eb86982f67fb2
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 14, 2026.

Transparency log

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

Download URL vcd_tools-0.2.1-cp38-abi3-macosx_11_0_arm64.whl
Size 574.1 kB
Tags CPython 3.8 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
eaeaf49716e0f21bceaaeb34e456281112c07630ab1c913a63df5c4c1c02fa2c
BLAKE2b-256 checksum
How to use checksums
cbbf7f09fb9d59cbbef396e71e0fb5102d2ed818e013934b3f35f5aa73169a50
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 14, 2026.

Transparency log

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

Download URL vcd_tools-0.2.1-cp38-abi3-macosx_10_12_x86_64.whl
Size 603.1 kB
Tags CPython 3.8 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
a3016cb28aa313325305813c26a6e0f2ae4ffbc5541757c05b85f346acdc562a
BLAKE2b-256 checksum
How to use checksums
b59972e5601b8f0bd1f34cfecd58075837385f17095f6f72566201cf5741fa02
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 14, 2026.

Transparency log

Security for vcd-tools 0.2.1

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.2.1.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 14, 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