reda_lib/model/
pin.rs

1use reda_lib_macro::model;
2use crate::lib_enum;
3
4use super::LibExpr;
5
6#[model]
7#[derive(Debug, Clone, Default)]
8pub struct LibPin {
9    pub name: String,
10
11    // Simple attr
12    pub alive_during_power_up: Option<bool>,
13    pub always_on: Option<bool>,
14
15    pub antenna_diode_type: Option<LibAntennaDiodeType>,
16    pub antenna_diode_related_ground_pins: Option<String>,
17    pub antenna_diode_related_power_pins: Option<String>,
18
19    pub bit_width: Option<usize>,
20
21    pub capacitance: Option<f64>,
22    pub fall_capacitance: Option<f64>,
23    pub fanout_load: Option<f64>,
24    pub drive_current: Option<f64>,
25    pub fall_current_slope_after_threshold: Option<f64>,
26    pub fall_current_slope_before_threshold: Option<f64>,
27    pub fall_time_after_threshold: Option<f64>,
28    pub fall_time_before_threshold: Option<f64>,
29
30    pub max_capacitance: Option<f64>,
31    pub min_capacitance: Option<f64>,
32    pub max_fanout: Option<f64>,
33    pub min_fanout: Option<f64>,
34    pub max_transition: Option<f64>,
35    pub min_transition: Option<f64>,
36    pub min_period: Option<f64>,
37    pub min_pulse_width_high: Option<f64>,
38    pub min_pulse_width_low: Option<f64>,
39    pub max_input_delta_overdrive_high: Option<f64>,
40    pub max_input_delta_underdrive_high: Option<f64>,
41
42    pub clamp_0_function: Option<String>,
43    pub clamp_1_function: Option<String>,
44    pub clamp_latch_function: Option<String>,
45    pub clamp_z_function: Option<String>,
46    pub function: Option<LibExpr>,
47    pub illegal_clamp_condition: Option<String>,
48    pub complementary_pin: Option<String>,
49    pub nextstate_type: Option<LibNextStateType>,
50
51    pub clock: Option<bool>,
52    pub clock_gate_clock_pin: Option<bool>,
53    pub clock_gate_enable_pin: Option<bool>,
54    pub clock_gate_test_pin: Option<bool>,
55    pub clock_gate_obs_pin: Option<bool>,
56    pub clock_gate_out_pin: Option<bool>,
57    pub clock_isolation_cell_clock_pin: Option<bool>,
58
59    pub direction: LibPinDirection,
60    pub driver_type: Option<LibDriverType>,
61    pub output_signal_level: Option<String>,
62    pub output_signal_level_high: Option<f64>,
63    pub output_signal_level_low: Option<f64>,
64    pub output_voltage: Option<String>,
65    pub input_signal_level: Option<String>,
66    pub input_voltage: Option<String>,
67
68    pub has_builtin_pad: Option<bool>,
69    pub hysteresis: Option<bool>,
70    pub is_pad: Option<bool>,
71    pub is_unconnected: Option<bool>,
72    pub multicell_pad_pin: Option<bool>,
73    pub inverted_output: Option<bool>,
74
75    pub connection_class: Option<String>,
76    pub fault_model: Option<String>,
77    pub dont_fault: Option<LibDontFault>,
78    pub internal_node: Option<String>,
79    pub input_map: Option<String>,
80
81    pub pin_func_type: Option<LibPinFuncType>,
82    pub primary_output: Option<bool>,
83    pub pulling_current: Option<f64>,
84    pub pulling_resistance: Option<f64>,
85    pub restore_action: Option<LibAction>,
86    pub restore_edge_type: Option<LibRestoreEdgeType>,
87    pub rise_capacitance: Option<f64>,
88    pub rise_current_slope_after_threshold: Option<f64>,
89    pub rise_current_slope_before_threshold: Option<f64>,
90    pub rise_time_after_threshold: Option<f64>,
91    pub rise_time_before_threshold: Option<f64>,
92    pub save_action: Option<LibAction>,
93    pub signal_type: Option<LibSignalType>,
94    pub slew_control: Option<LibSlewControl>,
95    pub state_function: Option<LibExpr>,
96    pub test_output_only: Option<bool>,
97    pub three_state: Option<LibExpr>,
98    pub x_function: Option<LibExpr>,
99
100    // Complex attr
101    pub fall_capacitance_range: Option<[f64; 2]>,
102    pub rise_capacitance_range: Option<[f64; 2]>,
103}
104
105#[model]
106#[derive(Debug, Clone)]
107pub struct LibTiming {
108    pub related_pin: String,
109    pub timing_sense: String,
110    pub cell_fall: LibLutTable,
111    pub cell_rise: LibLutTable,
112    pub fall_transition: LibLutTable,
113    pub rise_transition: LibLutTable,
114}
115
116#[model]
117#[derive(Debug, Clone)]
118pub struct LibInternalPower {
119    pub related_pin: String,
120    pub fall_power: LibLutTable,
121    pub rise_power: LibLutTable,
122}
123
124#[model]
125#[derive(Debug, Clone)]
126pub struct LibLutTable {
127    pub name: String,
128    pub index_1: Vec<f64>,
129    pub index_2: Vec<f64>,
130    pub values: Vec<Vec<f64>>,
131}
132
133lib_enum!(LibPinDirection, input, output, inout, internal);
134
135lib_enum!(LibAntennaDiodeType, power, ground, power_and_ground);
136
137lib_enum!(LibDriverType,
138    pull_up,
139    pull_down,
140    open_drain,
141    open_source,
142    bus_hold,
143    resistive,
144    resistive0,
145    resistive1,
146);
147
148lib_enum!(LibDontFault, sa0, sa1, sao1);
149
150lib_enum!(LibNextStateType,
151    data,
152    preset,
153    clear,
154    load,
155    scan_in,
156    scan_enable,
157);
158
159lib_enum!(LibAction, l, h, r, f);
160
161lib_enum!(LibRestoreEdgeType, edge_trigger, leading, trailing);
162
163lib_enum!(LibSlewControl, low, medium, high, none);
164
165lib_enum!(LibSignalType,
166    test_scan_in,
167    test_scan_in_inverted,
168    test_scan_out,
169    test_scan_out_inverted,
170    test_scan_enable,
171    test_scan_enable_inverted,
172    test_scan_clock,
173    test_scan_clock_a,
174    test_scan_clock_b,
175    test_clock,
176);
177
178lib_enum!(LibPinFuncType,
179    clock_enable,
180    active_high,
181    active_low,
182    active_rising,
183    active_falling,
184);
185
186impl LibPin {
187    pub fn new<S: Into<String>>(name: S) -> Self {
188        Self { 
189            name: name.into(),
190            ..Default::default()
191        }
192    }
193}