/*
 * 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.982920e-03;
		leakage_power () {
			when : "!PU !PD !PAD";
			value : "0.001983";
		}
		pin ("PU") {
			max_transition : 1.000000;
			direction : "input";
			input_signal_level : "VDD";
			rise_capacitance : 0.078655;
			rise_capacitance_range(0.063659,0.090191);
			capacitance : 0.078758;
			fall_capacitance : 0.078861;
			fall_capacitance_range(0.060445,0.095279);
			internal_power () {
				rise_power ("power_inputs_1") {
					index_1("0.080000, 0.500000, 1.000000");
					values("-0.264082, 0.207469, 0.189711");
				}
				fall_power ("power_inputs_1") {
					index_1("0.080000, 0.500000, 1.000000");
					values("0.835009, 1.421128, 1.548554");
				}
			}
		}
		pin ("PD") {
			max_transition : 1.000000;
			direction : "input";
			input_signal_level : "VDD";
			rise_capacitance : 0.047598;
			rise_capacitance_range(0.047154,0.048299);
			capacitance : 0.049239;
			fall_capacitance : 0.050880;
			fall_capacitance_range(0.048702,0.053043);
			internal_power () {
				rise_power ("power_inputs_1") {
					index_1("0.080000, 0.500000, 1.000000");
					values("-0.021360, 0.814892, 0.820887");
				}
				fall_power ("power_inputs_1") {
					index_1("0.080000, 0.500000, 1.000000");
					values("0.734525, 1.312342, 1.321908");
				}
			}
		}
		pin ("PAD") {
			max_transition : 1.000000;
			is_pad : true;
			direction : "input";
			input_signal_level : "DVDD";
			rise_capacitance : 3.136304;
			rise_capacitance_range(3.097949,3.159770);
			capacitance : 3.135837;
			fall_capacitance : 3.135370;
			fall_capacitance_range(3.089624,3.174904);
		}
		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("-17.255770, -17.278650, -17.291340, -17.344600, -17.361070, -17.381410", \
					  "-17.225340, -17.247410, -17.266980, -17.315870, -17.333710, -17.350110", \
					  "-17.208050, -17.205980, -17.222000, -17.291960, -17.311770, -17.328260");
				}
				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("19.871060, 19.899900, 19.946760, 20.037800, 20.068930, 20.072960", \
					  "19.926350, 19.954440, 20.006140, 20.092360, 20.112250, 20.129330", \
					  "19.689830, 19.718910, 19.773030, 19.840620, 19.863930, 19.881800");
				}
			}
			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.377978, 1.443666, 1.524477, 1.753432, 1.864187, 1.974708", \
					  "1.466037, 1.532177, 1.612358, 1.841582, 1.952190, 2.062761", \
					  "1.502681, 1.568370, 1.648743, 1.878761, 1.989182, 2.099432");
				}
				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.203973, 0.291603, 0.410411, 0.821496, 1.031092, 1.249204", \
					  "0.205545, 0.291502, 0.410906, 0.820890, 1.034046, 1.248712", \
					  "0.204681, 0.292447, 0.412228, 0.822684, 1.033643, 1.249431");
				}
				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.339739, 1.394810, 1.460364, 1.638615, 1.721096, 1.802304", \
					  "1.362128, 1.417002, 1.482387, 1.660851, 1.743247, 1.824376", \
					  "1.540622, 1.595623, 1.661327, 1.839647, 1.922023, 2.003232");
				}
				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.111380, 0.179269, 0.267327, 0.544150, 0.685066, 0.828867", \
					  "0.110791, 0.179169, 0.267742, 0.543748, 0.684196, 0.827833", \
					  "0.111239, 0.178868, 0.267487, 0.545511, 0.686349, 0.826696");
				}
			}
		}
		pin ("DVDD") {
			direction : "inout";
			capacitance : 0;
		}
		pin ("DVSS") {
			direction : "inout";
			capacitance : 0;
		}
		pin ("VDD") {
			direction : "inout";
			capacitance : 0;
		}
		pin ("VSS") {
			direction : "inout";
			capacitance : 0;
		}
	}
