reda_lib/model/
library.rs1use reda_lib_macro::model;
2use crate::{lib_enum, model::LibCell};
3
4use super::{LibCapacitiveLoadUnit, LibCurrentUnit, LibLeakagePowerUnit, LibPullingResistanceUnit, LibTimeUnit, LibVoltageUnit};
5
6#[model]
7#[derive(Debug, Clone, Default)]
8pub struct LibLibrary {
9 pub name: String,
10
11 pub date: String,
13 pub revision: Option<String>,
14 pub comment: Option<String>,
15
16 pub delay_model: LibDelayModel,
18
19 pub time_unit: LibTimeUnit,
21 pub voltage_unit: LibVoltageUnit,
22 pub capacitive_load_unit: Option<LibCapacitiveLoadUnit>,
23 pub current_unit: Option<LibCurrentUnit>,
24 pub pulling_resistance_unit: Option<LibPullingResistanceUnit>,
25 pub leakage_power_unit: Option<LibLeakagePowerUnit>,
26
27 pub nom_process: Option<f64>,
29 pub nom_temperature: Option<f64>,
30 pub nom_voltage: Option<f64>,
31 pub default_operating_conditions: Option<String>,
32
33 pub slew_lower_threshold_pct_fall: f64,
35 pub slew_lower_threshold_pct_rise: f64,
36 pub slew_upper_threshold_pct_fall: f64,
37 pub slew_upper_threshold_pct_rise: f64,
38 pub slew_derate_from_library: f64,
39 pub input_threshold_pct_fall: f64,
40 pub input_threshold_pct_rise: f64,
41 pub output_threshold_pct_fall: f64,
42 pub output_threshold_pct_rise: f64,
43 pub default_leakage_power_density: f64,
44 pub default_cell_leakage_power: f64,
45
46 pub default_inout_pin_cap: Option<f64>,
48 pub default_input_pin_cap: Option<f64>,
49 pub default_output_pin_cap: Option<f64>,
50 pub default_fanout_load: Option<f64>,
51 pub default_max_transition: Option<f64>,
52
53 pub cells: Vec<LibCell>,
54 pub operating_conditions: Vec<LibOperatingConditions>,
55}
56
57impl LibLibrary {
58 pub fn new<S: Into<String>>(name: S) -> Self {
59 Self {
60 name: name.into(),
61 ..Default::default()
62 }
63 }
64
65 pub fn cell(&self, name: &str) -> Option<&LibCell> {
66 self.cells.iter().find(|c| c.name == name)
67 }
68}
69
70#[model]
71#[derive(Debug, Clone)]
72pub struct LibOperatingConditions {
73 pub name: String,
74 pub process: f64,
75 pub voltage: f64,
76 pub temperature: f64,
77 pub calc_mode: Option<String>,
78 pub parameteri: Option<f64>,
79 pub process_label: Option<String>,
80 pub tree_type: Option<LibTreeType>,
81}
82
83
84
85lib_enum!(LibTechnology, coms, fpga);
86lib_enum!(LibDelayModel, table_lookup, polynomial);
87lib_enum!(LibTreeType, best_case_tree, balanced_tree, worst_case_tree);