/*
 * 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.
 *
 *      Single Port SRAM cell name : gf180mcu_fd_ip_sram__sram256x8m8wm1
 *      Technology                 : GF 180nm 5V Green
 *
 *      ---------
 *      Pin name:
 *      ---------
 *      Input Pins : CLK CEN GWEN WEN[7:0] A[7:0] D[7:0]
 *      Inout Pins:  VDD VSS
 *      Output Pins: Q[7:0]
 *
 *     Revision History: 1.0 (Initial Release: June 20, 2014)
 */

library(gf180mcu_fd_ip_sram__sram256x8m8wm1__ss_n40C_1v62) {
        delay_model             : table_lookup;
        revision                : 1.0;
        date                    : "June 20, 2014";
        comment                 : "GF 180nm 5V Green";
        voltage_unit            : "1V";
        time_unit               : "1ns";
        current_unit            : "1mA";
        leakage_power_unit      : "1mW";
        nom_process             : 1;
        nom_temperature         : -40;
        nom_voltage             : 1.62;
        capacitive_load_unit    (1,pf);
        pulling_resistance_unit : "1kohm";

        /* additional header data */
        default_fanout_load            : 1;
        default_inout_pin_cap          : 0.045;
        default_input_pin_cap          : 0.045;
        default_output_pin_cap         : 0;
        default_max_transition         : 10.6;
        default_cell_leakage_power     : 0;

         /* default attributes */
         slew_derate_from_library      : 1.000;
         slew_lower_threshold_pct_fall : 10.000;
         slew_upper_threshold_pct_fall : 90.000;
         slew_lower_threshold_pct_rise : 10.000;
         slew_upper_threshold_pct_rise : 90.000;
         input_threshold_pct_fall      : 50.000;
         input_threshold_pct_rise      : 50.000;
         output_threshold_pct_fall     : 50.000;
         output_threshold_pct_rise     : 50.000;
         default_leakage_power_density : 0;

        /* k-factors */
        k_process_recovery_fall        : 1;
        k_process_recovery_rise        : 1;
        k_process_cell_fall            : 1;
        k_process_cell_leakage_power   : 0;
        k_process_cell_rise            : 1;
        k_process_fall_transition      : 1;
        k_process_hold_fall            : 1;
        k_process_hold_rise            : 1;
        k_process_internal_power       : 0;
        k_process_min_pulse_width_high : 1;
        k_process_min_pulse_width_low  : 1;
        k_process_setup_fall           : 1;
        k_process_setup_rise           : 1;
        k_process_wire_cap             : 0;
        k_process_wire_res             : 0;
        k_process_pin_cap              : 0;
        k_process_rise_transition      : 1;
        k_temp_cell_fall               : 0.000;
        k_temp_cell_rise               : 0.000;
        k_temp_hold_fall               : 0.000;
        k_temp_hold_rise               : 0.000;
        k_temp_min_pulse_width_high    : 0.000;
        k_temp_min_pulse_width_low     : 0.000;
        k_temp_min_period              : 0.000;
        k_temp_rise_propagation        : 0.000;
        k_temp_fall_propagation        : 0.000;
        k_temp_rise_transition         : 0.000;
        k_temp_fall_transition         : 0.000;
        k_temp_recovery_fall           : 0.000;
        k_temp_recovery_rise           : 0.000;
        k_temp_setup_fall              : 0.000;
        k_temp_setup_rise              : 0.000;
        k_volt_cell_fall               : 0.000;
        k_volt_cell_rise               : 0.000;
        k_volt_hold_fall               : 0.000;
        k_volt_hold_rise               : 0.000;
        k_volt_min_pulse_width_high    : 0.000;
        k_volt_min_pulse_width_low     : 0.000;
        k_volt_min_period              : 0.000;
        k_volt_recovery_fall           : 0.000;
        k_volt_recovery_rise           : 0.000;
        k_volt_setup_fall              : 0.000;
        k_volt_setup_rise              : 0.000;
        k_volt_rise_propagation        : 0.000;
        k_volt_fall_propagation        : 0.000;
        k_volt_rise_transition         : 0.000;
        k_volt_fall_transition         : 0.000;

         voltage_map (VDD, 1.62);
         voltage_map (VSS, 0.00);
         operating_conditions(ss_1p62v_m40C) {
                process       : 1;
                temperature   : -40;
                voltage       : 1.62;
                tree_type     : balanced_tree;
         }

         default_operating_conditions : ss_1p62v_m40C;
         wire_load("Estimate") {
                resistance    : 1.44e-05;
                capacitance   : 0.00018;
                area          : 1.7;
                slope         : 500;
                fanout_length (1,500);
         }
         power_lut_template(power_template) {
            variable_1 : input_transition_time;
                 index_1 ("1001, 1002, 1003, 1004, 1005, 1006, 1007");
         }
         lu_table_template(q_delay_template) {
            variable_1 : input_net_transition;
            variable_2 : total_output_net_capacitance;
                 index_1 ("1001, 1002, 1003, 1004, 1005, 1006, 1007");
                 index_2 ("1001, 1002, 1003, 1004, 1005, 1006, 1007");
         }
         lu_table_template(q_slew_template) {
            variable_1 : total_output_net_capacitance;
                 index_1 ("1001, 1002, 1003, 1004, 1005, 1006, 1007");
         }
         lu_table_template(constraint_template) {
            variable_1 : related_pin_transition;
            variable_2 : constrained_pin_transition;
                 index_1 ("1001, 1002, 1003, 1004, 1005, 1006, 1007");
                 index_2 ("1001, 1002, 1003, 1004, 1005, 1006, 1007");
         }

         library_features(report_delay_calculation);

         type (A_BUS) {
                base_type : array;
                data_type : bit;
                bit_width : 8;
                bit_from  : 7;
                bit_to    : 0;
                downto    : true;
         }
         type (Q_BUS) {
                base_type : array;
                data_type : bit;
                bit_width : 8;
                bit_from  : 7;
                bit_to    : 0;
                downto    : true;
         }
 cell(gf180mcu_fd_ip_sram__sram256x8m8wm1) {
        area             : 147212.4368;
        dont_use         : TRUE;
        dont_touch       : TRUE;
        interface_timing : TRUE;
        memory() {
                type          : ram;
                address_width : 8;
                word_width    : 8;
        }

                 bus(Q)   {
                  bus_type             : Q_BUS;
                  direction            : output;
                  max_capacitance      : 1.03;
                  memory_read() {
                        address        : A;
                  }
                  timing() {
                          related_pin  : "CLK";
                          timing_type  : rising_edge;
                          timing_sense : non_unate;
       		  when : "((!CEN) & (GWEN))";
        	  sdf_cond : "CEN== 1'b0 && GWEN== 1'b1";
                          cell_rise(q_delay_template) {
			  index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
			  index_2 ("0.01, 0.02835, 0.09278, 0.2158, 0.4075, 0.6764, 1.03");
                          values  ( \
                            "34.2708, 34.3872, 34.8216, 35.5848, 36.7944, 38.352, 40.452", \
                            "34.3956, 34.4652, 34.9704, 35.6988, 36.7944, 38.4264, 40.572", \
                            "34.5324, 34.6968, 35.0928, 35.9496, 37.0404, 38.6472, 40.7292", \
                            "34.9212, 35.0184, 35.5056, 36.222, 37.4208, 39.0396, 41.1444", \
                            "35.598, 35.7276, 36.1668, 36.9432, 38.0916, 39.6924, 41.7828", \
                            "36.4272, 36.5244, 36.9384, 37.7112, 38.856, 40.4448, 42.5676", \
                            "37.3716, 37.5612, 37.938, 38.7372, 39.852, 41.4576, 43.5108" \
                          )
                          }
                          rise_transition(q_slew_template) {
                          index_1 ("0.01, 0.02835, 0.09278, 0.2158, 0.4075, 0.6764, 1.03");
                          values  ( \
  	                     "0.854148, 1.04194, 1.6896, 2.96928, 4.89756, 7.689, 11.3356" \
                          )

                          }
                          cell_fall(q_delay_template) {
                          index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          index_2 ("0.01, 0.02835, 0.09278, 0.2158, 0.4075, 0.6764, 1.03");
                          values  ( \
                            "36.8388, 36.912, 37.206, 37.6416, 38.1648, 38.8116, 39.5988", \
                            "36.9552, 36.9816, 37.3332, 37.7328, 38.1888, 38.8332, 39.7176", \
                            "37.098, 37.2444, 37.5, 38.0112, 38.4408, 39.126, 39.8556", \
                            "37.4472, 37.5504, 37.902, 38.28, 38.7888, 39.4836, 40.236", \
                            "38.1672, 38.2884, 38.5812, 38.9856, 39.5256, 40.1544, 40.9668", \
                            "39.0036, 39.0396, 39.3012, 39.7572, 40.302, 40.9404, 41.7072", \
                            "39.8916, 40.0824, 40.2888, 40.7532, 41.2368, 41.8692, 42.6408" \
                          )
                          }
                          fall_transition(q_slew_template) {
                          index_1 ("0.01, 0.02835, 0.09278, 0.2158, 0.4075, 0.6764, 1.03");
                          values  ( \
                            "0.9051, 1.04794, 1.25268, 1.73352, 2.37804, 3.36696, 4.43532" \
                          )
                          }
                  }
          }
          pin(CLK)   {
                  direction            : input;
                  capacitance          : 0.295918;
                  clock                : true;
                  max_transition       : 10.6;
                  min_pulse_width_high : 18.4434;
                  min_pulse_width_low  : 24.2445;
                  min_period           : 49.6236;

/* WRITE POWER */
             internal_power() {
              when : "!CEN & !GWEN & (!WEN[0] | !WEN[1] | !WEN[2] | !WEN[3] | !WEN[4] | !WEN[5] | !WEN[6] | !WEN[7])";
              rise_power(power_template) {
                index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                values  ("81.2349, 81.2349, 81.2349, 81.2349, 81.2349, 81.2349, 81.2349");
              }
              fall_power(power_template) {
                index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                values  ("81.2349, 81.2349, 81.2349, 81.2349, 81.2349, 81.2349, 81.2349");
              }
             }
/* DISABLED POWER */
             internal_power() {
              when : "CEN";
              rise_power(power_template) {
                index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                values  ("3.54812e-05, 3.54812e-05, 3.54812e-05, 3.54812e-05, 3.54812e-05, 3.54812e-05, 3.54812e-05");
              }
              fall_power(power_template) {
                index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                values  ("3.54812e-05, 3.54812e-05, 3.54812e-05, 3.54812e-05, 3.54812e-05, 3.54812e-05, 3.54812e-05");
              }
             }
/* READ POWER */
             internal_power() {
             when : "!CEN & GWEN";
             rise_power(power_template) {
                index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                values  ("75.087, 75.087, 75.087, 75.087, 75.087, 75.087, 75.087");
              }
              fall_power(power_template) {
                index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                values  ("75.087, 75.087, 75.087, 75.087, 75.087, 75.087, 75.087");
              }
             }
          }

          pg_pin(VDD) {
                  voltage_name     : VDD;
                  pg_type          : primary_power;
          }
          pg_pin(VSS) {
                  voltage_name     : VSS;
                  pg_type          : primary_ground;
          }
          pin(CEN)   {
                  direction            : input;
                  capacitance          : 0.0194382;
                  timing() {
                          related_pin  : CLK;
                          timing_type  : setup_rising;
                          rise_constraint(constraint_template) {
                          index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          index_2 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          values  ( \
                            "3.58182, 3.55476, 3.65497, 4.05977, 4.93812, 6.127, 7.74829", \
                            "3.51824, 3.49129, 3.59128, 3.99531, 4.86783, 6.05704, 7.74939", \
                            "3.28295, 3.26073, 3.35687, 3.76068, 4.63287, 5.82791, 7.51388", \
                            "2.86638, 2.83679, 2.93711, 3.3418, 4.23148, 5.40903, 7.08092", \
                            "2.87199, 2.83789, 2.92446, 3.32277, 4.22246, 5.40166, 7.07212", \
                            "2.87419, 2.83767, 2.92479, 3.33014, 4.22213, 5.39968, 7.08598", \
                            "2.87463, 2.84724, 2.92347, 3.33091, 4.23027, 5.40034, 7.05045" \
                          )
                          }
                          fall_constraint(constraint_template) {
                          index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          index_2 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          values  ( \
                            "2.36808, 2.42143, 2.63549, 3.07582, 3.85506, 4.97728, 6.47163", \
                            "2.31231, 2.35752, 2.57191, 3.01213, 3.7906, 4.91381, 6.40816", \
                            "2.07394, 2.12509, 2.33398, 2.77662, 3.55597, 4.6783, 6.17276", \
                            "2.0108, 2.07108, 2.29207, 2.7368, 3.49998, 4.63573, 6.12183", \
                            "2.01124, 2.07141, 2.28987, 2.73691, 3.5002, 4.63408, 6.12315", \
                            "2.01278, 2.06965, 2.2902, 2.73493, 3.49822, 4.63232, 6.1204", \
                            "2.02081, 2.07009, 2.29086, 2.73636, 3.49888, 4.63155, 6.12172" \
                          )
                          }
                  }
                  timing() {
                          related_pin     : CLK;
                          timing_type     : hold_rising;
                          rise_constraint(constraint_template) {
                          index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          index_2 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          values  ( \
                            "7.26374, 7.30015, 7.21413, 6.81021, 5.91723, 4.73814, 3.11553", \
                            "7.30708, 7.34327, 7.25747, 6.86246, 5.96805, 4.78423, 3.09518", \
                            "7.54721, 7.58351, 7.4965, 7.09115, 6.20818, 5.02172, 3.33542", \
                            "7.96686, 8.00052, 7.90537, 7.50156, 6.59945, 5.42949, 3.76046", \
                            "8.65711, 8.69132, 8.60475, 8.20633, 7.30675, 6.12744, 4.45698", \
                            "9.63501, 9.67153, 9.58441, 9.17906, 8.28707, 7.10952, 5.42311", \
                            "10.8262, 10.8536, 10.7772, 10.3699, 9.47056, 8.30049, 6.65038" \
                          )
                          }
                          fall_constraint(constraint_template) {
                          index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          index_2 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          values  ( \
                            "8.12449, 8.06839, 7.84751, 7.40289, 6.6396, 5.50561, 4.01764", \
                            "8.1609, 8.11195, 7.89085, 7.44623, 6.68371, 5.54884, 4.06076", \
                            "8.39916, 8.34229, 8.1334, 7.68636, 6.92318, 5.78897, 4.30089", \
                            "8.82013, 8.75985, 8.53886, 8.09413, 7.33095, 6.1952, 4.7091", \
                            "9.51797, 9.45769, 9.23923, 8.79219, 8.0289, 6.89502, 5.40595", \
                            "10.4964, 10.4396, 10.219, 9.77427, 9.01098, 7.87688, 6.3888", \
                            "11.6798, 11.6303, 11.4103, 10.9644, 10.2018, 9.06928, 7.579" \
                          )
                          }
                 }
          }
          pin(GWEN)   {
                  direction            : input;
                  capacitance          : 0.0435041;
                  timing() {
                          related_pin  : CLK;
                          timing_type  : setup_rising;
                          rise_constraint(constraint_template) {
                          index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          index_2 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          values  ( \
                            "3.78796, 3.84692, 4.06868, 4.4957, 5.19002, 6.08267, 7.23668", \
                            "3.72526, 3.78444, 4.00653, 4.433, 5.11269, 6.03922, 7.17398", \
                            "3.50856, 3.56532, 3.80039, 4.23203, 4.90105, 5.8003, 6.95453", \
                            "3.07351, 3.14215, 3.36413, 3.80875, 4.48492, 5.37757, 6.51827", \
                            "2.37292, 2.44552, 2.67608, 3.1075, 3.78752, 4.67632, 5.79953", \
                            "1.56596, 1.62514, 1.85944, 2.29174, 2.95405, 3.86078, 5.01468", \
                            "0.611864, 0.667161, 0.915596, 1.34673, 2.02301, 2.91588, 4.06956" \
                          )
                          }
                          fall_constraint(constraint_template) {
                          index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          index_2 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          values  ( \
                            "5.39176, 5.48251, 5.71373, 6.23436, 7.01602, 8.15584, 9.68517", \
                            "5.33236, 5.41948, 5.66797, 6.17166, 6.94595, 8.1114, 9.55075", \
                            "5.13799, 5.17088, 5.41684, 5.94847, 6.73431, 7.87402, 9.33163", \
                            "4.7135, 4.77708, 5.02524, 5.5319, 6.31103, 7.45063, 8.97809", \
                            "3.98717, 4.04855, 4.29209, 4.82757, 5.60967, 6.74949, 8.27871", \
                            "3.19462, 3.26007, 3.49151, 4.00807, 4.79424, 5.93384, 7.39145", \
                            "2.22728, 2.299, 2.55145, 3.06955, 3.84912, 4.97662, 6.52355" \
                          )
                          }
                  }
                  timing() {
                          related_pin     : CLK;
                          timing_type     : hold_rising;
                          rise_constraint(constraint_template) {
                          index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          index_2 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          values  ( \
                            "6.6902, 6.63696, 6.43852, 5.97729, 5.33775, 4.58172, 3.67928", \
                            "6.27737, 6.22446, 6.02569, 5.56446, 4.91832, 4.11873, 3.26612", \
                            "5.69052, 5.63288, 5.40067, 4.9687, 4.33928, 3.5739, 2.6752", \
                            "5.37295, 5.3185, 5.12105, 4.65861, 4.02072, 3.2648, 2.37611", \
                            "5.81328, 5.75564, 5.52827, 5.09586, 4.45797, 3.70205, 2.81743", \
                            "6.56667, 6.51365, 6.27627, 5.85189, 5.20773, 4.45819, 3.55575", \
                            "7.50629, 7.45327, 7.22128, 6.78887, 6.1512, 5.39517, 4.49273" \
                          )
                          }
                          fall_constraint(constraint_template) {
                          index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          index_2 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          values  ( \
                            "3.98255, 3.95164, 3.67587, 3.15293, 2.41879, 1.26442, 0", \
                            "3.56026, 3.5354, 3.27888, 2.7401, 2.00992, 0.832634, 0", \
                            "2.9656, 2.92435, 2.68312, 2.13994, 1.41196, 0.256456, 0", \
                            "2.66519, 2.63142, 2.38282, 1.83194, 1.10224, 0, 0", \
                            "3.10123, 3.06779, 2.81083, 2.27403, 1.53857, 0.384461, 0", \
                            "3.85957, 3.8247, 3.55234, 3.02522, 2.29526, 1.14057, 0", \
                            "4.79402, 4.76531, 4.51242, 3.96539, 3.23301, 2.08527, 0.531861" \
                          )
                          }
                 }
          }
          bus(WEN)   {
                  bus_type             : Q_BUS;
                  direction            : input;
                  capacitance          : 0.00722787;
                  timing() {
                          related_pin  : CLK;
                          timing_type  : setup_rising;
                          rise_constraint(constraint_template) {
                          index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          index_2 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          values  ( \
                            "0, 0, 0, 0, 0, 0, 0.27503", \
                            "0, 0, 0, 0, 0, 0, 0.685443", \
                            "0, 0, 0, 0, 0, 0.35915, 1.27679", \
                            "0, 0, 0, 0, 0, 0.670428, 1.58081", \
                            "0, 0, 0, 0, 0, 0.234209, 1.13674", \
                            "0, 0, 0, 0, 0, 0, 0.391193", \
                            "0, 0, 0, 0, 0, 0, 0" \
                          )
                          }
                          fall_constraint(constraint_template) {
                          index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          index_2 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          values  ( \
                            "0, 0, 0.146942, 0.665203, 1.41427, 2.56927, 4.11246", \
                            "0.254003, 0.275956, 0.525547, 1.07663, 1.82039, 2.98881, 4.47381", \
                            "0.842193, 0.888228, 1.13969, 1.67695, 2.41637, 3.57247, 5.06132", \
                            "1.1676, 1.19151, 1.43506, 1.99375, 2.73152, 3.87618, 5.46667", \
                            "0.708587, 0.741961, 1.01357, 1.54561, 2.28954, 3.43948, 4.98861", \
                            "0, 0, 0.267805, 0.798105, 1.53626, 2.67344, 4.17923", \
                            "0, 0, 0, 0, 0.596871, 1.73481, 3.32739" \
                          )
                          }
                  }
                  timing() {
                          related_pin     : CLK;
                          timing_type     : hold_rising;
                          rise_constraint(constraint_template) {
                          index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          index_2 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          values  ( \
                            "6.72408, 6.67986, 6.43852, 6.00391, 5.35326, 4.59107, 3.69424", \
                            "6.31136, 6.26714, 6.02569, 5.59119, 4.94043, 4.17076, 3.28152", \
                            "5.71736, 5.67325, 5.42916, 4.9973, 4.34665, 3.58435, 2.68763", \
                            "5.40727, 5.36195, 5.12105, 4.6871, 4.04074, 3.26843, 2.37655", \
                            "5.84452, 5.79953, 5.55665, 5.12435, 4.4737, 3.7114, 2.81743", \
                            "6.60066, 6.55644, 6.31301, 5.88049, 5.22984, 4.46754, 3.57082", \
                            "7.53742, 7.49353, 7.25076, 6.82209, 6.17694, 5.4021, 4.50791" \
                          )
                          }
                          fall_constraint(constraint_template) {
                          index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          index_2 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          values  ( \
                            "3.98255, 3.95164, 3.67741, 3.15293, 2.41879, 1.26442, 0", \
                            "3.56026, 3.5354, 3.27888, 2.7401, 2.00992, 0.832634, 0", \
                            "2.9656, 2.92435, 2.68312, 2.13994, 1.41196, 0.256456, 0", \
                            "2.66519, 2.63142, 2.38282, 1.83194, 1.10224, 0, 0", \
                            "3.10123, 3.06779, 2.81083, 2.27403, 1.53857, 0.384461, 0", \
                            "3.85957, 3.8247, 3.55421, 3.02522, 2.29526, 1.14057, 0", \
                            "4.79402, 4.76531, 4.51242, 3.96539, 3.23301, 2.08527, 0.531861" \
                          )
                          }
                 }
          }
          bus(A)   {
                  bus_type             : A_BUS;
                  direction            : input;
                  capacitance          : 0.0437212;
                  timing() {
                          related_pin  : CLK;
                          timing_type  : setup_rising;
                          rise_constraint(constraint_template) {
                          index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          index_2 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          values  ( \
                            "3.52352, 3.51263, 3.61867, 4.03425, 4.9016, 6.12997, 7.73707", \
                            "3.46808, 3.48238, 3.5574, 3.97298, 4.84033, 6.06177, 7.64555", \
                            "3.23631, 3.21541, 3.33091, 3.7466, 4.61384, 5.83506, 7.42445", \
                            "3.31397, 3.30715, 3.41385, 3.84197, 4.72373, 5.95595, 7.5372", \
                            "2.87375, 2.85725, 2.99101, 3.40131, 4.30023, 5.50891, 7.09148", \
                            "2.13752, 2.1219, 2.24169, 2.6455, 3.52902, 4.74507, 6.33369", \
                            "1.20979, 1.19577, 1.31006, 1.71952, 2.61701, 3.82635, 5.34611" \
                          )
                          }
                          fall_constraint(constraint_template) {
                          index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          index_2 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          values  ( \
                            "2.50261, 2.48391, 2.68114, 3.21299, 3.99443, 5.13546, 6.62783", \
                            "2.90774, 2.89575, 3.08836, 3.62131, 4.41386, 5.55269, 7.03285", \
                            "3.50625, 3.4694, 3.68632, 4.19298, 4.98443, 6.13008, 7.62179", \
                            "3.80446, 3.78389, 3.97936, 4.51088, 5.30552, 6.46657, 7.94475", \
                            "3.35379, 3.35269, 3.61801, 4.06725, 4.85199, 5.99159, 7.51619", \
                            "2.61888, 2.58137, 2.79378, 3.33443, 4.11092, 5.2525, 6.73068", \
                            "1.65484, 1.66551, 1.85735, 2.38535, 3.1746, 4.30727, 5.79986" \
                          )
                          }
                  }
                  timing() {
                          related_pin     : CLK;
                          timing_type     : hold_rising;
                          rise_constraint(constraint_template) {
                          index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          index_2 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          values  ( \
                            "2.4783, 2.49381, 2.36489, 1.95349, 1.08206, 0, 0", \
                            "2.54826, 2.54342, 2.44112, 2.02972, 1.15825, 0.025047, 0", \
                            "2.76507, 2.78806, 2.65111, 2.2396, 1.36818, 0.234978, 0", \
                            "3.14501, 3.15689, 3.03105, 2.61954, 1.74713, 0.614955, 0", \
                            "3.88883, 3.91061, 3.7708, 3.3594, 2.48798, 1.35476, 0", \
                            "4.80667, 4.81855, 4.6926, 4.2812, 3.40978, 2.27656, 0.860937", \
                            "5.9686, 5.98026, 5.8509, 5.44302, 4.5716, 3.43838, 2.02279" \
                          )
                          }
                          fall_constraint(constraint_template) {
                          index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          index_2 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          values  ( \
                            "3.07736, 3.03259, 2.81787, 2.33959, 1.6665, 0.854337, 0", \
                            "3.15359, 3.10871, 2.8941, 2.41934, 1.74339, 0.930534, 0", \
                            "3.36248, 3.31859, 3.10398, 2.62933, 1.95261, 1.14049, 0.130794", \
                            "3.74132, 3.69853, 3.48403, 3.00927, 2.33255, 1.52042, 0.510983", \
                            "4.48338, 4.43839, 4.20189, 3.74902, 3.07241, 2.2594, 1.25062", \
                            "5.40507, 5.36019, 5.14052, 4.66125, 3.9941, 3.18142, 2.17261", \
                            "6.56469, 6.52201, 6.30564, 5.83264, 5.15603, 4.34313, 3.33421" \
                          )
                          }
                 }
          }
          bus(D)   {
                  bus_type             : Q_BUS;
                  memory_write() {
                          address      : A;
                          clocked_on   : "CLK";
                  }
                  direction            : input;
                  capacitance          : 0.0170448;
                  timing() {
                          related_pin  : CLK;
                          timing_type  : setup_rising;
                          rise_constraint(constraint_template) {
                          index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          index_2 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          values  ( \
                            "3.27965, 3.35368, 3.58347, 3.99861, 4.51682, 5.18419, 5.90612", \
                            "3.69127, 3.76255, 3.982, 4.41562, 4.94362, 5.60021, 6.31026", \
                            "4.29759, 4.37349, 4.57578, 5.00544, 5.53146, 6.20158, 6.90976", \
                            "4.59888, 4.66642, 4.90105, 5.32059, 5.84177, 6.50595, 7.21523", \
                            "4.15701, 4.22873, 4.44136, 4.8796, 5.41453, 6.07365, 6.75576", \
                            "3.40582, 3.46643, 3.69512, 4.12588, 4.65883, 5.30948, 6.02272", \
                            "2.46708, 2.54265, 2.76804, 3.19693, 3.71261, 4.36645, 5.08068" \
                          )
                          }
                          fall_constraint(constraint_template) {
                          index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          index_2 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          values  ( \
                            "0, 0, 0, 0, 0, 0.95194, 2.40339", \
                            "0, 0, 0, 0, 0.190847, 1.36686, 2.81831", \
                            "0, 0, 0, 0.048279, 0.777084, 1.95129, 3.40362", \
                            "0, 0, 0, 0.361636, 1.0924, 2.26721, 3.71811", \
                            "0, 0, 0, 0, 0.649121, 1.81632, 3.27547", \
                            "0, 0, 0, 0, 0, 1.06794, 2.51966", \
                            "0, 0, 0, 0, 0, 0.140577, 1.59346" \
                          )
                          }
                  }
                  timing() {
                          related_pin     : CLK;
                          timing_type     : hold_rising;
                          rise_constraint(constraint_template) {
                          index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          index_2 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          values  ( \
                            "3.23301, 3.16943, 2.94294, 2.51944, 1.98605, 1.33716, 0.631114", \
                            "2.82326, 2.75781, 2.53649, 2.10947, 1.57729, 0.9372, 0.21948", \
                            "2.22343, 2.14918, 1.9404, 1.51437, 0.979286, 0.330528, 0", \
                            "1.91543, 1.85394, 1.62536, 1.20189, 0.668591, 0.019712, 0", \
                            "2.3595, 2.29427, 2.06778, 1.64428, 1.11088, 0.462044, 0", \
                            "3.10574, 3.04854, 2.82216, 2.39866, 1.86527, 1.21642, 0.510378", \
                            "4.05548, 3.99245, 3.76849, 3.34268, 2.81149, 2.16227, 1.45376" \
                          )
                          }
                          fall_constraint(constraint_template) {
                          index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          index_2 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                          values  ( \
                            "5.92328, 5.89776, 5.70801, 5.1953, 4.41309, 3.26788, 1.78002", \
                            "5.51067, 5.48999, 5.2965, 4.78368, 4.00158, 2.85626, 1.3684", \
                            "4.91634, 4.895, 4.70151, 4.18869, 3.40659, 2.26127, 0.773454", \
                            "4.60515, 4.58414, 4.39065, 3.87783, 3.09573, 1.95041, 0.462561", \
                            "5.0468, 5.02645, 4.83296, 4.32014, 3.53804, 2.39272, 0.904882", \
                            "5.80184, 5.78083, 5.58734, 5.07452, 4.29242, 3.1471, 1.65924", \
                            "6.74377, 6.71858, 6.52938, 6.01645, 5.23435, 4.08903, 2.60117" \
                          )
                          }
                 }
        }
          cell_leakage_power : 3.548124e-05;
}
}
