1个不稳定版本
0.0.1 | 2020年10月28日 |
---|
#9 in #hdl
46KB
1.5K SLoC
vcd_rust
这是一个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