/*
 * Copyright 2019 Google Inc.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met: redistributions of source code must retain the above copyright
 * notice, this list of conditions and the following disclaimer;
 * redistributions in binary form must reproduce the above copyright
 * notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution;
 * neither the name of the copyright holders nor the names of its
 * contributors may be used to endorse or promote products derived from
 * this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * Authors: Gabe Black
 *          Chun-Chen TK Hsu
 */

component GIC
{
    composition
    {
        gic : GIC_IRI();

        // Bridges
        // For the main interface with memory.
        mem_out : PVBus2AMBAPV();
        mem_in : AMBAPV2PVBus();

        // For the CPU interfaces.
        gic_gic2pv : GICv3CommsPVBus();
        gic_pv2amba : PVBus2AMBAPV();
        gic_amba2pv : AMBAPV2PVBus();
    }

    connection
    {
        // For the main interface with memory.
        gic.pvbus_m => mem_out.pvbus_s;
        mem_out.amba_pv_m => self.amba_m;
        self.amba_s => mem_in.amba_pv_s;
        mem_in.pvbus_m => gic.pvbus_s;

        // For the CPU interface.
        gic.redistributor_m => self.redistributor;

        // Internal ports for PPI and SPI programmatic access.
        self.ppi_0 => gic.ppi_in_0;
        self.ppi_1 => gic.ppi_in_1;
        self.ppi_2 => gic.ppi_in_2;
        self.ppi_3 => gic.ppi_in_3;
        self.ppi_4 => gic.ppi_in_4;
        self.ppi_5 => gic.ppi_in_5;
        self.ppi_6 => gic.ppi_in_6;
        self.ppi_7 => gic.ppi_in_7;
        self.ppi_8 => gic.ppi_in_8;
        self.ppi_9 => gic.ppi_in_9;
        self.ppi_10 => gic.ppi_in_10;
        self.ppi_11 => gic.ppi_in_11;
        self.ppi_12 => gic.ppi_in_12;
        self.ppi_13 => gic.ppi_in_13;
        self.ppi_14 => gic.ppi_in_14;
        self.ppi_15 => gic.ppi_in_15;
        self.ppi_16 => gic.ppi_in_16;
        self.ppi_17 => gic.ppi_in_17;
        self.ppi_18 => gic.ppi_in_18;
        self.ppi_19 => gic.ppi_in_19;
        self.ppi_20 => gic.ppi_in_20;
        self.ppi_21 => gic.ppi_in_21;
        self.ppi_22 => gic.ppi_in_22;
        self.ppi_23 => gic.ppi_in_23;
        self.ppi_24 => gic.ppi_in_24;
        self.ppi_25 => gic.ppi_in_25;
        self.ppi_26 => gic.ppi_in_26;
        self.ppi_27 => gic.ppi_in_27;
        self.ppi_28 => gic.ppi_in_28;
        self.ppi_29 => gic.ppi_in_29;
        self.ppi_30 => gic.ppi_in_30;
        self.ppi_31 => gic.ppi_in_31;
        self.ppi_32 => gic.ppi_in_32;
        self.ppi_33 => gic.ppi_in_33;
        self.ppi_34 => gic.ppi_in_34;
        self.ppi_35 => gic.ppi_in_35;
        self.ppi_36 => gic.ppi_in_36;
        self.ppi_37 => gic.ppi_in_37;
        self.ppi_38 => gic.ppi_in_38;
        self.ppi_39 => gic.ppi_in_39;
        self.ppi_40 => gic.ppi_in_40;
        self.ppi_41 => gic.ppi_in_41;
        self.ppi_42 => gic.ppi_in_42;
        self.ppi_43 => gic.ppi_in_43;
        self.ppi_44 => gic.ppi_in_44;
        self.ppi_45 => gic.ppi_in_45;
        self.ppi_46 => gic.ppi_in_46;
        self.ppi_47 => gic.ppi_in_47;
        self.ppi_48 => gic.ppi_in_48;
        self.ppi_49 => gic.ppi_in_49;
        self.ppi_50 => gic.ppi_in_50;
        self.ppi_51 => gic.ppi_in_51;
        self.ppi_52 => gic.ppi_in_52;
        self.ppi_53 => gic.ppi_in_53;
        self.ppi_54 => gic.ppi_in_54;
        self.ppi_55 => gic.ppi_in_55;
        self.ppi_56 => gic.ppi_in_56;
        self.ppi_57 => gic.ppi_in_57;
        self.ppi_58 => gic.ppi_in_58;
        self.ppi_59 => gic.ppi_in_59;
        self.ppi_60 => gic.ppi_in_60;
        self.ppi_61 => gic.ppi_in_61;
        self.ppi_62 => gic.ppi_in_62;
        self.ppi_63 => gic.ppi_in_63;
        self.ppi_64 => gic.ppi_in_64;
        self.ppi_65 => gic.ppi_in_65;
        self.ppi_66 => gic.ppi_in_66;
        self.ppi_67 => gic.ppi_in_67;
        self.ppi_68 => gic.ppi_in_68;
        self.ppi_69 => gic.ppi_in_69;
        self.ppi_70 => gic.ppi_in_70;
        self.ppi_71 => gic.ppi_in_71;
        self.ppi_72 => gic.ppi_in_72;
        self.ppi_73 => gic.ppi_in_73;
        self.ppi_74 => gic.ppi_in_74;
        self.ppi_75 => gic.ppi_in_75;
        self.ppi_76 => gic.ppi_in_76;
        self.ppi_77 => gic.ppi_in_77;
        self.ppi_78 => gic.ppi_in_78;
        self.ppi_79 => gic.ppi_in_79;
        self.ppi_80 => gic.ppi_in_80;
        self.ppi_81 => gic.ppi_in_81;
        self.ppi_82 => gic.ppi_in_82;
        self.ppi_83 => gic.ppi_in_83;
        self.ppi_84 => gic.ppi_in_84;
        self.ppi_85 => gic.ppi_in_85;
        self.ppi_86 => gic.ppi_in_86;
        self.ppi_87 => gic.ppi_in_87;
        self.ppi_88 => gic.ppi_in_88;
        self.ppi_89 => gic.ppi_in_89;
        self.ppi_90 => gic.ppi_in_90;
        self.ppi_91 => gic.ppi_in_91;
        self.ppi_92 => gic.ppi_in_92;
        self.ppi_93 => gic.ppi_in_93;
        self.ppi_94 => gic.ppi_in_94;
        self.ppi_95 => gic.ppi_in_95;
        self.ppi_96 => gic.ppi_in_96;
        self.ppi_97 => gic.ppi_in_97;
        self.ppi_98 => gic.ppi_in_98;
        self.ppi_99 => gic.ppi_in_99;
        self.ppi_100 => gic.ppi_in_100;
        self.ppi_101 => gic.ppi_in_101;
        self.ppi_102 => gic.ppi_in_102;
        self.ppi_103 => gic.ppi_in_103;
        self.ppi_104 => gic.ppi_in_104;
        self.ppi_105 => gic.ppi_in_105;
        self.ppi_106 => gic.ppi_in_106;
        self.ppi_107 => gic.ppi_in_107;
        self.ppi_108 => gic.ppi_in_108;
        self.ppi_109 => gic.ppi_in_109;
        self.ppi_110 => gic.ppi_in_110;
        self.ppi_111 => gic.ppi_in_111;
        self.ppi_112 => gic.ppi_in_112;
        self.ppi_113 => gic.ppi_in_113;
        self.ppi_114 => gic.ppi_in_114;
        self.ppi_115 => gic.ppi_in_115;
        self.ppi_116 => gic.ppi_in_116;
        self.ppi_117 => gic.ppi_in_117;
        self.ppi_118 => gic.ppi_in_118;
        self.ppi_119 => gic.ppi_in_119;
        self.ppi_120 => gic.ppi_in_120;
        self.ppi_121 => gic.ppi_in_121;
        self.ppi_122 => gic.ppi_in_122;
        self.ppi_123 => gic.ppi_in_123;
        self.ppi_124 => gic.ppi_in_124;
        self.ppi_125 => gic.ppi_in_125;
        self.ppi_126 => gic.ppi_in_126;
        self.ppi_127 => gic.ppi_in_127;
        self.ppi_128 => gic.ppi_in_128;
        self.ppi_129 => gic.ppi_in_129;
        self.ppi_130 => gic.ppi_in_130;
        self.ppi_131 => gic.ppi_in_131;
        self.ppi_132 => gic.ppi_in_132;
        self.ppi_133 => gic.ppi_in_133;
        self.ppi_134 => gic.ppi_in_134;
        self.ppi_135 => gic.ppi_in_135;
        self.ppi_136 => gic.ppi_in_136;
        self.ppi_137 => gic.ppi_in_137;
        self.ppi_138 => gic.ppi_in_138;
        self.ppi_139 => gic.ppi_in_139;
        self.ppi_140 => gic.ppi_in_140;
        self.ppi_141 => gic.ppi_in_141;
        self.ppi_142 => gic.ppi_in_142;
        self.ppi_143 => gic.ppi_in_143;
        self.ppi_144 => gic.ppi_in_144;
        self.ppi_145 => gic.ppi_in_145;
        self.ppi_146 => gic.ppi_in_146;
        self.ppi_147 => gic.ppi_in_147;
        self.ppi_148 => gic.ppi_in_148;
        self.ppi_149 => gic.ppi_in_149;
        self.ppi_150 => gic.ppi_in_150;
        self.ppi_151 => gic.ppi_in_151;
        self.ppi_152 => gic.ppi_in_152;
        self.ppi_153 => gic.ppi_in_153;
        self.ppi_154 => gic.ppi_in_154;
        self.ppi_155 => gic.ppi_in_155;
        self.ppi_156 => gic.ppi_in_156;
        self.ppi_157 => gic.ppi_in_157;
        self.ppi_158 => gic.ppi_in_158;
        self.ppi_159 => gic.ppi_in_159;
        self.ppi_160 => gic.ppi_in_160;
        self.ppi_161 => gic.ppi_in_161;
        self.ppi_162 => gic.ppi_in_162;
        self.ppi_163 => gic.ppi_in_163;
        self.ppi_164 => gic.ppi_in_164;
        self.ppi_165 => gic.ppi_in_165;
        self.ppi_166 => gic.ppi_in_166;
        self.ppi_167 => gic.ppi_in_167;
        self.ppi_168 => gic.ppi_in_168;
        self.ppi_169 => gic.ppi_in_169;
        self.ppi_170 => gic.ppi_in_170;
        self.ppi_171 => gic.ppi_in_171;
        self.ppi_172 => gic.ppi_in_172;
        self.ppi_173 => gic.ppi_in_173;
        self.ppi_174 => gic.ppi_in_174;
        self.ppi_175 => gic.ppi_in_175;
        self.ppi_176 => gic.ppi_in_176;
        self.ppi_177 => gic.ppi_in_177;
        self.ppi_178 => gic.ppi_in_178;
        self.ppi_179 => gic.ppi_in_179;
        self.ppi_180 => gic.ppi_in_180;
        self.ppi_181 => gic.ppi_in_181;
        self.ppi_182 => gic.ppi_in_182;
        self.ppi_183 => gic.ppi_in_183;
        self.ppi_184 => gic.ppi_in_184;
        self.ppi_185 => gic.ppi_in_185;
        self.ppi_186 => gic.ppi_in_186;
        self.ppi_187 => gic.ppi_in_187;
        self.ppi_188 => gic.ppi_in_188;
        self.ppi_189 => gic.ppi_in_189;
        self.ppi_190 => gic.ppi_in_190;
        self.ppi_191 => gic.ppi_in_191;
        self.ppi_192 => gic.ppi_in_192;
        self.ppi_193 => gic.ppi_in_193;
        self.ppi_194 => gic.ppi_in_194;
        self.ppi_195 => gic.ppi_in_195;
        self.ppi_196 => gic.ppi_in_196;
        self.ppi_197 => gic.ppi_in_197;
        self.ppi_198 => gic.ppi_in_198;
        self.ppi_199 => gic.ppi_in_199;
        self.ppi_200 => gic.ppi_in_200;
        self.ppi_201 => gic.ppi_in_201;
        self.ppi_202 => gic.ppi_in_202;
        self.ppi_203 => gic.ppi_in_203;
        self.ppi_204 => gic.ppi_in_204;
        self.ppi_205 => gic.ppi_in_205;
        self.ppi_206 => gic.ppi_in_206;
        self.ppi_207 => gic.ppi_in_207;
        self.ppi_208 => gic.ppi_in_208;
        self.ppi_209 => gic.ppi_in_209;
        self.ppi_210 => gic.ppi_in_210;
        self.ppi_211 => gic.ppi_in_211;
        self.ppi_212 => gic.ppi_in_212;
        self.ppi_213 => gic.ppi_in_213;
        self.ppi_214 => gic.ppi_in_214;
        self.ppi_215 => gic.ppi_in_215;
        self.ppi_216 => gic.ppi_in_216;
        self.ppi_217 => gic.ppi_in_217;
        self.ppi_218 => gic.ppi_in_218;
        self.ppi_219 => gic.ppi_in_219;
        self.ppi_220 => gic.ppi_in_220;
        self.ppi_221 => gic.ppi_in_221;
        self.ppi_222 => gic.ppi_in_222;
        self.ppi_223 => gic.ppi_in_223;
        self.ppi_224 => gic.ppi_in_224;
        self.ppi_225 => gic.ppi_in_225;
        self.ppi_226 => gic.ppi_in_226;
        self.ppi_227 => gic.ppi_in_227;
        self.ppi_228 => gic.ppi_in_228;
        self.ppi_229 => gic.ppi_in_229;
        self.ppi_230 => gic.ppi_in_230;
        self.ppi_231 => gic.ppi_in_231;
        self.ppi_232 => gic.ppi_in_232;
        self.ppi_233 => gic.ppi_in_233;
        self.ppi_234 => gic.ppi_in_234;
        self.ppi_235 => gic.ppi_in_235;
        self.ppi_236 => gic.ppi_in_236;
        self.ppi_237 => gic.ppi_in_237;
        self.ppi_238 => gic.ppi_in_238;
        self.ppi_239 => gic.ppi_in_239;
        self.ppi_240 => gic.ppi_in_240;
        self.ppi_241 => gic.ppi_in_241;
        self.ppi_242 => gic.ppi_in_242;
        self.ppi_243 => gic.ppi_in_243;
        self.ppi_244 => gic.ppi_in_244;
        self.ppi_245 => gic.ppi_in_245;
        self.ppi_246 => gic.ppi_in_246;
        self.ppi_247 => gic.ppi_in_247;
        self.ppi_248 => gic.ppi_in_248;
        self.ppi_249 => gic.ppi_in_249;
        self.ppi_250 => gic.ppi_in_250;
        self.ppi_251 => gic.ppi_in_251;
        self.ppi_252 => gic.ppi_in_252;
        self.ppi_253 => gic.ppi_in_253;
        self.ppi_254 => gic.ppi_in_254;
        self.ppi_255 => gic.ppi_in_255;

        self.spi => gic.spi_in;
    }

    properties
    {
        component_type = "System";
    }

    master port<AMBAPV> amba_m;
    slave port<AMBAPV> amba_s;

    master port<GICv3Comms> redistributor[256];

    #define setPPI(C) \
          case C: ppi_##C[num].setValue(state); \
          break
    slave port<SignalInterrupt> signal_interrupt
    {
        behavior ppi(uint8_t cpu, uint32_t num, bool state_val)
        {
            sg::Signal::State state =
                state_val ? sg::Signal::Set : sg::Signal::Clear;

            switch (cpu) {
              setPPI(0); setPPI(1); setPPI(2); setPPI(3); setPPI(4);
              setPPI(5); setPPI(6); setPPI(7); setPPI(8); setPPI(9);
              setPPI(10); setPPI(11); setPPI(12); setPPI(13); setPPI(14);
              setPPI(15); setPPI(16); setPPI(17); setPPI(18); setPPI(19);
              setPPI(20); setPPI(21); setPPI(22); setPPI(23); setPPI(24);
              setPPI(25); setPPI(26); setPPI(27); setPPI(28); setPPI(29);
              setPPI(30); setPPI(31); setPPI(32); setPPI(33); setPPI(34);
              setPPI(35); setPPI(36); setPPI(37); setPPI(38); setPPI(39);
              setPPI(40); setPPI(41); setPPI(42); setPPI(43); setPPI(44);
              setPPI(45); setPPI(46); setPPI(47); setPPI(48); setPPI(49);
              setPPI(50); setPPI(51); setPPI(52); setPPI(53); setPPI(54);
              setPPI(55); setPPI(56); setPPI(57); setPPI(58); setPPI(59);
              setPPI(60); setPPI(61); setPPI(62); setPPI(63); setPPI(64);
              setPPI(65); setPPI(66); setPPI(67); setPPI(68); setPPI(69);
              setPPI(70); setPPI(71); setPPI(72); setPPI(73); setPPI(74);
              setPPI(75); setPPI(76); setPPI(77); setPPI(78); setPPI(79);
              setPPI(80); setPPI(81); setPPI(82); setPPI(83); setPPI(84);
              setPPI(85); setPPI(86); setPPI(87); setPPI(88); setPPI(89);
              setPPI(90); setPPI(91); setPPI(92); setPPI(93); setPPI(94);
              setPPI(95); setPPI(96); setPPI(97); setPPI(98); setPPI(99);
              setPPI(100); setPPI(101); setPPI(102); setPPI(103); setPPI(104);
              setPPI(105); setPPI(106); setPPI(107); setPPI(108); setPPI(109);
              setPPI(110); setPPI(111); setPPI(112); setPPI(113); setPPI(114);
              setPPI(115); setPPI(116); setPPI(117); setPPI(118); setPPI(119);
              setPPI(120); setPPI(121); setPPI(122); setPPI(123); setPPI(124);
              setPPI(125); setPPI(126); setPPI(127); setPPI(128); setPPI(129);
              setPPI(130); setPPI(131); setPPI(132); setPPI(133); setPPI(134);
              setPPI(135); setPPI(136); setPPI(137); setPPI(138); setPPI(139);
              setPPI(140); setPPI(141); setPPI(142); setPPI(143); setPPI(144);
              setPPI(145); setPPI(146); setPPI(147); setPPI(148); setPPI(149);
              setPPI(150); setPPI(151); setPPI(152); setPPI(153); setPPI(154);
              setPPI(155); setPPI(156); setPPI(157); setPPI(158); setPPI(159);
              setPPI(160); setPPI(161); setPPI(162); setPPI(163); setPPI(164);
              setPPI(165); setPPI(166); setPPI(167); setPPI(168); setPPI(169);
              setPPI(170); setPPI(171); setPPI(172); setPPI(173); setPPI(174);
              setPPI(175); setPPI(176); setPPI(177); setPPI(178); setPPI(179);
              setPPI(180); setPPI(181); setPPI(182); setPPI(183); setPPI(184);
              setPPI(185); setPPI(186); setPPI(187); setPPI(188); setPPI(189);
              setPPI(190); setPPI(191); setPPI(192); setPPI(193); setPPI(194);
              setPPI(195); setPPI(196); setPPI(197); setPPI(198); setPPI(199);
              setPPI(200); setPPI(201); setPPI(202); setPPI(203); setPPI(204);
              setPPI(205); setPPI(206); setPPI(207); setPPI(208); setPPI(209);
              setPPI(210); setPPI(211); setPPI(212); setPPI(213); setPPI(214);
              setPPI(215); setPPI(216); setPPI(217); setPPI(218); setPPI(219);
              setPPI(220); setPPI(221); setPPI(222); setPPI(223); setPPI(224);
              setPPI(225); setPPI(226); setPPI(227); setPPI(228); setPPI(229);
              setPPI(230); setPPI(231); setPPI(232); setPPI(233); setPPI(234);
              setPPI(235); setPPI(236); setPPI(237); setPPI(238); setPPI(239);
              setPPI(240); setPPI(241); setPPI(242); setPPI(243); setPPI(244);
              setPPI(245); setPPI(246); setPPI(247); setPPI(248); setPPI(249);
              setPPI(250); setPPI(251); setPPI(252); setPPI(253); setPPI(254);
              setPPI(255);
              default:
                sc_assert(false);
            }
        }

        behavior spi(uint32_t num, bool state_val)
        {
            sg::Signal::State state =
                state_val ? sg::Signal::Set : sg::Signal::Clear;
            spi[num].setValue(state);
        }
    }

    internal slave port<Signal> spi[988];

    internal slave port<Signal> ppi_0[16];
    internal slave port<Signal> ppi_1[16];
    internal slave port<Signal> ppi_2[16];
    internal slave port<Signal> ppi_3[16];
    internal slave port<Signal> ppi_4[16];
    internal slave port<Signal> ppi_5[16];
    internal slave port<Signal> ppi_6[16];
    internal slave port<Signal> ppi_7[16];
    internal slave port<Signal> ppi_8[16];
    internal slave port<Signal> ppi_9[16];
    internal slave port<Signal> ppi_10[16];
    internal slave port<Signal> ppi_11[16];
    internal slave port<Signal> ppi_12[16];
    internal slave port<Signal> ppi_13[16];
    internal slave port<Signal> ppi_14[16];
    internal slave port<Signal> ppi_15[16];
    internal slave port<Signal> ppi_16[16];
    internal slave port<Signal> ppi_17[16];
    internal slave port<Signal> ppi_18[16];
    internal slave port<Signal> ppi_19[16];
    internal slave port<Signal> ppi_20[16];
    internal slave port<Signal> ppi_21[16];
    internal slave port<Signal> ppi_22[16];
    internal slave port<Signal> ppi_23[16];
    internal slave port<Signal> ppi_24[16];
    internal slave port<Signal> ppi_25[16];
    internal slave port<Signal> ppi_26[16];
    internal slave port<Signal> ppi_27[16];
    internal slave port<Signal> ppi_28[16];
    internal slave port<Signal> ppi_29[16];
    internal slave port<Signal> ppi_30[16];
    internal slave port<Signal> ppi_31[16];
    internal slave port<Signal> ppi_32[16];
    internal slave port<Signal> ppi_33[16];
    internal slave port<Signal> ppi_34[16];
    internal slave port<Signal> ppi_35[16];
    internal slave port<Signal> ppi_36[16];
    internal slave port<Signal> ppi_37[16];
    internal slave port<Signal> ppi_38[16];
    internal slave port<Signal> ppi_39[16];
    internal slave port<Signal> ppi_40[16];
    internal slave port<Signal> ppi_41[16];
    internal slave port<Signal> ppi_42[16];
    internal slave port<Signal> ppi_43[16];
    internal slave port<Signal> ppi_44[16];
    internal slave port<Signal> ppi_45[16];
    internal slave port<Signal> ppi_46[16];
    internal slave port<Signal> ppi_47[16];
    internal slave port<Signal> ppi_48[16];
    internal slave port<Signal> ppi_49[16];
    internal slave port<Signal> ppi_50[16];
    internal slave port<Signal> ppi_51[16];
    internal slave port<Signal> ppi_52[16];
    internal slave port<Signal> ppi_53[16];
    internal slave port<Signal> ppi_54[16];
    internal slave port<Signal> ppi_55[16];
    internal slave port<Signal> ppi_56[16];
    internal slave port<Signal> ppi_57[16];
    internal slave port<Signal> ppi_58[16];
    internal slave port<Signal> ppi_59[16];
    internal slave port<Signal> ppi_60[16];
    internal slave port<Signal> ppi_61[16];
    internal slave port<Signal> ppi_62[16];
    internal slave port<Signal> ppi_63[16];
    internal slave port<Signal> ppi_64[16];
    internal slave port<Signal> ppi_65[16];
    internal slave port<Signal> ppi_66[16];
    internal slave port<Signal> ppi_67[16];
    internal slave port<Signal> ppi_68[16];
    internal slave port<Signal> ppi_69[16];
    internal slave port<Signal> ppi_70[16];
    internal slave port<Signal> ppi_71[16];
    internal slave port<Signal> ppi_72[16];
    internal slave port<Signal> ppi_73[16];
    internal slave port<Signal> ppi_74[16];
    internal slave port<Signal> ppi_75[16];
    internal slave port<Signal> ppi_76[16];
    internal slave port<Signal> ppi_77[16];
    internal slave port<Signal> ppi_78[16];
    internal slave port<Signal> ppi_79[16];
    internal slave port<Signal> ppi_80[16];
    internal slave port<Signal> ppi_81[16];
    internal slave port<Signal> ppi_82[16];
    internal slave port<Signal> ppi_83[16];
    internal slave port<Signal> ppi_84[16];
    internal slave port<Signal> ppi_85[16];
    internal slave port<Signal> ppi_86[16];
    internal slave port<Signal> ppi_87[16];
    internal slave port<Signal> ppi_88[16];
    internal slave port<Signal> ppi_89[16];
    internal slave port<Signal> ppi_90[16];
    internal slave port<Signal> ppi_91[16];
    internal slave port<Signal> ppi_92[16];
    internal slave port<Signal> ppi_93[16];
    internal slave port<Signal> ppi_94[16];
    internal slave port<Signal> ppi_95[16];
    internal slave port<Signal> ppi_96[16];
    internal slave port<Signal> ppi_97[16];
    internal slave port<Signal> ppi_98[16];
    internal slave port<Signal> ppi_99[16];
    internal slave port<Signal> ppi_100[16];
    internal slave port<Signal> ppi_101[16];
    internal slave port<Signal> ppi_102[16];
    internal slave port<Signal> ppi_103[16];
    internal slave port<Signal> ppi_104[16];
    internal slave port<Signal> ppi_105[16];
    internal slave port<Signal> ppi_106[16];
    internal slave port<Signal> ppi_107[16];
    internal slave port<Signal> ppi_108[16];
    internal slave port<Signal> ppi_109[16];
    internal slave port<Signal> ppi_110[16];
    internal slave port<Signal> ppi_111[16];
    internal slave port<Signal> ppi_112[16];
    internal slave port<Signal> ppi_113[16];
    internal slave port<Signal> ppi_114[16];
    internal slave port<Signal> ppi_115[16];
    internal slave port<Signal> ppi_116[16];
    internal slave port<Signal> ppi_117[16];
    internal slave port<Signal> ppi_118[16];
    internal slave port<Signal> ppi_119[16];
    internal slave port<Signal> ppi_120[16];
    internal slave port<Signal> ppi_121[16];
    internal slave port<Signal> ppi_122[16];
    internal slave port<Signal> ppi_123[16];
    internal slave port<Signal> ppi_124[16];
    internal slave port<Signal> ppi_125[16];
    internal slave port<Signal> ppi_126[16];
    internal slave port<Signal> ppi_127[16];
    internal slave port<Signal> ppi_128[16];
    internal slave port<Signal> ppi_129[16];
    internal slave port<Signal> ppi_130[16];
    internal slave port<Signal> ppi_131[16];
    internal slave port<Signal> ppi_132[16];
    internal slave port<Signal> ppi_133[16];
    internal slave port<Signal> ppi_134[16];
    internal slave port<Signal> ppi_135[16];
    internal slave port<Signal> ppi_136[16];
    internal slave port<Signal> ppi_137[16];
    internal slave port<Signal> ppi_138[16];
    internal slave port<Signal> ppi_139[16];
    internal slave port<Signal> ppi_140[16];
    internal slave port<Signal> ppi_141[16];
    internal slave port<Signal> ppi_142[16];
    internal slave port<Signal> ppi_143[16];
    internal slave port<Signal> ppi_144[16];
    internal slave port<Signal> ppi_145[16];
    internal slave port<Signal> ppi_146[16];
    internal slave port<Signal> ppi_147[16];
    internal slave port<Signal> ppi_148[16];
    internal slave port<Signal> ppi_149[16];
    internal slave port<Signal> ppi_150[16];
    internal slave port<Signal> ppi_151[16];
    internal slave port<Signal> ppi_152[16];
    internal slave port<Signal> ppi_153[16];
    internal slave port<Signal> ppi_154[16];
    internal slave port<Signal> ppi_155[16];
    internal slave port<Signal> ppi_156[16];
    internal slave port<Signal> ppi_157[16];
    internal slave port<Signal> ppi_158[16];
    internal slave port<Signal> ppi_159[16];
    internal slave port<Signal> ppi_160[16];
    internal slave port<Signal> ppi_161[16];
    internal slave port<Signal> ppi_162[16];
    internal slave port<Signal> ppi_163[16];
    internal slave port<Signal> ppi_164[16];
    internal slave port<Signal> ppi_165[16];
    internal slave port<Signal> ppi_166[16];
    internal slave port<Signal> ppi_167[16];
    internal slave port<Signal> ppi_168[16];
    internal slave port<Signal> ppi_169[16];
    internal slave port<Signal> ppi_170[16];
    internal slave port<Signal> ppi_171[16];
    internal slave port<Signal> ppi_172[16];
    internal slave port<Signal> ppi_173[16];
    internal slave port<Signal> ppi_174[16];
    internal slave port<Signal> ppi_175[16];
    internal slave port<Signal> ppi_176[16];
    internal slave port<Signal> ppi_177[16];
    internal slave port<Signal> ppi_178[16];
    internal slave port<Signal> ppi_179[16];
    internal slave port<Signal> ppi_180[16];
    internal slave port<Signal> ppi_181[16];
    internal slave port<Signal> ppi_182[16];
    internal slave port<Signal> ppi_183[16];
    internal slave port<Signal> ppi_184[16];
    internal slave port<Signal> ppi_185[16];
    internal slave port<Signal> ppi_186[16];
    internal slave port<Signal> ppi_187[16];
    internal slave port<Signal> ppi_188[16];
    internal slave port<Signal> ppi_189[16];
    internal slave port<Signal> ppi_190[16];
    internal slave port<Signal> ppi_191[16];
    internal slave port<Signal> ppi_192[16];
    internal slave port<Signal> ppi_193[16];
    internal slave port<Signal> ppi_194[16];
    internal slave port<Signal> ppi_195[16];
    internal slave port<Signal> ppi_196[16];
    internal slave port<Signal> ppi_197[16];
    internal slave port<Signal> ppi_198[16];
    internal slave port<Signal> ppi_199[16];
    internal slave port<Signal> ppi_200[16];
    internal slave port<Signal> ppi_201[16];
    internal slave port<Signal> ppi_202[16];
    internal slave port<Signal> ppi_203[16];
    internal slave port<Signal> ppi_204[16];
    internal slave port<Signal> ppi_205[16];
    internal slave port<Signal> ppi_206[16];
    internal slave port<Signal> ppi_207[16];
    internal slave port<Signal> ppi_208[16];
    internal slave port<Signal> ppi_209[16];
    internal slave port<Signal> ppi_210[16];
    internal slave port<Signal> ppi_211[16];
    internal slave port<Signal> ppi_212[16];
    internal slave port<Signal> ppi_213[16];
    internal slave port<Signal> ppi_214[16];
    internal slave port<Signal> ppi_215[16];
    internal slave port<Signal> ppi_216[16];
    internal slave port<Signal> ppi_217[16];
    internal slave port<Signal> ppi_218[16];
    internal slave port<Signal> ppi_219[16];
    internal slave port<Signal> ppi_220[16];
    internal slave port<Signal> ppi_221[16];
    internal slave port<Signal> ppi_222[16];
    internal slave port<Signal> ppi_223[16];
    internal slave port<Signal> ppi_224[16];
    internal slave port<Signal> ppi_225[16];
    internal slave port<Signal> ppi_226[16];
    internal slave port<Signal> ppi_227[16];
    internal slave port<Signal> ppi_228[16];
    internal slave port<Signal> ppi_229[16];
    internal slave port<Signal> ppi_230[16];
    internal slave port<Signal> ppi_231[16];
    internal slave port<Signal> ppi_232[16];
    internal slave port<Signal> ppi_233[16];
    internal slave port<Signal> ppi_234[16];
    internal slave port<Signal> ppi_235[16];
    internal slave port<Signal> ppi_236[16];
    internal slave port<Signal> ppi_237[16];
    internal slave port<Signal> ppi_238[16];
    internal slave port<Signal> ppi_239[16];
    internal slave port<Signal> ppi_240[16];
    internal slave port<Signal> ppi_241[16];
    internal slave port<Signal> ppi_242[16];
    internal slave port<Signal> ppi_243[16];
    internal slave port<Signal> ppi_244[16];
    internal slave port<Signal> ppi_245[16];
    internal slave port<Signal> ppi_246[16];
    internal slave port<Signal> ppi_247[16];
    internal slave port<Signal> ppi_248[16];
    internal slave port<Signal> ppi_249[16];
    internal slave port<Signal> ppi_250[16];
    internal slave port<Signal> ppi_251[16];
    internal slave port<Signal> ppi_252[16];
    internal slave port<Signal> ppi_253[16];
    internal slave port<Signal> ppi_254[16];
    internal slave port<Signal> ppi_255[16];
}