/*
 * 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__dffq_4) {
    area : 79.027200 ;

    ff(IQ1,IQN1) {
      clocked_on : "CLK" ;
      next_state : "D" ;
    }

    leakage_power() {
      related_pg_pin : "VDD" ;
      when : "!CLK&!D" ;
      value : "4.509756e-05" ;
    }

    leakage_power() {
      related_pg_pin : "VDD" ;
      when : "!CLK&D" ;
      value : "5.4108e-05" ;
    }

    leakage_power() {
      related_pg_pin : "VDD" ;
      when : "CLK&!D" ;
      value : "5.44806e-05" ;
    }

    leakage_power() {
      related_pg_pin : "VDD" ;
      when : "CLK&D" ;
      value : "5.345352e-05" ;
    }

    leakage_power() {
      related_pg_pin : "VDD" ;
      value : "5.44806e-05" ;
    }

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

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

    pin(CLK) {
      capacitance : 0.002903 ;
      clock : true ;
      direction : input ;
      driver_waveform_rise : driver_waveform_default_rise ;
      driver_waveform_fall : driver_waveform_default_fall ;
      input_voltage : default ;
      max_transition : 21 ;
      min_period : 13.52 ;
      min_pulse_width_high : 6.769 ;
      min_pulse_width_low : 5.774 ;
      related_ground_pin : VSS ;
      related_power_pin : VDD ;

      internal_power() {
        when : "!D" ;

        fall_power(pwr_tin_10) {
          index_1("0.02, 0.1648, 0.6731, 1.644, 3.156, 5.278, 8.07, 11.59, 15.88, 21");
          values("0.02805, 0.028, 0.02788, 0.02774, 0.02762, 0.02754, 0.02747, 0.02743, \
                  0.02739, 0.01935");
        }

        rise_power(pwr_tin_10) {
          index_1("0.02, 0.1648, 0.6731, 1.644, 3.156, 5.278, 8.07, 11.59, 15.88, 21");
          values("0.02215, 0.02212, 0.02206, 0.02192, 0.0218, 0.0217, 0.0216, 0.02154, \
                  0.02151, 0.02162");
        }
      }

      internal_power() {
        when : "D" ;

        fall_power(pwr_tin_10) {
          index_1("0.02, 0.1648, 0.6731, 1.644, 3.156, 5.278, 8.07, 11.59, 15.88, 21");
          values("0.02831, 0.02826, 0.02813, 0.028, 0.02788, 0.02779, 0.02773, 0.02767, \
                  0.02758, 0.01934");
        }

        rise_power(pwr_tin_10) {
          index_1("0.02, 0.1648, 0.6731, 1.644, 3.156, 5.278, 8.07, 11.59, 15.88, 21");
          values("0.02216, 0.02215, 0.02208, 0.02194, 0.02182, 0.02171, 0.02161, \
                  0.02156, 0.02153, 0.02165");
        }
      }

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

        fall_constraint(scalar) {
          values("5.774");
        }

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

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

        fall_constraint(scalar) {
          values("3.667");
        }

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

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

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

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

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

    pin(D) {
      capacitance : 0.002107 ;
      direction : input ;
      driver_waveform_rise : driver_waveform_default_rise ;
      driver_waveform_fall : driver_waveform_default_fall ;
      input_voltage : default ;
      max_transition : 21 ;
      nextstate_type : data ;
      related_ground_pin : VSS ;
      related_power_pin : VDD ;

      internal_power() {
        when : "!CLK" ;

        fall_power(pwr_tin_10) {
          index_1("0.02, 0.1648, 0.6731, 1.644, 3.156, 5.278, 8.07, 11.59, 15.88, 21");
          values("0.01416, 0.01415, 0.014, 0.01387, 0.0138, 0.01375, 0.01372, 0.01369, \
                  0.01354, 0.005181");
        }

        rise_power(pwr_tin_10) {
          index_1("0.02, 0.1648, 0.6731, 1.644, 3.156, 5.278, 8.07, 11.59, 15.88, 21");
          values("0.01084, 0.01085, 0.01085, 0.01079, 0.01072, 0.01066, 0.01061, \
                  0.01056, 0.01053, 0.01056");
        }
      }

      internal_power() {
        when : "CLK" ;

        fall_power(pwr_tin_10) {
          index_1("0.02, 0.1648, 0.6731, 1.644, 3.156, 5.278, 8.07, 11.59, 15.88, 21");
          values("0.0008176, 0.0008188, 0.0008196, 0.0008185, 0.0008183, 0.0008157, \
                  0.0008115, 0.0008032, 0.0007837, 0.0006437");
        }

        rise_power(pwr_tin_10) {
          index_1("0.02, 0.1648, 0.6731, 1.644, 3.156, 5.278, 8.07, 11.59, 15.88, 21");
          values("-0.000512, -0.000521, -0.0005306, -0.0005371, -0.0005441, -0.0005499, \
                  -0.0005566, -0.0005672, -0.0005926, -0.0005896");
        }
      }

      timing() {
        related_pin : "CLK" ;
        timing_type : hold_rising ;

        fall_constraint(cnst_ctin_rtin_10x10) {
          index_1("0.02, 0.1648, 0.6731, 1.644, 3.156, 5.278, 8.07, 11.59, 15.88, 21");
          index_2("0.02, 0.1648, 0.6731, 1.644, 3.156, 5.278, 8.07, 11.59, 15.88, 21");
          values("0.286, 0.35, 0.555, 0.963, 1.555, 2.231, 2.963, 3.74, 4.575, 5.447",\
                 "0.233, 0.29, 0.504, 0.902, 1.487, 2.155, 2.877, 3.652, 4.475, 5.338",\
                 "0.064, 0.122, 0.325, 0.72, 1.31, 1.973, 2.693, 3.459, 4.274, 5.131",\
                 "-0.375, -0.319, -0.109, 0.292, 0.875, 1.549, 2.278, 3.056, 3.88, 4.741",\
                 "-1.087, -1.025, -0.821, -0.424, 0.162, 0.828, 1.558, 2.339, 3.17, 4.04",\
                 "-1.989, -1.928, -1.733, -1.346, -0.777, -0.114, 0.605, 1.373, 2.193, 3.062",\
                 "-3.061, -2.997, -2.804, -2.43, -1.873, -1.234, -0.528, 0.222, 1.033, 1.889",\
                 "-4.29, -4.23, -4.046, -3.681, -3.148, -2.522, -1.833, -1.099, -0.307, 0.535",\
                 "-5.684, -5.622, -5.447, -5.095, -4.572, -3.981, -3.303, -2.586, -1.811, -0.992",\
                 "-7.242, -7.184, -7.012, -6.68, -6.171, -5.588, -4.939, -4.24, -3.486, -2.686");
        }

        rise_constraint(cnst_ctin_rtin_10x10) {
          index_1("0.02, 0.1648, 0.6731, 1.644, 3.156, 5.278, 8.07, 11.59, 15.88, 21");
          index_2("0.02, 0.1648, 0.6731, 1.644, 3.156, 5.278, 8.07, 11.59, 15.88, 21");
          values("-0, 0.063, 0.268, 0.611, 1.007, 1.449, 1.935, 2.453, 3.012, 3.595",\
                 "-0.054, 0.005, 0.214, 0.562, 0.958, 1.4, 1.892, 2.413, 2.975, 3.549",\
                 "-0.241, -0.184, 0.03, 0.382, 0.782, 1.238, 1.733, 2.262, 2.825, 3.409",\
                 "-0.52, -0.455, -0.242, 0.108, 0.519, 0.976, 1.471, 2.005, 2.572, 3.164",\
                 "-0.821, -0.756, -0.542, -0.192, 0.216, 0.67, 1.168, 1.698, 2.264, 2.859",\
                 "-1.142, -1.085, -0.873, -0.52, -0.114, 0.336, 0.828, 1.357, 1.923, 2.51",\
                 "-1.465, -1.404, -1.204, -0.857, -0.454, -0.014, 0.481, 0.998, 1.565, 2.155",\
                 "-1.793, -1.73, -1.529, -1.182, -0.791, -0.359, 0.122, 0.645, 1.196, 1.776",\
                 "-2.103, -2.038, -1.84, -1.503, -1.116, -0.692, -0.224, 0.29, 0.835, 1.408",\
                 "-2.391, -2.331, -2.142, -1.807, -1.435, -1.016, -0.547, -0.053, 0.486, 1.053");
        }
      }

      timing() {
        related_pin : "CLK" ;
        timing_type : setup_rising ;

        fall_constraint(cnst_ctin_rtin_10x10) {
          index_1("0.02, 0.1648, 0.6731, 1.644, 3.156, 5.278, 8.07, 11.59, 15.88, 21");
          index_2("0.02, 0.1648, 0.6731, 1.644, 3.156, 5.278, 8.07, 11.59, 15.88, 21");
          values("3.172, 3.111, 2.868, 2.392, 1.728, 0.957, 0.131, -0.749, -1.667, -2.64",\
                 "3.228, 3.157, 2.919, 2.442, 1.783, 1.016, 0.19, -0.695, -1.618, -2.582",\
                 "3.413, 3.348, 3.105, 2.632, 1.972, 1.203, 0.374, -0.501, -1.426, -2.393",\
                 "3.857, 3.79, 3.547, 3.073, 2.408, 1.644, 0.816, -0.059, -0.987, -1.955",\
                 "4.596, 4.53, 4.295, 3.843, 3.153, 2.384, 1.561, 0.677, -0.246, -1.214",\
                 "5.661, 5.599, 5.354, 4.909, 4.218, 3.45, 2.626, 1.744, 0.82, -0.146",\
                 "7.075, 7.012, 6.768, 6.295, 5.632, 4.865, 4.046, 3.158, 2.238, 1.266",\
                 "8.854, 8.792, 8.545, 8.07, 7.405, 6.642, 5.814, 4.931, 4.012, 3.046",\
                 "10.95, 10.89, 10.64, 10.17, 9.503, 8.733, 7.908, 7.022, 6.099, 5.126",\
                 "13.28, 13.22, 12.97, 12.53, 11.83, 11.06, 10.23, 9.342, 8.411, 7.442");
        }

        rise_constraint(cnst_ctin_rtin_10x10) {
          index_1("0.02, 0.1648, 0.6731, 1.644, 3.156, 5.278, 8.07, 11.59, 15.88, 21");
          index_2("0.02, 0.1648, 0.6731, 1.644, 3.156, 5.278, 8.07, 11.59, 15.88, 21");
          values("1.884, 1.819, 1.574, 1.126, 0.446, -0.262, -0.956, -1.64, -2.292, -2.927",\
                 "1.936, 1.874, 1.627, 1.178, 0.496, -0.202, -0.896, -1.589, -2.239, -2.871",\
                 "2.137, 2.071, 1.82, 1.338, 0.696, -0.006, -0.703, -1.397, -2.057, -2.695",\
                 "2.51, 2.448, 2.191, 1.716, 1.072, 0.364, -0.342, -1.048, -1.722, -2.371",\
                 "3.006, 2.941, 2.691, 2.216, 1.581, 0.87, 0.159, -0.563, -1.252, -1.921",\
                 "3.575, 3.507, 3.263, 2.829, 2.154, 1.459, 0.744, 0.013, -0.699, -1.397",\
                 "4.168, 4.103, 3.849, 3.413, 2.743, 2.041, 1.327, 0.584, -0.139, -0.839",\
                 "4.749, 4.687, 4.435, 3.966, 3.333, 2.622, 1.903, 1.16, 0.436, -0.284",\
                 "5.352, 5.288, 5.043, 4.563, 3.927, 3.216, 2.502, 1.757, 1.023, 0.307",\
                 "5.946, 5.878, 5.633, 5.157, 4.526, 3.816, 3.101, 2.354, 1.614, 0.88");
        }
      }
    }

    pin(Q) {
      direction : output ;
      function : "IQ1" ;
      max_capacitance : 0.6635 ;
      max_transition : 21 ;
      min_capacitance : 0.001 ;
      output_voltage : default ;
      related_ground_pin : VSS ;
      related_power_pin : VDD ;

      internal_power() {
        related_pin : "CLK" ;

        fall_power(pwr_tin_oload_10x10) {
          index_1("0.02, 0.1648, 0.6731, 1.644, 3.156, 5.278, 8.07, 11.59, 15.88, 21");
          index_2("0.001, 0.005573, 0.02162, 0.05227, 0.1, 0.167, 0.2552, 0.3663, 0.5019, 0.6635");
          values("0.05262, 0.05289, 0.0535, 0.05409, 0.0545, 0.05475, 0.0549, 0.05499, 0.05506, 0.05508",\
                 "0.0526, 0.05286, 0.05351, 0.05409, 0.0545, 0.05477, 0.05491, 0.055, 0.05506, 0.05509",\
                 "0.0526, 0.05288, 0.05349, 0.05408, 0.05449, 0.05475, 0.0549, 0.05499, 0.05505, 0.05509",\
                 "0.05262, 0.05289, 0.05349, 0.05408, 0.0545, 0.05476, 0.0549, 0.05499, 0.05504, 0.05507",\
                 "0.05262, 0.05289, 0.05351, 0.05411, 0.05451, 0.05477, 0.05493, 0.05501, 0.05507, 0.05509",\
                 "0.05266, 0.05293, 0.05355, 0.05413, 0.05456, 0.05482, 0.05496, 0.05505, 0.0551, 0.05511",\
                 "0.05271, 0.05297, 0.05358, 0.05418, 0.05459, 0.05485, 0.055, 0.05509, 0.05513, 0.05501",\
                 "0.05272, 0.05299, 0.05361, 0.05421, 0.05464, 0.05489, 0.05504, 0.05511, 0.05499, 0.054",\
                 "0.05273, 0.05302, 0.05362, 0.05422, 0.05464, 0.05489, 0.05495, 0.05429, 0.05211, 0.05003",\
                 "0.05251, 0.05276, 0.05335, 0.0537, 0.05229, 0.04916, 0.04709, 0.04578, 0.04489, 0.04427");
        }

        rise_power(pwr_tin_oload_10x10) {
          index_1("0.02, 0.1648, 0.6731, 1.644, 3.156, 5.278, 8.07, 11.59, 15.88, 21");
          index_2("0.001, 0.005573, 0.02162, 0.05227, 0.1, 0.167, 0.2552, 0.3663, 0.5019, 0.6635");
          values("0.01429, 0.01447, 0.01486, 0.01535, 0.01598, 0.01662, 0.01779, 0.04019, 0.1814, 0.3951",\
                 "0.01425, 0.01443, 0.01487, 0.01543, 0.01605, 0.01659, 0.01805, 0.04218, 0.1863, 0.3982",\
                 "0.01424, 0.01445, 0.01488, 0.01544, 0.01607, 0.01644, 0.01826, 0.04807, 0.2035, 0.4087",\
                 "0.01421, 0.0144, 0.01482, 0.01531, 0.01596, 0.01655, 0.01929, 0.06253, 0.2357, 0.4248",\
                 "0.01414, 0.01436, 0.01474, 0.01525, 0.01593, 0.01652, 0.02228, 0.09647, 0.2801, 0.4404",\
                 "0.01409, 0.01431, 0.01471, 0.01519, 0.0158, 0.01699, 0.03407, 0.1573, 0.3211, 0.4433",\
                 "0.01411, 0.01426, 0.01466, 0.01516, 0.01576, 0.01931, 0.08094, 0.2251, 0.3383, 0.4182",\
                 "0.01384, 0.01403, 0.01441, 0.01496, 0.01632, 0.05206, 0.1626, 0.2473, 0.3044, 0.3437",\
                 "0.01261, 0.01279, 0.01318, 0.0156, 0.06155, 0.1151, 0.1479, 0.1684, 0.1817, 0.1908",\
                 "-0.01951, -0.01952, -0.01954, -0.01956, -0.01958, -0.01959, -0.0196, -0.0196, -0.01961, -0.01961");
        }
      }

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

        cell_fall(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.1648, 0.6731, 1.644, 3.156, 5.278, 8.07, 11.59, 15.88, 21");
          index_2("0.001, 0.005573, 0.02162, 0.05227, 0.1, 0.167, 0.2552, 0.3663, 0.5019, 0.6635");
          values("5.175, 5.249, 5.439, 5.703, 6.045, 6.484, 7.044, 7.743, 8.596, 9.612",\
                 "5.239, 5.313, 5.503, 5.767, 6.109, 6.548, 7.108, 7.808, 8.66, 9.676",\
                 "5.464, 5.538, 5.728, 5.992, 6.334, 6.773, 7.333, 8.033, 8.885, 9.901",\
                 "5.894, 5.968, 6.158, 6.423, 6.764, 7.203, 7.763, 8.463, 9.315, 10.33",\
                 "6.53, 6.604, 6.794, 7.058, 7.4, 7.839, 8.4, 9.099, 9.951, 10.97",\
                 "7.269, 7.343, 7.533, 7.798, 8.139, 8.578, 9.138, 9.838, 10.69, 11.71",\
                 "8.07, 8.145, 8.335, 8.598, 8.939, 9.379, 9.938, 10.64, 11.49, 12.51",\
                 "8.929, 9.003, 9.192, 9.457, 9.799, 10.24, 10.8, 11.5, 12.35, 13.37",\
                 "9.84, 9.914, 10.1, 10.37, 10.71, 11.15, 11.71, 12.41, 13.26, 14.28",\
                 "10.8, 10.87, 11.06, 11.33, 11.67, 12.11, 12.67, 13.37, 14.22, 15.24");
        }

        cell_rise(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.1648, 0.6731, 1.644, 3.156, 5.278, 8.07, 11.59, 15.88, 21");
          index_2("0.001, 0.005573, 0.02162, 0.05227, 0.1, 0.167, 0.2552, 0.3663, 0.5019, 0.6635");
          values("7.945, 8.051, 8.373, 8.953, 9.85, 11.1, 12.75, 14.82, 17.35, 20.37",\
                 "8.01, 8.116, 8.438, 9.018, 9.915, 11.17, 12.82, 14.89, 17.42, 20.43",\
                 "8.233, 8.34, 8.661, 9.242, 10.14, 11.39, 13.04, 15.11, 17.64, 20.66",\
                 "8.657, 8.764, 9.085, 9.665, 10.56, 11.82, 13.46, 15.54, 18.07, 21.08",\
                 "9.285, 9.392, 9.714, 10.29, 11.19, 12.44, 14.09, 16.16, 18.69, 21.71",\
                 "10.02, 10.12, 10.44, 11.02, 11.92, 13.17, 14.82, 16.89, 19.42, 22.44",\
                 "10.81, 10.92, 11.24, 11.82, 12.72, 13.97, 15.62, 17.69, 20.22, 23.23",\
                 "11.67, 11.77, 12.09, 12.67, 13.57, 14.82, 16.47, 18.54, 21.07, 24.09",\
                 "12.57, 12.68, 13, 13.58, 14.48, 15.73, 17.38, 19.45, 21.98, 24.99",\
                 "13.52, 13.63, 13.95, 14.53, 15.43, 16.68, 18.33, 20.4, 22.93, 25.95");
        }

        fall_transition(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.1648, 0.6731, 1.644, 3.156, 5.278, 8.07, 11.59, 15.88, 21");
          index_2("0.001, 0.005573, 0.02162, 0.05227, 0.1, 0.167, 0.2552, 0.3663, 0.5019, 0.6635");
          values("0.351, 0.4076, 0.5746, 0.8646, 1.314, 1.974, 2.874, 4.037, 5.467, 7.178",\
                 "0.351, 0.4074, 0.574, 0.8644, 1.313, 1.974, 2.875, 4.036, 5.467, 7.178",\
                 "0.3508, 0.4072, 0.5746, 0.8646, 1.314, 1.974, 2.876, 4.034, 5.461, 7.18",\
                 "0.351, 0.4072, 0.5746, 0.8622, 1.313, 1.974, 2.876, 4.04, 5.467, 7.176",\
                 "0.3508, 0.4072, 0.5748, 0.8642, 1.312, 1.973, 2.875, 4.036, 5.468, 7.178",\
                 "0.352, 0.408, 0.574, 0.864, 1.314, 1.974, 2.874, 4.036, 5.466, 7.178",\
                 "0.35, 0.408, 0.574, 0.862, 1.312, 1.972, 2.876, 4.034, 5.46, 7.18",\
                 "0.35, 0.408, 0.576, 0.862, 1.314, 1.974, 2.878, 4.034, 5.468, 7.176",\
                 "0.35, 0.406, 0.574, 0.862, 1.314, 1.974, 2.874, 4.034, 5.458, 7.162",\
                 "0.35, 0.406, 0.576, 0.862, 1.312, 1.972, 2.876, 4.034, 5.46, 7.162");
        }

        rise_transition(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.1648, 0.6731, 1.644, 3.156, 5.278, 8.07, 11.59, 15.88, 21");
          index_2("0.001, 0.005573, 0.02162, 0.05227, 0.1, 0.167, 0.2552, 0.3663, 0.5019, 0.6635");
          values("0.4324, 0.55, 0.9992, 1.934, 3.424, 5.506, 8.256, 11.72, 15.96, 21",\
                 "0.433, 0.549, 0.9992, 1.934, 3.427, 5.515, 8.256, 11.73, 15.96, 21",\
                 "0.433, 0.5494, 0.9994, 1.934, 3.421, 5.508, 8.26, 11.73, 15.96, 21",\
                 "0.4328, 0.5496, 0.9984, 1.934, 3.422, 5.516, 8.258, 11.72, 15.95, 21.01",\
                 "0.434, 0.548, 1, 1.934, 3.426, 5.516, 8.258, 11.73, 15.95, 21.01",\
                 "0.434, 0.548, 1, 1.934, 3.422, 5.512, 8.256, 11.73, 15.95, 21.03",\
                 "0.434, 0.55, 0.998, 1.934, 3.424, 5.514, 8.26, 11.72, 15.95, 21",\
                 "0.432, 0.548, 1, 1.934, 3.418, 5.508, 8.254, 11.73, 15.96, 21",\
                 "0.434, 0.55, 1, 1.936, 3.422, 5.514, 8.258, 11.73, 15.96, 21.02",\
                 "0.434, 0.552, 1, 1.934, 3.418, 5.504, 8.256, 11.72, 15.96, 21.02");
        }
      }
    }
  }

