/*
 * 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 ; 
  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");
  }
}
