/*
 * 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.
 */

  cell(gf180mcu_fd_sc_mcu7t5v0__inv_16) {
    area : 74.636800 ;

    leakage_power() {
      related_pg_pin : "VDD" ;
      when : "!I" ;
      value : "0.0003515886" ;
    }

    leakage_power() {
      related_pg_pin : "VDD" ;
      when : "I" ;
      value : "0.0003224934" ;
    }

    leakage_power() {
      related_pg_pin : "VDD" ;
      value : "0.0003515886" ;
    }

    pg_pin(VDD) {
      voltage_name : VDD ;
      pg_type : primary_power ;
    }

    pg_pin(VSS) {
      voltage_name : VSS ;
      pg_type : primary_ground ;
    }

    pin(I) {
      capacitance : 0.06611 ;
      direction : input ;
      driver_waveform_rise : driver_waveform_default_rise ;
      driver_waveform_fall : driver_waveform_default_fall ;
      input_voltage : default ;
      max_transition : 25 ;
      related_ground_pin : VSS ;
      related_power_pin : VDD ;
    }

    pin(ZN) {
      direction : output ;
      function : "(!I)" ;
      max_capacitance : 3.074 ;
      max_transition : 25 ;
      min_capacitance : 0.001 ;
      output_voltage : default ;
      related_ground_pin : VSS ;
      related_power_pin : VDD ;

      internal_power() {
        related_pin : "I" ;

        fall_power(pwr_tin_oload_10x10) {
          index_1("0.02, 0.1924, 0.7976, 1.953, 3.754, 6.28, 9.605, 13.79, 18.91, 25");
          index_2("0.001, 0.02221, 0.09666, 0.2388, 0.4604, 0.7712, 1.18, 1.695, 2.324, 3.074");
          values("-0.002381, -0.002163, -0.001974, -0.001863, -0.001846, -0.001832, -0.001796, -0.001802, -0.001779, -0.001813",\
                 "-0.005991, -0.00471, -0.003186, -0.002439, -0.002183, -0.002074, -0.001978, -0.001905, -0.001876, -0.001878",\
                 "-0.01164, -0.009676, -0.006406, -0.004354, -0.003253, -0.002734, -0.002422, -0.002277, -0.002161, -0.002059",\
                 "-0.015, -0.0135, -0.01008, -0.006963, -0.005029, -0.00393, -0.003294, -0.002859, -0.002612, -0.002463",\
                 "-0.01629, -0.01538, -0.01273, -0.009584, -0.007083, -0.005474, -0.004381, -0.003721, -0.003256, -0.002986",\
                 "-0.01621, -0.0158, -0.01412, -0.01152, -0.009008, -0.006993, -0.005634, -0.004681, -0.004027, -0.003717",\
                 "-0.01515, -0.01505, -0.01437, -0.01262, -0.01047, -0.0085, -0.006881, -0.005712, -0.004985, -0.004917",\
                 "-0.01299, -0.01332, -0.0135, -0.01275, -0.01122, -0.009506, -0.007956, -0.006766, -0.006608, -0.00832",\
                 "-0.008669, -0.009343, -0.01032, -0.01064, -0.009918, -0.008753, -0.00798, -0.009977, -0.01391, -0.01729",\
                 "0.0005579, -0.0004033, -0.002254, -0.003559, -0.004388, -0.009833, -0.01533, -0.01867, -0.02071, -0.02198");
        }

        rise_power(pwr_tin_oload_10x10) {
          index_1("0.02, 0.1924, 0.7976, 1.953, 3.754, 6.28, 9.605, 13.79, 18.91, 25");
          index_2("0.001, 0.02221, 0.09666, 0.2388, 0.4604, 0.7712, 1.18, 1.695, 2.324, 3.074");
          values("0.0906, 0.09156, 0.09249, 0.09315, 0.09376, 0.09522, 0.0974, 0.1565, 0.5139, 1.381",\
                 "0.08281, 0.08532, 0.08898, 0.09124, 0.09298, 0.09392, 0.09827, 0.157, 0.526, 1.401",\
                 "0.07745, 0.07897, 0.08297, 0.08703, 0.08969, 0.0923, 0.09791, 0.1679, 0.5733, 1.471",\
                 "0.0757, 0.07662, 0.07926, 0.08293, 0.08637, 0.08825, 0.09601, 0.1945, 0.6701, 1.601",\
                 "0.07568, 0.07594, 0.07786, 0.08042, 0.08363, 0.08607, 0.1, 0.2537, 0.8526, 1.784",\
                 "0.07641, 0.07649, 0.07702, 0.07916, 0.08138, 0.08514, 0.12, 0.398, 1.137, 1.978",\
                 "0.07805, 0.07786, 0.0779, 0.07857, 0.08061, 0.08753, 0.2048, 0.7156, 1.461, 2.061",\
                 "0.08041, 0.08001, 0.07919, 0.07886, 0.08178, 0.1466, 0.5363, 1.113, 1.548, 1.851",\
                 "0.08026, 0.07949, 0.07852, 0.07935, 0.1913, 0.5288, 0.7762, 0.9324, 1.035, 1.104",\
                 "0.0701, 0.06909, 0.07735, 0.1832, 0.2563, 0.2971, 0.3203, 0.3348, 0.3441, 0.3505");
        }
      }

      timing() {
        related_pin : "I" ;
        timing_sense : negative_unate ;
        timing_type : combinational ;

        cell_fall(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.1924, 0.7976, 1.953, 3.754, 6.28, 9.605, 13.79, 18.91, 25");
          index_2("0.001, 0.02221, 0.09666, 0.2388, 0.4604, 0.7712, 1.18, 1.695, 2.324, 3.074");
          values("0.131, 0.1701, 0.306, 0.5642, 0.9666, 1.53, 2.272, 3.21, 4.348, 5.712",\
                 "0.1983, 0.2386, 0.3758, 0.6346, 1.037, 1.602, 2.343, 3.28, 4.42, 5.782",\
                 "0.3763, 0.4464, 0.6224, 0.8846, 1.288, 1.853, 2.594, 3.532, 4.675, 6.027",\
                 "0.5573, 0.6755, 0.9675, 1.34, 1.768, 2.332, 3.075, 4.008, 5.147, 6.512",\
                 "0.7249, 0.8988, 1.325, 1.86, 2.45, 3.078, 3.824, 4.761, 5.901, 7.261",\
                 "0.8636, 1.102, 1.68, 2.397, 3.181, 4.003, 4.863, 5.812, 6.953, 8.311",\
                 "0.9602, 1.273, 2.02, 2.938, 3.933, 4.974, 6.05, 7.16, 8.338, 9.697",\
                 "1.004, 1.397, 2.331, 3.472, 4.693, 5.966, 7.28, 8.627, 10.01, 11.44",\
                 "0.988, 1.468, 2.61, 3.986, 5.455, 6.975, 8.54, 10.14, 11.77, 13.44",\
                 "0.907, 1.476, 2.838, 4.472, 6.206, 7.992, 9.82, 11.68, 13.58, 15.51");
        }

        cell_rise(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.1924, 0.7976, 1.953, 3.754, 6.28, 9.605, 13.79, 18.91, 25");
          index_2("0.001, 0.02221, 0.09666, 0.2388, 0.4604, 0.7712, 1.18, 1.695, 2.324, 3.074");
          values("0.2965, 0.4002, 0.7561, 1.431, 2.482, 3.964, 5.894, 8.357, 11.32, 14.87",\
                 "0.3531, 0.4618, 0.8271, 1.508, 2.561, 4.042, 5.975, 8.431, 11.4, 14.95",\
                 "0.6221, 0.7312, 1.097, 1.784, 2.842, 4.32, 6.275, 8.705, 11.69, 15.24",\
                 "1.04, 1.212, 1.638, 2.325, 3.388, 4.87, 6.807, 9.271, 12.24, 15.81",\
                 "1.536, 1.786, 2.398, 3.18, 4.24, 5.725, 7.666, 10.11, 13.11, 16.65",\
                 "2.104, 2.441, 3.264, 4.296, 5.447, 6.931, 8.875, 11.33, 14.31, 17.88",\
                 "2.743, 3.173, 4.23, 5.543, 6.968, 8.523, 10.46, 12.91, 15.92, 19.46",\
                 "3.448, 3.985, 5.287, 6.904, 8.653, 10.48, 12.48, 14.93, 17.91, 21.47",\
                 "4.232, 4.871, 6.434, 8.379, 10.48, 12.65, 14.89, 17.38, 20.37, 23.93",\
                 "5.083, 5.835, 7.673, 9.961, 12.42, 14.98, 17.59, 20.27, 23.3, 26.86");
        }

        fall_transition(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.1924, 0.7976, 1.953, 3.754, 6.28, 9.605, 13.79, 18.91, 25");
          index_2("0.001, 0.02221, 0.09666, 0.2388, 0.4604, 0.7712, 1.18, 1.695, 2.324, 3.074");
          values("0.1289, 0.1953, 0.4252, 0.8692, 1.558, 2.528, 3.796, 5.395, 7.356, 9.698",\
                 "0.1286, 0.1944, 0.4264, 0.8693, 1.561, 2.525, 3.802, 5.398, 7.369, 9.707",\
                 "0.2464, 0.3058, 0.4699, 0.8696, 1.557, 2.525, 3.804, 5.41, 7.352, 9.692",\
                 "0.4298, 0.5202, 0.7524, 1.065, 1.593, 2.526, 3.799, 5.408, 7.373, 9.705",\
                 "0.6594, 0.7848, 1.099, 1.522, 2.004, 2.68, 3.813, 5.406, 7.37, 9.713",\
                 "0.932, 1.094, 1.503, 2.043, 2.651, 3.324, 4.169, 5.487, 7.36, 9.695",\
                 "1.256, 1.455, 1.962, 2.617, 3.367, 4.185, 5.056, 6.096, 7.62, 9.738",\
                 "1.61, 1.869, 2.47, 3.26, 4.166, 5.124, 6.154, 7.246, 8.498, 10.23",\
                 "1.992, 2.316, 3.04, 3.964, 4.998, 6.128, 7.338, 8.594, 9.914, 11.39",\
                 "2.408, 2.792, 3.674, 4.736, 5.924, 7.226, 8.598, 10.03, 11.53, 13.1");
        }

        rise_transition(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.1924, 0.7976, 1.953, 3.754, 6.28, 9.605, 13.79, 18.91, 25");
          index_2("0.001, 0.02221, 0.09666, 0.2388, 0.4604, 0.7712, 1.18, 1.695, 2.324, 3.074");
          values("0.3258, 0.4949, 1.09, 2.224, 4, 6.485, 9.746, 13.87, 18.92, 24.88",\
                 "0.3263, 0.4955, 1.091, 2.229, 3.996, 6.484, 9.75, 13.86, 18.88, 24.87",\
                 "0.3684, 0.505, 1.092, 2.227, 4, 6.484, 9.748, 13.87, 18.92, 24.92",\
                 "0.6128, 0.7426, 1.153, 2.23, 4.001, 6.489, 9.753, 13.88, 18.89, 24.91",\
                 "0.9122, 1.092, 1.553, 2.341, 4.011, 6.489, 9.765, 13.87, 18.91, 24.86",\
                 "1.251, 1.493, 2.087, 2.866, 4.154, 6.503, 9.752, 13.89, 18.91, 24.92",\
                 "1.631, 1.932, 2.684, 3.648, 4.77, 6.672, 9.792, 13.89, 18.92, 24.88",\
                 "2.036, 2.422, 3.332, 4.49, 5.798, 7.384, 9.984, 13.9, 18.91, 24.89",\
                 "2.478, 2.926, 4.026, 5.406, 6.932, 8.564, 10.72, 14.15, 18.98, 24.93",\
                 "2.938, 3.482, 4.782, 6.38, 8.142, 10.03, 12.05, 14.91, 19.19, 25.01");
        }
      }
    }
  }

