| 1 | // ========== Copyright Header Begin ========================================== |
| 2 | // |
| 3 | // OpenSPARC T2 Processor File: fcShadowScanClass.vr |
| 4 | // Copyright (C) 1995-2007 Sun Microsystems, Inc. All Rights Reserved |
| 5 | // 4150 Network Circle, Santa Clara, California 95054, U.S.A. |
| 6 | // |
| 7 | // * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| 8 | // |
| 9 | // This program is free software; you can redistribute it and/or modify |
| 10 | // it under the terms of the GNU General Public License as published by |
| 11 | // the Free Software Foundation; version 2 of the License. |
| 12 | // |
| 13 | // This program is distributed in the hope that it will be useful, |
| 14 | // but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 15 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 16 | // GNU General Public License for more details. |
| 17 | // |
| 18 | // You should have received a copy of the GNU General Public License |
| 19 | // along with this program; if not, write to the Free Software |
| 20 | // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| 21 | // |
| 22 | // For the avoidance of doubt, and except that if any non-GPL license |
| 23 | // choice is available it will apply instead, Sun elects to use only |
| 24 | // the General Public License version 2 (GPLv2) at this time for any |
| 25 | // software where a choice of GPL license versions is made |
| 26 | // available with the language indicating that GPLv2 or any later version |
| 27 | // may be used, or where a choice of which version of the GPL is applied is |
| 28 | // otherwise unspecified. |
| 29 | // |
| 30 | // Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, |
| 31 | // CA 95054 USA or visit www.sun.com if you need additional information or |
| 32 | // have any questions. |
| 33 | // |
| 34 | // ========== Copyright Header End ============================================ |
| 35 | #include <vera_defines.vrh> |
| 36 | // defines |
| 37 | #include "defines.vri" |
| 38 | #include "std_display_defines.vri" |
| 39 | |
| 40 | #include "std_display_class.vrh" |
| 41 | #include "fc_top_defines.vri" |
| 42 | |
| 43 | #include "fc_shadow_scan.if.vrh" |
| 44 | |
| 45 | #define CLASSNAME fcShadowScanClass |
| 46 | |
| 47 | class CLASSNAME { |
| 48 | |
| 49 | local string className = "fcShadowScanClass"; |
| 50 | local StandardDisplay gDbg; |
| 51 | |
| 52 | fc_shadow_scan__port fc_shadow_scan_port = fc_shadow_scan_bind; |
| 53 | integer spcThreadId; |
| 54 | |
| 55 | bit [117:0] spc0_shadow_scan; |
| 56 | #ifndef RTL_NO_SPC1 |
| 57 | bit [117:0] spc1_shadow_scan; |
| 58 | #endif |
| 59 | #ifndef RTL_NO_SPC2 |
| 60 | bit [117:0] spc2_shadow_scan; |
| 61 | #endif |
| 62 | #ifndef RTL_NO_SPC3 |
| 63 | bit [117:0] spc3_shadow_scan; |
| 64 | #endif |
| 65 | #ifndef RTL_NO_SPC4 |
| 66 | bit [117:0] spc4_shadow_scan; |
| 67 | #endif |
| 68 | #ifndef RTL_NO_SPC5 |
| 69 | bit [117:0] spc5_shadow_scan; |
| 70 | #endif |
| 71 | #ifndef RTL_NO_SPC6 |
| 72 | bit [117:0] spc6_shadow_scan; |
| 73 | #endif |
| 74 | #ifndef RTL_NO_SPC7 |
| 75 | bit [117:0] spc7_shadow_scan; |
| 76 | #endif |
| 77 | |
| 78 | bit [141:0] l2t0_shadow_scan; |
| 79 | bit [141:0] l2t1_shadow_scan; |
| 80 | bit [141:0] l2t2_shadow_scan; |
| 81 | bit [141:0] l2t3_shadow_scan; |
| 82 | bit [141:0] l2t4_shadow_scan; |
| 83 | bit [141:0] l2t5_shadow_scan; |
| 84 | bit [141:0] l2t6_shadow_scan; |
| 85 | bit [141:0] l2t7_shadow_scan; |
| 86 | |
| 87 | task new(StandardDisplay dbgHndl); |
| 88 | function string getShadowScanValue(string cluster); |
| 89 | function integer getSpcThreadId(); |
| 90 | } |
| 91 | |
| 92 | task CLASSNAME::new(StandardDisplay dbgHndl) { |
| 93 | this.gDbg = dbgHndl; |
| 94 | fork |
| 95 | { |
| 96 | spcThreadId = fc_shadow_scan_port.$spc_shadow_scan_id; |
| 97 | while (1) { |
| 98 | @(posedge fc_shadow_scan_port.$spc_shadow_scan_en async); |
| 99 | spcThreadId = fc_shadow_scan_port.$spc_shadow_scan_id; |
| 100 | spc0_shadow_scan = fc_shadow_scan_port.$spc0_shadow_scan_bits; |
| 101 | PR_NORMAL(className, MON_NORMAL, psprintf("Captured SPC0 Thread %d Shadow scan bits", spcThreadId)); |
| 102 | PR_NORMAL(className, MON_NORMAL, psprintf("TL for last trap: %h", spc0_shadow_scan[2:0])); |
| 103 | PR_NORMAL(className, MON_NORMAL, psprintf("TT for last trap: %h", spc0_shadow_scan[11:3])); |
| 104 | PR_NORMAL(className, MON_NORMAL, psprintf("TPC for last trap: %h", spc0_shadow_scan[57:12])); |
| 105 | PR_NORMAL(className, MON_NORMAL, psprintf("TL: %b", spc0_shadow_scan[60:58])); |
| 106 | PR_NORMAL(className, MON_NORMAL, psprintf("HPSTATE.TLZ: %b", spc0_shadow_scan[61])); |
| 107 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.IE: %b", spc0_shadow_scan[62])); |
| 108 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.PRIV: %b", spc0_shadow_scan[63])); |
| 109 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.AM: %b", spc0_shadow_scan[64])); |
| 110 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.PEF: %b", spc0_shadow_scan[65])); |
| 111 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.RED: %b", spc0_shadow_scan[66])); |
| 112 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.HPRIV: %b", spc0_shadow_scan[67])); |
| 113 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.TCT: %b", spc0_shadow_scan[68])); |
| 114 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.TLE: %b", spc0_shadow_scan[69])); |
| 115 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.CLE: %b", spc0_shadow_scan[70])); |
| 116 | PR_NORMAL(className, MON_NORMAL, psprintf("HPSTATE.IBE: %b", spc0_shadow_scan[71])); |
| 117 | PR_NORMAL(className, MON_NORMAL, psprintf("VA: %h", spc0_shadow_scan[117:72])); |
| 118 | #ifndef RTL_NO_SPC1 |
| 119 | spc1_shadow_scan = fc_shadow_scan_port.$spc1_shadow_scan_bits; |
| 120 | PR_NORMAL(className, MON_NORMAL, psprintf("Captured SPC1 Thread %d Shadow scan bits", spcThreadId)); |
| 121 | PR_NORMAL(className, MON_NORMAL, psprintf("TL for last trap: %h", spc1_shadow_scan[2:0])); |
| 122 | PR_NORMAL(className, MON_NORMAL, psprintf("TT for last trap: %h", spc1_shadow_scan[11:3])); |
| 123 | PR_NORMAL(className, MON_NORMAL, psprintf("TPC for last trap: %h", spc1_shadow_scan[57:12])); |
| 124 | PR_NORMAL(className, MON_NORMAL, psprintf("TL: %b", spc1_shadow_scan[60:58])); |
| 125 | PR_NORMAL(className, MON_NORMAL, psprintf("HPSTATE.TLZ: %b", spc1_shadow_scan[61])); |
| 126 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.IE: %b", spc1_shadow_scan[62])); |
| 127 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.PRIV: %b", spc1_shadow_scan[63])); |
| 128 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.AM: %b", spc1_shadow_scan[64])); |
| 129 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.PEF: %b", spc1_shadow_scan[65])); |
| 130 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.RED: %b", spc1_shadow_scan[66])); |
| 131 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.HPRIV: %b", spc1_shadow_scan[67])); |
| 132 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.TCT: %b", spc1_shadow_scan[68])); |
| 133 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.TLE: %b", spc1_shadow_scan[69])); |
| 134 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.CLE: %b", spc1_shadow_scan[70])); |
| 135 | PR_NORMAL(className, MON_NORMAL, psprintf("HPSTATE.IBE: %b", spc1_shadow_scan[71])); |
| 136 | PR_NORMAL(className, MON_NORMAL, psprintf("VA: %h", spc1_shadow_scan[117:72])); |
| 137 | #endif |
| 138 | #ifndef RTL_NO_SPC2 |
| 139 | spc2_shadow_scan = fc_shadow_scan_port.$spc2_shadow_scan_bits; |
| 140 | PR_NORMAL(className, MON_NORMAL, psprintf("Captured SPC2 Thread %d Shadow scan bits", spcThreadId)); |
| 141 | PR_NORMAL(className, MON_NORMAL, psprintf("TL for last trap: %h", spc2_shadow_scan[2:0])); |
| 142 | PR_NORMAL(className, MON_NORMAL, psprintf("TT for last trap: %h", spc2_shadow_scan[11:3])); |
| 143 | PR_NORMAL(className, MON_NORMAL, psprintf("TPC for last trap: %h", spc2_shadow_scan[57:12])); |
| 144 | PR_NORMAL(className, MON_NORMAL, psprintf("TL: %b", spc2_shadow_scan[60:58])); |
| 145 | PR_NORMAL(className, MON_NORMAL, psprintf("HPSTATE.TLZ: %b", spc2_shadow_scan[61])); |
| 146 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.IE: %b", spc2_shadow_scan[62])); |
| 147 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.PRIV: %b", spc2_shadow_scan[63])); |
| 148 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.AM: %b", spc2_shadow_scan[64])); |
| 149 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.PEF: %b", spc2_shadow_scan[65])); |
| 150 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.RED: %b", spc2_shadow_scan[66])); |
| 151 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.HPRIV: %b", spc2_shadow_scan[67])); |
| 152 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.TCT: %b", spc2_shadow_scan[68])); |
| 153 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.TLE: %b", spc2_shadow_scan[69])); |
| 154 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.CLE: %b", spc2_shadow_scan[70])); |
| 155 | PR_NORMAL(className, MON_NORMAL, psprintf("HPSTATE.IBE: %b", spc2_shadow_scan[71])); |
| 156 | PR_NORMAL(className, MON_NORMAL, psprintf("VA: %h", spc2_shadow_scan[117:72])); |
| 157 | #endif |
| 158 | #ifndef RTL_NO_SPC3 |
| 159 | spc3_shadow_scan = fc_shadow_scan_port.$spc3_shadow_scan_bits; |
| 160 | PR_NORMAL(className, MON_NORMAL, psprintf("Captured SPC3 Thread %d Shadow scan bits", spcThreadId)); |
| 161 | PR_NORMAL(className, MON_NORMAL, psprintf("TL for last trap: %h", spc3_shadow_scan[2:0])); |
| 162 | PR_NORMAL(className, MON_NORMAL, psprintf("TT for last trap: %h", spc3_shadow_scan[11:3])); |
| 163 | PR_NORMAL(className, MON_NORMAL, psprintf("TPC for last trap: %h", spc3_shadow_scan[57:12])); |
| 164 | PR_NORMAL(className, MON_NORMAL, psprintf("TL: %b", spc3_shadow_scan[60:58])); |
| 165 | PR_NORMAL(className, MON_NORMAL, psprintf("HPSTATE.TLZ: %b", spc3_shadow_scan[61])); |
| 166 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.IE: %b", spc3_shadow_scan[62])); |
| 167 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.PRIV: %b", spc3_shadow_scan[63])); |
| 168 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.AM: %b", spc3_shadow_scan[64])); |
| 169 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.PEF: %b", spc3_shadow_scan[65])); |
| 170 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.RED: %b", spc3_shadow_scan[66])); |
| 171 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.HPRIV: %b", spc3_shadow_scan[67])); |
| 172 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.TCT: %b", spc3_shadow_scan[68])); |
| 173 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.TLE: %b", spc3_shadow_scan[69])); |
| 174 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.CLE: %b", spc3_shadow_scan[70])); |
| 175 | PR_NORMAL(className, MON_NORMAL, psprintf("HPSTATE.IBE: %b", spc3_shadow_scan[71])); |
| 176 | PR_NORMAL(className, MON_NORMAL, psprintf("VA: %h", spc3_shadow_scan[117:72])); |
| 177 | #endif |
| 178 | #ifndef RTL_NO_SPC4 |
| 179 | spc4_shadow_scan = fc_shadow_scan_port.$spc4_shadow_scan_bits; |
| 180 | PR_NORMAL(className, MON_NORMAL, psprintf("Captured SPC4 Thread %d Shadow scan bits", spcThreadId)); |
| 181 | PR_NORMAL(className, MON_NORMAL, psprintf("TL for last trap: %h", spc4_shadow_scan[2:0])); |
| 182 | PR_NORMAL(className, MON_NORMAL, psprintf("TT for last trap: %h", spc4_shadow_scan[11:3])); |
| 183 | PR_NORMAL(className, MON_NORMAL, psprintf("TPC for last trap: %h", spc4_shadow_scan[57:12])); |
| 184 | PR_NORMAL(className, MON_NORMAL, psprintf("TL: %b", spc4_shadow_scan[60:58])); |
| 185 | PR_NORMAL(className, MON_NORMAL, psprintf("HPSTATE.TLZ: %b", spc4_shadow_scan[61])); |
| 186 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.IE: %b", spc4_shadow_scan[62])); |
| 187 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.PRIV: %b", spc4_shadow_scan[63])); |
| 188 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.AM: %b", spc4_shadow_scan[64])); |
| 189 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.PEF: %b", spc4_shadow_scan[65])); |
| 190 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.RED: %b", spc4_shadow_scan[66])); |
| 191 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.HPRIV: %b", spc4_shadow_scan[67])); |
| 192 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.TCT: %b", spc4_shadow_scan[68])); |
| 193 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.TLE: %b", spc4_shadow_scan[69])); |
| 194 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.CLE: %b", spc4_shadow_scan[70])); |
| 195 | PR_NORMAL(className, MON_NORMAL, psprintf("HPSTATE.IBE: %b", spc4_shadow_scan[71])); |
| 196 | PR_NORMAL(className, MON_NORMAL, psprintf("VA: %h", spc4_shadow_scan[117:72])); |
| 197 | #endif |
| 198 | #ifndef RTL_NO_SPC5 |
| 199 | spc5_shadow_scan = fc_shadow_scan_port.$spc5_shadow_scan_bits; |
| 200 | PR_NORMAL(className, MON_NORMAL, psprintf("Captured SPC5 Thread %d Shadow scan bits", spcThreadId)); |
| 201 | PR_NORMAL(className, MON_NORMAL, psprintf("TL for last trap: %h", spc5_shadow_scan[2:0])); |
| 202 | PR_NORMAL(className, MON_NORMAL, psprintf("TT for last trap: %h", spc5_shadow_scan[11:3])); |
| 203 | PR_NORMAL(className, MON_NORMAL, psprintf("TPC for last trap: %h", spc5_shadow_scan[57:12])); |
| 204 | PR_NORMAL(className, MON_NORMAL, psprintf("TL: %b", spc5_shadow_scan[60:58])); |
| 205 | PR_NORMAL(className, MON_NORMAL, psprintf("HPSTATE.TLZ: %b", spc5_shadow_scan[61])); |
| 206 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.IE: %b", spc5_shadow_scan[62])); |
| 207 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.PRIV: %b", spc5_shadow_scan[63])); |
| 208 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.AM: %b", spc5_shadow_scan[64])); |
| 209 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.PEF: %b", spc5_shadow_scan[65])); |
| 210 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.RED: %b", spc5_shadow_scan[66])); |
| 211 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.HPRIV: %b", spc5_shadow_scan[67])); |
| 212 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.TCT: %b", spc5_shadow_scan[68])); |
| 213 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.TLE: %b", spc5_shadow_scan[69])); |
| 214 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.CLE: %b", spc5_shadow_scan[70])); |
| 215 | PR_NORMAL(className, MON_NORMAL, psprintf("HPSTATE.IBE: %b", spc5_shadow_scan[71])); |
| 216 | PR_NORMAL(className, MON_NORMAL, psprintf("VA: %h", spc5_shadow_scan[117:72])); |
| 217 | #endif |
| 218 | #ifndef RTL_NO_SPC6 |
| 219 | spc6_shadow_scan = fc_shadow_scan_port.$spc6_shadow_scan_bits; |
| 220 | PR_NORMAL(className, MON_NORMAL, psprintf("Captured SPC6 Thread %d Shadow scan bits", spcThreadId)); |
| 221 | PR_NORMAL(className, MON_NORMAL, psprintf("TL for last trap: %h", spc6_shadow_scan[2:0])); |
| 222 | PR_NORMAL(className, MON_NORMAL, psprintf("TT for last trap: %h", spc6_shadow_scan[11:3])); |
| 223 | PR_NORMAL(className, MON_NORMAL, psprintf("TPC for last trap: %h", spc6_shadow_scan[57:12])); |
| 224 | PR_NORMAL(className, MON_NORMAL, psprintf("TL: %b", spc6_shadow_scan[60:58])); |
| 225 | PR_NORMAL(className, MON_NORMAL, psprintf("HPSTATE.TLZ: %b", spc6_shadow_scan[61])); |
| 226 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.IE: %b", spc6_shadow_scan[62])); |
| 227 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.PRIV: %b", spc6_shadow_scan[63])); |
| 228 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.AM: %b", spc6_shadow_scan[64])); |
| 229 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.PEF: %b", spc6_shadow_scan[65])); |
| 230 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.RED: %b", spc6_shadow_scan[66])); |
| 231 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.HPRIV: %b", spc6_shadow_scan[67])); |
| 232 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.TCT: %b", spc6_shadow_scan[68])); |
| 233 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.TLE: %b", spc6_shadow_scan[69])); |
| 234 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.CLE: %b", spc6_shadow_scan[70])); |
| 235 | PR_NORMAL(className, MON_NORMAL, psprintf("HPSTATE.IBE: %b", spc6_shadow_scan[71])); |
| 236 | PR_NORMAL(className, MON_NORMAL, psprintf("VA: %h", spc6_shadow_scan[117:72])); |
| 237 | #endif |
| 238 | #ifndef RTL_NO_SPC7 |
| 239 | spc7_shadow_scan = fc_shadow_scan_port.$spc7_shadow_scan_bits; |
| 240 | PR_NORMAL(className, MON_NORMAL, psprintf("Captured SPC7 Thread %d Shadow scan bits", spcThreadId)); |
| 241 | PR_NORMAL(className, MON_NORMAL, psprintf("TL for last trap: %h", spc7_shadow_scan[2:0])); |
| 242 | PR_NORMAL(className, MON_NORMAL, psprintf("TT for last trap: %h", spc7_shadow_scan[11:3])); |
| 243 | PR_NORMAL(className, MON_NORMAL, psprintf("TPC for last trap: %h", spc7_shadow_scan[57:12])); |
| 244 | PR_NORMAL(className, MON_NORMAL, psprintf("TL: %b", spc7_shadow_scan[60:58])); |
| 245 | PR_NORMAL(className, MON_NORMAL, psprintf("HPSTATE.TLZ: %b", spc7_shadow_scan[61])); |
| 246 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.IE: %b", spc7_shadow_scan[62])); |
| 247 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.PRIV: %b", spc7_shadow_scan[63])); |
| 248 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.AM: %b", spc7_shadow_scan[64])); |
| 249 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.PEF: %b", spc7_shadow_scan[65])); |
| 250 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.RED: %b", spc7_shadow_scan[66])); |
| 251 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.HPRIV: %b", spc7_shadow_scan[67])); |
| 252 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.TCT: %b", spc7_shadow_scan[68])); |
| 253 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.TLE: %b", spc7_shadow_scan[69])); |
| 254 | PR_NORMAL(className, MON_NORMAL, psprintf("PSTATE.CLE: %b", spc7_shadow_scan[70])); |
| 255 | PR_NORMAL(className, MON_NORMAL, psprintf("HPSTATE.IBE: %b", spc7_shadow_scan[71])); |
| 256 | PR_NORMAL(className, MON_NORMAL, psprintf("VA: %h", spc7_shadow_scan[117:72])); |
| 257 | #endif |
| 258 | } |
| 259 | } |
| 260 | { |
| 261 | while (1) { |
| 262 | @(posedge fc_shadow_scan_port.$l2t_shadow_scan_en async); |
| 263 | l2t0_shadow_scan = fc_shadow_scan_port.$l2t0_shadow_scan_bits; |
| 264 | l2t1_shadow_scan = fc_shadow_scan_port.$l2t1_shadow_scan_bits; |
| 265 | l2t2_shadow_scan = fc_shadow_scan_port.$l2t2_shadow_scan_bits; |
| 266 | l2t3_shadow_scan = fc_shadow_scan_port.$l2t3_shadow_scan_bits; |
| 267 | l2t4_shadow_scan = fc_shadow_scan_port.$l2t4_shadow_scan_bits; |
| 268 | l2t5_shadow_scan = fc_shadow_scan_port.$l2t5_shadow_scan_bits; |
| 269 | l2t6_shadow_scan = fc_shadow_scan_port.$l2t6_shadow_scan_bits; |
| 270 | l2t7_shadow_scan = fc_shadow_scan_port.$l2t7_shadow_scan_bits; |
| 271 | |
| 272 | PR_NORMAL(className, MON_NORMAL, psprintf("Captured L2T Shadow scan bits")); |
| 273 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T0 Error Address Register: %h", l2t0_shadow_scan[35:0])); |
| 274 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T0 Notdata Error Register: %h", l2t0_shadow_scan[83:36])); |
| 275 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T0 Error Status Register: %h", l2t0_shadow_scan[141:84])); |
| 276 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T1 Error Address Register: %h", l2t1_shadow_scan[35:0])); |
| 277 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T1 Notdata Error Register: %h", l2t1_shadow_scan[83:36])); |
| 278 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T1 Error Status Register: %h", l2t1_shadow_scan[141:84])); |
| 279 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T2 Error Address Register: %h", l2t2_shadow_scan[35:0])); |
| 280 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T2 Notdata Error Register: %h", l2t2_shadow_scan[83:36])); |
| 281 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T2 Error Status Register: %h", l2t2_shadow_scan[141:84])); |
| 282 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T3 Error Address Register: %h", l2t3_shadow_scan[35:0])); |
| 283 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T3 Notdata Error Register: %h", l2t3_shadow_scan[83:36])); |
| 284 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T3 Error Status Register: %h", l2t3_shadow_scan[141:84])); |
| 285 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T4 Error Address Register: %h", l2t4_shadow_scan[35:0])); |
| 286 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T4 Notdata Error Register: %h", l2t4_shadow_scan[83:36])); |
| 287 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T4 Error Status Register: %h", l2t4_shadow_scan[141:84])); |
| 288 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T5 Error Address Register: %h", l2t5_shadow_scan[35:0])); |
| 289 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T5 Notdata Error Register: %h", l2t5_shadow_scan[83:36])); |
| 290 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T5 Error Status Register: %h", l2t5_shadow_scan[141:84])); |
| 291 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T6 Error Address Register: %h", l2t6_shadow_scan[35:0])); |
| 292 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T6 Notdata Error Register: %h", l2t6_shadow_scan[83:36])); |
| 293 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T6 Error Status Register: %h", l2t6_shadow_scan[141:84])); |
| 294 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T7 Error Address Register: %h", l2t7_shadow_scan[35:0])); |
| 295 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T7 Notdata Error Register: %h", l2t7_shadow_scan[83:36])); |
| 296 | PR_NORMAL(className, MON_NORMAL, psprintf("L2T7 Error Status Register: %h", l2t7_shadow_scan[141:84])); |
| 297 | } |
| 298 | } |
| 299 | join none |
| 300 | } |
| 301 | |
| 302 | function string CLASSNAME::getShadowScanValue(string cluster) { |
| 303 | string outStr = ""; |
| 304 | string tmpStr = ""; |
| 305 | |
| 306 | tmpStr = cluster.substr(0,2); |
| 307 | if (tmpStr.match("spc")) { |
| 308 | sprintf(outStr, "%b",spc0_shadow_scan); |
| 309 | #ifndef RTL_NO_SPC1 |
| 310 | sprintf(tmpStr, "%b",spc1_shadow_scan); |
| 311 | outStr = {outStr,tmpStr}; |
| 312 | #endif |
| 313 | #ifndef RTL_NO_SPC2 |
| 314 | sprintf(tmpStr, "%b",spc2_shadow_scan); |
| 315 | outStr = {outStr,tmpStr}; |
| 316 | #endif |
| 317 | #ifndef RTL_NO_SPC3 |
| 318 | sprintf(tmpStr, "%b",spc3_shadow_scan); |
| 319 | outStr = {outStr,tmpStr}; |
| 320 | #endif |
| 321 | #ifndef RTL_NO_SPC4 |
| 322 | sprintf(tmpStr, "%b",spc4_shadow_scan); |
| 323 | outStr = {outStr,tmpStr}; |
| 324 | #endif |
| 325 | #ifndef RTL_NO_SPC5 |
| 326 | sprintf(tmpStr, "%b",spc5_shadow_scan); |
| 327 | outStr = {outStr,tmpStr}; |
| 328 | #endif |
| 329 | #ifndef RTL_NO_SPC6 |
| 330 | sprintf(tmpStr, "%b",spc6_shadow_scan); |
| 331 | outStr = {outStr,tmpStr}; |
| 332 | #endif |
| 333 | #ifndef RTL_NO_SPC7 |
| 334 | sprintf(tmpStr, "%b",spc7_shadow_scan); |
| 335 | outStr = {outStr,tmpStr}; |
| 336 | #endif |
| 337 | } |
| 338 | else if (tmpStr.match("l2t")) { |
| 339 | sprintf(outStr, "%b",{l2t0_shadow_scan,l2t1_shadow_scan,l2t2_shadow_scan,l2t3_shadow_scan,l2t4_shadow_scan,l2t5_shadow_scan,l2t6_shadow_scan,l2t7_shadow_scan}); |
| 340 | } |
| 341 | else { |
| 342 | PR_ERROR(className, MON_ERROR, psprintf("Given string: %s does not match spc or l2t", cluster)); |
| 343 | } |
| 344 | PR_ALWAYS(className, MON_ALWAYS, psprintf("Captured shadow scan value for %s : %s", cluster, outStr)); |
| 345 | getShadowScanValue = outStr; |
| 346 | } |
| 347 | |
| 348 | function integer CLASSNAME::getSpcThreadId() { |
| 349 | getSpcThreadId = spcThreadId; |
| 350 | } |