/*
 * Copyright 2022 GlobalFoundries PDK Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

library(gf180mcu_fd_sc_mcu9t5v0__ff_n40C_3v60) { 
  delay_model : table_lookup ; 
  library_features(report_delay_calculation, report_power_calculation);
  time_unit : 1ns ; 
  voltage_unit : 1V ; 
  current_unit : 1mA ; 
  capacitive_load_unit(1, pf);
  pulling_resistance_unit : 1ohm ; 
  leakage_power_unit : 1uW ; 
  input_threshold_pct_fall : 50 ; 
  input_threshold_pct_rise : 50 ; 
  output_threshold_pct_fall : 50 ; 
  output_threshold_pct_rise : 50 ; 
  slew_derate_from_library : 0.5 ; 
  slew_lower_threshold_pct_fall : 30 ; 
  slew_lower_threshold_pct_rise : 30 ; 
  slew_upper_threshold_pct_fall : 70 ; 
  slew_upper_threshold_pct_rise : 70 ;   
  default_fanout_load : 1.0000000000 ;  
  nom_process : 1 ; 
  nom_temperature : -40 ; 
  nom_voltage : 3.6 ; 
  voltage_map(VNW, 3.6);
  voltage_map(VDD, 3.6);
  voltage_map(VSS, 0);
  voltage_map(VPW, 0);

  operating_conditions(gf180mcu_fd_sc_mcu9t5v0__ff_n40C_3v60) { 
    process : 1 ; 
    temperature : -40 ; 
    voltage : 3.6 ; 
  }

  input_voltage(default) { 
    vil : 0 ; 
    vih : 3.6 ; 
    vimin : 0 ; 
    vimax : 3.6 ; 
  }

  output_voltage(default) { 
    vol : 0 ; 
    voh : 3.6 ; 
    vomin : 0 ; 
    vomax : 3.6 ; 
  }

  lu_table_template(cnst_ctin_rtin_10x10) { 
    variable_1 : constrained_pin_transition ; 
    variable_2 : related_pin_transition ; 
    index_1("1, 2, 3, 4, 5, 6, 7, 8, 9, 10");
    index_2("1, 2, 3, 4, 5, 6, 7, 8, 9, 10");
  }

  lu_table_template(ndw_ntin_nvolt_10x13) { 
    variable_1 : input_net_transition ; 
    variable_2 : normalized_voltage ; 
    index_1("1, 2, 3, 4, 5, 6, 7, 8, 9, 10");
    index_2("1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13");
  }

  lu_table_template(tmg_ntin_10) { 
    variable_1 : input_net_transition ; 
    index_1("1, 2, 3, 4, 5, 6, 7, 8, 9, 10");
  }

  lu_table_template(tmg_ntin_oload_10x10) { 
    variable_1 : input_net_transition ; 
    variable_2 : total_output_net_capacitance ; 
    index_1("1, 2, 3, 4, 5, 6, 7, 8, 9, 10");
    index_2("1, 2, 3, 4, 5, 6, 7, 8, 9, 10");
  }

  power_lut_template(pwr_tin_10) { 
    variable_1 : input_transition_time ; 
    index_1("1, 2, 3, 4, 5, 6, 7, 8, 9, 10");
  }

  power_lut_template(pwr_tin_oload_10x10) { 
    variable_1 : input_transition_time ; 
    variable_2 : total_output_net_capacitance ; 
    index_1("1, 2, 3, 4, 5, 6, 7, 8, 9, 10");
    index_2("1, 2, 3, 4, 5, 6, 7, 8, 9, 10");
  }

  normalized_driver_waveform(ndw_ntin_nvolt_10x13) { 
    driver_waveform_name : "driver_waveform_default_fall" ; 
    index_1("0.02, 0.05023, 0.1564, 0.359, 0.6747, 1.118, 1.701, 2.435, 3.331, 4.4");
    index_2("0, 0.05, 0.1674, 0.3, 0.4168, 0.5209, 0.6146, 0.7, 0.7786, 0.8518, 0.9205, 0.9857, 1");
    values("0, 0.0025, 0.005, 0.0075, 0.01, 0.0125, 0.015, 0.0175, 0.02, 0.0225, 0.025, 0.0275, 0.03",\
           "0, 0.006279, 0.01256, 0.01884, 0.02512, 0.03139, 0.03767, 0.04395, 0.05023, 0.05651, 0.06279, 0.06907, 0.07535",\
           "0, 0.01954, 0.03909, 0.05863, 0.07818, 0.09772, 0.1173, 0.1368, 0.1564, 0.1759, 0.1954, 0.215, 0.2345",\
           "0, 0.04487, 0.08975, 0.1346, 0.1795, 0.2244, 0.2692, 0.3141, 0.359, 0.4039, 0.4487, 0.4936, 0.5385",\
           "0, 0.08434, 0.1687, 0.253, 0.3374, 0.4217, 0.506, 0.5904, 0.6747, 0.7591, 0.8434, 0.9277, 1.012",\
           "0, 0.1397, 0.2794, 0.4191, 0.5589, 0.6986, 0.8383, 0.978, 1.118, 1.257, 1.397, 1.537, 1.677",\
           "0, 0.2126, 0.4252, 0.6377, 0.8503, 1.063, 1.275, 1.488, 1.701, 1.913, 2.126, 2.338, 2.551",\
           "0, 0.3044, 0.6087, 0.9131, 1.217, 1.522, 1.826, 2.131, 2.435, 2.739, 3.044, 3.348, 3.652",\
           "0, 0.4164, 0.8329, 1.249, 1.666, 2.082, 2.499, 2.915, 3.331, 3.748, 4.164, 4.581, 4.997",\
           "0, 0.55, 1.1, 1.65, 2.2, 2.75, 3.3, 3.85, 4.4, 4.95, 5.5, 6.05, 6.6");
  }

  normalized_driver_waveform(ndw_ntin_nvolt_10x13) { 
    driver_waveform_name : "driver_waveform_default_rise" ; 
    index_1("0.02, 0.05023, 0.1564, 0.359, 0.6747, 1.118, 1.701, 2.435, 3.331, 4.4");
    index_2("0, 0.05, 0.1674, 0.3, 0.4168, 0.5209, 0.6146, 0.7, 0.7786, 0.8518, 0.9205, 0.9857, 1");
    values("0, 0.0025, 0.005, 0.0075, 0.01, 0.0125, 0.015, 0.0175, 0.02, 0.0225, 0.025, 0.0275, 0.03",\
           "0, 0.006279, 0.01256, 0.01884, 0.02512, 0.03139, 0.03767, 0.04395, 0.05023, 0.05651, 0.06279, 0.06907, 0.07535",\
           "0, 0.01954, 0.03909, 0.05863, 0.07818, 0.09772, 0.1173, 0.1368, 0.1564, 0.1759, 0.1954, 0.215, 0.2345",\
           "0, 0.04487, 0.08975, 0.1346, 0.1795, 0.2244, 0.2692, 0.3141, 0.359, 0.4039, 0.4487, 0.4936, 0.5385",\
           "0, 0.08434, 0.1687, 0.253, 0.3374, 0.4217, 0.506, 0.5904, 0.6747, 0.7591, 0.8434, 0.9277, 1.012",\
           "0, 0.1397, 0.2794, 0.4191, 0.5589, 0.6986, 0.8383, 0.978, 1.118, 1.257, 1.397, 1.537, 1.677",\
           "0, 0.2126, 0.4252, 0.6377, 0.8503, 1.063, 1.275, 1.488, 1.701, 1.913, 2.126, 2.338, 2.551",\
           "0, 0.3044, 0.6087, 0.9131, 1.217, 1.522, 1.826, 2.131, 2.435, 2.739, 3.044, 3.348, 3.652",\
           "0, 0.4164, 0.8329, 1.249, 1.666, 2.082, 2.499, 2.915, 3.331, 3.748, 4.164, 4.581, 4.997",\
           "0, 0.55, 1.1, 1.65, 2.2, 2.75, 3.3, 3.85, 4.4, 4.95, 5.5, 6.05, 6.6");
  }
}
