/*
 * 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_mcu7t5v0__tt_025C_3v30) { 
  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 : 25 ; 
  nom_voltage : 3.3 ; 
  voltage_map(VNW, 3.3);
  voltage_map(VDD, 3.3);
  voltage_map(VSS, 0);
  voltage_map(VPW, 0);

  operating_conditions(gf180mcu_fd_sc_mcu7t5v0__tt_025C_3v30) { 
    process : 1 ; 
    temperature : 25 ; 
    voltage : 3.3 ; 
  }

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

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

  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.07922, 0.2871, 0.6841, 1.303, 2.17, 3.312, 4.751, 6.507, 8.6");
    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.009903, 0.01981, 0.02971, 0.03961, 0.04951, 0.05942, 0.06932, 0.07922, 0.08912, 0.09903, 0.1089, 0.1188",\
           "0, 0.03589, 0.07177, 0.1077, 0.1435, 0.1794, 0.2153, 0.2512, 0.2871, 0.323, 0.3589, 0.3948, 0.4306",\
           "0, 0.08551, 0.171, 0.2565, 0.342, 0.4275, 0.513, 0.5986, 0.6841, 0.7696, 0.8551, 0.9406, 1.026",\
           "0, 0.1628, 0.3256, 0.4884, 0.6513, 0.8141, 0.9769, 1.14, 1.303, 1.465, 1.628, 1.791, 1.954",\
           "0, 0.2713, 0.5426, 0.8139, 1.085, 1.356, 1.628, 1.899, 2.17, 2.442, 2.713, 2.984, 3.255",\
           "0, 0.414, 0.828, 1.242, 1.656, 2.07, 2.484, 2.898, 3.312, 3.726, 4.14, 4.554, 4.968",\
           "0, 0.5938, 1.188, 1.782, 2.375, 2.969, 3.563, 4.157, 4.751, 5.345, 5.938, 6.532, 7.126",\
           "0, 0.8134, 1.627, 2.44, 3.253, 4.067, 4.88, 5.693, 6.507, 7.32, 8.134, 8.947, 9.76",\
           "0, 1.075, 2.15, 3.225, 4.3, 5.375, 6.45, 7.525, 8.6, 9.675, 10.75, 11.82, 12.9");
  }

  normalized_driver_waveform(ndw_ntin_nvolt_10x13) { 
    driver_waveform_name : "driver_waveform_default_rise" ; 
    index_1("0.02, 0.07922, 0.2871, 0.6841, 1.303, 2.17, 3.312, 4.751, 6.507, 8.6");
    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.009903, 0.01981, 0.02971, 0.03961, 0.04951, 0.05942, 0.06932, 0.07922, 0.08912, 0.09903, 0.1089, 0.1188",\
           "0, 0.03589, 0.07177, 0.1077, 0.1435, 0.1794, 0.2153, 0.2512, 0.2871, 0.323, 0.3589, 0.3948, 0.4306",\
           "0, 0.08551, 0.171, 0.2565, 0.342, 0.4275, 0.513, 0.5986, 0.6841, 0.7696, 0.8551, 0.9406, 1.026",\
           "0, 0.1628, 0.3256, 0.4884, 0.6513, 0.8141, 0.9769, 1.14, 1.303, 1.465, 1.628, 1.791, 1.954",\
           "0, 0.2713, 0.5426, 0.8139, 1.085, 1.356, 1.628, 1.899, 2.17, 2.442, 2.713, 2.984, 3.255",\
           "0, 0.414, 0.828, 1.242, 1.656, 2.07, 2.484, 2.898, 3.312, 3.726, 4.14, 4.554, 4.968",\
           "0, 0.5938, 1.188, 1.782, 2.375, 2.969, 3.563, 4.157, 4.751, 5.345, 5.938, 6.532, 7.126",\
           "0, 0.8134, 1.627, 2.44, 3.253, 4.067, 4.88, 5.693, 6.507, 7.32, 8.134, 8.947, 9.76",\
           "0, 1.075, 2.15, 3.225, 4.3, 5.375, 6.45, 7.525, 8.6, 9.675, 10.75, 11.82, 12.9");
  }
}
