/*
 * 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 : 1.135920e-03;
		leakage_power () {
			when : "!PU !PD !PAD";
			value : "0.001136";
		}
		pin ("PU") {
			max_transition : 1.000000;
			direction : "input";
			input_signal_level : "VDD";
			rise_capacitance : 0.072265;
			rise_capacitance_range(0.059433,0.082276);
			capacitance : 0.071988;
			fall_capacitance : 0.071712;
			fall_capacitance_range(0.057162,0.084471);
			internal_power () {
				rise_power ("power_inputs_1") {
					index_1("0.080000, 0.500000, 1.000000");
					values("-0.167202, 0.073027, 0.027042");
				}
				fall_power ("power_inputs_1") {
					index_1("0.080000, 0.500000, 1.000000");
					values("0.393050, 0.793363, 0.854548");
				}
			}
		}
		pin ("PD") {
			max_transition : 1.000000;
			direction : "input";
			input_signal_level : "VDD";
			rise_capacitance : 0.047607;
			rise_capacitance_range(0.046165,0.048961);
			capacitance : 0.048374;
			fall_capacitance : 0.049141;
			fall_capacitance_range(0.047190,0.050386);
			internal_power () {
				rise_power ("power_inputs_1") {
					index_1("0.080000, 0.500000, 1.000000");
					values("-0.042928, 0.400664, 0.422222");
				}
				fall_power ("power_inputs_1") {
					index_1("0.080000, 0.500000, 1.000000");
					values("0.314422, 0.711179, 0.677786");
				}
			}
		}
		pin ("PAD") {
			max_transition : 1.000000;
			is_pad : true;
			direction : "input";
			input_signal_level : "DVDD";
			rise_capacitance : 3.249865;
			rise_capacitance_range(3.211172,3.277935);
			capacitance : 3.241806;
			fall_capacitance : 3.233748;
			fall_capacitance_range(3.212256,3.253766);
		}
		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("-10.379940, -10.383450, -10.385670, -10.402130, -10.411070, -10.416030", \
					  "-10.343920, -10.346130, -10.349000, -10.371720, -10.376450, -10.378700", \
					  "-10.356180, -10.355730, -10.354080, -10.371280, -10.385100, -10.400360");
				}
				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("11.798000, 11.820950, 11.852810, 11.905120, 11.917350, 11.927510", \
					  "11.609080, 11.632580, 11.663090, 11.715290, 11.728900, 11.739670", \
					  "11.641460, 11.664730, 11.692310, 11.752990, 11.765180, 11.775170");
				}
			}
			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("1.954589, 2.055080, 2.172867, 2.508041, 2.670128, 2.831422", \
					  "2.075769, 2.175624, 2.293503, 2.629454, 2.791209, 2.952592", \
					  "2.169636, 2.269868, 2.387628, 2.723722, 2.885249, 3.046078");
				}
				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.272574, 0.397148, 0.565343, 1.152560, 1.455713, 1.759532", \
					  "0.273117, 0.398571, 0.566069, 1.150595, 1.453264, 1.754057", \
					  "0.275785, 0.397143, 0.565451, 1.149242, 1.451842, 1.757298");
				}
				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("2.081038, 2.154831, 2.240601, 2.472546, 2.579044, 2.683608", \
					  "2.041509, 2.115203, 2.201267, 2.433123, 2.538959, 2.643692", \
					  "2.195009, 2.268686, 2.355051, 2.587274, 2.692741, 2.797450");
				}
				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.151808, 0.239051, 0.349332, 0.710799, 0.894274, 1.077039", \
					  "0.152440, 0.236956, 0.351475, 0.709336, 0.893040, 1.079448", \
					  "0.152245, 0.238238, 0.350194, 0.710825, 0.894824, 1.077258");
				}
			}
		}
		pin ("DVDD") {
			direction : "inout";
			capacitance : 0;
		}
		pin ("DVSS") {
			direction : "inout";
			capacitance : 0;
		}
		pin ("VDD") {
			direction : "inout";
			capacitance : 0;
		}
		pin ("VSS") {
			direction : "inout";
			capacitance : 0;
		}
	}
