3 个版本
0.0.4 | 2024年6月7日 |
---|---|
0.0.3 | 2024年6月4日 |
0.0.2 | 2021年12月10日 |
#499 在 解析器实现 中
117 每月下载量
在 libreda-sta 中使用
81KB
2K SLoC
Liberty-IO
Liberty-io 是一个 Rust 库,用于解析和写入 'liberty' 格式,该格式用于描述数字 CMOS 标准单元的时序特性。
由于 liberty 文件可能非常大(高达数吉字节),此解析器不需要将整个文件加载到内存中,而是从磁盘流式传输。
示例
读取 liberty 文件
use liberty_io;
use std::fs::File;
use std::io::BufReader;
// Create a buffered reader for faster reading.
let f = File::open("./tests/data/freepdk45/gscl45nm.lib").expect("Failed to open file.");
let mut buf = BufReader::new(f);
// Read the file.
let read_result = liberty_io::read_liberty_bytes(&mut buf);
// Abort the program if the library could not be read.
let library_group = read_result.expect("Failed to read library!");
// Access the content.
assert_eq!(&library_group.name, "library");
assert_eq!(&library_group.arguments[0].to_string(), "gscl45nm");
// List all cell names. (There's only DFFNEGX1 in the provided example file.)
println!("Library cells:");
for group in &library_group.groups {
if group.name == "cell" {
println!("* {}", &group.arguments[0]);
}
}
// There's some utility functions for accessing the library structure.
// Find a cell group by it's name.
let dffnegx1 = liberty_io::util::find_cell(&library_group, "DFFNEGX1");
assert!(dffnegx1.is_some());
依赖关系
~4.5MB
~94K SLoC