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-08-07 18:57:58 -04:00
src now running much faster, but due for refactor 2022-08-07 18:57:58 -04:00
test-vcd-files trying to get filename and linenumber 2022-08-04 13:19:52 -04:00
.gitignore seems to be able to parse signal tree 2022-07-14 16:46:11 -04:00
Cargo.toml still not getting line numbers in release mode 2022-08-04 14:01:46 -04:00
LICENSE Create LICENSE 2022-07-19 13:49:39 -04:00
README.md now running much faster, but due for refactor 2022-08-07 18:57:58 -04:00

Copyright - Yehowshua Immanuel

A High performance, VCD Parser written in Rust

Current Features

  • pretty fast, parses 3.04 GB VCD file in ~27.23s on M1 Macbook Air with respect to 30s with GTKWave on the same device. FastWave currently offers highly robust error(at least on the sample VCD files in this repository) handling which GTKWave doesn't have.

    I noticed that when running FastWave in the VsCode terminal as opposed to the MacOS system terminal or the Lapce terminal.

Current Limitations

Unable to handle VCD files that have signals with more than 2^32 - 1 = 4,294,967,295 deltas/changes.

Running

This repository comes with several smaller VCD files emitted from various EDA tools. If you want a larger VCD file, grab one 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

Testing on Bad Files

You may wish to test the parser on a malformed VCD just to make sure that the parser gives useful/sane errors.

Here's a command to test on a malformed VCD: cargo run --release test-vcd-files/VCD_file_with_errors.vcd

TODO

Features

  • macro for getting line number when propagating errors
  • search for any ok_or's
  • search for any unwraps or any direct vectors indexing
  • re-order all signal timelines as binary balanced trees with respect to timestamps - support multithreaded re-ordering
  • looks into making a macro for filename and linenumber later
  • Print out git commit or release number.
  • Should be able to load waveform whilst viewing it live. - could be quite challenging to implement for various reasons
  • Take a look at GTKWave parser to compare efficiency.

Repairs

  • make a custom date parser for possibly up to 18 different versions(that is, for each possible tool).
  • Consolidate error messages and add cursors throughout.
  • Fix warnings especially usage and restriction warnings once I'm able to successfully parse all sample VCDs.

Code Consistency

  • Change error messages to line and filenames. Go through all calls to format! whilst also keeping performance in mind.

Marketing

  • Send survey to community channel.