use crate::{
ast::{AttributeList, GroupComments, GroupFn},
ccsn::{CCSNStage, ReceiverCapacitance},
common::items::WordSet,
expression::{logic, BooleanExpression},
internal_power::InternalPower,
timing::Timing,
ArcStr, GroupSet, NotNan,
};
mod items;
pub use items::*;
#[derive(Debug, Default, Clone)]
#[derive(liberty_macros::Group)]
#[mut_set::derive::item(
sort,
macro(derive(Debug, Clone,Default);)
)]
#[derive(serde::Serialize, serde::Deserialize)]
pub struct Pin {
#[id]
#[liberty(name)]
pub name: ArcStr,
#[liberty(comments)]
pub comments: GroupComments<Self>,
#[liberty(undefined)]
pub undefined: AttributeList,
#[liberty(simple(type = Option))]
pub driver_waveform_rise: Option<ArcStr>,
#[liberty(simple(type = Option))]
pub driver_waveform_fall: Option<ArcStr>,
#[liberty(simple)]
pub related_ground_pin: ArcStr,
#[liberty(simple)]
pub related_power_pin: ArcStr,
#[liberty(simple(type = Option))]
pub alive_during_partial_power_down: Option<bool>,
#[liberty(simple(type = Option))]
pub power_down_function: Option<BooleanExpression>,
#[liberty(simple(type = Option))]
pub alive_during_power_up: Option<bool>,
#[liberty(simple(type = Option))]
pub always_on: Option<bool>,
#[liberty(simple(type = Option))]
pub antenna_diode_type: Option<AntennaDiodeType>,
#[liberty(simple)]
pub antenna_diode_related_ground_pins: WordSet,
#[liberty(simple)]
pub antenna_diode_related_power_pins: WordSet,
#[liberty(simple(type = Option))]
pub bit_width: Option<usize>,
#[liberty(simple(type = Option))]
pub capacitance: Option<f64>,
#[liberty(simple(type = Option))]
pub clamp_0_function: Option<BooleanExpression>,
#[liberty(simple(type = Option))]
pub clamp_1_function: Option<BooleanExpression>,
#[liberty(simple(type = Option))]
pub clamp_latch_function: Option<BooleanExpression>,
#[liberty(simple(type = Option))]
pub clamp_z_function: Option<BooleanExpression>,
#[liberty(simple(type = Option))]
pub clock: Option<bool>,
#[liberty(simple(type = Option))]
pub clock_gate_clock_pin: Option<bool>,
#[liberty(simple(type = Option))]
pub clock_gate_enable_pin: Option<bool>,
#[liberty(simple(type = Option))]
pub clock_gate_test_pin: Option<bool>,
#[liberty(simple(type = Option))]
pub clock_gate_obs_pin: Option<bool>,
#[liberty(simple(type = Option))]
pub clock_gate_out_pin: Option<bool>,
#[liberty(simple(type = Option))]
pub clock_isolation_cell_clock_pin: Option<bool>,
#[liberty(simple(type = Option))]
pub complementary_pin: Option<ArcStr>,
#[liberty(simple)]
pub connection_class: WordSet,
#[liberty(simple(type = Option))]
pub direction: Option<Direction>,
#[liberty(simple(type = Option))]
pub dont_fault: Option<DontFault>,
#[liberty(simple(type = Option))]
pub drive_current: Option<f64>,
#[liberty(simple(type = Option))]
pub driver_type: Option<DriverType>,
#[liberty(simple(type = Option))]
pub fall_capacitance: Option<NotNan<f64>>,
#[liberty(simple(type = Option))]
pub fall_current_slope_after_threshold: Option<f64>,
#[liberty(simple(type = Option))]
pub fall_current_slope_before_threshold: Option<f64>,
#[liberty(simple(type = Option))]
pub fall_time_after_threshold: Option<f64>,
#[liberty(simple(type = Option))]
pub fall_time_before_threshold: Option<f64>,
#[liberty(simple(type = Option))]
pub fanout_load: Option<f64>,
#[liberty(simple(type = Option))]
pub fault_model: Option<TwoValue>,
#[liberty(simple(type = Option))]
pub function: Option<BooleanExpression>,
#[liberty(simple(type = Option))]
pub has_builtin_pad: Option<BooleanExpression>,
#[liberty(simple(type = Option))]
pub hysteresis: Option<bool>,
#[liberty(simple(type = Option))]
pub illegal_clamp_condition: Option<BooleanExpression>,
#[liberty(simple)]
pub input_map: WordSet,
#[liberty(simple(type = Option))]
pub input_signal_level: Option<ArcStr>,
#[liberty(simple(type = Option))]
pub input_voltage: Option<ArcStr>,
#[liberty(simple(type = Option))]
pub internal_node: Option<ArcStr>,
#[liberty(simple(type = Option))]
pub inverted_output: Option<bool>,
#[liberty(simple(type = Option))]
pub is_pad: Option<bool>,
#[liberty(simple(type = Option))]
pub is_unconnected: Option<bool>,
#[liberty(simple(type = Option))]
pub max_capacitance: Option<f64>,
#[liberty(simple(type = Option))]
pub max_fanout: Option<f64>,
#[liberty(simple(type = Option))]
pub max_input_delta_overdrive_high: Option<f64>,
#[liberty(simple(type = Option))]
pub max_input_delta_underdrive_high: Option<f64>,
#[liberty(simple(type = Option))]
pub max_transition: Option<f64>,
#[liberty(simple(type = Option))]
pub min_capacitance: Option<f64>,
#[liberty(simple(type = Option))]
pub min_fanout: Option<f64>,
#[liberty(simple(type = Option))]
pub min_period: Option<f64>,
#[liberty(simple(type = Option))]
pub min_pulse_width_high: Option<f64>,
#[liberty(simple(type = Option))]
pub min_pulse_width_low: Option<f64>,
#[liberty(simple(type = Option))]
pub min_transition: Option<f64>,
#[liberty(simple(type = Option))]
pub multicell_pad_pin: Option<bool>,
#[liberty(simple(type = Option))]
pub nextstate_type: Option<NextstateType>,
#[liberty(simple(type = Option))]
pub output_signal_level: Option<ArcStr>,
#[liberty(simple(type = Option))]
pub output_signal_level_high: Option<f64>,
#[liberty(simple(type = Option))]
pub output_signal_level_low: Option<f64>,
#[liberty(simple(type = Option))]
pub output_voltage: Option<ArcStr>,
#[liberty(simple(type = Option))]
pub pin_func_type: Option<PinFuncType>,
#[liberty(simple(type = Option))]
pub prefer_tied: Option<PreferTied>,
#[liberty(simple(type = Option))]
pub primary_output: Option<bool>,
#[liberty(simple(type = Option))]
pub pulling_current: Option<f64>,
#[liberty(simple(type = Option))]
pub pulling_resistance: Option<f64>,
#[liberty(simple(type = Option))]
pub restore_action: Option<logic::Normal>,
#[liberty(simple(type = Option))]
pub restore_edge_type: Option<RestoreEdgeType>,
#[liberty(simple(type = Option))]
pub rise_capacitance: Option<NotNan<f64>>,
#[liberty(simple(type = Option))]
pub rise_current_slope_after_threshold: Option<f64>,
#[liberty(simple(type = Option))]
pub rise_current_slope_before_threshold: Option<f64>,
#[liberty(simple(type = Option))]
pub rise_time_after_threshold: Option<f64>,
#[liberty(simple(type = Option))]
pub rise_time_before_threshold: Option<f64>,
#[liberty(simple(type = Option))]
pub save_action: Option<logic::Normal>,
#[liberty(simple(type = Option))]
pub signal_type: Option<SignalType>,
#[liberty(simple(type = Option))]
pub slew_control: Option<SlewControl>,
#[liberty(simple(type = Option))]
pub state_function: Option<BooleanExpression>,
#[liberty(simple(type = Option))]
pub test_output_only: Option<bool>,
#[liberty(simple(type = Option))]
pub three_state: Option<BooleanExpression>,
#[liberty(simple(type = Option))]
pub x_function: Option<BooleanExpression>,
#[liberty(complex(type = Option))]
pub fall_capacitance_range: Option<(f64, f64)>,
#[liberty(complex(type = Option))]
pub rise_capacitance_range: Option<(f64, f64)>,
#[liberty(group(type=Set))]
pub internal_power: GroupSet<InternalPower>,
pub tlatch: (),
#[liberty(group(type=Set))]
pub timing: GroupSet<Timing>,
#[liberty(group(type=Set))]
pub receiver_capacitance: GroupSet<ReceiverCapacitance>,
#[liberty(group(type=Set))]
pub input_ccb: GroupSet<CCSNStage>,
#[liberty(group(type=Set))]
pub output_ccb: GroupSet<CCSNStage>,
#[liberty(group(type=Set))]
pub ccsn_first_stage: GroupSet<CCSNStage>,
#[liberty(group(type=Set))]
pub ccsn_last_stage: GroupSet<CCSNStage>,
}
impl GroupFn for Pin {}