#vcd #硬件 #FPGA #HDL #EDA #解析器 #

vcd_rust

Rust编程语言的值变化转储解析器

1个不稳定版本

0.0.1 2020年10月28日

#9 in #hdl

自定义许可证

46KB
1.5K SLoC

vcd_rust

build license

这是一个Rust编程语言的值变化转储解析器。

本项目旨在将VCD文件解析成类似于yaml-cpp解析YAML文件的数据结构,创建VCD文件的可理解的数据结构表示,并在解析失败时提供清晰的错误信息。

什么是值变化转储?

值变化转储是一种文件格式,用于指定数字波形的外观。它主要用于数字波形查看器以及其他电子设计自动化(EDA)工具。你可以在它的维基百科文章上了解更多。

示例

以下文件示例是VCD维基百科文章中文件的简化版本。给定名为example.vcd的文件,其内容如下

$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 #

可以使用load_from_file()方法解析此文件

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
}

同样,可以使用load_from_string()方法解析VCD文件的字符串表示

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();
}

参考资料

依赖

~1.4–2MB
~37K SLoC