library (nem_basic) { comment : "Manually created liberty with more gates - ignore any timing information"; date : "$April 26th 2024$"; revision : "0.2"; delay_model : table_lookup; capacitive_load_unit (1,pf); time_unit : "1ns"; current_unit : "1uA"; voltage_unit : "1V"; voltage_map (VCC,15); voltage_map (GND,0); default_cell_leakage_power : 0; default_fanout_load : 1; default_max_transition : 500; default_output_pin_cap : 0; input_threshold_pct_rise : 50.0; input_threshold_pct_fall : 50.0; output_threshold_pct_rise : 50.0; output_threshold_pct_fall : 50.0; slew_lower_threshold_pct_rise : 20.0; slew_lower_threshold_pct_fall : 20.0; slew_upper_threshold_pct_rise : 80.0; slew_upper_threshold_pct_fall : 80.0; slew_derate_from_library : 1.0; nom_process : 1; nom_temperature : 125; nom_voltage : 15; operating_conditions (NEM_BASIC_COND) { process : 1; temperature : 125; voltage : 29; } default_operating_conditions : NEM_BASIC_COND; lu_table_template (delay_template_2x2) { variable_1 : input_net_transition; variable_2 : total_output_net_capacitance; index_1("0.01,0.1"); index_2("0.02,0.2"); } lu_table_template (constraint_template_2x2) { variable_1 : constrained_pin_transition; variable_2 : related_pin_transition; index_1("0.01,0.1"); index_2("0.02,0.2"); } cell(inv_3T) { area : 1160; cell_footprint : inv_3T; /* cell_description : "NEM 3T Inverter"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (in) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (out) { direction : "output"; related_ground_pin : GND; related_power_pin : VCC; function : "!(in)"; max_capacitance : 10; max_fanout : 10; max_transition : 500; timing () { related_pin : "in"; timing_sense : negative_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } } cell(buf_3T) { area : 2240; cell_footprint : buf_3T; /* cell_description : "NEM 3T Buffer"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (in) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (out) { direction : "output"; related_ground_pin : GND; related_power_pin : VCC; function : "in"; max_capacitance : 10; max_fanout : 10; max_transition : 500; timing () { related_pin : "in"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } } cell(nand_3T) { area : 2832; cell_footprint : nand_3T; /* cell_description : "NEM 3T 2-Input NAND"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (a) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (b) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (out) { direction : "output"; related_ground_pin : GND; related_power_pin : VCC; function : "!(a&b)"; max_fanout : 10; timing () { related_pin : "a"; timing_sense : negative_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "b"; timing_sense : negative_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } } cell(and_3T) { area : 3912; cell_footprint : and_3T; /* cell_description : "NEM 3T 2-Input AND"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (a) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (b) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (out) { direction : "output"; related_ground_pin : GND; related_power_pin : VCC; function : "a&b"; max_fanout : 10; timing () { related_pin : "a"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "b"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } } cell(nor_3T) { area : 2832; cell_footprint : nor_3T; /* cell_description : "NEM 3T 2-Input NOR"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (a) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (b) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (out) { direction : "output"; related_ground_pin : GND; related_power_pin : VCC; function : "!(a|b)"; max_fanout : 10; timing () { related_pin : "a"; timing_sense : negative_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "b"; timing_sense : negative_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } } cell(or_3T) { area : 3952; cell_footprint : or_3T; /* cell_description : "NEM 3T 2-Input OR"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (a) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (b) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (out) { direction : "output"; related_ground_pin : GND; related_power_pin : VCC; function : "a|b"; max_fanout : 10; timing () { related_pin : "a"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "b"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } } cell(xnor_3T) { area : 7824; cell_footprint : xnor_3T; /* cell_description : "NEM 3T 2-Input XNOR"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (a) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (b) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (out) { direction : "output"; related_ground_pin : GND; related_power_pin : VCC; function : "!(a^b)"; max_fanout : 10; timing () { related_pin : "a"; timing_sense : non_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "b"; timing_sense : non_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } } cell(xor_3T) { area : 7824; cell_footprint : xor_3T; /* cell_description : "NEM 3T 2-Input XOR"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (a) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (b) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (out) { direction : "output"; related_ground_pin : GND; related_power_pin : VCC; function : "a^b"; max_fanout : 10; timing () { related_pin : "a"; timing_sense : non_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "b"; timing_sense : non_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } } cell(mux_3T) { area : 8000; cell_footprint : mux_3T; /* cell_description : "NEM 3T 2-Input MUX"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } /*bundle(in) { members(in_0,in_1); direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; }*/ pin(in_0){ direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin(in_1){ direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (sel) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (out) { direction : "output"; related_ground_pin : GND; related_power_pin : VCC; function : "(!sel & in_0) | (sel & in_1)"; max_fanout : 10; timing () { related_pin : "in_0"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "in_1"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "sel"; timing_sense : non_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } } cell(mux_4T) { area : 3472; cell_footprint : mux_4T; /* cell_description : "NEM 4T 2-Input MUX"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } /*bundle(in) { members(in_0,in_1); direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; }*/ pin(in_0){ direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin(in_1){ direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (sel) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (out) { direction : "output"; related_ground_pin : GND; related_power_pin : VCC; function : "(!sel & in_0) | (sel & in_1)"; max_fanout : 10; timing () { related_pin : "in_0"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "in_1"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "sel"; timing_sense : non_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } } cell(and_4T) { area : 3472; cell_footprint : and_4T; /* cell_description : "NEM 4T 2-Input AND based on muxiplayers pass logic"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (a) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (b) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (out) { direction : "output"; related_ground_pin : GND; related_power_pin : VCC; function : "a&b"; max_fanout : 10; timing () { related_pin : "a"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "b"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } } cell(nand_4T) { area : 4632; cell_footprint : and_4T; /* cell_description : "NEM 4T 2-Input AND based on muxiplayers pass logic"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (a) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (b) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (out) { direction : "output"; related_ground_pin : GND; related_power_pin : VCC; function : "!(a&b)"; max_fanout : 10; timing () { related_pin : "a"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "b"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } } cell(and_not_4T) { area : 3472; cell_footprint : and_4T; /* cell_description : "NEM 4T 2-Input AND based on muxiplayers pass logic having inverted input"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (a) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (b) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (out) { direction : "output"; related_ground_pin : GND; related_power_pin : VCC; function : "a&!(b)"; max_fanout : 10; timing () { related_pin : "a"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "b"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } } cell(or_4T) { area : 3472; cell_footprint : or_4T; /* cell_description : "NEM 4T 2-Input OR based on muxiplayers pass logic"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (a) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (b) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (out) { direction : "output"; related_ground_pin : GND; related_power_pin : VCC; function : "a|b"; max_fanout : 10; timing () { related_pin : "a"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "b"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } } cell(nor_4T) { area : 4632; cell_footprint : or_4T; /* cell_description : "NEM 4T 2-Input NOR based on muxiplayers pass logic"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (a) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (b) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (out) { direction : "output"; related_ground_pin : GND; related_power_pin : VCC; function : "a|b"; max_fanout : 10; timing () { related_pin : "a"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "b"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } } cell(or_not_4T) { area : 3472; cell_footprint : or_4T; /* cell_description : "NEM 4T 2-Input OR based on muxiplayers pass logic having inverted input"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (a) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (b) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (out) { direction : "output"; related_ground_pin : GND; related_power_pin : VCC; function : "a|!(b)"; max_fanout : 10; timing () { related_pin : "a"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "b"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } } cell(xor_4T) { area : 4632; cell_footprint : xor_3T; /* cell_description : "NEM 4T 2-Input XOR based on 2 4T and 3T inverter"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (a) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (b) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (out) { direction : "output"; related_ground_pin : GND; related_power_pin : VCC; function : "a^b"; max_fanout : 10; timing () { related_pin : "a"; timing_sense : non_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "b"; timing_sense : non_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } } cell(xnor_4T) { area : 4632; cell_footprint : xor_3T; /* cell_description : "NEM 4T 2-Input XNOR based on 2 4T and 3T inverter"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (a) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (b) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (out) { direction : "output"; related_ground_pin : GND; related_power_pin : VCC; function : "!(a^b)"; max_fanout : 10; timing () { related_pin : "a"; timing_sense : non_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "b"; timing_sense : non_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } } cell(xor_4T_test) { area : 1; cell_footprint : xor_3T; /* cell_description : "NEM 4T 2-Input XOR based on 2 4T needs an inverted input"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (a) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (b) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (c) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (out) { direction : "output"; related_ground_pin : GND; related_power_pin : VCC; function : "(a&c)|(!(a)&b)"; max_fanout : 10; timing () { related_pin : "a"; timing_sense : non_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "b"; timing_sense : non_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } pin_opposite("b","c"); } /* cell(SR_latch) { area : 2704; cell_footprint : SR_latch; cell_description : "NEM based S-R type Latch"; pin (S) { direction : "input"; } pin (R) { direction : "input"; } pin (Q) { direction : "output"; function : "IQ"; } pin (Q_bar) { direction : "output"; function : "IQB"; } latch (IQ,IQB) { preset : "S" clear : "R" clear_preset_var1 : L; clear_preset_var2 : L; } statetable (" R S ", " IQ IQB "){ table : "H L : - - : L H ,\ L H : - - : H L ,\ H H : - - : L L ,\ L L : - - : N N"; } } */ cell(D_latch) { area : 9448; cell_footprint : D_latch; /* cell_description : "NEM based D type Latch"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (D) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; /* data_in_type : data;*/ /* timing() { related_pin : "EN"; timing_type : hold_rising; rise_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("-0.2,-2.0","-0.21,-2.1"); } fall_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","-0.21,4.1"); } } timing() { related_pin : "EN"; timing_type : setup_rising; rise_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("-0.2,-2.0","-0.21,-2.1"); } fall_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","-0.21,4.1"); } } */ } pin (EN) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (Q) { direction : "output"; function : "QOUT"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; /* timing () { related_pin : "D"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "EN"; timing_sense : non_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } */ } pin (Q_bar) { direction : "output"; function : "QBOUT"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; /* timing () { related_pin : "D"; timing_sense : negative_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "EN"; timing_sense : non_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } */ } latch (QOUT,QBOUT) { enable : "EN"; data_in : "D"; } } cell(D_latch_rst) { area : 13432; cell_footprint : D_latch_rst; /* cell_description : "NEM based D type Latch with reset"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (D) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; /* data_in_type : data;*/ } pin (EN) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (rst) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (Q) { direction : "output"; function : "QOUT"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; timing () { related_pin : "D"; timing_sense : positive_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "EN"; timing_sense : non_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4darkblue.0","0.21,4.1"); } } } pin (Q_bar) { direction : "output"; function : "QBOUT"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; timing () { related_pin : "D"; timing_sense : negative_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } timing () { related_pin : "EN"; timing_sense : non_unate; timing_type : combinational; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } latch (QOUT,QBOUT) { enable : "EN"; data_in : "D"; clear : "rst"; } } cell(D_FF) { area : 20056; cell_footprint : D_FF; /* cell_description : "NEM based M-S D type Flip Flop"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (D) { nextstate_type : data; direction : "input"; related_ground_pin : GND; related_power_pin : VCC; max_transition : 0.2; capacitance : 1; timing () { related_pin : "CLK"; timing_type : hold_rising; rise_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("-0.2,-2.0","-0.21,-2.1"); } fall_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","-0.21,4.1"); } } timing () { related_pin : "CLK"; timing_type : setup_rising; rise_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","-0.21,4.1"); } } } pin (CLK) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (Q) { direction : "output"; function : "QOUT"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; timing () { related_pin : "CLK"; timing_sense : non_unate; timing_type : rising_edge; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } pin (Q_bar) { direction : "output"; function : "QBOUT"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; timing () { related_pin : "CLK"; timing_sense : non_unate; timing_type : rising_edge; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } ff (QOUT,QBOUT) { clocked_on : "CLK"; next_state : "D"; } } cell(D_FF_rst) { area : 28184; cell_footprint : D_FF_rst; /* cell_description : "NEM based M-S D type Flip Flop with reset"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (D) { nextstate_type : data; direction : "input"; related_ground_pin : GND; related_power_pin : VCC; max_transition : 0.2; capacitance : 1; timing () { related_pin : "CLK"; timing_type : hold_rising; rise_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("-0.2,-2.0","-0.21,-2.1"); } fall_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","-0.21,4.1"); } } timing () { related_pin : "CLK"; timing_type : setup_rising; rise_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,-4.0","0.21,4.1"); } } } pin (rst) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; timing () { related_pin : "CLK"; timing_type : recovery_rising; rise_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("-0.2,-2.0","-0.21,-2.1"); } } timing () { related_pin : "CLK"; timing_type : removal_rising; rise_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } } } pin (CLK) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (Q) { direction : "output"; function : "QOUT"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; timing () { related_pin : "CLK"; timing_sense : non_unate; timing_type : rising_edge; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } pin (Q_bar) { direction : "output"; function : "QBOUT"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; timing () { related_pin : "CLK"; timing_sense : non_unate; timing_type : rising_edge; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } ff (QOUT,QBOUT) { clear : "rst"; clocked_on : "CLK"; next_state : "D"; } } /* SCAN FUNCTIONALITY HASN'T BEEN ADDED YET */ cell(S_FF) { area : 20056; cell_footprint : D_FF; /* cell_description : "NEM based M-S D type Flip Flop with scan functionality";*/ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (D) { nextstate_type : data; direction : "input"; related_ground_pin : GND; related_power_pin : VCC; max_transition : 0.2; capacitance : 1; timing () { related_pin : "CLK"; timing_type : hold_rising; rise_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("-0.2,-2.0","-0.21,-2.1"); } fall_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","-0.21,4.1"); } } timing () { related_pin : "CLK"; timing_type : setup_rising; rise_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","-0.21,4.1"); } } } pin (SI) { nextstate_type : data; direction : "input"; related_ground_pin : GND; related_power_pin : VCC; max_transition : 0.2; capacitance : 1; timing () { related_pin : "CLK"; timing_type : hold_rising; rise_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("-0.2,-2.0","-0.21,-2.1"); } fall_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","-0.21,4.1"); } } timing () { related_pin : "CLK"; timing_type : setup_rising; rise_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","-0.21,4.1"); } } } pin (CLK) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (Q) { direction : "output"; function : "QOUT"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; timing () { related_pin : "CLK"; timing_sense : non_unate; timing_type : rising_edge; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } pin (Q_bar) { direction : "output"; function : "QBOUT"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; timing () { related_pin : "CLK"; timing_sense : non_unate; timing_type : rising_edge; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } ff (QOUT,QBOUT) { clocked_on : "CLK"; next_state : "D"; } } /* SCAN FUNCTIONALITY HASN'T BEEN ADDED YET */ cell(S_FF_rst) { area : 28184; cell_footprint : S_FF_rst; /* cell_description : "NEM based M-S D type Flip Flop with reset and scan functionality"; */ pg_pin (VCC) { pg_type : primary_power; voltage_name : "VCC"; } pg_pin (GND) { pg_type : primary_ground; voltage_name : "GND"; } pin (D) { nextstate_type : data; direction : "input"; related_ground_pin : GND; related_power_pin : VCC; max_transition : 0.2; capacitance : 1; timing () { related_pin : "CLK"; timing_type : hold_rising; rise_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("-0.2,-2.0","-0.21,-2.1"); } fall_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","-0.21,4.1"); } } timing () { related_pin : "CLK"; timing_type : setup_rising; rise_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,-4.0","0.21,4.1"); } } } pin (rst) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; timing () { related_pin : "CLK"; timing_type : recovery_rising; rise_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("-0.2,-2.0","-0.21,-2.1"); } } timing () { related_pin : "CLK"; timing_type : removal_rising; rise_constraint (constraint_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } } } pin (CLK) { direction : "input"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; } pin (Q) { direction : "output"; function : "QOUT"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; timing () { related_pin : "CLK"; timing_sense : non_unate; timing_type : rising_edge; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } pin (Q_bar) { direction : "output"; function : "QBOUT"; related_ground_pin : GND; related_power_pin : VCC; capacitance : 1; timing () { related_pin : "CLK"; timing_sense : non_unate; timing_type : rising_edge; cell_rise (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } rise_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } cell_fall (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,2.0","0.21,2.1"); } fall_transition (delay_template_2x2) { index_1 ("0.01,0.1"); index_2 ("0.02,0.2"); values ("0.2,4.0","0.21,4.1"); } } } ff (QOUT,QBOUT) { clear : "rst"; clocked_on : "CLK"; next_state : "D"; } } }