/*
 * 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_s") {
		scaling_factors : "gf_factors";
		area : 26250.000000;
		pad_cell : true;
		dont_use : true;
		dont_touch : true;
		cell_leakage_power : 2.494570e-03;
		leakage_power () {
			when : "!PU !PD !PAD";
			value : "0.002495";
		}
		pin ("PU") {
			max_transition : 1.000000;
			direction : "input";
			input_signal_level : "VDD";
			rise_capacitance : 0.084819;
			rise_capacitance_range(0.067032,0.097851);
			capacitance : 0.085456;
			fall_capacitance : 0.086094;
			fall_capacitance_range(0.063599,0.101436);
			internal_power () {
				rise_power ("power_inputs_1") {
					index_1("0.080000, 0.500000, 1.000000");
					values("-0.201083, 0.312577, 0.396838");
				}
				fall_power ("power_inputs_1") {
					index_1("0.080000, 0.500000, 1.000000");
					values("1.348303, 1.838264, 2.078937");
				}
			}
		}
		pin ("PD") {
			max_transition : 1.000000;
			direction : "input";
			input_signal_level : "VDD";
			rise_capacitance : 0.048447;
			rise_capacitance_range(0.045845,0.051472);
			capacitance : 0.049645;
			fall_capacitance : 0.050843;
			fall_capacitance_range(0.049340,0.052147);
			internal_power () {
				rise_power ("power_inputs_1") {
					index_1("0.080000, 0.500000, 1.000000");
					values("0.150014, 0.978087, 1.053519");
				}
				fall_power ("power_inputs_1") {
					index_1("0.080000, 0.500000, 1.000000");
					values("1.322791, 1.747262, 1.827214");
				}
			}
		}
		pin ("PAD") {
			max_transition : 1.000000;
			is_pad : true;
			direction : "input";
			input_signal_level : "DVDD";
			rise_capacitance : 2.998239;
			rise_capacitance_range(2.941810,3.031528);
			capacitance : 3.003777;
			fall_capacitance : 3.009316;
			fall_capacitance_range(2.984791,3.045345);
		}
		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.179310, -19.228210, -19.260960, -19.338230, -19.363080, -19.384150", \
					  "-19.203830, -19.253860, -19.285410, -19.365670, -19.385720, -19.412320", \
					  "-19.013870, -19.065670, -19.100110, -19.180550, -19.199150, -19.227190");
				}
				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("23.789780, 23.824360, 23.907130, 24.090660, 24.153230, 24.196730", \
					  "23.495280, 23.527200, 23.611680, 23.800420, 23.858880, 23.900180", \
					  "23.907110, 23.942430, 24.014630, 24.213910, 24.262130, 24.304800");
				}
			}
			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.917151, 0.955897, 1.003929, 1.142937, 1.210610, 1.278380", \
					  "1.010288, 1.049179, 1.096849, 1.236053, 1.303671, 1.371383", \
					  "1.058181, 1.097244, 1.144885, 1.284288, 1.352155, 1.419887");
				}
				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.130008, 0.180863, 0.252843, 0.502436, 0.631955, 0.763603", \
					  "0.130585, 0.179512, 0.251746, 0.501690, 0.630997, 0.762849", \
					  "0.130333, 0.180381, 0.252009, 0.502007, 0.629767, 0.763638");
				}
				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("1.186706, 1.221509, 1.264192, 1.383078, 1.438812, 1.494010", \
					  "1.218244, 1.253096, 1.295712, 1.414659, 1.470344, 1.525491", \
					  "1.453379, 1.488146, 1.530948, 1.650020, 1.705818, 1.761019");
				}
				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.070468, 0.114687, 0.170525, 0.355600, 0.449900, 0.545245", \
					  "0.071266, 0.114259, 0.170685, 0.356045, 0.449748, 0.545414", \
					  "0.071134, 0.114192, 0.170741, 0.356005, 0.450177, 0.545791");
				}
			}
		}
		pin ("DVDD") {
			direction : "inout";
			capacitance : 0;
		}
		pin ("DVSS") {
			direction : "inout";
			capacitance : 0;
		}
		pin ("VDD") {
			direction : "inout";
			capacitance : 0;
		}
		pin ("VSS") {
			direction : "inout";
			capacitance : 0;
		}
	}
