/*
 * 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__sram64x8m8wm1
 *      Technology                 : GF 180nm 5V Green
 *
 *      ---------
 *      Pin name:
 *      ---------
 *      Input Pins : CLK CEN GWEN WEN[7:0] A[5: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__sram64x8m8wm1__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 : 6;
                bit_from  : 5;
                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__sram64x8m8wm1) {
        area             : 100571.5568;
        dont_use         : TRUE;
        dont_touch       : TRUE;
        interface_timing : TRUE;
        memory() {
                type          : ram;
                address_width : 6;
                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  ( \
                            "32.2344, 32.3484, 32.8068, 33.5496, 34.7016, 36.2184, 38.3064", \
                            "32.2848, 32.4192, 32.9124, 33.6192, 34.8, 36.3768, 38.502", \
                            "32.5248, 32.6316, 33.0648, 33.8448, 34.986, 36.5796, 38.682", \
                            "32.9508, 33.0552, 33.5148, 34.2324, 35.3868, 37.0392, 39.0948", \
                            "33.6108, 33.8064, 34.1424, 34.8996, 36.0816, 37.7196, 39.774", \
                            "34.4124, 34.4964, 34.9308, 35.7252, 36.8616, 38.4636, 40.572", \
                            "35.4084, 35.5464, 36.0384, 36.7464, 37.9212, 39.4776, 41.586" \
                          )
                          }
                          rise_transition(q_slew_template) {
                          index_1 ("0.01, 0.02835, 0.09278, 0.2158, 0.4075, 0.6764, 1.03");
                          values  ( \
  	                     "0.884292, 1.06388, 1.7394, 2.95692, 4.88208, 7.67892, 11.3596" \
                          )

                          }
                          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  ( \
                            "34.7448, 34.8216, 35.1624, 35.526, 36.06, 36.5772, 37.416", \
                            "34.8048, 34.9296, 35.2776, 35.64, 36.1956, 36.7872, 37.644", \
                            "35.0508, 35.1336, 35.4312, 35.8344, 36.3864, 36.99, 37.7808", \
                            "35.466, 35.5476, 35.868, 36.2328, 36.774, 37.4628, 38.22", \
                            "36.1284, 36.2976, 36.48, 36.8892, 37.452, 38.1552, 38.892", \
                            "36.9096, 36.9648, 37.2672, 37.7448, 38.2476, 38.8956, 39.66", \
                            "37.908, 38.0412, 38.3556, 38.736, 39.3072, 39.9156, 40.6608" \
                          )
                          }
                          fall_transition(q_slew_template) {
                          index_1 ("0.01, 0.02835, 0.09278, 0.2158, 0.4075, 0.6764, 1.03");
                          values  ( \
                            "0.865476, 0.966876, 1.26732, 1.71984, 2.3862, 3.3366, 4.46712" \
                          )
                          }
                  }
          }
          pin(CLK)   {
                  direction            : input;
                  capacitance          : 0.293687;
                  clock                : true;
                  max_transition       : 10.6;
                  min_pulse_width_high : 17.80485;
                  min_pulse_width_low  : 20.34585;
                  min_period           : 46.9428;

/* 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  ("72.2552, 72.2552, 72.2552, 72.2552, 72.2552, 72.2552, 72.2552");
              }
              fall_power(power_template) {
                index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                values  ("72.2552, 72.2552, 72.2552, 72.2552, 72.2552, 72.2552, 72.2552");
              }
             }
/* 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  ("1.3516e-05, 1.3516e-05, 1.3516e-05, 1.3516e-05, 1.3516e-05, 1.3516e-05, 1.3516e-05");
              }
              fall_power(power_template) {
                index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                values  ("1.3516e-05, 1.3516e-05, 1.3516e-05, 1.3516e-05, 1.3516e-05, 1.3516e-05, 1.3516e-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  ("67.2535, 67.2535, 67.2535, 67.2535, 67.2535, 67.2535, 67.2535");
              }
              fall_power(power_template) {
                index_1 ("0.02, 0.2104, 0.8786, 2.155, 4.143, 6.932, 10.6");
                values  ("67.2535, 67.2535, 67.2535, 67.2535, 67.2535, 67.2535, 67.2535");
              }
             }
          }

          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.0187828;
                  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.59062, 3.53529, 3.62582, 4.05724, 4.93361, 6.11116, 7.76578", \
                            "3.51109, 3.48645, 3.56466, 3.99366, 4.8708, 6.10027, 7.68383", \
                            "3.28284, 3.24269, 3.32948, 3.75859, 4.64167, 5.79667, 7.50552", \
                            "2.87485, 2.8391, 2.93436, 3.34631, 4.23148, 5.39803, 7.09346", \
                            "2.87782, 2.84042, 2.92666, 3.32981, 4.21498, 5.38813, 7.02955", \
                            "2.87386, 2.84724, 2.92457, 3.33751, 4.2284, 5.39506, 7.06255", \
                            "2.87441, 2.8292, 2.92325, 3.32838, 4.20101, 5.39781, 7.0818" \
                          )
                          }
                          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.37226, 2.42154, 2.63252, 3.07274, 3.8522, 4.97343, 6.46899", \
                            "2.29559, 2.35796, 2.56696, 3.00927, 3.78884, 4.91183, 6.40541", \
                            "2.0658, 2.12267, 2.33552, 2.7742, 3.55366, 4.67599, 6.16748", \
                            "2.02543, 2.0713, 2.29196, 2.73768, 3.49756, 4.63419, 6.12227", \
                            "2.02554, 2.08109, 2.28987, 2.73702, 3.5002, 4.6321, 6.12216", \
                            "2.02455, 2.07064, 2.29108, 2.7357, 3.49921, 4.63276, 6.12128", \
                            "2.02433, 2.0801, 2.28866, 2.73559, 3.49899, 4.6321, 6.12106" \
                          )
                          }
                  }
                  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.26253, 7.31654, 7.21292, 6.79844, 5.91305, 4.74892, 3.09419", \
                            "7.33326, 7.36241, 7.27639, 6.8728, 5.97817, 4.76025, 3.17834", \
                            "7.55216, 7.60078, 7.50409, 7.09764, 6.19828, 5.05582, 3.35665", \
                            "7.97621, 7.99986, 7.92242, 7.50948, 6.60748, 5.45534, 3.76585", \
                            "8.66195, 8.69935, 8.61322, 8.20996, 7.32479, 6.15164, 4.51022", \
                            "9.65107, 9.67758, 9.60025, 9.18742, 8.29653, 7.12976, 5.46227", \
                            "10.8217, 10.867, 10.773, 10.3678, 9.4952, 8.2984, 6.61441" \
                          )
                          }
                          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.11569, 8.05574, 7.84498, 7.40025, 6.63685, 5.50374, 4.01467", \
                            "8.1906, 8.1213, 7.91241, 7.46559, 6.70208, 5.56743, 4.08023", \
                            "8.41555, 8.34889, 8.13637, 7.69307, 6.92967, 5.79557, 4.3076", \
                            "8.81353, 8.76755, 8.547, 8.10128, 7.3414, 6.20477, 4.71669", \
                            "9.51423, 9.45868, 9.2499, 8.80275, 8.03957, 6.90767, 5.41761", \
                            "10.5004, 10.4543, 10.2338, 9.78912, 9.02572, 7.89206, 6.40354", \
                            "11.6721, 11.616, 11.4081, 10.9606, 10.1971, 9.06411, 7.57515" \
                          )
                          }
                 }
          }
          pin(GWEN)   {
                  direction            : input;
                  capacitance          : 0.0436795;
                  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.78037, 3.85132, 4.07154, 4.50219, 5.18595, 6.09433, 7.23932", \
                            "3.73098, 3.79346, 4.02182, 4.43916, 5.12479, 6.04912, 7.17178", \
                            "3.49547, 3.57423, 3.8027, 4.22037, 4.91238, 5.81262, 6.95288", \
                            "3.08121, 3.15678, 3.37348, 3.81876, 4.49504, 5.39506, 6.53532", \
                            "2.37391, 2.44926, 2.67751, 3.11102, 3.77883, 4.68787, 5.8322", \
                            "1.57025, 1.63229, 1.84976, 2.29383, 2.96945, 3.87079, 5.01006", \
                            "0.601491, 0.677127, 0.905179, 1.32253, 2.0119, 2.92611, 4.05999" \
                          )
                          }
                          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.43697, 5.49637, 5.74519, 6.23931, 7.03505, 8.1554, 9.71014", \
                            "5.37284, 5.41772, 5.64795, 6.1765, 6.97246, 8.0949, 9.64425", \
                            "5.15372, 5.1986, 5.46876, 5.95793, 6.75334, 7.90603, 9.35858", \
                            "4.73517, 4.77587, 5.05109, 5.54345, 6.32137, 7.49265, 9.01043", \
                            "4.02831, 4.09354, 4.30364, 4.84242, 5.62804, 6.73497, 8.29983", \
                            "3.21046, 3.25094, 3.52121, 4.01577, 4.81096, 5.97707, 7.41906", \
                            "2.25599, 2.3045, 2.53143, 3.06042, 3.85572, 4.97992, 6.46118" \
                          )
                          }
                  }
                  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.43753, 6.38308, 6.17375, 5.71461, 5.05989, 4.29528, 3.39823", \
                            "6.07607, 6.01117, 5.78842, 5.34776, 4.71581, 3.91402, 3.0261", \
                            "5.44258, 5.38868, 5.16164, 4.72098, 4.0887, 3.3176, 2.3991", \
                            "5.12149, 5.05648, 4.83494, 4.39549, 3.76684, 2.99552, 2.07713", \
                            "5.59229, 5.5275, 5.31047, 4.8664, 4.21454, 3.46643, 2.55332", \
                            "6.38847, 6.34007, 6.1424, 5.66918, 5.0402, 4.25282, 3.34466", \
                            "7.30004, 7.24801, 7.02042, 6.57987, 5.92867, 5.12842, 4.26327" \
                          )
                          }
                          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.70007, 3.65046, 3.39042, 2.87056, 2.13411, 0.991595, 0", \
                            "3.31892, 3.27745, 3.05085, 2.5036, 1.76583, 0.621335, 0", \
                            "2.71348, 2.65034, 2.42319, 1.87561, 1.1394, 0, 0", \
                            "2.3958, 2.35895, 2.10199, 1.55265, 0.827805, 0, 0", \
                            "2.86209, 2.79939, 2.57103, 2.0196, 1.28774, 0.153319, 0", \
                            "3.66619, 3.63176, 3.34719, 2.82799, 2.09176, 0.916333, 0", \
                            "4.57171, 4.50835, 4.28241, 3.73483, 2.99816, 1.85053, 0.343541" \
                          )
                          }
                 }
          }
          bus(WEN)   {
                  bus_type             : Q_BUS;
                  direction            : input;
                  capacitance          : 0.00722788;
                  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.531366", \
                            "0, 0, 0, 0, 0, 0.014091, 0.904563", \
                            "0, 0, 0, 0, 0, 0.608201, 1.52878", \
                            "0, 0, 0, 0, 0.145914, 0.939994, 1.84679", \
                            "0, 0, 0, 0, 0, 0.460911, 1.38083", \
                            "0, 0, 0, 0, 0, 0, 0.574596", \
                            "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.089034, 0.143796, 0.407143, 0.910184, 1.66287, 2.80478, 4.41771", \
                            "0.465652, 0.514734, 0.741422, 1.27155, 2.02972, 3.17097, 4.75431", \
                            "1.06799, 1.13899, 1.3662, 1.91224, 2.65419, 3.80369, 5.31179", \
                            "1.3959, 1.43693, 1.69301, 2.23751, 2.97088, 4.14601, 5.73606", \
                            "0.922383, 0.992365, 1.21913, 1.75846, 2.50668, 3.64111, 5.23127", \
                            "0.126354, 0.163112, 0.449394, 0.958903, 1.70742, 2.88299, 4.35633", \
                            "0, 0, 0, 0.040029, 0.795102, 1.93842, 3.45323" \
                          )
                          }
                  }
                  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.46998, 6.42587, 6.18222, 5.74992, 5.09916, 4.32949, 3.44025", \
                            "6.10324, 6.05902, 5.8157, 5.38307, 4.73242, 3.97606, 3.0734", \
                            "5.47613, 5.43202, 5.18936, 4.75596, 4.10542, 3.33564, 2.44629", \
                            "5.15383, 5.10928, 4.86607, 4.43377, 3.78312, 3.01334, 2.1241", \
                            "5.62485, 5.5792, 5.33665, 4.90479, 4.25414, 3.47688, 2.59435", \
                            "6.42796, 6.38374, 6.1424, 5.70779, 5.05714, 4.28736, 3.39812", \
                            "7.33469, 7.29047, 7.04583, 6.61452, 5.97113, 5.1942, 4.30485" \
                          )
                          }
                          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.73461, 3.65046, 3.40417, 2.88904, 2.15523, 1.00973, 0", \
                            "3.34895, 3.29263, 3.06108, 2.52219, 1.78717, 0.64053, 0", \
                            "2.7258, 2.66552, 2.43353, 1.89464, 1.16064, 0, 0", \
                            "2.40339, 2.36874, 2.11211, 1.57091, 0.847473, 0, 0", \
                            "2.87111, 2.80665, 2.58148, 2.03929, 1.30884, 0.169915, 0", \
                            "3.67708, 3.64287, 3.36182, 2.84658, 2.1131, 0.92444, 0", \
                            "4.58073, 4.51132, 4.29242, 3.7532, 3.01917, 1.86681, 0.363572" \
                          )
                          }
                 }
          }
          bus(A)   {
                  bus_type             : A_BUS;
                  direction            : input;
                  capacitance          : 0.0377823;
                  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.49756, 3.45917, 3.56367, 4.01159, 4.85892, 6.07134, 7.7066", \
                            "3.43981, 3.40065, 3.50581, 3.95373, 4.80106, 6.00677, 7.59517", \
                            "3.58171, 3.60965, 3.66234, 4.10993, 4.9995, 6.22644, 7.79614", \
                            "3.9171, 3.949, 3.99696, 4.44972, 5.31806, 6.51486, 8.09545", \
                            "3.45323, 3.45587, 3.52055, 3.96418, 4.85386, 6.07508, 7.6494", \
                            "2.66728, 2.66651, 2.72855, 3.17559, 4.05141, 5.2514, 6.8574", \
                            "1.76682, 1.7501, 1.82006, 2.26391, 3.14017, 4.37767, 5.9444" \
                          )
                          }
                          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.74989, 2.79609, 3.00102, 3.48227, 4.30639, 5.42597, 6.94155", \
                            "3.12103, 3.1614, 3.37887, 3.84736, 4.65014, 5.79117, 7.31786", \
                            "3.76013, 3.78642, 3.99608, 4.46457, 5.29573, 6.42004, 7.93386", \
                            "4.05097, 4.11763, 4.32872, 4.79512, 5.63002, 6.74971, 8.28113", \
                            "3.5827, 3.64221, 3.84142, 4.32938, 5.14866, 6.28276, 7.79009", \
                            "2.7995, 2.86231, 3.0624, 3.53661, 4.36359, 5.49692, 7.0015", \
                            "1.90729, 1.91598, 2.15138, 2.61921, 3.443, 4.56555, 6.0863" \
                          )
                          }
                  }
                  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.36643, 2.39492, 2.30241, 1.83403, 0.994411, 0, 0", \
                            "2.43947, 2.46862, 2.37556, 1.90718, 1.06761, 0, 0", \
                            "2.6565, 2.68565, 2.59259, 2.12421, 1.2846, 0.145358, 0", \
                            "3.04238, 3.07153, 2.97847, 2.51009, 1.67046, 0.531223, 0", \
                            "3.77553, 3.80446, 3.71151, 3.24313, 2.4035, 1.24472, 0", \
                            "4.7212, 4.75035, 4.65729, 4.18891, 3.34928, 2.21001, 0.79013", \
                            "5.88148, 5.9092, 5.81702, 5.34809, 4.50769, 3.3693, 1.94942" \
                          )
                          }
                          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.98749, 2.93799, 2.70149, 2.23718, 1.57597, 0.760826, 0", \
                            "3.06064, 3.01114, 2.77475, 2.31033, 1.64912, 0.834042, 0", \
                            "3.27767, 3.22817, 2.99167, 2.52736, 1.86615, 1.05108, 0.019668", \
                            "3.66355, 3.61405, 3.37755, 2.91324, 2.25203, 1.43693, 0.405537", \
                            "4.39637, 4.34709, 4.11059, 3.64628, 2.98507, 2.16997, 1.13856", \
                            "5.34237, 5.29287, 5.05637, 4.59206, 3.93085, 3.11575, 2.08439", \
                            "6.50155, 6.45216, 6.21566, 5.75135, 5.09014, 4.27504, 3.24368" \
                          )
                          }
                 }
          }
          bus(D)   {
                  bus_type             : Q_BUS;
                  memory_write() {
                          address      : A;
                          clocked_on   : "CLK";
                  }
                  direction            : input;
                  capacitance          : 0.017259;
                  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.47765, 3.52748, 3.74187, 4.16625, 4.70074, 5.36921, 6.05825", \
                            "3.84087, 3.90104, 4.12412, 4.54113, 5.06308, 5.71615, 6.41949", \
                            "4.47678, 4.52573, 4.74386, 5.16087, 5.69657, 6.34403, 7.06376", \
                            "4.80447, 4.87399, 5.08266, 5.50033, 6.03042, 6.68734, 7.38221", \
                            "4.33103, 4.37745, 4.61098, 5.02656, 5.5528, 6.20851, 6.90624", \
                            "3.53364, 3.58358, 3.82184, 4.24864, 4.75156, 5.43862, 6.116", \
                            "2.61888, 2.66893, 2.89234, 3.31188, 3.85891, 4.50098, 5.20993" \
                          )
                          }
                          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, 1.11451, 2.57543", \
                            "0, 0, 0, 0, 0.316789, 1.48104, 2.94195", \
                            "0, 0, 0, 0.209305, 0.941358, 2.11365, 3.56785", \
                            "0, 0, 0.023452, 0.539946, 1.27204, 2.44574, 3.89851", \
                            "0, 0, 0, 0.063844, 0.795575, 1.96152, 3.42243", \
                            "0, 0, 0, 0, 0.007601, 1.18127, 2.63582", \
                            "0, 0, 0, 0, 0, 0.260214, 1.71435" \
                          )
                          }
                  }
                  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.98133, 2.92787, 2.70688, 2.28349, 1.74691, 1.10515, 0.397023", \
                            "2.61657, 2.56333, 2.33662, 1.91312, 1.38204, 0.730994, 0.024937", \
                            "1.99199, 1.94139, 1.71644, 1.29573, 0.759814, 0.114285, 0", \
                            "1.66144, 1.60875, 1.38391, 0.960388, 0.429088, 0, 0", \
                            "2.13939, 2.08769, 1.86076, 1.44023, 0.904376, 0.255639, 0", \
                            "2.92336, 2.87012, 2.64418, 2.22101, 1.68883, 1.03786, 0.331089", \
                            "3.84989, 3.79841, 3.57181, 3.14721, 2.61459, 1.96669, 1.2611" \
                          )
                          }
                          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.68106, 5.65972, 5.46579, 4.95352, 4.17142, 3.0261, 1.53824", \
                            "5.31718, 5.291, 5.10136, 4.58909, 3.80699, 2.66167, 1.17381", \
                            "4.6937, 4.66807, 4.47843, 3.96616, 3.18406, 2.04776, 0.55088", \
                            "4.36227, 4.33719, 4.14689, 3.63462, 2.85252, 1.7072, 0.219383", \
                            "4.8411, 4.81976, 4.62583, 4.11345, 3.33135, 2.18603, 0.698247", \
                            "5.62276, 5.59834, 5.40815, 4.89588, 4.11378, 2.96846, 1.48071", \
                            "6.55237, 6.53037, 6.33655, 5.82417, 5.04207, 3.89675, 2.409" \
                          )
                          }
                 }
        }
          cell_leakage_power : 1.3515984e-05;
}
}
