/*
 * 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__hold) {
    area : 19.756800 ;

    leakage_power() {
      related_pg_pin : "VDD" ;
      when : "!Z" ;
      value : "1.306386e-05" ;
    }

    leakage_power() {
      related_pg_pin : "VDD" ;
      when : "Z" ;
      value : "1.306386e-05" ;
    }

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

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

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

    pin(Z) {
      capacitance : 0.02649 ;
      direction : inout ;
      driver_type : bus_hold ;
      function : "Z" ;
      input_voltage : default ;
      max_transition : 12 ;
      output_voltage : default ;
      related_ground_pin : VSS ;
      related_power_pin : VDD ;
      three_state : "1" ;

      internal_power() {

        fall_power(pwr_tin_10) {
          index_1("0.02, 0.1027, 0.3929, 0.9472, 1.811, 3.022, 4.617, 6.625, 9.077, 12");
          values("0.02408, 0.02362, 0.02338, 0.02393, 0.02515, 0.02689, 0.02916, \
                 0.03205, 0.03556, 0.03977");
        }

        rise_power(pwr_tin_10) {
          index_1("0.02, 0.1027, 0.3929, 0.9472, 1.811, 3.022, 4.617, 6.625, 9.077, 12");
          values("0.001171, 0.0009111, 0.0003724, 0.0001652, 0.0006863, 0.002015, \
                 0.004116, 0.007035, 0.01081, 0.01548");
        }
      }
    }
  }
