liberty-db
Highlight Features
- Support all
liberty
attributes with typed datastructure, rather than syntax tree (AST) only, in the definition of Liberty Version R-2020.09, September 2020 - Support
liberty
boolean expression syntax, use binary decesion diagram (BDD) to identify (hashing) - Parser & formatter are implemented by static macros, providing a good preformance and tiny ~3MB
parser & formatter
binary. See benchmark summary - Support generics user-defined context for library, cell, and more.
- Support
define define_group
user-defined attributes - Verified with library-complier, well defined document, and examples provided
Usage
This library is implemented in Rust, with document.
[]
= "0.11"
One basic demo here:
use ;
use ;
static TEMPLATE: &str = r#"
library(demo) {
time_unit : "1ps";
voltage_unit : "10mV";
current_unit : "1uA";
operating_conditions ( typical ) {
process : 1;
voltage : 1.1;
}
lu_table_template(delay_template_4x5) {
variable_1 : total_output_net_capacitance;
variable_2 : input_net_transition;
index_1 ("1000.0, 1001.0, 1002.0, 1003.0");
index_2 ("1000.0, 1001.0, 1002.0, 1003.0, 1004.0");
}
cell (DFF) {
pin (D) {}
pin (CK) {}
pin (Q) {}
}
}"#;
See more examples, and run them if you clone this repo:
# example0
cargo run --example 0_parse_fmt
# example1
cargo run --example 1_parse_fmt_file -- dev/tech/cases/ocv.lib
# example2
cargo run --example 2_prune_lib -- dev/tech/cases/ocv.lib
# example3
cargo run --example 3_lookup_timing
Or you can download the releases/latest/examples.zip, then
cd ./examples_x86_64-unknown-linux-musl
# example0
./0_parse_fmt
# example1
./1_parse_fmt_file dev/tech/cases/ocv.lib
# example2
./2_prune_lib dev/tech/cases/ocv.lib
# example3
./3_lookup_timing
Benchmark
Basic information as follow, see latest benchmark summary.
Project Comparison
Dev
Run unit-test and regression.
cargo test --release
Run benchmark, it will takes 40mins.
cargo bench --package dev --bench benchmark --features bench
TODO
- Parse: use
nom_locate
- Parse: check all rules
- Parse: Linked Group
- Parse: async
- MISC: bitcode support