#文件格式 #liberty #单元 # #EDA

liberty-parse

Liberty 文件格式解析器

1 个不稳定版本

0.1.0 2019 年 8 月 11 日

#6#liberty

Download history 18/week @ 2024-04-02

每月下载量 57

MIT 许可协议

81KB
1K SLoC

liberty-parse

Rust 的 Liberty 文件格式解析器

示例用法

解析 Liberty 文件中的库

use liberty_parse::parse_lib;

let lib_str = r#"
library(sample) {
    cell(AND2) {
        area: 1;
    }
}
"#;

for lib in parse_lib(lib_str).unwrap() {
    println!("Library '{}' has {} cells", lib.name, lib.cells.len());
    if let Some(cell) = lib.cells.get("AND2") {
        let area = cell.simple_attributes.get("area").map_or(0.0, |v| v.float());
        println!("Cell AND2 has area: {}", area);
    } else {
        println!("Cell AND2 doesn't exist!");
    }
}

限制

  • 无法自动解析来自 include 语句的文件

  • 无法解析引脚名称中的总线语法。例如

        pin (X[0:3]){
        }
    

lib.rs:

此软件包读取 Liberty 格式文件,通常由 EDA 工具用于描述库单元(包括标准单元、硬 IP 等)。

示例

use liberty_parse::parse_lib;

let lib_str = r#"
library(sample) {
    cell(AND2) {
        area: 1;
    }
}
"#;

for lib in parse_lib(lib_str).unwrap() {
    println!("Library '{}' has {} cells", lib.name, lib.cells.len());
    let area = lib
        .cells
        .get("AND2")
        .and_then(|c| c.simple_attributes.get("area"))
        .map_or(-1.0, |v| v.float());
    println!("Cell AND2 has area: {}", area);
}

依赖项

~1.5MB
~26K SLoC