A Rust VCD parser intended to be the backend of a Waveform Viewer(built using egui) that supports dynamically loaded rust plugins.
Find a file
2022-07-15 20:48:02 -04:00
src able to parse all signal trees 2022-07-15 20:48:02 -04:00
test-vcd-files seems to be able to parse signal tree 2022-07-14 16:46:11 -04:00
.gitignore seems to be able to parse signal tree 2022-07-14 16:46:11 -04:00
Cargo.toml date parser needs some more work 2022-06-08 21:45:47 -04:00
README.md good stopping point for today 2022-07-14 18:52:12 -04:00

Disclaimer

PROPRIETARY - Copyright - Yehowshua Immanuel

The Beginnings of a high-performance, low memory footprint VCD Viewer in Rust for massive multi-GB waveforms

Current Features

  • very fast
  • loads 400MB of VCD waveform per second on an 8 core 2017 desktop CPU with NVMe storage
  • consumes roughly between 10 - 50MB of memory per GB of waveform

Planed Features

  • elegant/pretty UI
  • can be easily ported to work in browser via webassembly
  • allows high-performance custom Rust plugins to manipulate and generate new waveforms live

Running

Make sure you have a test vcd file to get you started. You can grab a large VCD file from here.

The first build of the program may take some time.

cargo run --release test-vcd-files/aldec/SPI_Write.vcd

You can run all the tests with cargo test

TODO

  • support multiple root scopes

  • support parsing dates with commas

  • Fix warning especially usage and restriction warnings once I'm able to successfully parse all sample VCDs.

  • Consolidate error messages and add cursors throughout.

  • Consider what to do with don't care values will probably just convert them to strings for now.

  • Include line and possible column numbers

  • Take a look at GTKWave parser to compare effificiency.

  • Send survey to community channel.

Probably No Longer Needed

  • Should insert nodes in BFS order