# vcd_rust


[](https://github.com/SeanMcLoughlin/vcd_rust)
A value change dump parser for the Rust programming language.
The goal for this project is to parse VCD files into a similar data structure as
[yaml-cpp](https://github.com/jbeder/yaml-cpp) does for YAML files, create
understandable data structure representations of a VCD file, and provide clear error
messages if parsing fails.
### What is value change dump?
Value change dump is a file format specifying how a digital waveform appears. It's mainly used for
digital waveform viewers, among other electronic design automation (EDA) tools.
You can read more about it on it's [Wikipedia article](https://en.wikipedia.org/wiki/Value_change_dump).
### Example
The below file example is a simplified version of the file on the
[VCD Wikipedia article](https://en.wikipedia.org/wiki/Value_change_dump).
Given this file named `example.vcd` with the contents:
```
$date August 9th, 2020 $end
$version 1.0 $end
$comment This is an example $end
$timescale 1 ps $end
$scope module top $end
$var wire 8 # data $end
$upscope $end
$enddefinitions $end
$dumpvars
bxxxxxxxx #
$end
#0
b10000001 #
#5
b10101010 #
```
This file can be parsed with the `load_from_file()` method:
```rust
extern crate vcd_rust;
use vcd_rust::{load_from_file, types::timescale::{TimeScale, TimeUnit}};
fn main() {
let vcd = load_from_file("example.vcd").unwrap();
assert_eq!(vcd.date, "August 9th, 2020"); // Date
assert_eq!(vcd.version, "1.0"); // Version
assert_eq!(vcd.comments, vec!["This is an example"]); // Comments as a vector
assert_eq!(vcd.timescale, TimeScale::init(1, TimeUnit::PS)); // Custom type for timescale
// ...among other data structures
}
```
Likewise, the string representation of a VCD file can be parsed with the `load_from_string()` method:
```rust
extern crate vcd_rust;
use vcd_rust::{load_from_string, vcd::VCD};
fn parse_vcd_string() -> VCD {
let vcd_string = "$date August 9th, 2020 $end..."; // etc.
return load_from_string(vcd_string).unwrap();
}
```
### References
* [Explanation of VCD format](https://web.archive.org/web/20120323132708/http://www.beyondttl.com/vcd.php)