/*
 * 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 : 1.473110e-01;
		leakage_power () {
			when : "!PU !PD !PAD";
			value : "0.147311";
		}
		pin ("PU") {
			max_transition : 1.000000;
			direction : "input";
			input_signal_level : "VDD";
			rise_capacitance : 0.087288;
			rise_capacitance_range(0.069452,0.100116);
			capacitance : 0.087809;
			fall_capacitance : 0.088329;
			fall_capacitance_range(0.065104,0.103576);
			internal_power () {
				rise_power ("power_inputs_1") {
					index_1("0.080000, 0.500000, 1.000000");
					values("-0.418302, 1.123574, 1.568317");
				}
				fall_power ("power_inputs_1") {
					index_1("0.080000, 0.500000, 1.000000");
					values("3.205064, 4.746819, 5.566601");
				}
			}
		}
		pin ("PD") {
			max_transition : 1.000000;
			direction : "input";
			input_signal_level : "VDD";
			rise_capacitance : 0.049430;
			rise_capacitance_range(0.046769,0.052442);
			capacitance : 0.050345;
			fall_capacitance : 0.051260;
			fall_capacitance_range(0.049178,0.052499);
			internal_power () {
				rise_power ("power_inputs_1") {
					index_1("0.080000, 0.500000, 1.000000");
					values("0.469902, 2.763868, 3.092328");
				}
				fall_power ("power_inputs_1") {
					index_1("0.080000, 0.500000, 1.000000");
					values("3.151606, 4.380296, 4.951862");
				}
			}
		}
		pin ("PAD") {
			max_transition : 1.000000;
			is_pad : true;
			direction : "input";
			input_signal_level : "DVDD";
			rise_capacitance : 2.986681;
			rise_capacitance_range(2.979423,2.993296);
			capacitance : 2.990968;
			fall_capacitance : 2.995256;
			fall_capacitance_range(2.954072,3.029540);
		}
		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("-43.656430, -43.863510, -44.047980, -44.338220, -44.439510, -44.525440", \
					  "-42.516780, -42.725730, -42.909510, -43.207470, -43.309590, -43.403800", \
					  "-41.983050, -42.187400, -42.382780, -42.709570, -42.826920, -42.922920");
				}
				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("55.005350, 55.021940, 55.187060, 55.628810, 55.776550, 55.876340", \
					  "55.049450, 55.062260, 55.238210, 55.675260, 55.827760, 55.917890", \
					  "55.407220, 55.419220, 55.588010, 56.038060, 56.192860, 56.318620");
				}
			}
			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.016156, 1.056660, 1.105918, 1.246724, 1.313704, 1.380947", \
					  "1.094531, 1.135130, 1.184191, 1.324128, 1.391518, 1.458714", \
					  "1.117900, 1.158433, 1.207099, 1.347600, 1.415419, 1.482818");
				}
				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.185906, 0.230815, 0.305668, 0.570175, 0.708449, 0.849328", \
					  "0.186873, 0.230196, 0.305787, 0.569148, 0.707872, 0.849629", \
					  "0.188168, 0.231237, 0.306385, 0.569601, 0.706954, 0.848211");
				}
				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.116049, 1.152156, 1.196903, 1.325430, 1.385870, 1.445290", \
					  "1.194796, 1.230990, 1.275820, 1.404309, 1.464738, 1.524369", \
					  "1.434271, 1.470313, 1.515105, 1.643567, 1.703968, 1.763981");
				}
				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.093200, 0.140281, 0.205096, 0.421519, 0.530743, 0.639274", \
					  "0.092891, 0.140030, 0.205595, 0.420527, 0.529980, 0.639496", \
					  "0.092847, 0.140167, 0.205628, 0.419425, 0.529220, 0.640028");
				}
			}
		}
		pin ("DVDD") {
			direction : "inout";
			capacitance : 0;
		}
		pin ("DVSS") {
			direction : "inout";
			capacitance : 0;
		}
		pin ("VDD") {
			direction : "inout";
			capacitance : 0;
		}
		pin ("VSS") {
			direction : "inout";
			capacitance : 0;
		}
	}
