/*
 * 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_io__in_c") {
		scaling_factors : "gf_factors";
		area : 26250.000000;
		pad_cell : true;
		dont_use : true;
		dont_touch : true;
		cell_leakage_power : 2.403870e-03;
		leakage_power () {
			when : "!PU !PD !PAD";
			value : "0.002404";
		}
		pin ("PU") {
			max_transition : 1.000000;
			direction : "input";
			input_signal_level : "VDD";
			rise_capacitance : 0.084734;
			rise_capacitance_range(0.066953,0.097761);
			capacitance : 0.085371;
			fall_capacitance : 0.086008;
			fall_capacitance_range(0.063521,0.101346);
			internal_power () {
				rise_power ("power_inputs_1") {
					index_1("0.080000, 0.500000, 1.000000");
					values("-0.179238, 0.335773, 0.420057");
				}
				fall_power ("power_inputs_1") {
					index_1("0.080000, 0.500000, 1.000000");
					values("1.326488, 1.815085, 2.055730");
				}
			}
		}
		pin ("PD") {
			max_transition : 1.000000;
			direction : "input";
			input_signal_level : "VDD";
			rise_capacitance : 0.048472;
			rise_capacitance_range(0.045925,0.051468);
			capacitance : 0.049671;
			fall_capacitance : 0.050870;
			fall_capacitance_range(0.049425,0.052141);
			internal_power () {
				rise_power ("power_inputs_1") {
					index_1("0.080000, 0.500000, 1.000000");
					values("0.202069, 1.030636, 1.106088");
				}
				fall_power ("power_inputs_1") {
					index_1("0.080000, 0.500000, 1.000000");
					values("1.275030, 1.694617, 1.774628");
				}
			}
		}
		pin ("PAD") {
			max_transition : 1.000000;
			is_pad : true;
			direction : "input";
			input_signal_level : "DVDD";
			rise_capacitance : 3.014812;
			rise_capacitance_range(3.003404,3.022285);
			capacitance : 3.010189;
			fall_capacitance : 3.005566;
			fall_capacitance_range(2.943741,3.045794);
		}
		pin ("Y") {
			function : "((PAD))";
			direction : "output";
			max_capacitance : 0.500000;
			output_signal_level : "VDD";
			internal_power () {
				related_pin : "PAD";
				rise_power ("power_outputs_1") {
					index_1("0.08, 0.5, 1");
					index_2("0, 0.04, 0.1, 0.3, 0.4, 0.5");
					values("-19.802570, -19.850060, -19.882910, -19.959970, -19.989570, -19.998560", \
					  "-19.717460, -19.765780, -19.786950, -19.880930, -19.897810, -19.926530", \
					  "-19.593290, -19.653140, -19.690190, -19.774720, -19.793840, -19.828940");
				}
				fall_power ("power_outputs_1") {
					index_1("0.08, 0.5, 1");
					index_2("0, 0.04, 0.1, 0.3, 0.4, 0.5");
					values("22.667390, 22.692660, 22.749070, 22.840510, 22.863490, 22.879830", \
					  "23.070440, 23.098980, 23.151310, 23.242110, 23.266430, 23.283520", \
					  "23.191520, 23.214540, 23.273680, 23.366610, 23.388120, 23.405770");
				}
			}
			timing () {
				related_pin : "PAD";
				timing_type : "combinational";
				timing_sense : "positive_unate";
				cell_rise ("del_1_3_6") {
					index_1("0.080000, 0.500000, 1.000000");
					index_2("0.000000, 0.040000, 0.100000, 0.300000, 0.400000, 0.500000");
					values("0.855360, 0.894292, 0.941965, 1.081267, 1.148605, 1.216009", \
					  "0.903097, 0.941724, 0.990250, 1.129289, 1.196916, 1.264519", \
					  "0.891085, 0.929778, 0.977454, 1.116878, 1.184755, 1.252651");
				}
				rise_transition ("del_1_3_6") {
					index_1("0.080000, 0.500000, 1.000000");
					index_2("0.000000, 0.040000, 0.100000, 0.300000, 0.400000, 0.500000");
					values("0.130407, 0.179763, 0.253688, 0.502265, 0.631415, 0.762213", \
					  "0.130908, 0.180834, 0.253826, 0.502874, 0.629593, 0.763061", \
					  "0.130366, 0.180235, 0.252507, 0.500873, 0.629821, 0.764124");
				}
				cell_fall ("del_1_3_6") {
					index_1("0.080000, 0.500000, 1.000000");
					index_2("0.000000, 0.040000, 0.100000, 0.300000, 0.400000, 0.500000");
					values("0.762024, 0.797002, 0.839707, 0.958720, 1.014339, 1.069436", \
					  "0.857062, 0.892049, 0.934624, 1.053499, 1.109283, 1.164525", \
					  "1.051746, 1.086614, 1.129443, 1.248370, 1.304115, 1.359231");
				}
				fall_transition ("del_1_3_6") {
					index_1("0.080000, 0.500000, 1.000000");
					index_2("0.000000, 0.040000, 0.100000, 0.300000, 0.400000, 0.500000");
					values("0.070492, 0.113784, 0.170190, 0.354408, 0.449442, 0.546037", \
					  "0.069764, 0.113343, 0.170353, 0.355293, 0.450590, 0.544503", \
					  "0.069753, 0.113805, 0.171237, 0.355592, 0.449970, 0.545443");
				}
			}
		}
		pin ("DVDD") {
			direction : "inout";
			capacitance : 0;
		}
		pin ("DVSS") {
			direction : "inout";
			capacitance : 0;
		}
		pin ("VDD") {
			direction : "inout";
			capacitance : 0;
		}
		pin ("VSS") {
			direction : "inout";
			capacitance : 0;
		}
	}
