/*
 * 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__latq_1) {
    area : 43.904000 ;

    latch(IQ1,IQN1) {
      enable : "E" ;
      data_in : "(!D)" ;
    }

    leakage_power() {
      related_pg_pin : "VDD" ;
      when : "!D&!E" ;
      value : "0.00057018" ;
    }

    leakage_power() {
      related_pg_pin : "VDD" ;
      when : "!D&E" ;
      value : "0.00053145" ;
    }

    leakage_power() {
      related_pg_pin : "VDD" ;
      when : "D&!E" ;
      value : "0.00062031" ;
    }

    leakage_power() {
      related_pg_pin : "VDD" ;
      when : "D&E" ;
      value : "0.00052854" ;
    }

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

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

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

    pin(D) {
      capacitance : 0.002993 ;
      direction : input ;
      driver_waveform_rise : driver_waveform_default_rise ;
      driver_waveform_fall : driver_waveform_default_fall ;
      input_voltage : default ;
      max_transition : 15.6 ;
      related_ground_pin : VSS ;
      related_power_pin : VDD ;

      internal_power() {
        when : "!E" ;

        fall_power(pwr_tin_10) {
          index_1("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          values("0.007101, 0.007096, 0.007095, 0.007083, 0.007109, 0.007106, 0.007105, \
                  0.007108, 0.007104, 0.007102");
        }

        rise_power(pwr_tin_10) {
          index_1("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          values("-0.006462, -0.006448, -0.006454, -0.006496, -0.006515, -0.006527, \
                  -0.006537, -0.006545, -0.00655, -0.006552");
        }
      }

      timing() {
        related_pin : "E" ;
        timing_type : hold_falling ;

        fall_constraint(cnst_ctin_rtin_10x10) {
          index_1("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          index_2("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          values("-1.219, -1.19, -1.077, -0.926, -0.775, -0.592, -0.395, -0.15, 0.139, 0.474",\
                 "-1.249, -1.21, -1.102, -0.958, -0.799, -0.628, -0.422, -0.173, 0.114, 0.453",\
                 "-1.331, -1.298, -1.19, -1.039, -0.882, -0.706, -0.496, -0.253, 0.04, 0.378",\
                 "-1.482, -1.455, -1.337, -1.191, -1.034, -0.858, -0.643, -0.389, -0.094, 0.245",\
                 "-1.75, -1.721, -1.611, -1.459, -1.303, -1.117, -0.892, -0.633, -0.329, 0.017",\
                 "-2.121, -2.089, -1.973, -1.826, -1.656, -1.464, -1.249, -0.985, -0.674, -0.328",\
                 "-2.572, -2.544, -2.43, -2.278, -2.11, -1.92, -1.695, -1.434, -1.125, -0.771",\
                 "-3.129, -3.099, -2.984, -2.83, -2.663, -2.472, -2.244, -1.983, -1.683, -1.331",\
                 "-3.779, -3.744, -3.627, -3.473, -3.31, -3.12, -2.897, -2.636, -2.335, -1.988",\
                 "-4.505, -4.474, -4.359, -4.21, -4.041, -3.852, -3.635, -3.381, -3.086, -2.747");
        }

        rise_constraint(cnst_ctin_rtin_10x10) {
          index_1("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          index_2("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          values("-0.223, -0.191, -0.055, 0.164, 0.429, 0.73, 1.056, 1.435, 1.853, 2.317",\
                 "-0.243, -0.205, -0.075, 0.148, 0.409, 0.703, 1.039, 1.415, 1.835, 2.299",\
                 "-0.294, -0.254, -0.126, 0.103, 0.361, 0.658, 0.995, 1.368, 1.793, 2.258",\
                 "-0.384, -0.354, -0.215, 0.007, 0.271, 0.576, 0.919, 1.297, 1.721, 2.188",\
                 "-0.478, -0.448, -0.309, -0.082, 0.186, 0.492, 0.839, 1.229, 1.664, 2.136",\
                 "-0.532, -0.5, -0.366, -0.137, 0.137, 0.447, 0.799, 1.19, 1.63, 2.102",\
                 "-0.54, -0.507, -0.368, -0.137, 0.131, 0.444, 0.798, 1.198, 1.632, 2.117",\
                 "-0.481, -0.451, -0.313, -0.084, 0.192, 0.506, 0.867, 1.265, 1.709, 2.197",\
                 "-0.359, -0.322, -0.187, 0.047, 0.321, 0.636, 0.998, 1.404, 1.852, 2.348",\
                 "-0.158, -0.126, 0.005, 0.24, 0.516, 0.838, 1.207, 1.617, 2.076, 2.572");
        }
      }

      timing() {
        related_pin : "E" ;
        timing_type : setup_falling ;

        fall_constraint(cnst_ctin_rtin_10x10) {
          index_1("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          index_2("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          values("1.763, 1.731, 1.618, 1.472, 1.337, 1.264, 1.308, 1.473, 1.73, 2.057",\
                 "1.79, 1.756, 1.648, 1.497, 1.364, 1.291, 1.335, 1.501, 1.757, 2.085",\
                 "1.872, 1.836, 1.722, 1.573, 1.445, 1.367, 1.409, 1.556, 1.794, 2.096",\
                 "2.014, 1.978, 1.871, 1.72, 1.592, 1.507, 1.522, 1.638, 1.83, 2.084",\
                 "2.269, 2.234, 2.123, 1.981, 1.844, 1.746, 1.72, 1.783, 1.908, 2.091",\
                 "2.644, 2.605, 2.496, 2.353, 2.209, 2.093, 2.02, 2.021, 2.089, 2.195",\
                 "3.096, 3.061, 2.954, 2.806, 2.65, 2.518, 2.422, 2.375, 2.374, 2.424",\
                 "3.634, 3.599, 3.495, 3.351, 3.202, 3.05, 2.924, 2.832, 2.785, 2.786",\
                 "4.274, 4.236, 4.135, 3.995, 3.843, 3.692, 3.542, 3.429, 3.341, 3.3",\
                 "4.989, 4.951, 4.858, 4.732, 4.585, 4.421, 4.263, 4.126, 4.018, 3.936");
        }

        rise_constraint(cnst_ctin_rtin_10x10) {
          index_1("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          index_2("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          values("0.504, 0.47, 0.329, 0.09, -0.182, -0.472, -0.805, -1.174, -1.577, -2.019",\
                 "0.521, 0.487, 0.352, 0.109, -0.159, -0.46, -0.792, -1.157, -1.558, -2",\
                 "0.568, 0.531, 0.395, 0.16, -0.112, -0.41, -0.741, -1.11, -1.513, -1.961",\
                 "0.654, 0.62, 0.487, 0.249, -0.019, -0.321, -0.655, -1.031, -1.448, -1.902",\
                 "0.732, 0.698, 0.565, 0.334, 0.058, -0.246, -0.596, -0.979, -1.402, -1.864",\
                 "0.759, 0.728, 0.592, 0.36, 0.086, -0.218, -0.577, -0.965, -1.396, -1.869",\
                 "0.732, 0.694, 0.559, 0.331, 0.057, -0.258, -0.61, -1.006, -1.436, -1.912",\
                 "0.632, 0.597, 0.467, 0.232, -0.041, -0.355, -0.711, -1.117, -1.558, -2.04",\
                 "0.479, 0.442, 0.312, 0.07, -0.203, -0.524, -0.887, -1.295, -1.748, -2.235",\
                 "0.26, 0.228, 0.091, -0.15, -0.431, -0.751, -1.124, -1.539, -1.996, -2.498");
        }
      }
    }

    pin(E) {
      capacitance : 0.003669 ;
      clock : true ;
      direction : input ;
      driver_waveform_rise : driver_waveform_default_rise ;
      driver_waveform_fall : driver_waveform_default_fall ;
      input_voltage : default ;
      max_transition : 15.6 ;
      min_pulse_width_high : 1.874 ;
      related_ground_pin : VSS ;
      related_power_pin : VDD ;

      internal_power() {
        when : "!D" ;

        fall_power(pwr_tin_10) {
          index_1("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          values("0.08097, 0.08047, 0.08057, 0.08388, 0.09085, 0.102, 0.1175, 0.1378, \
                  0.1631, 0.1937");
        }

        rise_power(pwr_tin_10) {
          index_1("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          values("0.04721, 0.04681, 0.04677, 0.04919, 0.05495, 0.06471, 0.07857, \
                  0.09676, 0.1195, 0.1469");
        }
      }

      internal_power() {
        when : "D" ;

        fall_power(pwr_tin_10) {
          index_1("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          values("0.08256, 0.08201, 0.08216, 0.08552, 0.09262, 0.1038, 0.1193, 0.1397, \
                  0.1651, 0.1957");
        }

        rise_power(pwr_tin_10) {
          index_1("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          values("0.04639, 0.046, 0.04595, 0.04833, 0.05404, 0.06369, 0.07754, 0.09569, \
                  0.1183, 0.1458");
        }
      }

      timing() {
        related_pin : "E" ;
        sdf_cond : "ENABLE_NOT_D === 1'b1" ;
        timing_type : min_pulse_width ;
        when : "!D" ;

        rise_constraint(scalar) {
          values("1.874");
        }
      }

      timing() {
        related_pin : "E" ;
        sdf_cond : "ENABLE_D === 1'b1" ;
        timing_type : min_pulse_width ;
        when : "D" ;

        rise_constraint(scalar) {
          values("1.208");
        }
      }
    }

    pin(Q) {
      direction : output ;
      function : "IQN1" ;
      max_capacitance : 0.3543 ;
      max_transition : 15.6 ;
      min_capacitance : 0.001 ;
      output_voltage : default ;
      related_ground_pin : VSS ;
      related_power_pin : VDD ;

      internal_power() {
        related_pin : "D" ;
        when : "E" ;

        fall_power(pwr_tin_oload_10x10) {
          index_1("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          index_2("0.001, 0.003438, 0.012, 0.02834, 0.0538, 0.08953, 0.1365, 0.1958, 0.2681, 0.3543");
          values("0.1325, 0.1303, 0.1265, 0.1241, 0.1225, 0.1216, 0.121, 0.1206, 0.1203, 0.1201",\
                 "0.1322, 0.13, 0.1262, 0.1237, 0.1222, 0.1213, 0.1207, 0.1203, 0.12, 0.1197",\
                 "0.1318, 0.1297, 0.1259, 0.1233, 0.1218, 0.1209, 0.1203, 0.1199, 0.1196, 0.1194",\
                 "0.1325, 0.1303, 0.1264, 0.1239, 0.1224, 0.1215, 0.1209, 0.1205, 0.1202, 0.12",\
                 "0.1374, 0.1351, 0.131, 0.1281, 0.1264, 0.1254, 0.1247, 0.1243, 0.124, 0.1238",\
                 "0.1474, 0.1449, 0.1401, 0.1367, 0.1346, 0.1333, 0.1325, 0.1319, 0.1316, 0.1313",\
                 "0.1614, 0.1587, 0.1533, 0.1493, 0.1467, 0.1451, 0.1441, 0.1434, 0.1429, 0.1425",\
                 "0.1803, 0.1774, 0.1712, 0.1664, 0.1633, 0.1612, 0.1599, 0.159, 0.1584, 0.1579",\
                 "0.2042, 0.201, 0.194, 0.1883, 0.1844, 0.1819, 0.1802, 0.1791, 0.1782, 0.1773",\
                 "0.233, 0.2296, 0.2217, 0.2149, 0.2102, 0.2071, 0.205, 0.2034, 0.2021, 0.2003");
        }

        rise_power(pwr_tin_oload_10x10) {
          index_1("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          index_2("0.001, 0.003438, 0.012, 0.02834, 0.0538, 0.08953, 0.1365, 0.1958, 0.2681, 0.3543");
          values("0.09207, 0.09136, 0.09053, 0.09033, 0.09066, 0.09098, 0.0916, 0.09413, 0.119, 0.2336",\
                 "0.09168, 0.09105, 0.09018, 0.08997, 0.09027, 0.09077, 0.09121, 0.09383, 0.119, 0.2356",\
                 "0.09135, 0.09072, 0.0898, 0.08961, 0.08985, 0.0902, 0.09102, 0.09367, 0.1205, 0.2419",\
                 "0.09306, 0.09226, 0.09118, 0.09075, 0.09081, 0.09116, 0.09183, 0.09529, 0.1255, 0.2568",\
                 "0.09766, 0.09674, 0.09521, 0.09444, 0.09426, 0.0944, 0.095, 0.09909, 0.1353, 0.2839",\
                 "0.1056, 0.1044, 0.1024, 0.1011, 0.1008, 0.1006, 0.101, 0.1067, 0.1527, 0.325",\
                 "0.1174, 0.1159, 0.1134, 0.1114, 0.1104, 0.1106, 0.1109, 0.1189, 0.18, 0.3845",\
                 "0.1333, 0.1315, 0.1284, 0.1256, 0.1237, 0.1233, 0.1244, 0.1381, 0.2238, 0.4703",\
                 "0.1532, 0.1511, 0.1473, 0.1438, 0.1415, 0.1399, 0.1416, 0.1681, 0.2938, 0.5882",\
                 "0.1773, 0.1748, 0.1703, 0.1663, 0.1631, 0.1613, 0.1647, 0.2152, 0.4029, 0.7367");
        }
      }

      internal_power() {
        related_pin : "E" ;

        fall_power(pwr_tin_oload_10x10) {
          index_1("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          index_2("0.001, 0.003438, 0.012, 0.02834, 0.0538, 0.08953, 0.1365, 0.1958, 0.2681, 0.3543");
          values("0.1203, 0.1182, 0.1145, 0.1121, 0.1107, 0.1097, 0.1092, 0.1088, 0.1085, 0.1083",\
                 "0.1203, 0.1182, 0.1145, 0.1121, 0.1106, 0.1097, 0.1092, 0.1088, 0.1085, 0.1083",\
                 "0.1202, 0.1181, 0.1143, 0.1119, 0.1105, 0.1096, 0.109, 0.1086, 0.1083, 0.1081",\
                 "0.12, 0.1179, 0.1142, 0.1118, 0.1104, 0.1095, 0.1089, 0.1085, 0.1082, 0.108",\
                 "0.1201, 0.118, 0.1143, 0.1119, 0.1104, 0.1095, 0.1089, 0.1086, 0.1083, 0.1081",\
                 "0.1202, 0.1182, 0.1144, 0.112, 0.1106, 0.1096, 0.109, 0.1086, 0.1084, 0.1082",\
                 "0.1208, 0.1187, 0.1149, 0.1125, 0.111, 0.1101, 0.1095, 0.1091, 0.1088, 0.1086",\
                 "0.1217, 0.1196, 0.1157, 0.1132, 0.1117, 0.1108, 0.1102, 0.1098, 0.1095, 0.1092",\
                 "0.1228, 0.1207, 0.1168, 0.1142, 0.1126, 0.1117, 0.1111, 0.1107, 0.1104, 0.11",\
                 "0.1243, 0.1221, 0.118, 0.1153, 0.1137, 0.1127, 0.1121, 0.1116, 0.1113, 0.1108");
        }

        rise_power(pwr_tin_oload_10x10) {
          index_1("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          index_2("0.001, 0.003438, 0.012, 0.02834, 0.0538, 0.08953, 0.1365, 0.1958, 0.2681, 0.3543");
          values("0.09705, 0.09642, 0.09548, 0.09518, 0.09539, 0.09589, 0.09635, 0.09944, 0.1283, 0.2557",\
                 "0.09703, 0.09642, 0.0955, 0.09517, 0.09542, 0.09571, 0.09638, 0.09955, 0.1291, 0.2579",\
                 "0.09704, 0.09643, 0.0955, 0.0952, 0.09541, 0.0957, 0.09637, 0.09986, 0.1317, 0.2672",\
                 "0.09723, 0.09657, 0.09563, 0.09534, 0.09558, 0.09605, 0.09653, 0.1006, 0.1367, 0.2842",\
                 "0.09738, 0.09676, 0.09576, 0.09547, 0.09563, 0.09598, 0.09668, 0.1021, 0.1451, 0.3102",\
                 "0.09748, 0.09681, 0.09581, 0.09567, 0.09588, 0.09629, 0.09688, 0.1044, 0.1586, 0.3498",\
                 "0.09754, 0.09686, 0.09591, 0.09553, 0.09598, 0.09669, 0.0973, 0.108, 0.1806, 0.4049",\
                 "0.09776, 0.09703, 0.09609, 0.09571, 0.09574, 0.09636, 0.09846, 0.1165, 0.2167, 0.4843",\
                 "0.09789, 0.09718, 0.09621, 0.0959, 0.09596, 0.09633, 0.09936, 0.1334, 0.279, 0.5905",\
                 "0.09788, 0.09718, 0.09628, 0.09594, 0.09603, 0.09625, 0.1037, 0.1684, 0.379, 0.7195");
        }
      }

      timing() {
        related_pin : "D" ;
        timing_sense : positive_unate ;
        timing_type : combinational ;

        cell_fall(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          index_2("0.001, 0.003438, 0.012, 0.02834, 0.0538, 0.08953, 0.1365, 0.1958, 0.2681, 0.3543");
          values("1.395, 1.492, 1.75, 2.113, 2.55, 3.074, 3.711, 4.488, 5.426, 6.54",\
                 "1.422, 1.52, 1.778, 2.141, 2.577, 3.101, 3.739, 4.516, 5.454, 6.568",\
                 "1.505, 1.602, 1.861, 2.224, 2.66, 3.184, 3.822, 4.599, 5.536, 6.651",\
                 "1.659, 1.755, 2.014, 2.377, 2.813, 3.337, 3.975, 4.751, 5.689, 6.804",\
                 "1.923, 2.021, 2.28, 2.643, 3.08, 3.604, 4.242, 5.019, 5.957, 7.071",\
                 "2.277, 2.38, 2.649, 3.023, 3.467, 3.994, 4.633, 5.41, 6.348, 7.462",\
                 "2.722, 2.829, 3.108, 3.494, 3.951, 4.487, 5.131, 5.91, 6.848, 7.962",\
                 "3.261, 3.371, 3.662, 4.062, 4.53, 5.077, 5.727, 6.509, 7.447, 8.562",\
                 "3.882, 3.999, 4.304, 4.72, 5.205, 5.763, 6.421, 7.207, 8.148, 9.263",\
                 "4.587, 4.709, 5.03, 5.466, 5.972, 6.548, 7.217, 8.01, 8.954, 10.07");
        }

        cell_rise(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          index_2("0.001, 0.003438, 0.012, 0.02834, 0.0538, 0.08953, 0.1365, 0.1958, 0.2681, 0.3543");
          values("0.8846, 0.9752, 1.241, 1.678, 2.316, 3.201, 4.365, 5.83, 7.619, 9.752",\
                 "0.9032, 0.9943, 1.259, 1.696, 2.335, 3.22, 4.383, 5.847, 7.635, 9.77",\
                 "0.9516, 1.042, 1.308, 1.744, 2.383, 3.268, 4.431, 5.897, 7.685, 9.815",\
                 "1.045, 1.136, 1.401, 1.837, 2.474, 3.359, 4.524, 5.991, 7.778, 9.905",\
                 "1.141, 1.234, 1.506, 1.946, 2.584, 3.468, 4.632, 6.096, 7.883, 10.02",\
                 "1.205, 1.303, 1.583, 2.029, 2.668, 3.552, 4.715, 6.18, 7.968, 10.1",\
                 "1.225, 1.327, 1.617, 2.071, 2.713, 3.596, 4.758, 6.221, 8.008, 10.14",\
                 "1.188, 1.295, 1.597, 2.064, 2.712, 3.595, 4.756, 6.22, 8.005, 10.13",\
                 "1.087, 1.199, 1.515, 1.998, 2.656, 3.545, 4.708, 6.169, 7.955, 10.08",\
                 "0.9171, 1.035, 1.365, 1.865, 2.537, 3.439, 4.606, 6.07, 7.855, 9.983");
        }

        fall_transition(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          index_2("0.001, 0.003438, 0.012, 0.02834, 0.0538, 0.08953, 0.1365, 0.1958, 0.2681, 0.3543");
          values("0.4076, 0.4972, 0.7436, 1.103, 1.583, 2.275, 3.229, 4.475, 6.038, 7.922",\
                 "0.4068, 0.4968, 0.744, 1.102, 1.586, 2.275, 3.224, 4.472, 6.036, 7.923",\
                 "0.4076, 0.498, 0.7434, 1.102, 1.584, 2.277, 3.229, 4.476, 6.037, 7.923",\
                 "0.4062, 0.4978, 0.7442, 1.102, 1.585, 2.276, 3.227, 4.472, 6.034, 7.916",\
                 "0.4174, 0.5072, 0.7522, 1.108, 1.587, 2.28, 3.23, 4.474, 6.038, 7.923",\
                 "0.4464, 0.5394, 0.7884, 1.142, 1.611, 2.29, 3.232, 4.476, 6.036, 7.921",\
                 "0.4754, 0.5716, 0.8284, 1.187, 1.654, 2.324, 3.254, 4.487, 6.04, 7.925",\
                 "0.5118, 0.6128, 0.8746, 1.237, 1.701, 2.366, 3.286, 4.506, 6.048, 7.928",\
                 "0.556, 0.662, 0.932, 1.3, 1.764, 2.414, 3.322, 4.528, 6.062, 7.928",\
                 "0.604, 0.718, 1, 1.378, 1.844, 2.486, 3.376, 4.566, 6.09, 7.94");
        }

        rise_transition(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          index_2("0.001, 0.003438, 0.012, 0.02834, 0.0538, 0.08953, 0.1365, 0.1958, 0.2681, 0.3543");
          values("0.3147, 0.427, 0.7834, 1.445, 2.516, 4.065, 6.112, 8.696, 11.85, 15.62",\
                 "0.3145, 0.4265, 0.7828, 1.445, 2.517, 4.062, 6.114, 8.702, 11.85, 15.62",\
                 "0.3146, 0.4266, 0.7836, 1.445, 2.515, 4.064, 6.117, 8.697, 11.86, 15.6",\
                 "0.3174, 0.4302, 0.786, 1.446, 2.515, 4.066, 6.12, 8.703, 11.86, 15.62",\
                 "0.336, 0.45, 0.8056, 1.456, 2.519, 4.065, 6.111, 8.697, 11.85, 15.62",\
                 "0.3574, 0.4732, 0.8316, 1.475, 2.528, 4.074, 6.112, 8.701, 11.85, 15.62",\
                 "0.3836, 0.5028, 0.8664, 1.502, 2.539, 4.072, 6.124, 8.7, 11.85, 15.61",\
                 "0.4172, 0.538, 0.9084, 1.539, 2.566, 4.08, 6.12, 8.701, 11.85, 15.6",\
                 "0.4548, 0.5772, 0.9588, 1.59, 2.602, 4.108, 6.132, 8.706, 11.85, 15.64",\
                 "0.494, 0.62, 1.008, 1.646, 2.658, 4.154, 6.162, 8.72, 11.86, 15.61");
        }
      }

      timing() {
        related_pin : "E" ;
        timing_type : rising_edge ;

        cell_fall(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          index_2("0.001, 0.003438, 0.012, 0.02834, 0.0538, 0.08953, 0.1365, 0.1958, 0.2681, 0.3543");
          values("1.516, 1.614, 1.872, 2.235, 2.671, 3.195, 3.833, 4.609, 5.547, 6.662",\
                 "1.544, 1.642, 1.9, 2.263, 2.699, 3.223, 3.86, 4.637, 5.575, 6.69",\
                 "1.641, 1.738, 1.996, 2.359, 2.795, 3.319, 3.957, 4.734, 5.671, 6.786",\
                 "1.764, 1.861, 2.119, 2.482, 2.919, 3.443, 4.08, 4.857, 5.795, 6.91",\
                 "1.863, 1.961, 2.218, 2.581, 3.018, 3.541, 4.179, 4.956, 5.894, 7.008",\
                 "1.935, 2.032, 2.29, 2.653, 3.09, 3.614, 4.251, 5.028, 5.966, 7.08",\
                 "1.979, 2.077, 2.335, 2.698, 3.135, 3.659, 4.296, 5.073, 6.011, 7.126",\
                 "1.99, 2.088, 2.346, 2.71, 3.146, 3.671, 4.309, 5.086, 6.024, 7.138",\
                 "1.96, 2.058, 2.318, 2.682, 3.119, 3.644, 4.282, 5.059, 5.997, 7.111",\
                 "1.888, 1.986, 2.246, 2.611, 3.05, 3.575, 4.214, 4.991, 5.929, 7.043");
        }

        cell_rise(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          index_2("0.001, 0.003438, 0.012, 0.02834, 0.0538, 0.08953, 0.1365, 0.1958, 0.2681, 0.3543");
          values("1.538, 1.629, 1.894, 2.33, 2.968, 3.854, 5.017, 6.481, 8.27, 10.4",\
                 "1.566, 1.657, 1.922, 2.358, 2.996, 3.882, 5.046, 6.51, 8.299, 10.43",\
                 "1.666, 1.757, 2.022, 2.459, 3.097, 3.982, 5.146, 6.611, 8.4, 10.53",\
                 "1.799, 1.89, 2.155, 2.591, 3.229, 4.114, 5.277, 6.743, 8.529, 10.66",\
                 "1.903, 1.994, 2.258, 2.695, 3.333, 4.218, 5.382, 6.849, 8.637, 10.76",\
                 "1.979, 2.07, 2.334, 2.771, 3.409, 4.294, 5.46, 6.925, 8.713, 10.84",\
                 "2.022, 2.112, 2.377, 2.814, 3.452, 4.337, 5.499, 6.966, 8.756, 10.89",\
                 "2.026, 2.116, 2.381, 2.818, 3.456, 4.342, 5.503, 6.968, 8.753, 10.89",\
                 "1.984, 2.075, 2.34, 2.776, 3.413, 4.3, 5.462, 6.926, 8.713, 10.84",\
                 "1.896, 1.987, 2.252, 2.689, 3.328, 4.213, 5.377, 6.839, 8.625, 10.76");
        }

        fall_transition(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          index_2("0.001, 0.003438, 0.012, 0.02834, 0.0538, 0.08953, 0.1365, 0.1958, 0.2681, 0.3543");
          values("0.4044, 0.4952, 0.7408, 1.1, 1.583, 2.273, 3.224, 4.471, 6.036, 7.92",\
                 "0.4044, 0.4956, 0.7408, 1.101, 1.584, 2.274, 3.229, 4.474, 6.038, 7.916",\
                 "0.4044, 0.4946, 0.7412, 1.101, 1.583, 2.274, 3.229, 4.474, 6.037, 7.915",\
                 "0.4042, 0.4952, 0.7406, 1.101, 1.584, 2.272, 3.226, 4.47, 6.037, 7.917",\
                 "0.4042, 0.4942, 0.7418, 1.101, 1.583, 2.274, 3.228, 4.473, 6.033, 7.92",\
                 "0.404, 0.4948, 0.7418, 1.101, 1.584, 2.273, 3.228, 4.473, 6.038, 7.923",\
                 "0.405, 0.495, 0.7418, 1.102, 1.584, 2.273, 3.223, 4.472, 6.037, 7.913",\
                 "0.4074, 0.498, 0.7442, 1.103, 1.585, 2.276, 3.225, 4.473, 6.029, 7.92",\
                 "0.4102, 0.5016, 0.748, 1.108, 1.589, 2.278, 3.226, 4.474, 6.026, 7.908",\
                 "0.414, 0.506, 0.752, 1.11, 1.592, 2.282, 3.228, 4.478, 6.032, 7.91");
        }

        rise_transition(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.1275, 0.505, 1.226, 2.349, 3.925, 5.998, 8.61, 11.8, 15.6");
          index_2("0.001, 0.003438, 0.012, 0.02834, 0.0538, 0.08953, 0.1365, 0.1958, 0.2681, 0.3543");
          values("0.3148, 0.4266, 0.7836, 1.446, 2.517, 4.062, 6.113, 8.7, 11.85, 15.62",\
                 "0.3154, 0.4268, 0.784, 1.445, 2.516, 4.065, 6.112, 8.695, 11.85, 15.61",\
                 "0.3152, 0.4266, 0.7838, 1.446, 2.516, 4.065, 6.112, 8.695, 11.85, 15.61",\
                 "0.3154, 0.4266, 0.7838, 1.446, 2.517, 4.065, 6.116, 8.703, 11.85, 15.62",\
                 "0.3148, 0.4266, 0.784, 1.445, 2.517, 4.066, 6.117, 8.704, 11.86, 15.62",\
                 "0.3146, 0.4268, 0.7836, 1.444, 2.518, 4.065, 6.116, 8.703, 11.86, 15.62",\
                 "0.3156, 0.4268, 0.7842, 1.445, 2.516, 4.062, 6.119, 8.69, 11.85, 15.61",\
                 "0.3148, 0.427, 0.784, 1.446, 2.517, 4.069, 6.11, 8.706, 11.84, 15.63",\
                 "0.3148, 0.4268, 0.7838, 1.445, 2.518, 4.066, 6.112, 8.692, 11.84, 15.61",\
                 "0.314, 0.426, 0.782, 1.444, 2.52, 4.066, 6.112, 8.696, 11.85, 15.6");
        }
      }
    }
  }

