/*
 * 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_125C_1v98) { 
  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 : 125 ; 
  nom_voltage : 1.98 ; 
  voltage_map(VNW, 1.98);
  voltage_map(VDD, 1.98);
  voltage_map(VSS, 0);
  voltage_map(VPW, 0);

  operating_conditions(gf180mcu_fd_sc_mcu9t5v0__ff_125C_1v98) { 
    process : 1 ; 
    temperature : 125 ; 
    voltage : 1.98 ; 
  }

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

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

  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.07784, 0.2809, 0.6686, 1.273, 2.12, 3.235, 4.64, 6.356, 8.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.00973, 0.01946, 0.02919, 0.03892, 0.04865, 0.05838, 0.06811, 0.07784, 0.08757, 0.0973, 0.107, 0.1168",\
           "0, 0.03511, 0.07022, 0.1053, 0.1404, 0.1755, 0.2107, 0.2458, 0.2809, 0.316, 0.3511, 0.3862, 0.4213",\
           "0, 0.08357, 0.1671, 0.2507, 0.3343, 0.4179, 0.5014, 0.585, 0.6686, 0.7522, 0.8357, 0.9193, 1.003",\
           "0, 0.1591, 0.3182, 0.4772, 0.6363, 0.7954, 0.9545, 1.114, 1.273, 1.432, 1.591, 1.75, 1.909",\
           "0, 0.265, 0.53, 0.7951, 1.06, 1.325, 1.59, 1.855, 2.12, 2.385, 2.65, 2.915, 3.18",\
           "0, 0.4044, 0.8089, 1.213, 1.618, 2.022, 2.427, 2.831, 3.235, 3.64, 4.044, 4.449, 4.853",\
           "0, 0.5801, 1.16, 1.74, 2.32, 2.9, 3.48, 4.06, 4.64, 5.22, 5.801, 6.381, 6.961",\
           "0, 0.7945, 1.589, 2.383, 3.178, 3.972, 4.767, 5.561, 6.356, 7.15, 7.945, 8.739, 9.533",\
           "0, 1.05, 2.1, 3.15, 4.2, 5.25, 6.3, 7.35, 8.4, 9.45, 10.5, 11.55, 12.6");
  }

  normalized_driver_waveform(ndw_ntin_nvolt_10x13) { 
    driver_waveform_name : "driver_waveform_default_rise" ; 
    index_1("0.02, 0.07784, 0.2809, 0.6686, 1.273, 2.12, 3.235, 4.64, 6.356, 8.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.00973, 0.01946, 0.02919, 0.03892, 0.04865, 0.05838, 0.06811, 0.07784, 0.08757, 0.0973, 0.107, 0.1168",\
           "0, 0.03511, 0.07022, 0.1053, 0.1404, 0.1755, 0.2107, 0.2458, 0.2809, 0.316, 0.3511, 0.3862, 0.4213",\
           "0, 0.08357, 0.1671, 0.2507, 0.3343, 0.4179, 0.5014, 0.585, 0.6686, 0.7522, 0.8357, 0.9193, 1.003",\
           "0, 0.1591, 0.3182, 0.4772, 0.6363, 0.7954, 0.9545, 1.114, 1.273, 1.432, 1.591, 1.75, 1.909",\
           "0, 0.265, 0.53, 0.7951, 1.06, 1.325, 1.59, 1.855, 2.12, 2.385, 2.65, 2.915, 3.18",\
           "0, 0.4044, 0.8089, 1.213, 1.618, 2.022, 2.427, 2.831, 3.235, 3.64, 4.044, 4.449, 4.853",\
           "0, 0.5801, 1.16, 1.74, 2.32, 2.9, 3.48, 4.06, 4.64, 5.22, 5.801, 6.381, 6.961",\
           "0, 0.7945, 1.589, 2.383, 3.178, 3.972, 4.767, 5.561, 6.356, 7.15, 7.945, 8.739, 9.533",\
           "0, 1.05, 2.1, 3.15, 4.2, 5.25, 6.3, 7.35, 8.4, 9.45, 10.5, 11.55, 12.6");
  }
}
