Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / env / common / verilog / nas_car / nas_probes.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: nas_probes.v
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`timescale 1 ps / 1 ps
36
37`ifdef CORE_0
38
39module nas_probes0;
40
41
42`ifdef GATESIM
43
44
45`else
46 reg [7:0] ex_valid_m;
47 reg [7:0] ex_valid_b;
48 reg [7:0] ex_valid_w;
49 reg [7:0] return_f4;
50 reg [2:0] ex0_tid_m;
51 reg [2:0] ex1_tid_m;
52 reg [2:0] ex0_tid_b;
53 reg [2:0] ex1_tid_b;
54 reg [2:0] ex0_tid_w;
55 reg [2:0] ex1_tid_w;
56 reg fgu_valid_fb0;
57 reg fgu_valid_fb1;
58
59 reg [31:0] inst0_e;
60 reg [31:0] inst1_e;
61
62 reg [7:0] fg_valid;
63
64 reg fcc_valid_f4;
65 reg fcc_valid_f5;
66 reg fcc_valid_fb;
67
68 reg fgu0_e;
69 reg fgu1_e;
70 reg lsu0_e;
71 reg lsu1_e;
72
73 reg [1:0] dcd_idest_e;
74 reg [1:0] dcd_fdest_e;
75
76 wire [7:0] ex_valid;
77 wire [7:0] exception_w;
78
79 wire [7:0] imul_valid;
80
81 wire fg_cond_fb;
82
83 wire exu_lsu_valid;
84 wire [47:0] exu_lsu_addr;
85 wire [31:0] exu_lsu_instr;
86 wire [2:0] exu_lsu_tid;
87 wire [4:0] exu_lsu_regid;
88 wire [63:0] exu_lsu_data;
89
90 wire [2:0] ex0_tid_e;
91 wire [2:0] ex1_tid_e;
92 wire ex0_valid_e;
93 wire ex1_valid_e;
94 wire [7:0] ex_asr_access;
95 wire ex_asr_valid;
96
97 wire [7:0] lsu_valid;
98 wire [2:0] lsu_tid;
99 wire [7:0] lsu_tid_dec_b;
100 wire lsu_ld_valid;
101 reg [7:0] lsu_data_w;
102 wire [7:0] lsu_data_b;
103
104 wire ld_inst_d;
105
106 reg [7:0] div_idest;
107 reg [7:0] div_fdest;
108
109 reg load0_e;
110 reg load1_e;
111
112 reg load_m;
113 reg load_b;
114
115 reg [2:0] lsu_tid_m;
116 reg [7:0] lsu_complete_m;
117 reg [7:0] lsu_complete_b;
118 reg [7:0] lsu_trap_flush_d; //reqd. for store buffer ue testing
119
120 reg [7:0] ex_flush_w;
121 reg [7:0] ex_flush_b;
122
123 reg sel_divide0_e;
124 reg sel_divide1_e;
125
126 wire dec_flush_lb;
127
128 wire [7:0] fgu_idiv_valid;
129
130 wire [7:0] fgu_fdiv_valid;
131
132 wire [7:0] fg_div_valid;
133
134 wire lsu_valid_b;
135
136 wire [7:0] return_w;
137 wire return0;
138 wire return1;
139 wire [7:0] real_exception;
140
141 reg [2:0] lsu_tid_b;
142 reg fmov_valid_fb;
143 reg fmov_valid_f5;
144 reg fmov_valid_f4;
145 reg fmov_valid_f3;
146 reg fmov_valid_f2;
147 reg fmov_valid_m;
148 reg fmov_valid_e;
149
150 reg fg_flush_fb;
151 reg fg_flush_f5;
152 reg fg_flush_f4;
153 reg fg_flush_f3;
154 reg fg_flush_f2;
155
156 reg siam0_d;
157 reg siam1_d;
158
159 reg done0_d;
160 reg done1_d;
161 reg retry0_d;
162 reg retry1_d;
163 reg done0_e;
164 reg done1_e;
165 reg retry0_e;
166 reg retry1_e;
167 reg tlu_ccr_cwp_0_valid_last;
168 reg tlu_ccr_cwp_1_valid_last;
169 reg [7:0] fg_fdiv_valid_fw;
170 reg [7:0] asi_in_progress_b;
171 reg [7:0] asi_in_progress_w;
172 reg [7:0] asi_in_progress_fx4;
173 reg [7:0] tlu_valid;
174 reg [7:0] sync_reset_w;
175
176 reg [7:0] div_special_cancel_f4;
177
178 reg asi_store_b;
179 reg asi_store_w;
180 reg [2:0] dcc_tid_b;
181 reg [2:0] dcc_tid_w;
182 reg [7:0] asi_valid_w;
183 reg [7:0] asi_valid_fx4;
184 reg [7:0] asi_valid_fx5;
185
186 reg [7:0] lsu_state;
187 reg [7:0] lsu_check;
188 reg [2:0] lsu_tid_e;
189
190 reg [47:0] pc_0_e;
191 reg [47:0] pc_1_e;
192 reg [47:0] pc_0_m;
193 reg [47:0] pc_1_m;
194 reg [47:0] pc_0_b;
195 reg [47:0] pc_1_b;
196 reg [47:0] pc_0_w;
197 reg [47:0] pc_1_w;
198 reg [47:0] pc_2_w;
199 reg [47:0] pc_3_w;
200 reg [47:0] pc_4_w;
201 reg [47:0] pc_5_w;
202 reg [47:0] pc_6_w;
203 reg [47:0] pc_7_w;
204
205 reg fgu_err_fx3;
206 reg fgu_err_fx4;
207 reg fgu_err_fx5;
208 reg fgu_err_fb;
209
210 reg clkstop_d1;
211 reg clkstop_d2;
212 reg clkstop_d3;
213 reg clkstop_d4;
214 reg clkstop_d5;
215
216integer i;
217integer start_dmiss0;
218integer start_dmiss1;
219integer start_dmiss2;
220integer start_dmiss3;
221integer start_dmiss4;
222integer start_dmiss5;
223integer start_dmiss6;
224integer start_dmiss7;
225integer number_dmiss;
226integer start_imiss0;
227integer start_imiss1;
228integer start_imiss2;
229integer start_imiss3;
230integer start_imiss4;
231integer start_imiss5;
232integer start_imiss6;
233integer start_imiss7;
234integer active_imiss0;
235integer active_imiss1;
236integer active_imiss2;
237integer active_imiss3;
238integer active_imiss4;
239integer active_imiss5;
240integer active_imiss6;
241integer active_imiss7;
242integer first_imiss0;
243integer first_imiss1;
244integer first_imiss2;
245integer first_imiss3;
246integer first_imiss4;
247integer first_imiss5;
248integer first_imiss6;
249integer first_imiss7;
250integer number_imiss;
251integer clock;
252integer sum_dmiss_latency;
253integer sum_imiss_latency;
254reg spec_dmiss;
255integer dmiss_cnt;
256integer imiss_cnt;
257reg pcx_req;
258integer l15dmiss_cnt;
259integer l15imiss_cnt;
260
261
262initial begin // {
263 pcx_req=0;
264 l15imiss_cnt=0;
265 l15dmiss_cnt=0;
266 imiss_cnt=0;
267 dmiss_cnt=0;
268 clock=0;
269 start_dmiss0=0;
270 start_dmiss1=0;
271 start_dmiss2=0;
272 start_dmiss3=0;
273 start_dmiss4=0;
274 start_dmiss5=0;
275 start_dmiss6=0;
276 start_dmiss7=0;
277 number_dmiss=0;
278 start_imiss0=0;
279 start_imiss1=0;
280 start_imiss2=0;
281 start_imiss3=0;
282 start_imiss4=0;
283 start_imiss5=0;
284 start_imiss6=0;
285 start_imiss7=0;
286 active_imiss0=0;
287 active_imiss1=0;
288 active_imiss2=0;
289 active_imiss3=0;
290 active_imiss4=0;
291 active_imiss5=0;
292 active_imiss6=0;
293 active_imiss7=0;
294 first_imiss0=0;
295 first_imiss1=0;
296 first_imiss2=0;
297 first_imiss3=0;
298 first_imiss4=0;
299 first_imiss5=0;
300 first_imiss6=0;
301 first_imiss7=0;
302 number_imiss=0;
303 sum_dmiss_latency=0;
304 sum_imiss_latency=0;
305 asi_in_progress_b <= 8'h0;
306 asi_in_progress_w <= 8'h0;
307 asi_in_progress_fx4 <= 8'h0;
308 tlu_valid <= 8'h0;
309 div_idest <= 8'h0;
310 div_fdest <= 8'h0;
311 lsu_state <= 8'h0;
312 clkstop_d1 <=0;
313 clkstop_d2 <=0;
314 clkstop_d3 <=0;
315 clkstop_d4 <=0;
316 clkstop_d5 <=0;
317
318end //}
319
320wire [7:0] asi_store_flush_w = {`SPC0.lsu.sbs7.flush_st_w,
321 `SPC0.lsu.sbs6.flush_st_w,
322 `SPC0.lsu.sbs5.flush_st_w,
323 `SPC0.lsu.sbs4.flush_st_w,
324 `SPC0.lsu.sbs3.flush_st_w,
325 `SPC0.lsu.sbs2.flush_st_w,
326 `SPC0.lsu.sbs1.flush_st_w,
327 `SPC0.lsu.sbs0.flush_st_w};
328
329wire [7:0] store_sync = {`SPC0.lsu.sbs7.trap_sync,
330 `SPC0.lsu.sbs6.trap_sync,
331 `SPC0.lsu.sbs5.trap_sync,
332 `SPC0.lsu.sbs4.trap_sync,
333 `SPC0.lsu.sbs3.trap_sync,
334 `SPC0.lsu.sbs2.trap_sync,
335 `SPC0.lsu.sbs1.trap_sync,
336 `SPC0.lsu.sbs0.trap_sync};
337wire [7:0] sync_reset = {`SPC0.lsu.sbs7.sync_state_rst,
338 `SPC0.lsu.sbs6.sync_state_rst,
339 `SPC0.lsu.sbs5.sync_state_rst,
340 `SPC0.lsu.sbs4.sync_state_rst,
341 `SPC0.lsu.sbs3.sync_state_rst,
342 `SPC0.lsu.sbs2.sync_state_rst,
343 `SPC0.lsu.sbs1.sync_state_rst,
344 `SPC0.lsu.sbs0.sync_state_rst};
345
346//--------------------
347// Used in nas_pipe for TSB Config Regs Capture/Compare
348// ADD_TSB_CFG
349
350// NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
351`ifndef EMUL
352wire [63:0] ctxt_z_tsb_cfg0_reg [7:0]; // 1 per thread
353wire [63:0] ctxt_z_tsb_cfg1_reg [7:0];
354wire [63:0] ctxt_z_tsb_cfg2_reg [7:0];
355wire [63:0] ctxt_z_tsb_cfg3_reg [7:0];
356wire [63:0] ctxt_nz_tsb_cfg0_reg [7:0];
357wire [63:0] ctxt_nz_tsb_cfg1_reg [7:0];
358wire [63:0] ctxt_nz_tsb_cfg2_reg [7:0];
359wire [63:0] ctxt_nz_tsb_cfg3_reg [7:0];
360
361// There are 32 entries in each MMU MRA but not all are needed.
362// Indexing:
363// Bits 4:3 of the address are the lower two bits of the TID
364// Bits 2:0 of the address select the register as below
365// mmu.mra0.array.mem for T0-T3
366// mmu.mra1.array.mem for T4-T7
367// (this is documented in mmu_asi_ctl.sv)
368// z TSB cfg 0,1 address 0
369// z TSB cfg 2,3 address 1
370// nz TSB cfg 0,1 address 2
371// nz TSB cfg 2,3 address 3
372// Real range, physical offset pair 0 address 4
373// Real range, physical offset pair 1 address 5
374// Real range, physical offset pair 2 address 6
375// Real range, physical offset pair 3 address 7
376
377wire [83:0] mmu_mra0_a0 = `SPC0.mmu.mra0.array.mem[0];
378wire [83:0] mmu_mra0_a8 = `SPC0.mmu.mra0.array.mem[8];
379wire [83:0] mmu_mra0_a16 = `SPC0.mmu.mra0.array.mem[16];
380wire [83:0] mmu_mra0_a24 = `SPC0.mmu.mra0.array.mem[24];
381wire [83:0] mmu_mra0_a1 = `SPC0.mmu.mra0.array.mem[1];
382wire [83:0] mmu_mra0_a9 = `SPC0.mmu.mra0.array.mem[9];
383wire [83:0] mmu_mra0_a17 = `SPC0.mmu.mra0.array.mem[17];
384wire [83:0] mmu_mra0_a25 = `SPC0.mmu.mra0.array.mem[25];
385wire [83:0] mmu_mra0_a2 = `SPC0.mmu.mra0.array.mem[2];
386wire [83:0] mmu_mra0_a10 = `SPC0.mmu.mra0.array.mem[10];
387wire [83:0] mmu_mra0_a18 = `SPC0.mmu.mra0.array.mem[18];
388wire [83:0] mmu_mra0_a26 = `SPC0.mmu.mra0.array.mem[26];
389wire [83:0] mmu_mra0_a3 = `SPC0.mmu.mra0.array.mem[3];
390wire [83:0] mmu_mra0_a11 = `SPC0.mmu.mra0.array.mem[11];
391wire [83:0] mmu_mra0_a19 = `SPC0.mmu.mra0.array.mem[19];
392wire [83:0] mmu_mra0_a27 = `SPC0.mmu.mra0.array.mem[27];
393wire [83:0] mmu_mra1_a0 = `SPC0.mmu.mra1.array.mem[0];
394wire [83:0] mmu_mra1_a8 = `SPC0.mmu.mra1.array.mem[8];
395wire [83:0] mmu_mra1_a16 = `SPC0.mmu.mra1.array.mem[16];
396wire [83:0] mmu_mra1_a24 = `SPC0.mmu.mra1.array.mem[24];
397wire [83:0] mmu_mra1_a1 = `SPC0.mmu.mra1.array.mem[1];
398wire [83:0] mmu_mra1_a9 = `SPC0.mmu.mra1.array.mem[9];
399wire [83:0] mmu_mra1_a17 = `SPC0.mmu.mra1.array.mem[17];
400wire [83:0] mmu_mra1_a25 = `SPC0.mmu.mra1.array.mem[25];
401wire [83:0] mmu_mra1_a2 = `SPC0.mmu.mra1.array.mem[2];
402wire [83:0] mmu_mra1_a10 = `SPC0.mmu.mra1.array.mem[10];
403wire [83:0] mmu_mra1_a18 = `SPC0.mmu.mra1.array.mem[18];
404wire [83:0] mmu_mra1_a26 = `SPC0.mmu.mra1.array.mem[26];
405wire [83:0] mmu_mra1_a3 = `SPC0.mmu.mra1.array.mem[3];
406wire [83:0] mmu_mra1_a11 = `SPC0.mmu.mra1.array.mem[11];
407wire [83:0] mmu_mra1_a19 = `SPC0.mmu.mra1.array.mem[19];
408wire [83:0] mmu_mra1_a27 = `SPC0.mmu.mra1.array.mem[27];
409
410
411// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
412// as well as the physical to architectural bit position relationships.
413assign ctxt_z_tsb_cfg0_reg[0] = {`SPC0.mmu.asi.t0_e_z[0], // z_tsb_cfg0[63]
414 mmu_mra0_a0[76:75], // z_tsb_cfg0[62:61]
415 21'b0, // z_tsb_cfg0[60:40]
416 mmu_mra0_a0[74:48], // z_tsb_cfg0[39:13]
417 4'b0, // z_tsb_cfg0[12:9]
418 mmu_mra0_a0[47:39] // z_tsb_cfg0[8:0]
419 };
420assign ctxt_z_tsb_cfg1_reg[0] = {`SPC0.mmu.asi.t0_e_z[1], // z_tsb_cfg0[63]
421 mmu_mra0_a0[37:36], // z_tsb_cfg0[62:61]
422 21'b0, // z_tsb_cfg0[60:40]
423 mmu_mra0_a0[35:9], // z_tsb_cfg0[39:13]
424 4'b0, // z_tsb_cfg0[12:9]
425 mmu_mra0_a0[8:0] // z_tsb_cfg0[8:0]
426 };
427assign ctxt_z_tsb_cfg2_reg[0] = {`SPC0.mmu.asi.t0_e_z[2], // z_tsb_cfg0[63]
428 mmu_mra0_a1[76:75], // z_tsb_cfg0[62:61]
429 21'b0, // z_tsb_cfg0[60:40]
430 mmu_mra0_a1[74:48], // z_tsb_cfg0[39:13]
431 4'b0, // z_tsb_cfg0[12:9]
432 mmu_mra0_a1[47:39] // z_tsb_cfg0[8:0]
433 };
434assign ctxt_z_tsb_cfg3_reg[0] = {`SPC0.mmu.asi.t0_e_z[3], // z_tsb_cfg0[63]
435 mmu_mra0_a1[37:36], // z_tsb_cfg0[62:61]
436 21'b0, // z_tsb_cfg0[60:40]
437 mmu_mra0_a1[35:9], // z_tsb_cfg0[39:13]
438 4'b0, // z_tsb_cfg0[12:9]
439 mmu_mra0_a1[8:0] // z_tsb_cfg0[8:0]
440 };
441assign ctxt_nz_tsb_cfg0_reg[0] = {`SPC0.mmu.asi.t0_e_nz[0],// z_tsb_cfg0[63]
442 mmu_mra0_a2[76:75], // z_tsb_cfg0[62:61]
443 21'b0, // z_tsb_cfg0[60:40]
444 mmu_mra0_a2[74:48], // z_tsb_cfg0[39:13]
445 4'b0, // z_tsb_cfg0[12:9]
446 mmu_mra0_a2[47:39] // z_tsb_cfg0[8:0]
447 };
448assign ctxt_nz_tsb_cfg1_reg[0] = {`SPC0.mmu.asi.t0_e_nz[1],// z_tsb_cfg0[63]
449 mmu_mra0_a2[37:36], // z_tsb_cfg0[62:61]
450 21'b0, // z_tsb_cfg0[60:40]
451 mmu_mra0_a2[35:9], // z_tsb_cfg0[39:13]
452 4'b0, // z_tsb_cfg0[12:9]
453 mmu_mra0_a2[8:0] // z_tsb_cfg0[8:0]
454 };
455assign ctxt_nz_tsb_cfg2_reg[0] = {`SPC0.mmu.asi.t0_e_nz[2],// z_tsb_cfg0[63]
456 mmu_mra0_a3[76:75], // z_tsb_cfg0[62:61]
457 21'b0, // z_tsb_cfg0[60:40]
458 mmu_mra0_a3[74:48], // z_tsb_cfg0[39:13]
459 4'b0, // z_tsb_cfg0[12:9]
460 mmu_mra0_a3[47:39] // z_tsb_cfg0[8:0]
461 };
462assign ctxt_nz_tsb_cfg3_reg[0] = {`SPC0.mmu.asi.t0_e_nz[3],// z_tsb_cfg0[63]
463 mmu_mra0_a3[37:36], // z_tsb_cfg0[62:61]
464 21'b0, // z_tsb_cfg0[60:40]
465 mmu_mra0_a3[35:9], // z_tsb_cfg0[39:13]
466 4'b0, // z_tsb_cfg0[12:9]
467 mmu_mra0_a3[8:0] // z_tsb_cfg0[8:0]
468 };
469
470// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
471// as well as the physical to architectural bit position relationships.
472assign ctxt_z_tsb_cfg0_reg[1] = {`SPC0.mmu.asi.t1_e_z[0], // z_tsb_cfg0[63]
473 mmu_mra0_a8[76:75], // z_tsb_cfg0[62:61]
474 21'b0, // z_tsb_cfg0[60:40]
475 mmu_mra0_a8[74:48], // z_tsb_cfg0[39:13]
476 4'b0, // z_tsb_cfg0[12:9]
477 mmu_mra0_a8[47:39] // z_tsb_cfg0[8:0]
478 };
479assign ctxt_z_tsb_cfg1_reg[1] = {`SPC0.mmu.asi.t1_e_z[1], // z_tsb_cfg0[63]
480 mmu_mra0_a8[37:36], // z_tsb_cfg0[62:61]
481 21'b0, // z_tsb_cfg0[60:40]
482 mmu_mra0_a8[35:9], // z_tsb_cfg0[39:13]
483 4'b0, // z_tsb_cfg0[12:9]
484 mmu_mra0_a8[8:0] // z_tsb_cfg0[8:0]
485 };
486assign ctxt_z_tsb_cfg2_reg[1] = {`SPC0.mmu.asi.t1_e_z[2], // z_tsb_cfg0[63]
487 mmu_mra0_a9[76:75], // z_tsb_cfg0[62:61]
488 21'b0, // z_tsb_cfg0[60:40]
489 mmu_mra0_a9[74:48], // z_tsb_cfg0[39:13]
490 4'b0, // z_tsb_cfg0[12:9]
491 mmu_mra0_a9[47:39] // z_tsb_cfg0[8:0]
492 };
493assign ctxt_z_tsb_cfg3_reg[1] = {`SPC0.mmu.asi.t1_e_z[3], // z_tsb_cfg0[63]
494 mmu_mra0_a9[37:36], // z_tsb_cfg0[62:61]
495 21'b0, // z_tsb_cfg0[60:40]
496 mmu_mra0_a9[35:9], // z_tsb_cfg0[39:13]
497 4'b0, // z_tsb_cfg0[12:9]
498 mmu_mra0_a9[8:0] // z_tsb_cfg0[8:0]
499 };
500assign ctxt_nz_tsb_cfg0_reg[1] = {`SPC0.mmu.asi.t1_e_nz[0],// z_tsb_cfg0[63]
501 mmu_mra0_a10[76:75], // z_tsb_cfg0[62:61]
502 21'b0, // z_tsb_cfg0[60:40]
503 mmu_mra0_a10[74:48], // z_tsb_cfg0[39:13]
504 4'b0, // z_tsb_cfg0[12:9]
505 mmu_mra0_a10[47:39] // z_tsb_cfg0[8:0]
506 };
507assign ctxt_nz_tsb_cfg1_reg[1] = {`SPC0.mmu.asi.t1_e_nz[1],// z_tsb_cfg0[63]
508 mmu_mra0_a10[37:36], // z_tsb_cfg0[62:61]
509 21'b0, // z_tsb_cfg0[60:40]
510 mmu_mra0_a10[35:9], // z_tsb_cfg0[39:13]
511 4'b0, // z_tsb_cfg0[12:9]
512 mmu_mra0_a10[8:0] // z_tsb_cfg0[8:0]
513 };
514assign ctxt_nz_tsb_cfg2_reg[1] = {`SPC0.mmu.asi.t1_e_nz[2],// z_tsb_cfg0[63]
515 mmu_mra0_a11[76:75], // z_tsb_cfg0[62:61]
516 21'b0, // z_tsb_cfg0[60:40]
517 mmu_mra0_a11[74:48], // z_tsb_cfg0[39:13]
518 4'b0, // z_tsb_cfg0[12:9]
519 mmu_mra0_a11[47:39] // z_tsb_cfg0[8:0]
520 };
521assign ctxt_nz_tsb_cfg3_reg[1] = {`SPC0.mmu.asi.t1_e_nz[3],// z_tsb_cfg0[63]
522 mmu_mra0_a11[37:36], // z_tsb_cfg0[62:61]
523 21'b0, // z_tsb_cfg0[60:40]
524 mmu_mra0_a11[35:9], // z_tsb_cfg0[39:13]
525 4'b0, // z_tsb_cfg0[12:9]
526 mmu_mra0_a11[8:0] // z_tsb_cfg0[8:0]
527 };
528
529// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
530// as well as the physical to architectural bit position relationships.
531assign ctxt_z_tsb_cfg0_reg[2] = {`SPC0.mmu.asi.t2_e_z[0], // z_tsb_cfg0[63]
532 mmu_mra0_a16[76:75], // z_tsb_cfg0[62:61]
533 21'b0, // z_tsb_cfg0[60:40]
534 mmu_mra0_a16[74:48], // z_tsb_cfg0[39:13]
535 4'b0, // z_tsb_cfg0[12:9]
536 mmu_mra0_a16[47:39] // z_tsb_cfg0[8:0]
537 };
538assign ctxt_z_tsb_cfg1_reg[2] = {`SPC0.mmu.asi.t2_e_z[1], // z_tsb_cfg0[63]
539 mmu_mra0_a16[37:36], // z_tsb_cfg0[62:61]
540 21'b0, // z_tsb_cfg0[60:40]
541 mmu_mra0_a16[35:9], // z_tsb_cfg0[39:13]
542 4'b0, // z_tsb_cfg0[12:9]
543 mmu_mra0_a16[8:0] // z_tsb_cfg0[8:0]
544 };
545assign ctxt_z_tsb_cfg2_reg[2] = {`SPC0.mmu.asi.t2_e_z[2], // z_tsb_cfg0[63]
546 mmu_mra0_a17[76:75], // z_tsb_cfg0[62:61]
547 21'b0, // z_tsb_cfg0[60:40]
548 mmu_mra0_a17[74:48], // z_tsb_cfg0[39:13]
549 4'b0, // z_tsb_cfg0[12:9]
550 mmu_mra0_a17[47:39] // z_tsb_cfg0[8:0]
551 };
552assign ctxt_z_tsb_cfg3_reg[2] = {`SPC0.mmu.asi.t2_e_z[3], // z_tsb_cfg0[63]
553 mmu_mra0_a17[37:36], // z_tsb_cfg0[62:61]
554 21'b0, // z_tsb_cfg0[60:40]
555 mmu_mra0_a17[35:9], // z_tsb_cfg0[39:13]
556 4'b0, // z_tsb_cfg0[12:9]
557 mmu_mra0_a17[8:0] // z_tsb_cfg0[8:0]
558 };
559assign ctxt_nz_tsb_cfg0_reg[2] = {`SPC0.mmu.asi.t2_e_nz[0],// z_tsb_cfg0[63]
560 mmu_mra0_a18[76:75], // z_tsb_cfg0[62:61]
561 21'b0, // z_tsb_cfg0[60:40]
562 mmu_mra0_a18[74:48], // z_tsb_cfg0[39:13]
563 4'b0, // z_tsb_cfg0[12:9]
564 mmu_mra0_a18[47:39] // z_tsb_cfg0[8:0]
565 };
566assign ctxt_nz_tsb_cfg1_reg[2] = {`SPC0.mmu.asi.t2_e_nz[1],// z_tsb_cfg0[63]
567 mmu_mra0_a18[37:36], // z_tsb_cfg0[62:61]
568 21'b0, // z_tsb_cfg0[60:40]
569 mmu_mra0_a18[35:9], // z_tsb_cfg0[39:13]
570 4'b0, // z_tsb_cfg0[12:9]
571 mmu_mra0_a18[8:0] // z_tsb_cfg0[8:0]
572 };
573assign ctxt_nz_tsb_cfg2_reg[2] = {`SPC0.mmu.asi.t2_e_nz[2],// z_tsb_cfg0[63]
574 mmu_mra0_a19[76:75], // z_tsb_cfg0[62:61]
575 21'b0, // z_tsb_cfg0[60:40]
576 mmu_mra0_a19[74:48], // z_tsb_cfg0[39:13]
577 4'b0, // z_tsb_cfg0[12:9]
578 mmu_mra0_a19[47:39] // z_tsb_cfg0[8:0]
579 };
580assign ctxt_nz_tsb_cfg3_reg[2] = {`SPC0.mmu.asi.t2_e_nz[3],// z_tsb_cfg0[63]
581 mmu_mra0_a19[37:36], // z_tsb_cfg0[62:61]
582 21'b0, // z_tsb_cfg0[60:40]
583 mmu_mra0_a19[35:9], // z_tsb_cfg0[39:13]
584 4'b0, // z_tsb_cfg0[12:9]
585 mmu_mra0_a19[8:0] // z_tsb_cfg0[8:0]
586 };
587
588// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
589// as well as the physical to architectural bit position relationships.
590assign ctxt_z_tsb_cfg0_reg[3] = {`SPC0.mmu.asi.t3_e_z[0], // z_tsb_cfg0[63]
591 mmu_mra0_a24[76:75], // z_tsb_cfg0[62:61]
592 21'b0, // z_tsb_cfg0[60:40]
593 mmu_mra0_a24[74:48], // z_tsb_cfg0[39:13]
594 4'b0, // z_tsb_cfg0[12:9]
595 mmu_mra0_a24[47:39] // z_tsb_cfg0[8:0]
596 };
597assign ctxt_z_tsb_cfg1_reg[3] = {`SPC0.mmu.asi.t3_e_z[1], // z_tsb_cfg0[63]
598 mmu_mra0_a24[37:36], // z_tsb_cfg0[62:61]
599 21'b0, // z_tsb_cfg0[60:40]
600 mmu_mra0_a24[35:9], // z_tsb_cfg0[39:13]
601 4'b0, // z_tsb_cfg0[12:9]
602 mmu_mra0_a24[8:0] // z_tsb_cfg0[8:0]
603 };
604assign ctxt_z_tsb_cfg2_reg[3] = {`SPC0.mmu.asi.t3_e_z[2], // z_tsb_cfg0[63]
605 mmu_mra0_a25[76:75], // z_tsb_cfg0[62:61]
606 21'b0, // z_tsb_cfg0[60:40]
607 mmu_mra0_a25[74:48], // z_tsb_cfg0[39:13]
608 4'b0, // z_tsb_cfg0[12:9]
609 mmu_mra0_a25[47:39] // z_tsb_cfg0[8:0]
610 };
611assign ctxt_z_tsb_cfg3_reg[3] = {`SPC0.mmu.asi.t3_e_z[3], // z_tsb_cfg0[63]
612 mmu_mra0_a25[37:36], // z_tsb_cfg0[62:61]
613 21'b0, // z_tsb_cfg0[60:40]
614 mmu_mra0_a25[35:9], // z_tsb_cfg0[39:13]
615 4'b0, // z_tsb_cfg0[12:9]
616 mmu_mra0_a25[8:0] // z_tsb_cfg0[8:0]
617 };
618assign ctxt_nz_tsb_cfg0_reg[3] = {`SPC0.mmu.asi.t3_e_nz[0],// z_tsb_cfg0[63]
619 mmu_mra0_a26[76:75], // z_tsb_cfg0[62:61]
620 21'b0, // z_tsb_cfg0[60:40]
621 mmu_mra0_a26[74:48], // z_tsb_cfg0[39:13]
622 4'b0, // z_tsb_cfg0[12:9]
623 mmu_mra0_a26[47:39] // z_tsb_cfg0[8:0]
624 };
625assign ctxt_nz_tsb_cfg1_reg[3] = {`SPC0.mmu.asi.t3_e_nz[1],// z_tsb_cfg0[63]
626 mmu_mra0_a26[37:36], // z_tsb_cfg0[62:61]
627 21'b0, // z_tsb_cfg0[60:40]
628 mmu_mra0_a26[35:9], // z_tsb_cfg0[39:13]
629 4'b0, // z_tsb_cfg0[12:9]
630 mmu_mra0_a26[8:0] // z_tsb_cfg0[8:0]
631 };
632assign ctxt_nz_tsb_cfg2_reg[3] = {`SPC0.mmu.asi.t3_e_nz[2],// z_tsb_cfg0[63]
633 mmu_mra0_a27[76:75], // z_tsb_cfg0[62:61]
634 21'b0, // z_tsb_cfg0[60:40]
635 mmu_mra0_a27[74:48], // z_tsb_cfg0[39:13]
636 4'b0, // z_tsb_cfg0[12:9]
637 mmu_mra0_a27[47:39] // z_tsb_cfg0[8:0]
638 };
639assign ctxt_nz_tsb_cfg3_reg[3] = {`SPC0.mmu.asi.t3_e_nz[3],// z_tsb_cfg0[63]
640 mmu_mra0_a27[37:36], // z_tsb_cfg0[62:61]
641 21'b0, // z_tsb_cfg0[60:40]
642 mmu_mra0_a27[35:9], // z_tsb_cfg0[39:13]
643 4'b0, // z_tsb_cfg0[12:9]
644 mmu_mra0_a27[8:0] // z_tsb_cfg0[8:0]
645 };
646
647// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
648// as well as the physical to architectural bit position relationships.
649assign ctxt_z_tsb_cfg0_reg[4] = {`SPC0.mmu.asi.t4_e_z[0], // z_tsb_cfg0[63]
650 mmu_mra1_a0[76:75], // z_tsb_cfg0[62:61]
651 21'b0, // z_tsb_cfg0[60:40]
652 mmu_mra1_a0[74:48], // z_tsb_cfg0[39:13]
653 4'b0, // z_tsb_cfg0[12:9]
654 mmu_mra1_a0[47:39] // z_tsb_cfg0[8:0]
655 };
656assign ctxt_z_tsb_cfg1_reg[4] = {`SPC0.mmu.asi.t4_e_z[1], // z_tsb_cfg0[63]
657 mmu_mra1_a0[37:36], // z_tsb_cfg0[62:61]
658 21'b0, // z_tsb_cfg0[60:40]
659 mmu_mra1_a0[35:9], // z_tsb_cfg0[39:13]
660 4'b0, // z_tsb_cfg0[12:9]
661 mmu_mra1_a0[8:0] // z_tsb_cfg0[8:0]
662 };
663assign ctxt_z_tsb_cfg2_reg[4] = {`SPC0.mmu.asi.t4_e_z[2], // z_tsb_cfg0[63]
664 mmu_mra1_a1[76:75], // z_tsb_cfg0[62:61]
665 21'b0, // z_tsb_cfg0[60:40]
666 mmu_mra1_a1[74:48], // z_tsb_cfg0[39:13]
667 4'b0, // z_tsb_cfg0[12:9]
668 mmu_mra1_a1[47:39] // z_tsb_cfg0[8:0]
669 };
670assign ctxt_z_tsb_cfg3_reg[4] = {`SPC0.mmu.asi.t4_e_z[3], // z_tsb_cfg0[63]
671 mmu_mra1_a1[37:36], // z_tsb_cfg0[62:61]
672 21'b0, // z_tsb_cfg0[60:40]
673 mmu_mra1_a1[35:9], // z_tsb_cfg0[39:13]
674 4'b0, // z_tsb_cfg0[12:9]
675 mmu_mra1_a1[8:0] // z_tsb_cfg0[8:0]
676 };
677assign ctxt_nz_tsb_cfg0_reg[4] = {`SPC0.mmu.asi.t4_e_nz[0],// z_tsb_cfg0[63]
678 mmu_mra1_a2[76:75], // z_tsb_cfg0[62:61]
679 21'b0, // z_tsb_cfg0[60:40]
680 mmu_mra1_a2[74:48], // z_tsb_cfg0[39:13]
681 4'b0, // z_tsb_cfg0[12:9]
682 mmu_mra1_a2[47:39] // z_tsb_cfg0[8:0]
683 };
684assign ctxt_nz_tsb_cfg1_reg[4] = {`SPC0.mmu.asi.t4_e_nz[1],// z_tsb_cfg0[63]
685 mmu_mra1_a2[37:36], // z_tsb_cfg0[62:61]
686 21'b0, // z_tsb_cfg0[60:40]
687 mmu_mra1_a2[35:9], // z_tsb_cfg0[39:13]
688 4'b0, // z_tsb_cfg0[12:9]
689 mmu_mra1_a2[8:0] // z_tsb_cfg0[8:0]
690 };
691assign ctxt_nz_tsb_cfg2_reg[4] = {`SPC0.mmu.asi.t4_e_nz[2],// z_tsb_cfg0[63]
692 mmu_mra1_a3[76:75], // z_tsb_cfg0[62:61]
693 21'b0, // z_tsb_cfg0[60:40]
694 mmu_mra1_a3[74:48], // z_tsb_cfg0[39:13]
695 4'b0, // z_tsb_cfg0[12:9]
696 mmu_mra1_a3[47:39] // z_tsb_cfg0[8:0]
697 };
698assign ctxt_nz_tsb_cfg3_reg[4] = {`SPC0.mmu.asi.t4_e_nz[3],// z_tsb_cfg0[63]
699 mmu_mra1_a3[37:36], // z_tsb_cfg0[62:61]
700 21'b0, // z_tsb_cfg0[60:40]
701 mmu_mra1_a3[35:9], // z_tsb_cfg0[39:13]
702 4'b0, // z_tsb_cfg0[12:9]
703 mmu_mra1_a3[8:0] // z_tsb_cfg0[8:0]
704 };
705
706// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
707// as well as the physical to architectural bit position relationships.
708assign ctxt_z_tsb_cfg0_reg[5] = {`SPC0.mmu.asi.t5_e_z[0], // z_tsb_cfg0[63]
709 mmu_mra1_a8[76:75], // z_tsb_cfg0[62:61]
710 21'b0, // z_tsb_cfg0[60:40]
711 mmu_mra1_a8[74:48], // z_tsb_cfg0[39:13]
712 4'b0, // z_tsb_cfg0[12:9]
713 mmu_mra1_a8[47:39] // z_tsb_cfg0[8:0]
714 };
715assign ctxt_z_tsb_cfg1_reg[5] = {`SPC0.mmu.asi.t5_e_z[1], // z_tsb_cfg0[63]
716 mmu_mra1_a8[37:36], // z_tsb_cfg0[62:61]
717 21'b0, // z_tsb_cfg0[60:40]
718 mmu_mra1_a8[35:9], // z_tsb_cfg0[39:13]
719 4'b0, // z_tsb_cfg0[12:9]
720 mmu_mra1_a8[8:0] // z_tsb_cfg0[8:0]
721 };
722assign ctxt_z_tsb_cfg2_reg[5] = {`SPC0.mmu.asi.t5_e_z[2], // z_tsb_cfg0[63]
723 mmu_mra1_a9[76:75], // z_tsb_cfg0[62:61]
724 21'b0, // z_tsb_cfg0[60:40]
725 mmu_mra1_a9[74:48], // z_tsb_cfg0[39:13]
726 4'b0, // z_tsb_cfg0[12:9]
727 mmu_mra1_a9[47:39] // z_tsb_cfg0[8:0]
728 };
729assign ctxt_z_tsb_cfg3_reg[5] = {`SPC0.mmu.asi.t5_e_z[3], // z_tsb_cfg0[63]
730 mmu_mra1_a9[37:36], // z_tsb_cfg0[62:61]
731 21'b0, // z_tsb_cfg0[60:40]
732 mmu_mra1_a9[35:9], // z_tsb_cfg0[39:13]
733 4'b0, // z_tsb_cfg0[12:9]
734 mmu_mra1_a9[8:0] // z_tsb_cfg0[8:0]
735 };
736assign ctxt_nz_tsb_cfg0_reg[5] = {`SPC0.mmu.asi.t5_e_nz[0],// z_tsb_cfg0[63]
737 mmu_mra1_a10[76:75], // z_tsb_cfg0[62:61]
738 21'b0, // z_tsb_cfg0[60:40]
739 mmu_mra1_a10[74:48], // z_tsb_cfg0[39:13]
740 4'b0, // z_tsb_cfg0[12:9]
741 mmu_mra1_a10[47:39] // z_tsb_cfg0[8:0]
742 };
743assign ctxt_nz_tsb_cfg1_reg[5] = {`SPC0.mmu.asi.t5_e_nz[1],// z_tsb_cfg0[63]
744 mmu_mra1_a10[37:36], // z_tsb_cfg0[62:61]
745 21'b0, // z_tsb_cfg0[60:40]
746 mmu_mra1_a10[35:9], // z_tsb_cfg0[39:13]
747 4'b0, // z_tsb_cfg0[12:9]
748 mmu_mra1_a10[8:0] // z_tsb_cfg0[8:0]
749 };
750assign ctxt_nz_tsb_cfg2_reg[5] = {`SPC0.mmu.asi.t5_e_nz[2],// z_tsb_cfg0[63]
751 mmu_mra1_a11[76:75], // z_tsb_cfg0[62:61]
752 21'b0, // z_tsb_cfg0[60:40]
753 mmu_mra1_a11[74:48], // z_tsb_cfg0[39:13]
754 4'b0, // z_tsb_cfg0[12:9]
755 mmu_mra1_a11[47:39] // z_tsb_cfg0[8:0]
756 };
757assign ctxt_nz_tsb_cfg3_reg[5] = {`SPC0.mmu.asi.t5_e_nz[3],// z_tsb_cfg0[63]
758 mmu_mra1_a11[37:36], // z_tsb_cfg0[62:61]
759 21'b0, // z_tsb_cfg0[60:40]
760 mmu_mra1_a11[35:9], // z_tsb_cfg0[39:13]
761 4'b0, // z_tsb_cfg0[12:9]
762 mmu_mra1_a11[8:0] // z_tsb_cfg0[8:0]
763 };
764
765// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
766// as well as the physical to architectural bit position relationships.
767assign ctxt_z_tsb_cfg0_reg[6] = {`SPC0.mmu.asi.t6_e_z[0], // z_tsb_cfg0[63]
768 mmu_mra1_a16[76:75], // z_tsb_cfg0[62:61]
769 21'b0, // z_tsb_cfg0[60:40]
770 mmu_mra1_a16[74:48], // z_tsb_cfg0[39:13]
771 4'b0, // z_tsb_cfg0[12:9]
772 mmu_mra1_a16[47:39] // z_tsb_cfg0[8:0]
773 };
774assign ctxt_z_tsb_cfg1_reg[6] = {`SPC0.mmu.asi.t6_e_z[1], // z_tsb_cfg0[63]
775 mmu_mra1_a16[37:36], // z_tsb_cfg0[62:61]
776 21'b0, // z_tsb_cfg0[60:40]
777 mmu_mra1_a16[35:9], // z_tsb_cfg0[39:13]
778 4'b0, // z_tsb_cfg0[12:9]
779 mmu_mra1_a16[8:0] // z_tsb_cfg0[8:0]
780 };
781assign ctxt_z_tsb_cfg2_reg[6] = {`SPC0.mmu.asi.t6_e_z[2], // z_tsb_cfg0[63]
782 mmu_mra1_a17[76:75], // z_tsb_cfg0[62:61]
783 21'b0, // z_tsb_cfg0[60:40]
784 mmu_mra1_a17[74:48], // z_tsb_cfg0[39:13]
785 4'b0, // z_tsb_cfg0[12:9]
786 mmu_mra1_a17[47:39] // z_tsb_cfg0[8:0]
787 };
788assign ctxt_z_tsb_cfg3_reg[6] = {`SPC0.mmu.asi.t6_e_z[3], // z_tsb_cfg0[63]
789 mmu_mra1_a17[37:36], // z_tsb_cfg0[62:61]
790 21'b0, // z_tsb_cfg0[60:40]
791 mmu_mra1_a17[35:9], // z_tsb_cfg0[39:13]
792 4'b0, // z_tsb_cfg0[12:9]
793 mmu_mra1_a17[8:0] // z_tsb_cfg0[8:0]
794 };
795assign ctxt_nz_tsb_cfg0_reg[6] = {`SPC0.mmu.asi.t6_e_nz[0],// z_tsb_cfg0[63]
796 mmu_mra1_a18[76:75], // z_tsb_cfg0[62:61]
797 21'b0, // z_tsb_cfg0[60:40]
798 mmu_mra1_a18[74:48], // z_tsb_cfg0[39:13]
799 4'b0, // z_tsb_cfg0[12:9]
800 mmu_mra1_a18[47:39] // z_tsb_cfg0[8:0]
801 };
802assign ctxt_nz_tsb_cfg1_reg[6] = {`SPC0.mmu.asi.t6_e_nz[1],// z_tsb_cfg0[63]
803 mmu_mra1_a18[37:36], // z_tsb_cfg0[62:61]
804 21'b0, // z_tsb_cfg0[60:40]
805 mmu_mra1_a18[35:9], // z_tsb_cfg0[39:13]
806 4'b0, // z_tsb_cfg0[12:9]
807 mmu_mra1_a18[8:0] // z_tsb_cfg0[8:0]
808 };
809assign ctxt_nz_tsb_cfg2_reg[6] = {`SPC0.mmu.asi.t6_e_nz[2],// z_tsb_cfg0[63]
810 mmu_mra1_a19[76:75], // z_tsb_cfg0[62:61]
811 21'b0, // z_tsb_cfg0[60:40]
812 mmu_mra1_a19[74:48], // z_tsb_cfg0[39:13]
813 4'b0, // z_tsb_cfg0[12:9]
814 mmu_mra1_a19[47:39] // z_tsb_cfg0[8:0]
815 };
816assign ctxt_nz_tsb_cfg3_reg[6] = {`SPC0.mmu.asi.t6_e_nz[3],// z_tsb_cfg0[63]
817 mmu_mra1_a19[37:36], // z_tsb_cfg0[62:61]
818 21'b0, // z_tsb_cfg0[60:40]
819 mmu_mra1_a19[35:9], // z_tsb_cfg0[39:13]
820 4'b0, // z_tsb_cfg0[12:9]
821 mmu_mra1_a19[8:0] // z_tsb_cfg0[8:0]
822 };
823
824// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
825// as well as the physical to architectural bit position relationships.
826assign ctxt_z_tsb_cfg0_reg[7] = {`SPC0.mmu.asi.t7_e_z[0], // z_tsb_cfg0[63]
827 mmu_mra1_a24[76:75], // z_tsb_cfg0[62:61]
828 21'b0, // z_tsb_cfg0[60:40]
829 mmu_mra1_a24[74:48], // z_tsb_cfg0[39:13]
830 4'b0, // z_tsb_cfg0[12:9]
831 mmu_mra1_a24[47:39] // z_tsb_cfg0[8:0]
832 };
833assign ctxt_z_tsb_cfg1_reg[7] = {`SPC0.mmu.asi.t7_e_z[1], // z_tsb_cfg0[63]
834 mmu_mra1_a24[37:36], // z_tsb_cfg0[62:61]
835 21'b0, // z_tsb_cfg0[60:40]
836 mmu_mra1_a24[35:9], // z_tsb_cfg0[39:13]
837 4'b0, // z_tsb_cfg0[12:9]
838 mmu_mra1_a24[8:0] // z_tsb_cfg0[8:0]
839 };
840assign ctxt_z_tsb_cfg2_reg[7] = {`SPC0.mmu.asi.t7_e_z[2], // z_tsb_cfg0[63]
841 mmu_mra1_a25[76:75], // z_tsb_cfg0[62:61]
842 21'b0, // z_tsb_cfg0[60:40]
843 mmu_mra1_a25[74:48], // z_tsb_cfg0[39:13]
844 4'b0, // z_tsb_cfg0[12:9]
845 mmu_mra1_a25[47:39] // z_tsb_cfg0[8:0]
846 };
847assign ctxt_z_tsb_cfg3_reg[7] = {`SPC0.mmu.asi.t7_e_z[3], // z_tsb_cfg0[63]
848 mmu_mra1_a25[37:36], // z_tsb_cfg0[62:61]
849 21'b0, // z_tsb_cfg0[60:40]
850 mmu_mra1_a25[35:9], // z_tsb_cfg0[39:13]
851 4'b0, // z_tsb_cfg0[12:9]
852 mmu_mra1_a25[8:0] // z_tsb_cfg0[8:0]
853 };
854assign ctxt_nz_tsb_cfg0_reg[7] = {`SPC0.mmu.asi.t7_e_nz[0],// z_tsb_cfg0[63]
855 mmu_mra1_a26[76:75], // z_tsb_cfg0[62:61]
856 21'b0, // z_tsb_cfg0[60:40]
857 mmu_mra1_a26[74:48], // z_tsb_cfg0[39:13]
858 4'b0, // z_tsb_cfg0[12:9]
859 mmu_mra1_a26[47:39] // z_tsb_cfg0[8:0]
860 };
861assign ctxt_nz_tsb_cfg1_reg[7] = {`SPC0.mmu.asi.t7_e_nz[1],// z_tsb_cfg0[63]
862 mmu_mra1_a26[37:36], // z_tsb_cfg0[62:61]
863 21'b0, // z_tsb_cfg0[60:40]
864 mmu_mra1_a26[35:9], // z_tsb_cfg0[39:13]
865 4'b0, // z_tsb_cfg0[12:9]
866 mmu_mra1_a26[8:0] // z_tsb_cfg0[8:0]
867 };
868assign ctxt_nz_tsb_cfg2_reg[7] = {`SPC0.mmu.asi.t7_e_nz[2],// z_tsb_cfg0[63]
869 mmu_mra1_a27[76:75], // z_tsb_cfg0[62:61]
870 21'b0, // z_tsb_cfg0[60:40]
871 mmu_mra1_a27[74:48], // z_tsb_cfg0[39:13]
872 4'b0, // z_tsb_cfg0[12:9]
873 mmu_mra1_a27[47:39] // z_tsb_cfg0[8:0]
874 };
875assign ctxt_nz_tsb_cfg3_reg[7] = {`SPC0.mmu.asi.t7_e_nz[3],// z_tsb_cfg0[63]
876 mmu_mra1_a27[37:36], // z_tsb_cfg0[62:61]
877 21'b0, // z_tsb_cfg0[60:40]
878 mmu_mra1_a27[35:9], // z_tsb_cfg0[39:13]
879 4'b0, // z_tsb_cfg0[12:9]
880 mmu_mra1_a27[8:0] // z_tsb_cfg0[8:0]
881 };
882`endif // EMUL - ADD_TSB_CFG
883
884
885// This was the original select_pc_b, the latest select_pc_b qualifies with errors
886// But some of the error checkers need this signal without the qualification
887// of icache errors
888// Suppress instruction on flush or park request
889// (clear_disrupting_flush_pending_w_in & idl_req_in)
890// Suppress instruction for 'refetch' exception after
891// not taken branch with annulled delay slot
892// NOTE: 'with_errors' means that the signal actually IGNORES instruction
893// cache errors and asserts IN SPITE OF instruction cache errors
894wire [7:0] select_pc_b_with_errors =
895 {{4 {~`SPC0.dec_flush_b[1]}}, {4 {~`SPC0.dec_flush_b[0]}}} &
896 {{4 {~`SPC0.tlu.fls1.refetch_w_in}}, {4 {~`SPC0.tlu.fls0.refetch_w_in}}} &
897 {~(`SPC0.tlu.fls1.clear_disrupting_flush_pending_w_in[3:0] &
898 {4 {`SPC0.tlu.fls1.idl_req_in}}),
899 ~(`SPC0.tlu.fls0.clear_disrupting_flush_pending_w_in[3:0] &
900 {4 {`SPC0.tlu.fls0.idl_req_in}})} &
901 {`SPC0.tlu.fls1.tid_dec_valid_b[3:0],
902 `SPC0.tlu.fls0.tid_dec_valid_b[3:0]};
903
904//------------------------------------
905// Qualify select_pc_b_with_errors to get final select_pc_b signal
906// Qualifications are
907// - instruction cache errors (ic_err_w_in)
908// - disrupting single step completion requests (dsc_req_in)
909wire [7:0] select_pc_b =
910 select_pc_b_with_errors[7:0] &
911 {{4 {(~`SPC0.tlu.fls1.ic_err_w_in | `SPC0.tlu.fls1.itlb_nfo_exc_b) &
912 ~`SPC0.tlu.fls1.dsc_req_in}},
913 {4 {(~`SPC0.tlu.fls0.ic_err_w_in | `SPC0.tlu.fls0.itlb_nfo_exc_b) &
914 ~`SPC0.tlu.fls0.dsc_req_in}}};
915
916//------------------------------------
917
918//original select_pc_b_with errors. Select_pc_b_with_errors is no longer asserted
919//if the inst. following an annulled delay slot of a not taken branch has a prebuffer
920//error and it reaches B stage. I still need a signal if this happens to trigger the chkr.
921
922wire [7:0] select_pc_b_with_errors_and_refetch =
923 {{4 {~`SPC0.dec_flush_b[1]}}, {4 {~`SPC0.dec_flush_b[0]}}} &
924 {~(`SPC0.tlu.fls1.clear_disrupting_flush_pending_w_in[3:0] &
925 {4 {`SPC0.tlu.fls1.idl_req_in}}),
926 ~(`SPC0.tlu.fls0.clear_disrupting_flush_pending_w_in[3:0] &
927 {4 {`SPC0.tlu.fls0.idl_req_in}})} &
928 {`SPC0.tlu.fls1.tid_dec_valid_b[3:0],
929 `SPC0.tlu.fls0.tid_dec_valid_b[3:0]};
930
931// Signals required for bench TLB sync & LDST sync
932
933reg tlb_bypass_m;
934reg tlb_bypass_b;
935reg tlb_rd_vld_m;
936reg tlb_rd_vld_b;
937reg lsu_tl_gt_0_b;
938reg [7:0] dcc_asi_b;
939reg asi_internal_w;
940
941always @ (posedge `BENCH_SPC0_GCLK) begin // {
942
943 clkstop_d1 <= `SPC0.tcu_clk_stop;
944 clkstop_d2 <= clkstop_d1;
945 clkstop_d3 <= clkstop_d2;
946 clkstop_d4 <= clkstop_d3;
947 clkstop_d5 <= clkstop_d4;
948
949 tlb_bypass_m <= `SPC0.lsu.tlb.tlb_bypass;
950 tlb_bypass_b <= tlb_bypass_m;
951 tlb_rd_vld_m <= `SPC0.lsu.tlb.tlb_rd_vld | `SPC0.lsu.tlb.tlb_cam_vld;
952 tlb_rd_vld_b <= tlb_rd_vld_m;
953
954 // This signal is only valid for LD/ST instructions
955 lsu_tl_gt_0_b <= `SPC0.lsu.dcc.tl_gt_0_m;
956
957 // Can't use lsu.dcc_asi_b for tlb_sync so pipeline from M to B
958 dcc_asi_b <= `SPC0.lsu.dcc_asi_m;
959
960 // LD/ST that will not issue to the crossbar
961 asi_internal_w <= `SPC0.lsu.dcc.asi_internal_b;
962end // }
963
964// TL determines whether Nucleus or Primary
965wire [7:0] asi_num = `SPC0.lsu.dcc.altspace_ldst_b ?
966 dcc_asi_b :
967 (lsu_tl_gt_0_b ? 8'h04 : 8'h80);
968
969wire [7:0] itlb_miss = { (`SPC0.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
970 `SPC0.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
971 `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
972 (`SPC0.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
973 `SPC0.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
974 `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
975 (`SPC0.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
976 `SPC0.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
977 `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
978 (`SPC0.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
979 `SPC0.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
980 `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
981 (`SPC0.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
982 `SPC0.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
983 `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
984 (`SPC0.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
985 `SPC0.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
986 `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
987 (`SPC0.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
988 `SPC0.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
989 `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
990 (`SPC0.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
991 `SPC0.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
992 `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
993 };
994
995wire [7:0] icache_miss = { (`SPC0.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
996 `SPC0.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
997 `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
998 (`SPC0.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
999 `SPC0.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
1000 `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
1001 (`SPC0.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
1002 `SPC0.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
1003 `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
1004 (`SPC0.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
1005 `SPC0.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
1006 `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
1007 (`SPC0.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
1008 `SPC0.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
1009 `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
1010 (`SPC0.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
1011 `SPC0.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
1012 `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
1013 (`SPC0.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
1014 `SPC0.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
1015 `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
1016 (`SPC0.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
1017 `SPC0.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
1018 `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
1019 };
1020
1021wire inst_bypass = (`SPC0.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[0] |
1022 `SPC0.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[1] |
1023 `SPC0.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[2]);
1024
1025wire [7:0] fetch_bypass = { (inst_bypass & `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
1026 (inst_bypass & `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
1027 (inst_bypass & `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
1028 (inst_bypass & `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
1029 (inst_bypass & `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
1030 (inst_bypass & `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
1031 (inst_bypass & `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
1032 (inst_bypass & `SPC0.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
1033 };
1034
1035wire [7:0] itlb_wr = {(`SPC0.tlu.trl1.take_itw & `SPC0.tlu.trl1.trap[3]),
1036 (`SPC0.tlu.trl1.take_itw & `SPC0.tlu.trl1.trap[2]),
1037 (`SPC0.tlu.trl1.take_itw & `SPC0.tlu.trl1.trap[1]),
1038 (`SPC0.tlu.trl1.take_itw & `SPC0.tlu.trl1.trap[0]),
1039 (`SPC0.tlu.trl0.take_itw & `SPC0.tlu.trl0.trap[3]),
1040 (`SPC0.tlu.trl0.take_itw & `SPC0.tlu.trl0.trap[2]),
1041 (`SPC0.tlu.trl0.take_itw & `SPC0.tlu.trl0.trap[1]),
1042 (`SPC0.tlu.trl0.take_itw & `SPC0.tlu.trl0.trap[0])
1043 };
1044
1045//------------------------------------
1046
1047reg [71:0] tick_cmpr_0;
1048reg [71:0] stick_cmpr_0;
1049reg [71:0] hstick_cmpr_0;
1050reg [151:0] trap_entry_1_t0;
1051reg [151:0] trap_entry_2_t0;
1052reg [151:0] trap_entry_3_t0;
1053reg [151:0] trap_entry_4_t0;
1054reg [151:0] trap_entry_5_t0;
1055reg [151:0] trap_entry_6_t0;
1056
1057always @(posedge `BENCH_SPC0_GCLK) begin // {
1058
1059 // Probes for nas_pipe
1060 tick_cmpr_0 <= `SPC0.tlu.tca.array.mem[{2'b0,3'h0}];
1061 stick_cmpr_0 <= `SPC0.tlu.tca.array.mem[{2'b01,3'h0}];
1062 hstick_cmpr_0 <= `SPC0.tlu.tca.array.mem[{2'b10,3'h0}];
1063 trap_entry_1_t0 <= `SPC0.tlu.tsa0.array.mem[{2'h0, 3'h0}];
1064 trap_entry_2_t0 <= `SPC0.tlu.tsa0.array.mem[{2'h0, 3'h1}];
1065 trap_entry_3_t0 <= `SPC0.tlu.tsa0.array.mem[{2'h0, 3'h2}];
1066 trap_entry_4_t0 <= `SPC0.tlu.tsa0.array.mem[{2'h0, 3'h3}];
1067 trap_entry_5_t0 <= `SPC0.tlu.tsa0.array.mem[{2'h0, 3'h4}];
1068 trap_entry_6_t0 <= `SPC0.tlu.tsa0.array.mem[{2'h0, 3'h5}];
1069
1070end // }
1071reg [71:0] tick_cmpr_1;
1072reg [71:0] stick_cmpr_1;
1073reg [71:0] hstick_cmpr_1;
1074reg [151:0] trap_entry_1_t1;
1075reg [151:0] trap_entry_2_t1;
1076reg [151:0] trap_entry_3_t1;
1077reg [151:0] trap_entry_4_t1;
1078reg [151:0] trap_entry_5_t1;
1079reg [151:0] trap_entry_6_t1;
1080
1081always @(posedge `BENCH_SPC0_GCLK) begin // {
1082
1083 // Probes for nas_pipe
1084 tick_cmpr_1 <= `SPC0.tlu.tca.array.mem[{2'b0,3'h1}];
1085 stick_cmpr_1 <= `SPC0.tlu.tca.array.mem[{2'b01,3'h1}];
1086 hstick_cmpr_1 <= `SPC0.tlu.tca.array.mem[{2'b10,3'h1}];
1087 trap_entry_1_t1 <= `SPC0.tlu.tsa0.array.mem[{2'h1, 3'h0}];
1088 trap_entry_2_t1 <= `SPC0.tlu.tsa0.array.mem[{2'h1, 3'h1}];
1089 trap_entry_3_t1 <= `SPC0.tlu.tsa0.array.mem[{2'h1, 3'h2}];
1090 trap_entry_4_t1 <= `SPC0.tlu.tsa0.array.mem[{2'h1, 3'h3}];
1091 trap_entry_5_t1 <= `SPC0.tlu.tsa0.array.mem[{2'h1, 3'h4}];
1092 trap_entry_6_t1 <= `SPC0.tlu.tsa0.array.mem[{2'h1, 3'h5}];
1093
1094end // }
1095reg [71:0] tick_cmpr_2;
1096reg [71:0] stick_cmpr_2;
1097reg [71:0] hstick_cmpr_2;
1098reg [151:0] trap_entry_1_t2;
1099reg [151:0] trap_entry_2_t2;
1100reg [151:0] trap_entry_3_t2;
1101reg [151:0] trap_entry_4_t2;
1102reg [151:0] trap_entry_5_t2;
1103reg [151:0] trap_entry_6_t2;
1104
1105always @(posedge `BENCH_SPC0_GCLK) begin // {
1106
1107 // Probes for nas_pipe
1108 tick_cmpr_2 <= `SPC0.tlu.tca.array.mem[{2'b0,3'h2}];
1109 stick_cmpr_2 <= `SPC0.tlu.tca.array.mem[{2'b01,3'h2}];
1110 hstick_cmpr_2 <= `SPC0.tlu.tca.array.mem[{2'b10,3'h2}];
1111 trap_entry_1_t2 <= `SPC0.tlu.tsa0.array.mem[{2'h2, 3'h0}];
1112 trap_entry_2_t2 <= `SPC0.tlu.tsa0.array.mem[{2'h2, 3'h1}];
1113 trap_entry_3_t2 <= `SPC0.tlu.tsa0.array.mem[{2'h2, 3'h2}];
1114 trap_entry_4_t2 <= `SPC0.tlu.tsa0.array.mem[{2'h2, 3'h3}];
1115 trap_entry_5_t2 <= `SPC0.tlu.tsa0.array.mem[{2'h2, 3'h4}];
1116 trap_entry_6_t2 <= `SPC0.tlu.tsa0.array.mem[{2'h2, 3'h5}];
1117
1118end // }
1119reg [71:0] tick_cmpr_3;
1120reg [71:0] stick_cmpr_3;
1121reg [71:0] hstick_cmpr_3;
1122reg [151:0] trap_entry_1_t3;
1123reg [151:0] trap_entry_2_t3;
1124reg [151:0] trap_entry_3_t3;
1125reg [151:0] trap_entry_4_t3;
1126reg [151:0] trap_entry_5_t3;
1127reg [151:0] trap_entry_6_t3;
1128
1129always @(posedge `BENCH_SPC0_GCLK) begin // {
1130
1131 // Probes for nas_pipe
1132 tick_cmpr_3 <= `SPC0.tlu.tca.array.mem[{2'b0,3'h3}];
1133 stick_cmpr_3 <= `SPC0.tlu.tca.array.mem[{2'b01,3'h3}];
1134 hstick_cmpr_3 <= `SPC0.tlu.tca.array.mem[{2'b10,3'h3}];
1135 trap_entry_1_t3 <= `SPC0.tlu.tsa0.array.mem[{2'h3, 3'h0}];
1136 trap_entry_2_t3 <= `SPC0.tlu.tsa0.array.mem[{2'h3, 3'h1}];
1137 trap_entry_3_t3 <= `SPC0.tlu.tsa0.array.mem[{2'h3, 3'h2}];
1138 trap_entry_4_t3 <= `SPC0.tlu.tsa0.array.mem[{2'h3, 3'h3}];
1139 trap_entry_5_t3 <= `SPC0.tlu.tsa0.array.mem[{2'h3, 3'h4}];
1140 trap_entry_6_t3 <= `SPC0.tlu.tsa0.array.mem[{2'h3, 3'h5}];
1141
1142end // }
1143reg [71:0] tick_cmpr_4;
1144reg [71:0] stick_cmpr_4;
1145reg [71:0] hstick_cmpr_4;
1146reg [151:0] trap_entry_1_t4;
1147reg [151:0] trap_entry_2_t4;
1148reg [151:0] trap_entry_3_t4;
1149reg [151:0] trap_entry_4_t4;
1150reg [151:0] trap_entry_5_t4;
1151reg [151:0] trap_entry_6_t4;
1152
1153always @(posedge `BENCH_SPC0_GCLK) begin // {
1154
1155 // Probes for nas_pipe
1156 tick_cmpr_4 <= `SPC0.tlu.tca.array.mem[{2'b0,3'h4}];
1157 stick_cmpr_4 <= `SPC0.tlu.tca.array.mem[{2'b01,3'h4}];
1158 hstick_cmpr_4 <= `SPC0.tlu.tca.array.mem[{2'b10,3'h4}];
1159 trap_entry_1_t4 <= `SPC0.tlu.tsa1.array.mem[{2'h0, 3'h0}];
1160 trap_entry_2_t4 <= `SPC0.tlu.tsa1.array.mem[{2'h0, 3'h1}];
1161 trap_entry_3_t4 <= `SPC0.tlu.tsa1.array.mem[{2'h0, 3'h2}];
1162 trap_entry_4_t4 <= `SPC0.tlu.tsa1.array.mem[{2'h0, 3'h3}];
1163 trap_entry_5_t4 <= `SPC0.tlu.tsa1.array.mem[{2'h0, 3'h4}];
1164 trap_entry_6_t4 <= `SPC0.tlu.tsa1.array.mem[{2'h0, 3'h5}];
1165
1166end // }
1167reg [71:0] tick_cmpr_5;
1168reg [71:0] stick_cmpr_5;
1169reg [71:0] hstick_cmpr_5;
1170reg [151:0] trap_entry_1_t5;
1171reg [151:0] trap_entry_2_t5;
1172reg [151:0] trap_entry_3_t5;
1173reg [151:0] trap_entry_4_t5;
1174reg [151:0] trap_entry_5_t5;
1175reg [151:0] trap_entry_6_t5;
1176
1177always @(posedge `BENCH_SPC0_GCLK) begin // {
1178
1179 // Probes for nas_pipe
1180 tick_cmpr_5 <= `SPC0.tlu.tca.array.mem[{2'b0,3'h5}];
1181 stick_cmpr_5 <= `SPC0.tlu.tca.array.mem[{2'b01,3'h5}];
1182 hstick_cmpr_5 <= `SPC0.tlu.tca.array.mem[{2'b10,3'h5}];
1183 trap_entry_1_t5 <= `SPC0.tlu.tsa1.array.mem[{2'h1, 3'h0}];
1184 trap_entry_2_t5 <= `SPC0.tlu.tsa1.array.mem[{2'h1, 3'h1}];
1185 trap_entry_3_t5 <= `SPC0.tlu.tsa1.array.mem[{2'h1, 3'h2}];
1186 trap_entry_4_t5 <= `SPC0.tlu.tsa1.array.mem[{2'h1, 3'h3}];
1187 trap_entry_5_t5 <= `SPC0.tlu.tsa1.array.mem[{2'h1, 3'h4}];
1188 trap_entry_6_t5 <= `SPC0.tlu.tsa1.array.mem[{2'h1, 3'h5}];
1189
1190end // }
1191reg [71:0] tick_cmpr_6;
1192reg [71:0] stick_cmpr_6;
1193reg [71:0] hstick_cmpr_6;
1194reg [151:0] trap_entry_1_t6;
1195reg [151:0] trap_entry_2_t6;
1196reg [151:0] trap_entry_3_t6;
1197reg [151:0] trap_entry_4_t6;
1198reg [151:0] trap_entry_5_t6;
1199reg [151:0] trap_entry_6_t6;
1200
1201always @(posedge `BENCH_SPC0_GCLK) begin // {
1202
1203 // Probes for nas_pipe
1204 tick_cmpr_6 <= `SPC0.tlu.tca.array.mem[{2'b0,3'h6}];
1205 stick_cmpr_6 <= `SPC0.tlu.tca.array.mem[{2'b01,3'h6}];
1206 hstick_cmpr_6 <= `SPC0.tlu.tca.array.mem[{2'b10,3'h6}];
1207 trap_entry_1_t6 <= `SPC0.tlu.tsa1.array.mem[{2'h2, 3'h0}];
1208 trap_entry_2_t6 <= `SPC0.tlu.tsa1.array.mem[{2'h2, 3'h1}];
1209 trap_entry_3_t6 <= `SPC0.tlu.tsa1.array.mem[{2'h2, 3'h2}];
1210 trap_entry_4_t6 <= `SPC0.tlu.tsa1.array.mem[{2'h2, 3'h3}];
1211 trap_entry_5_t6 <= `SPC0.tlu.tsa1.array.mem[{2'h2, 3'h4}];
1212 trap_entry_6_t6 <= `SPC0.tlu.tsa1.array.mem[{2'h2, 3'h5}];
1213
1214end // }
1215reg [71:0] tick_cmpr_7;
1216reg [71:0] stick_cmpr_7;
1217reg [71:0] hstick_cmpr_7;
1218reg [151:0] trap_entry_1_t7;
1219reg [151:0] trap_entry_2_t7;
1220reg [151:0] trap_entry_3_t7;
1221reg [151:0] trap_entry_4_t7;
1222reg [151:0] trap_entry_5_t7;
1223reg [151:0] trap_entry_6_t7;
1224
1225always @(posedge `BENCH_SPC0_GCLK) begin // {
1226
1227 // Probes for nas_pipe
1228 tick_cmpr_7 <= `SPC0.tlu.tca.array.mem[{2'b0,3'h7}];
1229 stick_cmpr_7 <= `SPC0.tlu.tca.array.mem[{2'b01,3'h7}];
1230 hstick_cmpr_7 <= `SPC0.tlu.tca.array.mem[{2'b10,3'h7}];
1231 trap_entry_1_t7 <= `SPC0.tlu.tsa1.array.mem[{2'h3, 3'h0}];
1232 trap_entry_2_t7 <= `SPC0.tlu.tsa1.array.mem[{2'h3, 3'h1}];
1233 trap_entry_3_t7 <= `SPC0.tlu.tsa1.array.mem[{2'h3, 3'h2}];
1234 trap_entry_4_t7 <= `SPC0.tlu.tsa1.array.mem[{2'h3, 3'h3}];
1235 trap_entry_5_t7 <= `SPC0.tlu.tsa1.array.mem[{2'h3, 3'h4}];
1236 trap_entry_6_t7 <= `SPC0.tlu.tsa1.array.mem[{2'h3, 3'h5}];
1237
1238end // }
1239
1240//------------------------------------
1241// ASI & Trap State machines
1242always @(posedge `BENCH_SPC0_GCLK) begin // {
1243
1244// pc_0_e[47:0] <= `SPC0.ifu_pc_d0[47:0];
1245// pc_1_e[47:0] <= `SPC0.ifu_pc_d1[47:0];
1246 pc_0_e[47:0] <= {`SPC0.tlu_pc_0_d[47:2], 2'b00};
1247 pc_1_e[47:0] <= {`SPC0.tlu_pc_1_d[47:2], 2'b00};
1248 pc_0_m[47:0] <= pc_0_e[47:0];
1249 pc_1_m[47:0] <= pc_1_e[47:0];
1250 pc_0_b[47:0] <= pc_0_m[47:0];
1251 pc_1_b[47:0] <= pc_1_m[47:0];
1252 pc_0_w[47:0] <= ({48 { select_pc_b[0]}} & pc_0_b[47:0]) |
1253 ({48 {~select_pc_b[0]}} & pc_0_w[47:0]) ;
1254 pc_1_w[47:0] <= ({48 { select_pc_b[1]}} & pc_0_b[47:0]) |
1255 ({48 {~select_pc_b[1]}} & pc_1_w[47:0]) ;
1256 pc_2_w[47:0] <= ({48 { select_pc_b[2]}} & pc_0_b[47:0]) |
1257 ({48 {~select_pc_b[2]}} & pc_2_w[47:0]) ;
1258 pc_3_w[47:0] <= ({48 { select_pc_b[3]}} & pc_0_b[47:0]) |
1259 ({48 {~select_pc_b[3]}} & pc_3_w[47:0]) ;
1260 pc_4_w[47:0] <= ({48 { select_pc_b[4]}} & pc_1_b[47:0]) |
1261 ({48 {~select_pc_b[4]}} & pc_4_w[47:0]) ;
1262 pc_5_w[47:0] <= ({48 { select_pc_b[5]}} & pc_1_b[47:0]) |
1263 ({48 {~select_pc_b[5]}} & pc_5_w[47:0]) ;
1264 pc_6_w[47:0] <= ({48 { select_pc_b[6]}} & pc_1_b[47:0]) |
1265 ({48 {~select_pc_b[6]}} & pc_6_w[47:0]) ;
1266 pc_7_w[47:0] <= ({48 { select_pc_b[7]}} & pc_1_b[47:0]) |
1267 ({48 {~select_pc_b[7]}} & pc_7_w[47:0]) ;
1268
1269
1270 // altspace_ldst_m is asserted for asi accesses that don't change arch state
1271 asi_store_b <= (`SPC0.lsu.dcc.asi_store_m & `SPC0.lsu.dcc.asi_sync_m);
1272 asi_store_w <= asi_store_b;
1273 dcc_tid_b <= `SPC0.lsu.dcc.dcc_tid_m;
1274 dcc_tid_w <= dcc_tid_b;
1275
1276 // ASI in progress state m/c
1277 if (asi_store_w & ~asi_store_flush_w[dcc_tid_w]) begin // {
1278 asi_in_progress_b[dcc_tid_w] <= 1'b1;
1279 end // }
1280
1281 asi_valid_w <= asi_in_progress_b & store_sync;
1282
1283 // Delay asi_valid_w and asi_in_progress
1284 // 2 clocks to ensure TLB Sync DTLBWRITE (demap) comes before SSTEP stxa
1285 asi_valid_fx4 <= asi_valid_w;
1286 asi_valid_fx5 <= asi_valid_fx4;
1287 asi_in_progress_w <= asi_in_progress_b;
1288 asi_in_progress_fx4 <= asi_in_progress_w;
1289 sync_reset_w <= sync_reset;
1290
1291 for (i=0;i<8;i=i+1) begin // {
1292 if (asi_valid_w[i] | sync_reset_w[i]) begin // {
1293 asi_in_progress_b[i] <= 1'b0;
1294 end//}
1295 end //}
1296
1297 // Trap0 pipeline [valid W stage]
1298
1299 for (i=0;i<4;i=i+1) begin // {
1300 // Done & Retry
1301 if ((`SPC0.tlu.tlu_trap_0_tid[1:0] == i) &&
1302 `SPC0.tlu.tlu_trap_pc_0_valid & tlu_ccr_cwp_0_valid_last)
1303 begin //{
1304 tlu_valid[i] <= 1'b1;
1305 end //}
1306 // Trap taken
1307 else if (`SPC0.tlu.trl0.real_trap[i] & ~`SPC0.tlu.trl0.take_por) begin // {
1308 tlu_valid[i] <= 1'b1;
1309 end //}
1310 else
1311 tlu_valid[i] <= 1'b0;
1312 end //}
1313
1314 // Trap1 pipeline [valid W stage]
1315
1316 for (i=0;i<4;i=i+1) begin // {
1317 // Done & Retry
1318 if ((`SPC0.tlu.tlu_trap_1_tid[1:0] == i) &&
1319 `SPC0.tlu.tlu_trap_pc_1_valid & tlu_ccr_cwp_1_valid_last)
1320 begin //{
1321 tlu_valid[i+4] <= 1'b1;
1322 end //}
1323 // Trap taken
1324 else if (`SPC0.tlu.trl1.real_trap[i] & ~`SPC0.tlu.trl1.take_por) begin // {
1325 tlu_valid[i+4] <= 1'b1;
1326 end //}
1327 else
1328 tlu_valid[i+4] <= 1'b0;
1329 end //}
1330
1331end // }
1332
1333
1334always @(posedge `BENCH_SPC0_GCLK) begin
1335
1336// debug code for TPCC analysis
1337`ifdef TPCC
1338if (pcx_req==1) begin
1339 if (`SPC0.spc_pcx_data_pa[129:124]==6'b100000) begin // l15 dmiss
1340 l15dmiss_cnt=l15dmiss_cnt+1;
1341 $display("dmissl15 cnt is %0d",l15dmiss_cnt);
1342 end
1343 if (`SPC0.spc_pcx_data_pa[129:124]==6'b110000) begin // l15 imiss
1344 l15imiss_cnt=l15imiss_cnt+1;
1345 $display("imissl15 cnt is %0d",l15imiss_cnt);
1346 end
1347 // `TOP.spg.spc_pcx_data_pa[129:124]==6'b100001 -> all stores
1348end
1349
1350pcx_req <= |`SPC0.spc_pcx_req_pq[8:0];
1351
1352if (`SPC0.ifu_l15_valid==1) begin
1353 imiss_cnt=imiss_cnt+1;
1354 $display("imiss cnt is %0d",imiss_cnt);
1355end
1356if (spec_dmiss==1 && `SPC0.lsu_l15_cancel==0) begin
1357 dmiss_cnt=dmiss_cnt+1;
1358 $display("dmiss cnt is %0d",dmiss_cnt);
1359
1360end
1361spec_dmiss <= `SPC0.lsu_l15_valid & `SPC0.lsu_l15_load;
1362
1363clock = clock+1;
1364
1365// keep track of imiss latencies
1366if (`SPC0.ftu_agc_thr0_cmiss_c==1) begin
1367 start_imiss0=clock;
1368 active_imiss0=1;
1369end
1370if (active_imiss0==1 && first_imiss0==1 && `SPC0.l15_spc_cpkt[8:6]==3'b000 && `SPC0.l15_spc_valid==1 && `SPC0.l15_spc_cpkt[17:14]==4'b0001) begin
1371 sum_imiss_latency = sum_imiss_latency + clock - start_imiss0 + 1;
1372 number_imiss = number_imiss + 1;
1373 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
1374 active_imiss0=0;
1375 first_imiss0=0;
1376end
1377if (active_imiss0==1 && first_imiss0==0 && `SPC0.l15_spc_cpkt[8:6]==3'b000 && `SPC0.l15_spc_valid==1 && `SPC0.l15_spc_cpkt[17:14]==4'b0001) begin
1378 first_imiss0=1;
1379end
1380if (`SPC0.ftu_agc_thr1_cmiss_c==1) begin
1381 start_imiss1=clock;
1382 active_imiss1=1;
1383end
1384if (active_imiss1==1 && first_imiss1==1 && `SPC0.l15_spc_cpkt[8:6]==3'b001 && `SPC0.l15_spc_valid==1 && `SPC0.l15_spc_cpkt[17:14]==4'b0001) begin
1385 sum_imiss_latency = sum_imiss_latency + clock - start_imiss1 + 1;
1386 number_imiss = number_imiss + 1;
1387 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
1388 active_imiss1=0;
1389 first_imiss1=0;
1390end
1391if (active_imiss1==1 && first_imiss1==0 && `SPC0.l15_spc_cpkt[8:6]==3'b001 && `SPC0.l15_spc_valid==1 && `SPC0.l15_spc_cpkt[17:14]==4'b0001) begin
1392 first_imiss1=1;
1393end
1394if (`SPC0.ftu_agc_thr2_cmiss_c==1) begin
1395 start_imiss2=clock;
1396 active_imiss2=1;
1397end
1398if (active_imiss2==1 && first_imiss2==1 && `SPC0.l15_spc_cpkt[8:6]==3'b010 && `SPC0.l15_spc_valid==1 && `SPC0.l15_spc_cpkt[17:14]==4'b0001) begin
1399 sum_imiss_latency = sum_imiss_latency + clock - start_imiss2 + 1;
1400 number_imiss = number_imiss + 1;
1401 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
1402 active_imiss2=0;
1403 first_imiss2=0;
1404end
1405if (active_imiss2==1 && first_imiss2==0 && `SPC0.l15_spc_cpkt[8:6]==3'b010 && `SPC0.l15_spc_valid==1 && `SPC0.l15_spc_cpkt[17:14]==4'b0001) begin
1406 first_imiss2=1;
1407end
1408if (`SPC0.ftu_agc_thr3_cmiss_c==1) begin
1409 start_imiss3=clock;
1410 active_imiss3=1;
1411end
1412if (active_imiss3==1 && first_imiss3==1 && `SPC0.l15_spc_cpkt[8:6]==3'b011 && `SPC0.l15_spc_valid==1 && `SPC0.l15_spc_cpkt[17:14]==4'b0001) begin
1413 sum_imiss_latency = sum_imiss_latency + clock - start_imiss3 + 1;
1414 number_imiss = number_imiss + 1;
1415 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
1416 active_imiss3=0;
1417 first_imiss3=0;
1418end
1419if (active_imiss3==1 && first_imiss3==0 && `SPC0.l15_spc_cpkt[8:6]==3'b011 && `SPC0.l15_spc_valid==1 && `SPC0.l15_spc_cpkt[17:14]==4'b0001) begin
1420 first_imiss3=1;
1421end
1422if (`SPC0.ftu_agc_thr4_cmiss_c==1) begin
1423 start_imiss4=clock;
1424 active_imiss4=1;
1425end
1426if (active_imiss4==1 && first_imiss4==1 && `SPC0.l15_spc_cpkt[8:6]==3'b100 && `SPC0.l15_spc_valid==1 && `SPC0.l15_spc_cpkt[17:14]==4'b0001) begin
1427 sum_imiss_latency = sum_imiss_latency + clock - start_imiss4 + 1;
1428 number_imiss = number_imiss + 1;
1429 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
1430 active_imiss4=0;
1431 first_imiss4=0;
1432end
1433if (active_imiss4==1 && first_imiss4==0 && `SPC0.l15_spc_cpkt[8:6]==3'b100 && `SPC0.l15_spc_valid==1 && `SPC0.l15_spc_cpkt[17:14]==4'b0001) begin
1434 first_imiss4=1;
1435end
1436if (`SPC0.ftu_agc_thr5_cmiss_c==1) begin
1437 start_imiss5=clock;
1438 active_imiss5=1;
1439end
1440if (active_imiss5==1 && first_imiss5==1 && `SPC0.l15_spc_cpkt[8:6]==3'b101 && `SPC0.l15_spc_valid==1 && `SPC0.l15_spc_cpkt[17:14]==4'b0001) begin
1441 sum_imiss_latency = sum_imiss_latency + clock - start_imiss5 + 1;
1442 number_imiss = number_imiss + 1;
1443 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
1444 active_imiss5=0;
1445 first_imiss5=0;
1446end
1447if (active_imiss5==1 && first_imiss5==0 && `SPC0.l15_spc_cpkt[8:6]==3'b101 && `SPC0.l15_spc_valid==1 && `SPC0.l15_spc_cpkt[17:14]==4'b0001) begin
1448 first_imiss5=1;
1449end
1450if (`SPC0.ftu_agc_thr6_cmiss_c==1) begin
1451 start_imiss6=clock;
1452 active_imiss6=1;
1453end
1454if (active_imiss6==1 && first_imiss6==1 && `SPC0.l15_spc_cpkt[8:6]==3'b110 && `SPC0.l15_spc_valid==1 && `SPC0.l15_spc_cpkt[17:14]==4'b0001) begin
1455 sum_imiss_latency = sum_imiss_latency + clock - start_imiss6 + 1;
1456 number_imiss = number_imiss + 1;
1457 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
1458 active_imiss6=0;
1459 first_imiss6=0;
1460end
1461if (active_imiss6==1 && first_imiss6==0 && `SPC0.l15_spc_cpkt[8:6]==3'b110 && `SPC0.l15_spc_valid==1 && `SPC0.l15_spc_cpkt[17:14]==4'b0001) begin
1462 first_imiss6=1;
1463end
1464if (`SPC0.ftu_agc_thr7_cmiss_c==1) begin
1465 start_imiss7=clock;
1466 active_imiss7=1;
1467end
1468if (active_imiss7==1 && first_imiss7==1 && `SPC0.l15_spc_cpkt[8:6]==3'b111 && `SPC0.l15_spc_valid==1 && `SPC0.l15_spc_cpkt[17:14]==4'b0001) begin
1469 sum_imiss_latency = sum_imiss_latency + clock - start_imiss7 + 1;
1470 number_imiss = number_imiss + 1;
1471 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
1472 active_imiss7=0;
1473 first_imiss7=0;
1474end
1475if (active_imiss7==1 && first_imiss7==0 && `SPC0.l15_spc_cpkt[8:6]==3'b111 && `SPC0.l15_spc_valid==1 && `SPC0.l15_spc_cpkt[17:14]==4'b0001) begin
1476 first_imiss7=1;
1477end
1478
1479if (`SPC0.pku.swl0.set_lsu_sync_wait==1) begin
1480 start_dmiss0=clock;
1481end
1482if (`SPC0.pku.swl0.clear_lsu_sync_wait==1) begin
1483 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss0) + 3;
1484 number_dmiss = number_dmiss + 1;
1485 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
1486end
1487if (`SPC0.pku.swl1.set_lsu_sync_wait==1) begin
1488 start_dmiss1=clock;
1489end
1490if (`SPC0.pku.swl1.clear_lsu_sync_wait==1) begin
1491 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss1) + 3;
1492 number_dmiss = number_dmiss + 1;
1493 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
1494end
1495if (`SPC0.pku.swl2.set_lsu_sync_wait==1) begin
1496 start_dmiss2=clock;
1497end
1498if (`SPC0.pku.swl2.clear_lsu_sync_wait==1) begin
1499 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss2) + 3;
1500 number_dmiss = number_dmiss + 1;
1501 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
1502end
1503if (`SPC0.pku.swl3.set_lsu_sync_wait==1) begin
1504 start_dmiss3=clock;
1505end
1506if (`SPC0.pku.swl3.clear_lsu_sync_wait==1) begin
1507 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss3) + 3;
1508 number_dmiss = number_dmiss + 1;
1509 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
1510end
1511if (`SPC0.pku.swl4.set_lsu_sync_wait==1) begin
1512 start_dmiss4=clock;
1513end
1514if (`SPC0.pku.swl4.clear_lsu_sync_wait==1) begin
1515 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss4) + 3;
1516 number_dmiss = number_dmiss + 1;
1517 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
1518end
1519if (`SPC0.pku.swl5.set_lsu_sync_wait==1) begin
1520 start_dmiss5=clock;
1521end
1522if (`SPC0.pku.swl5.clear_lsu_sync_wait==1) begin
1523 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss5) + 3;
1524 number_dmiss = number_dmiss + 1;
1525 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
1526end
1527if (`SPC0.pku.swl6.set_lsu_sync_wait==1) begin
1528 start_dmiss6=clock;
1529end
1530if (`SPC0.pku.swl6.clear_lsu_sync_wait==1) begin
1531 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss6) + 3;
1532 number_dmiss = number_dmiss + 1;
1533 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
1534end
1535if (`SPC0.pku.swl7.set_lsu_sync_wait==1) begin
1536 start_dmiss7=clock;
1537end
1538if (`SPC0.pku.swl7.clear_lsu_sync_wait==1) begin
1539 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss7) + 3;
1540 number_dmiss = number_dmiss + 1;
1541 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
1542end
1543`endif
1544
1545
1546
1547 lsu_tid_e[2:0] <= `SPC0.lsu.dcc.tid_d[2:0];
1548
1549 // FG Valid conditions
1550
1551 // Add fcc valids to fg_valid
1552 fcc_valid_fb <= fcc_valid_f5;
1553 fcc_valid_f5 <= fcc_valid_f4;
1554 fcc_valid_f4 <= |`SPC0.fgu.fgu_cmp_fcc_vld_fx3[3:0];
1555
1556 fg_flush_fb <= fg_flush_f5;
1557 fg_flush_f5 <= fg_flush_f4;
1558 fg_flush_f4 <= fg_flush_f3;
1559 fg_flush_f3 <= fg_flush_f2 | `SPC0.dec_flush_f2 |
1560 `SPC0.tlu_flush_fgu_b;
1561 fg_flush_f2 <= `SPC0.dec_flush_f1;
1562
1563 fgu_err_fx3 <= `SPC0.fgu_cecc_fx2 | `SPC0.fgu_uecc_fx2 | `SPC0.fgu.fpc.exu_flush_fx2; // frf or irf ecc error
1564 fgu_err_fx4 <= fgu_err_fx3;
1565 fgu_err_fx5 <= fgu_err_fx4;
1566 fgu_err_fb <= fgu_err_fx5;
1567
1568 // Siams cause fg_valid ..
1569 siam0_d = `SPC0.dec.dec_inst0_d[31:30]==2'b10 &
1570 `SPC0.dec.dec_inst0_d[24:19]==6'b110110 &
1571 `SPC0.dec.dec_inst0_d[13:5]==9'b010000001;
1572
1573 siam1_d = `SPC0.dec.dec_inst1_d[31:30]==2'b10 &
1574 `SPC0.dec.dec_inst1_d[24:19]==6'b110110 &
1575 `SPC0.dec.dec_inst1_d[13:5]==9'b010000001;
1576
1577
1578 done0_d = `SPC0.dec.dec_inst0_d[31:30]==2'b10 &
1579 `SPC0.dec.dec_inst0_d[29:25]==5'b00000 &
1580 `SPC0.dec.dec_inst0_d[24:19]==6'b111110;
1581 done1_d = `SPC0.dec.dec_inst1_d[31:30]==2'b10 &
1582 `SPC0.dec.dec_inst1_d[29:25]==5'b00000 &
1583 `SPC0.dec.dec_inst1_d[24:19]==6'b111110;
1584
1585 retry0_d = `SPC0.dec.dec_inst0_d[31:30]==2'b10 &
1586 `SPC0.dec.dec_inst0_d[29:25]==5'b00001 &
1587 `SPC0.dec.dec_inst0_d[24:19]==6'b111110;
1588 retry1_d = `SPC0.dec.dec_inst1_d[31:30]==2'b10 &
1589 `SPC0.dec.dec_inst1_d[29:25]==5'b00001 &
1590 `SPC0.dec.dec_inst1_d[24:19]==6'b111110;
1591
1592 done0_e <= done0_d & `SPC0.dec.dec_decode0_d;
1593 done1_e <= done1_d & `SPC0.dec.dec_decode1_d;
1594
1595 retry0_e <= retry0_d & `SPC0.dec.dec_decode0_d;
1596 retry1_e <= retry1_d & `SPC0.dec.dec_decode1_d;
1597
1598
1599 // fold siam into cmov logic
1600
1601 fmov_valid_fb <= fmov_valid_f5;
1602 fmov_valid_f5 <= fmov_valid_f4;
1603 fmov_valid_f4 <= fmov_valid_f3;
1604 fmov_valid_f3 <= fmov_valid_f2;
1605 fmov_valid_f2 <= fmov_valid_m;
1606 fmov_valid_m <= fmov_valid_e & `SPC0.dec.dec_fgu_valid_e;
1607 fmov_valid_e <= ((`SPC0.exu0.ect.cmov_d | siam0_d) &
1608 `SPC0.dec.dec_decode0_d&`SPC0.dec.del.fgu0_d) |
1609 ((`SPC0.exu1.ect.cmov_d | siam1_d) &
1610 `SPC0.dec.dec_decode1_d&`SPC0.dec.del.fgu1_d);
1611
1612 // fgu check bus
1613
1614 // fcc_valid_fb doesn't assert for LDFSR. LDFSR gets checked by the LSU
1615 // checker
1616
1617 fg_valid <= {(`SPC0.fgu.fac.fac_w1_tid_fb[2:0]==3'h7) && fg_cond_fb,
1618 (`SPC0.fgu.fac.fac_w1_tid_fb[2:0]==3'h6) && fg_cond_fb,
1619 (`SPC0.fgu.fac.fac_w1_tid_fb[2:0]==3'h5) && fg_cond_fb,
1620 (`SPC0.fgu.fac.fac_w1_tid_fb[2:0]==3'h4) && fg_cond_fb,
1621 (`SPC0.fgu.fac.fac_w1_tid_fb[2:0]==3'h3) && fg_cond_fb,
1622 (`SPC0.fgu.fac.fac_w1_tid_fb[2:0]==3'h2) && fg_cond_fb,
1623 (`SPC0.fgu.fac.fac_w1_tid_fb[2:0]==3'h1) && fg_cond_fb,
1624 (`SPC0.fgu.fac.fac_w1_tid_fb[2:0]==3'h0) && fg_cond_fb };
1625
1626
1627 fgu_valid_fb0 <= `SPC0.fgu_exu_w_vld_fx5[0] && !`SPC0.fgu.fpc.div_finish_int_fb;
1628 fgu_valid_fb1 <= `SPC0.fgu_exu_w_vld_fx5[1] && !`SPC0.fgu.fpc.div_finish_int_fb;
1629
1630 // Fdiv
1631 div_special_cancel_f4[7:0] <= tid2onehot(`SPC0.fgu.fac.tid_fx3[2:0]) &
1632 {8{`SPC0.fgu.fac.q_div_default_res_fx3}};
1633 fg_fdiv_valid_fw <= `SPC0.fgu_divide_completion & ~div_special_cancel_f4 &
1634 {8{~`SPC0.fgu.fpc.fpc_fpd_ieee_trap_fb}} &
1635 {8{~`SPC0.fgu.fpc.fpc_fpd_unfin_fb}};
1636
1637
1638 // Used in CCX Stub ?
1639 inst0_e[31:0] <= `SPC0.dec.dec_inst0_d[31:0];
1640 inst1_e[31:0] <= `SPC0.dec.dec_inst1_d[31:0];
1641
1642 // only fgu ops that are not loads/stores
1643 fgu0_e <= `SPC0.dec.del.decode_fgu0_d;
1644 fgu1_e <= `SPC0.dec.del.decode_fgu1_d;
1645
1646 // LSU logic
1647 load_b <= load_m;
1648 load_m <= (load0_e | load1_e);
1649
1650 load0_e <= (`SPC0.dec.dec_decode0_d & `SPC0.dec.del.lsu0_d &
1651 `SPC0.dec.dcd0.dcd_load_d);
1652
1653 load1_e <= (`SPC0.dec.dec_decode1_d & `SPC0.dec.del.lsu1_d &
1654 `SPC0.dec.dcd1.dcd_load_d);
1655
1656 lsu_tid_b[2:0] <= lsu_tid_m[2:0];
1657 lsu_tid_m[2:0] <= lsu_tid_e[2:0];
1658
1659 lsu_complete_m[7:0] <= `SPC0.lsu_complete[7:0];
1660 lsu_complete_b[7:0] <= lsu_complete_m[7:0];
1661
1662 lsu_data_w <= lsu_data_b;
1663
1664 // Divide destination logic ..
1665 sel_divide0_e <= (`SPC0.dec_decode0_d &
1666 ((`SPC0.pku.swl0.vld_d & `SPC0.pku.swl_divide_wait[0]) |
1667 (`SPC0.pku.swl1.vld_d & `SPC0.pku.swl_divide_wait[1]) |
1668 (`SPC0.pku.swl2.vld_d & `SPC0.pku.swl_divide_wait[2]) |
1669 (`SPC0.pku.swl3.vld_d & `SPC0.pku.swl_divide_wait[3])));
1670 sel_divide1_e <= (`SPC0.dec_decode1_d &
1671 ((`SPC0.pku.swl4.vld_d & `SPC0.pku.swl_divide_wait[4]) |
1672 (`SPC0.pku.swl5.vld_d & `SPC0.pku.swl_divide_wait[5]) |
1673 (`SPC0.pku.swl6.vld_d & `SPC0.pku.swl_divide_wait[6]) |
1674 (`SPC0.pku.swl7.vld_d & `SPC0.pku.swl_divide_wait[7])));
1675
1676
1677 dcd_fdest_e <= {`SPC0.dec.del.fdest1_d,`SPC0.dec.del.fdest0_d};
1678 dcd_idest_e <= {`SPC0.dec.del.idest1_d,`SPC0.dec.del.idest0_d};
1679
1680 if (sel_divide0_e) begin // {
1681 div_idest[{1'b0, `SPC0.dec.del.tid0_e[1:0]}] <= dcd_idest_e[0];
1682 div_fdest[{1'b0, `SPC0.dec.del.tid0_e[1:0]}] <= dcd_fdest_e[0];
1683 end // }
1684 if (sel_divide1_e) begin // {
1685 div_idest[{1'b1, `SPC0.dec.del.tid1_e[1:0]}] <= dcd_idest_e[1];
1686 div_fdest[{1'b1, `SPC0.dec.del.tid1_e[1:0]}] <= dcd_fdest_e[1];
1687 end // }
1688
1689
1690 // EX logic
1691 // Save EX tids for later use
1692 ex0_tid_m <= ex0_tid_e;
1693 ex1_tid_m <= ex1_tid_e;
1694 ex0_tid_b <= ex0_tid_m;
1695 ex1_tid_b <= ex1_tid_m;
1696 ex0_tid_w <= ex0_tid_b;
1697 ex1_tid_w <= ex1_tid_b;
1698
1699 // EX Flush conditions
1700 ex_flush_w <= {ex_flush_b | {{4{(`SPC0.dec.dec_flush_b[1] |
1701 `SPC0.tlu_flush_exu_b[1])}},
1702 {4{(`SPC0.dec.dec_flush_b[0] |
1703 `SPC0.tlu_flush_exu_b[0])}}}};
1704
1705 ex_flush_b <= {{4{`SPC0.dec.dec_flush_m[1]}},
1706 {4{`SPC0.dec.dec_flush_m[0]}}};
1707
1708
1709 // ex_valid_f4 valid will only fire on return
1710 return_f4 <= return_w & ~(`SPC0.tlu_flush_ifu & real_exception);
1711 ex_valid_w <= ex_valid_b;
1712
1713 // Cancel EX valid if it turns out to be asr/asi access for this tid
1714
1715 ex_valid_b <= ex_valid_m & ~ex_asr_access;
1716
1717
1718 ex_valid_m <= { (ex1_tid_e == 2'h3) && ex1_valid_e,
1719 (ex1_tid_e == 2'h2) && ex1_valid_e,
1720 (ex1_tid_e == 2'h1) && ex1_valid_e,
1721 (ex1_tid_e == 2'h0) && ex1_valid_e,
1722 (ex0_tid_e == 2'h3) && ex0_valid_e,
1723 (ex0_tid_e == 2'h2) && ex0_valid_e,
1724 (ex0_tid_e == 2'h1) && ex0_valid_e,
1725 (ex0_tid_e == 2'h0) && ex0_valid_e};
1726
1727
1728 // TLU delays for done and retries
1729 tlu_ccr_cwp_0_valid_last <= `SPC0.tlu.tlu_ccr_cwp_0_valid;
1730 tlu_ccr_cwp_1_valid_last <= `SPC0.tlu.tlu_ccr_cwp_1_valid;
1731
1732
1733end // END posedge gclk
1734
1735// Return instruction is separated out of ex*_valid because CWP update is in
1736// W+1 for return new window is not available for IRF scan (nas_pipe) until
1737// W+2
1738assign return0 = `SPC0.exu0.rml.return_w &
1739 `SPC0.exu0.rml.inst_vld_w;
1740assign return1 = `SPC0.exu1.rml.return_w &
1741 `SPC0.exu1.rml.inst_vld_w;
1742assign return_w = {(ex1_tid_w == 2'h3) && return1,
1743 (ex1_tid_w == 2'h2) && return1,
1744 (ex1_tid_w == 2'h1) && return1,
1745 (ex1_tid_w == 2'h0) && return1,
1746 (ex0_tid_w == 2'h3) && return0,
1747 (ex0_tid_w == 2'h2) && return0,
1748 (ex0_tid_w == 2'h1) && return0,
1749 (ex0_tid_w == 2'h0) && return0};
1750
1751
1752// Cancel EX valid if it turns out that exception (tlu flush) taken for
1753// this tid
1754
1755// exu check bus
1756assign ex0_tid_e = `SPC0.exu0.ect_tid_lth_e[1:0];
1757assign ex0_valid_e = `SPC0.dec.dec_valid_e[0] & ~fgu0_e & ~load0_e &
1758 ~retry0_e & ~done0_e;
1759assign ex1_tid_e = `SPC0.exu1.ect_tid_lth_e[1:0];
1760assign ex1_valid_e = `SPC0.dec.dec_valid_e[1] & ~fgu1_e & ~load1_e &
1761 ~retry1_e & ~done1_e;
1762
1763assign ex_asr_valid = `SPC0.lsu.dcc.asi_store_m & `SPC0.lsu.dcc.asi_sync_m ;
1764
1765assign ex_asr_access ={(`SPC0.lsu.dcc.dcc_tid_m[2:0]==3'h7) & ex_asr_valid,
1766 (`SPC0.lsu.dcc.dcc_tid_m[2:0]==3'h6) & ex_asr_valid,
1767 (`SPC0.lsu.dcc.dcc_tid_m[2:0]==3'h5) & ex_asr_valid,
1768 (`SPC0.lsu.dcc.dcc_tid_m[2:0]==3'h4) & ex_asr_valid,
1769 (`SPC0.lsu.dcc.dcc_tid_m[2:0]==3'h3) & ex_asr_valid,
1770 (`SPC0.lsu.dcc.dcc_tid_m[2:0]==3'h2) & ex_asr_valid,
1771 (`SPC0.lsu.dcc.dcc_tid_m[2:0]==3'h1) & ex_asr_valid,
1772 (`SPC0.lsu.dcc.dcc_tid_m[2:0]==3'h0) & ex_asr_valid};
1773
1774
1775// EXU valid is ex_valid_w, except flushes, delayed return, traps, and stfsr
1776// real_exception added because tlu_flush_ifu activates for second redirect
1777// of retry if TPC and TNPC are not verified as sequential
1778assign real_exception =
1779 {{4 {`SPC0.tlu.fls1.dec_exc_w |
1780 `SPC0.tlu.fls1.exu_exc_w |
1781 `SPC0.tlu.fls1.lsu_exc_w |
1782 `SPC0.tlu.fls1.bsee_req_w}},
1783 {4 {`SPC0.tlu.fls0.dec_exc_w |
1784 `SPC0.tlu.fls0.exu_exc_w |
1785 `SPC0.tlu.fls0.lsu_exc_w |
1786 `SPC0.tlu.fls0.bsee_req_w}}};
1787
1788// Do not assert ex_valid for block store instructions
1789wire [7:0] block_store_first_at_w =
1790 {`SPC0.lsu.sbs7.bst_pend & `SPC0.lsu.sbs7.blk_inst_w,
1791 `SPC0.lsu.sbs6.bst_pend & `SPC0.lsu.sbs6.blk_inst_w,
1792 `SPC0.lsu.sbs5.bst_pend & `SPC0.lsu.sbs5.blk_inst_w,
1793 `SPC0.lsu.sbs4.bst_pend & `SPC0.lsu.sbs4.blk_inst_w,
1794 `SPC0.lsu.sbs3.bst_pend & `SPC0.lsu.sbs3.blk_inst_w,
1795 `SPC0.lsu.sbs2.bst_pend & `SPC0.lsu.sbs2.blk_inst_w,
1796 `SPC0.lsu.sbs1.bst_pend & `SPC0.lsu.sbs1.blk_inst_w,
1797 `SPC0.lsu.sbs0.bst_pend & `SPC0.lsu.sbs0.blk_inst_w};
1798
1799// But inject a valid for a block store that's done...
1800reg [7:0] block_store_w;
1801always @(posedge `BENCH_SPC0_GCLK) begin
1802 block_store_w[7:0] <= `SPC0.lsu.lsu_block_store_b[7:0];
1803 lsu_trap_flush_d <= `SPC0.lsu_trap_flush[7:0];
1804end
1805
1806wire [7:0] block_store_inject_at_w =
1807 ~`SPC0.lsu.lsu_block_store_b[7:0] &
1808 block_store_w[7:0] &
1809 {~`SPC0.lsu.sbs7.bst_kill,
1810 ~`SPC0.lsu.sbs6.bst_kill,
1811 ~`SPC0.lsu.sbs5.bst_kill,
1812 ~`SPC0.lsu.sbs4.bst_kill,
1813 ~`SPC0.lsu.sbs3.bst_kill,
1814 ~`SPC0.lsu.sbs2.bst_kill,
1815 ~`SPC0.lsu.sbs1.bst_kill,
1816 ~`SPC0.lsu.sbs0.bst_kill};
1817
1818assign ex_valid = (((ex_valid_w & ~ex_flush_w & ~return_w & ~block_store_first_at_w & ~exception_w &
1819 ~({{4{`SPC0.tlu.fls1.exu_exc_b & `SPC0.tlu.fls1.beat_two_b}},
1820 {4{`SPC0.tlu.fls0.exu_exc_b & `SPC0.tlu.fls0.beat_two_b}}}) &
1821 ~{(`SPC0.fgu.fac.tid_fx3[2:0]==3'h7) & `SPC0.fgu.fpc.fsr_store_fx3,
1822 (`SPC0.fgu.fac.tid_fx3[2:0]==3'h6) & `SPC0.fgu.fpc.fsr_store_fx3,
1823 (`SPC0.fgu.fac.tid_fx3[2:0]==3'h5) & `SPC0.fgu.fpc.fsr_store_fx3,
1824 (`SPC0.fgu.fac.tid_fx3[2:0]==3'h4) & `SPC0.fgu.fpc.fsr_store_fx3,
1825 (`SPC0.fgu.fac.tid_fx3[2:0]==3'h3) & `SPC0.fgu.fpc.fsr_store_fx3,
1826 (`SPC0.fgu.fac.tid_fx3[2:0]==3'h2) & `SPC0.fgu.fpc.fsr_store_fx3,
1827 (`SPC0.fgu.fac.tid_fx3[2:0]==3'h1) & `SPC0.fgu.fpc.fsr_store_fx3,
1828 (`SPC0.fgu.fac.tid_fx3[2:0]==3'h0) & `SPC0.fgu.fpc.fsr_store_fx3}) |
1829 block_store_inject_at_w) &
1830 ~(`SPC0.tlu_flush_ifu & real_exception)) | return_f4;
1831
1832assign exception_w = {{4 {`SPC0.tlu.fls1.exc_for_w}} |
1833 `SPC0.tlu.fls1.bsee_req[3:0] |
1834 `SPC0.tlu.fls1.pdist_ecc_w[3:0],
1835 {4 {`SPC0.tlu.fls0.exc_for_w}} |
1836 `SPC0.tlu.fls0.bsee_req[3:0] |
1837 `SPC0.tlu.fls0.pdist_ecc_w[3:0]};
1838
1839// imul check bus - includes imul, save, restore instructions
1840assign imul_valid = {(`SPC0.exu1.ect_tid_lth_w[1:0]== 2'h3) & fgu_valid_fb1,
1841 (`SPC0.exu1.ect_tid_lth_w[1:0]== 2'h2) & fgu_valid_fb1,
1842 (`SPC0.exu1.ect_tid_lth_w[1:0]== 2'h1) & fgu_valid_fb1,
1843 (`SPC0.exu1.ect_tid_lth_w[1:0]== 2'h0) & fgu_valid_fb1,
1844 (`SPC0.exu0.ect_tid_lth_w[1:0]== 2'h3) & fgu_valid_fb0,
1845 (`SPC0.exu0.ect_tid_lth_w[1:0]== 2'h2) & fgu_valid_fb0,
1846 (`SPC0.exu0.ect_tid_lth_w[1:0]== 2'h1) & fgu_valid_fb0,
1847 (`SPC0.exu0.ect_tid_lth_w[1:0]== 2'h0) & fgu_valid_fb0};
1848
1849// qualify this signal with fgu_err. If fgu_err is encountered, deassert
1850//fg_cond_fb, so we don't send a step to Riesling.
1851
1852// FGU conditions
1853wire fg_cond_fb_pre_err = `SPC0.fgu.fpc.fpc_w1_ul_vld_fb | fcc_valid_fb |
1854 (fmov_valid_fb & ~fg_flush_fb) |
1855 (`SPC0.fgu.fac.fsr_w1_vld_fb[1]); // covers ST(X)FSR, which clears FSR.ftt
1856
1857assign fg_cond_fb = fg_cond_fb_pre_err & ~fgu_err_fb;
1858
1859// Idiv/Fdiv signals
1860
1861assign fgu_idiv_valid = fg_div_valid & div_idest;
1862
1863
1864assign fgu_fdiv_valid = fg_fdiv_valid_fw & div_fdest;
1865
1866
1867// Lsu signals needed to check lsu results
1868
1869assign lsu_valid = lsu_check | lsu_data_w;
1870
1871assign fg_div_valid = `SPC0.fgu_divide_completion & ~div_special_cancel_f4;
1872
1873// State machine asserts lsu_check for LD hit/miss
1874always @(posedge `BENCH_SPC0_GCLK) begin
1875 for (i=0; i<=7;i=i+1) begin // {
1876 lsu_check[i] <= 1'b0;
1877 case (lsu_state[i])
1878 1'b0: // IDLE state
1879 begin
1880 // LD hit
1881 if (lsu_ld_valid & lsu_tid_dec_b[i] & load_b) begin
1882 lsu_check[i] <= 1'b1;
1883 lsu_state[i] <= 1'b0; // IDLE state
1884 end
1885 // LD miss - normal case
1886 else if (lsu_ld_valid & lsu_tid_dec_b[i] & lsu_complete_b[i])
1887 begin
1888 lsu_check[i] <= 1'b1;
1889 lsu_state[i] <= 1'b0; // IDLE state
1890 end
1891 // LD miss - LDD or Block LD or SWAP
1892 else if (lsu_ld_valid & lsu_tid_dec_b[i]) begin
1893 lsu_state[i] <= 1'b1; // VALID state
1894 end
1895// Added a new term to handle STB uncorrectable errors on atomic or asi stores that are synced
1896//Send a complete if an atomic is squashed.
1897//lsu_trap_flush is asserted a cycle after the block_store_kill is asserted
1898 else if (`SPC0.lsu.dcc.sync_st[i] & `SPC0.lsu_block_store_kill[i] & ~lsu_trap_flush_d[i])
1899 begin
1900 lsu_check[i] <= 1'b1;
1901 lsu_state[i] <= 1'b0; // IDLE state
1902 end
1903 else begin
1904 lsu_state[i] <= lsu_state[i];
1905 end
1906
1907 end
1908 1'b1: // VALID state
1909 begin
1910 if ((lsu_complete_b[i])) begin
1911 lsu_check[i] <= 1'b1;
1912 lsu_state[i] <= 1'b0; // IDLE state
1913 end
1914 else begin
1915 lsu_state[i] <= lsu_state[i];
1916 end
1917 end
1918 endcase
1919 end // }
1920end
1921
1922
1923assign lsu_tid = `SPC0.lsu.dcc.ld_tid_b[2:0];
1924// Don't assert LSU_complete in case of dtlb or irf errors
1925
1926assign lsu_valid_b = (`SPC0.lsu.dcc.pref_inst_b &
1927 ~(dec_flush_lb | `SPC0.lsu.dcc.pipe_flush_b |
1928 `SPC0.lsu_dtdp_err_b | `SPC0.lsu_dttp_err_b |
1929 `SPC0.lsu_dtmh_err_b | `SPC0.lsu.dcc.exu_error_b));
1930
1931assign lsu_data_b[7:0] = { (lsu_tid == 3'h7) & lsu_valid_b,
1932 (lsu_tid == 3'h6) & lsu_valid_b,
1933 (lsu_tid == 3'h5) & lsu_valid_b,
1934 (lsu_tid == 3'h4) & lsu_valid_b,
1935 (lsu_tid == 3'h3) & lsu_valid_b,
1936 (lsu_tid == 3'h2) & lsu_valid_b,
1937 (lsu_tid == 3'h1) & lsu_valid_b,
1938 (lsu_tid == 3'h0) & lsu_valid_b};
1939
1940assign lsu_tid_dec_b[0] = `SPC0.lsu.dcc.ld_tid_b[2:0] == 3'd0;
1941assign lsu_tid_dec_b[1] = `SPC0.lsu.dcc.ld_tid_b[2:0] == 3'd1;
1942assign lsu_tid_dec_b[2] = `SPC0.lsu.dcc.ld_tid_b[2:0] == 3'd2;
1943assign lsu_tid_dec_b[3] = `SPC0.lsu.dcc.ld_tid_b[2:0] == 3'd3;
1944assign lsu_tid_dec_b[4] = `SPC0.lsu.dcc.ld_tid_b[2:0] == 3'd4;
1945assign lsu_tid_dec_b[5] = `SPC0.lsu.dcc.ld_tid_b[2:0] == 3'd5;
1946assign lsu_tid_dec_b[6] = `SPC0.lsu.dcc.ld_tid_b[2:0] == 3'd6;
1947assign lsu_tid_dec_b[7] = `SPC0.lsu.dcc.ld_tid_b[2:0] == 3'd7;
1948
1949assign lsu_ld_valid = (`SPC0.lsu.dcc.exu_ld_vld_b |`SPC0.lsu.dcc.fgu_fld_vld_b) &
1950 ~(`SPC0.lsu.dcc.flush_all_b & `SPC0.lsu.dcc.ld_inst_vld_b);
1951assign dec_flush_lb = `SPC0.dec.dec_flush_lb | `SPC0.tlu_flush_lsu_b;
1952
1953
1954// LSU interface to CCX stub
1955
1956assign exu_lsu_valid = `SPC0.dec.del.lsu_valid_e;
1957assign exu_lsu_addr[47:0] = `SPC0.exu_lsu_address_e[47:0];
1958assign exu_lsu_tid[2:0] = lsu_tid_e[2:0];
1959assign exu_lsu_regid[4:0] = `SPC0.dec.dec_lsu_rd_e[4:0];
1960assign exu_lsu_data[63:0] = `SPC0.exu_lsu_store_data_e[63:0];
1961assign exu_lsu_instr[31:0] = ({32{`SPC0.dec.dec_lsu_sel0_e}} &
1962 inst0_e[31:0]) |
1963 ({32{~`SPC0.dec.dec_lsu_sel0_e}} &
1964 inst1_e[31:0]);
1965assign ld_inst_d = `SPC0.dec.dec_ld_inst_d;
1966
1967///////////////////////////////////////////////////////////////////////////////
1968// Debugging Instruction Opcodes Pipeline
1969///////////////////////////////////////////////////////////////////////////////
1970
1971
1972 reg [31:0] op_0_w;
1973 reg [31:0] op_1_w;
1974 reg [31:0] op_2_w;
1975 reg [31:0] op_3_w;
1976 reg [31:0] op_4_w;
1977 reg [31:0] op_5_w;
1978 reg [31:0] op_6_w;
1979 reg [31:0] op_7_w;
1980
1981 reg [31:0] op0_b;
1982 reg [31:0] op0_m;
1983 reg [31:0] op0_e;
1984 reg [31:0] op0_d;
1985
1986 reg [31:0] op1_b;
1987 reg [31:0] op1_m;
1988 reg [31:0] op1_e;
1989 reg [31:0] op1_d;
1990
1991 reg [255:0] inst0_string_w;
1992 reg [255:0] inst0_string_b;
1993 reg [255:0] inst0_string_m;
1994 reg [255:0] inst0_string_e;
1995 reg [255:0] inst0_string_d;
1996
1997 reg [255:0] inst1_string_w;
1998 reg [255:0] inst1_string_b;
1999 reg [255:0] inst1_string_m;
2000 reg [255:0] inst1_string_e;
2001 reg [255:0] inst1_string_d;
2002
2003 reg [255:0] inst0_string_p;
2004 reg [255:0] inst1_string_p;
2005 reg [255:0] inst2_string_p;
2006 reg [255:0] inst3_string_p;
2007 reg [255:0] inst4_string_p;
2008 reg [255:0] inst5_string_p;
2009 reg [255:0] inst6_string_p;
2010 reg [255:0] inst7_string_p;
2011
2012initial begin
2013 op_0_w = 32'b0;
2014 op_1_w = 32'b0;
2015 op_2_w = 32'b0;
2016 op_3_w = 32'b0;
2017 op_4_w = 32'b0;
2018 op_5_w = 32'b0;
2019 op_6_w = 32'b0;
2020 op_7_w = 32'b0;
2021end
2022
2023always @(posedge `BENCH_SPC0_GCLK) begin // {
2024 op_0_w <= ({32 { select_pc_b[0]}} & op0_b[31:0]) |
2025 ({32 {~select_pc_b[0]}} & op_0_w[31:0]) ;
2026 op_1_w <= ({32 { select_pc_b[1]}} & op0_b[31:0]) |
2027 ({32 {~select_pc_b[1]}} & op_1_w[31:0]) ;
2028 op_2_w <= ({32 { select_pc_b[2]}} & op0_b[31:0]) |
2029 ({32 {~select_pc_b[2]}} & op_2_w[31:0]) ;
2030 op_3_w <= ({32 { select_pc_b[3]}} & op0_b[31:0]) |
2031 ({32 {~select_pc_b[3]}} & op_3_w[31:0]) ;
2032 op_4_w <= ({32 { select_pc_b[4]}} & op1_b[31:0]) |
2033 ({32 {~select_pc_b[4]}} & op_4_w[31:0]) ;
2034 op_5_w <= ({32 { select_pc_b[5]}} & op1_b[31:0]) |
2035 ({32 {~select_pc_b[5]}} & op_5_w[31:0]) ;
2036 op_6_w <= ({32 { select_pc_b[6]}} & op1_b[31:0]) |
2037 ({32 {~select_pc_b[6]}} & op_6_w[31:0]) ;
2038 op_7_w <= ({32 { select_pc_b[7]}} & op1_b[31:0]) |
2039 ({32 {~select_pc_b[7]}} & op_7_w[31:0]) ;
2040
2041 op0_b <= op0_m;
2042 op0_m <= op0_e;
2043 op0_e <= op0_d;
2044 op0_d <= `SPC0.dec.ded0.decode_mux[31:0];
2045
2046 op1_b <= op1_m;
2047 op1_m <= op1_e;
2048 op1_e <= op1_d;
2049 op1_d <= `SPC0.dec.ded1.decode_mux[31:0];
2050
2051 inst0_string_w<=inst0_string_b;
2052 inst0_string_b<=inst0_string_m;
2053 inst0_string_m<=inst0_string_e;
2054 inst0_string_e<=inst0_string_d;
2055 inst0_string_d<=xlate(`SPC0.dec.ded0.decode_mux[31:0]);
2056
2057 inst1_string_w<=inst1_string_b;
2058 inst1_string_b<=inst1_string_m;
2059 inst1_string_m<=inst1_string_e;
2060 inst1_string_e<=inst1_string_d;
2061 inst1_string_d<=xlate(`SPC0.dec.ded1.decode_mux[31:0]);
2062
2063// instructions for each thread at pick
2064 inst0_string_p<=xlate(`SPC0.ifu_ibu.ibf0.buf0_in[31:0]);
2065 inst1_string_p<=xlate(`SPC0.ifu_ibu.ibf1.buf0_in[31:0]);
2066 inst2_string_p<=xlate(`SPC0.ifu_ibu.ibf2.buf0_in[31:0]);
2067 inst3_string_p<=xlate(`SPC0.ifu_ibu.ibf3.buf0_in[31:0]);
2068 inst4_string_p<=xlate(`SPC0.ifu_ibu.ibf4.buf0_in[31:0]);
2069 inst5_string_p<=xlate(`SPC0.ifu_ibu.ibf5.buf0_in[31:0]);
2070 inst6_string_p<=xlate(`SPC0.ifu_ibu.ibf6.buf0_in[31:0]);
2071 inst7_string_p<=xlate(`SPC0.ifu_ibu.ibf7.buf0_in[31:0]);
2072
2073end //}
2074
2075///////////////////////////////////////////////////////////////////////////////
2076// Functions
2077///////////////////////////////////////////////////////////////////////////////
2078function [2:0] onehot2tid;
2079 input [7:0] onehot;
2080
2081 begin
2082
2083 if (onehot[7:0]==8'b00000001) onehot2tid[2:0] = 3'b000;
2084 else if (onehot[7:0]==8'b00000010) onehot2tid[2:0] = 3'b001;
2085 else if (onehot[7:0]==8'b00000100) onehot2tid[2:0] = 3'b010;
2086 else if (onehot[7:0]==8'b00001000) onehot2tid[2:0] = 3'b011;
2087 else if (onehot[7:0]==8'b00010000) onehot2tid[2:0] = 3'b100;
2088 else if (onehot[7:0]==8'b00100000) onehot2tid[2:0] = 3'b101;
2089 else if (onehot[7:0]==8'b01000000) onehot2tid[2:0] = 3'b110;
2090 else if (onehot[7:0]==8'b10000000) onehot2tid[2:0] = 3'b111;
2091
2092 end
2093endfunction
2094
2095function [7:0] tid2onehot;
2096 input [2:0] tid;
2097
2098 begin
2099
2100 if (tid[2:0]==3'b000) tid2onehot[7:0] = 8'b00000001;
2101 else if (tid[2:0]==3'b001) tid2onehot[7:0] = 8'b00000010;
2102 else if (tid[2:0]==3'b010) tid2onehot[7:0] = 8'b00000100;
2103 else if (tid[2:0]==3'b011) tid2onehot[7:0] = 8'b00001000;
2104 else if (tid[2:0]==3'b100) tid2onehot[7:0] = 8'b00010000;
2105 else if (tid[2:0]==3'b101) tid2onehot[7:0] = 8'b00100000;
2106 else if (tid[2:0]==3'b110) tid2onehot[7:0] = 8'b01000000;
2107 else if (tid[2:0]==3'b111) tid2onehot[7:0] = 8'b10000000;
2108
2109 end
2110endfunction
2111
2112//---------------------
2113
2114function [255:0] xlate;
2115 input [31:0] inst;
2116
2117 begin
2118 casex(inst[31:0])
211932'b10xxxxx110100xxxxx001000011xxxxx : xlate[255:0]="FADDq";
212032'b10xxxxx110100xxxxx001000111xxxxx : xlate[255:0]="FSUBq";
212132'b10000xx110101xxxxx001010011xxxxx : xlate[255:0]="FCMPq";
212232'b10000xx110101xxxxx001010111xxxxx : xlate[255:0]="FCMPEq";
212332'b10xxxxx110100xxxxx011001101xxxxx : xlate[255:0]="FsTOq";
212432'b10xxxxx110100xxxxx011001110xxxxx : xlate[255:0]="FdTOq";
212532'b10xxxxx110100xxxxx010001100xxxxx : xlate[255:0]="FxTOq";
212632'b10xxxxx110100xxxxx011001100xxxxx : xlate[255:0]="FiTOq";
212732'b10xxxxx110100xxxxx000000011xxxxx : xlate[255:0]="FMOVq";
212832'b10xxxxx110100xxxxx000000111xxxxx : xlate[255:0]="FNEGq";
212932'b10xxxxx110100xxxxx000001011xxxxx : xlate[255:0]="FABSq";
213032'b10xxxxx110100xxxxx001001011xxxxx : xlate[255:0]="FMULq";
213132'b10xxxxx110100xxxxx001101110xxxxx : xlate[255:0]="FdMULq";
213232'b10xxxxx110100xxxxx001001111xxxxx : xlate[255:0]="FDIVq";
213332'b10xxxxx110100xxxxx000101011xxxxx : xlate[255:0]="FSQRTq";
213432'b10xxxxx1101010xxxx0xx100111xxxxx : xlate[255:0]="FMOVrQa";
213532'b10xxxxx1101010xxxx0x1x00111xxxxx : xlate[255:0]="FMOVrQb";
213632'b10xxxxx110100xxxxx011010011xxxxx : xlate[255:0]="FqTOi";
213732'b10xxxxx110100xxxxx010000011xxxxx : xlate[255:0]="FqTOx";
213832'b10xxxxx110100xxxxx011000111xxxxx : xlate[255:0]="FqTOs";
213932'b10xxxxx110100xxxxx011001011xxxxx : xlate[255:0]="FqTOd";
214032'b11xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQF";
214132'b11xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFi";
214232'b11xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQFA";
214332'b11xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFAi";
214432'b11xxxxx100110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFi";
214532'b11xxxxx100110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQF";
214632'b11xxxxx110110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQFA";
214732'b11xxxxx110110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFAi";
214832'b10xxxxx1101010xxxxxxx000011xxxxx : xlate[255:0]="FMOVQcc";
214932'b10xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADD";
215032'b10xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDcc";
215132'b10xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDC";
215232'b10xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDCcc";
215332'b10xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDi";
215432'b10xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDcci";
215532'b10xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCi";
215632'b10xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCcci";
215732'b00x0xx1011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr1";
215832'b00x0x1x011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr2";
215932'b00xx000110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfccA";
216032'b00xx1xx110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc1";
216132'b00xxx1x110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc2";
216232'b00xxxx1110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc3";
216332'b00xx000101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfccA";
216432'b00xx1xx101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc1";
216532'b00xxx1x101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc2";
216632'b00xxxx1101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc3";
216732'b00xx000010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BiccA";
216832'b00xx1xx010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc1";
216932'b00xxx1x010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc2";
217032'b00xxxx1010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc3";
217132'b00xx000001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPccA";
217232'b00xx1xx001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc1";
217332'b00xxx1x001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc2";
217432'b00xxxx1001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc3";
217532'b01xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="CALL";
217632'b11xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASA";
217732'b11xxxxx111110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASXA";
217832'b11xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASAi";
217932'b11xxxxx111110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASXAi";
218032'b10xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIV";
218132'b10xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIV";
218232'b10xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVcc";
218332'b10xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVcc";
218432'b10xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVi";
218532'b10xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVi";
218632'b10xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVcci";
218732'b10xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVcci";
218832'b1000000111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="DONE";
218932'b1000001111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RETRY";
219032'b10xxxxx110100xxxxx001000001xxxxx : xlate[255:0]="FADDs";
219132'b10xxxxx110100xxxxx001000010xxxxx : xlate[255:0]="FADDd";
219232'b10xxxxx110100xxxxx001000101xxxxx : xlate[255:0]="FSUBs";
219332'b10xxxxx110100xxxxx001000110xxxxx : xlate[255:0]="FSUBd";
219432'b10000xx110101xxxxx001010001xxxxx : xlate[255:0]="FCMPs";
219532'b10000xx110101xxxxx001010010xxxxx : xlate[255:0]="FCMPd";
219632'b10000xx110101xxxxx001010101xxxxx : xlate[255:0]="FCMPEs";
219732'b10000xx110101xxxxx001010110xxxxx : xlate[255:0]="FCMPEd";
219832'b10xxxxx110100xxxxx010000001xxxxx : xlate[255:0]="FsTOx";
219932'b10xxxxx110100xxxxx010000010xxxxx : xlate[255:0]="FdTOx";
220032'b10xxxxx110100xxxxx011010001xxxxx : xlate[255:0]="FsTOi";
220132'b10xxxxx110100xxxxx011010010xxxxx : xlate[255:0]="FdTOi";
220232'b10xxxxx110100xxxxx011001001xxxxx : xlate[255:0]="FsTOd";
220332'b10xxxxx110100xxxxx011000110xxxxx : xlate[255:0]="FdTOs";
220432'b10xxxxx110100xxxxx010000100xxxxx : xlate[255:0]="FxTOs";
220532'b10xxxxx110100xxxxx010001000xxxxx : xlate[255:0]="FxTOd";
220632'b10xxxxx110100xxxxx011000100xxxxx : xlate[255:0]="FiTOs";
220732'b10xxxxx110100xxxxx011001000xxxxx : xlate[255:0]="FiTOd";
220832'b10xxxxx110100xxxxx000000001xxxxx : xlate[255:0]="FMOVs";
220932'b10xxxxx110100xxxxx000000010xxxxx : xlate[255:0]="FMOVd";
221032'b10xxxxx110100xxxxx000000101xxxxx : xlate[255:0]="FNEGs";
221132'b10xxxxx110100xxxxx000000110xxxxx : xlate[255:0]="FNEGd";
221232'b10xxxxx110100xxxxx000001001xxxxx : xlate[255:0]="FABSs";
221332'b10xxxxx110100xxxxx000001010xxxxx : xlate[255:0]="FABSd";
221432'b10xxxxx110100xxxxx001001001xxxxx : xlate[255:0]="FMULs";
221532'b10xxxxx110100xxxxx001001010xxxxx : xlate[255:0]="FMULd";
221632'b10xxxxx110100xxxxx001101001xxxxx : xlate[255:0]="FsMULd";
221732'b10xxxxx110100xxxxx001001101xxxxx : xlate[255:0]="FDIVs";
221832'b10xxxxx110100xxxxx001001110xxxxx : xlate[255:0]="FDIVd";
221932'b10xxxxx110100xxxxx000101001xxxxx : xlate[255:0]="FSQRTs";
222032'b10xxxxx110100xxxxx000101010xxxxx : xlate[255:0]="FSQRTd";
222132'b10xxxxx111011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSH";
222232'b10xxxxx111011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="FLUSHi";
222332'b10xxxxx101011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSHw";
222432'b10xxxxx111000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="JMPL";
222532'b10xxxxx111000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="JMPLi";
222632'b11xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDF";
222732'b11xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDF";
222832'b1100000100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFSR";
222932'b1100001100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXFSR";
223032'b11xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFi";
223132'b11xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFi";
223232'b1100000100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFSRi";
223332'b1100001100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXFSRi";
223432'b11xxxxx110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFA";
223532'b11xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDFA";
223632'b11xxxxx110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFAi";
223732'b11xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFAi";
223832'b11xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSB";
223932'b11xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSH";
224032'b11xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSW";
224132'b11xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUB";
224232'b11xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUH";
224332'b11xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUW";
224432'b11xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDX";
224532'b11xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDD";
224632'b11xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBi";
224732'b11xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHi";
224832'b11xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWi";
224932'b11xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBi";
225032'b11xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHi";
225132'b11xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWi";
225232'b11xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXi";
225332'b11xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDi";
225432'b11xxxxx011001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSBA";
225532'b11xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSHA";
225632'b11xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSWA";
225732'b11xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUBA";
225832'b11xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUHA";
225932'b11xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUWA";
226032'b11xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXA";
226132'b11xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDA";
226232'b11xxxxx011001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBAi";
226332'b11xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHAi";
226432'b11xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWAi";
226532'b11xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBAi";
226632'b11xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHAi";
226732'b11xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWAi";
226832'b11xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXAi";
226932'b11xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDAi";
227032'b11xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUB";
227132'b11xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBi";
227232'b11xxxxx011101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUBA";
227332'b11xxxxx011101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBAi";
227432'b10xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="AND";
227532'b10xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDcc";
227632'b10xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDN";
227732'b10xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDNcc";
227832'b10xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="OR";
227932'b10xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORcc";
228032'b10xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORN";
228132'b10xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORNcc";
228232'b10xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XOR";
228332'b10xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XORcc";
228432'b10xxxxx000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNOR";
228532'b10xxxxx010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNORcc";
228632'b10xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDi";
228732'b10xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDcci";
228832'b10xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNi";
228932'b10xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNcci";
229032'b10xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORi";
229132'b10xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORcci";
229232'b10xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNi";
229332'b10xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNcci";
229432'b10xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORi";
229532'b10xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORcci";
229632'b10xxxxx000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORi";
229732'b10xxxxx010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORcci";
229832'b1000000101000011111xxxxxxxxxxxxx : xlate[255:0]="MEMBAR";
229932'b1000000101000011110xxxxxxxxxxxxx : xlate[255:0]="STBAR";
230032'b10xxxxx101000000000xxxxxxxxxxxxx : xlate[255:0]="RDY";
230132'b10xxxxx101000000100xxxxxxxxxxxxx : xlate[255:0]="RDCCR";
230232'b10xxxxx101000000110xxxxxxxxxxxxx : xlate[255:0]="RDASI";
230332'b10xxxxx101000001000xxxxxxxxxxxxx : xlate[255:0]="RDTICK";
230432'b10xxxxx101000001010xxxxxxxxxxxxx : xlate[255:0]="RDPC";
230532'b10xxxxx101000001100xxxxxxxxxxxxx : xlate[255:0]="RDFPRS";
230632'b10xxxxx101000100110xxxxxxxxxxxxx : xlate[255:0]="RDGSR";
230732'b10xxxxx101000100000xxxxxxxxxxxxx : xlate[255:0]="RDPCR";
230832'b10xxxxx101000100010xxxxxxxxxxxxx : xlate[255:0]="RDPIC";
230932'b10xxxxx1101010xxxx0xx000001xxxxx : xlate[255:0]="FMOVSfcc";
231032'b10xxxxx1101010xxxx1xx000001xxxxx : xlate[255:0]="FMOVSxcc";
231132'b10xxxxx1101010xxxx0xx000010xxxxx : xlate[255:0]="FMOVDfcc";
231232'b10xxxxx1101010xxxx1xx000010xxxxx : xlate[255:0]="FMOVDxcc";
231332'b10xxxxx110101xxxxx0xx100101xxxxx : xlate[255:0]="FMOVrS1";
231432'b10xxxxx110101xxxxx0x1x00101xxxxx : xlate[255:0]="FMOVrS2";
231532'b10xxxxx110101xxxxx0xx100110xxxxx : xlate[255:0]="FMOVrD1";
231632'b10xxxxx110101xxxxx0x1x00110xxxxx : xlate[255:0]="FMOVrD2";
231732'b10xxxxx1011001xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVxcc";
231832'b10xxxxx1011001xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVxcci";
231932'b10xxxxx1011000xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVfcc";
232032'b10xxxxx1011000xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVfcci";
232132'b10xxxxx101111xxxxx0xx1xxxxxxxxxx : xlate[255:0]="MOVR1";
232232'b10xxxxx101111xxxxx0x1xxxxxxxxxxx : xlate[255:0]="MOVR2";
232332'b10xxxxx101111xxxxx1xx1xxxxxxxxxx : xlate[255:0]="MOVRi1";
232432'b10xxxxx101111xxxxx1x1xxxxxxxxxxx : xlate[255:0]="MOVRi2";
232532'b10xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULX";
232632'b10xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVX";
232732'b10xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVX";
232832'b10xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULXi";
232932'b10xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVXi";
233032'b10xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVXi";
233132'b10xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMUL";
233232'b10xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMUL";
233332'b10xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMULcc";
233432'b10xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMULcc";
233532'b10xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULi";
233632'b10xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULi";
233732'b10xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULcci";
233832'b10xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULcci";
233932'b10xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULScc";
234032'b10xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULScci";
234132'b10xxxxx101110000000xxxxxxxxxxxxx : xlate[255:0]="POPC";
234232'b10xxxxx101110000001xxxxxxxxxxxxx : xlate[255:0]="POPCi";
234332'b11xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCH";
234432'b11xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHi";
234532'b11xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCHA";
234632'b11xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHAi";
234732'b10xxxxx101010xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDPR";
234832'b10xxxxx101001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDHPR";
234932'b10xxxxx111001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RETURN";
235032'b10xxxxx111001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RETURNi";
235132'b10xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SAVE";
235232'b10xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SAVEi";
235332'b10xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RESTORE";
235432'b10xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RESTOREi";
235532'b1000000110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="SAVED";
235632'b1000001110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RESTORED";
235732'b00xxxxx100xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="SETHI";
235832'b10xxxxx100101xxxxx00xxxxxxxxxxxx : xlate[255:0]="SLL";
235932'b10xxxxx100110xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRL";
236032'b10xxxxx100111xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRA";
236132'b10xxxxx100101xxxxx01xxxxxxxxxxxx : xlate[255:0]="SLLX";
236232'b10xxxxx100110xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRLX";
236332'b10xxxxx100111xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRAX";
236432'b10xxxxx100101xxxxx10xxxxxxxxxxxx : xlate[255:0]="SLLi";
236532'b10xxxxx100110xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRLi";
236632'b10xxxxx100111xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRAi";
236732'b10xxxxx100101xxxxx11xxxxxxxxxxxx : xlate[255:0]="SLLXi";
236832'b10xxxxx100110xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRLXi";
236932'b10xxxxx100111xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRAXi";
237032'b11xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STF";
237132'b11xxxxx100111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDF";
237232'b1100000100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFSR";
237332'b1100001100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXFSR";
237432'b11xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFi";
237532'b11xxxxx100111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFi";
237632'b1100000100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFSRi";
237732'b1100001100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXFSRi";
237832'b11xxxxx110100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFA";
237932'b11xxxxx110111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDFA";
238032'b11xxxxx110100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFAi";
238132'b11xxxxx110111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFAi";
238232'b11xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STB";
238332'b11xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STH";
238432'b11xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STW";
238532'b11xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STX";
238632'b11xxxx0000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STD";
238732'b11xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBi";
238832'b11xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHi";
238932'b11xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWi";
239032'b11xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXi";
239132'b11xxxx0000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDi";
239232'b11xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STBA";
239332'b11xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STHA";
239432'b11xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STWA";
239532'b11xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXA";
239632'b11xxxx0010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDA";
239732'b11xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBAi";
239832'b11xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHAi";
239932'b11xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWAi";
240032'b11xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXAi";
240132'b11xxxx0010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDAi";
240232'b10xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUB";
240332'b10xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBcc";
240432'b10xxxxx001100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBC";
240532'b10xxxxx011100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBCcc";
240632'b10xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBi";
240732'b10xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBcci";
240832'b10xxxxx001100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCi";
240932'b10xxxxx011100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCcci";
241032'b11xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAP";
241132'b11xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPi";
241232'b11xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAPA";
241332'b11xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPAi";
241432'b10xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDcc";
241532'b10xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDccTV";
241632'b10xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDcci";
241732'b10xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDccTVi";
241832'b10xxxxx100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBcc";
241932'b10xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBccTV";
242032'b10xxxxx100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBcci";
242132'b10xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBccTVi";
242232'b10xxxxx111010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TCC";
242332'b10xxxxx111010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TCCi";
242432'b10xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPR";
242532'b10xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPRi";
242632'b10xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRHPR";
242732'b10xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRHPRi";
242832'b1000000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRY";
242932'b1000010110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRCCR";
243032'b1000011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRASI";
243132'b1000110110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRFPRS";
243232'b1010011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRGSR";
243332'b1010000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPCR";
243432'b1010001110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPIC";
243532'b1000000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRYi";
243632'b1000010110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRCCRi";
243732'b1000011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRASIi";
243832'b1000110110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRFPRSi";
243932'b1010011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRGSRi";
244032'b1010000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPCRi";
244132'b1010001110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPICi";
244232'b1001111110000000001xxxxxxxxxxxxx : xlate[255:0]="SIR";
244332'b10xxxxx110110xxxxx001010000xxxxx : xlate[255:0]="FPADD16";
244432'b10xxxxx110110xxxxx001010001xxxxx : xlate[255:0]="FPADD16S";
244532'b10xxxxx110110xxxxx001010010xxxxx : xlate[255:0]="FPADD32";
244632'b10xxxxx110110xxxxx001010011xxxxx : xlate[255:0]="FPADD32S";
244732'b10xxxxx110110xxxxx001010100xxxxx : xlate[255:0]="FPSUB16";
244832'b10xxxxx110110xxxxx001010101xxxxx : xlate[255:0]="FPSUB16S";
244932'b10xxxxx110110xxxxx001010110xxxxx : xlate[255:0]="FPSUB32";
245032'b10xxxxx110110xxxxx001010111xxxxx : xlate[255:0]="FPSUB32S";
245132'b10xxxxx110110xxxxx000111011xxxxx : xlate[255:0]="FPACK16";
245232'b10xxxxx110110xxxxx000111010xxxxx : xlate[255:0]="FPACK32";
245332'b10xxxxx110110xxxxx000111101xxxxx : xlate[255:0]="FPACKFIX";
245432'b10xxxxx110110xxxxx001001101xxxxx : xlate[255:0]="FEXPAND";
245532'b10xxxxx110110xxxxx001001011xxxxx : xlate[255:0]="FPMERGE";
245632'b10xxxxx110110xxxxx000110001xxxxx : xlate[255:0]="FMUL8x16";
245732'b10xxxxx110110xxxxx000110011xxxxx : xlate[255:0]="FMUL8x16AU";
245832'b10xxxxx110110xxxxx000110101xxxxx : xlate[255:0]="FMUL8x16AL";
245932'b10xxxxx110110xxxxx000110110xxxxx : xlate[255:0]="FMUL8SUx16";
246032'b10xxxxx110110xxxxx000110111xxxxx : xlate[255:0]="FMUL8ULx16";
246132'b10xxxxx110110xxxxx000111000xxxxx : xlate[255:0]="FMULD8SUx16";
246232'b10xxxxx110110xxxxx000111001xxxxx : xlate[255:0]="FMULD8ULx16";
246332'b10xxxxx110110xxxxx000011000xxxxx : xlate[255:0]="ALIGNADDRESS";
246432'b10xxxxx110110xxxxx000011010xxxxx : xlate[255:0]="ALIGNADDRESS_LITTLE";
246532'b10xxxxx110110xxxxx000011001xxxxx : xlate[255:0]="BMASK";
246632'b10xxxxx110110xxxxx001001000xxxxx : xlate[255:0]="FALIGNDATA";
246732'b10xxxxx110110xxxxx001001100xxxxx : xlate[255:0]="BSHUFFLE";
246832'b10xxxxx110110xxxxx001100000xxxxx : xlate[255:0]="FZERO";
246932'b10xxxxx110110xxxxx001100001xxxxx : xlate[255:0]="FZEROS";
247032'b10xxxxx110110xxxxx001111110xxxxx : xlate[255:0]="FONE";
247132'b10xxxxx110110xxxxx001111111xxxxx : xlate[255:0]="FONES";
247232'b10xxxxx110110xxxxx001110100xxxxx : xlate[255:0]="FSRC1";
247332'b10xxxxx110110xxxxx001110101xxxxx : xlate[255:0]="FSRC1S";
247432'b10xxxxx110110xxxxx001111000xxxxx : xlate[255:0]="FSRC2";
247532'b10xxxxx110110xxxxx001111001xxxxx : xlate[255:0]="FSRC2S";
247632'b10xxxxx110110xxxxx001101010xxxxx : xlate[255:0]="FNOT1";
247732'b10xxxxx110110xxxxx001101011xxxxx : xlate[255:0]="FNOT1S";
247832'b10xxxxx110110xxxxx001100110xxxxx : xlate[255:0]="FNOT2";
247932'b10xxxxx110110xxxxx001100111xxxxx : xlate[255:0]="FNOT2S";
248032'b10xxxxx110110xxxxx001111100xxxxx : xlate[255:0]="FOR";
248132'b10xxxxx110110xxxxx001111101xxxxx : xlate[255:0]="FORS";
248232'b10xxxxx110110xxxxx001100010xxxxx : xlate[255:0]="FNOR";
248332'b10xxxxx110110xxxxx001100011xxxxx : xlate[255:0]="FNORS";
248432'b10xxxxx110110xxxxx001110000xxxxx : xlate[255:0]="FAND";
248532'b10xxxxx110110xxxxx001110001xxxxx : xlate[255:0]="FANDS";
248632'b10xxxxx110110xxxxx001101110xxxxx : xlate[255:0]="FNAND";
248732'b10xxxxx110110xxxxx001101111xxxxx : xlate[255:0]="FNANDS";
248832'b10xxxxx110110xxxxx001101100xxxxx : xlate[255:0]="FXOR";
248932'b10xxxxx110110xxxxx001101101xxxxx : xlate[255:0]="FXORS";
249032'b10xxxxx110110xxxxx001110010xxxxx : xlate[255:0]="FXNOR";
249132'b10xxxxx110110xxxxx001110011xxxxx : xlate[255:0]="FXNORS";
249232'b10xxxxx110110xxxxx001111010xxxxx : xlate[255:0]="FORNOT1";
249332'b10xxxxx110110xxxxx001111011xxxxx : xlate[255:0]="FORNOT1S";
249432'b10xxxxx110110xxxxx001110110xxxxx : xlate[255:0]="FORNOT2";
249532'b10xxxxx110110xxxxx001110111xxxxx : xlate[255:0]="FORNOT2S";
249632'b10xxxxx110110xxxxx001101000xxxxx : xlate[255:0]="FANDNOT1";
249732'b10xxxxx110110xxxxx001101001xxxxx : xlate[255:0]="FANDNOT1S";
249832'b10xxxxx110110xxxxx001100100xxxxx : xlate[255:0]="FANDNOT2";
249932'b10xxxxx110110xxxxx001100101xxxxx : xlate[255:0]="FANDNOT2S";
250032'b10xxxxx110110xxxxx000101000xxxxx : xlate[255:0]="FCMPGT16";
250132'b10xxxxx110110xxxxx000101100xxxxx : xlate[255:0]="FCMPGT32";
250232'b10xxxxx110110xxxxx000100000xxxxx : xlate[255:0]="FCMPLE16";
250332'b10xxxxx110110xxxxx000100100xxxxx : xlate[255:0]="FCMPLE32";
250432'b10xxxxx110110xxxxx000100010xxxxx : xlate[255:0]="FCMPNE16";
250532'b10xxxxx110110xxxxx000100110xxxxx : xlate[255:0]="FCMPNE32";
250632'b10xxxxx110110xxxxx000101010xxxxx : xlate[255:0]="FCMPEQ16";
250732'b10xxxxx110110xxxxx000101110xxxxx : xlate[255:0]="FCMPEQ32";
250832'b10xxxxx110110xxxxx000111110xxxxx : xlate[255:0]="PDIST";
250932'b10xxxxx110110xxxxx000000000xxxxx : xlate[255:0]="EDGE8";
251032'b10xxxxx110110xxxxx000000001xxxxx : xlate[255:0]="EDGE8N";
251132'b10xxxxx110110xxxxx000000010xxxxx : xlate[255:0]="EDGE8L";
251232'b10xxxxx110110xxxxx000000011xxxxx : xlate[255:0]="EDGE8LN";
251332'b10xxxxx110110xxxxx000000100xxxxx : xlate[255:0]="EDGE16";
251432'b10xxxxx110110xxxxx000000101xxxxx : xlate[255:0]="EDGE16N";
251532'b10xxxxx110110xxxxx000000110xxxxx : xlate[255:0]="EDGE16L";
251632'b10xxxxx110110xxxxx000000111xxxxx : xlate[255:0]="EDGE16LN";
251732'b10xxxxx110110xxxxx000001000xxxxx : xlate[255:0]="EDGE32";
251832'b10xxxxx110110xxxxx000001001xxxxx : xlate[255:0]="EDGE32N";
251932'b10xxxxx110110xxxxx000001010xxxxx : xlate[255:0]="EDGE32L";
252032'b10xxxxx110110xxxxx000001011xxxxx : xlate[255:0]="EDGE32LN";
252132'b10xxxxx110110xxxxx000010000xxxxx : xlate[255:0]="ARRAY8";
252232'b10xxxxx110110xxxxx000010010xxxxx : xlate[255:0]="ARRAY16";
252332'b10xxxxx110110xxxxx000010100xxxxx : xlate[255:0]="ARRAY32";
252432'b10xxxxx110110xxxxx010000001xxxxx : xlate[255:0]="SIAM";
2525 default : xlate[255:0]="unknown";
2526 endcase
2527 end
2528endfunction // xlate
2529
2530
2531`endif
2532
2533endmodule
2534
2535`endif
2536
2537
2538`ifdef CORE_1
2539
2540module nas_probes1;
2541
2542
2543`ifdef GATESIM
2544
2545
2546`else
2547 reg [7:0] ex_valid_m;
2548 reg [7:0] ex_valid_b;
2549 reg [7:0] ex_valid_w;
2550 reg [7:0] return_f4;
2551 reg [2:0] ex0_tid_m;
2552 reg [2:0] ex1_tid_m;
2553 reg [2:0] ex0_tid_b;
2554 reg [2:0] ex1_tid_b;
2555 reg [2:0] ex0_tid_w;
2556 reg [2:0] ex1_tid_w;
2557 reg fgu_valid_fb0;
2558 reg fgu_valid_fb1;
2559
2560 reg [31:0] inst0_e;
2561 reg [31:0] inst1_e;
2562
2563 reg [7:0] fg_valid;
2564
2565 reg fcc_valid_f4;
2566 reg fcc_valid_f5;
2567 reg fcc_valid_fb;
2568
2569 reg fgu0_e;
2570 reg fgu1_e;
2571 reg lsu0_e;
2572 reg lsu1_e;
2573
2574 reg [1:0] dcd_idest_e;
2575 reg [1:0] dcd_fdest_e;
2576
2577 wire [7:0] ex_valid;
2578 wire [7:0] exception_w;
2579
2580 wire [7:0] imul_valid;
2581
2582 wire fg_cond_fb;
2583
2584 wire exu_lsu_valid;
2585 wire [47:0] exu_lsu_addr;
2586 wire [31:0] exu_lsu_instr;
2587 wire [2:0] exu_lsu_tid;
2588 wire [4:0] exu_lsu_regid;
2589 wire [63:0] exu_lsu_data;
2590
2591 wire [2:0] ex0_tid_e;
2592 wire [2:0] ex1_tid_e;
2593 wire ex0_valid_e;
2594 wire ex1_valid_e;
2595 wire [7:0] ex_asr_access;
2596 wire ex_asr_valid;
2597
2598 wire [7:0] lsu_valid;
2599 wire [2:0] lsu_tid;
2600 wire [7:0] lsu_tid_dec_b;
2601 wire lsu_ld_valid;
2602 reg [7:0] lsu_data_w;
2603 wire [7:0] lsu_data_b;
2604
2605 wire ld_inst_d;
2606
2607 reg [7:0] div_idest;
2608 reg [7:0] div_fdest;
2609
2610 reg load0_e;
2611 reg load1_e;
2612
2613 reg load_m;
2614 reg load_b;
2615
2616 reg [2:0] lsu_tid_m;
2617 reg [7:0] lsu_complete_m;
2618 reg [7:0] lsu_complete_b;
2619 reg [7:0] lsu_trap_flush_d; //reqd. for store buffer ue testing
2620
2621 reg [7:0] ex_flush_w;
2622 reg [7:0] ex_flush_b;
2623
2624 reg sel_divide0_e;
2625 reg sel_divide1_e;
2626
2627 wire dec_flush_lb;
2628
2629 wire [7:0] fgu_idiv_valid;
2630
2631 wire [7:0] fgu_fdiv_valid;
2632
2633 wire [7:0] fg_div_valid;
2634
2635 wire lsu_valid_b;
2636
2637 wire [7:0] return_w;
2638 wire return0;
2639 wire return1;
2640 wire [7:0] real_exception;
2641
2642 reg [2:0] lsu_tid_b;
2643 reg fmov_valid_fb;
2644 reg fmov_valid_f5;
2645 reg fmov_valid_f4;
2646 reg fmov_valid_f3;
2647 reg fmov_valid_f2;
2648 reg fmov_valid_m;
2649 reg fmov_valid_e;
2650
2651 reg fg_flush_fb;
2652 reg fg_flush_f5;
2653 reg fg_flush_f4;
2654 reg fg_flush_f3;
2655 reg fg_flush_f2;
2656
2657 reg siam0_d;
2658 reg siam1_d;
2659
2660 reg done0_d;
2661 reg done1_d;
2662 reg retry0_d;
2663 reg retry1_d;
2664 reg done0_e;
2665 reg done1_e;
2666 reg retry0_e;
2667 reg retry1_e;
2668 reg tlu_ccr_cwp_0_valid_last;
2669 reg tlu_ccr_cwp_1_valid_last;
2670 reg [7:0] fg_fdiv_valid_fw;
2671 reg [7:0] asi_in_progress_b;
2672 reg [7:0] asi_in_progress_w;
2673 reg [7:0] asi_in_progress_fx4;
2674 reg [7:0] tlu_valid;
2675 reg [7:0] sync_reset_w;
2676
2677 reg [7:0] div_special_cancel_f4;
2678
2679 reg asi_store_b;
2680 reg asi_store_w;
2681 reg [2:0] dcc_tid_b;
2682 reg [2:0] dcc_tid_w;
2683 reg [7:0] asi_valid_w;
2684 reg [7:0] asi_valid_fx4;
2685 reg [7:0] asi_valid_fx5;
2686
2687 reg [7:0] lsu_state;
2688 reg [7:0] lsu_check;
2689 reg [2:0] lsu_tid_e;
2690
2691 reg [47:0] pc_0_e;
2692 reg [47:0] pc_1_e;
2693 reg [47:0] pc_0_m;
2694 reg [47:0] pc_1_m;
2695 reg [47:0] pc_0_b;
2696 reg [47:0] pc_1_b;
2697 reg [47:0] pc_0_w;
2698 reg [47:0] pc_1_w;
2699 reg [47:0] pc_2_w;
2700 reg [47:0] pc_3_w;
2701 reg [47:0] pc_4_w;
2702 reg [47:0] pc_5_w;
2703 reg [47:0] pc_6_w;
2704 reg [47:0] pc_7_w;
2705
2706 reg fgu_err_fx3;
2707 reg fgu_err_fx4;
2708 reg fgu_err_fx5;
2709 reg fgu_err_fb;
2710
2711 reg clkstop_d1;
2712 reg clkstop_d2;
2713 reg clkstop_d3;
2714 reg clkstop_d4;
2715 reg clkstop_d5;
2716
2717integer i;
2718integer start_dmiss0;
2719integer start_dmiss1;
2720integer start_dmiss2;
2721integer start_dmiss3;
2722integer start_dmiss4;
2723integer start_dmiss5;
2724integer start_dmiss6;
2725integer start_dmiss7;
2726integer number_dmiss;
2727integer start_imiss0;
2728integer start_imiss1;
2729integer start_imiss2;
2730integer start_imiss3;
2731integer start_imiss4;
2732integer start_imiss5;
2733integer start_imiss6;
2734integer start_imiss7;
2735integer active_imiss0;
2736integer active_imiss1;
2737integer active_imiss2;
2738integer active_imiss3;
2739integer active_imiss4;
2740integer active_imiss5;
2741integer active_imiss6;
2742integer active_imiss7;
2743integer first_imiss0;
2744integer first_imiss1;
2745integer first_imiss2;
2746integer first_imiss3;
2747integer first_imiss4;
2748integer first_imiss5;
2749integer first_imiss6;
2750integer first_imiss7;
2751integer number_imiss;
2752integer clock;
2753integer sum_dmiss_latency;
2754integer sum_imiss_latency;
2755reg spec_dmiss;
2756integer dmiss_cnt;
2757integer imiss_cnt;
2758reg pcx_req;
2759integer l15dmiss_cnt;
2760integer l15imiss_cnt;
2761
2762
2763initial begin // {
2764 pcx_req=0;
2765 l15imiss_cnt=0;
2766 l15dmiss_cnt=0;
2767 imiss_cnt=0;
2768 dmiss_cnt=0;
2769 clock=0;
2770 start_dmiss0=0;
2771 start_dmiss1=0;
2772 start_dmiss2=0;
2773 start_dmiss3=0;
2774 start_dmiss4=0;
2775 start_dmiss5=0;
2776 start_dmiss6=0;
2777 start_dmiss7=0;
2778 number_dmiss=0;
2779 start_imiss0=0;
2780 start_imiss1=0;
2781 start_imiss2=0;
2782 start_imiss3=0;
2783 start_imiss4=0;
2784 start_imiss5=0;
2785 start_imiss6=0;
2786 start_imiss7=0;
2787 active_imiss0=0;
2788 active_imiss1=0;
2789 active_imiss2=0;
2790 active_imiss3=0;
2791 active_imiss4=0;
2792 active_imiss5=0;
2793 active_imiss6=0;
2794 active_imiss7=0;
2795 first_imiss0=0;
2796 first_imiss1=0;
2797 first_imiss2=0;
2798 first_imiss3=0;
2799 first_imiss4=0;
2800 first_imiss5=0;
2801 first_imiss6=0;
2802 first_imiss7=0;
2803 number_imiss=0;
2804 sum_dmiss_latency=0;
2805 sum_imiss_latency=0;
2806 asi_in_progress_b <= 8'h0;
2807 asi_in_progress_w <= 8'h0;
2808 asi_in_progress_fx4 <= 8'h0;
2809 tlu_valid <= 8'h0;
2810 div_idest <= 8'h0;
2811 div_fdest <= 8'h0;
2812 lsu_state <= 8'h0;
2813 clkstop_d1 <=0;
2814 clkstop_d2 <=0;
2815 clkstop_d3 <=0;
2816 clkstop_d4 <=0;
2817 clkstop_d5 <=0;
2818
2819end //}
2820
2821wire [7:0] asi_store_flush_w = {`SPC1.lsu.sbs7.flush_st_w,
2822 `SPC1.lsu.sbs6.flush_st_w,
2823 `SPC1.lsu.sbs5.flush_st_w,
2824 `SPC1.lsu.sbs4.flush_st_w,
2825 `SPC1.lsu.sbs3.flush_st_w,
2826 `SPC1.lsu.sbs2.flush_st_w,
2827 `SPC1.lsu.sbs1.flush_st_w,
2828 `SPC1.lsu.sbs0.flush_st_w};
2829
2830wire [7:0] store_sync = {`SPC1.lsu.sbs7.trap_sync,
2831 `SPC1.lsu.sbs6.trap_sync,
2832 `SPC1.lsu.sbs5.trap_sync,
2833 `SPC1.lsu.sbs4.trap_sync,
2834 `SPC1.lsu.sbs3.trap_sync,
2835 `SPC1.lsu.sbs2.trap_sync,
2836 `SPC1.lsu.sbs1.trap_sync,
2837 `SPC1.lsu.sbs0.trap_sync};
2838wire [7:0] sync_reset = {`SPC1.lsu.sbs7.sync_state_rst,
2839 `SPC1.lsu.sbs6.sync_state_rst,
2840 `SPC1.lsu.sbs5.sync_state_rst,
2841 `SPC1.lsu.sbs4.sync_state_rst,
2842 `SPC1.lsu.sbs3.sync_state_rst,
2843 `SPC1.lsu.sbs2.sync_state_rst,
2844 `SPC1.lsu.sbs1.sync_state_rst,
2845 `SPC1.lsu.sbs0.sync_state_rst};
2846
2847//--------------------
2848// Used in nas_pipe for TSB Config Regs Capture/Compare
2849// ADD_TSB_CFG
2850
2851// NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
2852`ifndef EMUL
2853wire [63:0] ctxt_z_tsb_cfg0_reg [7:0]; // 1 per thread
2854wire [63:0] ctxt_z_tsb_cfg1_reg [7:0];
2855wire [63:0] ctxt_z_tsb_cfg2_reg [7:0];
2856wire [63:0] ctxt_z_tsb_cfg3_reg [7:0];
2857wire [63:0] ctxt_nz_tsb_cfg0_reg [7:0];
2858wire [63:0] ctxt_nz_tsb_cfg1_reg [7:0];
2859wire [63:0] ctxt_nz_tsb_cfg2_reg [7:0];
2860wire [63:0] ctxt_nz_tsb_cfg3_reg [7:0];
2861
2862// There are 32 entries in each MMU MRA but not all are needed.
2863// Indexing:
2864// Bits 4:3 of the address are the lower two bits of the TID
2865// Bits 2:0 of the address select the register as below
2866// mmu.mra0.array.mem for T0-T3
2867// mmu.mra1.array.mem for T4-T7
2868// (this is documented in mmu_asi_ctl.sv)
2869// z TSB cfg 0,1 address 0
2870// z TSB cfg 2,3 address 1
2871// nz TSB cfg 0,1 address 2
2872// nz TSB cfg 2,3 address 3
2873// Real range, physical offset pair 0 address 4
2874// Real range, physical offset pair 1 address 5
2875// Real range, physical offset pair 2 address 6
2876// Real range, physical offset pair 3 address 7
2877
2878wire [83:0] mmu_mra0_a0 = `SPC1.mmu.mra0.array.mem[0];
2879wire [83:0] mmu_mra0_a8 = `SPC1.mmu.mra0.array.mem[8];
2880wire [83:0] mmu_mra0_a16 = `SPC1.mmu.mra0.array.mem[16];
2881wire [83:0] mmu_mra0_a24 = `SPC1.mmu.mra0.array.mem[24];
2882wire [83:0] mmu_mra0_a1 = `SPC1.mmu.mra0.array.mem[1];
2883wire [83:0] mmu_mra0_a9 = `SPC1.mmu.mra0.array.mem[9];
2884wire [83:0] mmu_mra0_a17 = `SPC1.mmu.mra0.array.mem[17];
2885wire [83:0] mmu_mra0_a25 = `SPC1.mmu.mra0.array.mem[25];
2886wire [83:0] mmu_mra0_a2 = `SPC1.mmu.mra0.array.mem[2];
2887wire [83:0] mmu_mra0_a10 = `SPC1.mmu.mra0.array.mem[10];
2888wire [83:0] mmu_mra0_a18 = `SPC1.mmu.mra0.array.mem[18];
2889wire [83:0] mmu_mra0_a26 = `SPC1.mmu.mra0.array.mem[26];
2890wire [83:0] mmu_mra0_a3 = `SPC1.mmu.mra0.array.mem[3];
2891wire [83:0] mmu_mra0_a11 = `SPC1.mmu.mra0.array.mem[11];
2892wire [83:0] mmu_mra0_a19 = `SPC1.mmu.mra0.array.mem[19];
2893wire [83:0] mmu_mra0_a27 = `SPC1.mmu.mra0.array.mem[27];
2894wire [83:0] mmu_mra1_a0 = `SPC1.mmu.mra1.array.mem[0];
2895wire [83:0] mmu_mra1_a8 = `SPC1.mmu.mra1.array.mem[8];
2896wire [83:0] mmu_mra1_a16 = `SPC1.mmu.mra1.array.mem[16];
2897wire [83:0] mmu_mra1_a24 = `SPC1.mmu.mra1.array.mem[24];
2898wire [83:0] mmu_mra1_a1 = `SPC1.mmu.mra1.array.mem[1];
2899wire [83:0] mmu_mra1_a9 = `SPC1.mmu.mra1.array.mem[9];
2900wire [83:0] mmu_mra1_a17 = `SPC1.mmu.mra1.array.mem[17];
2901wire [83:0] mmu_mra1_a25 = `SPC1.mmu.mra1.array.mem[25];
2902wire [83:0] mmu_mra1_a2 = `SPC1.mmu.mra1.array.mem[2];
2903wire [83:0] mmu_mra1_a10 = `SPC1.mmu.mra1.array.mem[10];
2904wire [83:0] mmu_mra1_a18 = `SPC1.mmu.mra1.array.mem[18];
2905wire [83:0] mmu_mra1_a26 = `SPC1.mmu.mra1.array.mem[26];
2906wire [83:0] mmu_mra1_a3 = `SPC1.mmu.mra1.array.mem[3];
2907wire [83:0] mmu_mra1_a11 = `SPC1.mmu.mra1.array.mem[11];
2908wire [83:0] mmu_mra1_a19 = `SPC1.mmu.mra1.array.mem[19];
2909wire [83:0] mmu_mra1_a27 = `SPC1.mmu.mra1.array.mem[27];
2910
2911
2912// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
2913// as well as the physical to architectural bit position relationships.
2914assign ctxt_z_tsb_cfg0_reg[0] = {`SPC1.mmu.asi.t0_e_z[0], // z_tsb_cfg0[63]
2915 mmu_mra0_a0[76:75], // z_tsb_cfg0[62:61]
2916 21'b0, // z_tsb_cfg0[60:40]
2917 mmu_mra0_a0[74:48], // z_tsb_cfg0[39:13]
2918 4'b0, // z_tsb_cfg0[12:9]
2919 mmu_mra0_a0[47:39] // z_tsb_cfg0[8:0]
2920 };
2921assign ctxt_z_tsb_cfg1_reg[0] = {`SPC1.mmu.asi.t0_e_z[1], // z_tsb_cfg0[63]
2922 mmu_mra0_a0[37:36], // z_tsb_cfg0[62:61]
2923 21'b0, // z_tsb_cfg0[60:40]
2924 mmu_mra0_a0[35:9], // z_tsb_cfg0[39:13]
2925 4'b0, // z_tsb_cfg0[12:9]
2926 mmu_mra0_a0[8:0] // z_tsb_cfg0[8:0]
2927 };
2928assign ctxt_z_tsb_cfg2_reg[0] = {`SPC1.mmu.asi.t0_e_z[2], // z_tsb_cfg0[63]
2929 mmu_mra0_a1[76:75], // z_tsb_cfg0[62:61]
2930 21'b0, // z_tsb_cfg0[60:40]
2931 mmu_mra0_a1[74:48], // z_tsb_cfg0[39:13]
2932 4'b0, // z_tsb_cfg0[12:9]
2933 mmu_mra0_a1[47:39] // z_tsb_cfg0[8:0]
2934 };
2935assign ctxt_z_tsb_cfg3_reg[0] = {`SPC1.mmu.asi.t0_e_z[3], // z_tsb_cfg0[63]
2936 mmu_mra0_a1[37:36], // z_tsb_cfg0[62:61]
2937 21'b0, // z_tsb_cfg0[60:40]
2938 mmu_mra0_a1[35:9], // z_tsb_cfg0[39:13]
2939 4'b0, // z_tsb_cfg0[12:9]
2940 mmu_mra0_a1[8:0] // z_tsb_cfg0[8:0]
2941 };
2942assign ctxt_nz_tsb_cfg0_reg[0] = {`SPC1.mmu.asi.t0_e_nz[0],// z_tsb_cfg0[63]
2943 mmu_mra0_a2[76:75], // z_tsb_cfg0[62:61]
2944 21'b0, // z_tsb_cfg0[60:40]
2945 mmu_mra0_a2[74:48], // z_tsb_cfg0[39:13]
2946 4'b0, // z_tsb_cfg0[12:9]
2947 mmu_mra0_a2[47:39] // z_tsb_cfg0[8:0]
2948 };
2949assign ctxt_nz_tsb_cfg1_reg[0] = {`SPC1.mmu.asi.t0_e_nz[1],// z_tsb_cfg0[63]
2950 mmu_mra0_a2[37:36], // z_tsb_cfg0[62:61]
2951 21'b0, // z_tsb_cfg0[60:40]
2952 mmu_mra0_a2[35:9], // z_tsb_cfg0[39:13]
2953 4'b0, // z_tsb_cfg0[12:9]
2954 mmu_mra0_a2[8:0] // z_tsb_cfg0[8:0]
2955 };
2956assign ctxt_nz_tsb_cfg2_reg[0] = {`SPC1.mmu.asi.t0_e_nz[2],// z_tsb_cfg0[63]
2957 mmu_mra0_a3[76:75], // z_tsb_cfg0[62:61]
2958 21'b0, // z_tsb_cfg0[60:40]
2959 mmu_mra0_a3[74:48], // z_tsb_cfg0[39:13]
2960 4'b0, // z_tsb_cfg0[12:9]
2961 mmu_mra0_a3[47:39] // z_tsb_cfg0[8:0]
2962 };
2963assign ctxt_nz_tsb_cfg3_reg[0] = {`SPC1.mmu.asi.t0_e_nz[3],// z_tsb_cfg0[63]
2964 mmu_mra0_a3[37:36], // z_tsb_cfg0[62:61]
2965 21'b0, // z_tsb_cfg0[60:40]
2966 mmu_mra0_a3[35:9], // z_tsb_cfg0[39:13]
2967 4'b0, // z_tsb_cfg0[12:9]
2968 mmu_mra0_a3[8:0] // z_tsb_cfg0[8:0]
2969 };
2970
2971// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
2972// as well as the physical to architectural bit position relationships.
2973assign ctxt_z_tsb_cfg0_reg[1] = {`SPC1.mmu.asi.t1_e_z[0], // z_tsb_cfg0[63]
2974 mmu_mra0_a8[76:75], // z_tsb_cfg0[62:61]
2975 21'b0, // z_tsb_cfg0[60:40]
2976 mmu_mra0_a8[74:48], // z_tsb_cfg0[39:13]
2977 4'b0, // z_tsb_cfg0[12:9]
2978 mmu_mra0_a8[47:39] // z_tsb_cfg0[8:0]
2979 };
2980assign ctxt_z_tsb_cfg1_reg[1] = {`SPC1.mmu.asi.t1_e_z[1], // z_tsb_cfg0[63]
2981 mmu_mra0_a8[37:36], // z_tsb_cfg0[62:61]
2982 21'b0, // z_tsb_cfg0[60:40]
2983 mmu_mra0_a8[35:9], // z_tsb_cfg0[39:13]
2984 4'b0, // z_tsb_cfg0[12:9]
2985 mmu_mra0_a8[8:0] // z_tsb_cfg0[8:0]
2986 };
2987assign ctxt_z_tsb_cfg2_reg[1] = {`SPC1.mmu.asi.t1_e_z[2], // z_tsb_cfg0[63]
2988 mmu_mra0_a9[76:75], // z_tsb_cfg0[62:61]
2989 21'b0, // z_tsb_cfg0[60:40]
2990 mmu_mra0_a9[74:48], // z_tsb_cfg0[39:13]
2991 4'b0, // z_tsb_cfg0[12:9]
2992 mmu_mra0_a9[47:39] // z_tsb_cfg0[8:0]
2993 };
2994assign ctxt_z_tsb_cfg3_reg[1] = {`SPC1.mmu.asi.t1_e_z[3], // z_tsb_cfg0[63]
2995 mmu_mra0_a9[37:36], // z_tsb_cfg0[62:61]
2996 21'b0, // z_tsb_cfg0[60:40]
2997 mmu_mra0_a9[35:9], // z_tsb_cfg0[39:13]
2998 4'b0, // z_tsb_cfg0[12:9]
2999 mmu_mra0_a9[8:0] // z_tsb_cfg0[8:0]
3000 };
3001assign ctxt_nz_tsb_cfg0_reg[1] = {`SPC1.mmu.asi.t1_e_nz[0],// z_tsb_cfg0[63]
3002 mmu_mra0_a10[76:75], // z_tsb_cfg0[62:61]
3003 21'b0, // z_tsb_cfg0[60:40]
3004 mmu_mra0_a10[74:48], // z_tsb_cfg0[39:13]
3005 4'b0, // z_tsb_cfg0[12:9]
3006 mmu_mra0_a10[47:39] // z_tsb_cfg0[8:0]
3007 };
3008assign ctxt_nz_tsb_cfg1_reg[1] = {`SPC1.mmu.asi.t1_e_nz[1],// z_tsb_cfg0[63]
3009 mmu_mra0_a10[37:36], // z_tsb_cfg0[62:61]
3010 21'b0, // z_tsb_cfg0[60:40]
3011 mmu_mra0_a10[35:9], // z_tsb_cfg0[39:13]
3012 4'b0, // z_tsb_cfg0[12:9]
3013 mmu_mra0_a10[8:0] // z_tsb_cfg0[8:0]
3014 };
3015assign ctxt_nz_tsb_cfg2_reg[1] = {`SPC1.mmu.asi.t1_e_nz[2],// z_tsb_cfg0[63]
3016 mmu_mra0_a11[76:75], // z_tsb_cfg0[62:61]
3017 21'b0, // z_tsb_cfg0[60:40]
3018 mmu_mra0_a11[74:48], // z_tsb_cfg0[39:13]
3019 4'b0, // z_tsb_cfg0[12:9]
3020 mmu_mra0_a11[47:39] // z_tsb_cfg0[8:0]
3021 };
3022assign ctxt_nz_tsb_cfg3_reg[1] = {`SPC1.mmu.asi.t1_e_nz[3],// z_tsb_cfg0[63]
3023 mmu_mra0_a11[37:36], // z_tsb_cfg0[62:61]
3024 21'b0, // z_tsb_cfg0[60:40]
3025 mmu_mra0_a11[35:9], // z_tsb_cfg0[39:13]
3026 4'b0, // z_tsb_cfg0[12:9]
3027 mmu_mra0_a11[8:0] // z_tsb_cfg0[8:0]
3028 };
3029
3030// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
3031// as well as the physical to architectural bit position relationships.
3032assign ctxt_z_tsb_cfg0_reg[2] = {`SPC1.mmu.asi.t2_e_z[0], // z_tsb_cfg0[63]
3033 mmu_mra0_a16[76:75], // z_tsb_cfg0[62:61]
3034 21'b0, // z_tsb_cfg0[60:40]
3035 mmu_mra0_a16[74:48], // z_tsb_cfg0[39:13]
3036 4'b0, // z_tsb_cfg0[12:9]
3037 mmu_mra0_a16[47:39] // z_tsb_cfg0[8:0]
3038 };
3039assign ctxt_z_tsb_cfg1_reg[2] = {`SPC1.mmu.asi.t2_e_z[1], // z_tsb_cfg0[63]
3040 mmu_mra0_a16[37:36], // z_tsb_cfg0[62:61]
3041 21'b0, // z_tsb_cfg0[60:40]
3042 mmu_mra0_a16[35:9], // z_tsb_cfg0[39:13]
3043 4'b0, // z_tsb_cfg0[12:9]
3044 mmu_mra0_a16[8:0] // z_tsb_cfg0[8:0]
3045 };
3046assign ctxt_z_tsb_cfg2_reg[2] = {`SPC1.mmu.asi.t2_e_z[2], // z_tsb_cfg0[63]
3047 mmu_mra0_a17[76:75], // z_tsb_cfg0[62:61]
3048 21'b0, // z_tsb_cfg0[60:40]
3049 mmu_mra0_a17[74:48], // z_tsb_cfg0[39:13]
3050 4'b0, // z_tsb_cfg0[12:9]
3051 mmu_mra0_a17[47:39] // z_tsb_cfg0[8:0]
3052 };
3053assign ctxt_z_tsb_cfg3_reg[2] = {`SPC1.mmu.asi.t2_e_z[3], // z_tsb_cfg0[63]
3054 mmu_mra0_a17[37:36], // z_tsb_cfg0[62:61]
3055 21'b0, // z_tsb_cfg0[60:40]
3056 mmu_mra0_a17[35:9], // z_tsb_cfg0[39:13]
3057 4'b0, // z_tsb_cfg0[12:9]
3058 mmu_mra0_a17[8:0] // z_tsb_cfg0[8:0]
3059 };
3060assign ctxt_nz_tsb_cfg0_reg[2] = {`SPC1.mmu.asi.t2_e_nz[0],// z_tsb_cfg0[63]
3061 mmu_mra0_a18[76:75], // z_tsb_cfg0[62:61]
3062 21'b0, // z_tsb_cfg0[60:40]
3063 mmu_mra0_a18[74:48], // z_tsb_cfg0[39:13]
3064 4'b0, // z_tsb_cfg0[12:9]
3065 mmu_mra0_a18[47:39] // z_tsb_cfg0[8:0]
3066 };
3067assign ctxt_nz_tsb_cfg1_reg[2] = {`SPC1.mmu.asi.t2_e_nz[1],// z_tsb_cfg0[63]
3068 mmu_mra0_a18[37:36], // z_tsb_cfg0[62:61]
3069 21'b0, // z_tsb_cfg0[60:40]
3070 mmu_mra0_a18[35:9], // z_tsb_cfg0[39:13]
3071 4'b0, // z_tsb_cfg0[12:9]
3072 mmu_mra0_a18[8:0] // z_tsb_cfg0[8:0]
3073 };
3074assign ctxt_nz_tsb_cfg2_reg[2] = {`SPC1.mmu.asi.t2_e_nz[2],// z_tsb_cfg0[63]
3075 mmu_mra0_a19[76:75], // z_tsb_cfg0[62:61]
3076 21'b0, // z_tsb_cfg0[60:40]
3077 mmu_mra0_a19[74:48], // z_tsb_cfg0[39:13]
3078 4'b0, // z_tsb_cfg0[12:9]
3079 mmu_mra0_a19[47:39] // z_tsb_cfg0[8:0]
3080 };
3081assign ctxt_nz_tsb_cfg3_reg[2] = {`SPC1.mmu.asi.t2_e_nz[3],// z_tsb_cfg0[63]
3082 mmu_mra0_a19[37:36], // z_tsb_cfg0[62:61]
3083 21'b0, // z_tsb_cfg0[60:40]
3084 mmu_mra0_a19[35:9], // z_tsb_cfg0[39:13]
3085 4'b0, // z_tsb_cfg0[12:9]
3086 mmu_mra0_a19[8:0] // z_tsb_cfg0[8:0]
3087 };
3088
3089// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
3090// as well as the physical to architectural bit position relationships.
3091assign ctxt_z_tsb_cfg0_reg[3] = {`SPC1.mmu.asi.t3_e_z[0], // z_tsb_cfg0[63]
3092 mmu_mra0_a24[76:75], // z_tsb_cfg0[62:61]
3093 21'b0, // z_tsb_cfg0[60:40]
3094 mmu_mra0_a24[74:48], // z_tsb_cfg0[39:13]
3095 4'b0, // z_tsb_cfg0[12:9]
3096 mmu_mra0_a24[47:39] // z_tsb_cfg0[8:0]
3097 };
3098assign ctxt_z_tsb_cfg1_reg[3] = {`SPC1.mmu.asi.t3_e_z[1], // z_tsb_cfg0[63]
3099 mmu_mra0_a24[37:36], // z_tsb_cfg0[62:61]
3100 21'b0, // z_tsb_cfg0[60:40]
3101 mmu_mra0_a24[35:9], // z_tsb_cfg0[39:13]
3102 4'b0, // z_tsb_cfg0[12:9]
3103 mmu_mra0_a24[8:0] // z_tsb_cfg0[8:0]
3104 };
3105assign ctxt_z_tsb_cfg2_reg[3] = {`SPC1.mmu.asi.t3_e_z[2], // z_tsb_cfg0[63]
3106 mmu_mra0_a25[76:75], // z_tsb_cfg0[62:61]
3107 21'b0, // z_tsb_cfg0[60:40]
3108 mmu_mra0_a25[74:48], // z_tsb_cfg0[39:13]
3109 4'b0, // z_tsb_cfg0[12:9]
3110 mmu_mra0_a25[47:39] // z_tsb_cfg0[8:0]
3111 };
3112assign ctxt_z_tsb_cfg3_reg[3] = {`SPC1.mmu.asi.t3_e_z[3], // z_tsb_cfg0[63]
3113 mmu_mra0_a25[37:36], // z_tsb_cfg0[62:61]
3114 21'b0, // z_tsb_cfg0[60:40]
3115 mmu_mra0_a25[35:9], // z_tsb_cfg0[39:13]
3116 4'b0, // z_tsb_cfg0[12:9]
3117 mmu_mra0_a25[8:0] // z_tsb_cfg0[8:0]
3118 };
3119assign ctxt_nz_tsb_cfg0_reg[3] = {`SPC1.mmu.asi.t3_e_nz[0],// z_tsb_cfg0[63]
3120 mmu_mra0_a26[76:75], // z_tsb_cfg0[62:61]
3121 21'b0, // z_tsb_cfg0[60:40]
3122 mmu_mra0_a26[74:48], // z_tsb_cfg0[39:13]
3123 4'b0, // z_tsb_cfg0[12:9]
3124 mmu_mra0_a26[47:39] // z_tsb_cfg0[8:0]
3125 };
3126assign ctxt_nz_tsb_cfg1_reg[3] = {`SPC1.mmu.asi.t3_e_nz[1],// z_tsb_cfg0[63]
3127 mmu_mra0_a26[37:36], // z_tsb_cfg0[62:61]
3128 21'b0, // z_tsb_cfg0[60:40]
3129 mmu_mra0_a26[35:9], // z_tsb_cfg0[39:13]
3130 4'b0, // z_tsb_cfg0[12:9]
3131 mmu_mra0_a26[8:0] // z_tsb_cfg0[8:0]
3132 };
3133assign ctxt_nz_tsb_cfg2_reg[3] = {`SPC1.mmu.asi.t3_e_nz[2],// z_tsb_cfg0[63]
3134 mmu_mra0_a27[76:75], // z_tsb_cfg0[62:61]
3135 21'b0, // z_tsb_cfg0[60:40]
3136 mmu_mra0_a27[74:48], // z_tsb_cfg0[39:13]
3137 4'b0, // z_tsb_cfg0[12:9]
3138 mmu_mra0_a27[47:39] // z_tsb_cfg0[8:0]
3139 };
3140assign ctxt_nz_tsb_cfg3_reg[3] = {`SPC1.mmu.asi.t3_e_nz[3],// z_tsb_cfg0[63]
3141 mmu_mra0_a27[37:36], // z_tsb_cfg0[62:61]
3142 21'b0, // z_tsb_cfg0[60:40]
3143 mmu_mra0_a27[35:9], // z_tsb_cfg0[39:13]
3144 4'b0, // z_tsb_cfg0[12:9]
3145 mmu_mra0_a27[8:0] // z_tsb_cfg0[8:0]
3146 };
3147
3148// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
3149// as well as the physical to architectural bit position relationships.
3150assign ctxt_z_tsb_cfg0_reg[4] = {`SPC1.mmu.asi.t4_e_z[0], // z_tsb_cfg0[63]
3151 mmu_mra1_a0[76:75], // z_tsb_cfg0[62:61]
3152 21'b0, // z_tsb_cfg0[60:40]
3153 mmu_mra1_a0[74:48], // z_tsb_cfg0[39:13]
3154 4'b0, // z_tsb_cfg0[12:9]
3155 mmu_mra1_a0[47:39] // z_tsb_cfg0[8:0]
3156 };
3157assign ctxt_z_tsb_cfg1_reg[4] = {`SPC1.mmu.asi.t4_e_z[1], // z_tsb_cfg0[63]
3158 mmu_mra1_a0[37:36], // z_tsb_cfg0[62:61]
3159 21'b0, // z_tsb_cfg0[60:40]
3160 mmu_mra1_a0[35:9], // z_tsb_cfg0[39:13]
3161 4'b0, // z_tsb_cfg0[12:9]
3162 mmu_mra1_a0[8:0] // z_tsb_cfg0[8:0]
3163 };
3164assign ctxt_z_tsb_cfg2_reg[4] = {`SPC1.mmu.asi.t4_e_z[2], // z_tsb_cfg0[63]
3165 mmu_mra1_a1[76:75], // z_tsb_cfg0[62:61]
3166 21'b0, // z_tsb_cfg0[60:40]
3167 mmu_mra1_a1[74:48], // z_tsb_cfg0[39:13]
3168 4'b0, // z_tsb_cfg0[12:9]
3169 mmu_mra1_a1[47:39] // z_tsb_cfg0[8:0]
3170 };
3171assign ctxt_z_tsb_cfg3_reg[4] = {`SPC1.mmu.asi.t4_e_z[3], // z_tsb_cfg0[63]
3172 mmu_mra1_a1[37:36], // z_tsb_cfg0[62:61]
3173 21'b0, // z_tsb_cfg0[60:40]
3174 mmu_mra1_a1[35:9], // z_tsb_cfg0[39:13]
3175 4'b0, // z_tsb_cfg0[12:9]
3176 mmu_mra1_a1[8:0] // z_tsb_cfg0[8:0]
3177 };
3178assign ctxt_nz_tsb_cfg0_reg[4] = {`SPC1.mmu.asi.t4_e_nz[0],// z_tsb_cfg0[63]
3179 mmu_mra1_a2[76:75], // z_tsb_cfg0[62:61]
3180 21'b0, // z_tsb_cfg0[60:40]
3181 mmu_mra1_a2[74:48], // z_tsb_cfg0[39:13]
3182 4'b0, // z_tsb_cfg0[12:9]
3183 mmu_mra1_a2[47:39] // z_tsb_cfg0[8:0]
3184 };
3185assign ctxt_nz_tsb_cfg1_reg[4] = {`SPC1.mmu.asi.t4_e_nz[1],// z_tsb_cfg0[63]
3186 mmu_mra1_a2[37:36], // z_tsb_cfg0[62:61]
3187 21'b0, // z_tsb_cfg0[60:40]
3188 mmu_mra1_a2[35:9], // z_tsb_cfg0[39:13]
3189 4'b0, // z_tsb_cfg0[12:9]
3190 mmu_mra1_a2[8:0] // z_tsb_cfg0[8:0]
3191 };
3192assign ctxt_nz_tsb_cfg2_reg[4] = {`SPC1.mmu.asi.t4_e_nz[2],// z_tsb_cfg0[63]
3193 mmu_mra1_a3[76:75], // z_tsb_cfg0[62:61]
3194 21'b0, // z_tsb_cfg0[60:40]
3195 mmu_mra1_a3[74:48], // z_tsb_cfg0[39:13]
3196 4'b0, // z_tsb_cfg0[12:9]
3197 mmu_mra1_a3[47:39] // z_tsb_cfg0[8:0]
3198 };
3199assign ctxt_nz_tsb_cfg3_reg[4] = {`SPC1.mmu.asi.t4_e_nz[3],// z_tsb_cfg0[63]
3200 mmu_mra1_a3[37:36], // z_tsb_cfg0[62:61]
3201 21'b0, // z_tsb_cfg0[60:40]
3202 mmu_mra1_a3[35:9], // z_tsb_cfg0[39:13]
3203 4'b0, // z_tsb_cfg0[12:9]
3204 mmu_mra1_a3[8:0] // z_tsb_cfg0[8:0]
3205 };
3206
3207// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
3208// as well as the physical to architectural bit position relationships.
3209assign ctxt_z_tsb_cfg0_reg[5] = {`SPC1.mmu.asi.t5_e_z[0], // z_tsb_cfg0[63]
3210 mmu_mra1_a8[76:75], // z_tsb_cfg0[62:61]
3211 21'b0, // z_tsb_cfg0[60:40]
3212 mmu_mra1_a8[74:48], // z_tsb_cfg0[39:13]
3213 4'b0, // z_tsb_cfg0[12:9]
3214 mmu_mra1_a8[47:39] // z_tsb_cfg0[8:0]
3215 };
3216assign ctxt_z_tsb_cfg1_reg[5] = {`SPC1.mmu.asi.t5_e_z[1], // z_tsb_cfg0[63]
3217 mmu_mra1_a8[37:36], // z_tsb_cfg0[62:61]
3218 21'b0, // z_tsb_cfg0[60:40]
3219 mmu_mra1_a8[35:9], // z_tsb_cfg0[39:13]
3220 4'b0, // z_tsb_cfg0[12:9]
3221 mmu_mra1_a8[8:0] // z_tsb_cfg0[8:0]
3222 };
3223assign ctxt_z_tsb_cfg2_reg[5] = {`SPC1.mmu.asi.t5_e_z[2], // z_tsb_cfg0[63]
3224 mmu_mra1_a9[76:75], // z_tsb_cfg0[62:61]
3225 21'b0, // z_tsb_cfg0[60:40]
3226 mmu_mra1_a9[74:48], // z_tsb_cfg0[39:13]
3227 4'b0, // z_tsb_cfg0[12:9]
3228 mmu_mra1_a9[47:39] // z_tsb_cfg0[8:0]
3229 };
3230assign ctxt_z_tsb_cfg3_reg[5] = {`SPC1.mmu.asi.t5_e_z[3], // z_tsb_cfg0[63]
3231 mmu_mra1_a9[37:36], // z_tsb_cfg0[62:61]
3232 21'b0, // z_tsb_cfg0[60:40]
3233 mmu_mra1_a9[35:9], // z_tsb_cfg0[39:13]
3234 4'b0, // z_tsb_cfg0[12:9]
3235 mmu_mra1_a9[8:0] // z_tsb_cfg0[8:0]
3236 };
3237assign ctxt_nz_tsb_cfg0_reg[5] = {`SPC1.mmu.asi.t5_e_nz[0],// z_tsb_cfg0[63]
3238 mmu_mra1_a10[76:75], // z_tsb_cfg0[62:61]
3239 21'b0, // z_tsb_cfg0[60:40]
3240 mmu_mra1_a10[74:48], // z_tsb_cfg0[39:13]
3241 4'b0, // z_tsb_cfg0[12:9]
3242 mmu_mra1_a10[47:39] // z_tsb_cfg0[8:0]
3243 };
3244assign ctxt_nz_tsb_cfg1_reg[5] = {`SPC1.mmu.asi.t5_e_nz[1],// z_tsb_cfg0[63]
3245 mmu_mra1_a10[37:36], // z_tsb_cfg0[62:61]
3246 21'b0, // z_tsb_cfg0[60:40]
3247 mmu_mra1_a10[35:9], // z_tsb_cfg0[39:13]
3248 4'b0, // z_tsb_cfg0[12:9]
3249 mmu_mra1_a10[8:0] // z_tsb_cfg0[8:0]
3250 };
3251assign ctxt_nz_tsb_cfg2_reg[5] = {`SPC1.mmu.asi.t5_e_nz[2],// z_tsb_cfg0[63]
3252 mmu_mra1_a11[76:75], // z_tsb_cfg0[62:61]
3253 21'b0, // z_tsb_cfg0[60:40]
3254 mmu_mra1_a11[74:48], // z_tsb_cfg0[39:13]
3255 4'b0, // z_tsb_cfg0[12:9]
3256 mmu_mra1_a11[47:39] // z_tsb_cfg0[8:0]
3257 };
3258assign ctxt_nz_tsb_cfg3_reg[5] = {`SPC1.mmu.asi.t5_e_nz[3],// z_tsb_cfg0[63]
3259 mmu_mra1_a11[37:36], // z_tsb_cfg0[62:61]
3260 21'b0, // z_tsb_cfg0[60:40]
3261 mmu_mra1_a11[35:9], // z_tsb_cfg0[39:13]
3262 4'b0, // z_tsb_cfg0[12:9]
3263 mmu_mra1_a11[8:0] // z_tsb_cfg0[8:0]
3264 };
3265
3266// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
3267// as well as the physical to architectural bit position relationships.
3268assign ctxt_z_tsb_cfg0_reg[6] = {`SPC1.mmu.asi.t6_e_z[0], // z_tsb_cfg0[63]
3269 mmu_mra1_a16[76:75], // z_tsb_cfg0[62:61]
3270 21'b0, // z_tsb_cfg0[60:40]
3271 mmu_mra1_a16[74:48], // z_tsb_cfg0[39:13]
3272 4'b0, // z_tsb_cfg0[12:9]
3273 mmu_mra1_a16[47:39] // z_tsb_cfg0[8:0]
3274 };
3275assign ctxt_z_tsb_cfg1_reg[6] = {`SPC1.mmu.asi.t6_e_z[1], // z_tsb_cfg0[63]
3276 mmu_mra1_a16[37:36], // z_tsb_cfg0[62:61]
3277 21'b0, // z_tsb_cfg0[60:40]
3278 mmu_mra1_a16[35:9], // z_tsb_cfg0[39:13]
3279 4'b0, // z_tsb_cfg0[12:9]
3280 mmu_mra1_a16[8:0] // z_tsb_cfg0[8:0]
3281 };
3282assign ctxt_z_tsb_cfg2_reg[6] = {`SPC1.mmu.asi.t6_e_z[2], // z_tsb_cfg0[63]
3283 mmu_mra1_a17[76:75], // z_tsb_cfg0[62:61]
3284 21'b0, // z_tsb_cfg0[60:40]
3285 mmu_mra1_a17[74:48], // z_tsb_cfg0[39:13]
3286 4'b0, // z_tsb_cfg0[12:9]
3287 mmu_mra1_a17[47:39] // z_tsb_cfg0[8:0]
3288 };
3289assign ctxt_z_tsb_cfg3_reg[6] = {`SPC1.mmu.asi.t6_e_z[3], // z_tsb_cfg0[63]
3290 mmu_mra1_a17[37:36], // z_tsb_cfg0[62:61]
3291 21'b0, // z_tsb_cfg0[60:40]
3292 mmu_mra1_a17[35:9], // z_tsb_cfg0[39:13]
3293 4'b0, // z_tsb_cfg0[12:9]
3294 mmu_mra1_a17[8:0] // z_tsb_cfg0[8:0]
3295 };
3296assign ctxt_nz_tsb_cfg0_reg[6] = {`SPC1.mmu.asi.t6_e_nz[0],// z_tsb_cfg0[63]
3297 mmu_mra1_a18[76:75], // z_tsb_cfg0[62:61]
3298 21'b0, // z_tsb_cfg0[60:40]
3299 mmu_mra1_a18[74:48], // z_tsb_cfg0[39:13]
3300 4'b0, // z_tsb_cfg0[12:9]
3301 mmu_mra1_a18[47:39] // z_tsb_cfg0[8:0]
3302 };
3303assign ctxt_nz_tsb_cfg1_reg[6] = {`SPC1.mmu.asi.t6_e_nz[1],// z_tsb_cfg0[63]
3304 mmu_mra1_a18[37:36], // z_tsb_cfg0[62:61]
3305 21'b0, // z_tsb_cfg0[60:40]
3306 mmu_mra1_a18[35:9], // z_tsb_cfg0[39:13]
3307 4'b0, // z_tsb_cfg0[12:9]
3308 mmu_mra1_a18[8:0] // z_tsb_cfg0[8:0]
3309 };
3310assign ctxt_nz_tsb_cfg2_reg[6] = {`SPC1.mmu.asi.t6_e_nz[2],// z_tsb_cfg0[63]
3311 mmu_mra1_a19[76:75], // z_tsb_cfg0[62:61]
3312 21'b0, // z_tsb_cfg0[60:40]
3313 mmu_mra1_a19[74:48], // z_tsb_cfg0[39:13]
3314 4'b0, // z_tsb_cfg0[12:9]
3315 mmu_mra1_a19[47:39] // z_tsb_cfg0[8:0]
3316 };
3317assign ctxt_nz_tsb_cfg3_reg[6] = {`SPC1.mmu.asi.t6_e_nz[3],// z_tsb_cfg0[63]
3318 mmu_mra1_a19[37:36], // z_tsb_cfg0[62:61]
3319 21'b0, // z_tsb_cfg0[60:40]
3320 mmu_mra1_a19[35:9], // z_tsb_cfg0[39:13]
3321 4'b0, // z_tsb_cfg0[12:9]
3322 mmu_mra1_a19[8:0] // z_tsb_cfg0[8:0]
3323 };
3324
3325// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
3326// as well as the physical to architectural bit position relationships.
3327assign ctxt_z_tsb_cfg0_reg[7] = {`SPC1.mmu.asi.t7_e_z[0], // z_tsb_cfg0[63]
3328 mmu_mra1_a24[76:75], // z_tsb_cfg0[62:61]
3329 21'b0, // z_tsb_cfg0[60:40]
3330 mmu_mra1_a24[74:48], // z_tsb_cfg0[39:13]
3331 4'b0, // z_tsb_cfg0[12:9]
3332 mmu_mra1_a24[47:39] // z_tsb_cfg0[8:0]
3333 };
3334assign ctxt_z_tsb_cfg1_reg[7] = {`SPC1.mmu.asi.t7_e_z[1], // z_tsb_cfg0[63]
3335 mmu_mra1_a24[37:36], // z_tsb_cfg0[62:61]
3336 21'b0, // z_tsb_cfg0[60:40]
3337 mmu_mra1_a24[35:9], // z_tsb_cfg0[39:13]
3338 4'b0, // z_tsb_cfg0[12:9]
3339 mmu_mra1_a24[8:0] // z_tsb_cfg0[8:0]
3340 };
3341assign ctxt_z_tsb_cfg2_reg[7] = {`SPC1.mmu.asi.t7_e_z[2], // z_tsb_cfg0[63]
3342 mmu_mra1_a25[76:75], // z_tsb_cfg0[62:61]
3343 21'b0, // z_tsb_cfg0[60:40]
3344 mmu_mra1_a25[74:48], // z_tsb_cfg0[39:13]
3345 4'b0, // z_tsb_cfg0[12:9]
3346 mmu_mra1_a25[47:39] // z_tsb_cfg0[8:0]
3347 };
3348assign ctxt_z_tsb_cfg3_reg[7] = {`SPC1.mmu.asi.t7_e_z[3], // z_tsb_cfg0[63]
3349 mmu_mra1_a25[37:36], // z_tsb_cfg0[62:61]
3350 21'b0, // z_tsb_cfg0[60:40]
3351 mmu_mra1_a25[35:9], // z_tsb_cfg0[39:13]
3352 4'b0, // z_tsb_cfg0[12:9]
3353 mmu_mra1_a25[8:0] // z_tsb_cfg0[8:0]
3354 };
3355assign ctxt_nz_tsb_cfg0_reg[7] = {`SPC1.mmu.asi.t7_e_nz[0],// z_tsb_cfg0[63]
3356 mmu_mra1_a26[76:75], // z_tsb_cfg0[62:61]
3357 21'b0, // z_tsb_cfg0[60:40]
3358 mmu_mra1_a26[74:48], // z_tsb_cfg0[39:13]
3359 4'b0, // z_tsb_cfg0[12:9]
3360 mmu_mra1_a26[47:39] // z_tsb_cfg0[8:0]
3361 };
3362assign ctxt_nz_tsb_cfg1_reg[7] = {`SPC1.mmu.asi.t7_e_nz[1],// z_tsb_cfg0[63]
3363 mmu_mra1_a26[37:36], // z_tsb_cfg0[62:61]
3364 21'b0, // z_tsb_cfg0[60:40]
3365 mmu_mra1_a26[35:9], // z_tsb_cfg0[39:13]
3366 4'b0, // z_tsb_cfg0[12:9]
3367 mmu_mra1_a26[8:0] // z_tsb_cfg0[8:0]
3368 };
3369assign ctxt_nz_tsb_cfg2_reg[7] = {`SPC1.mmu.asi.t7_e_nz[2],// z_tsb_cfg0[63]
3370 mmu_mra1_a27[76:75], // z_tsb_cfg0[62:61]
3371 21'b0, // z_tsb_cfg0[60:40]
3372 mmu_mra1_a27[74:48], // z_tsb_cfg0[39:13]
3373 4'b0, // z_tsb_cfg0[12:9]
3374 mmu_mra1_a27[47:39] // z_tsb_cfg0[8:0]
3375 };
3376assign ctxt_nz_tsb_cfg3_reg[7] = {`SPC1.mmu.asi.t7_e_nz[3],// z_tsb_cfg0[63]
3377 mmu_mra1_a27[37:36], // z_tsb_cfg0[62:61]
3378 21'b0, // z_tsb_cfg0[60:40]
3379 mmu_mra1_a27[35:9], // z_tsb_cfg0[39:13]
3380 4'b0, // z_tsb_cfg0[12:9]
3381 mmu_mra1_a27[8:0] // z_tsb_cfg0[8:0]
3382 };
3383`endif // EMUL - ADD_TSB_CFG
3384
3385
3386// This was the original select_pc_b, the latest select_pc_b qualifies with errors
3387// But some of the error checkers need this signal without the qualification
3388// of icache errors
3389// Suppress instruction on flush or park request
3390// (clear_disrupting_flush_pending_w_in & idl_req_in)
3391// Suppress instruction for 'refetch' exception after
3392// not taken branch with annulled delay slot
3393// NOTE: 'with_errors' means that the signal actually IGNORES instruction
3394// cache errors and asserts IN SPITE OF instruction cache errors
3395wire [7:0] select_pc_b_with_errors =
3396 {{4 {~`SPC1.dec_flush_b[1]}}, {4 {~`SPC1.dec_flush_b[0]}}} &
3397 {{4 {~`SPC1.tlu.fls1.refetch_w_in}}, {4 {~`SPC1.tlu.fls0.refetch_w_in}}} &
3398 {~(`SPC1.tlu.fls1.clear_disrupting_flush_pending_w_in[3:0] &
3399 {4 {`SPC1.tlu.fls1.idl_req_in}}),
3400 ~(`SPC1.tlu.fls0.clear_disrupting_flush_pending_w_in[3:0] &
3401 {4 {`SPC1.tlu.fls0.idl_req_in}})} &
3402 {`SPC1.tlu.fls1.tid_dec_valid_b[3:0],
3403 `SPC1.tlu.fls0.tid_dec_valid_b[3:0]};
3404
3405//------------------------------------
3406// Qualify select_pc_b_with_errors to get final select_pc_b signal
3407// Qualifications are
3408// - instruction cache errors (ic_err_w_in)
3409// - disrupting single step completion requests (dsc_req_in)
3410wire [7:0] select_pc_b =
3411 select_pc_b_with_errors[7:0] &
3412 {{4 {(~`SPC1.tlu.fls1.ic_err_w_in | `SPC1.tlu.fls1.itlb_nfo_exc_b) &
3413 ~`SPC1.tlu.fls1.dsc_req_in}},
3414 {4 {(~`SPC1.tlu.fls0.ic_err_w_in | `SPC1.tlu.fls0.itlb_nfo_exc_b) &
3415 ~`SPC1.tlu.fls0.dsc_req_in}}};
3416
3417//------------------------------------
3418
3419//original select_pc_b_with errors. Select_pc_b_with_errors is no longer asserted
3420//if the inst. following an annulled delay slot of a not taken branch has a prebuffer
3421//error and it reaches B stage. I still need a signal if this happens to trigger the chkr.
3422
3423wire [7:0] select_pc_b_with_errors_and_refetch =
3424 {{4 {~`SPC1.dec_flush_b[1]}}, {4 {~`SPC1.dec_flush_b[0]}}} &
3425 {~(`SPC1.tlu.fls1.clear_disrupting_flush_pending_w_in[3:0] &
3426 {4 {`SPC1.tlu.fls1.idl_req_in}}),
3427 ~(`SPC1.tlu.fls0.clear_disrupting_flush_pending_w_in[3:0] &
3428 {4 {`SPC1.tlu.fls0.idl_req_in}})} &
3429 {`SPC1.tlu.fls1.tid_dec_valid_b[3:0],
3430 `SPC1.tlu.fls0.tid_dec_valid_b[3:0]};
3431
3432// Signals required for bench TLB sync & LDST sync
3433
3434reg tlb_bypass_m;
3435reg tlb_bypass_b;
3436reg tlb_rd_vld_m;
3437reg tlb_rd_vld_b;
3438reg lsu_tl_gt_0_b;
3439reg [7:0] dcc_asi_b;
3440reg asi_internal_w;
3441
3442always @ (posedge `BENCH_SPC1_GCLK) begin // {
3443
3444 clkstop_d1 <= `SPC1.tcu_clk_stop;
3445 clkstop_d2 <= clkstop_d1;
3446 clkstop_d3 <= clkstop_d2;
3447 clkstop_d4 <= clkstop_d3;
3448 clkstop_d5 <= clkstop_d4;
3449
3450 tlb_bypass_m <= `SPC1.lsu.tlb.tlb_bypass;
3451 tlb_bypass_b <= tlb_bypass_m;
3452 tlb_rd_vld_m <= `SPC1.lsu.tlb.tlb_rd_vld | `SPC1.lsu.tlb.tlb_cam_vld;
3453 tlb_rd_vld_b <= tlb_rd_vld_m;
3454
3455 // This signal is only valid for LD/ST instructions
3456 lsu_tl_gt_0_b <= `SPC1.lsu.dcc.tl_gt_0_m;
3457
3458 // Can't use lsu.dcc_asi_b for tlb_sync so pipeline from M to B
3459 dcc_asi_b <= `SPC1.lsu.dcc_asi_m;
3460
3461 // LD/ST that will not issue to the crossbar
3462 asi_internal_w <= `SPC1.lsu.dcc.asi_internal_b;
3463end // }
3464
3465// TL determines whether Nucleus or Primary
3466wire [7:0] asi_num = `SPC1.lsu.dcc.altspace_ldst_b ?
3467 dcc_asi_b :
3468 (lsu_tl_gt_0_b ? 8'h04 : 8'h80);
3469
3470wire [7:0] itlb_miss = { (`SPC1.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
3471 `SPC1.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
3472 `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
3473 (`SPC1.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
3474 `SPC1.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
3475 `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
3476 (`SPC1.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
3477 `SPC1.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
3478 `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
3479 (`SPC1.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
3480 `SPC1.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
3481 `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
3482 (`SPC1.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
3483 `SPC1.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
3484 `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
3485 (`SPC1.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
3486 `SPC1.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
3487 `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
3488 (`SPC1.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
3489 `SPC1.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
3490 `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
3491 (`SPC1.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
3492 `SPC1.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
3493 `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
3494 };
3495
3496wire [7:0] icache_miss = { (`SPC1.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
3497 `SPC1.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
3498 `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
3499 (`SPC1.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
3500 `SPC1.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
3501 `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
3502 (`SPC1.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
3503 `SPC1.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
3504 `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
3505 (`SPC1.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
3506 `SPC1.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
3507 `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
3508 (`SPC1.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
3509 `SPC1.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
3510 `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
3511 (`SPC1.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
3512 `SPC1.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
3513 `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
3514 (`SPC1.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
3515 `SPC1.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
3516 `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
3517 (`SPC1.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
3518 `SPC1.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
3519 `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
3520 };
3521
3522wire inst_bypass = (`SPC1.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[0] |
3523 `SPC1.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[1] |
3524 `SPC1.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[2]);
3525
3526wire [7:0] fetch_bypass = { (inst_bypass & `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
3527 (inst_bypass & `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
3528 (inst_bypass & `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
3529 (inst_bypass & `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
3530 (inst_bypass & `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
3531 (inst_bypass & `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
3532 (inst_bypass & `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
3533 (inst_bypass & `SPC1.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
3534 };
3535
3536wire [7:0] itlb_wr = {(`SPC1.tlu.trl1.take_itw & `SPC1.tlu.trl1.trap[3]),
3537 (`SPC1.tlu.trl1.take_itw & `SPC1.tlu.trl1.trap[2]),
3538 (`SPC1.tlu.trl1.take_itw & `SPC1.tlu.trl1.trap[1]),
3539 (`SPC1.tlu.trl1.take_itw & `SPC1.tlu.trl1.trap[0]),
3540 (`SPC1.tlu.trl0.take_itw & `SPC1.tlu.trl0.trap[3]),
3541 (`SPC1.tlu.trl0.take_itw & `SPC1.tlu.trl0.trap[2]),
3542 (`SPC1.tlu.trl0.take_itw & `SPC1.tlu.trl0.trap[1]),
3543 (`SPC1.tlu.trl0.take_itw & `SPC1.tlu.trl0.trap[0])
3544 };
3545
3546//------------------------------------
3547
3548reg [71:0] tick_cmpr_0;
3549reg [71:0] stick_cmpr_0;
3550reg [71:0] hstick_cmpr_0;
3551reg [151:0] trap_entry_1_t0;
3552reg [151:0] trap_entry_2_t0;
3553reg [151:0] trap_entry_3_t0;
3554reg [151:0] trap_entry_4_t0;
3555reg [151:0] trap_entry_5_t0;
3556reg [151:0] trap_entry_6_t0;
3557
3558always @(posedge `BENCH_SPC1_GCLK) begin // {
3559
3560 // Probes for nas_pipe
3561 tick_cmpr_0 <= `SPC1.tlu.tca.array.mem[{2'b0,3'h0}];
3562 stick_cmpr_0 <= `SPC1.tlu.tca.array.mem[{2'b01,3'h0}];
3563 hstick_cmpr_0 <= `SPC1.tlu.tca.array.mem[{2'b10,3'h0}];
3564 trap_entry_1_t0 <= `SPC1.tlu.tsa0.array.mem[{2'h0, 3'h0}];
3565 trap_entry_2_t0 <= `SPC1.tlu.tsa0.array.mem[{2'h0, 3'h1}];
3566 trap_entry_3_t0 <= `SPC1.tlu.tsa0.array.mem[{2'h0, 3'h2}];
3567 trap_entry_4_t0 <= `SPC1.tlu.tsa0.array.mem[{2'h0, 3'h3}];
3568 trap_entry_5_t0 <= `SPC1.tlu.tsa0.array.mem[{2'h0, 3'h4}];
3569 trap_entry_6_t0 <= `SPC1.tlu.tsa0.array.mem[{2'h0, 3'h5}];
3570
3571end // }
3572reg [71:0] tick_cmpr_1;
3573reg [71:0] stick_cmpr_1;
3574reg [71:0] hstick_cmpr_1;
3575reg [151:0] trap_entry_1_t1;
3576reg [151:0] trap_entry_2_t1;
3577reg [151:0] trap_entry_3_t1;
3578reg [151:0] trap_entry_4_t1;
3579reg [151:0] trap_entry_5_t1;
3580reg [151:0] trap_entry_6_t1;
3581
3582always @(posedge `BENCH_SPC1_GCLK) begin // {
3583
3584 // Probes for nas_pipe
3585 tick_cmpr_1 <= `SPC1.tlu.tca.array.mem[{2'b0,3'h1}];
3586 stick_cmpr_1 <= `SPC1.tlu.tca.array.mem[{2'b01,3'h1}];
3587 hstick_cmpr_1 <= `SPC1.tlu.tca.array.mem[{2'b10,3'h1}];
3588 trap_entry_1_t1 <= `SPC1.tlu.tsa0.array.mem[{2'h1, 3'h0}];
3589 trap_entry_2_t1 <= `SPC1.tlu.tsa0.array.mem[{2'h1, 3'h1}];
3590 trap_entry_3_t1 <= `SPC1.tlu.tsa0.array.mem[{2'h1, 3'h2}];
3591 trap_entry_4_t1 <= `SPC1.tlu.tsa0.array.mem[{2'h1, 3'h3}];
3592 trap_entry_5_t1 <= `SPC1.tlu.tsa0.array.mem[{2'h1, 3'h4}];
3593 trap_entry_6_t1 <= `SPC1.tlu.tsa0.array.mem[{2'h1, 3'h5}];
3594
3595end // }
3596reg [71:0] tick_cmpr_2;
3597reg [71:0] stick_cmpr_2;
3598reg [71:0] hstick_cmpr_2;
3599reg [151:0] trap_entry_1_t2;
3600reg [151:0] trap_entry_2_t2;
3601reg [151:0] trap_entry_3_t2;
3602reg [151:0] trap_entry_4_t2;
3603reg [151:0] trap_entry_5_t2;
3604reg [151:0] trap_entry_6_t2;
3605
3606always @(posedge `BENCH_SPC1_GCLK) begin // {
3607
3608 // Probes for nas_pipe
3609 tick_cmpr_2 <= `SPC1.tlu.tca.array.mem[{2'b0,3'h2}];
3610 stick_cmpr_2 <= `SPC1.tlu.tca.array.mem[{2'b01,3'h2}];
3611 hstick_cmpr_2 <= `SPC1.tlu.tca.array.mem[{2'b10,3'h2}];
3612 trap_entry_1_t2 <= `SPC1.tlu.tsa0.array.mem[{2'h2, 3'h0}];
3613 trap_entry_2_t2 <= `SPC1.tlu.tsa0.array.mem[{2'h2, 3'h1}];
3614 trap_entry_3_t2 <= `SPC1.tlu.tsa0.array.mem[{2'h2, 3'h2}];
3615 trap_entry_4_t2 <= `SPC1.tlu.tsa0.array.mem[{2'h2, 3'h3}];
3616 trap_entry_5_t2 <= `SPC1.tlu.tsa0.array.mem[{2'h2, 3'h4}];
3617 trap_entry_6_t2 <= `SPC1.tlu.tsa0.array.mem[{2'h2, 3'h5}];
3618
3619end // }
3620reg [71:0] tick_cmpr_3;
3621reg [71:0] stick_cmpr_3;
3622reg [71:0] hstick_cmpr_3;
3623reg [151:0] trap_entry_1_t3;
3624reg [151:0] trap_entry_2_t3;
3625reg [151:0] trap_entry_3_t3;
3626reg [151:0] trap_entry_4_t3;
3627reg [151:0] trap_entry_5_t3;
3628reg [151:0] trap_entry_6_t3;
3629
3630always @(posedge `BENCH_SPC1_GCLK) begin // {
3631
3632 // Probes for nas_pipe
3633 tick_cmpr_3 <= `SPC1.tlu.tca.array.mem[{2'b0,3'h3}];
3634 stick_cmpr_3 <= `SPC1.tlu.tca.array.mem[{2'b01,3'h3}];
3635 hstick_cmpr_3 <= `SPC1.tlu.tca.array.mem[{2'b10,3'h3}];
3636 trap_entry_1_t3 <= `SPC1.tlu.tsa0.array.mem[{2'h3, 3'h0}];
3637 trap_entry_2_t3 <= `SPC1.tlu.tsa0.array.mem[{2'h3, 3'h1}];
3638 trap_entry_3_t3 <= `SPC1.tlu.tsa0.array.mem[{2'h3, 3'h2}];
3639 trap_entry_4_t3 <= `SPC1.tlu.tsa0.array.mem[{2'h3, 3'h3}];
3640 trap_entry_5_t3 <= `SPC1.tlu.tsa0.array.mem[{2'h3, 3'h4}];
3641 trap_entry_6_t3 <= `SPC1.tlu.tsa0.array.mem[{2'h3, 3'h5}];
3642
3643end // }
3644reg [71:0] tick_cmpr_4;
3645reg [71:0] stick_cmpr_4;
3646reg [71:0] hstick_cmpr_4;
3647reg [151:0] trap_entry_1_t4;
3648reg [151:0] trap_entry_2_t4;
3649reg [151:0] trap_entry_3_t4;
3650reg [151:0] trap_entry_4_t4;
3651reg [151:0] trap_entry_5_t4;
3652reg [151:0] trap_entry_6_t4;
3653
3654always @(posedge `BENCH_SPC1_GCLK) begin // {
3655
3656 // Probes for nas_pipe
3657 tick_cmpr_4 <= `SPC1.tlu.tca.array.mem[{2'b0,3'h4}];
3658 stick_cmpr_4 <= `SPC1.tlu.tca.array.mem[{2'b01,3'h4}];
3659 hstick_cmpr_4 <= `SPC1.tlu.tca.array.mem[{2'b10,3'h4}];
3660 trap_entry_1_t4 <= `SPC1.tlu.tsa1.array.mem[{2'h0, 3'h0}];
3661 trap_entry_2_t4 <= `SPC1.tlu.tsa1.array.mem[{2'h0, 3'h1}];
3662 trap_entry_3_t4 <= `SPC1.tlu.tsa1.array.mem[{2'h0, 3'h2}];
3663 trap_entry_4_t4 <= `SPC1.tlu.tsa1.array.mem[{2'h0, 3'h3}];
3664 trap_entry_5_t4 <= `SPC1.tlu.tsa1.array.mem[{2'h0, 3'h4}];
3665 trap_entry_6_t4 <= `SPC1.tlu.tsa1.array.mem[{2'h0, 3'h5}];
3666
3667end // }
3668reg [71:0] tick_cmpr_5;
3669reg [71:0] stick_cmpr_5;
3670reg [71:0] hstick_cmpr_5;
3671reg [151:0] trap_entry_1_t5;
3672reg [151:0] trap_entry_2_t5;
3673reg [151:0] trap_entry_3_t5;
3674reg [151:0] trap_entry_4_t5;
3675reg [151:0] trap_entry_5_t5;
3676reg [151:0] trap_entry_6_t5;
3677
3678always @(posedge `BENCH_SPC1_GCLK) begin // {
3679
3680 // Probes for nas_pipe
3681 tick_cmpr_5 <= `SPC1.tlu.tca.array.mem[{2'b0,3'h5}];
3682 stick_cmpr_5 <= `SPC1.tlu.tca.array.mem[{2'b01,3'h5}];
3683 hstick_cmpr_5 <= `SPC1.tlu.tca.array.mem[{2'b10,3'h5}];
3684 trap_entry_1_t5 <= `SPC1.tlu.tsa1.array.mem[{2'h1, 3'h0}];
3685 trap_entry_2_t5 <= `SPC1.tlu.tsa1.array.mem[{2'h1, 3'h1}];
3686 trap_entry_3_t5 <= `SPC1.tlu.tsa1.array.mem[{2'h1, 3'h2}];
3687 trap_entry_4_t5 <= `SPC1.tlu.tsa1.array.mem[{2'h1, 3'h3}];
3688 trap_entry_5_t5 <= `SPC1.tlu.tsa1.array.mem[{2'h1, 3'h4}];
3689 trap_entry_6_t5 <= `SPC1.tlu.tsa1.array.mem[{2'h1, 3'h5}];
3690
3691end // }
3692reg [71:0] tick_cmpr_6;
3693reg [71:0] stick_cmpr_6;
3694reg [71:0] hstick_cmpr_6;
3695reg [151:0] trap_entry_1_t6;
3696reg [151:0] trap_entry_2_t6;
3697reg [151:0] trap_entry_3_t6;
3698reg [151:0] trap_entry_4_t6;
3699reg [151:0] trap_entry_5_t6;
3700reg [151:0] trap_entry_6_t6;
3701
3702always @(posedge `BENCH_SPC1_GCLK) begin // {
3703
3704 // Probes for nas_pipe
3705 tick_cmpr_6 <= `SPC1.tlu.tca.array.mem[{2'b0,3'h6}];
3706 stick_cmpr_6 <= `SPC1.tlu.tca.array.mem[{2'b01,3'h6}];
3707 hstick_cmpr_6 <= `SPC1.tlu.tca.array.mem[{2'b10,3'h6}];
3708 trap_entry_1_t6 <= `SPC1.tlu.tsa1.array.mem[{2'h2, 3'h0}];
3709 trap_entry_2_t6 <= `SPC1.tlu.tsa1.array.mem[{2'h2, 3'h1}];
3710 trap_entry_3_t6 <= `SPC1.tlu.tsa1.array.mem[{2'h2, 3'h2}];
3711 trap_entry_4_t6 <= `SPC1.tlu.tsa1.array.mem[{2'h2, 3'h3}];
3712 trap_entry_5_t6 <= `SPC1.tlu.tsa1.array.mem[{2'h2, 3'h4}];
3713 trap_entry_6_t6 <= `SPC1.tlu.tsa1.array.mem[{2'h2, 3'h5}];
3714
3715end // }
3716reg [71:0] tick_cmpr_7;
3717reg [71:0] stick_cmpr_7;
3718reg [71:0] hstick_cmpr_7;
3719reg [151:0] trap_entry_1_t7;
3720reg [151:0] trap_entry_2_t7;
3721reg [151:0] trap_entry_3_t7;
3722reg [151:0] trap_entry_4_t7;
3723reg [151:0] trap_entry_5_t7;
3724reg [151:0] trap_entry_6_t7;
3725
3726always @(posedge `BENCH_SPC1_GCLK) begin // {
3727
3728 // Probes for nas_pipe
3729 tick_cmpr_7 <= `SPC1.tlu.tca.array.mem[{2'b0,3'h7}];
3730 stick_cmpr_7 <= `SPC1.tlu.tca.array.mem[{2'b01,3'h7}];
3731 hstick_cmpr_7 <= `SPC1.tlu.tca.array.mem[{2'b10,3'h7}];
3732 trap_entry_1_t7 <= `SPC1.tlu.tsa1.array.mem[{2'h3, 3'h0}];
3733 trap_entry_2_t7 <= `SPC1.tlu.tsa1.array.mem[{2'h3, 3'h1}];
3734 trap_entry_3_t7 <= `SPC1.tlu.tsa1.array.mem[{2'h3, 3'h2}];
3735 trap_entry_4_t7 <= `SPC1.tlu.tsa1.array.mem[{2'h3, 3'h3}];
3736 trap_entry_5_t7 <= `SPC1.tlu.tsa1.array.mem[{2'h3, 3'h4}];
3737 trap_entry_6_t7 <= `SPC1.tlu.tsa1.array.mem[{2'h3, 3'h5}];
3738
3739end // }
3740
3741//------------------------------------
3742// ASI & Trap State machines
3743always @(posedge `BENCH_SPC1_GCLK) begin // {
3744
3745// pc_0_e[47:0] <= `SPC1.ifu_pc_d0[47:0];
3746// pc_1_e[47:0] <= `SPC1.ifu_pc_d1[47:0];
3747 pc_0_e[47:0] <= {`SPC1.tlu_pc_0_d[47:2], 2'b00};
3748 pc_1_e[47:0] <= {`SPC1.tlu_pc_1_d[47:2], 2'b00};
3749 pc_0_m[47:0] <= pc_0_e[47:0];
3750 pc_1_m[47:0] <= pc_1_e[47:0];
3751 pc_0_b[47:0] <= pc_0_m[47:0];
3752 pc_1_b[47:0] <= pc_1_m[47:0];
3753 pc_0_w[47:0] <= ({48 { select_pc_b[0]}} & pc_0_b[47:0]) |
3754 ({48 {~select_pc_b[0]}} & pc_0_w[47:0]) ;
3755 pc_1_w[47:0] <= ({48 { select_pc_b[1]}} & pc_0_b[47:0]) |
3756 ({48 {~select_pc_b[1]}} & pc_1_w[47:0]) ;
3757 pc_2_w[47:0] <= ({48 { select_pc_b[2]}} & pc_0_b[47:0]) |
3758 ({48 {~select_pc_b[2]}} & pc_2_w[47:0]) ;
3759 pc_3_w[47:0] <= ({48 { select_pc_b[3]}} & pc_0_b[47:0]) |
3760 ({48 {~select_pc_b[3]}} & pc_3_w[47:0]) ;
3761 pc_4_w[47:0] <= ({48 { select_pc_b[4]}} & pc_1_b[47:0]) |
3762 ({48 {~select_pc_b[4]}} & pc_4_w[47:0]) ;
3763 pc_5_w[47:0] <= ({48 { select_pc_b[5]}} & pc_1_b[47:0]) |
3764 ({48 {~select_pc_b[5]}} & pc_5_w[47:0]) ;
3765 pc_6_w[47:0] <= ({48 { select_pc_b[6]}} & pc_1_b[47:0]) |
3766 ({48 {~select_pc_b[6]}} & pc_6_w[47:0]) ;
3767 pc_7_w[47:0] <= ({48 { select_pc_b[7]}} & pc_1_b[47:0]) |
3768 ({48 {~select_pc_b[7]}} & pc_7_w[47:0]) ;
3769
3770
3771 // altspace_ldst_m is asserted for asi accesses that don't change arch state
3772 asi_store_b <= (`SPC1.lsu.dcc.asi_store_m & `SPC1.lsu.dcc.asi_sync_m);
3773 asi_store_w <= asi_store_b;
3774 dcc_tid_b <= `SPC1.lsu.dcc.dcc_tid_m;
3775 dcc_tid_w <= dcc_tid_b;
3776
3777 // ASI in progress state m/c
3778 if (asi_store_w & ~asi_store_flush_w[dcc_tid_w]) begin // {
3779 asi_in_progress_b[dcc_tid_w] <= 1'b1;
3780 end // }
3781
3782 asi_valid_w <= asi_in_progress_b & store_sync;
3783
3784 // Delay asi_valid_w and asi_in_progress
3785 // 2 clocks to ensure TLB Sync DTLBWRITE (demap) comes before SSTEP stxa
3786 asi_valid_fx4 <= asi_valid_w;
3787 asi_valid_fx5 <= asi_valid_fx4;
3788 asi_in_progress_w <= asi_in_progress_b;
3789 asi_in_progress_fx4 <= asi_in_progress_w;
3790 sync_reset_w <= sync_reset;
3791
3792 for (i=0;i<8;i=i+1) begin // {
3793 if (asi_valid_w[i] | sync_reset_w[i]) begin // {
3794 asi_in_progress_b[i] <= 1'b0;
3795 end//}
3796 end //}
3797
3798 // Trap0 pipeline [valid W stage]
3799
3800 for (i=0;i<4;i=i+1) begin // {
3801 // Done & Retry
3802 if ((`SPC1.tlu.tlu_trap_0_tid[1:0] == i) &&
3803 `SPC1.tlu.tlu_trap_pc_0_valid & tlu_ccr_cwp_0_valid_last)
3804 begin //{
3805 tlu_valid[i] <= 1'b1;
3806 end //}
3807 // Trap taken
3808 else if (`SPC1.tlu.trl0.real_trap[i] & ~`SPC1.tlu.trl0.take_por) begin // {
3809 tlu_valid[i] <= 1'b1;
3810 end //}
3811 else
3812 tlu_valid[i] <= 1'b0;
3813 end //}
3814
3815 // Trap1 pipeline [valid W stage]
3816
3817 for (i=0;i<4;i=i+1) begin // {
3818 // Done & Retry
3819 if ((`SPC1.tlu.tlu_trap_1_tid[1:0] == i) &&
3820 `SPC1.tlu.tlu_trap_pc_1_valid & tlu_ccr_cwp_1_valid_last)
3821 begin //{
3822 tlu_valid[i+4] <= 1'b1;
3823 end //}
3824 // Trap taken
3825 else if (`SPC1.tlu.trl1.real_trap[i] & ~`SPC1.tlu.trl1.take_por) begin // {
3826 tlu_valid[i+4] <= 1'b1;
3827 end //}
3828 else
3829 tlu_valid[i+4] <= 1'b0;
3830 end //}
3831
3832end // }
3833
3834
3835always @(posedge `BENCH_SPC1_GCLK) begin
3836
3837// debug code for TPCC analysis
3838`ifdef TPCC
3839if (pcx_req==1) begin
3840 if (`SPC1.spc_pcx_data_pa[129:124]==6'b100000) begin // l15 dmiss
3841 l15dmiss_cnt=l15dmiss_cnt+1;
3842 $display("dmissl15 cnt is %0d",l15dmiss_cnt);
3843 end
3844 if (`SPC1.spc_pcx_data_pa[129:124]==6'b110000) begin // l15 imiss
3845 l15imiss_cnt=l15imiss_cnt+1;
3846 $display("imissl15 cnt is %0d",l15imiss_cnt);
3847 end
3848 // `TOP.spg.spc_pcx_data_pa[129:124]==6'b100001 -> all stores
3849end
3850
3851pcx_req <= |`SPC1.spc_pcx_req_pq[8:0];
3852
3853if (`SPC1.ifu_l15_valid==1) begin
3854 imiss_cnt=imiss_cnt+1;
3855 $display("imiss cnt is %0d",imiss_cnt);
3856end
3857if (spec_dmiss==1 && `SPC1.lsu_l15_cancel==0) begin
3858 dmiss_cnt=dmiss_cnt+1;
3859 $display("dmiss cnt is %0d",dmiss_cnt);
3860
3861end
3862spec_dmiss <= `SPC1.lsu_l15_valid & `SPC1.lsu_l15_load;
3863
3864clock = clock+1;
3865
3866// keep track of imiss latencies
3867if (`SPC1.ftu_agc_thr0_cmiss_c==1) begin
3868 start_imiss0=clock;
3869 active_imiss0=1;
3870end
3871if (active_imiss0==1 && first_imiss0==1 && `SPC1.l15_spc_cpkt[8:6]==3'b000 && `SPC1.l15_spc_valid==1 && `SPC1.l15_spc_cpkt[17:14]==4'b0001) begin
3872 sum_imiss_latency = sum_imiss_latency + clock - start_imiss0 + 1;
3873 number_imiss = number_imiss + 1;
3874 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
3875 active_imiss0=0;
3876 first_imiss0=0;
3877end
3878if (active_imiss0==1 && first_imiss0==0 && `SPC1.l15_spc_cpkt[8:6]==3'b000 && `SPC1.l15_spc_valid==1 && `SPC1.l15_spc_cpkt[17:14]==4'b0001) begin
3879 first_imiss0=1;
3880end
3881if (`SPC1.ftu_agc_thr1_cmiss_c==1) begin
3882 start_imiss1=clock;
3883 active_imiss1=1;
3884end
3885if (active_imiss1==1 && first_imiss1==1 && `SPC1.l15_spc_cpkt[8:6]==3'b001 && `SPC1.l15_spc_valid==1 && `SPC1.l15_spc_cpkt[17:14]==4'b0001) begin
3886 sum_imiss_latency = sum_imiss_latency + clock - start_imiss1 + 1;
3887 number_imiss = number_imiss + 1;
3888 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
3889 active_imiss1=0;
3890 first_imiss1=0;
3891end
3892if (active_imiss1==1 && first_imiss1==0 && `SPC1.l15_spc_cpkt[8:6]==3'b001 && `SPC1.l15_spc_valid==1 && `SPC1.l15_spc_cpkt[17:14]==4'b0001) begin
3893 first_imiss1=1;
3894end
3895if (`SPC1.ftu_agc_thr2_cmiss_c==1) begin
3896 start_imiss2=clock;
3897 active_imiss2=1;
3898end
3899if (active_imiss2==1 && first_imiss2==1 && `SPC1.l15_spc_cpkt[8:6]==3'b010 && `SPC1.l15_spc_valid==1 && `SPC1.l15_spc_cpkt[17:14]==4'b0001) begin
3900 sum_imiss_latency = sum_imiss_latency + clock - start_imiss2 + 1;
3901 number_imiss = number_imiss + 1;
3902 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
3903 active_imiss2=0;
3904 first_imiss2=0;
3905end
3906if (active_imiss2==1 && first_imiss2==0 && `SPC1.l15_spc_cpkt[8:6]==3'b010 && `SPC1.l15_spc_valid==1 && `SPC1.l15_spc_cpkt[17:14]==4'b0001) begin
3907 first_imiss2=1;
3908end
3909if (`SPC1.ftu_agc_thr3_cmiss_c==1) begin
3910 start_imiss3=clock;
3911 active_imiss3=1;
3912end
3913if (active_imiss3==1 && first_imiss3==1 && `SPC1.l15_spc_cpkt[8:6]==3'b011 && `SPC1.l15_spc_valid==1 && `SPC1.l15_spc_cpkt[17:14]==4'b0001) begin
3914 sum_imiss_latency = sum_imiss_latency + clock - start_imiss3 + 1;
3915 number_imiss = number_imiss + 1;
3916 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
3917 active_imiss3=0;
3918 first_imiss3=0;
3919end
3920if (active_imiss3==1 && first_imiss3==0 && `SPC1.l15_spc_cpkt[8:6]==3'b011 && `SPC1.l15_spc_valid==1 && `SPC1.l15_spc_cpkt[17:14]==4'b0001) begin
3921 first_imiss3=1;
3922end
3923if (`SPC1.ftu_agc_thr4_cmiss_c==1) begin
3924 start_imiss4=clock;
3925 active_imiss4=1;
3926end
3927if (active_imiss4==1 && first_imiss4==1 && `SPC1.l15_spc_cpkt[8:6]==3'b100 && `SPC1.l15_spc_valid==1 && `SPC1.l15_spc_cpkt[17:14]==4'b0001) begin
3928 sum_imiss_latency = sum_imiss_latency + clock - start_imiss4 + 1;
3929 number_imiss = number_imiss + 1;
3930 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
3931 active_imiss4=0;
3932 first_imiss4=0;
3933end
3934if (active_imiss4==1 && first_imiss4==0 && `SPC1.l15_spc_cpkt[8:6]==3'b100 && `SPC1.l15_spc_valid==1 && `SPC1.l15_spc_cpkt[17:14]==4'b0001) begin
3935 first_imiss4=1;
3936end
3937if (`SPC1.ftu_agc_thr5_cmiss_c==1) begin
3938 start_imiss5=clock;
3939 active_imiss5=1;
3940end
3941if (active_imiss5==1 && first_imiss5==1 && `SPC1.l15_spc_cpkt[8:6]==3'b101 && `SPC1.l15_spc_valid==1 && `SPC1.l15_spc_cpkt[17:14]==4'b0001) begin
3942 sum_imiss_latency = sum_imiss_latency + clock - start_imiss5 + 1;
3943 number_imiss = number_imiss + 1;
3944 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
3945 active_imiss5=0;
3946 first_imiss5=0;
3947end
3948if (active_imiss5==1 && first_imiss5==0 && `SPC1.l15_spc_cpkt[8:6]==3'b101 && `SPC1.l15_spc_valid==1 && `SPC1.l15_spc_cpkt[17:14]==4'b0001) begin
3949 first_imiss5=1;
3950end
3951if (`SPC1.ftu_agc_thr6_cmiss_c==1) begin
3952 start_imiss6=clock;
3953 active_imiss6=1;
3954end
3955if (active_imiss6==1 && first_imiss6==1 && `SPC1.l15_spc_cpkt[8:6]==3'b110 && `SPC1.l15_spc_valid==1 && `SPC1.l15_spc_cpkt[17:14]==4'b0001) begin
3956 sum_imiss_latency = sum_imiss_latency + clock - start_imiss6 + 1;
3957 number_imiss = number_imiss + 1;
3958 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
3959 active_imiss6=0;
3960 first_imiss6=0;
3961end
3962if (active_imiss6==1 && first_imiss6==0 && `SPC1.l15_spc_cpkt[8:6]==3'b110 && `SPC1.l15_spc_valid==1 && `SPC1.l15_spc_cpkt[17:14]==4'b0001) begin
3963 first_imiss6=1;
3964end
3965if (`SPC1.ftu_agc_thr7_cmiss_c==1) begin
3966 start_imiss7=clock;
3967 active_imiss7=1;
3968end
3969if (active_imiss7==1 && first_imiss7==1 && `SPC1.l15_spc_cpkt[8:6]==3'b111 && `SPC1.l15_spc_valid==1 && `SPC1.l15_spc_cpkt[17:14]==4'b0001) begin
3970 sum_imiss_latency = sum_imiss_latency + clock - start_imiss7 + 1;
3971 number_imiss = number_imiss + 1;
3972 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
3973 active_imiss7=0;
3974 first_imiss7=0;
3975end
3976if (active_imiss7==1 && first_imiss7==0 && `SPC1.l15_spc_cpkt[8:6]==3'b111 && `SPC1.l15_spc_valid==1 && `SPC1.l15_spc_cpkt[17:14]==4'b0001) begin
3977 first_imiss7=1;
3978end
3979
3980if (`SPC1.pku.swl0.set_lsu_sync_wait==1) begin
3981 start_dmiss0=clock;
3982end
3983if (`SPC1.pku.swl0.clear_lsu_sync_wait==1) begin
3984 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss0) + 3;
3985 number_dmiss = number_dmiss + 1;
3986 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
3987end
3988if (`SPC1.pku.swl1.set_lsu_sync_wait==1) begin
3989 start_dmiss1=clock;
3990end
3991if (`SPC1.pku.swl1.clear_lsu_sync_wait==1) begin
3992 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss1) + 3;
3993 number_dmiss = number_dmiss + 1;
3994 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
3995end
3996if (`SPC1.pku.swl2.set_lsu_sync_wait==1) begin
3997 start_dmiss2=clock;
3998end
3999if (`SPC1.pku.swl2.clear_lsu_sync_wait==1) begin
4000 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss2) + 3;
4001 number_dmiss = number_dmiss + 1;
4002 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
4003end
4004if (`SPC1.pku.swl3.set_lsu_sync_wait==1) begin
4005 start_dmiss3=clock;
4006end
4007if (`SPC1.pku.swl3.clear_lsu_sync_wait==1) begin
4008 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss3) + 3;
4009 number_dmiss = number_dmiss + 1;
4010 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
4011end
4012if (`SPC1.pku.swl4.set_lsu_sync_wait==1) begin
4013 start_dmiss4=clock;
4014end
4015if (`SPC1.pku.swl4.clear_lsu_sync_wait==1) begin
4016 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss4) + 3;
4017 number_dmiss = number_dmiss + 1;
4018 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
4019end
4020if (`SPC1.pku.swl5.set_lsu_sync_wait==1) begin
4021 start_dmiss5=clock;
4022end
4023if (`SPC1.pku.swl5.clear_lsu_sync_wait==1) begin
4024 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss5) + 3;
4025 number_dmiss = number_dmiss + 1;
4026 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
4027end
4028if (`SPC1.pku.swl6.set_lsu_sync_wait==1) begin
4029 start_dmiss6=clock;
4030end
4031if (`SPC1.pku.swl6.clear_lsu_sync_wait==1) begin
4032 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss6) + 3;
4033 number_dmiss = number_dmiss + 1;
4034 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
4035end
4036if (`SPC1.pku.swl7.set_lsu_sync_wait==1) begin
4037 start_dmiss7=clock;
4038end
4039if (`SPC1.pku.swl7.clear_lsu_sync_wait==1) begin
4040 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss7) + 3;
4041 number_dmiss = number_dmiss + 1;
4042 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
4043end
4044`endif
4045
4046
4047
4048 lsu_tid_e[2:0] <= `SPC1.lsu.dcc.tid_d[2:0];
4049
4050 // FG Valid conditions
4051
4052 // Add fcc valids to fg_valid
4053 fcc_valid_fb <= fcc_valid_f5;
4054 fcc_valid_f5 <= fcc_valid_f4;
4055 fcc_valid_f4 <= |`SPC1.fgu.fgu_cmp_fcc_vld_fx3[3:0];
4056
4057 fg_flush_fb <= fg_flush_f5;
4058 fg_flush_f5 <= fg_flush_f4;
4059 fg_flush_f4 <= fg_flush_f3;
4060 fg_flush_f3 <= fg_flush_f2 | `SPC1.dec_flush_f2 |
4061 `SPC1.tlu_flush_fgu_b;
4062 fg_flush_f2 <= `SPC1.dec_flush_f1;
4063
4064 fgu_err_fx3 <= `SPC1.fgu_cecc_fx2 | `SPC1.fgu_uecc_fx2 | `SPC1.fgu.fpc.exu_flush_fx2; // frf or irf ecc error
4065 fgu_err_fx4 <= fgu_err_fx3;
4066 fgu_err_fx5 <= fgu_err_fx4;
4067 fgu_err_fb <= fgu_err_fx5;
4068
4069 // Siams cause fg_valid ..
4070 siam0_d = `SPC1.dec.dec_inst0_d[31:30]==2'b10 &
4071 `SPC1.dec.dec_inst0_d[24:19]==6'b110110 &
4072 `SPC1.dec.dec_inst0_d[13:5]==9'b010000001;
4073
4074 siam1_d = `SPC1.dec.dec_inst1_d[31:30]==2'b10 &
4075 `SPC1.dec.dec_inst1_d[24:19]==6'b110110 &
4076 `SPC1.dec.dec_inst1_d[13:5]==9'b010000001;
4077
4078
4079 done0_d = `SPC1.dec.dec_inst0_d[31:30]==2'b10 &
4080 `SPC1.dec.dec_inst0_d[29:25]==5'b00000 &
4081 `SPC1.dec.dec_inst0_d[24:19]==6'b111110;
4082 done1_d = `SPC1.dec.dec_inst1_d[31:30]==2'b10 &
4083 `SPC1.dec.dec_inst1_d[29:25]==5'b00000 &
4084 `SPC1.dec.dec_inst1_d[24:19]==6'b111110;
4085
4086 retry0_d = `SPC1.dec.dec_inst0_d[31:30]==2'b10 &
4087 `SPC1.dec.dec_inst0_d[29:25]==5'b00001 &
4088 `SPC1.dec.dec_inst0_d[24:19]==6'b111110;
4089 retry1_d = `SPC1.dec.dec_inst1_d[31:30]==2'b10 &
4090 `SPC1.dec.dec_inst1_d[29:25]==5'b00001 &
4091 `SPC1.dec.dec_inst1_d[24:19]==6'b111110;
4092
4093 done0_e <= done0_d & `SPC1.dec.dec_decode0_d;
4094 done1_e <= done1_d & `SPC1.dec.dec_decode1_d;
4095
4096 retry0_e <= retry0_d & `SPC1.dec.dec_decode0_d;
4097 retry1_e <= retry1_d & `SPC1.dec.dec_decode1_d;
4098
4099
4100 // fold siam into cmov logic
4101
4102 fmov_valid_fb <= fmov_valid_f5;
4103 fmov_valid_f5 <= fmov_valid_f4;
4104 fmov_valid_f4 <= fmov_valid_f3;
4105 fmov_valid_f3 <= fmov_valid_f2;
4106 fmov_valid_f2 <= fmov_valid_m;
4107 fmov_valid_m <= fmov_valid_e & `SPC1.dec.dec_fgu_valid_e;
4108 fmov_valid_e <= ((`SPC1.exu0.ect.cmov_d | siam0_d) &
4109 `SPC1.dec.dec_decode0_d&`SPC1.dec.del.fgu0_d) |
4110 ((`SPC1.exu1.ect.cmov_d | siam1_d) &
4111 `SPC1.dec.dec_decode1_d&`SPC1.dec.del.fgu1_d);
4112
4113 // fgu check bus
4114
4115 // fcc_valid_fb doesn't assert for LDFSR. LDFSR gets checked by the LSU
4116 // checker
4117
4118 fg_valid <= {(`SPC1.fgu.fac.fac_w1_tid_fb[2:0]==3'h7) && fg_cond_fb,
4119 (`SPC1.fgu.fac.fac_w1_tid_fb[2:0]==3'h6) && fg_cond_fb,
4120 (`SPC1.fgu.fac.fac_w1_tid_fb[2:0]==3'h5) && fg_cond_fb,
4121 (`SPC1.fgu.fac.fac_w1_tid_fb[2:0]==3'h4) && fg_cond_fb,
4122 (`SPC1.fgu.fac.fac_w1_tid_fb[2:0]==3'h3) && fg_cond_fb,
4123 (`SPC1.fgu.fac.fac_w1_tid_fb[2:0]==3'h2) && fg_cond_fb,
4124 (`SPC1.fgu.fac.fac_w1_tid_fb[2:0]==3'h1) && fg_cond_fb,
4125 (`SPC1.fgu.fac.fac_w1_tid_fb[2:0]==3'h0) && fg_cond_fb };
4126
4127
4128 fgu_valid_fb0 <= `SPC1.fgu_exu_w_vld_fx5[0] && !`SPC1.fgu.fpc.div_finish_int_fb;
4129 fgu_valid_fb1 <= `SPC1.fgu_exu_w_vld_fx5[1] && !`SPC1.fgu.fpc.div_finish_int_fb;
4130
4131 // Fdiv
4132 div_special_cancel_f4[7:0] <= tid2onehot(`SPC1.fgu.fac.tid_fx3[2:0]) &
4133 {8{`SPC1.fgu.fac.q_div_default_res_fx3}};
4134 fg_fdiv_valid_fw <= `SPC1.fgu_divide_completion & ~div_special_cancel_f4 &
4135 {8{~`SPC1.fgu.fpc.fpc_fpd_ieee_trap_fb}} &
4136 {8{~`SPC1.fgu.fpc.fpc_fpd_unfin_fb}};
4137
4138
4139 // Used in CCX Stub ?
4140 inst0_e[31:0] <= `SPC1.dec.dec_inst0_d[31:0];
4141 inst1_e[31:0] <= `SPC1.dec.dec_inst1_d[31:0];
4142
4143 // only fgu ops that are not loads/stores
4144 fgu0_e <= `SPC1.dec.del.decode_fgu0_d;
4145 fgu1_e <= `SPC1.dec.del.decode_fgu1_d;
4146
4147 // LSU logic
4148 load_b <= load_m;
4149 load_m <= (load0_e | load1_e);
4150
4151 load0_e <= (`SPC1.dec.dec_decode0_d & `SPC1.dec.del.lsu0_d &
4152 `SPC1.dec.dcd0.dcd_load_d);
4153
4154 load1_e <= (`SPC1.dec.dec_decode1_d & `SPC1.dec.del.lsu1_d &
4155 `SPC1.dec.dcd1.dcd_load_d);
4156
4157 lsu_tid_b[2:0] <= lsu_tid_m[2:0];
4158 lsu_tid_m[2:0] <= lsu_tid_e[2:0];
4159
4160 lsu_complete_m[7:0] <= `SPC1.lsu_complete[7:0];
4161 lsu_complete_b[7:0] <= lsu_complete_m[7:0];
4162
4163 lsu_data_w <= lsu_data_b;
4164
4165 // Divide destination logic ..
4166 sel_divide0_e <= (`SPC1.dec_decode0_d &
4167 ((`SPC1.pku.swl0.vld_d & `SPC1.pku.swl_divide_wait[0]) |
4168 (`SPC1.pku.swl1.vld_d & `SPC1.pku.swl_divide_wait[1]) |
4169 (`SPC1.pku.swl2.vld_d & `SPC1.pku.swl_divide_wait[2]) |
4170 (`SPC1.pku.swl3.vld_d & `SPC1.pku.swl_divide_wait[3])));
4171 sel_divide1_e <= (`SPC1.dec_decode1_d &
4172 ((`SPC1.pku.swl4.vld_d & `SPC1.pku.swl_divide_wait[4]) |
4173 (`SPC1.pku.swl5.vld_d & `SPC1.pku.swl_divide_wait[5]) |
4174 (`SPC1.pku.swl6.vld_d & `SPC1.pku.swl_divide_wait[6]) |
4175 (`SPC1.pku.swl7.vld_d & `SPC1.pku.swl_divide_wait[7])));
4176
4177
4178 dcd_fdest_e <= {`SPC1.dec.del.fdest1_d,`SPC1.dec.del.fdest0_d};
4179 dcd_idest_e <= {`SPC1.dec.del.idest1_d,`SPC1.dec.del.idest0_d};
4180
4181 if (sel_divide0_e) begin // {
4182 div_idest[{1'b0, `SPC1.dec.del.tid0_e[1:0]}] <= dcd_idest_e[0];
4183 div_fdest[{1'b0, `SPC1.dec.del.tid0_e[1:0]}] <= dcd_fdest_e[0];
4184 end // }
4185 if (sel_divide1_e) begin // {
4186 div_idest[{1'b1, `SPC1.dec.del.tid1_e[1:0]}] <= dcd_idest_e[1];
4187 div_fdest[{1'b1, `SPC1.dec.del.tid1_e[1:0]}] <= dcd_fdest_e[1];
4188 end // }
4189
4190
4191 // EX logic
4192 // Save EX tids for later use
4193 ex0_tid_m <= ex0_tid_e;
4194 ex1_tid_m <= ex1_tid_e;
4195 ex0_tid_b <= ex0_tid_m;
4196 ex1_tid_b <= ex1_tid_m;
4197 ex0_tid_w <= ex0_tid_b;
4198 ex1_tid_w <= ex1_tid_b;
4199
4200 // EX Flush conditions
4201 ex_flush_w <= {ex_flush_b | {{4{(`SPC1.dec.dec_flush_b[1] |
4202 `SPC1.tlu_flush_exu_b[1])}},
4203 {4{(`SPC1.dec.dec_flush_b[0] |
4204 `SPC1.tlu_flush_exu_b[0])}}}};
4205
4206 ex_flush_b <= {{4{`SPC1.dec.dec_flush_m[1]}},
4207 {4{`SPC1.dec.dec_flush_m[0]}}};
4208
4209
4210 // ex_valid_f4 valid will only fire on return
4211 return_f4 <= return_w & ~(`SPC1.tlu_flush_ifu & real_exception);
4212 ex_valid_w <= ex_valid_b;
4213
4214 // Cancel EX valid if it turns out to be asr/asi access for this tid
4215
4216 ex_valid_b <= ex_valid_m & ~ex_asr_access;
4217
4218
4219 ex_valid_m <= { (ex1_tid_e == 2'h3) && ex1_valid_e,
4220 (ex1_tid_e == 2'h2) && ex1_valid_e,
4221 (ex1_tid_e == 2'h1) && ex1_valid_e,
4222 (ex1_tid_e == 2'h0) && ex1_valid_e,
4223 (ex0_tid_e == 2'h3) && ex0_valid_e,
4224 (ex0_tid_e == 2'h2) && ex0_valid_e,
4225 (ex0_tid_e == 2'h1) && ex0_valid_e,
4226 (ex0_tid_e == 2'h0) && ex0_valid_e};
4227
4228
4229 // TLU delays for done and retries
4230 tlu_ccr_cwp_0_valid_last <= `SPC1.tlu.tlu_ccr_cwp_0_valid;
4231 tlu_ccr_cwp_1_valid_last <= `SPC1.tlu.tlu_ccr_cwp_1_valid;
4232
4233
4234end // END posedge gclk
4235
4236// Return instruction is separated out of ex*_valid because CWP update is in
4237// W+1 for return new window is not available for IRF scan (nas_pipe) until
4238// W+2
4239assign return0 = `SPC1.exu0.rml.return_w &
4240 `SPC1.exu0.rml.inst_vld_w;
4241assign return1 = `SPC1.exu1.rml.return_w &
4242 `SPC1.exu1.rml.inst_vld_w;
4243assign return_w = {(ex1_tid_w == 2'h3) && return1,
4244 (ex1_tid_w == 2'h2) && return1,
4245 (ex1_tid_w == 2'h1) && return1,
4246 (ex1_tid_w == 2'h0) && return1,
4247 (ex0_tid_w == 2'h3) && return0,
4248 (ex0_tid_w == 2'h2) && return0,
4249 (ex0_tid_w == 2'h1) && return0,
4250 (ex0_tid_w == 2'h0) && return0};
4251
4252
4253// Cancel EX valid if it turns out that exception (tlu flush) taken for
4254// this tid
4255
4256// exu check bus
4257assign ex0_tid_e = `SPC1.exu0.ect_tid_lth_e[1:0];
4258assign ex0_valid_e = `SPC1.dec.dec_valid_e[0] & ~fgu0_e & ~load0_e &
4259 ~retry0_e & ~done0_e;
4260assign ex1_tid_e = `SPC1.exu1.ect_tid_lth_e[1:0];
4261assign ex1_valid_e = `SPC1.dec.dec_valid_e[1] & ~fgu1_e & ~load1_e &
4262 ~retry1_e & ~done1_e;
4263
4264assign ex_asr_valid = `SPC1.lsu.dcc.asi_store_m & `SPC1.lsu.dcc.asi_sync_m ;
4265
4266assign ex_asr_access ={(`SPC1.lsu.dcc.dcc_tid_m[2:0]==3'h7) & ex_asr_valid,
4267 (`SPC1.lsu.dcc.dcc_tid_m[2:0]==3'h6) & ex_asr_valid,
4268 (`SPC1.lsu.dcc.dcc_tid_m[2:0]==3'h5) & ex_asr_valid,
4269 (`SPC1.lsu.dcc.dcc_tid_m[2:0]==3'h4) & ex_asr_valid,
4270 (`SPC1.lsu.dcc.dcc_tid_m[2:0]==3'h3) & ex_asr_valid,
4271 (`SPC1.lsu.dcc.dcc_tid_m[2:0]==3'h2) & ex_asr_valid,
4272 (`SPC1.lsu.dcc.dcc_tid_m[2:0]==3'h1) & ex_asr_valid,
4273 (`SPC1.lsu.dcc.dcc_tid_m[2:0]==3'h0) & ex_asr_valid};
4274
4275
4276// EXU valid is ex_valid_w, except flushes, delayed return, traps, and stfsr
4277// real_exception added because tlu_flush_ifu activates for second redirect
4278// of retry if TPC and TNPC are not verified as sequential
4279assign real_exception =
4280 {{4 {`SPC1.tlu.fls1.dec_exc_w |
4281 `SPC1.tlu.fls1.exu_exc_w |
4282 `SPC1.tlu.fls1.lsu_exc_w |
4283 `SPC1.tlu.fls1.bsee_req_w}},
4284 {4 {`SPC1.tlu.fls0.dec_exc_w |
4285 `SPC1.tlu.fls0.exu_exc_w |
4286 `SPC1.tlu.fls0.lsu_exc_w |
4287 `SPC1.tlu.fls0.bsee_req_w}}};
4288
4289// Do not assert ex_valid for block store instructions
4290wire [7:0] block_store_first_at_w =
4291 {`SPC1.lsu.sbs7.bst_pend & `SPC1.lsu.sbs7.blk_inst_w,
4292 `SPC1.lsu.sbs6.bst_pend & `SPC1.lsu.sbs6.blk_inst_w,
4293 `SPC1.lsu.sbs5.bst_pend & `SPC1.lsu.sbs5.blk_inst_w,
4294 `SPC1.lsu.sbs4.bst_pend & `SPC1.lsu.sbs4.blk_inst_w,
4295 `SPC1.lsu.sbs3.bst_pend & `SPC1.lsu.sbs3.blk_inst_w,
4296 `SPC1.lsu.sbs2.bst_pend & `SPC1.lsu.sbs2.blk_inst_w,
4297 `SPC1.lsu.sbs1.bst_pend & `SPC1.lsu.sbs1.blk_inst_w,
4298 `SPC1.lsu.sbs0.bst_pend & `SPC1.lsu.sbs0.blk_inst_w};
4299
4300// But inject a valid for a block store that's done...
4301reg [7:0] block_store_w;
4302always @(posedge `BENCH_SPC1_GCLK) begin
4303 block_store_w[7:0] <= `SPC1.lsu.lsu_block_store_b[7:0];
4304 lsu_trap_flush_d <= `SPC1.lsu_trap_flush[7:0];
4305end
4306
4307wire [7:0] block_store_inject_at_w =
4308 ~`SPC1.lsu.lsu_block_store_b[7:0] &
4309 block_store_w[7:0] &
4310 {~`SPC1.lsu.sbs7.bst_kill,
4311 ~`SPC1.lsu.sbs6.bst_kill,
4312 ~`SPC1.lsu.sbs5.bst_kill,
4313 ~`SPC1.lsu.sbs4.bst_kill,
4314 ~`SPC1.lsu.sbs3.bst_kill,
4315 ~`SPC1.lsu.sbs2.bst_kill,
4316 ~`SPC1.lsu.sbs1.bst_kill,
4317 ~`SPC1.lsu.sbs0.bst_kill};
4318
4319assign ex_valid = (((ex_valid_w & ~ex_flush_w & ~return_w & ~block_store_first_at_w & ~exception_w &
4320 ~({{4{`SPC1.tlu.fls1.exu_exc_b & `SPC1.tlu.fls1.beat_two_b}},
4321 {4{`SPC1.tlu.fls0.exu_exc_b & `SPC1.tlu.fls0.beat_two_b}}}) &
4322 ~{(`SPC1.fgu.fac.tid_fx3[2:0]==3'h7) & `SPC1.fgu.fpc.fsr_store_fx3,
4323 (`SPC1.fgu.fac.tid_fx3[2:0]==3'h6) & `SPC1.fgu.fpc.fsr_store_fx3,
4324 (`SPC1.fgu.fac.tid_fx3[2:0]==3'h5) & `SPC1.fgu.fpc.fsr_store_fx3,
4325 (`SPC1.fgu.fac.tid_fx3[2:0]==3'h4) & `SPC1.fgu.fpc.fsr_store_fx3,
4326 (`SPC1.fgu.fac.tid_fx3[2:0]==3'h3) & `SPC1.fgu.fpc.fsr_store_fx3,
4327 (`SPC1.fgu.fac.tid_fx3[2:0]==3'h2) & `SPC1.fgu.fpc.fsr_store_fx3,
4328 (`SPC1.fgu.fac.tid_fx3[2:0]==3'h1) & `SPC1.fgu.fpc.fsr_store_fx3,
4329 (`SPC1.fgu.fac.tid_fx3[2:0]==3'h0) & `SPC1.fgu.fpc.fsr_store_fx3}) |
4330 block_store_inject_at_w) &
4331 ~(`SPC1.tlu_flush_ifu & real_exception)) | return_f4;
4332
4333assign exception_w = {{4 {`SPC1.tlu.fls1.exc_for_w}} |
4334 `SPC1.tlu.fls1.bsee_req[3:0] |
4335 `SPC1.tlu.fls1.pdist_ecc_w[3:0],
4336 {4 {`SPC1.tlu.fls0.exc_for_w}} |
4337 `SPC1.tlu.fls0.bsee_req[3:0] |
4338 `SPC1.tlu.fls0.pdist_ecc_w[3:0]};
4339
4340// imul check bus - includes imul, save, restore instructions
4341assign imul_valid = {(`SPC1.exu1.ect_tid_lth_w[1:0]== 2'h3) & fgu_valid_fb1,
4342 (`SPC1.exu1.ect_tid_lth_w[1:0]== 2'h2) & fgu_valid_fb1,
4343 (`SPC1.exu1.ect_tid_lth_w[1:0]== 2'h1) & fgu_valid_fb1,
4344 (`SPC1.exu1.ect_tid_lth_w[1:0]== 2'h0) & fgu_valid_fb1,
4345 (`SPC1.exu0.ect_tid_lth_w[1:0]== 2'h3) & fgu_valid_fb0,
4346 (`SPC1.exu0.ect_tid_lth_w[1:0]== 2'h2) & fgu_valid_fb0,
4347 (`SPC1.exu0.ect_tid_lth_w[1:0]== 2'h1) & fgu_valid_fb0,
4348 (`SPC1.exu0.ect_tid_lth_w[1:0]== 2'h0) & fgu_valid_fb0};
4349
4350// qualify this signal with fgu_err. If fgu_err is encountered, deassert
4351//fg_cond_fb, so we don't send a step to Riesling.
4352
4353// FGU conditions
4354wire fg_cond_fb_pre_err = `SPC1.fgu.fpc.fpc_w1_ul_vld_fb | fcc_valid_fb |
4355 (fmov_valid_fb & ~fg_flush_fb) |
4356 (`SPC1.fgu.fac.fsr_w1_vld_fb[1]); // covers ST(X)FSR, which clears FSR.ftt
4357
4358assign fg_cond_fb = fg_cond_fb_pre_err & ~fgu_err_fb;
4359
4360// Idiv/Fdiv signals
4361
4362assign fgu_idiv_valid = fg_div_valid & div_idest;
4363
4364
4365assign fgu_fdiv_valid = fg_fdiv_valid_fw & div_fdest;
4366
4367
4368// Lsu signals needed to check lsu results
4369
4370assign lsu_valid = lsu_check | lsu_data_w;
4371
4372assign fg_div_valid = `SPC1.fgu_divide_completion & ~div_special_cancel_f4;
4373
4374// State machine asserts lsu_check for LD hit/miss
4375always @(posedge `BENCH_SPC1_GCLK) begin
4376 for (i=0; i<=7;i=i+1) begin // {
4377 lsu_check[i] <= 1'b0;
4378 case (lsu_state[i])
4379 1'b0: // IDLE state
4380 begin
4381 // LD hit
4382 if (lsu_ld_valid & lsu_tid_dec_b[i] & load_b) begin
4383 lsu_check[i] <= 1'b1;
4384 lsu_state[i] <= 1'b0; // IDLE state
4385 end
4386 // LD miss - normal case
4387 else if (lsu_ld_valid & lsu_tid_dec_b[i] & lsu_complete_b[i])
4388 begin
4389 lsu_check[i] <= 1'b1;
4390 lsu_state[i] <= 1'b0; // IDLE state
4391 end
4392 // LD miss - LDD or Block LD or SWAP
4393 else if (lsu_ld_valid & lsu_tid_dec_b[i]) begin
4394 lsu_state[i] <= 1'b1; // VALID state
4395 end
4396// Added a new term to handle STB uncorrectable errors on atomic or asi stores that are synced
4397//Send a complete if an atomic is squashed.
4398//lsu_trap_flush is asserted a cycle after the block_store_kill is asserted
4399 else if (`SPC1.lsu.dcc.sync_st[i] & `SPC1.lsu_block_store_kill[i] & ~lsu_trap_flush_d[i])
4400 begin
4401 lsu_check[i] <= 1'b1;
4402 lsu_state[i] <= 1'b0; // IDLE state
4403 end
4404 else begin
4405 lsu_state[i] <= lsu_state[i];
4406 end
4407
4408 end
4409 1'b1: // VALID state
4410 begin
4411 if ((lsu_complete_b[i])) begin
4412 lsu_check[i] <= 1'b1;
4413 lsu_state[i] <= 1'b0; // IDLE state
4414 end
4415 else begin
4416 lsu_state[i] <= lsu_state[i];
4417 end
4418 end
4419 endcase
4420 end // }
4421end
4422
4423
4424assign lsu_tid = `SPC1.lsu.dcc.ld_tid_b[2:0];
4425// Don't assert LSU_complete in case of dtlb or irf errors
4426
4427assign lsu_valid_b = (`SPC1.lsu.dcc.pref_inst_b &
4428 ~(dec_flush_lb | `SPC1.lsu.dcc.pipe_flush_b |
4429 `SPC1.lsu_dtdp_err_b | `SPC1.lsu_dttp_err_b |
4430 `SPC1.lsu_dtmh_err_b | `SPC1.lsu.dcc.exu_error_b));
4431
4432assign lsu_data_b[7:0] = { (lsu_tid == 3'h7) & lsu_valid_b,
4433 (lsu_tid == 3'h6) & lsu_valid_b,
4434 (lsu_tid == 3'h5) & lsu_valid_b,
4435 (lsu_tid == 3'h4) & lsu_valid_b,
4436 (lsu_tid == 3'h3) & lsu_valid_b,
4437 (lsu_tid == 3'h2) & lsu_valid_b,
4438 (lsu_tid == 3'h1) & lsu_valid_b,
4439 (lsu_tid == 3'h0) & lsu_valid_b};
4440
4441assign lsu_tid_dec_b[0] = `SPC1.lsu.dcc.ld_tid_b[2:0] == 3'd0;
4442assign lsu_tid_dec_b[1] = `SPC1.lsu.dcc.ld_tid_b[2:0] == 3'd1;
4443assign lsu_tid_dec_b[2] = `SPC1.lsu.dcc.ld_tid_b[2:0] == 3'd2;
4444assign lsu_tid_dec_b[3] = `SPC1.lsu.dcc.ld_tid_b[2:0] == 3'd3;
4445assign lsu_tid_dec_b[4] = `SPC1.lsu.dcc.ld_tid_b[2:0] == 3'd4;
4446assign lsu_tid_dec_b[5] = `SPC1.lsu.dcc.ld_tid_b[2:0] == 3'd5;
4447assign lsu_tid_dec_b[6] = `SPC1.lsu.dcc.ld_tid_b[2:0] == 3'd6;
4448assign lsu_tid_dec_b[7] = `SPC1.lsu.dcc.ld_tid_b[2:0] == 3'd7;
4449
4450assign lsu_ld_valid = (`SPC1.lsu.dcc.exu_ld_vld_b |`SPC1.lsu.dcc.fgu_fld_vld_b) &
4451 ~(`SPC1.lsu.dcc.flush_all_b & `SPC1.lsu.dcc.ld_inst_vld_b);
4452assign dec_flush_lb = `SPC1.dec.dec_flush_lb | `SPC1.tlu_flush_lsu_b;
4453
4454
4455// LSU interface to CCX stub
4456
4457assign exu_lsu_valid = `SPC1.dec.del.lsu_valid_e;
4458assign exu_lsu_addr[47:0] = `SPC1.exu_lsu_address_e[47:0];
4459assign exu_lsu_tid[2:0] = lsu_tid_e[2:0];
4460assign exu_lsu_regid[4:0] = `SPC1.dec.dec_lsu_rd_e[4:0];
4461assign exu_lsu_data[63:0] = `SPC1.exu_lsu_store_data_e[63:0];
4462assign exu_lsu_instr[31:0] = ({32{`SPC1.dec.dec_lsu_sel0_e}} &
4463 inst0_e[31:0]) |
4464 ({32{~`SPC1.dec.dec_lsu_sel0_e}} &
4465 inst1_e[31:0]);
4466assign ld_inst_d = `SPC1.dec.dec_ld_inst_d;
4467
4468///////////////////////////////////////////////////////////////////////////////
4469// Debugging Instruction Opcodes Pipeline
4470///////////////////////////////////////////////////////////////////////////////
4471
4472
4473 reg [31:0] op_0_w;
4474 reg [31:0] op_1_w;
4475 reg [31:0] op_2_w;
4476 reg [31:0] op_3_w;
4477 reg [31:0] op_4_w;
4478 reg [31:0] op_5_w;
4479 reg [31:0] op_6_w;
4480 reg [31:0] op_7_w;
4481
4482 reg [31:0] op0_b;
4483 reg [31:0] op0_m;
4484 reg [31:0] op0_e;
4485 reg [31:0] op0_d;
4486
4487 reg [31:0] op1_b;
4488 reg [31:0] op1_m;
4489 reg [31:0] op1_e;
4490 reg [31:0] op1_d;
4491
4492 reg [255:0] inst0_string_w;
4493 reg [255:0] inst0_string_b;
4494 reg [255:0] inst0_string_m;
4495 reg [255:0] inst0_string_e;
4496 reg [255:0] inst0_string_d;
4497
4498 reg [255:0] inst1_string_w;
4499 reg [255:0] inst1_string_b;
4500 reg [255:0] inst1_string_m;
4501 reg [255:0] inst1_string_e;
4502 reg [255:0] inst1_string_d;
4503
4504 reg [255:0] inst0_string_p;
4505 reg [255:0] inst1_string_p;
4506 reg [255:0] inst2_string_p;
4507 reg [255:0] inst3_string_p;
4508 reg [255:0] inst4_string_p;
4509 reg [255:0] inst5_string_p;
4510 reg [255:0] inst6_string_p;
4511 reg [255:0] inst7_string_p;
4512
4513initial begin
4514 op_0_w = 32'b0;
4515 op_1_w = 32'b0;
4516 op_2_w = 32'b0;
4517 op_3_w = 32'b0;
4518 op_4_w = 32'b0;
4519 op_5_w = 32'b0;
4520 op_6_w = 32'b0;
4521 op_7_w = 32'b0;
4522end
4523
4524always @(posedge `BENCH_SPC1_GCLK) begin // {
4525 op_0_w <= ({32 { select_pc_b[0]}} & op0_b[31:0]) |
4526 ({32 {~select_pc_b[0]}} & op_0_w[31:0]) ;
4527 op_1_w <= ({32 { select_pc_b[1]}} & op0_b[31:0]) |
4528 ({32 {~select_pc_b[1]}} & op_1_w[31:0]) ;
4529 op_2_w <= ({32 { select_pc_b[2]}} & op0_b[31:0]) |
4530 ({32 {~select_pc_b[2]}} & op_2_w[31:0]) ;
4531 op_3_w <= ({32 { select_pc_b[3]}} & op0_b[31:0]) |
4532 ({32 {~select_pc_b[3]}} & op_3_w[31:0]) ;
4533 op_4_w <= ({32 { select_pc_b[4]}} & op1_b[31:0]) |
4534 ({32 {~select_pc_b[4]}} & op_4_w[31:0]) ;
4535 op_5_w <= ({32 { select_pc_b[5]}} & op1_b[31:0]) |
4536 ({32 {~select_pc_b[5]}} & op_5_w[31:0]) ;
4537 op_6_w <= ({32 { select_pc_b[6]}} & op1_b[31:0]) |
4538 ({32 {~select_pc_b[6]}} & op_6_w[31:0]) ;
4539 op_7_w <= ({32 { select_pc_b[7]}} & op1_b[31:0]) |
4540 ({32 {~select_pc_b[7]}} & op_7_w[31:0]) ;
4541
4542 op0_b <= op0_m;
4543 op0_m <= op0_e;
4544 op0_e <= op0_d;
4545 op0_d <= `SPC1.dec.ded0.decode_mux[31:0];
4546
4547 op1_b <= op1_m;
4548 op1_m <= op1_e;
4549 op1_e <= op1_d;
4550 op1_d <= `SPC1.dec.ded1.decode_mux[31:0];
4551
4552 inst0_string_w<=inst0_string_b;
4553 inst0_string_b<=inst0_string_m;
4554 inst0_string_m<=inst0_string_e;
4555 inst0_string_e<=inst0_string_d;
4556 inst0_string_d<=xlate(`SPC1.dec.ded0.decode_mux[31:0]);
4557
4558 inst1_string_w<=inst1_string_b;
4559 inst1_string_b<=inst1_string_m;
4560 inst1_string_m<=inst1_string_e;
4561 inst1_string_e<=inst1_string_d;
4562 inst1_string_d<=xlate(`SPC1.dec.ded1.decode_mux[31:0]);
4563
4564// instructions for each thread at pick
4565 inst0_string_p<=xlate(`SPC1.ifu_ibu.ibf0.buf0_in[31:0]);
4566 inst1_string_p<=xlate(`SPC1.ifu_ibu.ibf1.buf0_in[31:0]);
4567 inst2_string_p<=xlate(`SPC1.ifu_ibu.ibf2.buf0_in[31:0]);
4568 inst3_string_p<=xlate(`SPC1.ifu_ibu.ibf3.buf0_in[31:0]);
4569 inst4_string_p<=xlate(`SPC1.ifu_ibu.ibf4.buf0_in[31:0]);
4570 inst5_string_p<=xlate(`SPC1.ifu_ibu.ibf5.buf0_in[31:0]);
4571 inst6_string_p<=xlate(`SPC1.ifu_ibu.ibf6.buf0_in[31:0]);
4572 inst7_string_p<=xlate(`SPC1.ifu_ibu.ibf7.buf0_in[31:0]);
4573
4574end //}
4575
4576///////////////////////////////////////////////////////////////////////////////
4577// Functions
4578///////////////////////////////////////////////////////////////////////////////
4579function [2:0] onehot2tid;
4580 input [7:0] onehot;
4581
4582 begin
4583
4584 if (onehot[7:0]==8'b00000001) onehot2tid[2:0] = 3'b000;
4585 else if (onehot[7:0]==8'b00000010) onehot2tid[2:0] = 3'b001;
4586 else if (onehot[7:0]==8'b00000100) onehot2tid[2:0] = 3'b010;
4587 else if (onehot[7:0]==8'b00001000) onehot2tid[2:0] = 3'b011;
4588 else if (onehot[7:0]==8'b00010000) onehot2tid[2:0] = 3'b100;
4589 else if (onehot[7:0]==8'b00100000) onehot2tid[2:0] = 3'b101;
4590 else if (onehot[7:0]==8'b01000000) onehot2tid[2:0] = 3'b110;
4591 else if (onehot[7:0]==8'b10000000) onehot2tid[2:0] = 3'b111;
4592
4593 end
4594endfunction
4595
4596function [7:0] tid2onehot;
4597 input [2:0] tid;
4598
4599 begin
4600
4601 if (tid[2:0]==3'b000) tid2onehot[7:0] = 8'b00000001;
4602 else if (tid[2:0]==3'b001) tid2onehot[7:0] = 8'b00000010;
4603 else if (tid[2:0]==3'b010) tid2onehot[7:0] = 8'b00000100;
4604 else if (tid[2:0]==3'b011) tid2onehot[7:0] = 8'b00001000;
4605 else if (tid[2:0]==3'b100) tid2onehot[7:0] = 8'b00010000;
4606 else if (tid[2:0]==3'b101) tid2onehot[7:0] = 8'b00100000;
4607 else if (tid[2:0]==3'b110) tid2onehot[7:0] = 8'b01000000;
4608 else if (tid[2:0]==3'b111) tid2onehot[7:0] = 8'b10000000;
4609
4610 end
4611endfunction
4612
4613//---------------------
4614
4615function [255:0] xlate;
4616 input [31:0] inst;
4617
4618 begin
4619 casex(inst[31:0])
462032'b10xxxxx110100xxxxx001000011xxxxx : xlate[255:0]="FADDq";
462132'b10xxxxx110100xxxxx001000111xxxxx : xlate[255:0]="FSUBq";
462232'b10000xx110101xxxxx001010011xxxxx : xlate[255:0]="FCMPq";
462332'b10000xx110101xxxxx001010111xxxxx : xlate[255:0]="FCMPEq";
462432'b10xxxxx110100xxxxx011001101xxxxx : xlate[255:0]="FsTOq";
462532'b10xxxxx110100xxxxx011001110xxxxx : xlate[255:0]="FdTOq";
462632'b10xxxxx110100xxxxx010001100xxxxx : xlate[255:0]="FxTOq";
462732'b10xxxxx110100xxxxx011001100xxxxx : xlate[255:0]="FiTOq";
462832'b10xxxxx110100xxxxx000000011xxxxx : xlate[255:0]="FMOVq";
462932'b10xxxxx110100xxxxx000000111xxxxx : xlate[255:0]="FNEGq";
463032'b10xxxxx110100xxxxx000001011xxxxx : xlate[255:0]="FABSq";
463132'b10xxxxx110100xxxxx001001011xxxxx : xlate[255:0]="FMULq";
463232'b10xxxxx110100xxxxx001101110xxxxx : xlate[255:0]="FdMULq";
463332'b10xxxxx110100xxxxx001001111xxxxx : xlate[255:0]="FDIVq";
463432'b10xxxxx110100xxxxx000101011xxxxx : xlate[255:0]="FSQRTq";
463532'b10xxxxx1101010xxxx0xx100111xxxxx : xlate[255:0]="FMOVrQa";
463632'b10xxxxx1101010xxxx0x1x00111xxxxx : xlate[255:0]="FMOVrQb";
463732'b10xxxxx110100xxxxx011010011xxxxx : xlate[255:0]="FqTOi";
463832'b10xxxxx110100xxxxx010000011xxxxx : xlate[255:0]="FqTOx";
463932'b10xxxxx110100xxxxx011000111xxxxx : xlate[255:0]="FqTOs";
464032'b10xxxxx110100xxxxx011001011xxxxx : xlate[255:0]="FqTOd";
464132'b11xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQF";
464232'b11xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFi";
464332'b11xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQFA";
464432'b11xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFAi";
464532'b11xxxxx100110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFi";
464632'b11xxxxx100110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQF";
464732'b11xxxxx110110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQFA";
464832'b11xxxxx110110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFAi";
464932'b10xxxxx1101010xxxxxxx000011xxxxx : xlate[255:0]="FMOVQcc";
465032'b10xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADD";
465132'b10xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDcc";
465232'b10xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDC";
465332'b10xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDCcc";
465432'b10xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDi";
465532'b10xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDcci";
465632'b10xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCi";
465732'b10xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCcci";
465832'b00x0xx1011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr1";
465932'b00x0x1x011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr2";
466032'b00xx000110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfccA";
466132'b00xx1xx110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc1";
466232'b00xxx1x110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc2";
466332'b00xxxx1110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc3";
466432'b00xx000101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfccA";
466532'b00xx1xx101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc1";
466632'b00xxx1x101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc2";
466732'b00xxxx1101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc3";
466832'b00xx000010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BiccA";
466932'b00xx1xx010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc1";
467032'b00xxx1x010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc2";
467132'b00xxxx1010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc3";
467232'b00xx000001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPccA";
467332'b00xx1xx001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc1";
467432'b00xxx1x001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc2";
467532'b00xxxx1001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc3";
467632'b01xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="CALL";
467732'b11xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASA";
467832'b11xxxxx111110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASXA";
467932'b11xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASAi";
468032'b11xxxxx111110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASXAi";
468132'b10xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIV";
468232'b10xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIV";
468332'b10xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVcc";
468432'b10xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVcc";
468532'b10xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVi";
468632'b10xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVi";
468732'b10xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVcci";
468832'b10xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVcci";
468932'b1000000111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="DONE";
469032'b1000001111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RETRY";
469132'b10xxxxx110100xxxxx001000001xxxxx : xlate[255:0]="FADDs";
469232'b10xxxxx110100xxxxx001000010xxxxx : xlate[255:0]="FADDd";
469332'b10xxxxx110100xxxxx001000101xxxxx : xlate[255:0]="FSUBs";
469432'b10xxxxx110100xxxxx001000110xxxxx : xlate[255:0]="FSUBd";
469532'b10000xx110101xxxxx001010001xxxxx : xlate[255:0]="FCMPs";
469632'b10000xx110101xxxxx001010010xxxxx : xlate[255:0]="FCMPd";
469732'b10000xx110101xxxxx001010101xxxxx : xlate[255:0]="FCMPEs";
469832'b10000xx110101xxxxx001010110xxxxx : xlate[255:0]="FCMPEd";
469932'b10xxxxx110100xxxxx010000001xxxxx : xlate[255:0]="FsTOx";
470032'b10xxxxx110100xxxxx010000010xxxxx : xlate[255:0]="FdTOx";
470132'b10xxxxx110100xxxxx011010001xxxxx : xlate[255:0]="FsTOi";
470232'b10xxxxx110100xxxxx011010010xxxxx : xlate[255:0]="FdTOi";
470332'b10xxxxx110100xxxxx011001001xxxxx : xlate[255:0]="FsTOd";
470432'b10xxxxx110100xxxxx011000110xxxxx : xlate[255:0]="FdTOs";
470532'b10xxxxx110100xxxxx010000100xxxxx : xlate[255:0]="FxTOs";
470632'b10xxxxx110100xxxxx010001000xxxxx : xlate[255:0]="FxTOd";
470732'b10xxxxx110100xxxxx011000100xxxxx : xlate[255:0]="FiTOs";
470832'b10xxxxx110100xxxxx011001000xxxxx : xlate[255:0]="FiTOd";
470932'b10xxxxx110100xxxxx000000001xxxxx : xlate[255:0]="FMOVs";
471032'b10xxxxx110100xxxxx000000010xxxxx : xlate[255:0]="FMOVd";
471132'b10xxxxx110100xxxxx000000101xxxxx : xlate[255:0]="FNEGs";
471232'b10xxxxx110100xxxxx000000110xxxxx : xlate[255:0]="FNEGd";
471332'b10xxxxx110100xxxxx000001001xxxxx : xlate[255:0]="FABSs";
471432'b10xxxxx110100xxxxx000001010xxxxx : xlate[255:0]="FABSd";
471532'b10xxxxx110100xxxxx001001001xxxxx : xlate[255:0]="FMULs";
471632'b10xxxxx110100xxxxx001001010xxxxx : xlate[255:0]="FMULd";
471732'b10xxxxx110100xxxxx001101001xxxxx : xlate[255:0]="FsMULd";
471832'b10xxxxx110100xxxxx001001101xxxxx : xlate[255:0]="FDIVs";
471932'b10xxxxx110100xxxxx001001110xxxxx : xlate[255:0]="FDIVd";
472032'b10xxxxx110100xxxxx000101001xxxxx : xlate[255:0]="FSQRTs";
472132'b10xxxxx110100xxxxx000101010xxxxx : xlate[255:0]="FSQRTd";
472232'b10xxxxx111011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSH";
472332'b10xxxxx111011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="FLUSHi";
472432'b10xxxxx101011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSHw";
472532'b10xxxxx111000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="JMPL";
472632'b10xxxxx111000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="JMPLi";
472732'b11xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDF";
472832'b11xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDF";
472932'b1100000100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFSR";
473032'b1100001100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXFSR";
473132'b11xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFi";
473232'b11xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFi";
473332'b1100000100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFSRi";
473432'b1100001100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXFSRi";
473532'b11xxxxx110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFA";
473632'b11xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDFA";
473732'b11xxxxx110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFAi";
473832'b11xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFAi";
473932'b11xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSB";
474032'b11xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSH";
474132'b11xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSW";
474232'b11xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUB";
474332'b11xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUH";
474432'b11xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUW";
474532'b11xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDX";
474632'b11xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDD";
474732'b11xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBi";
474832'b11xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHi";
474932'b11xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWi";
475032'b11xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBi";
475132'b11xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHi";
475232'b11xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWi";
475332'b11xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXi";
475432'b11xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDi";
475532'b11xxxxx011001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSBA";
475632'b11xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSHA";
475732'b11xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSWA";
475832'b11xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUBA";
475932'b11xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUHA";
476032'b11xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUWA";
476132'b11xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXA";
476232'b11xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDA";
476332'b11xxxxx011001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBAi";
476432'b11xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHAi";
476532'b11xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWAi";
476632'b11xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBAi";
476732'b11xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHAi";
476832'b11xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWAi";
476932'b11xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXAi";
477032'b11xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDAi";
477132'b11xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUB";
477232'b11xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBi";
477332'b11xxxxx011101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUBA";
477432'b11xxxxx011101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBAi";
477532'b10xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="AND";
477632'b10xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDcc";
477732'b10xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDN";
477832'b10xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDNcc";
477932'b10xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="OR";
478032'b10xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORcc";
478132'b10xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORN";
478232'b10xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORNcc";
478332'b10xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XOR";
478432'b10xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XORcc";
478532'b10xxxxx000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNOR";
478632'b10xxxxx010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNORcc";
478732'b10xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDi";
478832'b10xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDcci";
478932'b10xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNi";
479032'b10xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNcci";
479132'b10xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORi";
479232'b10xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORcci";
479332'b10xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNi";
479432'b10xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNcci";
479532'b10xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORi";
479632'b10xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORcci";
479732'b10xxxxx000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORi";
479832'b10xxxxx010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORcci";
479932'b1000000101000011111xxxxxxxxxxxxx : xlate[255:0]="MEMBAR";
480032'b1000000101000011110xxxxxxxxxxxxx : xlate[255:0]="STBAR";
480132'b10xxxxx101000000000xxxxxxxxxxxxx : xlate[255:0]="RDY";
480232'b10xxxxx101000000100xxxxxxxxxxxxx : xlate[255:0]="RDCCR";
480332'b10xxxxx101000000110xxxxxxxxxxxxx : xlate[255:0]="RDASI";
480432'b10xxxxx101000001000xxxxxxxxxxxxx : xlate[255:0]="RDTICK";
480532'b10xxxxx101000001010xxxxxxxxxxxxx : xlate[255:0]="RDPC";
480632'b10xxxxx101000001100xxxxxxxxxxxxx : xlate[255:0]="RDFPRS";
480732'b10xxxxx101000100110xxxxxxxxxxxxx : xlate[255:0]="RDGSR";
480832'b10xxxxx101000100000xxxxxxxxxxxxx : xlate[255:0]="RDPCR";
480932'b10xxxxx101000100010xxxxxxxxxxxxx : xlate[255:0]="RDPIC";
481032'b10xxxxx1101010xxxx0xx000001xxxxx : xlate[255:0]="FMOVSfcc";
481132'b10xxxxx1101010xxxx1xx000001xxxxx : xlate[255:0]="FMOVSxcc";
481232'b10xxxxx1101010xxxx0xx000010xxxxx : xlate[255:0]="FMOVDfcc";
481332'b10xxxxx1101010xxxx1xx000010xxxxx : xlate[255:0]="FMOVDxcc";
481432'b10xxxxx110101xxxxx0xx100101xxxxx : xlate[255:0]="FMOVrS1";
481532'b10xxxxx110101xxxxx0x1x00101xxxxx : xlate[255:0]="FMOVrS2";
481632'b10xxxxx110101xxxxx0xx100110xxxxx : xlate[255:0]="FMOVrD1";
481732'b10xxxxx110101xxxxx0x1x00110xxxxx : xlate[255:0]="FMOVrD2";
481832'b10xxxxx1011001xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVxcc";
481932'b10xxxxx1011001xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVxcci";
482032'b10xxxxx1011000xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVfcc";
482132'b10xxxxx1011000xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVfcci";
482232'b10xxxxx101111xxxxx0xx1xxxxxxxxxx : xlate[255:0]="MOVR1";
482332'b10xxxxx101111xxxxx0x1xxxxxxxxxxx : xlate[255:0]="MOVR2";
482432'b10xxxxx101111xxxxx1xx1xxxxxxxxxx : xlate[255:0]="MOVRi1";
482532'b10xxxxx101111xxxxx1x1xxxxxxxxxxx : xlate[255:0]="MOVRi2";
482632'b10xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULX";
482732'b10xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVX";
482832'b10xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVX";
482932'b10xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULXi";
483032'b10xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVXi";
483132'b10xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVXi";
483232'b10xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMUL";
483332'b10xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMUL";
483432'b10xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMULcc";
483532'b10xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMULcc";
483632'b10xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULi";
483732'b10xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULi";
483832'b10xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULcci";
483932'b10xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULcci";
484032'b10xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULScc";
484132'b10xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULScci";
484232'b10xxxxx101110000000xxxxxxxxxxxxx : xlate[255:0]="POPC";
484332'b10xxxxx101110000001xxxxxxxxxxxxx : xlate[255:0]="POPCi";
484432'b11xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCH";
484532'b11xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHi";
484632'b11xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCHA";
484732'b11xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHAi";
484832'b10xxxxx101010xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDPR";
484932'b10xxxxx101001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDHPR";
485032'b10xxxxx111001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RETURN";
485132'b10xxxxx111001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RETURNi";
485232'b10xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SAVE";
485332'b10xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SAVEi";
485432'b10xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RESTORE";
485532'b10xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RESTOREi";
485632'b1000000110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="SAVED";
485732'b1000001110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RESTORED";
485832'b00xxxxx100xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="SETHI";
485932'b10xxxxx100101xxxxx00xxxxxxxxxxxx : xlate[255:0]="SLL";
486032'b10xxxxx100110xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRL";
486132'b10xxxxx100111xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRA";
486232'b10xxxxx100101xxxxx01xxxxxxxxxxxx : xlate[255:0]="SLLX";
486332'b10xxxxx100110xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRLX";
486432'b10xxxxx100111xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRAX";
486532'b10xxxxx100101xxxxx10xxxxxxxxxxxx : xlate[255:0]="SLLi";
486632'b10xxxxx100110xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRLi";
486732'b10xxxxx100111xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRAi";
486832'b10xxxxx100101xxxxx11xxxxxxxxxxxx : xlate[255:0]="SLLXi";
486932'b10xxxxx100110xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRLXi";
487032'b10xxxxx100111xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRAXi";
487132'b11xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STF";
487232'b11xxxxx100111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDF";
487332'b1100000100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFSR";
487432'b1100001100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXFSR";
487532'b11xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFi";
487632'b11xxxxx100111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFi";
487732'b1100000100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFSRi";
487832'b1100001100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXFSRi";
487932'b11xxxxx110100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFA";
488032'b11xxxxx110111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDFA";
488132'b11xxxxx110100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFAi";
488232'b11xxxxx110111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFAi";
488332'b11xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STB";
488432'b11xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STH";
488532'b11xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STW";
488632'b11xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STX";
488732'b11xxxx0000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STD";
488832'b11xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBi";
488932'b11xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHi";
489032'b11xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWi";
489132'b11xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXi";
489232'b11xxxx0000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDi";
489332'b11xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STBA";
489432'b11xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STHA";
489532'b11xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STWA";
489632'b11xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXA";
489732'b11xxxx0010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDA";
489832'b11xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBAi";
489932'b11xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHAi";
490032'b11xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWAi";
490132'b11xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXAi";
490232'b11xxxx0010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDAi";
490332'b10xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUB";
490432'b10xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBcc";
490532'b10xxxxx001100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBC";
490632'b10xxxxx011100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBCcc";
490732'b10xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBi";
490832'b10xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBcci";
490932'b10xxxxx001100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCi";
491032'b10xxxxx011100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCcci";
491132'b11xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAP";
491232'b11xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPi";
491332'b11xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAPA";
491432'b11xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPAi";
491532'b10xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDcc";
491632'b10xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDccTV";
491732'b10xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDcci";
491832'b10xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDccTVi";
491932'b10xxxxx100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBcc";
492032'b10xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBccTV";
492132'b10xxxxx100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBcci";
492232'b10xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBccTVi";
492332'b10xxxxx111010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TCC";
492432'b10xxxxx111010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TCCi";
492532'b10xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPR";
492632'b10xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPRi";
492732'b10xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRHPR";
492832'b10xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRHPRi";
492932'b1000000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRY";
493032'b1000010110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRCCR";
493132'b1000011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRASI";
493232'b1000110110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRFPRS";
493332'b1010011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRGSR";
493432'b1010000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPCR";
493532'b1010001110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPIC";
493632'b1000000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRYi";
493732'b1000010110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRCCRi";
493832'b1000011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRASIi";
493932'b1000110110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRFPRSi";
494032'b1010011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRGSRi";
494132'b1010000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPCRi";
494232'b1010001110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPICi";
494332'b1001111110000000001xxxxxxxxxxxxx : xlate[255:0]="SIR";
494432'b10xxxxx110110xxxxx001010000xxxxx : xlate[255:0]="FPADD16";
494532'b10xxxxx110110xxxxx001010001xxxxx : xlate[255:0]="FPADD16S";
494632'b10xxxxx110110xxxxx001010010xxxxx : xlate[255:0]="FPADD32";
494732'b10xxxxx110110xxxxx001010011xxxxx : xlate[255:0]="FPADD32S";
494832'b10xxxxx110110xxxxx001010100xxxxx : xlate[255:0]="FPSUB16";
494932'b10xxxxx110110xxxxx001010101xxxxx : xlate[255:0]="FPSUB16S";
495032'b10xxxxx110110xxxxx001010110xxxxx : xlate[255:0]="FPSUB32";
495132'b10xxxxx110110xxxxx001010111xxxxx : xlate[255:0]="FPSUB32S";
495232'b10xxxxx110110xxxxx000111011xxxxx : xlate[255:0]="FPACK16";
495332'b10xxxxx110110xxxxx000111010xxxxx : xlate[255:0]="FPACK32";
495432'b10xxxxx110110xxxxx000111101xxxxx : xlate[255:0]="FPACKFIX";
495532'b10xxxxx110110xxxxx001001101xxxxx : xlate[255:0]="FEXPAND";
495632'b10xxxxx110110xxxxx001001011xxxxx : xlate[255:0]="FPMERGE";
495732'b10xxxxx110110xxxxx000110001xxxxx : xlate[255:0]="FMUL8x16";
495832'b10xxxxx110110xxxxx000110011xxxxx : xlate[255:0]="FMUL8x16AU";
495932'b10xxxxx110110xxxxx000110101xxxxx : xlate[255:0]="FMUL8x16AL";
496032'b10xxxxx110110xxxxx000110110xxxxx : xlate[255:0]="FMUL8SUx16";
496132'b10xxxxx110110xxxxx000110111xxxxx : xlate[255:0]="FMUL8ULx16";
496232'b10xxxxx110110xxxxx000111000xxxxx : xlate[255:0]="FMULD8SUx16";
496332'b10xxxxx110110xxxxx000111001xxxxx : xlate[255:0]="FMULD8ULx16";
496432'b10xxxxx110110xxxxx000011000xxxxx : xlate[255:0]="ALIGNADDRESS";
496532'b10xxxxx110110xxxxx000011010xxxxx : xlate[255:0]="ALIGNADDRESS_LITTLE";
496632'b10xxxxx110110xxxxx000011001xxxxx : xlate[255:0]="BMASK";
496732'b10xxxxx110110xxxxx001001000xxxxx : xlate[255:0]="FALIGNDATA";
496832'b10xxxxx110110xxxxx001001100xxxxx : xlate[255:0]="BSHUFFLE";
496932'b10xxxxx110110xxxxx001100000xxxxx : xlate[255:0]="FZERO";
497032'b10xxxxx110110xxxxx001100001xxxxx : xlate[255:0]="FZEROS";
497132'b10xxxxx110110xxxxx001111110xxxxx : xlate[255:0]="FONE";
497232'b10xxxxx110110xxxxx001111111xxxxx : xlate[255:0]="FONES";
497332'b10xxxxx110110xxxxx001110100xxxxx : xlate[255:0]="FSRC1";
497432'b10xxxxx110110xxxxx001110101xxxxx : xlate[255:0]="FSRC1S";
497532'b10xxxxx110110xxxxx001111000xxxxx : xlate[255:0]="FSRC2";
497632'b10xxxxx110110xxxxx001111001xxxxx : xlate[255:0]="FSRC2S";
497732'b10xxxxx110110xxxxx001101010xxxxx : xlate[255:0]="FNOT1";
497832'b10xxxxx110110xxxxx001101011xxxxx : xlate[255:0]="FNOT1S";
497932'b10xxxxx110110xxxxx001100110xxxxx : xlate[255:0]="FNOT2";
498032'b10xxxxx110110xxxxx001100111xxxxx : xlate[255:0]="FNOT2S";
498132'b10xxxxx110110xxxxx001111100xxxxx : xlate[255:0]="FOR";
498232'b10xxxxx110110xxxxx001111101xxxxx : xlate[255:0]="FORS";
498332'b10xxxxx110110xxxxx001100010xxxxx : xlate[255:0]="FNOR";
498432'b10xxxxx110110xxxxx001100011xxxxx : xlate[255:0]="FNORS";
498532'b10xxxxx110110xxxxx001110000xxxxx : xlate[255:0]="FAND";
498632'b10xxxxx110110xxxxx001110001xxxxx : xlate[255:0]="FANDS";
498732'b10xxxxx110110xxxxx001101110xxxxx : xlate[255:0]="FNAND";
498832'b10xxxxx110110xxxxx001101111xxxxx : xlate[255:0]="FNANDS";
498932'b10xxxxx110110xxxxx001101100xxxxx : xlate[255:0]="FXOR";
499032'b10xxxxx110110xxxxx001101101xxxxx : xlate[255:0]="FXORS";
499132'b10xxxxx110110xxxxx001110010xxxxx : xlate[255:0]="FXNOR";
499232'b10xxxxx110110xxxxx001110011xxxxx : xlate[255:0]="FXNORS";
499332'b10xxxxx110110xxxxx001111010xxxxx : xlate[255:0]="FORNOT1";
499432'b10xxxxx110110xxxxx001111011xxxxx : xlate[255:0]="FORNOT1S";
499532'b10xxxxx110110xxxxx001110110xxxxx : xlate[255:0]="FORNOT2";
499632'b10xxxxx110110xxxxx001110111xxxxx : xlate[255:0]="FORNOT2S";
499732'b10xxxxx110110xxxxx001101000xxxxx : xlate[255:0]="FANDNOT1";
499832'b10xxxxx110110xxxxx001101001xxxxx : xlate[255:0]="FANDNOT1S";
499932'b10xxxxx110110xxxxx001100100xxxxx : xlate[255:0]="FANDNOT2";
500032'b10xxxxx110110xxxxx001100101xxxxx : xlate[255:0]="FANDNOT2S";
500132'b10xxxxx110110xxxxx000101000xxxxx : xlate[255:0]="FCMPGT16";
500232'b10xxxxx110110xxxxx000101100xxxxx : xlate[255:0]="FCMPGT32";
500332'b10xxxxx110110xxxxx000100000xxxxx : xlate[255:0]="FCMPLE16";
500432'b10xxxxx110110xxxxx000100100xxxxx : xlate[255:0]="FCMPLE32";
500532'b10xxxxx110110xxxxx000100010xxxxx : xlate[255:0]="FCMPNE16";
500632'b10xxxxx110110xxxxx000100110xxxxx : xlate[255:0]="FCMPNE32";
500732'b10xxxxx110110xxxxx000101010xxxxx : xlate[255:0]="FCMPEQ16";
500832'b10xxxxx110110xxxxx000101110xxxxx : xlate[255:0]="FCMPEQ32";
500932'b10xxxxx110110xxxxx000111110xxxxx : xlate[255:0]="PDIST";
501032'b10xxxxx110110xxxxx000000000xxxxx : xlate[255:0]="EDGE8";
501132'b10xxxxx110110xxxxx000000001xxxxx : xlate[255:0]="EDGE8N";
501232'b10xxxxx110110xxxxx000000010xxxxx : xlate[255:0]="EDGE8L";
501332'b10xxxxx110110xxxxx000000011xxxxx : xlate[255:0]="EDGE8LN";
501432'b10xxxxx110110xxxxx000000100xxxxx : xlate[255:0]="EDGE16";
501532'b10xxxxx110110xxxxx000000101xxxxx : xlate[255:0]="EDGE16N";
501632'b10xxxxx110110xxxxx000000110xxxxx : xlate[255:0]="EDGE16L";
501732'b10xxxxx110110xxxxx000000111xxxxx : xlate[255:0]="EDGE16LN";
501832'b10xxxxx110110xxxxx000001000xxxxx : xlate[255:0]="EDGE32";
501932'b10xxxxx110110xxxxx000001001xxxxx : xlate[255:0]="EDGE32N";
502032'b10xxxxx110110xxxxx000001010xxxxx : xlate[255:0]="EDGE32L";
502132'b10xxxxx110110xxxxx000001011xxxxx : xlate[255:0]="EDGE32LN";
502232'b10xxxxx110110xxxxx000010000xxxxx : xlate[255:0]="ARRAY8";
502332'b10xxxxx110110xxxxx000010010xxxxx : xlate[255:0]="ARRAY16";
502432'b10xxxxx110110xxxxx000010100xxxxx : xlate[255:0]="ARRAY32";
502532'b10xxxxx110110xxxxx010000001xxxxx : xlate[255:0]="SIAM";
5026 default : xlate[255:0]="unknown";
5027 endcase
5028 end
5029endfunction // xlate
5030
5031
5032`endif
5033
5034endmodule
5035
5036`endif
5037
5038
5039`ifdef CORE_2
5040
5041module nas_probes2;
5042
5043
5044`ifdef GATESIM
5045
5046
5047`else
5048 reg [7:0] ex_valid_m;
5049 reg [7:0] ex_valid_b;
5050 reg [7:0] ex_valid_w;
5051 reg [7:0] return_f4;
5052 reg [2:0] ex0_tid_m;
5053 reg [2:0] ex1_tid_m;
5054 reg [2:0] ex0_tid_b;
5055 reg [2:0] ex1_tid_b;
5056 reg [2:0] ex0_tid_w;
5057 reg [2:0] ex1_tid_w;
5058 reg fgu_valid_fb0;
5059 reg fgu_valid_fb1;
5060
5061 reg [31:0] inst0_e;
5062 reg [31:0] inst1_e;
5063
5064 reg [7:0] fg_valid;
5065
5066 reg fcc_valid_f4;
5067 reg fcc_valid_f5;
5068 reg fcc_valid_fb;
5069
5070 reg fgu0_e;
5071 reg fgu1_e;
5072 reg lsu0_e;
5073 reg lsu1_e;
5074
5075 reg [1:0] dcd_idest_e;
5076 reg [1:0] dcd_fdest_e;
5077
5078 wire [7:0] ex_valid;
5079 wire [7:0] exception_w;
5080
5081 wire [7:0] imul_valid;
5082
5083 wire fg_cond_fb;
5084
5085 wire exu_lsu_valid;
5086 wire [47:0] exu_lsu_addr;
5087 wire [31:0] exu_lsu_instr;
5088 wire [2:0] exu_lsu_tid;
5089 wire [4:0] exu_lsu_regid;
5090 wire [63:0] exu_lsu_data;
5091
5092 wire [2:0] ex0_tid_e;
5093 wire [2:0] ex1_tid_e;
5094 wire ex0_valid_e;
5095 wire ex1_valid_e;
5096 wire [7:0] ex_asr_access;
5097 wire ex_asr_valid;
5098
5099 wire [7:0] lsu_valid;
5100 wire [2:0] lsu_tid;
5101 wire [7:0] lsu_tid_dec_b;
5102 wire lsu_ld_valid;
5103 reg [7:0] lsu_data_w;
5104 wire [7:0] lsu_data_b;
5105
5106 wire ld_inst_d;
5107
5108 reg [7:0] div_idest;
5109 reg [7:0] div_fdest;
5110
5111 reg load0_e;
5112 reg load1_e;
5113
5114 reg load_m;
5115 reg load_b;
5116
5117 reg [2:0] lsu_tid_m;
5118 reg [7:0] lsu_complete_m;
5119 reg [7:0] lsu_complete_b;
5120 reg [7:0] lsu_trap_flush_d; //reqd. for store buffer ue testing
5121
5122 reg [7:0] ex_flush_w;
5123 reg [7:0] ex_flush_b;
5124
5125 reg sel_divide0_e;
5126 reg sel_divide1_e;
5127
5128 wire dec_flush_lb;
5129
5130 wire [7:0] fgu_idiv_valid;
5131
5132 wire [7:0] fgu_fdiv_valid;
5133
5134 wire [7:0] fg_div_valid;
5135
5136 wire lsu_valid_b;
5137
5138 wire [7:0] return_w;
5139 wire return0;
5140 wire return1;
5141 wire [7:0] real_exception;
5142
5143 reg [2:0] lsu_tid_b;
5144 reg fmov_valid_fb;
5145 reg fmov_valid_f5;
5146 reg fmov_valid_f4;
5147 reg fmov_valid_f3;
5148 reg fmov_valid_f2;
5149 reg fmov_valid_m;
5150 reg fmov_valid_e;
5151
5152 reg fg_flush_fb;
5153 reg fg_flush_f5;
5154 reg fg_flush_f4;
5155 reg fg_flush_f3;
5156 reg fg_flush_f2;
5157
5158 reg siam0_d;
5159 reg siam1_d;
5160
5161 reg done0_d;
5162 reg done1_d;
5163 reg retry0_d;
5164 reg retry1_d;
5165 reg done0_e;
5166 reg done1_e;
5167 reg retry0_e;
5168 reg retry1_e;
5169 reg tlu_ccr_cwp_0_valid_last;
5170 reg tlu_ccr_cwp_1_valid_last;
5171 reg [7:0] fg_fdiv_valid_fw;
5172 reg [7:0] asi_in_progress_b;
5173 reg [7:0] asi_in_progress_w;
5174 reg [7:0] asi_in_progress_fx4;
5175 reg [7:0] tlu_valid;
5176 reg [7:0] sync_reset_w;
5177
5178 reg [7:0] div_special_cancel_f4;
5179
5180 reg asi_store_b;
5181 reg asi_store_w;
5182 reg [2:0] dcc_tid_b;
5183 reg [2:0] dcc_tid_w;
5184 reg [7:0] asi_valid_w;
5185 reg [7:0] asi_valid_fx4;
5186 reg [7:0] asi_valid_fx5;
5187
5188 reg [7:0] lsu_state;
5189 reg [7:0] lsu_check;
5190 reg [2:0] lsu_tid_e;
5191
5192 reg [47:0] pc_0_e;
5193 reg [47:0] pc_1_e;
5194 reg [47:0] pc_0_m;
5195 reg [47:0] pc_1_m;
5196 reg [47:0] pc_0_b;
5197 reg [47:0] pc_1_b;
5198 reg [47:0] pc_0_w;
5199 reg [47:0] pc_1_w;
5200 reg [47:0] pc_2_w;
5201 reg [47:0] pc_3_w;
5202 reg [47:0] pc_4_w;
5203 reg [47:0] pc_5_w;
5204 reg [47:0] pc_6_w;
5205 reg [47:0] pc_7_w;
5206
5207 reg fgu_err_fx3;
5208 reg fgu_err_fx4;
5209 reg fgu_err_fx5;
5210 reg fgu_err_fb;
5211
5212 reg clkstop_d1;
5213 reg clkstop_d2;
5214 reg clkstop_d3;
5215 reg clkstop_d4;
5216 reg clkstop_d5;
5217
5218integer i;
5219integer start_dmiss0;
5220integer start_dmiss1;
5221integer start_dmiss2;
5222integer start_dmiss3;
5223integer start_dmiss4;
5224integer start_dmiss5;
5225integer start_dmiss6;
5226integer start_dmiss7;
5227integer number_dmiss;
5228integer start_imiss0;
5229integer start_imiss1;
5230integer start_imiss2;
5231integer start_imiss3;
5232integer start_imiss4;
5233integer start_imiss5;
5234integer start_imiss6;
5235integer start_imiss7;
5236integer active_imiss0;
5237integer active_imiss1;
5238integer active_imiss2;
5239integer active_imiss3;
5240integer active_imiss4;
5241integer active_imiss5;
5242integer active_imiss6;
5243integer active_imiss7;
5244integer first_imiss0;
5245integer first_imiss1;
5246integer first_imiss2;
5247integer first_imiss3;
5248integer first_imiss4;
5249integer first_imiss5;
5250integer first_imiss6;
5251integer first_imiss7;
5252integer number_imiss;
5253integer clock;
5254integer sum_dmiss_latency;
5255integer sum_imiss_latency;
5256reg spec_dmiss;
5257integer dmiss_cnt;
5258integer imiss_cnt;
5259reg pcx_req;
5260integer l15dmiss_cnt;
5261integer l15imiss_cnt;
5262
5263
5264initial begin // {
5265 pcx_req=0;
5266 l15imiss_cnt=0;
5267 l15dmiss_cnt=0;
5268 imiss_cnt=0;
5269 dmiss_cnt=0;
5270 clock=0;
5271 start_dmiss0=0;
5272 start_dmiss1=0;
5273 start_dmiss2=0;
5274 start_dmiss3=0;
5275 start_dmiss4=0;
5276 start_dmiss5=0;
5277 start_dmiss6=0;
5278 start_dmiss7=0;
5279 number_dmiss=0;
5280 start_imiss0=0;
5281 start_imiss1=0;
5282 start_imiss2=0;
5283 start_imiss3=0;
5284 start_imiss4=0;
5285 start_imiss5=0;
5286 start_imiss6=0;
5287 start_imiss7=0;
5288 active_imiss0=0;
5289 active_imiss1=0;
5290 active_imiss2=0;
5291 active_imiss3=0;
5292 active_imiss4=0;
5293 active_imiss5=0;
5294 active_imiss6=0;
5295 active_imiss7=0;
5296 first_imiss0=0;
5297 first_imiss1=0;
5298 first_imiss2=0;
5299 first_imiss3=0;
5300 first_imiss4=0;
5301 first_imiss5=0;
5302 first_imiss6=0;
5303 first_imiss7=0;
5304 number_imiss=0;
5305 sum_dmiss_latency=0;
5306 sum_imiss_latency=0;
5307 asi_in_progress_b <= 8'h0;
5308 asi_in_progress_w <= 8'h0;
5309 asi_in_progress_fx4 <= 8'h0;
5310 tlu_valid <= 8'h0;
5311 div_idest <= 8'h0;
5312 div_fdest <= 8'h0;
5313 lsu_state <= 8'h0;
5314 clkstop_d1 <=0;
5315 clkstop_d2 <=0;
5316 clkstop_d3 <=0;
5317 clkstop_d4 <=0;
5318 clkstop_d5 <=0;
5319
5320end //}
5321
5322wire [7:0] asi_store_flush_w = {`SPC2.lsu.sbs7.flush_st_w,
5323 `SPC2.lsu.sbs6.flush_st_w,
5324 `SPC2.lsu.sbs5.flush_st_w,
5325 `SPC2.lsu.sbs4.flush_st_w,
5326 `SPC2.lsu.sbs3.flush_st_w,
5327 `SPC2.lsu.sbs2.flush_st_w,
5328 `SPC2.lsu.sbs1.flush_st_w,
5329 `SPC2.lsu.sbs0.flush_st_w};
5330
5331wire [7:0] store_sync = {`SPC2.lsu.sbs7.trap_sync,
5332 `SPC2.lsu.sbs6.trap_sync,
5333 `SPC2.lsu.sbs5.trap_sync,
5334 `SPC2.lsu.sbs4.trap_sync,
5335 `SPC2.lsu.sbs3.trap_sync,
5336 `SPC2.lsu.sbs2.trap_sync,
5337 `SPC2.lsu.sbs1.trap_sync,
5338 `SPC2.lsu.sbs0.trap_sync};
5339wire [7:0] sync_reset = {`SPC2.lsu.sbs7.sync_state_rst,
5340 `SPC2.lsu.sbs6.sync_state_rst,
5341 `SPC2.lsu.sbs5.sync_state_rst,
5342 `SPC2.lsu.sbs4.sync_state_rst,
5343 `SPC2.lsu.sbs3.sync_state_rst,
5344 `SPC2.lsu.sbs2.sync_state_rst,
5345 `SPC2.lsu.sbs1.sync_state_rst,
5346 `SPC2.lsu.sbs0.sync_state_rst};
5347
5348//--------------------
5349// Used in nas_pipe for TSB Config Regs Capture/Compare
5350// ADD_TSB_CFG
5351
5352// NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
5353`ifndef EMUL
5354wire [63:0] ctxt_z_tsb_cfg0_reg [7:0]; // 1 per thread
5355wire [63:0] ctxt_z_tsb_cfg1_reg [7:0];
5356wire [63:0] ctxt_z_tsb_cfg2_reg [7:0];
5357wire [63:0] ctxt_z_tsb_cfg3_reg [7:0];
5358wire [63:0] ctxt_nz_tsb_cfg0_reg [7:0];
5359wire [63:0] ctxt_nz_tsb_cfg1_reg [7:0];
5360wire [63:0] ctxt_nz_tsb_cfg2_reg [7:0];
5361wire [63:0] ctxt_nz_tsb_cfg3_reg [7:0];
5362
5363// There are 32 entries in each MMU MRA but not all are needed.
5364// Indexing:
5365// Bits 4:3 of the address are the lower two bits of the TID
5366// Bits 2:0 of the address select the register as below
5367// mmu.mra0.array.mem for T0-T3
5368// mmu.mra1.array.mem for T4-T7
5369// (this is documented in mmu_asi_ctl.sv)
5370// z TSB cfg 0,1 address 0
5371// z TSB cfg 2,3 address 1
5372// nz TSB cfg 0,1 address 2
5373// nz TSB cfg 2,3 address 3
5374// Real range, physical offset pair 0 address 4
5375// Real range, physical offset pair 1 address 5
5376// Real range, physical offset pair 2 address 6
5377// Real range, physical offset pair 3 address 7
5378
5379wire [83:0] mmu_mra0_a0 = `SPC2.mmu.mra0.array.mem[0];
5380wire [83:0] mmu_mra0_a8 = `SPC2.mmu.mra0.array.mem[8];
5381wire [83:0] mmu_mra0_a16 = `SPC2.mmu.mra0.array.mem[16];
5382wire [83:0] mmu_mra0_a24 = `SPC2.mmu.mra0.array.mem[24];
5383wire [83:0] mmu_mra0_a1 = `SPC2.mmu.mra0.array.mem[1];
5384wire [83:0] mmu_mra0_a9 = `SPC2.mmu.mra0.array.mem[9];
5385wire [83:0] mmu_mra0_a17 = `SPC2.mmu.mra0.array.mem[17];
5386wire [83:0] mmu_mra0_a25 = `SPC2.mmu.mra0.array.mem[25];
5387wire [83:0] mmu_mra0_a2 = `SPC2.mmu.mra0.array.mem[2];
5388wire [83:0] mmu_mra0_a10 = `SPC2.mmu.mra0.array.mem[10];
5389wire [83:0] mmu_mra0_a18 = `SPC2.mmu.mra0.array.mem[18];
5390wire [83:0] mmu_mra0_a26 = `SPC2.mmu.mra0.array.mem[26];
5391wire [83:0] mmu_mra0_a3 = `SPC2.mmu.mra0.array.mem[3];
5392wire [83:0] mmu_mra0_a11 = `SPC2.mmu.mra0.array.mem[11];
5393wire [83:0] mmu_mra0_a19 = `SPC2.mmu.mra0.array.mem[19];
5394wire [83:0] mmu_mra0_a27 = `SPC2.mmu.mra0.array.mem[27];
5395wire [83:0] mmu_mra1_a0 = `SPC2.mmu.mra1.array.mem[0];
5396wire [83:0] mmu_mra1_a8 = `SPC2.mmu.mra1.array.mem[8];
5397wire [83:0] mmu_mra1_a16 = `SPC2.mmu.mra1.array.mem[16];
5398wire [83:0] mmu_mra1_a24 = `SPC2.mmu.mra1.array.mem[24];
5399wire [83:0] mmu_mra1_a1 = `SPC2.mmu.mra1.array.mem[1];
5400wire [83:0] mmu_mra1_a9 = `SPC2.mmu.mra1.array.mem[9];
5401wire [83:0] mmu_mra1_a17 = `SPC2.mmu.mra1.array.mem[17];
5402wire [83:0] mmu_mra1_a25 = `SPC2.mmu.mra1.array.mem[25];
5403wire [83:0] mmu_mra1_a2 = `SPC2.mmu.mra1.array.mem[2];
5404wire [83:0] mmu_mra1_a10 = `SPC2.mmu.mra1.array.mem[10];
5405wire [83:0] mmu_mra1_a18 = `SPC2.mmu.mra1.array.mem[18];
5406wire [83:0] mmu_mra1_a26 = `SPC2.mmu.mra1.array.mem[26];
5407wire [83:0] mmu_mra1_a3 = `SPC2.mmu.mra1.array.mem[3];
5408wire [83:0] mmu_mra1_a11 = `SPC2.mmu.mra1.array.mem[11];
5409wire [83:0] mmu_mra1_a19 = `SPC2.mmu.mra1.array.mem[19];
5410wire [83:0] mmu_mra1_a27 = `SPC2.mmu.mra1.array.mem[27];
5411
5412
5413// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
5414// as well as the physical to architectural bit position relationships.
5415assign ctxt_z_tsb_cfg0_reg[0] = {`SPC2.mmu.asi.t0_e_z[0], // z_tsb_cfg0[63]
5416 mmu_mra0_a0[76:75], // z_tsb_cfg0[62:61]
5417 21'b0, // z_tsb_cfg0[60:40]
5418 mmu_mra0_a0[74:48], // z_tsb_cfg0[39:13]
5419 4'b0, // z_tsb_cfg0[12:9]
5420 mmu_mra0_a0[47:39] // z_tsb_cfg0[8:0]
5421 };
5422assign ctxt_z_tsb_cfg1_reg[0] = {`SPC2.mmu.asi.t0_e_z[1], // z_tsb_cfg0[63]
5423 mmu_mra0_a0[37:36], // z_tsb_cfg0[62:61]
5424 21'b0, // z_tsb_cfg0[60:40]
5425 mmu_mra0_a0[35:9], // z_tsb_cfg0[39:13]
5426 4'b0, // z_tsb_cfg0[12:9]
5427 mmu_mra0_a0[8:0] // z_tsb_cfg0[8:0]
5428 };
5429assign ctxt_z_tsb_cfg2_reg[0] = {`SPC2.mmu.asi.t0_e_z[2], // z_tsb_cfg0[63]
5430 mmu_mra0_a1[76:75], // z_tsb_cfg0[62:61]
5431 21'b0, // z_tsb_cfg0[60:40]
5432 mmu_mra0_a1[74:48], // z_tsb_cfg0[39:13]
5433 4'b0, // z_tsb_cfg0[12:9]
5434 mmu_mra0_a1[47:39] // z_tsb_cfg0[8:0]
5435 };
5436assign ctxt_z_tsb_cfg3_reg[0] = {`SPC2.mmu.asi.t0_e_z[3], // z_tsb_cfg0[63]
5437 mmu_mra0_a1[37:36], // z_tsb_cfg0[62:61]
5438 21'b0, // z_tsb_cfg0[60:40]
5439 mmu_mra0_a1[35:9], // z_tsb_cfg0[39:13]
5440 4'b0, // z_tsb_cfg0[12:9]
5441 mmu_mra0_a1[8:0] // z_tsb_cfg0[8:0]
5442 };
5443assign ctxt_nz_tsb_cfg0_reg[0] = {`SPC2.mmu.asi.t0_e_nz[0],// z_tsb_cfg0[63]
5444 mmu_mra0_a2[76:75], // z_tsb_cfg0[62:61]
5445 21'b0, // z_tsb_cfg0[60:40]
5446 mmu_mra0_a2[74:48], // z_tsb_cfg0[39:13]
5447 4'b0, // z_tsb_cfg0[12:9]
5448 mmu_mra0_a2[47:39] // z_tsb_cfg0[8:0]
5449 };
5450assign ctxt_nz_tsb_cfg1_reg[0] = {`SPC2.mmu.asi.t0_e_nz[1],// z_tsb_cfg0[63]
5451 mmu_mra0_a2[37:36], // z_tsb_cfg0[62:61]
5452 21'b0, // z_tsb_cfg0[60:40]
5453 mmu_mra0_a2[35:9], // z_tsb_cfg0[39:13]
5454 4'b0, // z_tsb_cfg0[12:9]
5455 mmu_mra0_a2[8:0] // z_tsb_cfg0[8:0]
5456 };
5457assign ctxt_nz_tsb_cfg2_reg[0] = {`SPC2.mmu.asi.t0_e_nz[2],// z_tsb_cfg0[63]
5458 mmu_mra0_a3[76:75], // z_tsb_cfg0[62:61]
5459 21'b0, // z_tsb_cfg0[60:40]
5460 mmu_mra0_a3[74:48], // z_tsb_cfg0[39:13]
5461 4'b0, // z_tsb_cfg0[12:9]
5462 mmu_mra0_a3[47:39] // z_tsb_cfg0[8:0]
5463 };
5464assign ctxt_nz_tsb_cfg3_reg[0] = {`SPC2.mmu.asi.t0_e_nz[3],// z_tsb_cfg0[63]
5465 mmu_mra0_a3[37:36], // z_tsb_cfg0[62:61]
5466 21'b0, // z_tsb_cfg0[60:40]
5467 mmu_mra0_a3[35:9], // z_tsb_cfg0[39:13]
5468 4'b0, // z_tsb_cfg0[12:9]
5469 mmu_mra0_a3[8:0] // z_tsb_cfg0[8:0]
5470 };
5471
5472// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
5473// as well as the physical to architectural bit position relationships.
5474assign ctxt_z_tsb_cfg0_reg[1] = {`SPC2.mmu.asi.t1_e_z[0], // z_tsb_cfg0[63]
5475 mmu_mra0_a8[76:75], // z_tsb_cfg0[62:61]
5476 21'b0, // z_tsb_cfg0[60:40]
5477 mmu_mra0_a8[74:48], // z_tsb_cfg0[39:13]
5478 4'b0, // z_tsb_cfg0[12:9]
5479 mmu_mra0_a8[47:39] // z_tsb_cfg0[8:0]
5480 };
5481assign ctxt_z_tsb_cfg1_reg[1] = {`SPC2.mmu.asi.t1_e_z[1], // z_tsb_cfg0[63]
5482 mmu_mra0_a8[37:36], // z_tsb_cfg0[62:61]
5483 21'b0, // z_tsb_cfg0[60:40]
5484 mmu_mra0_a8[35:9], // z_tsb_cfg0[39:13]
5485 4'b0, // z_tsb_cfg0[12:9]
5486 mmu_mra0_a8[8:0] // z_tsb_cfg0[8:0]
5487 };
5488assign ctxt_z_tsb_cfg2_reg[1] = {`SPC2.mmu.asi.t1_e_z[2], // z_tsb_cfg0[63]
5489 mmu_mra0_a9[76:75], // z_tsb_cfg0[62:61]
5490 21'b0, // z_tsb_cfg0[60:40]
5491 mmu_mra0_a9[74:48], // z_tsb_cfg0[39:13]
5492 4'b0, // z_tsb_cfg0[12:9]
5493 mmu_mra0_a9[47:39] // z_tsb_cfg0[8:0]
5494 };
5495assign ctxt_z_tsb_cfg3_reg[1] = {`SPC2.mmu.asi.t1_e_z[3], // z_tsb_cfg0[63]
5496 mmu_mra0_a9[37:36], // z_tsb_cfg0[62:61]
5497 21'b0, // z_tsb_cfg0[60:40]
5498 mmu_mra0_a9[35:9], // z_tsb_cfg0[39:13]
5499 4'b0, // z_tsb_cfg0[12:9]
5500 mmu_mra0_a9[8:0] // z_tsb_cfg0[8:0]
5501 };
5502assign ctxt_nz_tsb_cfg0_reg[1] = {`SPC2.mmu.asi.t1_e_nz[0],// z_tsb_cfg0[63]
5503 mmu_mra0_a10[76:75], // z_tsb_cfg0[62:61]
5504 21'b0, // z_tsb_cfg0[60:40]
5505 mmu_mra0_a10[74:48], // z_tsb_cfg0[39:13]
5506 4'b0, // z_tsb_cfg0[12:9]
5507 mmu_mra0_a10[47:39] // z_tsb_cfg0[8:0]
5508 };
5509assign ctxt_nz_tsb_cfg1_reg[1] = {`SPC2.mmu.asi.t1_e_nz[1],// z_tsb_cfg0[63]
5510 mmu_mra0_a10[37:36], // z_tsb_cfg0[62:61]
5511 21'b0, // z_tsb_cfg0[60:40]
5512 mmu_mra0_a10[35:9], // z_tsb_cfg0[39:13]
5513 4'b0, // z_tsb_cfg0[12:9]
5514 mmu_mra0_a10[8:0] // z_tsb_cfg0[8:0]
5515 };
5516assign ctxt_nz_tsb_cfg2_reg[1] = {`SPC2.mmu.asi.t1_e_nz[2],// z_tsb_cfg0[63]
5517 mmu_mra0_a11[76:75], // z_tsb_cfg0[62:61]
5518 21'b0, // z_tsb_cfg0[60:40]
5519 mmu_mra0_a11[74:48], // z_tsb_cfg0[39:13]
5520 4'b0, // z_tsb_cfg0[12:9]
5521 mmu_mra0_a11[47:39] // z_tsb_cfg0[8:0]
5522 };
5523assign ctxt_nz_tsb_cfg3_reg[1] = {`SPC2.mmu.asi.t1_e_nz[3],// z_tsb_cfg0[63]
5524 mmu_mra0_a11[37:36], // z_tsb_cfg0[62:61]
5525 21'b0, // z_tsb_cfg0[60:40]
5526 mmu_mra0_a11[35:9], // z_tsb_cfg0[39:13]
5527 4'b0, // z_tsb_cfg0[12:9]
5528 mmu_mra0_a11[8:0] // z_tsb_cfg0[8:0]
5529 };
5530
5531// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
5532// as well as the physical to architectural bit position relationships.
5533assign ctxt_z_tsb_cfg0_reg[2] = {`SPC2.mmu.asi.t2_e_z[0], // z_tsb_cfg0[63]
5534 mmu_mra0_a16[76:75], // z_tsb_cfg0[62:61]
5535 21'b0, // z_tsb_cfg0[60:40]
5536 mmu_mra0_a16[74:48], // z_tsb_cfg0[39:13]
5537 4'b0, // z_tsb_cfg0[12:9]
5538 mmu_mra0_a16[47:39] // z_tsb_cfg0[8:0]
5539 };
5540assign ctxt_z_tsb_cfg1_reg[2] = {`SPC2.mmu.asi.t2_e_z[1], // z_tsb_cfg0[63]
5541 mmu_mra0_a16[37:36], // z_tsb_cfg0[62:61]
5542 21'b0, // z_tsb_cfg0[60:40]
5543 mmu_mra0_a16[35:9], // z_tsb_cfg0[39:13]
5544 4'b0, // z_tsb_cfg0[12:9]
5545 mmu_mra0_a16[8:0] // z_tsb_cfg0[8:0]
5546 };
5547assign ctxt_z_tsb_cfg2_reg[2] = {`SPC2.mmu.asi.t2_e_z[2], // z_tsb_cfg0[63]
5548 mmu_mra0_a17[76:75], // z_tsb_cfg0[62:61]
5549 21'b0, // z_tsb_cfg0[60:40]
5550 mmu_mra0_a17[74:48], // z_tsb_cfg0[39:13]
5551 4'b0, // z_tsb_cfg0[12:9]
5552 mmu_mra0_a17[47:39] // z_tsb_cfg0[8:0]
5553 };
5554assign ctxt_z_tsb_cfg3_reg[2] = {`SPC2.mmu.asi.t2_e_z[3], // z_tsb_cfg0[63]
5555 mmu_mra0_a17[37:36], // z_tsb_cfg0[62:61]
5556 21'b0, // z_tsb_cfg0[60:40]
5557 mmu_mra0_a17[35:9], // z_tsb_cfg0[39:13]
5558 4'b0, // z_tsb_cfg0[12:9]
5559 mmu_mra0_a17[8:0] // z_tsb_cfg0[8:0]
5560 };
5561assign ctxt_nz_tsb_cfg0_reg[2] = {`SPC2.mmu.asi.t2_e_nz[0],// z_tsb_cfg0[63]
5562 mmu_mra0_a18[76:75], // z_tsb_cfg0[62:61]
5563 21'b0, // z_tsb_cfg0[60:40]
5564 mmu_mra0_a18[74:48], // z_tsb_cfg0[39:13]
5565 4'b0, // z_tsb_cfg0[12:9]
5566 mmu_mra0_a18[47:39] // z_tsb_cfg0[8:0]
5567 };
5568assign ctxt_nz_tsb_cfg1_reg[2] = {`SPC2.mmu.asi.t2_e_nz[1],// z_tsb_cfg0[63]
5569 mmu_mra0_a18[37:36], // z_tsb_cfg0[62:61]
5570 21'b0, // z_tsb_cfg0[60:40]
5571 mmu_mra0_a18[35:9], // z_tsb_cfg0[39:13]
5572 4'b0, // z_tsb_cfg0[12:9]
5573 mmu_mra0_a18[8:0] // z_tsb_cfg0[8:0]
5574 };
5575assign ctxt_nz_tsb_cfg2_reg[2] = {`SPC2.mmu.asi.t2_e_nz[2],// z_tsb_cfg0[63]
5576 mmu_mra0_a19[76:75], // z_tsb_cfg0[62:61]
5577 21'b0, // z_tsb_cfg0[60:40]
5578 mmu_mra0_a19[74:48], // z_tsb_cfg0[39:13]
5579 4'b0, // z_tsb_cfg0[12:9]
5580 mmu_mra0_a19[47:39] // z_tsb_cfg0[8:0]
5581 };
5582assign ctxt_nz_tsb_cfg3_reg[2] = {`SPC2.mmu.asi.t2_e_nz[3],// z_tsb_cfg0[63]
5583 mmu_mra0_a19[37:36], // z_tsb_cfg0[62:61]
5584 21'b0, // z_tsb_cfg0[60:40]
5585 mmu_mra0_a19[35:9], // z_tsb_cfg0[39:13]
5586 4'b0, // z_tsb_cfg0[12:9]
5587 mmu_mra0_a19[8:0] // z_tsb_cfg0[8:0]
5588 };
5589
5590// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
5591// as well as the physical to architectural bit position relationships.
5592assign ctxt_z_tsb_cfg0_reg[3] = {`SPC2.mmu.asi.t3_e_z[0], // z_tsb_cfg0[63]
5593 mmu_mra0_a24[76:75], // z_tsb_cfg0[62:61]
5594 21'b0, // z_tsb_cfg0[60:40]
5595 mmu_mra0_a24[74:48], // z_tsb_cfg0[39:13]
5596 4'b0, // z_tsb_cfg0[12:9]
5597 mmu_mra0_a24[47:39] // z_tsb_cfg0[8:0]
5598 };
5599assign ctxt_z_tsb_cfg1_reg[3] = {`SPC2.mmu.asi.t3_e_z[1], // z_tsb_cfg0[63]
5600 mmu_mra0_a24[37:36], // z_tsb_cfg0[62:61]
5601 21'b0, // z_tsb_cfg0[60:40]
5602 mmu_mra0_a24[35:9], // z_tsb_cfg0[39:13]
5603 4'b0, // z_tsb_cfg0[12:9]
5604 mmu_mra0_a24[8:0] // z_tsb_cfg0[8:0]
5605 };
5606assign ctxt_z_tsb_cfg2_reg[3] = {`SPC2.mmu.asi.t3_e_z[2], // z_tsb_cfg0[63]
5607 mmu_mra0_a25[76:75], // z_tsb_cfg0[62:61]
5608 21'b0, // z_tsb_cfg0[60:40]
5609 mmu_mra0_a25[74:48], // z_tsb_cfg0[39:13]
5610 4'b0, // z_tsb_cfg0[12:9]
5611 mmu_mra0_a25[47:39] // z_tsb_cfg0[8:0]
5612 };
5613assign ctxt_z_tsb_cfg3_reg[3] = {`SPC2.mmu.asi.t3_e_z[3], // z_tsb_cfg0[63]
5614 mmu_mra0_a25[37:36], // z_tsb_cfg0[62:61]
5615 21'b0, // z_tsb_cfg0[60:40]
5616 mmu_mra0_a25[35:9], // z_tsb_cfg0[39:13]
5617 4'b0, // z_tsb_cfg0[12:9]
5618 mmu_mra0_a25[8:0] // z_tsb_cfg0[8:0]
5619 };
5620assign ctxt_nz_tsb_cfg0_reg[3] = {`SPC2.mmu.asi.t3_e_nz[0],// z_tsb_cfg0[63]
5621 mmu_mra0_a26[76:75], // z_tsb_cfg0[62:61]
5622 21'b0, // z_tsb_cfg0[60:40]
5623 mmu_mra0_a26[74:48], // z_tsb_cfg0[39:13]
5624 4'b0, // z_tsb_cfg0[12:9]
5625 mmu_mra0_a26[47:39] // z_tsb_cfg0[8:0]
5626 };
5627assign ctxt_nz_tsb_cfg1_reg[3] = {`SPC2.mmu.asi.t3_e_nz[1],// z_tsb_cfg0[63]
5628 mmu_mra0_a26[37:36], // z_tsb_cfg0[62:61]
5629 21'b0, // z_tsb_cfg0[60:40]
5630 mmu_mra0_a26[35:9], // z_tsb_cfg0[39:13]
5631 4'b0, // z_tsb_cfg0[12:9]
5632 mmu_mra0_a26[8:0] // z_tsb_cfg0[8:0]
5633 };
5634assign ctxt_nz_tsb_cfg2_reg[3] = {`SPC2.mmu.asi.t3_e_nz[2],// z_tsb_cfg0[63]
5635 mmu_mra0_a27[76:75], // z_tsb_cfg0[62:61]
5636 21'b0, // z_tsb_cfg0[60:40]
5637 mmu_mra0_a27[74:48], // z_tsb_cfg0[39:13]
5638 4'b0, // z_tsb_cfg0[12:9]
5639 mmu_mra0_a27[47:39] // z_tsb_cfg0[8:0]
5640 };
5641assign ctxt_nz_tsb_cfg3_reg[3] = {`SPC2.mmu.asi.t3_e_nz[3],// z_tsb_cfg0[63]
5642 mmu_mra0_a27[37:36], // z_tsb_cfg0[62:61]
5643 21'b0, // z_tsb_cfg0[60:40]
5644 mmu_mra0_a27[35:9], // z_tsb_cfg0[39:13]
5645 4'b0, // z_tsb_cfg0[12:9]
5646 mmu_mra0_a27[8:0] // z_tsb_cfg0[8:0]
5647 };
5648
5649// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
5650// as well as the physical to architectural bit position relationships.
5651assign ctxt_z_tsb_cfg0_reg[4] = {`SPC2.mmu.asi.t4_e_z[0], // z_tsb_cfg0[63]
5652 mmu_mra1_a0[76:75], // z_tsb_cfg0[62:61]
5653 21'b0, // z_tsb_cfg0[60:40]
5654 mmu_mra1_a0[74:48], // z_tsb_cfg0[39:13]
5655 4'b0, // z_tsb_cfg0[12:9]
5656 mmu_mra1_a0[47:39] // z_tsb_cfg0[8:0]
5657 };
5658assign ctxt_z_tsb_cfg1_reg[4] = {`SPC2.mmu.asi.t4_e_z[1], // z_tsb_cfg0[63]
5659 mmu_mra1_a0[37:36], // z_tsb_cfg0[62:61]
5660 21'b0, // z_tsb_cfg0[60:40]
5661 mmu_mra1_a0[35:9], // z_tsb_cfg0[39:13]
5662 4'b0, // z_tsb_cfg0[12:9]
5663 mmu_mra1_a0[8:0] // z_tsb_cfg0[8:0]
5664 };
5665assign ctxt_z_tsb_cfg2_reg[4] = {`SPC2.mmu.asi.t4_e_z[2], // z_tsb_cfg0[63]
5666 mmu_mra1_a1[76:75], // z_tsb_cfg0[62:61]
5667 21'b0, // z_tsb_cfg0[60:40]
5668 mmu_mra1_a1[74:48], // z_tsb_cfg0[39:13]
5669 4'b0, // z_tsb_cfg0[12:9]
5670 mmu_mra1_a1[47:39] // z_tsb_cfg0[8:0]
5671 };
5672assign ctxt_z_tsb_cfg3_reg[4] = {`SPC2.mmu.asi.t4_e_z[3], // z_tsb_cfg0[63]
5673 mmu_mra1_a1[37:36], // z_tsb_cfg0[62:61]
5674 21'b0, // z_tsb_cfg0[60:40]
5675 mmu_mra1_a1[35:9], // z_tsb_cfg0[39:13]
5676 4'b0, // z_tsb_cfg0[12:9]
5677 mmu_mra1_a1[8:0] // z_tsb_cfg0[8:0]
5678 };
5679assign ctxt_nz_tsb_cfg0_reg[4] = {`SPC2.mmu.asi.t4_e_nz[0],// z_tsb_cfg0[63]
5680 mmu_mra1_a2[76:75], // z_tsb_cfg0[62:61]
5681 21'b0, // z_tsb_cfg0[60:40]
5682 mmu_mra1_a2[74:48], // z_tsb_cfg0[39:13]
5683 4'b0, // z_tsb_cfg0[12:9]
5684 mmu_mra1_a2[47:39] // z_tsb_cfg0[8:0]
5685 };
5686assign ctxt_nz_tsb_cfg1_reg[4] = {`SPC2.mmu.asi.t4_e_nz[1],// z_tsb_cfg0[63]
5687 mmu_mra1_a2[37:36], // z_tsb_cfg0[62:61]
5688 21'b0, // z_tsb_cfg0[60:40]
5689 mmu_mra1_a2[35:9], // z_tsb_cfg0[39:13]
5690 4'b0, // z_tsb_cfg0[12:9]
5691 mmu_mra1_a2[8:0] // z_tsb_cfg0[8:0]
5692 };
5693assign ctxt_nz_tsb_cfg2_reg[4] = {`SPC2.mmu.asi.t4_e_nz[2],// z_tsb_cfg0[63]
5694 mmu_mra1_a3[76:75], // z_tsb_cfg0[62:61]
5695 21'b0, // z_tsb_cfg0[60:40]
5696 mmu_mra1_a3[74:48], // z_tsb_cfg0[39:13]
5697 4'b0, // z_tsb_cfg0[12:9]
5698 mmu_mra1_a3[47:39] // z_tsb_cfg0[8:0]
5699 };
5700assign ctxt_nz_tsb_cfg3_reg[4] = {`SPC2.mmu.asi.t4_e_nz[3],// z_tsb_cfg0[63]
5701 mmu_mra1_a3[37:36], // z_tsb_cfg0[62:61]
5702 21'b0, // z_tsb_cfg0[60:40]
5703 mmu_mra1_a3[35:9], // z_tsb_cfg0[39:13]
5704 4'b0, // z_tsb_cfg0[12:9]
5705 mmu_mra1_a3[8:0] // z_tsb_cfg0[8:0]
5706 };
5707
5708// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
5709// as well as the physical to architectural bit position relationships.
5710assign ctxt_z_tsb_cfg0_reg[5] = {`SPC2.mmu.asi.t5_e_z[0], // z_tsb_cfg0[63]
5711 mmu_mra1_a8[76:75], // z_tsb_cfg0[62:61]
5712 21'b0, // z_tsb_cfg0[60:40]
5713 mmu_mra1_a8[74:48], // z_tsb_cfg0[39:13]
5714 4'b0, // z_tsb_cfg0[12:9]
5715 mmu_mra1_a8[47:39] // z_tsb_cfg0[8:0]
5716 };
5717assign ctxt_z_tsb_cfg1_reg[5] = {`SPC2.mmu.asi.t5_e_z[1], // z_tsb_cfg0[63]
5718 mmu_mra1_a8[37:36], // z_tsb_cfg0[62:61]
5719 21'b0, // z_tsb_cfg0[60:40]
5720 mmu_mra1_a8[35:9], // z_tsb_cfg0[39:13]
5721 4'b0, // z_tsb_cfg0[12:9]
5722 mmu_mra1_a8[8:0] // z_tsb_cfg0[8:0]
5723 };
5724assign ctxt_z_tsb_cfg2_reg[5] = {`SPC2.mmu.asi.t5_e_z[2], // z_tsb_cfg0[63]
5725 mmu_mra1_a9[76:75], // z_tsb_cfg0[62:61]
5726 21'b0, // z_tsb_cfg0[60:40]
5727 mmu_mra1_a9[74:48], // z_tsb_cfg0[39:13]
5728 4'b0, // z_tsb_cfg0[12:9]
5729 mmu_mra1_a9[47:39] // z_tsb_cfg0[8:0]
5730 };
5731assign ctxt_z_tsb_cfg3_reg[5] = {`SPC2.mmu.asi.t5_e_z[3], // z_tsb_cfg0[63]
5732 mmu_mra1_a9[37:36], // z_tsb_cfg0[62:61]
5733 21'b0, // z_tsb_cfg0[60:40]
5734 mmu_mra1_a9[35:9], // z_tsb_cfg0[39:13]
5735 4'b0, // z_tsb_cfg0[12:9]
5736 mmu_mra1_a9[8:0] // z_tsb_cfg0[8:0]
5737 };
5738assign ctxt_nz_tsb_cfg0_reg[5] = {`SPC2.mmu.asi.t5_e_nz[0],// z_tsb_cfg0[63]
5739 mmu_mra1_a10[76:75], // z_tsb_cfg0[62:61]
5740 21'b0, // z_tsb_cfg0[60:40]
5741 mmu_mra1_a10[74:48], // z_tsb_cfg0[39:13]
5742 4'b0, // z_tsb_cfg0[12:9]
5743 mmu_mra1_a10[47:39] // z_tsb_cfg0[8:0]
5744 };
5745assign ctxt_nz_tsb_cfg1_reg[5] = {`SPC2.mmu.asi.t5_e_nz[1],// z_tsb_cfg0[63]
5746 mmu_mra1_a10[37:36], // z_tsb_cfg0[62:61]
5747 21'b0, // z_tsb_cfg0[60:40]
5748 mmu_mra1_a10[35:9], // z_tsb_cfg0[39:13]
5749 4'b0, // z_tsb_cfg0[12:9]
5750 mmu_mra1_a10[8:0] // z_tsb_cfg0[8:0]
5751 };
5752assign ctxt_nz_tsb_cfg2_reg[5] = {`SPC2.mmu.asi.t5_e_nz[2],// z_tsb_cfg0[63]
5753 mmu_mra1_a11[76:75], // z_tsb_cfg0[62:61]
5754 21'b0, // z_tsb_cfg0[60:40]
5755 mmu_mra1_a11[74:48], // z_tsb_cfg0[39:13]
5756 4'b0, // z_tsb_cfg0[12:9]
5757 mmu_mra1_a11[47:39] // z_tsb_cfg0[8:0]
5758 };
5759assign ctxt_nz_tsb_cfg3_reg[5] = {`SPC2.mmu.asi.t5_e_nz[3],// z_tsb_cfg0[63]
5760 mmu_mra1_a11[37:36], // z_tsb_cfg0[62:61]
5761 21'b0, // z_tsb_cfg0[60:40]
5762 mmu_mra1_a11[35:9], // z_tsb_cfg0[39:13]
5763 4'b0, // z_tsb_cfg0[12:9]
5764 mmu_mra1_a11[8:0] // z_tsb_cfg0[8:0]
5765 };
5766
5767// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
5768// as well as the physical to architectural bit position relationships.
5769assign ctxt_z_tsb_cfg0_reg[6] = {`SPC2.mmu.asi.t6_e_z[0], // z_tsb_cfg0[63]
5770 mmu_mra1_a16[76:75], // z_tsb_cfg0[62:61]
5771 21'b0, // z_tsb_cfg0[60:40]
5772 mmu_mra1_a16[74:48], // z_tsb_cfg0[39:13]
5773 4'b0, // z_tsb_cfg0[12:9]
5774 mmu_mra1_a16[47:39] // z_tsb_cfg0[8:0]
5775 };
5776assign ctxt_z_tsb_cfg1_reg[6] = {`SPC2.mmu.asi.t6_e_z[1], // z_tsb_cfg0[63]
5777 mmu_mra1_a16[37:36], // z_tsb_cfg0[62:61]
5778 21'b0, // z_tsb_cfg0[60:40]
5779 mmu_mra1_a16[35:9], // z_tsb_cfg0[39:13]
5780 4'b0, // z_tsb_cfg0[12:9]
5781 mmu_mra1_a16[8:0] // z_tsb_cfg0[8:0]
5782 };
5783assign ctxt_z_tsb_cfg2_reg[6] = {`SPC2.mmu.asi.t6_e_z[2], // z_tsb_cfg0[63]
5784 mmu_mra1_a17[76:75], // z_tsb_cfg0[62:61]
5785 21'b0, // z_tsb_cfg0[60:40]
5786 mmu_mra1_a17[74:48], // z_tsb_cfg0[39:13]
5787 4'b0, // z_tsb_cfg0[12:9]
5788 mmu_mra1_a17[47:39] // z_tsb_cfg0[8:0]
5789 };
5790assign ctxt_z_tsb_cfg3_reg[6] = {`SPC2.mmu.asi.t6_e_z[3], // z_tsb_cfg0[63]
5791 mmu_mra1_a17[37:36], // z_tsb_cfg0[62:61]
5792 21'b0, // z_tsb_cfg0[60:40]
5793 mmu_mra1_a17[35:9], // z_tsb_cfg0[39:13]
5794 4'b0, // z_tsb_cfg0[12:9]
5795 mmu_mra1_a17[8:0] // z_tsb_cfg0[8:0]
5796 };
5797assign ctxt_nz_tsb_cfg0_reg[6] = {`SPC2.mmu.asi.t6_e_nz[0],// z_tsb_cfg0[63]
5798 mmu_mra1_a18[76:75], // z_tsb_cfg0[62:61]
5799 21'b0, // z_tsb_cfg0[60:40]
5800 mmu_mra1_a18[74:48], // z_tsb_cfg0[39:13]
5801 4'b0, // z_tsb_cfg0[12:9]
5802 mmu_mra1_a18[47:39] // z_tsb_cfg0[8:0]
5803 };
5804assign ctxt_nz_tsb_cfg1_reg[6] = {`SPC2.mmu.asi.t6_e_nz[1],// z_tsb_cfg0[63]
5805 mmu_mra1_a18[37:36], // z_tsb_cfg0[62:61]
5806 21'b0, // z_tsb_cfg0[60:40]
5807 mmu_mra1_a18[35:9], // z_tsb_cfg0[39:13]
5808 4'b0, // z_tsb_cfg0[12:9]
5809 mmu_mra1_a18[8:0] // z_tsb_cfg0[8:0]
5810 };
5811assign ctxt_nz_tsb_cfg2_reg[6] = {`SPC2.mmu.asi.t6_e_nz[2],// z_tsb_cfg0[63]
5812 mmu_mra1_a19[76:75], // z_tsb_cfg0[62:61]
5813 21'b0, // z_tsb_cfg0[60:40]
5814 mmu_mra1_a19[74:48], // z_tsb_cfg0[39:13]
5815 4'b0, // z_tsb_cfg0[12:9]
5816 mmu_mra1_a19[47:39] // z_tsb_cfg0[8:0]
5817 };
5818assign ctxt_nz_tsb_cfg3_reg[6] = {`SPC2.mmu.asi.t6_e_nz[3],// z_tsb_cfg0[63]
5819 mmu_mra1_a19[37:36], // z_tsb_cfg0[62:61]
5820 21'b0, // z_tsb_cfg0[60:40]
5821 mmu_mra1_a19[35:9], // z_tsb_cfg0[39:13]
5822 4'b0, // z_tsb_cfg0[12:9]
5823 mmu_mra1_a19[8:0] // z_tsb_cfg0[8:0]
5824 };
5825
5826// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
5827// as well as the physical to architectural bit position relationships.
5828assign ctxt_z_tsb_cfg0_reg[7] = {`SPC2.mmu.asi.t7_e_z[0], // z_tsb_cfg0[63]
5829 mmu_mra1_a24[76:75], // z_tsb_cfg0[62:61]
5830 21'b0, // z_tsb_cfg0[60:40]
5831 mmu_mra1_a24[74:48], // z_tsb_cfg0[39:13]
5832 4'b0, // z_tsb_cfg0[12:9]
5833 mmu_mra1_a24[47:39] // z_tsb_cfg0[8:0]
5834 };
5835assign ctxt_z_tsb_cfg1_reg[7] = {`SPC2.mmu.asi.t7_e_z[1], // z_tsb_cfg0[63]
5836 mmu_mra1_a24[37:36], // z_tsb_cfg0[62:61]
5837 21'b0, // z_tsb_cfg0[60:40]
5838 mmu_mra1_a24[35:9], // z_tsb_cfg0[39:13]
5839 4'b0, // z_tsb_cfg0[12:9]
5840 mmu_mra1_a24[8:0] // z_tsb_cfg0[8:0]
5841 };
5842assign ctxt_z_tsb_cfg2_reg[7] = {`SPC2.mmu.asi.t7_e_z[2], // z_tsb_cfg0[63]
5843 mmu_mra1_a25[76:75], // z_tsb_cfg0[62:61]
5844 21'b0, // z_tsb_cfg0[60:40]
5845 mmu_mra1_a25[74:48], // z_tsb_cfg0[39:13]
5846 4'b0, // z_tsb_cfg0[12:9]
5847 mmu_mra1_a25[47:39] // z_tsb_cfg0[8:0]
5848 };
5849assign ctxt_z_tsb_cfg3_reg[7] = {`SPC2.mmu.asi.t7_e_z[3], // z_tsb_cfg0[63]
5850 mmu_mra1_a25[37:36], // z_tsb_cfg0[62:61]
5851 21'b0, // z_tsb_cfg0[60:40]
5852 mmu_mra1_a25[35:9], // z_tsb_cfg0[39:13]
5853 4'b0, // z_tsb_cfg0[12:9]
5854 mmu_mra1_a25[8:0] // z_tsb_cfg0[8:0]
5855 };
5856assign ctxt_nz_tsb_cfg0_reg[7] = {`SPC2.mmu.asi.t7_e_nz[0],// z_tsb_cfg0[63]
5857 mmu_mra1_a26[76:75], // z_tsb_cfg0[62:61]
5858 21'b0, // z_tsb_cfg0[60:40]
5859 mmu_mra1_a26[74:48], // z_tsb_cfg0[39:13]
5860 4'b0, // z_tsb_cfg0[12:9]
5861 mmu_mra1_a26[47:39] // z_tsb_cfg0[8:0]
5862 };
5863assign ctxt_nz_tsb_cfg1_reg[7] = {`SPC2.mmu.asi.t7_e_nz[1],// z_tsb_cfg0[63]
5864 mmu_mra1_a26[37:36], // z_tsb_cfg0[62:61]
5865 21'b0, // z_tsb_cfg0[60:40]
5866 mmu_mra1_a26[35:9], // z_tsb_cfg0[39:13]
5867 4'b0, // z_tsb_cfg0[12:9]
5868 mmu_mra1_a26[8:0] // z_tsb_cfg0[8:0]
5869 };
5870assign ctxt_nz_tsb_cfg2_reg[7] = {`SPC2.mmu.asi.t7_e_nz[2],// z_tsb_cfg0[63]
5871 mmu_mra1_a27[76:75], // z_tsb_cfg0[62:61]
5872 21'b0, // z_tsb_cfg0[60:40]
5873 mmu_mra1_a27[74:48], // z_tsb_cfg0[39:13]
5874 4'b0, // z_tsb_cfg0[12:9]
5875 mmu_mra1_a27[47:39] // z_tsb_cfg0[8:0]
5876 };
5877assign ctxt_nz_tsb_cfg3_reg[7] = {`SPC2.mmu.asi.t7_e_nz[3],// z_tsb_cfg0[63]
5878 mmu_mra1_a27[37:36], // z_tsb_cfg0[62:61]
5879 21'b0, // z_tsb_cfg0[60:40]
5880 mmu_mra1_a27[35:9], // z_tsb_cfg0[39:13]
5881 4'b0, // z_tsb_cfg0[12:9]
5882 mmu_mra1_a27[8:0] // z_tsb_cfg0[8:0]
5883 };
5884`endif // EMUL - ADD_TSB_CFG
5885
5886
5887// This was the original select_pc_b, the latest select_pc_b qualifies with errors
5888// But some of the error checkers need this signal without the qualification
5889// of icache errors
5890// Suppress instruction on flush or park request
5891// (clear_disrupting_flush_pending_w_in & idl_req_in)
5892// Suppress instruction for 'refetch' exception after
5893// not taken branch with annulled delay slot
5894// NOTE: 'with_errors' means that the signal actually IGNORES instruction
5895// cache errors and asserts IN SPITE OF instruction cache errors
5896wire [7:0] select_pc_b_with_errors =
5897 {{4 {~`SPC2.dec_flush_b[1]}}, {4 {~`SPC2.dec_flush_b[0]}}} &
5898 {{4 {~`SPC2.tlu.fls1.refetch_w_in}}, {4 {~`SPC2.tlu.fls0.refetch_w_in}}} &
5899 {~(`SPC2.tlu.fls1.clear_disrupting_flush_pending_w_in[3:0] &
5900 {4 {`SPC2.tlu.fls1.idl_req_in}}),
5901 ~(`SPC2.tlu.fls0.clear_disrupting_flush_pending_w_in[3:0] &
5902 {4 {`SPC2.tlu.fls0.idl_req_in}})} &
5903 {`SPC2.tlu.fls1.tid_dec_valid_b[3:0],
5904 `SPC2.tlu.fls0.tid_dec_valid_b[3:0]};
5905
5906//------------------------------------
5907// Qualify select_pc_b_with_errors to get final select_pc_b signal
5908// Qualifications are
5909// - instruction cache errors (ic_err_w_in)
5910// - disrupting single step completion requests (dsc_req_in)
5911wire [7:0] select_pc_b =
5912 select_pc_b_with_errors[7:0] &
5913 {{4 {(~`SPC2.tlu.fls1.ic_err_w_in | `SPC2.tlu.fls1.itlb_nfo_exc_b) &
5914 ~`SPC2.tlu.fls1.dsc_req_in}},
5915 {4 {(~`SPC2.tlu.fls0.ic_err_w_in | `SPC2.tlu.fls0.itlb_nfo_exc_b) &
5916 ~`SPC2.tlu.fls0.dsc_req_in}}};
5917
5918//------------------------------------
5919
5920//original select_pc_b_with errors. Select_pc_b_with_errors is no longer asserted
5921//if the inst. following an annulled delay slot of a not taken branch has a prebuffer
5922//error and it reaches B stage. I still need a signal if this happens to trigger the chkr.
5923
5924wire [7:0] select_pc_b_with_errors_and_refetch =
5925 {{4 {~`SPC2.dec_flush_b[1]}}, {4 {~`SPC2.dec_flush_b[0]}}} &
5926 {~(`SPC2.tlu.fls1.clear_disrupting_flush_pending_w_in[3:0] &
5927 {4 {`SPC2.tlu.fls1.idl_req_in}}),
5928 ~(`SPC2.tlu.fls0.clear_disrupting_flush_pending_w_in[3:0] &
5929 {4 {`SPC2.tlu.fls0.idl_req_in}})} &
5930 {`SPC2.tlu.fls1.tid_dec_valid_b[3:0],
5931 `SPC2.tlu.fls0.tid_dec_valid_b[3:0]};
5932
5933// Signals required for bench TLB sync & LDST sync
5934
5935reg tlb_bypass_m;
5936reg tlb_bypass_b;
5937reg tlb_rd_vld_m;
5938reg tlb_rd_vld_b;
5939reg lsu_tl_gt_0_b;
5940reg [7:0] dcc_asi_b;
5941reg asi_internal_w;
5942
5943always @ (posedge `BENCH_SPC2_GCLK) begin // {
5944
5945 clkstop_d1 <= `SPC2.tcu_clk_stop;
5946 clkstop_d2 <= clkstop_d1;
5947 clkstop_d3 <= clkstop_d2;
5948 clkstop_d4 <= clkstop_d3;
5949 clkstop_d5 <= clkstop_d4;
5950
5951 tlb_bypass_m <= `SPC2.lsu.tlb.tlb_bypass;
5952 tlb_bypass_b <= tlb_bypass_m;
5953 tlb_rd_vld_m <= `SPC2.lsu.tlb.tlb_rd_vld | `SPC2.lsu.tlb.tlb_cam_vld;
5954 tlb_rd_vld_b <= tlb_rd_vld_m;
5955
5956 // This signal is only valid for LD/ST instructions
5957 lsu_tl_gt_0_b <= `SPC2.lsu.dcc.tl_gt_0_m;
5958
5959 // Can't use lsu.dcc_asi_b for tlb_sync so pipeline from M to B
5960 dcc_asi_b <= `SPC2.lsu.dcc_asi_m;
5961
5962 // LD/ST that will not issue to the crossbar
5963 asi_internal_w <= `SPC2.lsu.dcc.asi_internal_b;
5964end // }
5965
5966// TL determines whether Nucleus or Primary
5967wire [7:0] asi_num = `SPC2.lsu.dcc.altspace_ldst_b ?
5968 dcc_asi_b :
5969 (lsu_tl_gt_0_b ? 8'h04 : 8'h80);
5970
5971wire [7:0] itlb_miss = { (`SPC2.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
5972 `SPC2.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
5973 `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
5974 (`SPC2.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
5975 `SPC2.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
5976 `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
5977 (`SPC2.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
5978 `SPC2.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
5979 `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
5980 (`SPC2.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
5981 `SPC2.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
5982 `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
5983 (`SPC2.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
5984 `SPC2.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
5985 `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
5986 (`SPC2.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
5987 `SPC2.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
5988 `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
5989 (`SPC2.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
5990 `SPC2.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
5991 `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
5992 (`SPC2.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
5993 `SPC2.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
5994 `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
5995 };
5996
5997wire [7:0] icache_miss = { (`SPC2.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
5998 `SPC2.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
5999 `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
6000 (`SPC2.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
6001 `SPC2.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
6002 `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
6003 (`SPC2.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
6004 `SPC2.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
6005 `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
6006 (`SPC2.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
6007 `SPC2.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
6008 `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
6009 (`SPC2.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
6010 `SPC2.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
6011 `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
6012 (`SPC2.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
6013 `SPC2.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
6014 `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
6015 (`SPC2.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
6016 `SPC2.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
6017 `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
6018 (`SPC2.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
6019 `SPC2.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
6020 `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
6021 };
6022
6023wire inst_bypass = (`SPC2.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[0] |
6024 `SPC2.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[1] |
6025 `SPC2.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[2]);
6026
6027wire [7:0] fetch_bypass = { (inst_bypass & `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
6028 (inst_bypass & `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
6029 (inst_bypass & `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
6030 (inst_bypass & `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
6031 (inst_bypass & `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
6032 (inst_bypass & `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
6033 (inst_bypass & `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
6034 (inst_bypass & `SPC2.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
6035 };
6036
6037wire [7:0] itlb_wr = {(`SPC2.tlu.trl1.take_itw & `SPC2.tlu.trl1.trap[3]),
6038 (`SPC2.tlu.trl1.take_itw & `SPC2.tlu.trl1.trap[2]),
6039 (`SPC2.tlu.trl1.take_itw & `SPC2.tlu.trl1.trap[1]),
6040 (`SPC2.tlu.trl1.take_itw & `SPC2.tlu.trl1.trap[0]),
6041 (`SPC2.tlu.trl0.take_itw & `SPC2.tlu.trl0.trap[3]),
6042 (`SPC2.tlu.trl0.take_itw & `SPC2.tlu.trl0.trap[2]),
6043 (`SPC2.tlu.trl0.take_itw & `SPC2.tlu.trl0.trap[1]),
6044 (`SPC2.tlu.trl0.take_itw & `SPC2.tlu.trl0.trap[0])
6045 };
6046
6047//------------------------------------
6048
6049reg [71:0] tick_cmpr_0;
6050reg [71:0] stick_cmpr_0;
6051reg [71:0] hstick_cmpr_0;
6052reg [151:0] trap_entry_1_t0;
6053reg [151:0] trap_entry_2_t0;
6054reg [151:0] trap_entry_3_t0;
6055reg [151:0] trap_entry_4_t0;
6056reg [151:0] trap_entry_5_t0;
6057reg [151:0] trap_entry_6_t0;
6058
6059always @(posedge `BENCH_SPC2_GCLK) begin // {
6060
6061 // Probes for nas_pipe
6062 tick_cmpr_0 <= `SPC2.tlu.tca.array.mem[{2'b0,3'h0}];
6063 stick_cmpr_0 <= `SPC2.tlu.tca.array.mem[{2'b01,3'h0}];
6064 hstick_cmpr_0 <= `SPC2.tlu.tca.array.mem[{2'b10,3'h0}];
6065 trap_entry_1_t0 <= `SPC2.tlu.tsa0.array.mem[{2'h0, 3'h0}];
6066 trap_entry_2_t0 <= `SPC2.tlu.tsa0.array.mem[{2'h0, 3'h1}];
6067 trap_entry_3_t0 <= `SPC2.tlu.tsa0.array.mem[{2'h0, 3'h2}];
6068 trap_entry_4_t0 <= `SPC2.tlu.tsa0.array.mem[{2'h0, 3'h3}];
6069 trap_entry_5_t0 <= `SPC2.tlu.tsa0.array.mem[{2'h0, 3'h4}];
6070 trap_entry_6_t0 <= `SPC2.tlu.tsa0.array.mem[{2'h0, 3'h5}];
6071
6072end // }
6073reg [71:0] tick_cmpr_1;
6074reg [71:0] stick_cmpr_1;
6075reg [71:0] hstick_cmpr_1;
6076reg [151:0] trap_entry_1_t1;
6077reg [151:0] trap_entry_2_t1;
6078reg [151:0] trap_entry_3_t1;
6079reg [151:0] trap_entry_4_t1;
6080reg [151:0] trap_entry_5_t1;
6081reg [151:0] trap_entry_6_t1;
6082
6083always @(posedge `BENCH_SPC2_GCLK) begin // {
6084
6085 // Probes for nas_pipe
6086 tick_cmpr_1 <= `SPC2.tlu.tca.array.mem[{2'b0,3'h1}];
6087 stick_cmpr_1 <= `SPC2.tlu.tca.array.mem[{2'b01,3'h1}];
6088 hstick_cmpr_1 <= `SPC2.tlu.tca.array.mem[{2'b10,3'h1}];
6089 trap_entry_1_t1 <= `SPC2.tlu.tsa0.array.mem[{2'h1, 3'h0}];
6090 trap_entry_2_t1 <= `SPC2.tlu.tsa0.array.mem[{2'h1, 3'h1}];
6091 trap_entry_3_t1 <= `SPC2.tlu.tsa0.array.mem[{2'h1, 3'h2}];
6092 trap_entry_4_t1 <= `SPC2.tlu.tsa0.array.mem[{2'h1, 3'h3}];
6093 trap_entry_5_t1 <= `SPC2.tlu.tsa0.array.mem[{2'h1, 3'h4}];
6094 trap_entry_6_t1 <= `SPC2.tlu.tsa0.array.mem[{2'h1, 3'h5}];
6095
6096end // }
6097reg [71:0] tick_cmpr_2;
6098reg [71:0] stick_cmpr_2;
6099reg [71:0] hstick_cmpr_2;
6100reg [151:0] trap_entry_1_t2;
6101reg [151:0] trap_entry_2_t2;
6102reg [151:0] trap_entry_3_t2;
6103reg [151:0] trap_entry_4_t2;
6104reg [151:0] trap_entry_5_t2;
6105reg [151:0] trap_entry_6_t2;
6106
6107always @(posedge `BENCH_SPC2_GCLK) begin // {
6108
6109 // Probes for nas_pipe
6110 tick_cmpr_2 <= `SPC2.tlu.tca.array.mem[{2'b0,3'h2}];
6111 stick_cmpr_2 <= `SPC2.tlu.tca.array.mem[{2'b01,3'h2}];
6112 hstick_cmpr_2 <= `SPC2.tlu.tca.array.mem[{2'b10,3'h2}];
6113 trap_entry_1_t2 <= `SPC2.tlu.tsa0.array.mem[{2'h2, 3'h0}];
6114 trap_entry_2_t2 <= `SPC2.tlu.tsa0.array.mem[{2'h2, 3'h1}];
6115 trap_entry_3_t2 <= `SPC2.tlu.tsa0.array.mem[{2'h2, 3'h2}];
6116 trap_entry_4_t2 <= `SPC2.tlu.tsa0.array.mem[{2'h2, 3'h3}];
6117 trap_entry_5_t2 <= `SPC2.tlu.tsa0.array.mem[{2'h2, 3'h4}];
6118 trap_entry_6_t2 <= `SPC2.tlu.tsa0.array.mem[{2'h2, 3'h5}];
6119
6120end // }
6121reg [71:0] tick_cmpr_3;
6122reg [71:0] stick_cmpr_3;
6123reg [71:0] hstick_cmpr_3;
6124reg [151:0] trap_entry_1_t3;
6125reg [151:0] trap_entry_2_t3;
6126reg [151:0] trap_entry_3_t3;
6127reg [151:0] trap_entry_4_t3;
6128reg [151:0] trap_entry_5_t3;
6129reg [151:0] trap_entry_6_t3;
6130
6131always @(posedge `BENCH_SPC2_GCLK) begin // {
6132
6133 // Probes for nas_pipe
6134 tick_cmpr_3 <= `SPC2.tlu.tca.array.mem[{2'b0,3'h3}];
6135 stick_cmpr_3 <= `SPC2.tlu.tca.array.mem[{2'b01,3'h3}];
6136 hstick_cmpr_3 <= `SPC2.tlu.tca.array.mem[{2'b10,3'h3}];
6137 trap_entry_1_t3 <= `SPC2.tlu.tsa0.array.mem[{2'h3, 3'h0}];
6138 trap_entry_2_t3 <= `SPC2.tlu.tsa0.array.mem[{2'h3, 3'h1}];
6139 trap_entry_3_t3 <= `SPC2.tlu.tsa0.array.mem[{2'h3, 3'h2}];
6140 trap_entry_4_t3 <= `SPC2.tlu.tsa0.array.mem[{2'h3, 3'h3}];
6141 trap_entry_5_t3 <= `SPC2.tlu.tsa0.array.mem[{2'h3, 3'h4}];
6142 trap_entry_6_t3 <= `SPC2.tlu.tsa0.array.mem[{2'h3, 3'h5}];
6143
6144end // }
6145reg [71:0] tick_cmpr_4;
6146reg [71:0] stick_cmpr_4;
6147reg [71:0] hstick_cmpr_4;
6148reg [151:0] trap_entry_1_t4;
6149reg [151:0] trap_entry_2_t4;
6150reg [151:0] trap_entry_3_t4;
6151reg [151:0] trap_entry_4_t4;
6152reg [151:0] trap_entry_5_t4;
6153reg [151:0] trap_entry_6_t4;
6154
6155always @(posedge `BENCH_SPC2_GCLK) begin // {
6156
6157 // Probes for nas_pipe
6158 tick_cmpr_4 <= `SPC2.tlu.tca.array.mem[{2'b0,3'h4}];
6159 stick_cmpr_4 <= `SPC2.tlu.tca.array.mem[{2'b01,3'h4}];
6160 hstick_cmpr_4 <= `SPC2.tlu.tca.array.mem[{2'b10,3'h4}];
6161 trap_entry_1_t4 <= `SPC2.tlu.tsa1.array.mem[{2'h0, 3'h0}];
6162 trap_entry_2_t4 <= `SPC2.tlu.tsa1.array.mem[{2'h0, 3'h1}];
6163 trap_entry_3_t4 <= `SPC2.tlu.tsa1.array.mem[{2'h0, 3'h2}];
6164 trap_entry_4_t4 <= `SPC2.tlu.tsa1.array.mem[{2'h0, 3'h3}];
6165 trap_entry_5_t4 <= `SPC2.tlu.tsa1.array.mem[{2'h0, 3'h4}];
6166 trap_entry_6_t4 <= `SPC2.tlu.tsa1.array.mem[{2'h0, 3'h5}];
6167
6168end // }
6169reg [71:0] tick_cmpr_5;
6170reg [71:0] stick_cmpr_5;
6171reg [71:0] hstick_cmpr_5;
6172reg [151:0] trap_entry_1_t5;
6173reg [151:0] trap_entry_2_t5;
6174reg [151:0] trap_entry_3_t5;
6175reg [151:0] trap_entry_4_t5;
6176reg [151:0] trap_entry_5_t5;
6177reg [151:0] trap_entry_6_t5;
6178
6179always @(posedge `BENCH_SPC2_GCLK) begin // {
6180
6181 // Probes for nas_pipe
6182 tick_cmpr_5 <= `SPC2.tlu.tca.array.mem[{2'b0,3'h5}];
6183 stick_cmpr_5 <= `SPC2.tlu.tca.array.mem[{2'b01,3'h5}];
6184 hstick_cmpr_5 <= `SPC2.tlu.tca.array.mem[{2'b10,3'h5}];
6185 trap_entry_1_t5 <= `SPC2.tlu.tsa1.array.mem[{2'h1, 3'h0}];
6186 trap_entry_2_t5 <= `SPC2.tlu.tsa1.array.mem[{2'h1, 3'h1}];
6187 trap_entry_3_t5 <= `SPC2.tlu.tsa1.array.mem[{2'h1, 3'h2}];
6188 trap_entry_4_t5 <= `SPC2.tlu.tsa1.array.mem[{2'h1, 3'h3}];
6189 trap_entry_5_t5 <= `SPC2.tlu.tsa1.array.mem[{2'h1, 3'h4}];
6190 trap_entry_6_t5 <= `SPC2.tlu.tsa1.array.mem[{2'h1, 3'h5}];
6191
6192end // }
6193reg [71:0] tick_cmpr_6;
6194reg [71:0] stick_cmpr_6;
6195reg [71:0] hstick_cmpr_6;
6196reg [151:0] trap_entry_1_t6;
6197reg [151:0] trap_entry_2_t6;
6198reg [151:0] trap_entry_3_t6;
6199reg [151:0] trap_entry_4_t6;
6200reg [151:0] trap_entry_5_t6;
6201reg [151:0] trap_entry_6_t6;
6202
6203always @(posedge `BENCH_SPC2_GCLK) begin // {
6204
6205 // Probes for nas_pipe
6206 tick_cmpr_6 <= `SPC2.tlu.tca.array.mem[{2'b0,3'h6}];
6207 stick_cmpr_6 <= `SPC2.tlu.tca.array.mem[{2'b01,3'h6}];
6208 hstick_cmpr_6 <= `SPC2.tlu.tca.array.mem[{2'b10,3'h6}];
6209 trap_entry_1_t6 <= `SPC2.tlu.tsa1.array.mem[{2'h2, 3'h0}];
6210 trap_entry_2_t6 <= `SPC2.tlu.tsa1.array.mem[{2'h2, 3'h1}];
6211 trap_entry_3_t6 <= `SPC2.tlu.tsa1.array.mem[{2'h2, 3'h2}];
6212 trap_entry_4_t6 <= `SPC2.tlu.tsa1.array.mem[{2'h2, 3'h3}];
6213 trap_entry_5_t6 <= `SPC2.tlu.tsa1.array.mem[{2'h2, 3'h4}];
6214 trap_entry_6_t6 <= `SPC2.tlu.tsa1.array.mem[{2'h2, 3'h5}];
6215
6216end // }
6217reg [71:0] tick_cmpr_7;
6218reg [71:0] stick_cmpr_7;
6219reg [71:0] hstick_cmpr_7;
6220reg [151:0] trap_entry_1_t7;
6221reg [151:0] trap_entry_2_t7;
6222reg [151:0] trap_entry_3_t7;
6223reg [151:0] trap_entry_4_t7;
6224reg [151:0] trap_entry_5_t7;
6225reg [151:0] trap_entry_6_t7;
6226
6227always @(posedge `BENCH_SPC2_GCLK) begin // {
6228
6229 // Probes for nas_pipe
6230 tick_cmpr_7 <= `SPC2.tlu.tca.array.mem[{2'b0,3'h7}];
6231 stick_cmpr_7 <= `SPC2.tlu.tca.array.mem[{2'b01,3'h7}];
6232 hstick_cmpr_7 <= `SPC2.tlu.tca.array.mem[{2'b10,3'h7}];
6233 trap_entry_1_t7 <= `SPC2.tlu.tsa1.array.mem[{2'h3, 3'h0}];
6234 trap_entry_2_t7 <= `SPC2.tlu.tsa1.array.mem[{2'h3, 3'h1}];
6235 trap_entry_3_t7 <= `SPC2.tlu.tsa1.array.mem[{2'h3, 3'h2}];
6236 trap_entry_4_t7 <= `SPC2.tlu.tsa1.array.mem[{2'h3, 3'h3}];
6237 trap_entry_5_t7 <= `SPC2.tlu.tsa1.array.mem[{2'h3, 3'h4}];
6238 trap_entry_6_t7 <= `SPC2.tlu.tsa1.array.mem[{2'h3, 3'h5}];
6239
6240end // }
6241
6242//------------------------------------
6243// ASI & Trap State machines
6244always @(posedge `BENCH_SPC2_GCLK) begin // {
6245
6246// pc_0_e[47:0] <= `SPC2.ifu_pc_d0[47:0];
6247// pc_1_e[47:0] <= `SPC2.ifu_pc_d1[47:0];
6248 pc_0_e[47:0] <= {`SPC2.tlu_pc_0_d[47:2], 2'b00};
6249 pc_1_e[47:0] <= {`SPC2.tlu_pc_1_d[47:2], 2'b00};
6250 pc_0_m[47:0] <= pc_0_e[47:0];
6251 pc_1_m[47:0] <= pc_1_e[47:0];
6252 pc_0_b[47:0] <= pc_0_m[47:0];
6253 pc_1_b[47:0] <= pc_1_m[47:0];
6254 pc_0_w[47:0] <= ({48 { select_pc_b[0]}} & pc_0_b[47:0]) |
6255 ({48 {~select_pc_b[0]}} & pc_0_w[47:0]) ;
6256 pc_1_w[47:0] <= ({48 { select_pc_b[1]}} & pc_0_b[47:0]) |
6257 ({48 {~select_pc_b[1]}} & pc_1_w[47:0]) ;
6258 pc_2_w[47:0] <= ({48 { select_pc_b[2]}} & pc_0_b[47:0]) |
6259 ({48 {~select_pc_b[2]}} & pc_2_w[47:0]) ;
6260 pc_3_w[47:0] <= ({48 { select_pc_b[3]}} & pc_0_b[47:0]) |
6261 ({48 {~select_pc_b[3]}} & pc_3_w[47:0]) ;
6262 pc_4_w[47:0] <= ({48 { select_pc_b[4]}} & pc_1_b[47:0]) |
6263 ({48 {~select_pc_b[4]}} & pc_4_w[47:0]) ;
6264 pc_5_w[47:0] <= ({48 { select_pc_b[5]}} & pc_1_b[47:0]) |
6265 ({48 {~select_pc_b[5]}} & pc_5_w[47:0]) ;
6266 pc_6_w[47:0] <= ({48 { select_pc_b[6]}} & pc_1_b[47:0]) |
6267 ({48 {~select_pc_b[6]}} & pc_6_w[47:0]) ;
6268 pc_7_w[47:0] <= ({48 { select_pc_b[7]}} & pc_1_b[47:0]) |
6269 ({48 {~select_pc_b[7]}} & pc_7_w[47:0]) ;
6270
6271
6272 // altspace_ldst_m is asserted for asi accesses that don't change arch state
6273 asi_store_b <= (`SPC2.lsu.dcc.asi_store_m & `SPC2.lsu.dcc.asi_sync_m);
6274 asi_store_w <= asi_store_b;
6275 dcc_tid_b <= `SPC2.lsu.dcc.dcc_tid_m;
6276 dcc_tid_w <= dcc_tid_b;
6277
6278 // ASI in progress state m/c
6279 if (asi_store_w & ~asi_store_flush_w[dcc_tid_w]) begin // {
6280 asi_in_progress_b[dcc_tid_w] <= 1'b1;
6281 end // }
6282
6283 asi_valid_w <= asi_in_progress_b & store_sync;
6284
6285 // Delay asi_valid_w and asi_in_progress
6286 // 2 clocks to ensure TLB Sync DTLBWRITE (demap) comes before SSTEP stxa
6287 asi_valid_fx4 <= asi_valid_w;
6288 asi_valid_fx5 <= asi_valid_fx4;
6289 asi_in_progress_w <= asi_in_progress_b;
6290 asi_in_progress_fx4 <= asi_in_progress_w;
6291 sync_reset_w <= sync_reset;
6292
6293 for (i=0;i<8;i=i+1) begin // {
6294 if (asi_valid_w[i] | sync_reset_w[i]) begin // {
6295 asi_in_progress_b[i] <= 1'b0;
6296 end//}
6297 end //}
6298
6299 // Trap0 pipeline [valid W stage]
6300
6301 for (i=0;i<4;i=i+1) begin // {
6302 // Done & Retry
6303 if ((`SPC2.tlu.tlu_trap_0_tid[1:0] == i) &&
6304 `SPC2.tlu.tlu_trap_pc_0_valid & tlu_ccr_cwp_0_valid_last)
6305 begin //{
6306 tlu_valid[i] <= 1'b1;
6307 end //}
6308 // Trap taken
6309 else if (`SPC2.tlu.trl0.real_trap[i] & ~`SPC2.tlu.trl0.take_por) begin // {
6310 tlu_valid[i] <= 1'b1;
6311 end //}
6312 else
6313 tlu_valid[i] <= 1'b0;
6314 end //}
6315
6316 // Trap1 pipeline [valid W stage]
6317
6318 for (i=0;i<4;i=i+1) begin // {
6319 // Done & Retry
6320 if ((`SPC2.tlu.tlu_trap_1_tid[1:0] == i) &&
6321 `SPC2.tlu.tlu_trap_pc_1_valid & tlu_ccr_cwp_1_valid_last)
6322 begin //{
6323 tlu_valid[i+4] <= 1'b1;
6324 end //}
6325 // Trap taken
6326 else if (`SPC2.tlu.trl1.real_trap[i] & ~`SPC2.tlu.trl1.take_por) begin // {
6327 tlu_valid[i+4] <= 1'b1;
6328 end //}
6329 else
6330 tlu_valid[i+4] <= 1'b0;
6331 end //}
6332
6333end // }
6334
6335
6336always @(posedge `BENCH_SPC2_GCLK) begin
6337
6338// debug code for TPCC analysis
6339`ifdef TPCC
6340if (pcx_req==1) begin
6341 if (`SPC2.spc_pcx_data_pa[129:124]==6'b100000) begin // l15 dmiss
6342 l15dmiss_cnt=l15dmiss_cnt+1;
6343 $display("dmissl15 cnt is %0d",l15dmiss_cnt);
6344 end
6345 if (`SPC2.spc_pcx_data_pa[129:124]==6'b110000) begin // l15 imiss
6346 l15imiss_cnt=l15imiss_cnt+1;
6347 $display("imissl15 cnt is %0d",l15imiss_cnt);
6348 end
6349 // `TOP.spg.spc_pcx_data_pa[129:124]==6'b100001 -> all stores
6350end
6351
6352pcx_req <= |`SPC2.spc_pcx_req_pq[8:0];
6353
6354if (`SPC2.ifu_l15_valid==1) begin
6355 imiss_cnt=imiss_cnt+1;
6356 $display("imiss cnt is %0d",imiss_cnt);
6357end
6358if (spec_dmiss==1 && `SPC2.lsu_l15_cancel==0) begin
6359 dmiss_cnt=dmiss_cnt+1;
6360 $display("dmiss cnt is %0d",dmiss_cnt);
6361
6362end
6363spec_dmiss <= `SPC2.lsu_l15_valid & `SPC2.lsu_l15_load;
6364
6365clock = clock+1;
6366
6367// keep track of imiss latencies
6368if (`SPC2.ftu_agc_thr0_cmiss_c==1) begin
6369 start_imiss0=clock;
6370 active_imiss0=1;
6371end
6372if (active_imiss0==1 && first_imiss0==1 && `SPC2.l15_spc_cpkt[8:6]==3'b000 && `SPC2.l15_spc_valid==1 && `SPC2.l15_spc_cpkt[17:14]==4'b0001) begin
6373 sum_imiss_latency = sum_imiss_latency + clock - start_imiss0 + 1;
6374 number_imiss = number_imiss + 1;
6375 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
6376 active_imiss0=0;
6377 first_imiss0=0;
6378end
6379if (active_imiss0==1 && first_imiss0==0 && `SPC2.l15_spc_cpkt[8:6]==3'b000 && `SPC2.l15_spc_valid==1 && `SPC2.l15_spc_cpkt[17:14]==4'b0001) begin
6380 first_imiss0=1;
6381end
6382if (`SPC2.ftu_agc_thr1_cmiss_c==1) begin
6383 start_imiss1=clock;
6384 active_imiss1=1;
6385end
6386if (active_imiss1==1 && first_imiss1==1 && `SPC2.l15_spc_cpkt[8:6]==3'b001 && `SPC2.l15_spc_valid==1 && `SPC2.l15_spc_cpkt[17:14]==4'b0001) begin
6387 sum_imiss_latency = sum_imiss_latency + clock - start_imiss1 + 1;
6388 number_imiss = number_imiss + 1;
6389 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
6390 active_imiss1=0;
6391 first_imiss1=0;
6392end
6393if (active_imiss1==1 && first_imiss1==0 && `SPC2.l15_spc_cpkt[8:6]==3'b001 && `SPC2.l15_spc_valid==1 && `SPC2.l15_spc_cpkt[17:14]==4'b0001) begin
6394 first_imiss1=1;
6395end
6396if (`SPC2.ftu_agc_thr2_cmiss_c==1) begin
6397 start_imiss2=clock;
6398 active_imiss2=1;
6399end
6400if (active_imiss2==1 && first_imiss2==1 && `SPC2.l15_spc_cpkt[8:6]==3'b010 && `SPC2.l15_spc_valid==1 && `SPC2.l15_spc_cpkt[17:14]==4'b0001) begin
6401 sum_imiss_latency = sum_imiss_latency + clock - start_imiss2 + 1;
6402 number_imiss = number_imiss + 1;
6403 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
6404 active_imiss2=0;
6405 first_imiss2=0;
6406end
6407if (active_imiss2==1 && first_imiss2==0 && `SPC2.l15_spc_cpkt[8:6]==3'b010 && `SPC2.l15_spc_valid==1 && `SPC2.l15_spc_cpkt[17:14]==4'b0001) begin
6408 first_imiss2=1;
6409end
6410if (`SPC2.ftu_agc_thr3_cmiss_c==1) begin
6411 start_imiss3=clock;
6412 active_imiss3=1;
6413end
6414if (active_imiss3==1 && first_imiss3==1 && `SPC2.l15_spc_cpkt[8:6]==3'b011 && `SPC2.l15_spc_valid==1 && `SPC2.l15_spc_cpkt[17:14]==4'b0001) begin
6415 sum_imiss_latency = sum_imiss_latency + clock - start_imiss3 + 1;
6416 number_imiss = number_imiss + 1;
6417 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
6418 active_imiss3=0;
6419 first_imiss3=0;
6420end
6421if (active_imiss3==1 && first_imiss3==0 && `SPC2.l15_spc_cpkt[8:6]==3'b011 && `SPC2.l15_spc_valid==1 && `SPC2.l15_spc_cpkt[17:14]==4'b0001) begin
6422 first_imiss3=1;
6423end
6424if (`SPC2.ftu_agc_thr4_cmiss_c==1) begin
6425 start_imiss4=clock;
6426 active_imiss4=1;
6427end
6428if (active_imiss4==1 && first_imiss4==1 && `SPC2.l15_spc_cpkt[8:6]==3'b100 && `SPC2.l15_spc_valid==1 && `SPC2.l15_spc_cpkt[17:14]==4'b0001) begin
6429 sum_imiss_latency = sum_imiss_latency + clock - start_imiss4 + 1;
6430 number_imiss = number_imiss + 1;
6431 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
6432 active_imiss4=0;
6433 first_imiss4=0;
6434end
6435if (active_imiss4==1 && first_imiss4==0 && `SPC2.l15_spc_cpkt[8:6]==3'b100 && `SPC2.l15_spc_valid==1 && `SPC2.l15_spc_cpkt[17:14]==4'b0001) begin
6436 first_imiss4=1;
6437end
6438if (`SPC2.ftu_agc_thr5_cmiss_c==1) begin
6439 start_imiss5=clock;
6440 active_imiss5=1;
6441end
6442if (active_imiss5==1 && first_imiss5==1 && `SPC2.l15_spc_cpkt[8:6]==3'b101 && `SPC2.l15_spc_valid==1 && `SPC2.l15_spc_cpkt[17:14]==4'b0001) begin
6443 sum_imiss_latency = sum_imiss_latency + clock - start_imiss5 + 1;
6444 number_imiss = number_imiss + 1;
6445 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
6446 active_imiss5=0;
6447 first_imiss5=0;
6448end
6449if (active_imiss5==1 && first_imiss5==0 && `SPC2.l15_spc_cpkt[8:6]==3'b101 && `SPC2.l15_spc_valid==1 && `SPC2.l15_spc_cpkt[17:14]==4'b0001) begin
6450 first_imiss5=1;
6451end
6452if (`SPC2.ftu_agc_thr6_cmiss_c==1) begin
6453 start_imiss6=clock;
6454 active_imiss6=1;
6455end
6456if (active_imiss6==1 && first_imiss6==1 && `SPC2.l15_spc_cpkt[8:6]==3'b110 && `SPC2.l15_spc_valid==1 && `SPC2.l15_spc_cpkt[17:14]==4'b0001) begin
6457 sum_imiss_latency = sum_imiss_latency + clock - start_imiss6 + 1;
6458 number_imiss = number_imiss + 1;
6459 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
6460 active_imiss6=0;
6461 first_imiss6=0;
6462end
6463if (active_imiss6==1 && first_imiss6==0 && `SPC2.l15_spc_cpkt[8:6]==3'b110 && `SPC2.l15_spc_valid==1 && `SPC2.l15_spc_cpkt[17:14]==4'b0001) begin
6464 first_imiss6=1;
6465end
6466if (`SPC2.ftu_agc_thr7_cmiss_c==1) begin
6467 start_imiss7=clock;
6468 active_imiss7=1;
6469end
6470if (active_imiss7==1 && first_imiss7==1 && `SPC2.l15_spc_cpkt[8:6]==3'b111 && `SPC2.l15_spc_valid==1 && `SPC2.l15_spc_cpkt[17:14]==4'b0001) begin
6471 sum_imiss_latency = sum_imiss_latency + clock - start_imiss7 + 1;
6472 number_imiss = number_imiss + 1;
6473 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
6474 active_imiss7=0;
6475 first_imiss7=0;
6476end
6477if (active_imiss7==1 && first_imiss7==0 && `SPC2.l15_spc_cpkt[8:6]==3'b111 && `SPC2.l15_spc_valid==1 && `SPC2.l15_spc_cpkt[17:14]==4'b0001) begin
6478 first_imiss7=1;
6479end
6480
6481if (`SPC2.pku.swl0.set_lsu_sync_wait==1) begin
6482 start_dmiss0=clock;
6483end
6484if (`SPC2.pku.swl0.clear_lsu_sync_wait==1) begin
6485 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss0) + 3;
6486 number_dmiss = number_dmiss + 1;
6487 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
6488end
6489if (`SPC2.pku.swl1.set_lsu_sync_wait==1) begin
6490 start_dmiss1=clock;
6491end
6492if (`SPC2.pku.swl1.clear_lsu_sync_wait==1) begin
6493 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss1) + 3;
6494 number_dmiss = number_dmiss + 1;
6495 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
6496end
6497if (`SPC2.pku.swl2.set_lsu_sync_wait==1) begin
6498 start_dmiss2=clock;
6499end
6500if (`SPC2.pku.swl2.clear_lsu_sync_wait==1) begin
6501 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss2) + 3;
6502 number_dmiss = number_dmiss + 1;
6503 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
6504end
6505if (`SPC2.pku.swl3.set_lsu_sync_wait==1) begin
6506 start_dmiss3=clock;
6507end
6508if (`SPC2.pku.swl3.clear_lsu_sync_wait==1) begin
6509 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss3) + 3;
6510 number_dmiss = number_dmiss + 1;
6511 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
6512end
6513if (`SPC2.pku.swl4.set_lsu_sync_wait==1) begin
6514 start_dmiss4=clock;
6515end
6516if (`SPC2.pku.swl4.clear_lsu_sync_wait==1) begin
6517 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss4) + 3;
6518 number_dmiss = number_dmiss + 1;
6519 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
6520end
6521if (`SPC2.pku.swl5.set_lsu_sync_wait==1) begin
6522 start_dmiss5=clock;
6523end
6524if (`SPC2.pku.swl5.clear_lsu_sync_wait==1) begin
6525 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss5) + 3;
6526 number_dmiss = number_dmiss + 1;
6527 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
6528end
6529if (`SPC2.pku.swl6.set_lsu_sync_wait==1) begin
6530 start_dmiss6=clock;
6531end
6532if (`SPC2.pku.swl6.clear_lsu_sync_wait==1) begin
6533 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss6) + 3;
6534 number_dmiss = number_dmiss + 1;
6535 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
6536end
6537if (`SPC2.pku.swl7.set_lsu_sync_wait==1) begin
6538 start_dmiss7=clock;
6539end
6540if (`SPC2.pku.swl7.clear_lsu_sync_wait==1) begin
6541 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss7) + 3;
6542 number_dmiss = number_dmiss + 1;
6543 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
6544end
6545`endif
6546
6547
6548
6549 lsu_tid_e[2:0] <= `SPC2.lsu.dcc.tid_d[2:0];
6550
6551 // FG Valid conditions
6552
6553 // Add fcc valids to fg_valid
6554 fcc_valid_fb <= fcc_valid_f5;
6555 fcc_valid_f5 <= fcc_valid_f4;
6556 fcc_valid_f4 <= |`SPC2.fgu.fgu_cmp_fcc_vld_fx3[3:0];
6557
6558 fg_flush_fb <= fg_flush_f5;
6559 fg_flush_f5 <= fg_flush_f4;
6560 fg_flush_f4 <= fg_flush_f3;
6561 fg_flush_f3 <= fg_flush_f2 | `SPC2.dec_flush_f2 |
6562 `SPC2.tlu_flush_fgu_b;
6563 fg_flush_f2 <= `SPC2.dec_flush_f1;
6564
6565 fgu_err_fx3 <= `SPC2.fgu_cecc_fx2 | `SPC2.fgu_uecc_fx2 | `SPC2.fgu.fpc.exu_flush_fx2; // frf or irf ecc error
6566 fgu_err_fx4 <= fgu_err_fx3;
6567 fgu_err_fx5 <= fgu_err_fx4;
6568 fgu_err_fb <= fgu_err_fx5;
6569
6570 // Siams cause fg_valid ..
6571 siam0_d = `SPC2.dec.dec_inst0_d[31:30]==2'b10 &
6572 `SPC2.dec.dec_inst0_d[24:19]==6'b110110 &
6573 `SPC2.dec.dec_inst0_d[13:5]==9'b010000001;
6574
6575 siam1_d = `SPC2.dec.dec_inst1_d[31:30]==2'b10 &
6576 `SPC2.dec.dec_inst1_d[24:19]==6'b110110 &
6577 `SPC2.dec.dec_inst1_d[13:5]==9'b010000001;
6578
6579
6580 done0_d = `SPC2.dec.dec_inst0_d[31:30]==2'b10 &
6581 `SPC2.dec.dec_inst0_d[29:25]==5'b00000 &
6582 `SPC2.dec.dec_inst0_d[24:19]==6'b111110;
6583 done1_d = `SPC2.dec.dec_inst1_d[31:30]==2'b10 &
6584 `SPC2.dec.dec_inst1_d[29:25]==5'b00000 &
6585 `SPC2.dec.dec_inst1_d[24:19]==6'b111110;
6586
6587 retry0_d = `SPC2.dec.dec_inst0_d[31:30]==2'b10 &
6588 `SPC2.dec.dec_inst0_d[29:25]==5'b00001 &
6589 `SPC2.dec.dec_inst0_d[24:19]==6'b111110;
6590 retry1_d = `SPC2.dec.dec_inst1_d[31:30]==2'b10 &
6591 `SPC2.dec.dec_inst1_d[29:25]==5'b00001 &
6592 `SPC2.dec.dec_inst1_d[24:19]==6'b111110;
6593
6594 done0_e <= done0_d & `SPC2.dec.dec_decode0_d;
6595 done1_e <= done1_d & `SPC2.dec.dec_decode1_d;
6596
6597 retry0_e <= retry0_d & `SPC2.dec.dec_decode0_d;
6598 retry1_e <= retry1_d & `SPC2.dec.dec_decode1_d;
6599
6600
6601 // fold siam into cmov logic
6602
6603 fmov_valid_fb <= fmov_valid_f5;
6604 fmov_valid_f5 <= fmov_valid_f4;
6605 fmov_valid_f4 <= fmov_valid_f3;
6606 fmov_valid_f3 <= fmov_valid_f2;
6607 fmov_valid_f2 <= fmov_valid_m;
6608 fmov_valid_m <= fmov_valid_e & `SPC2.dec.dec_fgu_valid_e;
6609 fmov_valid_e <= ((`SPC2.exu0.ect.cmov_d | siam0_d) &
6610 `SPC2.dec.dec_decode0_d&`SPC2.dec.del.fgu0_d) |
6611 ((`SPC2.exu1.ect.cmov_d | siam1_d) &
6612 `SPC2.dec.dec_decode1_d&`SPC2.dec.del.fgu1_d);
6613
6614 // fgu check bus
6615
6616 // fcc_valid_fb doesn't assert for LDFSR. LDFSR gets checked by the LSU
6617 // checker
6618
6619 fg_valid <= {(`SPC2.fgu.fac.fac_w1_tid_fb[2:0]==3'h7) && fg_cond_fb,
6620 (`SPC2.fgu.fac.fac_w1_tid_fb[2:0]==3'h6) && fg_cond_fb,
6621 (`SPC2.fgu.fac.fac_w1_tid_fb[2:0]==3'h5) && fg_cond_fb,
6622 (`SPC2.fgu.fac.fac_w1_tid_fb[2:0]==3'h4) && fg_cond_fb,
6623 (`SPC2.fgu.fac.fac_w1_tid_fb[2:0]==3'h3) && fg_cond_fb,
6624 (`SPC2.fgu.fac.fac_w1_tid_fb[2:0]==3'h2) && fg_cond_fb,
6625 (`SPC2.fgu.fac.fac_w1_tid_fb[2:0]==3'h1) && fg_cond_fb,
6626 (`SPC2.fgu.fac.fac_w1_tid_fb[2:0]==3'h0) && fg_cond_fb };
6627
6628
6629 fgu_valid_fb0 <= `SPC2.fgu_exu_w_vld_fx5[0] && !`SPC2.fgu.fpc.div_finish_int_fb;
6630 fgu_valid_fb1 <= `SPC2.fgu_exu_w_vld_fx5[1] && !`SPC2.fgu.fpc.div_finish_int_fb;
6631
6632 // Fdiv
6633 div_special_cancel_f4[7:0] <= tid2onehot(`SPC2.fgu.fac.tid_fx3[2:0]) &
6634 {8{`SPC2.fgu.fac.q_div_default_res_fx3}};
6635 fg_fdiv_valid_fw <= `SPC2.fgu_divide_completion & ~div_special_cancel_f4 &
6636 {8{~`SPC2.fgu.fpc.fpc_fpd_ieee_trap_fb}} &
6637 {8{~`SPC2.fgu.fpc.fpc_fpd_unfin_fb}};
6638
6639
6640 // Used in CCX Stub ?
6641 inst0_e[31:0] <= `SPC2.dec.dec_inst0_d[31:0];
6642 inst1_e[31:0] <= `SPC2.dec.dec_inst1_d[31:0];
6643
6644 // only fgu ops that are not loads/stores
6645 fgu0_e <= `SPC2.dec.del.decode_fgu0_d;
6646 fgu1_e <= `SPC2.dec.del.decode_fgu1_d;
6647
6648 // LSU logic
6649 load_b <= load_m;
6650 load_m <= (load0_e | load1_e);
6651
6652 load0_e <= (`SPC2.dec.dec_decode0_d & `SPC2.dec.del.lsu0_d &
6653 `SPC2.dec.dcd0.dcd_load_d);
6654
6655 load1_e <= (`SPC2.dec.dec_decode1_d & `SPC2.dec.del.lsu1_d &
6656 `SPC2.dec.dcd1.dcd_load_d);
6657
6658 lsu_tid_b[2:0] <= lsu_tid_m[2:0];
6659 lsu_tid_m[2:0] <= lsu_tid_e[2:0];
6660
6661 lsu_complete_m[7:0] <= `SPC2.lsu_complete[7:0];
6662 lsu_complete_b[7:0] <= lsu_complete_m[7:0];
6663
6664 lsu_data_w <= lsu_data_b;
6665
6666 // Divide destination logic ..
6667 sel_divide0_e <= (`SPC2.dec_decode0_d &
6668 ((`SPC2.pku.swl0.vld_d & `SPC2.pku.swl_divide_wait[0]) |
6669 (`SPC2.pku.swl1.vld_d & `SPC2.pku.swl_divide_wait[1]) |
6670 (`SPC2.pku.swl2.vld_d & `SPC2.pku.swl_divide_wait[2]) |
6671 (`SPC2.pku.swl3.vld_d & `SPC2.pku.swl_divide_wait[3])));
6672 sel_divide1_e <= (`SPC2.dec_decode1_d &
6673 ((`SPC2.pku.swl4.vld_d & `SPC2.pku.swl_divide_wait[4]) |
6674 (`SPC2.pku.swl5.vld_d & `SPC2.pku.swl_divide_wait[5]) |
6675 (`SPC2.pku.swl6.vld_d & `SPC2.pku.swl_divide_wait[6]) |
6676 (`SPC2.pku.swl7.vld_d & `SPC2.pku.swl_divide_wait[7])));
6677
6678
6679 dcd_fdest_e <= {`SPC2.dec.del.fdest1_d,`SPC2.dec.del.fdest0_d};
6680 dcd_idest_e <= {`SPC2.dec.del.idest1_d,`SPC2.dec.del.idest0_d};
6681
6682 if (sel_divide0_e) begin // {
6683 div_idest[{1'b0, `SPC2.dec.del.tid0_e[1:0]}] <= dcd_idest_e[0];
6684 div_fdest[{1'b0, `SPC2.dec.del.tid0_e[1:0]}] <= dcd_fdest_e[0];
6685 end // }
6686 if (sel_divide1_e) begin // {
6687 div_idest[{1'b1, `SPC2.dec.del.tid1_e[1:0]}] <= dcd_idest_e[1];
6688 div_fdest[{1'b1, `SPC2.dec.del.tid1_e[1:0]}] <= dcd_fdest_e[1];
6689 end // }
6690
6691
6692 // EX logic
6693 // Save EX tids for later use
6694 ex0_tid_m <= ex0_tid_e;
6695 ex1_tid_m <= ex1_tid_e;
6696 ex0_tid_b <= ex0_tid_m;
6697 ex1_tid_b <= ex1_tid_m;
6698 ex0_tid_w <= ex0_tid_b;
6699 ex1_tid_w <= ex1_tid_b;
6700
6701 // EX Flush conditions
6702 ex_flush_w <= {ex_flush_b | {{4{(`SPC2.dec.dec_flush_b[1] |
6703 `SPC2.tlu_flush_exu_b[1])}},
6704 {4{(`SPC2.dec.dec_flush_b[0] |
6705 `SPC2.tlu_flush_exu_b[0])}}}};
6706
6707 ex_flush_b <= {{4{`SPC2.dec.dec_flush_m[1]}},
6708 {4{`SPC2.dec.dec_flush_m[0]}}};
6709
6710
6711 // ex_valid_f4 valid will only fire on return
6712 return_f4 <= return_w & ~(`SPC2.tlu_flush_ifu & real_exception);
6713 ex_valid_w <= ex_valid_b;
6714
6715 // Cancel EX valid if it turns out to be asr/asi access for this tid
6716
6717 ex_valid_b <= ex_valid_m & ~ex_asr_access;
6718
6719
6720 ex_valid_m <= { (ex1_tid_e == 2'h3) && ex1_valid_e,
6721 (ex1_tid_e == 2'h2) && ex1_valid_e,
6722 (ex1_tid_e == 2'h1) && ex1_valid_e,
6723 (ex1_tid_e == 2'h0) && ex1_valid_e,
6724 (ex0_tid_e == 2'h3) && ex0_valid_e,
6725 (ex0_tid_e == 2'h2) && ex0_valid_e,
6726 (ex0_tid_e == 2'h1) && ex0_valid_e,
6727 (ex0_tid_e == 2'h0) && ex0_valid_e};
6728
6729
6730 // TLU delays for done and retries
6731 tlu_ccr_cwp_0_valid_last <= `SPC2.tlu.tlu_ccr_cwp_0_valid;
6732 tlu_ccr_cwp_1_valid_last <= `SPC2.tlu.tlu_ccr_cwp_1_valid;
6733
6734
6735end // END posedge gclk
6736
6737// Return instruction is separated out of ex*_valid because CWP update is in
6738// W+1 for return new window is not available for IRF scan (nas_pipe) until
6739// W+2
6740assign return0 = `SPC2.exu0.rml.return_w &
6741 `SPC2.exu0.rml.inst_vld_w;
6742assign return1 = `SPC2.exu1.rml.return_w &
6743 `SPC2.exu1.rml.inst_vld_w;
6744assign return_w = {(ex1_tid_w == 2'h3) && return1,
6745 (ex1_tid_w == 2'h2) && return1,
6746 (ex1_tid_w == 2'h1) && return1,
6747 (ex1_tid_w == 2'h0) && return1,
6748 (ex0_tid_w == 2'h3) && return0,
6749 (ex0_tid_w == 2'h2) && return0,
6750 (ex0_tid_w == 2'h1) && return0,
6751 (ex0_tid_w == 2'h0) && return0};
6752
6753
6754// Cancel EX valid if it turns out that exception (tlu flush) taken for
6755// this tid
6756
6757// exu check bus
6758assign ex0_tid_e = `SPC2.exu0.ect_tid_lth_e[1:0];
6759assign ex0_valid_e = `SPC2.dec.dec_valid_e[0] & ~fgu0_e & ~load0_e &
6760 ~retry0_e & ~done0_e;
6761assign ex1_tid_e = `SPC2.exu1.ect_tid_lth_e[1:0];
6762assign ex1_valid_e = `SPC2.dec.dec_valid_e[1] & ~fgu1_e & ~load1_e &
6763 ~retry1_e & ~done1_e;
6764
6765assign ex_asr_valid = `SPC2.lsu.dcc.asi_store_m & `SPC2.lsu.dcc.asi_sync_m ;
6766
6767assign ex_asr_access ={(`SPC2.lsu.dcc.dcc_tid_m[2:0]==3'h7) & ex_asr_valid,
6768 (`SPC2.lsu.dcc.dcc_tid_m[2:0]==3'h6) & ex_asr_valid,
6769 (`SPC2.lsu.dcc.dcc_tid_m[2:0]==3'h5) & ex_asr_valid,
6770 (`SPC2.lsu.dcc.dcc_tid_m[2:0]==3'h4) & ex_asr_valid,
6771 (`SPC2.lsu.dcc.dcc_tid_m[2:0]==3'h3) & ex_asr_valid,
6772 (`SPC2.lsu.dcc.dcc_tid_m[2:0]==3'h2) & ex_asr_valid,
6773 (`SPC2.lsu.dcc.dcc_tid_m[2:0]==3'h1) & ex_asr_valid,
6774 (`SPC2.lsu.dcc.dcc_tid_m[2:0]==3'h0) & ex_asr_valid};
6775
6776
6777// EXU valid is ex_valid_w, except flushes, delayed return, traps, and stfsr
6778// real_exception added because tlu_flush_ifu activates for second redirect
6779// of retry if TPC and TNPC are not verified as sequential
6780assign real_exception =
6781 {{4 {`SPC2.tlu.fls1.dec_exc_w |
6782 `SPC2.tlu.fls1.exu_exc_w |
6783 `SPC2.tlu.fls1.lsu_exc_w |
6784 `SPC2.tlu.fls1.bsee_req_w}},
6785 {4 {`SPC2.tlu.fls0.dec_exc_w |
6786 `SPC2.tlu.fls0.exu_exc_w |
6787 `SPC2.tlu.fls0.lsu_exc_w |
6788 `SPC2.tlu.fls0.bsee_req_w}}};
6789
6790// Do not assert ex_valid for block store instructions
6791wire [7:0] block_store_first_at_w =
6792 {`SPC2.lsu.sbs7.bst_pend & `SPC2.lsu.sbs7.blk_inst_w,
6793 `SPC2.lsu.sbs6.bst_pend & `SPC2.lsu.sbs6.blk_inst_w,
6794 `SPC2.lsu.sbs5.bst_pend & `SPC2.lsu.sbs5.blk_inst_w,
6795 `SPC2.lsu.sbs4.bst_pend & `SPC2.lsu.sbs4.blk_inst_w,
6796 `SPC2.lsu.sbs3.bst_pend & `SPC2.lsu.sbs3.blk_inst_w,
6797 `SPC2.lsu.sbs2.bst_pend & `SPC2.lsu.sbs2.blk_inst_w,
6798 `SPC2.lsu.sbs1.bst_pend & `SPC2.lsu.sbs1.blk_inst_w,
6799 `SPC2.lsu.sbs0.bst_pend & `SPC2.lsu.sbs0.blk_inst_w};
6800
6801// But inject a valid for a block store that's done...
6802reg [7:0] block_store_w;
6803always @(posedge `BENCH_SPC2_GCLK) begin
6804 block_store_w[7:0] <= `SPC2.lsu.lsu_block_store_b[7:0];
6805 lsu_trap_flush_d <= `SPC2.lsu_trap_flush[7:0];
6806end
6807
6808wire [7:0] block_store_inject_at_w =
6809 ~`SPC2.lsu.lsu_block_store_b[7:0] &
6810 block_store_w[7:0] &
6811 {~`SPC2.lsu.sbs7.bst_kill,
6812 ~`SPC2.lsu.sbs6.bst_kill,
6813 ~`SPC2.lsu.sbs5.bst_kill,
6814 ~`SPC2.lsu.sbs4.bst_kill,
6815 ~`SPC2.lsu.sbs3.bst_kill,
6816 ~`SPC2.lsu.sbs2.bst_kill,
6817 ~`SPC2.lsu.sbs1.bst_kill,
6818 ~`SPC2.lsu.sbs0.bst_kill};
6819
6820assign ex_valid = (((ex_valid_w & ~ex_flush_w & ~return_w & ~block_store_first_at_w & ~exception_w &
6821 ~({{4{`SPC2.tlu.fls1.exu_exc_b & `SPC2.tlu.fls1.beat_two_b}},
6822 {4{`SPC2.tlu.fls0.exu_exc_b & `SPC2.tlu.fls0.beat_two_b}}}) &
6823 ~{(`SPC2.fgu.fac.tid_fx3[2:0]==3'h7) & `SPC2.fgu.fpc.fsr_store_fx3,
6824 (`SPC2.fgu.fac.tid_fx3[2:0]==3'h6) & `SPC2.fgu.fpc.fsr_store_fx3,
6825 (`SPC2.fgu.fac.tid_fx3[2:0]==3'h5) & `SPC2.fgu.fpc.fsr_store_fx3,
6826 (`SPC2.fgu.fac.tid_fx3[2:0]==3'h4) & `SPC2.fgu.fpc.fsr_store_fx3,
6827 (`SPC2.fgu.fac.tid_fx3[2:0]==3'h3) & `SPC2.fgu.fpc.fsr_store_fx3,
6828 (`SPC2.fgu.fac.tid_fx3[2:0]==3'h2) & `SPC2.fgu.fpc.fsr_store_fx3,
6829 (`SPC2.fgu.fac.tid_fx3[2:0]==3'h1) & `SPC2.fgu.fpc.fsr_store_fx3,
6830 (`SPC2.fgu.fac.tid_fx3[2:0]==3'h0) & `SPC2.fgu.fpc.fsr_store_fx3}) |
6831 block_store_inject_at_w) &
6832 ~(`SPC2.tlu_flush_ifu & real_exception)) | return_f4;
6833
6834assign exception_w = {{4 {`SPC2.tlu.fls1.exc_for_w}} |
6835 `SPC2.tlu.fls1.bsee_req[3:0] |
6836 `SPC2.tlu.fls1.pdist_ecc_w[3:0],
6837 {4 {`SPC2.tlu.fls0.exc_for_w}} |
6838 `SPC2.tlu.fls0.bsee_req[3:0] |
6839 `SPC2.tlu.fls0.pdist_ecc_w[3:0]};
6840
6841// imul check bus - includes imul, save, restore instructions
6842assign imul_valid = {(`SPC2.exu1.ect_tid_lth_w[1:0]== 2'h3) & fgu_valid_fb1,
6843 (`SPC2.exu1.ect_tid_lth_w[1:0]== 2'h2) & fgu_valid_fb1,
6844 (`SPC2.exu1.ect_tid_lth_w[1:0]== 2'h1) & fgu_valid_fb1,
6845 (`SPC2.exu1.ect_tid_lth_w[1:0]== 2'h0) & fgu_valid_fb1,
6846 (`SPC2.exu0.ect_tid_lth_w[1:0]== 2'h3) & fgu_valid_fb0,
6847 (`SPC2.exu0.ect_tid_lth_w[1:0]== 2'h2) & fgu_valid_fb0,
6848 (`SPC2.exu0.ect_tid_lth_w[1:0]== 2'h1) & fgu_valid_fb0,
6849 (`SPC2.exu0.ect_tid_lth_w[1:0]== 2'h0) & fgu_valid_fb0};
6850
6851//qualify this signal with fgu_err. If fgu_err is encountered, deassert
6852//fg_cond_fb, so we don't send a step to Riesling.
6853
6854// FGU conditions
6855wire fg_cond_fb_pre_err = `SPC2.fgu.fpc.fpc_w1_ul_vld_fb | fcc_valid_fb |
6856 (fmov_valid_fb & ~fg_flush_fb) |
6857 (`SPC2.fgu.fac.fsr_w1_vld_fb[1]); // covers ST(X)FSR, which clears FSR.ftt
6858
6859assign fg_cond_fb = fg_cond_fb_pre_err & ~fgu_err_fb;
6860
6861// Idiv/Fdiv signals
6862
6863assign fgu_idiv_valid = fg_div_valid & div_idest;
6864
6865
6866assign fgu_fdiv_valid = fg_fdiv_valid_fw & div_fdest;
6867
6868
6869// Lsu signals needed to check lsu results
6870
6871assign lsu_valid = lsu_check | lsu_data_w;
6872
6873assign fg_div_valid = `SPC2.fgu_divide_completion & ~div_special_cancel_f4;
6874
6875// State machine asserts lsu_check for LD hit/miss
6876always @(posedge `BENCH_SPC2_GCLK) begin
6877 for (i=0; i<=7;i=i+1) begin // {
6878 lsu_check[i] <= 1'b0;
6879 case (lsu_state[i])
6880 1'b0: // IDLE state
6881 begin
6882 // LD hit
6883 if (lsu_ld_valid & lsu_tid_dec_b[i] & load_b) begin
6884 lsu_check[i] <= 1'b1;
6885 lsu_state[i] <= 1'b0; // IDLE state
6886 end
6887 // LD miss - normal case
6888 else if (lsu_ld_valid & lsu_tid_dec_b[i] & lsu_complete_b[i])
6889 begin
6890 lsu_check[i] <= 1'b1;
6891 lsu_state[i] <= 1'b0; // IDLE state
6892 end
6893 // LD miss - LDD or Block LD or SWAP
6894 else if (lsu_ld_valid & lsu_tid_dec_b[i]) begin
6895 lsu_state[i] <= 1'b1; // VALID state
6896 end
6897// Added a new term to handle STB uncorrectable errors on atomic or asi stores that are synced
6898//Send a complete if an atomic is squashed.
6899//lsu_trap_flush is asserted a cycle after the block_store_kill is asserted
6900 else if (`SPC2.lsu.dcc.sync_st[i] & `SPC2.lsu_block_store_kill[i] & ~lsu_trap_flush_d[i])
6901 begin
6902 lsu_check[i] <= 1'b1;
6903 lsu_state[i] <= 1'b0; // IDLE state
6904 end
6905 else begin
6906 lsu_state[i] <= lsu_state[i];
6907 end
6908
6909 end
6910 1'b1: // VALID state
6911 begin
6912 if ((lsu_complete_b[i])) begin
6913 lsu_check[i] <= 1'b1;
6914 lsu_state[i] <= 1'b0; // IDLE state
6915 end
6916 else begin
6917 lsu_state[i] <= lsu_state[i];
6918 end
6919 end
6920 endcase
6921 end // }
6922end
6923
6924
6925assign lsu_tid = `SPC2.lsu.dcc.ld_tid_b[2:0];
6926// Don't assert LSU_complete in case of dtlb or irf errors
6927
6928assign lsu_valid_b = (`SPC2.lsu.dcc.pref_inst_b &
6929 ~(dec_flush_lb | `SPC2.lsu.dcc.pipe_flush_b |
6930 `SPC2.lsu_dtdp_err_b | `SPC2.lsu_dttp_err_b |
6931 `SPC2.lsu_dtmh_err_b | `SPC2.lsu.dcc.exu_error_b));
6932
6933assign lsu_data_b[7:0] = { (lsu_tid == 3'h7) & lsu_valid_b,
6934 (lsu_tid == 3'h6) & lsu_valid_b,
6935 (lsu_tid == 3'h5) & lsu_valid_b,
6936 (lsu_tid == 3'h4) & lsu_valid_b,
6937 (lsu_tid == 3'h3) & lsu_valid_b,
6938 (lsu_tid == 3'h2) & lsu_valid_b,
6939 (lsu_tid == 3'h1) & lsu_valid_b,
6940 (lsu_tid == 3'h0) & lsu_valid_b};
6941
6942assign lsu_tid_dec_b[0] = `SPC2.lsu.dcc.ld_tid_b[2:0] == 3'd0;
6943assign lsu_tid_dec_b[1] = `SPC2.lsu.dcc.ld_tid_b[2:0] == 3'd1;
6944assign lsu_tid_dec_b[2] = `SPC2.lsu.dcc.ld_tid_b[2:0] == 3'd2;
6945assign lsu_tid_dec_b[3] = `SPC2.lsu.dcc.ld_tid_b[2:0] == 3'd3;
6946assign lsu_tid_dec_b[4] = `SPC2.lsu.dcc.ld_tid_b[2:0] == 3'd4;
6947assign lsu_tid_dec_b[5] = `SPC2.lsu.dcc.ld_tid_b[2:0] == 3'd5;
6948assign lsu_tid_dec_b[6] = `SPC2.lsu.dcc.ld_tid_b[2:0] == 3'd6;
6949assign lsu_tid_dec_b[7] = `SPC2.lsu.dcc.ld_tid_b[2:0] == 3'd7;
6950
6951assign lsu_ld_valid = (`SPC2.lsu.dcc.exu_ld_vld_b |`SPC2.lsu.dcc.fgu_fld_vld_b) &
6952 ~(`SPC2.lsu.dcc.flush_all_b & `SPC2.lsu.dcc.ld_inst_vld_b);
6953assign dec_flush_lb = `SPC2.dec.dec_flush_lb | `SPC2.tlu_flush_lsu_b;
6954
6955
6956// LSU interface to CCX stub
6957
6958assign exu_lsu_valid = `SPC2.dec.del.lsu_valid_e;
6959assign exu_lsu_addr[47:0] = `SPC2.exu_lsu_address_e[47:0];
6960assign exu_lsu_tid[2:0] = lsu_tid_e[2:0];
6961assign exu_lsu_regid[4:0] = `SPC2.dec.dec_lsu_rd_e[4:0];
6962assign exu_lsu_data[63:0] = `SPC2.exu_lsu_store_data_e[63:0];
6963assign exu_lsu_instr[31:0] = ({32{`SPC2.dec.dec_lsu_sel0_e}} &
6964 inst0_e[31:0]) |
6965 ({32{~`SPC2.dec.dec_lsu_sel0_e}} &
6966 inst1_e[31:0]);
6967assign ld_inst_d = `SPC2.dec.dec_ld_inst_d;
6968
6969///////////////////////////////////////////////////////////////////////////////
6970// Debugging Instruction Opcodes Pipeline
6971///////////////////////////////////////////////////////////////////////////////
6972
6973
6974 reg [31:0] op_0_w;
6975 reg [31:0] op_1_w;
6976 reg [31:0] op_2_w;
6977 reg [31:0] op_3_w;
6978 reg [31:0] op_4_w;
6979 reg [31:0] op_5_w;
6980 reg [31:0] op_6_w;
6981 reg [31:0] op_7_w;
6982
6983 reg [31:0] op0_b;
6984 reg [31:0] op0_m;
6985 reg [31:0] op0_e;
6986 reg [31:0] op0_d;
6987
6988 reg [31:0] op1_b;
6989 reg [31:0] op1_m;
6990 reg [31:0] op1_e;
6991 reg [31:0] op1_d;
6992
6993 reg [255:0] inst0_string_w;
6994 reg [255:0] inst0_string_b;
6995 reg [255:0] inst0_string_m;
6996 reg [255:0] inst0_string_e;
6997 reg [255:0] inst0_string_d;
6998
6999 reg [255:0] inst1_string_w;
7000 reg [255:0] inst1_string_b;
7001 reg [255:0] inst1_string_m;
7002 reg [255:0] inst1_string_e;
7003 reg [255:0] inst1_string_d;
7004
7005 reg [255:0] inst0_string_p;
7006 reg [255:0] inst1_string_p;
7007 reg [255:0] inst2_string_p;
7008 reg [255:0] inst3_string_p;
7009 reg [255:0] inst4_string_p;
7010 reg [255:0] inst5_string_p;
7011 reg [255:0] inst6_string_p;
7012 reg [255:0] inst7_string_p;
7013
7014initial begin
7015 op_0_w = 32'b0;
7016 op_1_w = 32'b0;
7017 op_2_w = 32'b0;
7018 op_3_w = 32'b0;
7019 op_4_w = 32'b0;
7020 op_5_w = 32'b0;
7021 op_6_w = 32'b0;
7022 op_7_w = 32'b0;
7023end
7024
7025always @(posedge `BENCH_SPC2_GCLK) begin // {
7026 op_0_w <= ({32 { select_pc_b[0]}} & op0_b[31:0]) |
7027 ({32 {~select_pc_b[0]}} & op_0_w[31:0]) ;
7028 op_1_w <= ({32 { select_pc_b[1]}} & op0_b[31:0]) |
7029 ({32 {~select_pc_b[1]}} & op_1_w[31:0]) ;
7030 op_2_w <= ({32 { select_pc_b[2]}} & op0_b[31:0]) |
7031 ({32 {~select_pc_b[2]}} & op_2_w[31:0]) ;
7032 op_3_w <= ({32 { select_pc_b[3]}} & op0_b[31:0]) |
7033 ({32 {~select_pc_b[3]}} & op_3_w[31:0]) ;
7034 op_4_w <= ({32 { select_pc_b[4]}} & op1_b[31:0]) |
7035 ({32 {~select_pc_b[4]}} & op_4_w[31:0]) ;
7036 op_5_w <= ({32 { select_pc_b[5]}} & op1_b[31:0]) |
7037 ({32 {~select_pc_b[5]}} & op_5_w[31:0]) ;
7038 op_6_w <= ({32 { select_pc_b[6]}} & op1_b[31:0]) |
7039 ({32 {~select_pc_b[6]}} & op_6_w[31:0]) ;
7040 op_7_w <= ({32 { select_pc_b[7]}} & op1_b[31:0]) |
7041 ({32 {~select_pc_b[7]}} & op_7_w[31:0]) ;
7042
7043 op0_b <= op0_m;
7044 op0_m <= op0_e;
7045 op0_e <= op0_d;
7046 op0_d <= `SPC2.dec.ded0.decode_mux[31:0];
7047
7048 op1_b <= op1_m;
7049 op1_m <= op1_e;
7050 op1_e <= op1_d;
7051 op1_d <= `SPC2.dec.ded1.decode_mux[31:0];
7052
7053 inst0_string_w<=inst0_string_b;
7054 inst0_string_b<=inst0_string_m;
7055 inst0_string_m<=inst0_string_e;
7056 inst0_string_e<=inst0_string_d;
7057 inst0_string_d<=xlate(`SPC2.dec.ded0.decode_mux[31:0]);
7058
7059 inst1_string_w<=inst1_string_b;
7060 inst1_string_b<=inst1_string_m;
7061 inst1_string_m<=inst1_string_e;
7062 inst1_string_e<=inst1_string_d;
7063 inst1_string_d<=xlate(`SPC2.dec.ded1.decode_mux[31:0]);
7064
7065// instructions for each thread at pick
7066 inst0_string_p<=xlate(`SPC2.ifu_ibu.ibf0.buf0_in[31:0]);
7067 inst1_string_p<=xlate(`SPC2.ifu_ibu.ibf1.buf0_in[31:0]);
7068 inst2_string_p<=xlate(`SPC2.ifu_ibu.ibf2.buf0_in[31:0]);
7069 inst3_string_p<=xlate(`SPC2.ifu_ibu.ibf3.buf0_in[31:0]);
7070 inst4_string_p<=xlate(`SPC2.ifu_ibu.ibf4.buf0_in[31:0]);
7071 inst5_string_p<=xlate(`SPC2.ifu_ibu.ibf5.buf0_in[31:0]);
7072 inst6_string_p<=xlate(`SPC2.ifu_ibu.ibf6.buf0_in[31:0]);
7073 inst7_string_p<=xlate(`SPC2.ifu_ibu.ibf7.buf0_in[31:0]);
7074
7075end //}
7076
7077///////////////////////////////////////////////////////////////////////////////
7078// Functions
7079///////////////////////////////////////////////////////////////////////////////
7080function [2:0] onehot2tid;
7081 input [7:0] onehot;
7082
7083 begin
7084
7085 if (onehot[7:0]==8'b00000001) onehot2tid[2:0] = 3'b000;
7086 else if (onehot[7:0]==8'b00000010) onehot2tid[2:0] = 3'b001;
7087 else if (onehot[7:0]==8'b00000100) onehot2tid[2:0] = 3'b010;
7088 else if (onehot[7:0]==8'b00001000) onehot2tid[2:0] = 3'b011;
7089 else if (onehot[7:0]==8'b00010000) onehot2tid[2:0] = 3'b100;
7090 else if (onehot[7:0]==8'b00100000) onehot2tid[2:0] = 3'b101;
7091 else if (onehot[7:0]==8'b01000000) onehot2tid[2:0] = 3'b110;
7092 else if (onehot[7:0]==8'b10000000) onehot2tid[2:0] = 3'b111;
7093
7094 end
7095endfunction
7096
7097function [7:0] tid2onehot;
7098 input [2:0] tid;
7099
7100 begin
7101
7102 if (tid[2:0]==3'b000) tid2onehot[7:0] = 8'b00000001;
7103 else if (tid[2:0]==3'b001) tid2onehot[7:0] = 8'b00000010;
7104 else if (tid[2:0]==3'b010) tid2onehot[7:0] = 8'b00000100;
7105 else if (tid[2:0]==3'b011) tid2onehot[7:0] = 8'b00001000;
7106 else if (tid[2:0]==3'b100) tid2onehot[7:0] = 8'b00010000;
7107 else if (tid[2:0]==3'b101) tid2onehot[7:0] = 8'b00100000;
7108 else if (tid[2:0]==3'b110) tid2onehot[7:0] = 8'b01000000;
7109 else if (tid[2:0]==3'b111) tid2onehot[7:0] = 8'b10000000;
7110
7111 end
7112endfunction
7113
7114//---------------------
7115
7116function [255:0] xlate;
7117 input [31:0] inst;
7118
7119 begin
7120 casex(inst[31:0])
712132'b10xxxxx110100xxxxx001000011xxxxx : xlate[255:0]="FADDq";
712232'b10xxxxx110100xxxxx001000111xxxxx : xlate[255:0]="FSUBq";
712332'b10000xx110101xxxxx001010011xxxxx : xlate[255:0]="FCMPq";
712432'b10000xx110101xxxxx001010111xxxxx : xlate[255:0]="FCMPEq";
712532'b10xxxxx110100xxxxx011001101xxxxx : xlate[255:0]="FsTOq";
712632'b10xxxxx110100xxxxx011001110xxxxx : xlate[255:0]="FdTOq";
712732'b10xxxxx110100xxxxx010001100xxxxx : xlate[255:0]="FxTOq";
712832'b10xxxxx110100xxxxx011001100xxxxx : xlate[255:0]="FiTOq";
712932'b10xxxxx110100xxxxx000000011xxxxx : xlate[255:0]="FMOVq";
713032'b10xxxxx110100xxxxx000000111xxxxx : xlate[255:0]="FNEGq";
713132'b10xxxxx110100xxxxx000001011xxxxx : xlate[255:0]="FABSq";
713232'b10xxxxx110100xxxxx001001011xxxxx : xlate[255:0]="FMULq";
713332'b10xxxxx110100xxxxx001101110xxxxx : xlate[255:0]="FdMULq";
713432'b10xxxxx110100xxxxx001001111xxxxx : xlate[255:0]="FDIVq";
713532'b10xxxxx110100xxxxx000101011xxxxx : xlate[255:0]="FSQRTq";
713632'b10xxxxx1101010xxxx0xx100111xxxxx : xlate[255:0]="FMOVrQa";
713732'b10xxxxx1101010xxxx0x1x00111xxxxx : xlate[255:0]="FMOVrQb";
713832'b10xxxxx110100xxxxx011010011xxxxx : xlate[255:0]="FqTOi";
713932'b10xxxxx110100xxxxx010000011xxxxx : xlate[255:0]="FqTOx";
714032'b10xxxxx110100xxxxx011000111xxxxx : xlate[255:0]="FqTOs";
714132'b10xxxxx110100xxxxx011001011xxxxx : xlate[255:0]="FqTOd";
714232'b11xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQF";
714332'b11xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFi";
714432'b11xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQFA";
714532'b11xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFAi";
714632'b11xxxxx100110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFi";
714732'b11xxxxx100110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQF";
714832'b11xxxxx110110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQFA";
714932'b11xxxxx110110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFAi";
715032'b10xxxxx1101010xxxxxxx000011xxxxx : xlate[255:0]="FMOVQcc";
715132'b10xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADD";
715232'b10xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDcc";
715332'b10xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDC";
715432'b10xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDCcc";
715532'b10xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDi";
715632'b10xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDcci";
715732'b10xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCi";
715832'b10xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCcci";
715932'b00x0xx1011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr1";
716032'b00x0x1x011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr2";
716132'b00xx000110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfccA";
716232'b00xx1xx110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc1";
716332'b00xxx1x110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc2";
716432'b00xxxx1110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc3";
716532'b00xx000101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfccA";
716632'b00xx1xx101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc1";
716732'b00xxx1x101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc2";
716832'b00xxxx1101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc3";
716932'b00xx000010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BiccA";
717032'b00xx1xx010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc1";
717132'b00xxx1x010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc2";
717232'b00xxxx1010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc3";
717332'b00xx000001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPccA";
717432'b00xx1xx001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc1";
717532'b00xxx1x001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc2";
717632'b00xxxx1001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc3";
717732'b01xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="CALL";
717832'b11xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASA";
717932'b11xxxxx111110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASXA";
718032'b11xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASAi";
718132'b11xxxxx111110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASXAi";
718232'b10xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIV";
718332'b10xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIV";
718432'b10xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVcc";
718532'b10xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVcc";
718632'b10xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVi";
718732'b10xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVi";
718832'b10xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVcci";
718932'b10xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVcci";
719032'b1000000111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="DONE";
719132'b1000001111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RETRY";
719232'b10xxxxx110100xxxxx001000001xxxxx : xlate[255:0]="FADDs";
719332'b10xxxxx110100xxxxx001000010xxxxx : xlate[255:0]="FADDd";
719432'b10xxxxx110100xxxxx001000101xxxxx : xlate[255:0]="FSUBs";
719532'b10xxxxx110100xxxxx001000110xxxxx : xlate[255:0]="FSUBd";
719632'b10000xx110101xxxxx001010001xxxxx : xlate[255:0]="FCMPs";
719732'b10000xx110101xxxxx001010010xxxxx : xlate[255:0]="FCMPd";
719832'b10000xx110101xxxxx001010101xxxxx : xlate[255:0]="FCMPEs";
719932'b10000xx110101xxxxx001010110xxxxx : xlate[255:0]="FCMPEd";
720032'b10xxxxx110100xxxxx010000001xxxxx : xlate[255:0]="FsTOx";
720132'b10xxxxx110100xxxxx010000010xxxxx : xlate[255:0]="FdTOx";
720232'b10xxxxx110100xxxxx011010001xxxxx : xlate[255:0]="FsTOi";
720332'b10xxxxx110100xxxxx011010010xxxxx : xlate[255:0]="FdTOi";
720432'b10xxxxx110100xxxxx011001001xxxxx : xlate[255:0]="FsTOd";
720532'b10xxxxx110100xxxxx011000110xxxxx : xlate[255:0]="FdTOs";
720632'b10xxxxx110100xxxxx010000100xxxxx : xlate[255:0]="FxTOs";
720732'b10xxxxx110100xxxxx010001000xxxxx : xlate[255:0]="FxTOd";
720832'b10xxxxx110100xxxxx011000100xxxxx : xlate[255:0]="FiTOs";
720932'b10xxxxx110100xxxxx011001000xxxxx : xlate[255:0]="FiTOd";
721032'b10xxxxx110100xxxxx000000001xxxxx : xlate[255:0]="FMOVs";
721132'b10xxxxx110100xxxxx000000010xxxxx : xlate[255:0]="FMOVd";
721232'b10xxxxx110100xxxxx000000101xxxxx : xlate[255:0]="FNEGs";
721332'b10xxxxx110100xxxxx000000110xxxxx : xlate[255:0]="FNEGd";
721432'b10xxxxx110100xxxxx000001001xxxxx : xlate[255:0]="FABSs";
721532'b10xxxxx110100xxxxx000001010xxxxx : xlate[255:0]="FABSd";
721632'b10xxxxx110100xxxxx001001001xxxxx : xlate[255:0]="FMULs";
721732'b10xxxxx110100xxxxx001001010xxxxx : xlate[255:0]="FMULd";
721832'b10xxxxx110100xxxxx001101001xxxxx : xlate[255:0]="FsMULd";
721932'b10xxxxx110100xxxxx001001101xxxxx : xlate[255:0]="FDIVs";
722032'b10xxxxx110100xxxxx001001110xxxxx : xlate[255:0]="FDIVd";
722132'b10xxxxx110100xxxxx000101001xxxxx : xlate[255:0]="FSQRTs";
722232'b10xxxxx110100xxxxx000101010xxxxx : xlate[255:0]="FSQRTd";
722332'b10xxxxx111011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSH";
722432'b10xxxxx111011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="FLUSHi";
722532'b10xxxxx101011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSHw";
722632'b10xxxxx111000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="JMPL";
722732'b10xxxxx111000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="JMPLi";
722832'b11xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDF";
722932'b11xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDF";
723032'b1100000100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFSR";
723132'b1100001100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXFSR";
723232'b11xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFi";
723332'b11xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFi";
723432'b1100000100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFSRi";
723532'b1100001100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXFSRi";
723632'b11xxxxx110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFA";
723732'b11xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDFA";
723832'b11xxxxx110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFAi";
723932'b11xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFAi";
724032'b11xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSB";
724132'b11xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSH";
724232'b11xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSW";
724332'b11xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUB";
724432'b11xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUH";
724532'b11xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUW";
724632'b11xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDX";
724732'b11xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDD";
724832'b11xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBi";
724932'b11xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHi";
725032'b11xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWi";
725132'b11xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBi";
725232'b11xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHi";
725332'b11xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWi";
725432'b11xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXi";
725532'b11xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDi";
725632'b11xxxxx011001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSBA";
725732'b11xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSHA";
725832'b11xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSWA";
725932'b11xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUBA";
726032'b11xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUHA";
726132'b11xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUWA";
726232'b11xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXA";
726332'b11xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDA";
726432'b11xxxxx011001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBAi";
726532'b11xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHAi";
726632'b11xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWAi";
726732'b11xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBAi";
726832'b11xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHAi";
726932'b11xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWAi";
727032'b11xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXAi";
727132'b11xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDAi";
727232'b11xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUB";
727332'b11xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBi";
727432'b11xxxxx011101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUBA";
727532'b11xxxxx011101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBAi";
727632'b10xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="AND";
727732'b10xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDcc";
727832'b10xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDN";
727932'b10xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDNcc";
728032'b10xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="OR";
728132'b10xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORcc";
728232'b10xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORN";
728332'b10xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORNcc";
728432'b10xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XOR";
728532'b10xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XORcc";
728632'b10xxxxx000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNOR";
728732'b10xxxxx010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNORcc";
728832'b10xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDi";
728932'b10xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDcci";
729032'b10xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNi";
729132'b10xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNcci";
729232'b10xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORi";
729332'b10xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORcci";
729432'b10xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNi";
729532'b10xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNcci";
729632'b10xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORi";
729732'b10xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORcci";
729832'b10xxxxx000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORi";
729932'b10xxxxx010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORcci";
730032'b1000000101000011111xxxxxxxxxxxxx : xlate[255:0]="MEMBAR";
730132'b1000000101000011110xxxxxxxxxxxxx : xlate[255:0]="STBAR";
730232'b10xxxxx101000000000xxxxxxxxxxxxx : xlate[255:0]="RDY";
730332'b10xxxxx101000000100xxxxxxxxxxxxx : xlate[255:0]="RDCCR";
730432'b10xxxxx101000000110xxxxxxxxxxxxx : xlate[255:0]="RDASI";
730532'b10xxxxx101000001000xxxxxxxxxxxxx : xlate[255:0]="RDTICK";
730632'b10xxxxx101000001010xxxxxxxxxxxxx : xlate[255:0]="RDPC";
730732'b10xxxxx101000001100xxxxxxxxxxxxx : xlate[255:0]="RDFPRS";
730832'b10xxxxx101000100110xxxxxxxxxxxxx : xlate[255:0]="RDGSR";
730932'b10xxxxx101000100000xxxxxxxxxxxxx : xlate[255:0]="RDPCR";
731032'b10xxxxx101000100010xxxxxxxxxxxxx : xlate[255:0]="RDPIC";
731132'b10xxxxx1101010xxxx0xx000001xxxxx : xlate[255:0]="FMOVSfcc";
731232'b10xxxxx1101010xxxx1xx000001xxxxx : xlate[255:0]="FMOVSxcc";
731332'b10xxxxx1101010xxxx0xx000010xxxxx : xlate[255:0]="FMOVDfcc";
731432'b10xxxxx1101010xxxx1xx000010xxxxx : xlate[255:0]="FMOVDxcc";
731532'b10xxxxx110101xxxxx0xx100101xxxxx : xlate[255:0]="FMOVrS1";
731632'b10xxxxx110101xxxxx0x1x00101xxxxx : xlate[255:0]="FMOVrS2";
731732'b10xxxxx110101xxxxx0xx100110xxxxx : xlate[255:0]="FMOVrD1";
731832'b10xxxxx110101xxxxx0x1x00110xxxxx : xlate[255:0]="FMOVrD2";
731932'b10xxxxx1011001xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVxcc";
732032'b10xxxxx1011001xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVxcci";
732132'b10xxxxx1011000xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVfcc";
732232'b10xxxxx1011000xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVfcci";
732332'b10xxxxx101111xxxxx0xx1xxxxxxxxxx : xlate[255:0]="MOVR1";
732432'b10xxxxx101111xxxxx0x1xxxxxxxxxxx : xlate[255:0]="MOVR2";
732532'b10xxxxx101111xxxxx1xx1xxxxxxxxxx : xlate[255:0]="MOVRi1";
732632'b10xxxxx101111xxxxx1x1xxxxxxxxxxx : xlate[255:0]="MOVRi2";
732732'b10xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULX";
732832'b10xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVX";
732932'b10xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVX";
733032'b10xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULXi";
733132'b10xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVXi";
733232'b10xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVXi";
733332'b10xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMUL";
733432'b10xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMUL";
733532'b10xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMULcc";
733632'b10xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMULcc";
733732'b10xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULi";
733832'b10xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULi";
733932'b10xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULcci";
734032'b10xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULcci";
734132'b10xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULScc";
734232'b10xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULScci";
734332'b10xxxxx101110000000xxxxxxxxxxxxx : xlate[255:0]="POPC";
734432'b10xxxxx101110000001xxxxxxxxxxxxx : xlate[255:0]="POPCi";
734532'b11xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCH";
734632'b11xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHi";
734732'b11xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCHA";
734832'b11xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHAi";
734932'b10xxxxx101010xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDPR";
735032'b10xxxxx101001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDHPR";
735132'b10xxxxx111001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RETURN";
735232'b10xxxxx111001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RETURNi";
735332'b10xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SAVE";
735432'b10xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SAVEi";
735532'b10xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RESTORE";
735632'b10xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RESTOREi";
735732'b1000000110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="SAVED";
735832'b1000001110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RESTORED";
735932'b00xxxxx100xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="SETHI";
736032'b10xxxxx100101xxxxx00xxxxxxxxxxxx : xlate[255:0]="SLL";
736132'b10xxxxx100110xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRL";
736232'b10xxxxx100111xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRA";
736332'b10xxxxx100101xxxxx01xxxxxxxxxxxx : xlate[255:0]="SLLX";
736432'b10xxxxx100110xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRLX";
736532'b10xxxxx100111xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRAX";
736632'b10xxxxx100101xxxxx10xxxxxxxxxxxx : xlate[255:0]="SLLi";
736732'b10xxxxx100110xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRLi";
736832'b10xxxxx100111xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRAi";
736932'b10xxxxx100101xxxxx11xxxxxxxxxxxx : xlate[255:0]="SLLXi";
737032'b10xxxxx100110xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRLXi";
737132'b10xxxxx100111xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRAXi";
737232'b11xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STF";
737332'b11xxxxx100111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDF";
737432'b1100000100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFSR";
737532'b1100001100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXFSR";
737632'b11xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFi";
737732'b11xxxxx100111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFi";
737832'b1100000100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFSRi";
737932'b1100001100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXFSRi";
738032'b11xxxxx110100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFA";
738132'b11xxxxx110111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDFA";
738232'b11xxxxx110100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFAi";
738332'b11xxxxx110111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFAi";
738432'b11xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STB";
738532'b11xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STH";
738632'b11xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STW";
738732'b11xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STX";
738832'b11xxxx0000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STD";
738932'b11xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBi";
739032'b11xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHi";
739132'b11xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWi";
739232'b11xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXi";
739332'b11xxxx0000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDi";
739432'b11xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STBA";
739532'b11xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STHA";
739632'b11xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STWA";
739732'b11xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXA";
739832'b11xxxx0010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDA";
739932'b11xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBAi";
740032'b11xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHAi";
740132'b11xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWAi";
740232'b11xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXAi";
740332'b11xxxx0010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDAi";
740432'b10xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUB";
740532'b10xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBcc";
740632'b10xxxxx001100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBC";
740732'b10xxxxx011100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBCcc";
740832'b10xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBi";
740932'b10xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBcci";
741032'b10xxxxx001100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCi";
741132'b10xxxxx011100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCcci";
741232'b11xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAP";
741332'b11xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPi";
741432'b11xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAPA";
741532'b11xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPAi";
741632'b10xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDcc";
741732'b10xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDccTV";
741832'b10xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDcci";
741932'b10xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDccTVi";
742032'b10xxxxx100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBcc";
742132'b10xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBccTV";
742232'b10xxxxx100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBcci";
742332'b10xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBccTVi";
742432'b10xxxxx111010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TCC";
742532'b10xxxxx111010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TCCi";
742632'b10xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPR";
742732'b10xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPRi";
742832'b10xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRHPR";
742932'b10xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRHPRi";
743032'b1000000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRY";
743132'b1000010110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRCCR";
743232'b1000011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRASI";
743332'b1000110110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRFPRS";
743432'b1010011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRGSR";
743532'b1010000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPCR";
743632'b1010001110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPIC";
743732'b1000000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRYi";
743832'b1000010110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRCCRi";
743932'b1000011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRASIi";
744032'b1000110110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRFPRSi";
744132'b1010011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRGSRi";
744232'b1010000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPCRi";
744332'b1010001110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPICi";
744432'b1001111110000000001xxxxxxxxxxxxx : xlate[255:0]="SIR";
744532'b10xxxxx110110xxxxx001010000xxxxx : xlate[255:0]="FPADD16";
744632'b10xxxxx110110xxxxx001010001xxxxx : xlate[255:0]="FPADD16S";
744732'b10xxxxx110110xxxxx001010010xxxxx : xlate[255:0]="FPADD32";
744832'b10xxxxx110110xxxxx001010011xxxxx : xlate[255:0]="FPADD32S";
744932'b10xxxxx110110xxxxx001010100xxxxx : xlate[255:0]="FPSUB16";
745032'b10xxxxx110110xxxxx001010101xxxxx : xlate[255:0]="FPSUB16S";
745132'b10xxxxx110110xxxxx001010110xxxxx : xlate[255:0]="FPSUB32";
745232'b10xxxxx110110xxxxx001010111xxxxx : xlate[255:0]="FPSUB32S";
745332'b10xxxxx110110xxxxx000111011xxxxx : xlate[255:0]="FPACK16";
745432'b10xxxxx110110xxxxx000111010xxxxx : xlate[255:0]="FPACK32";
745532'b10xxxxx110110xxxxx000111101xxxxx : xlate[255:0]="FPACKFIX";
745632'b10xxxxx110110xxxxx001001101xxxxx : xlate[255:0]="FEXPAND";
745732'b10xxxxx110110xxxxx001001011xxxxx : xlate[255:0]="FPMERGE";
745832'b10xxxxx110110xxxxx000110001xxxxx : xlate[255:0]="FMUL8x16";
745932'b10xxxxx110110xxxxx000110011xxxxx : xlate[255:0]="FMUL8x16AU";
746032'b10xxxxx110110xxxxx000110101xxxxx : xlate[255:0]="FMUL8x16AL";
746132'b10xxxxx110110xxxxx000110110xxxxx : xlate[255:0]="FMUL8SUx16";
746232'b10xxxxx110110xxxxx000110111xxxxx : xlate[255:0]="FMUL8ULx16";
746332'b10xxxxx110110xxxxx000111000xxxxx : xlate[255:0]="FMULD8SUx16";
746432'b10xxxxx110110xxxxx000111001xxxxx : xlate[255:0]="FMULD8ULx16";
746532'b10xxxxx110110xxxxx000011000xxxxx : xlate[255:0]="ALIGNADDRESS";
746632'b10xxxxx110110xxxxx000011010xxxxx : xlate[255:0]="ALIGNADDRESS_LITTLE";
746732'b10xxxxx110110xxxxx000011001xxxxx : xlate[255:0]="BMASK";
746832'b10xxxxx110110xxxxx001001000xxxxx : xlate[255:0]="FALIGNDATA";
746932'b10xxxxx110110xxxxx001001100xxxxx : xlate[255:0]="BSHUFFLE";
747032'b10xxxxx110110xxxxx001100000xxxxx : xlate[255:0]="FZERO";
747132'b10xxxxx110110xxxxx001100001xxxxx : xlate[255:0]="FZEROS";
747232'b10xxxxx110110xxxxx001111110xxxxx : xlate[255:0]="FONE";
747332'b10xxxxx110110xxxxx001111111xxxxx : xlate[255:0]="FONES";
747432'b10xxxxx110110xxxxx001110100xxxxx : xlate[255:0]="FSRC1";
747532'b10xxxxx110110xxxxx001110101xxxxx : xlate[255:0]="FSRC1S";
747632'b10xxxxx110110xxxxx001111000xxxxx : xlate[255:0]="FSRC2";
747732'b10xxxxx110110xxxxx001111001xxxxx : xlate[255:0]="FSRC2S";
747832'b10xxxxx110110xxxxx001101010xxxxx : xlate[255:0]="FNOT1";
747932'b10xxxxx110110xxxxx001101011xxxxx : xlate[255:0]="FNOT1S";
748032'b10xxxxx110110xxxxx001100110xxxxx : xlate[255:0]="FNOT2";
748132'b10xxxxx110110xxxxx001100111xxxxx : xlate[255:0]="FNOT2S";
748232'b10xxxxx110110xxxxx001111100xxxxx : xlate[255:0]="FOR";
748332'b10xxxxx110110xxxxx001111101xxxxx : xlate[255:0]="FORS";
748432'b10xxxxx110110xxxxx001100010xxxxx : xlate[255:0]="FNOR";
748532'b10xxxxx110110xxxxx001100011xxxxx : xlate[255:0]="FNORS";
748632'b10xxxxx110110xxxxx001110000xxxxx : xlate[255:0]="FAND";
748732'b10xxxxx110110xxxxx001110001xxxxx : xlate[255:0]="FANDS";
748832'b10xxxxx110110xxxxx001101110xxxxx : xlate[255:0]="FNAND";
748932'b10xxxxx110110xxxxx001101111xxxxx : xlate[255:0]="FNANDS";
749032'b10xxxxx110110xxxxx001101100xxxxx : xlate[255:0]="FXOR";
749132'b10xxxxx110110xxxxx001101101xxxxx : xlate[255:0]="FXORS";
749232'b10xxxxx110110xxxxx001110010xxxxx : xlate[255:0]="FXNOR";
749332'b10xxxxx110110xxxxx001110011xxxxx : xlate[255:0]="FXNORS";
749432'b10xxxxx110110xxxxx001111010xxxxx : xlate[255:0]="FORNOT1";
749532'b10xxxxx110110xxxxx001111011xxxxx : xlate[255:0]="FORNOT1S";
749632'b10xxxxx110110xxxxx001110110xxxxx : xlate[255:0]="FORNOT2";
749732'b10xxxxx110110xxxxx001110111xxxxx : xlate[255:0]="FORNOT2S";
749832'b10xxxxx110110xxxxx001101000xxxxx : xlate[255:0]="FANDNOT1";
749932'b10xxxxx110110xxxxx001101001xxxxx : xlate[255:0]="FANDNOT1S";
750032'b10xxxxx110110xxxxx001100100xxxxx : xlate[255:0]="FANDNOT2";
750132'b10xxxxx110110xxxxx001100101xxxxx : xlate[255:0]="FANDNOT2S";
750232'b10xxxxx110110xxxxx000101000xxxxx : xlate[255:0]="FCMPGT16";
750332'b10xxxxx110110xxxxx000101100xxxxx : xlate[255:0]="FCMPGT32";
750432'b10xxxxx110110xxxxx000100000xxxxx : xlate[255:0]="FCMPLE16";
750532'b10xxxxx110110xxxxx000100100xxxxx : xlate[255:0]="FCMPLE32";
750632'b10xxxxx110110xxxxx000100010xxxxx : xlate[255:0]="FCMPNE16";
750732'b10xxxxx110110xxxxx000100110xxxxx : xlate[255:0]="FCMPNE32";
750832'b10xxxxx110110xxxxx000101010xxxxx : xlate[255:0]="FCMPEQ16";
750932'b10xxxxx110110xxxxx000101110xxxxx : xlate[255:0]="FCMPEQ32";
751032'b10xxxxx110110xxxxx000111110xxxxx : xlate[255:0]="PDIST";
751132'b10xxxxx110110xxxxx000000000xxxxx : xlate[255:0]="EDGE8";
751232'b10xxxxx110110xxxxx000000001xxxxx : xlate[255:0]="EDGE8N";
751332'b10xxxxx110110xxxxx000000010xxxxx : xlate[255:0]="EDGE8L";
751432'b10xxxxx110110xxxxx000000011xxxxx : xlate[255:0]="EDGE8LN";
751532'b10xxxxx110110xxxxx000000100xxxxx : xlate[255:0]="EDGE16";
751632'b10xxxxx110110xxxxx000000101xxxxx : xlate[255:0]="EDGE16N";
751732'b10xxxxx110110xxxxx000000110xxxxx : xlate[255:0]="EDGE16L";
751832'b10xxxxx110110xxxxx000000111xxxxx : xlate[255:0]="EDGE16LN";
751932'b10xxxxx110110xxxxx000001000xxxxx : xlate[255:0]="EDGE32";
752032'b10xxxxx110110xxxxx000001001xxxxx : xlate[255:0]="EDGE32N";
752132'b10xxxxx110110xxxxx000001010xxxxx : xlate[255:0]="EDGE32L";
752232'b10xxxxx110110xxxxx000001011xxxxx : xlate[255:0]="EDGE32LN";
752332'b10xxxxx110110xxxxx000010000xxxxx : xlate[255:0]="ARRAY8";
752432'b10xxxxx110110xxxxx000010010xxxxx : xlate[255:0]="ARRAY16";
752532'b10xxxxx110110xxxxx000010100xxxxx : xlate[255:0]="ARRAY32";
752632'b10xxxxx110110xxxxx010000001xxxxx : xlate[255:0]="SIAM";
7527 default : xlate[255:0]="unknown";
7528 endcase
7529 end
7530endfunction // xlate
7531
7532
7533`endif
7534
7535endmodule
7536
7537`endif
7538
7539
7540`ifdef CORE_3
7541
7542module nas_probes3;
7543
7544
7545`ifdef GATESIM
7546
7547
7548`else
7549 reg [7:0] ex_valid_m;
7550 reg [7:0] ex_valid_b;
7551 reg [7:0] ex_valid_w;
7552 reg [7:0] return_f4;
7553 reg [2:0] ex0_tid_m;
7554 reg [2:0] ex1_tid_m;
7555 reg [2:0] ex0_tid_b;
7556 reg [2:0] ex1_tid_b;
7557 reg [2:0] ex0_tid_w;
7558 reg [2:0] ex1_tid_w;
7559 reg fgu_valid_fb0;
7560 reg fgu_valid_fb1;
7561
7562 reg [31:0] inst0_e;
7563 reg [31:0] inst1_e;
7564
7565 reg [7:0] fg_valid;
7566
7567 reg fcc_valid_f4;
7568 reg fcc_valid_f5;
7569 reg fcc_valid_fb;
7570
7571 reg fgu0_e;
7572 reg fgu1_e;
7573 reg lsu0_e;
7574 reg lsu1_e;
7575
7576 reg [1:0] dcd_idest_e;
7577 reg [1:0] dcd_fdest_e;
7578
7579 wire [7:0] ex_valid;
7580 wire [7:0] exception_w;
7581
7582 wire [7:0] imul_valid;
7583
7584 wire fg_cond_fb;
7585
7586 wire exu_lsu_valid;
7587 wire [47:0] exu_lsu_addr;
7588 wire [31:0] exu_lsu_instr;
7589 wire [2:0] exu_lsu_tid;
7590 wire [4:0] exu_lsu_regid;
7591 wire [63:0] exu_lsu_data;
7592
7593 wire [2:0] ex0_tid_e;
7594 wire [2:0] ex1_tid_e;
7595 wire ex0_valid_e;
7596 wire ex1_valid_e;
7597 wire [7:0] ex_asr_access;
7598 wire ex_asr_valid;
7599
7600 wire [7:0] lsu_valid;
7601 wire [2:0] lsu_tid;
7602 wire [7:0] lsu_tid_dec_b;
7603 wire lsu_ld_valid;
7604 reg [7:0] lsu_data_w;
7605 wire [7:0] lsu_data_b;
7606
7607 wire ld_inst_d;
7608
7609 reg [7:0] div_idest;
7610 reg [7:0] div_fdest;
7611
7612 reg load0_e;
7613 reg load1_e;
7614
7615 reg load_m;
7616 reg load_b;
7617
7618 reg [2:0] lsu_tid_m;
7619 reg [7:0] lsu_complete_m;
7620 reg [7:0] lsu_complete_b;
7621 reg [7:0] lsu_trap_flush_d; //reqd. for store buffer ue testing
7622
7623 reg [7:0] ex_flush_w;
7624 reg [7:0] ex_flush_b;
7625
7626 reg sel_divide0_e;
7627 reg sel_divide1_e;
7628
7629 wire dec_flush_lb;
7630
7631 wire [7:0] fgu_idiv_valid;
7632
7633 wire [7:0] fgu_fdiv_valid;
7634
7635 wire [7:0] fg_div_valid;
7636
7637 wire lsu_valid_b;
7638
7639 wire [7:0] return_w;
7640 wire return0;
7641 wire return1;
7642 wire [7:0] real_exception;
7643
7644 reg [2:0] lsu_tid_b;
7645 reg fmov_valid_fb;
7646 reg fmov_valid_f5;
7647 reg fmov_valid_f4;
7648 reg fmov_valid_f3;
7649 reg fmov_valid_f2;
7650 reg fmov_valid_m;
7651 reg fmov_valid_e;
7652
7653 reg fg_flush_fb;
7654 reg fg_flush_f5;
7655 reg fg_flush_f4;
7656 reg fg_flush_f3;
7657 reg fg_flush_f2;
7658
7659 reg siam0_d;
7660 reg siam1_d;
7661
7662 reg done0_d;
7663 reg done1_d;
7664 reg retry0_d;
7665 reg retry1_d;
7666 reg done0_e;
7667 reg done1_e;
7668 reg retry0_e;
7669 reg retry1_e;
7670 reg tlu_ccr_cwp_0_valid_last;
7671 reg tlu_ccr_cwp_1_valid_last;
7672 reg [7:0] fg_fdiv_valid_fw;
7673 reg [7:0] asi_in_progress_b;
7674 reg [7:0] asi_in_progress_w;
7675 reg [7:0] asi_in_progress_fx4;
7676 reg [7:0] tlu_valid;
7677 reg [7:0] sync_reset_w;
7678
7679 reg [7:0] div_special_cancel_f4;
7680
7681 reg asi_store_b;
7682 reg asi_store_w;
7683 reg [2:0] dcc_tid_b;
7684 reg [2:0] dcc_tid_w;
7685 reg [7:0] asi_valid_w;
7686 reg [7:0] asi_valid_fx4;
7687 reg [7:0] asi_valid_fx5;
7688
7689 reg [7:0] lsu_state;
7690 reg [7:0] lsu_check;
7691 reg [2:0] lsu_tid_e;
7692
7693 reg [47:0] pc_0_e;
7694 reg [47:0] pc_1_e;
7695 reg [47:0] pc_0_m;
7696 reg [47:0] pc_1_m;
7697 reg [47:0] pc_0_b;
7698 reg [47:0] pc_1_b;
7699 reg [47:0] pc_0_w;
7700 reg [47:0] pc_1_w;
7701 reg [47:0] pc_2_w;
7702 reg [47:0] pc_3_w;
7703 reg [47:0] pc_4_w;
7704 reg [47:0] pc_5_w;
7705 reg [47:0] pc_6_w;
7706 reg [47:0] pc_7_w;
7707
7708 reg fgu_err_fx3;
7709 reg fgu_err_fx4;
7710 reg fgu_err_fx5;
7711 reg fgu_err_fb;
7712
7713 reg clkstop_d1;
7714 reg clkstop_d2;
7715 reg clkstop_d3;
7716 reg clkstop_d4;
7717 reg clkstop_d5;
7718
7719integer i;
7720integer start_dmiss0;
7721integer start_dmiss1;
7722integer start_dmiss2;
7723integer start_dmiss3;
7724integer start_dmiss4;
7725integer start_dmiss5;
7726integer start_dmiss6;
7727integer start_dmiss7;
7728integer number_dmiss;
7729integer start_imiss0;
7730integer start_imiss1;
7731integer start_imiss2;
7732integer start_imiss3;
7733integer start_imiss4;
7734integer start_imiss5;
7735integer start_imiss6;
7736integer start_imiss7;
7737integer active_imiss0;
7738integer active_imiss1;
7739integer active_imiss2;
7740integer active_imiss3;
7741integer active_imiss4;
7742integer active_imiss5;
7743integer active_imiss6;
7744integer active_imiss7;
7745integer first_imiss0;
7746integer first_imiss1;
7747integer first_imiss2;
7748integer first_imiss3;
7749integer first_imiss4;
7750integer first_imiss5;
7751integer first_imiss6;
7752integer first_imiss7;
7753integer number_imiss;
7754integer clock;
7755integer sum_dmiss_latency;
7756integer sum_imiss_latency;
7757reg spec_dmiss;
7758integer dmiss_cnt;
7759integer imiss_cnt;
7760reg pcx_req;
7761integer l15dmiss_cnt;
7762integer l15imiss_cnt;
7763
7764
7765initial begin // {
7766 pcx_req=0;
7767 l15imiss_cnt=0;
7768 l15dmiss_cnt=0;
7769 imiss_cnt=0;
7770 dmiss_cnt=0;
7771 clock=0;
7772 start_dmiss0=0;
7773 start_dmiss1=0;
7774 start_dmiss2=0;
7775 start_dmiss3=0;
7776 start_dmiss4=0;
7777 start_dmiss5=0;
7778 start_dmiss6=0;
7779 start_dmiss7=0;
7780 number_dmiss=0;
7781 start_imiss0=0;
7782 start_imiss1=0;
7783 start_imiss2=0;
7784 start_imiss3=0;
7785 start_imiss4=0;
7786 start_imiss5=0;
7787 start_imiss6=0;
7788 start_imiss7=0;
7789 active_imiss0=0;
7790 active_imiss1=0;
7791 active_imiss2=0;
7792 active_imiss3=0;
7793 active_imiss4=0;
7794 active_imiss5=0;
7795 active_imiss6=0;
7796 active_imiss7=0;
7797 first_imiss0=0;
7798 first_imiss1=0;
7799 first_imiss2=0;
7800 first_imiss3=0;
7801 first_imiss4=0;
7802 first_imiss5=0;
7803 first_imiss6=0;
7804 first_imiss7=0;
7805 number_imiss=0;
7806 sum_dmiss_latency=0;
7807 sum_imiss_latency=0;
7808 asi_in_progress_b <= 8'h0;
7809 asi_in_progress_w <= 8'h0;
7810 asi_in_progress_fx4 <= 8'h0;
7811 tlu_valid <= 8'h0;
7812 div_idest <= 8'h0;
7813 div_fdest <= 8'h0;
7814 lsu_state <= 8'h0;
7815 clkstop_d1 <=0;
7816 clkstop_d2 <=0;
7817 clkstop_d3 <=0;
7818 clkstop_d4 <=0;
7819 clkstop_d5 <=0;
7820
7821end //}
7822
7823wire [7:0] asi_store_flush_w = {`SPC3.lsu.sbs7.flush_st_w,
7824 `SPC3.lsu.sbs6.flush_st_w,
7825 `SPC3.lsu.sbs5.flush_st_w,
7826 `SPC3.lsu.sbs4.flush_st_w,
7827 `SPC3.lsu.sbs3.flush_st_w,
7828 `SPC3.lsu.sbs2.flush_st_w,
7829 `SPC3.lsu.sbs1.flush_st_w,
7830 `SPC3.lsu.sbs0.flush_st_w};
7831
7832wire [7:0] store_sync = {`SPC3.lsu.sbs7.trap_sync,
7833 `SPC3.lsu.sbs6.trap_sync,
7834 `SPC3.lsu.sbs5.trap_sync,
7835 `SPC3.lsu.sbs4.trap_sync,
7836 `SPC3.lsu.sbs3.trap_sync,
7837 `SPC3.lsu.sbs2.trap_sync,
7838 `SPC3.lsu.sbs1.trap_sync,
7839 `SPC3.lsu.sbs0.trap_sync};
7840wire [7:0] sync_reset = {`SPC3.lsu.sbs7.sync_state_rst,
7841 `SPC3.lsu.sbs6.sync_state_rst,
7842 `SPC3.lsu.sbs5.sync_state_rst,
7843 `SPC3.lsu.sbs4.sync_state_rst,
7844 `SPC3.lsu.sbs3.sync_state_rst,
7845 `SPC3.lsu.sbs2.sync_state_rst,
7846 `SPC3.lsu.sbs1.sync_state_rst,
7847 `SPC3.lsu.sbs0.sync_state_rst};
7848
7849//--------------------
7850// Used in nas_pipe for TSB Config Regs Capture/Compare
7851// ADD_TSB_CFG
7852
7853// NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
7854`ifndef EMUL
7855wire [63:0] ctxt_z_tsb_cfg0_reg [7:0]; // 1 per thread
7856wire [63:0] ctxt_z_tsb_cfg1_reg [7:0];
7857wire [63:0] ctxt_z_tsb_cfg2_reg [7:0];
7858wire [63:0] ctxt_z_tsb_cfg3_reg [7:0];
7859wire [63:0] ctxt_nz_tsb_cfg0_reg [7:0];
7860wire [63:0] ctxt_nz_tsb_cfg1_reg [7:0];
7861wire [63:0] ctxt_nz_tsb_cfg2_reg [7:0];
7862wire [63:0] ctxt_nz_tsb_cfg3_reg [7:0];
7863
7864// There are 32 entries in each MMU MRA but not all are needed.
7865// Indexing:
7866// Bits 4:3 of the address are the lower two bits of the TID
7867// Bits 2:0 of the address select the register as below
7868// mmu.mra0.array.mem for T0-T3
7869// mmu.mra1.array.mem for T4-T7
7870// (this is documented in mmu_asi_ctl.sv)
7871// z TSB cfg 0,1 address 0
7872// z TSB cfg 2,3 address 1
7873// nz TSB cfg 0,1 address 2
7874// nz TSB cfg 2,3 address 3
7875// Real range, physical offset pair 0 address 4
7876// Real range, physical offset pair 1 address 5
7877// Real range, physical offset pair 2 address 6
7878// Real range, physical offset pair 3 address 7
7879
7880wire [83:0] mmu_mra0_a0 = `SPC3.mmu.mra0.array.mem[0];
7881wire [83:0] mmu_mra0_a8 = `SPC3.mmu.mra0.array.mem[8];
7882wire [83:0] mmu_mra0_a16 = `SPC3.mmu.mra0.array.mem[16];
7883wire [83:0] mmu_mra0_a24 = `SPC3.mmu.mra0.array.mem[24];
7884wire [83:0] mmu_mra0_a1 = `SPC3.mmu.mra0.array.mem[1];
7885wire [83:0] mmu_mra0_a9 = `SPC3.mmu.mra0.array.mem[9];
7886wire [83:0] mmu_mra0_a17 = `SPC3.mmu.mra0.array.mem[17];
7887wire [83:0] mmu_mra0_a25 = `SPC3.mmu.mra0.array.mem[25];
7888wire [83:0] mmu_mra0_a2 = `SPC3.mmu.mra0.array.mem[2];
7889wire [83:0] mmu_mra0_a10 = `SPC3.mmu.mra0.array.mem[10];
7890wire [83:0] mmu_mra0_a18 = `SPC3.mmu.mra0.array.mem[18];
7891wire [83:0] mmu_mra0_a26 = `SPC3.mmu.mra0.array.mem[26];
7892wire [83:0] mmu_mra0_a3 = `SPC3.mmu.mra0.array.mem[3];
7893wire [83:0] mmu_mra0_a11 = `SPC3.mmu.mra0.array.mem[11];
7894wire [83:0] mmu_mra0_a19 = `SPC3.mmu.mra0.array.mem[19];
7895wire [83:0] mmu_mra0_a27 = `SPC3.mmu.mra0.array.mem[27];
7896wire [83:0] mmu_mra1_a0 = `SPC3.mmu.mra1.array.mem[0];
7897wire [83:0] mmu_mra1_a8 = `SPC3.mmu.mra1.array.mem[8];
7898wire [83:0] mmu_mra1_a16 = `SPC3.mmu.mra1.array.mem[16];
7899wire [83:0] mmu_mra1_a24 = `SPC3.mmu.mra1.array.mem[24];
7900wire [83:0] mmu_mra1_a1 = `SPC3.mmu.mra1.array.mem[1];
7901wire [83:0] mmu_mra1_a9 = `SPC3.mmu.mra1.array.mem[9];
7902wire [83:0] mmu_mra1_a17 = `SPC3.mmu.mra1.array.mem[17];
7903wire [83:0] mmu_mra1_a25 = `SPC3.mmu.mra1.array.mem[25];
7904wire [83:0] mmu_mra1_a2 = `SPC3.mmu.mra1.array.mem[2];
7905wire [83:0] mmu_mra1_a10 = `SPC3.mmu.mra1.array.mem[10];
7906wire [83:0] mmu_mra1_a18 = `SPC3.mmu.mra1.array.mem[18];
7907wire [83:0] mmu_mra1_a26 = `SPC3.mmu.mra1.array.mem[26];
7908wire [83:0] mmu_mra1_a3 = `SPC3.mmu.mra1.array.mem[3];
7909wire [83:0] mmu_mra1_a11 = `SPC3.mmu.mra1.array.mem[11];
7910wire [83:0] mmu_mra1_a19 = `SPC3.mmu.mra1.array.mem[19];
7911wire [83:0] mmu_mra1_a27 = `SPC3.mmu.mra1.array.mem[27];
7912
7913
7914// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
7915// as well as the physical to architectural bit position relationships.
7916assign ctxt_z_tsb_cfg0_reg[0] = {`SPC3.mmu.asi.t0_e_z[0], // z_tsb_cfg0[63]
7917 mmu_mra0_a0[76:75], // z_tsb_cfg0[62:61]
7918 21'b0, // z_tsb_cfg0[60:40]
7919 mmu_mra0_a0[74:48], // z_tsb_cfg0[39:13]
7920 4'b0, // z_tsb_cfg0[12:9]
7921 mmu_mra0_a0[47:39] // z_tsb_cfg0[8:0]
7922 };
7923assign ctxt_z_tsb_cfg1_reg[0] = {`SPC3.mmu.asi.t0_e_z[1], // z_tsb_cfg0[63]
7924 mmu_mra0_a0[37:36], // z_tsb_cfg0[62:61]
7925 21'b0, // z_tsb_cfg0[60:40]
7926 mmu_mra0_a0[35:9], // z_tsb_cfg0[39:13]
7927 4'b0, // z_tsb_cfg0[12:9]
7928 mmu_mra0_a0[8:0] // z_tsb_cfg0[8:0]
7929 };
7930assign ctxt_z_tsb_cfg2_reg[0] = {`SPC3.mmu.asi.t0_e_z[2], // z_tsb_cfg0[63]
7931 mmu_mra0_a1[76:75], // z_tsb_cfg0[62:61]
7932 21'b0, // z_tsb_cfg0[60:40]
7933 mmu_mra0_a1[74:48], // z_tsb_cfg0[39:13]
7934 4'b0, // z_tsb_cfg0[12:9]
7935 mmu_mra0_a1[47:39] // z_tsb_cfg0[8:0]
7936 };
7937assign ctxt_z_tsb_cfg3_reg[0] = {`SPC3.mmu.asi.t0_e_z[3], // z_tsb_cfg0[63]
7938 mmu_mra0_a1[37:36], // z_tsb_cfg0[62:61]
7939 21'b0, // z_tsb_cfg0[60:40]
7940 mmu_mra0_a1[35:9], // z_tsb_cfg0[39:13]
7941 4'b0, // z_tsb_cfg0[12:9]
7942 mmu_mra0_a1[8:0] // z_tsb_cfg0[8:0]
7943 };
7944assign ctxt_nz_tsb_cfg0_reg[0] = {`SPC3.mmu.asi.t0_e_nz[0],// z_tsb_cfg0[63]
7945 mmu_mra0_a2[76:75], // z_tsb_cfg0[62:61]
7946 21'b0, // z_tsb_cfg0[60:40]
7947 mmu_mra0_a2[74:48], // z_tsb_cfg0[39:13]
7948 4'b0, // z_tsb_cfg0[12:9]
7949 mmu_mra0_a2[47:39] // z_tsb_cfg0[8:0]
7950 };
7951assign ctxt_nz_tsb_cfg1_reg[0] = {`SPC3.mmu.asi.t0_e_nz[1],// z_tsb_cfg0[63]
7952 mmu_mra0_a2[37:36], // z_tsb_cfg0[62:61]
7953 21'b0, // z_tsb_cfg0[60:40]
7954 mmu_mra0_a2[35:9], // z_tsb_cfg0[39:13]
7955 4'b0, // z_tsb_cfg0[12:9]
7956 mmu_mra0_a2[8:0] // z_tsb_cfg0[8:0]
7957 };
7958assign ctxt_nz_tsb_cfg2_reg[0] = {`SPC3.mmu.asi.t0_e_nz[2],// z_tsb_cfg0[63]
7959 mmu_mra0_a3[76:75], // z_tsb_cfg0[62:61]
7960 21'b0, // z_tsb_cfg0[60:40]
7961 mmu_mra0_a3[74:48], // z_tsb_cfg0[39:13]
7962 4'b0, // z_tsb_cfg0[12:9]
7963 mmu_mra0_a3[47:39] // z_tsb_cfg0[8:0]
7964 };
7965assign ctxt_nz_tsb_cfg3_reg[0] = {`SPC3.mmu.asi.t0_e_nz[3],// z_tsb_cfg0[63]
7966 mmu_mra0_a3[37:36], // z_tsb_cfg0[62:61]
7967 21'b0, // z_tsb_cfg0[60:40]
7968 mmu_mra0_a3[35:9], // z_tsb_cfg0[39:13]
7969 4'b0, // z_tsb_cfg0[12:9]
7970 mmu_mra0_a3[8:0] // z_tsb_cfg0[8:0]
7971 };
7972
7973// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
7974// as well as the physical to architectural bit position relationships.
7975assign ctxt_z_tsb_cfg0_reg[1] = {`SPC3.mmu.asi.t1_e_z[0], // z_tsb_cfg0[63]
7976 mmu_mra0_a8[76:75], // z_tsb_cfg0[62:61]
7977 21'b0, // z_tsb_cfg0[60:40]
7978 mmu_mra0_a8[74:48], // z_tsb_cfg0[39:13]
7979 4'b0, // z_tsb_cfg0[12:9]
7980 mmu_mra0_a8[47:39] // z_tsb_cfg0[8:0]
7981 };
7982assign ctxt_z_tsb_cfg1_reg[1] = {`SPC3.mmu.asi.t1_e_z[1], // z_tsb_cfg0[63]
7983 mmu_mra0_a8[37:36], // z_tsb_cfg0[62:61]
7984 21'b0, // z_tsb_cfg0[60:40]
7985 mmu_mra0_a8[35:9], // z_tsb_cfg0[39:13]
7986 4'b0, // z_tsb_cfg0[12:9]
7987 mmu_mra0_a8[8:0] // z_tsb_cfg0[8:0]
7988 };
7989assign ctxt_z_tsb_cfg2_reg[1] = {`SPC3.mmu.asi.t1_e_z[2], // z_tsb_cfg0[63]
7990 mmu_mra0_a9[76:75], // z_tsb_cfg0[62:61]
7991 21'b0, // z_tsb_cfg0[60:40]
7992 mmu_mra0_a9[74:48], // z_tsb_cfg0[39:13]
7993 4'b0, // z_tsb_cfg0[12:9]
7994 mmu_mra0_a9[47:39] // z_tsb_cfg0[8:0]
7995 };
7996assign ctxt_z_tsb_cfg3_reg[1] = {`SPC3.mmu.asi.t1_e_z[3], // z_tsb_cfg0[63]
7997 mmu_mra0_a9[37:36], // z_tsb_cfg0[62:61]
7998 21'b0, // z_tsb_cfg0[60:40]
7999 mmu_mra0_a9[35:9], // z_tsb_cfg0[39:13]
8000 4'b0, // z_tsb_cfg0[12:9]
8001 mmu_mra0_a9[8:0] // z_tsb_cfg0[8:0]
8002 };
8003assign ctxt_nz_tsb_cfg0_reg[1] = {`SPC3.mmu.asi.t1_e_nz[0],// z_tsb_cfg0[63]
8004 mmu_mra0_a10[76:75], // z_tsb_cfg0[62:61]
8005 21'b0, // z_tsb_cfg0[60:40]
8006 mmu_mra0_a10[74:48], // z_tsb_cfg0[39:13]
8007 4'b0, // z_tsb_cfg0[12:9]
8008 mmu_mra0_a10[47:39] // z_tsb_cfg0[8:0]
8009 };
8010assign ctxt_nz_tsb_cfg1_reg[1] = {`SPC3.mmu.asi.t1_e_nz[1],// z_tsb_cfg0[63]
8011 mmu_mra0_a10[37:36], // z_tsb_cfg0[62:61]
8012 21'b0, // z_tsb_cfg0[60:40]
8013 mmu_mra0_a10[35:9], // z_tsb_cfg0[39:13]
8014 4'b0, // z_tsb_cfg0[12:9]
8015 mmu_mra0_a10[8:0] // z_tsb_cfg0[8:0]
8016 };
8017assign ctxt_nz_tsb_cfg2_reg[1] = {`SPC3.mmu.asi.t1_e_nz[2],// z_tsb_cfg0[63]
8018 mmu_mra0_a11[76:75], // z_tsb_cfg0[62:61]
8019 21'b0, // z_tsb_cfg0[60:40]
8020 mmu_mra0_a11[74:48], // z_tsb_cfg0[39:13]
8021 4'b0, // z_tsb_cfg0[12:9]
8022 mmu_mra0_a11[47:39] // z_tsb_cfg0[8:0]
8023 };
8024assign ctxt_nz_tsb_cfg3_reg[1] = {`SPC3.mmu.asi.t1_e_nz[3],// z_tsb_cfg0[63]
8025 mmu_mra0_a11[37:36], // z_tsb_cfg0[62:61]
8026 21'b0, // z_tsb_cfg0[60:40]
8027 mmu_mra0_a11[35:9], // z_tsb_cfg0[39:13]
8028 4'b0, // z_tsb_cfg0[12:9]
8029 mmu_mra0_a11[8:0] // z_tsb_cfg0[8:0]
8030 };
8031
8032// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
8033// as well as the physical to architectural bit position relationships.
8034assign ctxt_z_tsb_cfg0_reg[2] = {`SPC3.mmu.asi.t2_e_z[0], // z_tsb_cfg0[63]
8035 mmu_mra0_a16[76:75], // z_tsb_cfg0[62:61]
8036 21'b0, // z_tsb_cfg0[60:40]
8037 mmu_mra0_a16[74:48], // z_tsb_cfg0[39:13]
8038 4'b0, // z_tsb_cfg0[12:9]
8039 mmu_mra0_a16[47:39] // z_tsb_cfg0[8:0]
8040 };
8041assign ctxt_z_tsb_cfg1_reg[2] = {`SPC3.mmu.asi.t2_e_z[1], // z_tsb_cfg0[63]
8042 mmu_mra0_a16[37:36], // z_tsb_cfg0[62:61]
8043 21'b0, // z_tsb_cfg0[60:40]
8044 mmu_mra0_a16[35:9], // z_tsb_cfg0[39:13]
8045 4'b0, // z_tsb_cfg0[12:9]
8046 mmu_mra0_a16[8:0] // z_tsb_cfg0[8:0]
8047 };
8048assign ctxt_z_tsb_cfg2_reg[2] = {`SPC3.mmu.asi.t2_e_z[2], // z_tsb_cfg0[63]
8049 mmu_mra0_a17[76:75], // z_tsb_cfg0[62:61]
8050 21'b0, // z_tsb_cfg0[60:40]
8051 mmu_mra0_a17[74:48], // z_tsb_cfg0[39:13]
8052 4'b0, // z_tsb_cfg0[12:9]
8053 mmu_mra0_a17[47:39] // z_tsb_cfg0[8:0]
8054 };
8055assign ctxt_z_tsb_cfg3_reg[2] = {`SPC3.mmu.asi.t2_e_z[3], // z_tsb_cfg0[63]
8056 mmu_mra0_a17[37:36], // z_tsb_cfg0[62:61]
8057 21'b0, // z_tsb_cfg0[60:40]
8058 mmu_mra0_a17[35:9], // z_tsb_cfg0[39:13]
8059 4'b0, // z_tsb_cfg0[12:9]
8060 mmu_mra0_a17[8:0] // z_tsb_cfg0[8:0]
8061 };
8062assign ctxt_nz_tsb_cfg0_reg[2] = {`SPC3.mmu.asi.t2_e_nz[0],// z_tsb_cfg0[63]
8063 mmu_mra0_a18[76:75], // z_tsb_cfg0[62:61]
8064 21'b0, // z_tsb_cfg0[60:40]
8065 mmu_mra0_a18[74:48], // z_tsb_cfg0[39:13]
8066 4'b0, // z_tsb_cfg0[12:9]
8067 mmu_mra0_a18[47:39] // z_tsb_cfg0[8:0]
8068 };
8069assign ctxt_nz_tsb_cfg1_reg[2] = {`SPC3.mmu.asi.t2_e_nz[1],// z_tsb_cfg0[63]
8070 mmu_mra0_a18[37:36], // z_tsb_cfg0[62:61]
8071 21'b0, // z_tsb_cfg0[60:40]
8072 mmu_mra0_a18[35:9], // z_tsb_cfg0[39:13]
8073 4'b0, // z_tsb_cfg0[12:9]
8074 mmu_mra0_a18[8:0] // z_tsb_cfg0[8:0]
8075 };
8076assign ctxt_nz_tsb_cfg2_reg[2] = {`SPC3.mmu.asi.t2_e_nz[2],// z_tsb_cfg0[63]
8077 mmu_mra0_a19[76:75], // z_tsb_cfg0[62:61]
8078 21'b0, // z_tsb_cfg0[60:40]
8079 mmu_mra0_a19[74:48], // z_tsb_cfg0[39:13]
8080 4'b0, // z_tsb_cfg0[12:9]
8081 mmu_mra0_a19[47:39] // z_tsb_cfg0[8:0]
8082 };
8083assign ctxt_nz_tsb_cfg3_reg[2] = {`SPC3.mmu.asi.t2_e_nz[3],// z_tsb_cfg0[63]
8084 mmu_mra0_a19[37:36], // z_tsb_cfg0[62:61]
8085 21'b0, // z_tsb_cfg0[60:40]
8086 mmu_mra0_a19[35:9], // z_tsb_cfg0[39:13]
8087 4'b0, // z_tsb_cfg0[12:9]
8088 mmu_mra0_a19[8:0] // z_tsb_cfg0[8:0]
8089 };
8090
8091// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
8092// as well as the physical to architectural bit position relationships.
8093assign ctxt_z_tsb_cfg0_reg[3] = {`SPC3.mmu.asi.t3_e_z[0], // z_tsb_cfg0[63]
8094 mmu_mra0_a24[76:75], // z_tsb_cfg0[62:61]
8095 21'b0, // z_tsb_cfg0[60:40]
8096 mmu_mra0_a24[74:48], // z_tsb_cfg0[39:13]
8097 4'b0, // z_tsb_cfg0[12:9]
8098 mmu_mra0_a24[47:39] // z_tsb_cfg0[8:0]
8099 };
8100assign ctxt_z_tsb_cfg1_reg[3] = {`SPC3.mmu.asi.t3_e_z[1], // z_tsb_cfg0[63]
8101 mmu_mra0_a24[37:36], // z_tsb_cfg0[62:61]
8102 21'b0, // z_tsb_cfg0[60:40]
8103 mmu_mra0_a24[35:9], // z_tsb_cfg0[39:13]
8104 4'b0, // z_tsb_cfg0[12:9]
8105 mmu_mra0_a24[8:0] // z_tsb_cfg0[8:0]
8106 };
8107assign ctxt_z_tsb_cfg2_reg[3] = {`SPC3.mmu.asi.t3_e_z[2], // z_tsb_cfg0[63]
8108 mmu_mra0_a25[76:75], // z_tsb_cfg0[62:61]
8109 21'b0, // z_tsb_cfg0[60:40]
8110 mmu_mra0_a25[74:48], // z_tsb_cfg0[39:13]
8111 4'b0, // z_tsb_cfg0[12:9]
8112 mmu_mra0_a25[47:39] // z_tsb_cfg0[8:0]
8113 };
8114assign ctxt_z_tsb_cfg3_reg[3] = {`SPC3.mmu.asi.t3_e_z[3], // z_tsb_cfg0[63]
8115 mmu_mra0_a25[37:36], // z_tsb_cfg0[62:61]
8116 21'b0, // z_tsb_cfg0[60:40]
8117 mmu_mra0_a25[35:9], // z_tsb_cfg0[39:13]
8118 4'b0, // z_tsb_cfg0[12:9]
8119 mmu_mra0_a25[8:0] // z_tsb_cfg0[8:0]
8120 };
8121assign ctxt_nz_tsb_cfg0_reg[3] = {`SPC3.mmu.asi.t3_e_nz[0],// z_tsb_cfg0[63]
8122 mmu_mra0_a26[76:75], // z_tsb_cfg0[62:61]
8123 21'b0, // z_tsb_cfg0[60:40]
8124 mmu_mra0_a26[74:48], // z_tsb_cfg0[39:13]
8125 4'b0, // z_tsb_cfg0[12:9]
8126 mmu_mra0_a26[47:39] // z_tsb_cfg0[8:0]
8127 };
8128assign ctxt_nz_tsb_cfg1_reg[3] = {`SPC3.mmu.asi.t3_e_nz[1],// z_tsb_cfg0[63]
8129 mmu_mra0_a26[37:36], // z_tsb_cfg0[62:61]
8130 21'b0, // z_tsb_cfg0[60:40]
8131 mmu_mra0_a26[35:9], // z_tsb_cfg0[39:13]
8132 4'b0, // z_tsb_cfg0[12:9]
8133 mmu_mra0_a26[8:0] // z_tsb_cfg0[8:0]
8134 };
8135assign ctxt_nz_tsb_cfg2_reg[3] = {`SPC3.mmu.asi.t3_e_nz[2],// z_tsb_cfg0[63]
8136 mmu_mra0_a27[76:75], // z_tsb_cfg0[62:61]
8137 21'b0, // z_tsb_cfg0[60:40]
8138 mmu_mra0_a27[74:48], // z_tsb_cfg0[39:13]
8139 4'b0, // z_tsb_cfg0[12:9]
8140 mmu_mra0_a27[47:39] // z_tsb_cfg0[8:0]
8141 };
8142assign ctxt_nz_tsb_cfg3_reg[3] = {`SPC3.mmu.asi.t3_e_nz[3],// z_tsb_cfg0[63]
8143 mmu_mra0_a27[37:36], // z_tsb_cfg0[62:61]
8144 21'b0, // z_tsb_cfg0[60:40]
8145 mmu_mra0_a27[35:9], // z_tsb_cfg0[39:13]
8146 4'b0, // z_tsb_cfg0[12:9]
8147 mmu_mra0_a27[8:0] // z_tsb_cfg0[8:0]
8148 };
8149
8150// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
8151// as well as the physical to architectural bit position relationships.
8152assign ctxt_z_tsb_cfg0_reg[4] = {`SPC3.mmu.asi.t4_e_z[0], // z_tsb_cfg0[63]
8153 mmu_mra1_a0[76:75], // z_tsb_cfg0[62:61]
8154 21'b0, // z_tsb_cfg0[60:40]
8155 mmu_mra1_a0[74:48], // z_tsb_cfg0[39:13]
8156 4'b0, // z_tsb_cfg0[12:9]
8157 mmu_mra1_a0[47:39] // z_tsb_cfg0[8:0]
8158 };
8159assign ctxt_z_tsb_cfg1_reg[4] = {`SPC3.mmu.asi.t4_e_z[1], // z_tsb_cfg0[63]
8160 mmu_mra1_a0[37:36], // z_tsb_cfg0[62:61]
8161 21'b0, // z_tsb_cfg0[60:40]
8162 mmu_mra1_a0[35:9], // z_tsb_cfg0[39:13]
8163 4'b0, // z_tsb_cfg0[12:9]
8164 mmu_mra1_a0[8:0] // z_tsb_cfg0[8:0]
8165 };
8166assign ctxt_z_tsb_cfg2_reg[4] = {`SPC3.mmu.asi.t4_e_z[2], // z_tsb_cfg0[63]
8167 mmu_mra1_a1[76:75], // z_tsb_cfg0[62:61]
8168 21'b0, // z_tsb_cfg0[60:40]
8169 mmu_mra1_a1[74:48], // z_tsb_cfg0[39:13]
8170 4'b0, // z_tsb_cfg0[12:9]
8171 mmu_mra1_a1[47:39] // z_tsb_cfg0[8:0]
8172 };
8173assign ctxt_z_tsb_cfg3_reg[4] = {`SPC3.mmu.asi.t4_e_z[3], // z_tsb_cfg0[63]
8174 mmu_mra1_a1[37:36], // z_tsb_cfg0[62:61]
8175 21'b0, // z_tsb_cfg0[60:40]
8176 mmu_mra1_a1[35:9], // z_tsb_cfg0[39:13]
8177 4'b0, // z_tsb_cfg0[12:9]
8178 mmu_mra1_a1[8:0] // z_tsb_cfg0[8:0]
8179 };
8180assign ctxt_nz_tsb_cfg0_reg[4] = {`SPC3.mmu.asi.t4_e_nz[0],// z_tsb_cfg0[63]
8181 mmu_mra1_a2[76:75], // z_tsb_cfg0[62:61]
8182 21'b0, // z_tsb_cfg0[60:40]
8183 mmu_mra1_a2[74:48], // z_tsb_cfg0[39:13]
8184 4'b0, // z_tsb_cfg0[12:9]
8185 mmu_mra1_a2[47:39] // z_tsb_cfg0[8:0]
8186 };
8187assign ctxt_nz_tsb_cfg1_reg[4] = {`SPC3.mmu.asi.t4_e_nz[1],// z_tsb_cfg0[63]
8188 mmu_mra1_a2[37:36], // z_tsb_cfg0[62:61]
8189 21'b0, // z_tsb_cfg0[60:40]
8190 mmu_mra1_a2[35:9], // z_tsb_cfg0[39:13]
8191 4'b0, // z_tsb_cfg0[12:9]
8192 mmu_mra1_a2[8:0] // z_tsb_cfg0[8:0]
8193 };
8194assign ctxt_nz_tsb_cfg2_reg[4] = {`SPC3.mmu.asi.t4_e_nz[2],// z_tsb_cfg0[63]
8195 mmu_mra1_a3[76:75], // z_tsb_cfg0[62:61]
8196 21'b0, // z_tsb_cfg0[60:40]
8197 mmu_mra1_a3[74:48], // z_tsb_cfg0[39:13]
8198 4'b0, // z_tsb_cfg0[12:9]
8199 mmu_mra1_a3[47:39] // z_tsb_cfg0[8:0]
8200 };
8201assign ctxt_nz_tsb_cfg3_reg[4] = {`SPC3.mmu.asi.t4_e_nz[3],// z_tsb_cfg0[63]
8202 mmu_mra1_a3[37:36], // z_tsb_cfg0[62:61]
8203 21'b0, // z_tsb_cfg0[60:40]
8204 mmu_mra1_a3[35:9], // z_tsb_cfg0[39:13]
8205 4'b0, // z_tsb_cfg0[12:9]
8206 mmu_mra1_a3[8:0] // z_tsb_cfg0[8:0]
8207 };
8208
8209// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
8210// as well as the physical to architectural bit position relationships.
8211assign ctxt_z_tsb_cfg0_reg[5] = {`SPC3.mmu.asi.t5_e_z[0], // z_tsb_cfg0[63]
8212 mmu_mra1_a8[76:75], // z_tsb_cfg0[62:61]
8213 21'b0, // z_tsb_cfg0[60:40]
8214 mmu_mra1_a8[74:48], // z_tsb_cfg0[39:13]
8215 4'b0, // z_tsb_cfg0[12:9]
8216 mmu_mra1_a8[47:39] // z_tsb_cfg0[8:0]
8217 };
8218assign ctxt_z_tsb_cfg1_reg[5] = {`SPC3.mmu.asi.t5_e_z[1], // z_tsb_cfg0[63]
8219 mmu_mra1_a8[37:36], // z_tsb_cfg0[62:61]
8220 21'b0, // z_tsb_cfg0[60:40]
8221 mmu_mra1_a8[35:9], // z_tsb_cfg0[39:13]
8222 4'b0, // z_tsb_cfg0[12:9]
8223 mmu_mra1_a8[8:0] // z_tsb_cfg0[8:0]
8224 };
8225assign ctxt_z_tsb_cfg2_reg[5] = {`SPC3.mmu.asi.t5_e_z[2], // z_tsb_cfg0[63]
8226 mmu_mra1_a9[76:75], // z_tsb_cfg0[62:61]
8227 21'b0, // z_tsb_cfg0[60:40]
8228 mmu_mra1_a9[74:48], // z_tsb_cfg0[39:13]
8229 4'b0, // z_tsb_cfg0[12:9]
8230 mmu_mra1_a9[47:39] // z_tsb_cfg0[8:0]
8231 };
8232assign ctxt_z_tsb_cfg3_reg[5] = {`SPC3.mmu.asi.t5_e_z[3], // z_tsb_cfg0[63]
8233 mmu_mra1_a9[37:36], // z_tsb_cfg0[62:61]
8234 21'b0, // z_tsb_cfg0[60:40]
8235 mmu_mra1_a9[35:9], // z_tsb_cfg0[39:13]
8236 4'b0, // z_tsb_cfg0[12:9]
8237 mmu_mra1_a9[8:0] // z_tsb_cfg0[8:0]
8238 };
8239assign ctxt_nz_tsb_cfg0_reg[5] = {`SPC3.mmu.asi.t5_e_nz[0],// z_tsb_cfg0[63]
8240 mmu_mra1_a10[76:75], // z_tsb_cfg0[62:61]
8241 21'b0, // z_tsb_cfg0[60:40]
8242 mmu_mra1_a10[74:48], // z_tsb_cfg0[39:13]
8243 4'b0, // z_tsb_cfg0[12:9]
8244 mmu_mra1_a10[47:39] // z_tsb_cfg0[8:0]
8245 };
8246assign ctxt_nz_tsb_cfg1_reg[5] = {`SPC3.mmu.asi.t5_e_nz[1],// z_tsb_cfg0[63]
8247 mmu_mra1_a10[37:36], // z_tsb_cfg0[62:61]
8248 21'b0, // z_tsb_cfg0[60:40]
8249 mmu_mra1_a10[35:9], // z_tsb_cfg0[39:13]
8250 4'b0, // z_tsb_cfg0[12:9]
8251 mmu_mra1_a10[8:0] // z_tsb_cfg0[8:0]
8252 };
8253assign ctxt_nz_tsb_cfg2_reg[5] = {`SPC3.mmu.asi.t5_e_nz[2],// z_tsb_cfg0[63]
8254 mmu_mra1_a11[76:75], // z_tsb_cfg0[62:61]
8255 21'b0, // z_tsb_cfg0[60:40]
8256 mmu_mra1_a11[74:48], // z_tsb_cfg0[39:13]
8257 4'b0, // z_tsb_cfg0[12:9]
8258 mmu_mra1_a11[47:39] // z_tsb_cfg0[8:0]
8259 };
8260assign ctxt_nz_tsb_cfg3_reg[5] = {`SPC3.mmu.asi.t5_e_nz[3],// z_tsb_cfg0[63]
8261 mmu_mra1_a11[37:36], // z_tsb_cfg0[62:61]
8262 21'b0, // z_tsb_cfg0[60:40]
8263 mmu_mra1_a11[35:9], // z_tsb_cfg0[39:13]
8264 4'b0, // z_tsb_cfg0[12:9]
8265 mmu_mra1_a11[8:0] // z_tsb_cfg0[8:0]
8266 };
8267
8268// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
8269// as well as the physical to architectural bit position relationships.
8270assign ctxt_z_tsb_cfg0_reg[6] = {`SPC3.mmu.asi.t6_e_z[0], // z_tsb_cfg0[63]
8271 mmu_mra1_a16[76:75], // z_tsb_cfg0[62:61]
8272 21'b0, // z_tsb_cfg0[60:40]
8273 mmu_mra1_a16[74:48], // z_tsb_cfg0[39:13]
8274 4'b0, // z_tsb_cfg0[12:9]
8275 mmu_mra1_a16[47:39] // z_tsb_cfg0[8:0]
8276 };
8277assign ctxt_z_tsb_cfg1_reg[6] = {`SPC3.mmu.asi.t6_e_z[1], // z_tsb_cfg0[63]
8278 mmu_mra1_a16[37:36], // z_tsb_cfg0[62:61]
8279 21'b0, // z_tsb_cfg0[60:40]
8280 mmu_mra1_a16[35:9], // z_tsb_cfg0[39:13]
8281 4'b0, // z_tsb_cfg0[12:9]
8282 mmu_mra1_a16[8:0] // z_tsb_cfg0[8:0]
8283 };
8284assign ctxt_z_tsb_cfg2_reg[6] = {`SPC3.mmu.asi.t6_e_z[2], // z_tsb_cfg0[63]
8285 mmu_mra1_a17[76:75], // z_tsb_cfg0[62:61]
8286 21'b0, // z_tsb_cfg0[60:40]
8287 mmu_mra1_a17[74:48], // z_tsb_cfg0[39:13]
8288 4'b0, // z_tsb_cfg0[12:9]
8289 mmu_mra1_a17[47:39] // z_tsb_cfg0[8:0]
8290 };
8291assign ctxt_z_tsb_cfg3_reg[6] = {`SPC3.mmu.asi.t6_e_z[3], // z_tsb_cfg0[63]
8292 mmu_mra1_a17[37:36], // z_tsb_cfg0[62:61]
8293 21'b0, // z_tsb_cfg0[60:40]
8294 mmu_mra1_a17[35:9], // z_tsb_cfg0[39:13]
8295 4'b0, // z_tsb_cfg0[12:9]
8296 mmu_mra1_a17[8:0] // z_tsb_cfg0[8:0]
8297 };
8298assign ctxt_nz_tsb_cfg0_reg[6] = {`SPC3.mmu.asi.t6_e_nz[0],// z_tsb_cfg0[63]
8299 mmu_mra1_a18[76:75], // z_tsb_cfg0[62:61]
8300 21'b0, // z_tsb_cfg0[60:40]
8301 mmu_mra1_a18[74:48], // z_tsb_cfg0[39:13]
8302 4'b0, // z_tsb_cfg0[12:9]
8303 mmu_mra1_a18[47:39] // z_tsb_cfg0[8:0]
8304 };
8305assign ctxt_nz_tsb_cfg1_reg[6] = {`SPC3.mmu.asi.t6_e_nz[1],// z_tsb_cfg0[63]
8306 mmu_mra1_a18[37:36], // z_tsb_cfg0[62:61]
8307 21'b0, // z_tsb_cfg0[60:40]
8308 mmu_mra1_a18[35:9], // z_tsb_cfg0[39:13]
8309 4'b0, // z_tsb_cfg0[12:9]
8310 mmu_mra1_a18[8:0] // z_tsb_cfg0[8:0]
8311 };
8312assign ctxt_nz_tsb_cfg2_reg[6] = {`SPC3.mmu.asi.t6_e_nz[2],// z_tsb_cfg0[63]
8313 mmu_mra1_a19[76:75], // z_tsb_cfg0[62:61]
8314 21'b0, // z_tsb_cfg0[60:40]
8315 mmu_mra1_a19[74:48], // z_tsb_cfg0[39:13]
8316 4'b0, // z_tsb_cfg0[12:9]
8317 mmu_mra1_a19[47:39] // z_tsb_cfg0[8:0]
8318 };
8319assign ctxt_nz_tsb_cfg3_reg[6] = {`SPC3.mmu.asi.t6_e_nz[3],// z_tsb_cfg0[63]
8320 mmu_mra1_a19[37:36], // z_tsb_cfg0[62:61]
8321 21'b0, // z_tsb_cfg0[60:40]
8322 mmu_mra1_a19[35:9], // z_tsb_cfg0[39:13]
8323 4'b0, // z_tsb_cfg0[12:9]
8324 mmu_mra1_a19[8:0] // z_tsb_cfg0[8:0]
8325 };
8326
8327// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
8328// as well as the physical to architectural bit position relationships.
8329assign ctxt_z_tsb_cfg0_reg[7] = {`SPC3.mmu.asi.t7_e_z[0], // z_tsb_cfg0[63]
8330 mmu_mra1_a24[76:75], // z_tsb_cfg0[62:61]
8331 21'b0, // z_tsb_cfg0[60:40]
8332 mmu_mra1_a24[74:48], // z_tsb_cfg0[39:13]
8333 4'b0, // z_tsb_cfg0[12:9]
8334 mmu_mra1_a24[47:39] // z_tsb_cfg0[8:0]
8335 };
8336assign ctxt_z_tsb_cfg1_reg[7] = {`SPC3.mmu.asi.t7_e_z[1], // z_tsb_cfg0[63]
8337 mmu_mra1_a24[37:36], // z_tsb_cfg0[62:61]
8338 21'b0, // z_tsb_cfg0[60:40]
8339 mmu_mra1_a24[35:9], // z_tsb_cfg0[39:13]
8340 4'b0, // z_tsb_cfg0[12:9]
8341 mmu_mra1_a24[8:0] // z_tsb_cfg0[8:0]
8342 };
8343assign ctxt_z_tsb_cfg2_reg[7] = {`SPC3.mmu.asi.t7_e_z[2], // z_tsb_cfg0[63]
8344 mmu_mra1_a25[76:75], // z_tsb_cfg0[62:61]
8345 21'b0, // z_tsb_cfg0[60:40]
8346 mmu_mra1_a25[74:48], // z_tsb_cfg0[39:13]
8347 4'b0, // z_tsb_cfg0[12:9]
8348 mmu_mra1_a25[47:39] // z_tsb_cfg0[8:0]
8349 };
8350assign ctxt_z_tsb_cfg3_reg[7] = {`SPC3.mmu.asi.t7_e_z[3], // z_tsb_cfg0[63]
8351 mmu_mra1_a25[37:36], // z_tsb_cfg0[62:61]
8352 21'b0, // z_tsb_cfg0[60:40]
8353 mmu_mra1_a25[35:9], // z_tsb_cfg0[39:13]
8354 4'b0, // z_tsb_cfg0[12:9]
8355 mmu_mra1_a25[8:0] // z_tsb_cfg0[8:0]
8356 };
8357assign ctxt_nz_tsb_cfg0_reg[7] = {`SPC3.mmu.asi.t7_e_nz[0],// z_tsb_cfg0[63]
8358 mmu_mra1_a26[76:75], // z_tsb_cfg0[62:61]
8359 21'b0, // z_tsb_cfg0[60:40]
8360 mmu_mra1_a26[74:48], // z_tsb_cfg0[39:13]
8361 4'b0, // z_tsb_cfg0[12:9]
8362 mmu_mra1_a26[47:39] // z_tsb_cfg0[8:0]
8363 };
8364assign ctxt_nz_tsb_cfg1_reg[7] = {`SPC3.mmu.asi.t7_e_nz[1],// z_tsb_cfg0[63]
8365 mmu_mra1_a26[37:36], // z_tsb_cfg0[62:61]
8366 21'b0, // z_tsb_cfg0[60:40]
8367 mmu_mra1_a26[35:9], // z_tsb_cfg0[39:13]
8368 4'b0, // z_tsb_cfg0[12:9]
8369 mmu_mra1_a26[8:0] // z_tsb_cfg0[8:0]
8370 };
8371assign ctxt_nz_tsb_cfg2_reg[7] = {`SPC3.mmu.asi.t7_e_nz[2],// z_tsb_cfg0[63]
8372 mmu_mra1_a27[76:75], // z_tsb_cfg0[62:61]
8373 21'b0, // z_tsb_cfg0[60:40]
8374 mmu_mra1_a27[74:48], // z_tsb_cfg0[39:13]
8375 4'b0, // z_tsb_cfg0[12:9]
8376 mmu_mra1_a27[47:39] // z_tsb_cfg0[8:0]
8377 };
8378assign ctxt_nz_tsb_cfg3_reg[7] = {`SPC3.mmu.asi.t7_e_nz[3],// z_tsb_cfg0[63]
8379 mmu_mra1_a27[37:36], // z_tsb_cfg0[62:61]
8380 21'b0, // z_tsb_cfg0[60:40]
8381 mmu_mra1_a27[35:9], // z_tsb_cfg0[39:13]
8382 4'b0, // z_tsb_cfg0[12:9]
8383 mmu_mra1_a27[8:0] // z_tsb_cfg0[8:0]
8384 };
8385`endif // EMUL - ADD_TSB_CFG
8386
8387
8388// This was the original select_pc_b, the latest select_pc_b qualifies with errors
8389// But some of the error checkers need this signal without the qualification
8390// of icache errors
8391// Suppress instruction on flush or park request
8392// (clear_disrupting_flush_pending_w_in & idl_req_in)
8393// Suppress instruction for 'refetch' exception after
8394// not taken branch with annulled delay slot
8395// NOTE: 'with_errors' means that the signal actually IGNORES instruction
8396// cache errors and asserts IN SPITE OF instruction cache errors
8397wire [7:0] select_pc_b_with_errors =
8398 {{4 {~`SPC3.dec_flush_b[1]}}, {4 {~`SPC3.dec_flush_b[0]}}} &
8399 {{4 {~`SPC3.tlu.fls1.refetch_w_in}}, {4 {~`SPC3.tlu.fls0.refetch_w_in}}} &
8400 {~(`SPC3.tlu.fls1.clear_disrupting_flush_pending_w_in[3:0] &
8401 {4 {`SPC3.tlu.fls1.idl_req_in}}),
8402 ~(`SPC3.tlu.fls0.clear_disrupting_flush_pending_w_in[3:0] &
8403 {4 {`SPC3.tlu.fls0.idl_req_in}})} &
8404 {`SPC3.tlu.fls1.tid_dec_valid_b[3:0],
8405 `SPC3.tlu.fls0.tid_dec_valid_b[3:0]};
8406
8407//------------------------------------
8408// Qualify select_pc_b_with_errors to get final select_pc_b signal
8409// Qualifications are
8410// - instruction cache errors (ic_err_w_in)
8411// - disrupting single step completion requests (dsc_req_in)
8412wire [7:0] select_pc_b =
8413 select_pc_b_with_errors[7:0] &
8414 {{4 {(~`SPC3.tlu.fls1.ic_err_w_in | `SPC3.tlu.fls1.itlb_nfo_exc_b) &
8415 ~`SPC3.tlu.fls1.dsc_req_in}},
8416 {4 {(~`SPC3.tlu.fls0.ic_err_w_in | `SPC3.tlu.fls0.itlb_nfo_exc_b) &
8417 ~`SPC3.tlu.fls0.dsc_req_in}}};
8418
8419//------------------------------------
8420
8421//original select_pc_b_with errors. Select_pc_b_with_errors is no longer asserted
8422//if the inst. following an annulled delay slot of a not taken branch has a prebuffer
8423//error and it reaches B stage. I still need a signal if this happens to trigger the chkr.
8424
8425wire [7:0] select_pc_b_with_errors_and_refetch =
8426 {{4 {~`SPC3.dec_flush_b[1]}}, {4 {~`SPC3.dec_flush_b[0]}}} &
8427 {~(`SPC3.tlu.fls1.clear_disrupting_flush_pending_w_in[3:0] &
8428 {4 {`SPC3.tlu.fls1.idl_req_in}}),
8429 ~(`SPC3.tlu.fls0.clear_disrupting_flush_pending_w_in[3:0] &
8430 {4 {`SPC3.tlu.fls0.idl_req_in}})} &
8431 {`SPC3.tlu.fls1.tid_dec_valid_b[3:0],
8432 `SPC3.tlu.fls0.tid_dec_valid_b[3:0]};
8433
8434// Signals required for bench TLB sync & LDST sync
8435
8436reg tlb_bypass_m;
8437reg tlb_bypass_b;
8438reg tlb_rd_vld_m;
8439reg tlb_rd_vld_b;
8440reg lsu_tl_gt_0_b;
8441reg [7:0] dcc_asi_b;
8442reg asi_internal_w;
8443
8444always @ (posedge `BENCH_SPC3_GCLK) begin // {
8445
8446 clkstop_d1 <= `SPC3.tcu_clk_stop;
8447 clkstop_d2 <= clkstop_d1;
8448 clkstop_d3 <= clkstop_d2;
8449 clkstop_d4 <= clkstop_d3;
8450 clkstop_d5 <= clkstop_d4;
8451
8452 tlb_bypass_m <= `SPC3.lsu.tlb.tlb_bypass;
8453 tlb_bypass_b <= tlb_bypass_m;
8454 tlb_rd_vld_m <= `SPC3.lsu.tlb.tlb_rd_vld | `SPC3.lsu.tlb.tlb_cam_vld;
8455 tlb_rd_vld_b <= tlb_rd_vld_m;
8456
8457 // This signal is only valid for LD/ST instructions
8458 lsu_tl_gt_0_b <= `SPC3.lsu.dcc.tl_gt_0_m;
8459
8460 // Can't use lsu.dcc_asi_b for tlb_sync so pipeline from M to B
8461 dcc_asi_b <= `SPC3.lsu.dcc_asi_m;
8462
8463 // LD/ST that will not issue to the crossbar
8464 asi_internal_w <= `SPC3.lsu.dcc.asi_internal_b;
8465end // }
8466
8467// TL determines whether Nucleus or Primary
8468wire [7:0] asi_num = `SPC3.lsu.dcc.altspace_ldst_b ?
8469 dcc_asi_b :
8470 (lsu_tl_gt_0_b ? 8'h04 : 8'h80);
8471
8472wire [7:0] itlb_miss = { (`SPC3.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
8473 `SPC3.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
8474 `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
8475 (`SPC3.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
8476 `SPC3.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
8477 `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
8478 (`SPC3.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
8479 `SPC3.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
8480 `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
8481 (`SPC3.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
8482 `SPC3.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
8483 `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
8484 (`SPC3.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
8485 `SPC3.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
8486 `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
8487 (`SPC3.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
8488 `SPC3.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
8489 `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
8490 (`SPC3.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
8491 `SPC3.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
8492 `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
8493 (`SPC3.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
8494 `SPC3.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
8495 `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
8496 };
8497
8498wire [7:0] icache_miss = { (`SPC3.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
8499 `SPC3.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
8500 `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
8501 (`SPC3.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
8502 `SPC3.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
8503 `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
8504 (`SPC3.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
8505 `SPC3.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
8506 `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
8507 (`SPC3.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
8508 `SPC3.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
8509 `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
8510 (`SPC3.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
8511 `SPC3.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
8512 `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
8513 (`SPC3.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
8514 `SPC3.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
8515 `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
8516 (`SPC3.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
8517 `SPC3.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
8518 `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
8519 (`SPC3.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
8520 `SPC3.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
8521 `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
8522 };
8523
8524wire inst_bypass = (`SPC3.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[0] |
8525 `SPC3.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[1] |
8526 `SPC3.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[2]);
8527
8528wire [7:0] fetch_bypass = { (inst_bypass & `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
8529 (inst_bypass & `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
8530 (inst_bypass & `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
8531 (inst_bypass & `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
8532 (inst_bypass & `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
8533 (inst_bypass & `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
8534 (inst_bypass & `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
8535 (inst_bypass & `SPC3.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
8536 };
8537
8538wire [7:0] itlb_wr = {(`SPC3.tlu.trl1.take_itw & `SPC3.tlu.trl1.trap[3]),
8539 (`SPC3.tlu.trl1.take_itw & `SPC3.tlu.trl1.trap[2]),
8540 (`SPC3.tlu.trl1.take_itw & `SPC3.tlu.trl1.trap[1]),
8541 (`SPC3.tlu.trl1.take_itw & `SPC3.tlu.trl1.trap[0]),
8542 (`SPC3.tlu.trl0.take_itw & `SPC3.tlu.trl0.trap[3]),
8543 (`SPC3.tlu.trl0.take_itw & `SPC3.tlu.trl0.trap[2]),
8544 (`SPC3.tlu.trl0.take_itw & `SPC3.tlu.trl0.trap[1]),
8545 (`SPC3.tlu.trl0.take_itw & `SPC3.tlu.trl0.trap[0])
8546 };
8547
8548//------------------------------------
8549
8550reg [71:0] tick_cmpr_0;
8551reg [71:0] stick_cmpr_0;
8552reg [71:0] hstick_cmpr_0;
8553reg [151:0] trap_entry_1_t0;
8554reg [151:0] trap_entry_2_t0;
8555reg [151:0] trap_entry_3_t0;
8556reg [151:0] trap_entry_4_t0;
8557reg [151:0] trap_entry_5_t0;
8558reg [151:0] trap_entry_6_t0;
8559
8560always @(posedge `BENCH_SPC3_GCLK) begin // {
8561
8562 // Probes for nas_pipe
8563 tick_cmpr_0 <= `SPC3.tlu.tca.array.mem[{2'b0,3'h0}];
8564 stick_cmpr_0 <= `SPC3.tlu.tca.array.mem[{2'b01,3'h0}];
8565 hstick_cmpr_0 <= `SPC3.tlu.tca.array.mem[{2'b10,3'h0}];
8566 trap_entry_1_t0 <= `SPC3.tlu.tsa0.array.mem[{2'h0, 3'h0}];
8567 trap_entry_2_t0 <= `SPC3.tlu.tsa0.array.mem[{2'h0, 3'h1}];
8568 trap_entry_3_t0 <= `SPC3.tlu.tsa0.array.mem[{2'h0, 3'h2}];
8569 trap_entry_4_t0 <= `SPC3.tlu.tsa0.array.mem[{2'h0, 3'h3}];
8570 trap_entry_5_t0 <= `SPC3.tlu.tsa0.array.mem[{2'h0, 3'h4}];
8571 trap_entry_6_t0 <= `SPC3.tlu.tsa0.array.mem[{2'h0, 3'h5}];
8572
8573end // }
8574reg [71:0] tick_cmpr_1;
8575reg [71:0] stick_cmpr_1;
8576reg [71:0] hstick_cmpr_1;
8577reg [151:0] trap_entry_1_t1;
8578reg [151:0] trap_entry_2_t1;
8579reg [151:0] trap_entry_3_t1;
8580reg [151:0] trap_entry_4_t1;
8581reg [151:0] trap_entry_5_t1;
8582reg [151:0] trap_entry_6_t1;
8583
8584always @(posedge `BENCH_SPC3_GCLK) begin // {
8585
8586 // Probes for nas_pipe
8587 tick_cmpr_1 <= `SPC3.tlu.tca.array.mem[{2'b0,3'h1}];
8588 stick_cmpr_1 <= `SPC3.tlu.tca.array.mem[{2'b01,3'h1}];
8589 hstick_cmpr_1 <= `SPC3.tlu.tca.array.mem[{2'b10,3'h1}];
8590 trap_entry_1_t1 <= `SPC3.tlu.tsa0.array.mem[{2'h1, 3'h0}];
8591 trap_entry_2_t1 <= `SPC3.tlu.tsa0.array.mem[{2'h1, 3'h1}];
8592 trap_entry_3_t1 <= `SPC3.tlu.tsa0.array.mem[{2'h1, 3'h2}];
8593 trap_entry_4_t1 <= `SPC3.tlu.tsa0.array.mem[{2'h1, 3'h3}];
8594 trap_entry_5_t1 <= `SPC3.tlu.tsa0.array.mem[{2'h1, 3'h4}];
8595 trap_entry_6_t1 <= `SPC3.tlu.tsa0.array.mem[{2'h1, 3'h5}];
8596
8597end // }
8598reg [71:0] tick_cmpr_2;
8599reg [71:0] stick_cmpr_2;
8600reg [71:0] hstick_cmpr_2;
8601reg [151:0] trap_entry_1_t2;
8602reg [151:0] trap_entry_2_t2;
8603reg [151:0] trap_entry_3_t2;
8604reg [151:0] trap_entry_4_t2;
8605reg [151:0] trap_entry_5_t2;
8606reg [151:0] trap_entry_6_t2;
8607
8608always @(posedge `BENCH_SPC3_GCLK) begin // {
8609
8610 // Probes for nas_pipe
8611 tick_cmpr_2 <= `SPC3.tlu.tca.array.mem[{2'b0,3'h2}];
8612 stick_cmpr_2 <= `SPC3.tlu.tca.array.mem[{2'b01,3'h2}];
8613 hstick_cmpr_2 <= `SPC3.tlu.tca.array.mem[{2'b10,3'h2}];
8614 trap_entry_1_t2 <= `SPC3.tlu.tsa0.array.mem[{2'h2, 3'h0}];
8615 trap_entry_2_t2 <= `SPC3.tlu.tsa0.array.mem[{2'h2, 3'h1}];
8616 trap_entry_3_t2 <= `SPC3.tlu.tsa0.array.mem[{2'h2, 3'h2}];
8617 trap_entry_4_t2 <= `SPC3.tlu.tsa0.array.mem[{2'h2, 3'h3}];
8618 trap_entry_5_t2 <= `SPC3.tlu.tsa0.array.mem[{2'h2, 3'h4}];
8619 trap_entry_6_t2 <= `SPC3.tlu.tsa0.array.mem[{2'h2, 3'h5}];
8620
8621end // }
8622reg [71:0] tick_cmpr_3;
8623reg [71:0] stick_cmpr_3;
8624reg [71:0] hstick_cmpr_3;
8625reg [151:0] trap_entry_1_t3;
8626reg [151:0] trap_entry_2_t3;
8627reg [151:0] trap_entry_3_t3;
8628reg [151:0] trap_entry_4_t3;
8629reg [151:0] trap_entry_5_t3;
8630reg [151:0] trap_entry_6_t3;
8631
8632always @(posedge `BENCH_SPC3_GCLK) begin // {
8633
8634 // Probes for nas_pipe
8635 tick_cmpr_3 <= `SPC3.tlu.tca.array.mem[{2'b0,3'h3}];
8636 stick_cmpr_3 <= `SPC3.tlu.tca.array.mem[{2'b01,3'h3}];
8637 hstick_cmpr_3 <= `SPC3.tlu.tca.array.mem[{2'b10,3'h3}];
8638 trap_entry_1_t3 <= `SPC3.tlu.tsa0.array.mem[{2'h3, 3'h0}];
8639 trap_entry_2_t3 <= `SPC3.tlu.tsa0.array.mem[{2'h3, 3'h1}];
8640 trap_entry_3_t3 <= `SPC3.tlu.tsa0.array.mem[{2'h3, 3'h2}];
8641 trap_entry_4_t3 <= `SPC3.tlu.tsa0.array.mem[{2'h3, 3'h3}];
8642 trap_entry_5_t3 <= `SPC3.tlu.tsa0.array.mem[{2'h3, 3'h4}];
8643 trap_entry_6_t3 <= `SPC3.tlu.tsa0.array.mem[{2'h3, 3'h5}];
8644
8645end // }
8646reg [71:0] tick_cmpr_4;
8647reg [71:0] stick_cmpr_4;
8648reg [71:0] hstick_cmpr_4;
8649reg [151:0] trap_entry_1_t4;
8650reg [151:0] trap_entry_2_t4;
8651reg [151:0] trap_entry_3_t4;
8652reg [151:0] trap_entry_4_t4;
8653reg [151:0] trap_entry_5_t4;
8654reg [151:0] trap_entry_6_t4;
8655
8656always @(posedge `BENCH_SPC3_GCLK) begin // {
8657
8658 // Probes for nas_pipe
8659 tick_cmpr_4 <= `SPC3.tlu.tca.array.mem[{2'b0,3'h4}];
8660 stick_cmpr_4 <= `SPC3.tlu.tca.array.mem[{2'b01,3'h4}];
8661 hstick_cmpr_4 <= `SPC3.tlu.tca.array.mem[{2'b10,3'h4}];
8662 trap_entry_1_t4 <= `SPC3.tlu.tsa1.array.mem[{2'h0, 3'h0}];
8663 trap_entry_2_t4 <= `SPC3.tlu.tsa1.array.mem[{2'h0, 3'h1}];
8664 trap_entry_3_t4 <= `SPC3.tlu.tsa1.array.mem[{2'h0, 3'h2}];
8665 trap_entry_4_t4 <= `SPC3.tlu.tsa1.array.mem[{2'h0, 3'h3}];
8666 trap_entry_5_t4 <= `SPC3.tlu.tsa1.array.mem[{2'h0, 3'h4}];
8667 trap_entry_6_t4 <= `SPC3.tlu.tsa1.array.mem[{2'h0, 3'h5}];
8668
8669end // }
8670reg [71:0] tick_cmpr_5;
8671reg [71:0] stick_cmpr_5;
8672reg [71:0] hstick_cmpr_5;
8673reg [151:0] trap_entry_1_t5;
8674reg [151:0] trap_entry_2_t5;
8675reg [151:0] trap_entry_3_t5;
8676reg [151:0] trap_entry_4_t5;
8677reg [151:0] trap_entry_5_t5;
8678reg [151:0] trap_entry_6_t5;
8679
8680always @(posedge `BENCH_SPC3_GCLK) begin // {
8681
8682 // Probes for nas_pipe
8683 tick_cmpr_5 <= `SPC3.tlu.tca.array.mem[{2'b0,3'h5}];
8684 stick_cmpr_5 <= `SPC3.tlu.tca.array.mem[{2'b01,3'h5}];
8685 hstick_cmpr_5 <= `SPC3.tlu.tca.array.mem[{2'b10,3'h5}];
8686 trap_entry_1_t5 <= `SPC3.tlu.tsa1.array.mem[{2'h1, 3'h0}];
8687 trap_entry_2_t5 <= `SPC3.tlu.tsa1.array.mem[{2'h1, 3'h1}];
8688 trap_entry_3_t5 <= `SPC3.tlu.tsa1.array.mem[{2'h1, 3'h2}];
8689 trap_entry_4_t5 <= `SPC3.tlu.tsa1.array.mem[{2'h1, 3'h3}];
8690 trap_entry_5_t5 <= `SPC3.tlu.tsa1.array.mem[{2'h1, 3'h4}];
8691 trap_entry_6_t5 <= `SPC3.tlu.tsa1.array.mem[{2'h1, 3'h5}];
8692
8693end // }
8694reg [71:0] tick_cmpr_6;
8695reg [71:0] stick_cmpr_6;
8696reg [71:0] hstick_cmpr_6;
8697reg [151:0] trap_entry_1_t6;
8698reg [151:0] trap_entry_2_t6;
8699reg [151:0] trap_entry_3_t6;
8700reg [151:0] trap_entry_4_t6;
8701reg [151:0] trap_entry_5_t6;
8702reg [151:0] trap_entry_6_t6;
8703
8704always @(posedge `BENCH_SPC3_GCLK) begin // {
8705
8706 // Probes for nas_pipe
8707 tick_cmpr_6 <= `SPC3.tlu.tca.array.mem[{2'b0,3'h6}];
8708 stick_cmpr_6 <= `SPC3.tlu.tca.array.mem[{2'b01,3'h6}];
8709 hstick_cmpr_6 <= `SPC3.tlu.tca.array.mem[{2'b10,3'h6}];
8710 trap_entry_1_t6 <= `SPC3.tlu.tsa1.array.mem[{2'h2, 3'h0}];
8711 trap_entry_2_t6 <= `SPC3.tlu.tsa1.array.mem[{2'h2, 3'h1}];
8712 trap_entry_3_t6 <= `SPC3.tlu.tsa1.array.mem[{2'h2, 3'h2}];
8713 trap_entry_4_t6 <= `SPC3.tlu.tsa1.array.mem[{2'h2, 3'h3}];
8714 trap_entry_5_t6 <= `SPC3.tlu.tsa1.array.mem[{2'h2, 3'h4}];
8715 trap_entry_6_t6 <= `SPC3.tlu.tsa1.array.mem[{2'h2, 3'h5}];
8716
8717end // }
8718reg [71:0] tick_cmpr_7;
8719reg [71:0] stick_cmpr_7;
8720reg [71:0] hstick_cmpr_7;
8721reg [151:0] trap_entry_1_t7;
8722reg [151:0] trap_entry_2_t7;
8723reg [151:0] trap_entry_3_t7;
8724reg [151:0] trap_entry_4_t7;
8725reg [151:0] trap_entry_5_t7;
8726reg [151:0] trap_entry_6_t7;
8727
8728always @(posedge `BENCH_SPC3_GCLK) begin // {
8729
8730 // Probes for nas_pipe
8731 tick_cmpr_7 <= `SPC3.tlu.tca.array.mem[{2'b0,3'h7}];
8732 stick_cmpr_7 <= `SPC3.tlu.tca.array.mem[{2'b01,3'h7}];
8733 hstick_cmpr_7 <= `SPC3.tlu.tca.array.mem[{2'b10,3'h7}];
8734 trap_entry_1_t7 <= `SPC3.tlu.tsa1.array.mem[{2'h3, 3'h0}];
8735 trap_entry_2_t7 <= `SPC3.tlu.tsa1.array.mem[{2'h3, 3'h1}];
8736 trap_entry_3_t7 <= `SPC3.tlu.tsa1.array.mem[{2'h3, 3'h2}];
8737 trap_entry_4_t7 <= `SPC3.tlu.tsa1.array.mem[{2'h3, 3'h3}];
8738 trap_entry_5_t7 <= `SPC3.tlu.tsa1.array.mem[{2'h3, 3'h4}];
8739 trap_entry_6_t7 <= `SPC3.tlu.tsa1.array.mem[{2'h3, 3'h5}];
8740
8741end // }
8742
8743//------------------------------------
8744// ASI & Trap State machines
8745always @(posedge `BENCH_SPC3_GCLK) begin // {
8746
8747// pc_0_e[47:0] <= `SPC3.ifu_pc_d0[47:0];
8748// pc_1_e[47:0] <= `SPC3.ifu_pc_d1[47:0];
8749 pc_0_e[47:0] <= {`SPC3.tlu_pc_0_d[47:2], 2'b00};
8750 pc_1_e[47:0] <= {`SPC3.tlu_pc_1_d[47:2], 2'b00};
8751 pc_0_m[47:0] <= pc_0_e[47:0];
8752 pc_1_m[47:0] <= pc_1_e[47:0];
8753 pc_0_b[47:0] <= pc_0_m[47:0];
8754 pc_1_b[47:0] <= pc_1_m[47:0];
8755 pc_0_w[47:0] <= ({48 { select_pc_b[0]}} & pc_0_b[47:0]) |
8756 ({48 {~select_pc_b[0]}} & pc_0_w[47:0]) ;
8757 pc_1_w[47:0] <= ({48 { select_pc_b[1]}} & pc_0_b[47:0]) |
8758 ({48 {~select_pc_b[1]}} & pc_1_w[47:0]) ;
8759 pc_2_w[47:0] <= ({48 { select_pc_b[2]}} & pc_0_b[47:0]) |
8760 ({48 {~select_pc_b[2]}} & pc_2_w[47:0]) ;
8761 pc_3_w[47:0] <= ({48 { select_pc_b[3]}} & pc_0_b[47:0]) |
8762 ({48 {~select_pc_b[3]}} & pc_3_w[47:0]) ;
8763 pc_4_w[47:0] <= ({48 { select_pc_b[4]}} & pc_1_b[47:0]) |
8764 ({48 {~select_pc_b[4]}} & pc_4_w[47:0]) ;
8765 pc_5_w[47:0] <= ({48 { select_pc_b[5]}} & pc_1_b[47:0]) |
8766 ({48 {~select_pc_b[5]}} & pc_5_w[47:0]) ;
8767 pc_6_w[47:0] <= ({48 { select_pc_b[6]}} & pc_1_b[47:0]) |
8768 ({48 {~select_pc_b[6]}} & pc_6_w[47:0]) ;
8769 pc_7_w[47:0] <= ({48 { select_pc_b[7]}} & pc_1_b[47:0]) |
8770 ({48 {~select_pc_b[7]}} & pc_7_w[47:0]) ;
8771
8772
8773 // altspace_ldst_m is asserted for asi accesses that don't change arch state
8774 asi_store_b <= (`SPC3.lsu.dcc.asi_store_m & `SPC3.lsu.dcc.asi_sync_m);
8775 asi_store_w <= asi_store_b;
8776 dcc_tid_b <= `SPC3.lsu.dcc.dcc_tid_m;
8777 dcc_tid_w <= dcc_tid_b;
8778
8779 // ASI in progress state m/c
8780 if (asi_store_w & ~asi_store_flush_w[dcc_tid_w]) begin // {
8781 asi_in_progress_b[dcc_tid_w] <= 1'b1;
8782 end // }
8783
8784 asi_valid_w <= asi_in_progress_b & store_sync;
8785
8786 // Delay asi_valid_w and asi_in_progress
8787 // 2 clocks to ensure TLB Sync DTLBWRITE (demap) comes before SSTEP stxa
8788 asi_valid_fx4 <= asi_valid_w;
8789 asi_valid_fx5 <= asi_valid_fx4;
8790 asi_in_progress_w <= asi_in_progress_b;
8791 asi_in_progress_fx4 <= asi_in_progress_w;
8792 sync_reset_w <= sync_reset;
8793
8794 for (i=0;i<8;i=i+1) begin // {
8795 if (asi_valid_w[i] | sync_reset_w[i]) begin // {
8796 asi_in_progress_b[i] <= 1'b0;
8797 end//}
8798 end //}
8799
8800 // Trap0 pipeline [valid W stage]
8801
8802 for (i=0;i<4;i=i+1) begin // {
8803 // Done & Retry
8804 if ((`SPC3.tlu.tlu_trap_0_tid[1:0] == i) &&
8805 `SPC3.tlu.tlu_trap_pc_0_valid & tlu_ccr_cwp_0_valid_last)
8806 begin //{
8807 tlu_valid[i] <= 1'b1;
8808 end //}
8809 // Trap taken
8810 else if (`SPC3.tlu.trl0.real_trap[i] & ~`SPC3.tlu.trl0.take_por) begin // {
8811 tlu_valid[i] <= 1'b1;
8812 end //}
8813 else
8814 tlu_valid[i] <= 1'b0;
8815 end //}
8816
8817 // Trap1 pipeline [valid W stage]
8818
8819 for (i=0;i<4;i=i+1) begin // {
8820 // Done & Retry
8821 if ((`SPC3.tlu.tlu_trap_1_tid[1:0] == i) &&
8822 `SPC3.tlu.tlu_trap_pc_1_valid & tlu_ccr_cwp_1_valid_last)
8823 begin //{
8824 tlu_valid[i+4] <= 1'b1;
8825 end //}
8826 // Trap taken
8827 else if (`SPC3.tlu.trl1.real_trap[i] & ~`SPC3.tlu.trl1.take_por) begin // {
8828 tlu_valid[i+4] <= 1'b1;
8829 end //}
8830 else
8831 tlu_valid[i+4] <= 1'b0;
8832 end //}
8833
8834end // }
8835
8836
8837always @(posedge `BENCH_SPC3_GCLK) begin
8838
8839// debug code for TPCC analysis
8840`ifdef TPCC
8841if (pcx_req==1) begin
8842 if (`SPC3.spc_pcx_data_pa[129:124]==6'b100000) begin // l15 dmiss
8843 l15dmiss_cnt=l15dmiss_cnt+1;
8844 $display("dmissl15 cnt is %0d",l15dmiss_cnt);
8845 end
8846 if (`SPC3.spc_pcx_data_pa[129:124]==6'b110000) begin // l15 imiss
8847 l15imiss_cnt=l15imiss_cnt+1;
8848 $display("imissl15 cnt is %0d",l15imiss_cnt);
8849 end
8850 // `TOP.spg.spc_pcx_data_pa[129:124]==6'b100001 -> all stores
8851end
8852
8853pcx_req <= |`SPC3.spc_pcx_req_pq[8:0];
8854
8855if (`SPC3.ifu_l15_valid==1) begin
8856 imiss_cnt=imiss_cnt+1;
8857 $display("imiss cnt is %0d",imiss_cnt);
8858end
8859if (spec_dmiss==1 && `SPC3.lsu_l15_cancel==0) begin
8860 dmiss_cnt=dmiss_cnt+1;
8861 $display("dmiss cnt is %0d",dmiss_cnt);
8862
8863end
8864spec_dmiss <= `SPC3.lsu_l15_valid & `SPC3.lsu_l15_load;
8865
8866clock = clock+1;
8867
8868// keep track of imiss latencies
8869if (`SPC3.ftu_agc_thr0_cmiss_c==1) begin
8870 start_imiss0=clock;
8871 active_imiss0=1;
8872end
8873if (active_imiss0==1 && first_imiss0==1 && `SPC3.l15_spc_cpkt[8:6]==3'b000 && `SPC3.l15_spc_valid==1 && `SPC3.l15_spc_cpkt[17:14]==4'b0001) begin
8874 sum_imiss_latency = sum_imiss_latency + clock - start_imiss0 + 1;
8875 number_imiss = number_imiss + 1;
8876 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
8877 active_imiss0=0;
8878 first_imiss0=0;
8879end
8880if (active_imiss0==1 && first_imiss0==0 && `SPC3.l15_spc_cpkt[8:6]==3'b000 && `SPC3.l15_spc_valid==1 && `SPC3.l15_spc_cpkt[17:14]==4'b0001) begin
8881 first_imiss0=1;
8882end
8883if (`SPC3.ftu_agc_thr1_cmiss_c==1) begin
8884 start_imiss1=clock;
8885 active_imiss1=1;
8886end
8887if (active_imiss1==1 && first_imiss1==1 && `SPC3.l15_spc_cpkt[8:6]==3'b001 && `SPC3.l15_spc_valid==1 && `SPC3.l15_spc_cpkt[17:14]==4'b0001) begin
8888 sum_imiss_latency = sum_imiss_latency + clock - start_imiss1 + 1;
8889 number_imiss = number_imiss + 1;
8890 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
8891 active_imiss1=0;
8892 first_imiss1=0;
8893end
8894if (active_imiss1==1 && first_imiss1==0 && `SPC3.l15_spc_cpkt[8:6]==3'b001 && `SPC3.l15_spc_valid==1 && `SPC3.l15_spc_cpkt[17:14]==4'b0001) begin
8895 first_imiss1=1;
8896end
8897if (`SPC3.ftu_agc_thr2_cmiss_c==1) begin
8898 start_imiss2=clock;
8899 active_imiss2=1;
8900end
8901if (active_imiss2==1 && first_imiss2==1 && `SPC3.l15_spc_cpkt[8:6]==3'b010 && `SPC3.l15_spc_valid==1 && `SPC3.l15_spc_cpkt[17:14]==4'b0001) begin
8902 sum_imiss_latency = sum_imiss_latency + clock - start_imiss2 + 1;
8903 number_imiss = number_imiss + 1;
8904 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
8905 active_imiss2=0;
8906 first_imiss2=0;
8907end
8908if (active_imiss2==1 && first_imiss2==0 && `SPC3.l15_spc_cpkt[8:6]==3'b010 && `SPC3.l15_spc_valid==1 && `SPC3.l15_spc_cpkt[17:14]==4'b0001) begin
8909 first_imiss2=1;
8910end
8911if (`SPC3.ftu_agc_thr3_cmiss_c==1) begin
8912 start_imiss3=clock;
8913 active_imiss3=1;
8914end
8915if (active_imiss3==1 && first_imiss3==1 && `SPC3.l15_spc_cpkt[8:6]==3'b011 && `SPC3.l15_spc_valid==1 && `SPC3.l15_spc_cpkt[17:14]==4'b0001) begin
8916 sum_imiss_latency = sum_imiss_latency + clock - start_imiss3 + 1;
8917 number_imiss = number_imiss + 1;
8918 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
8919 active_imiss3=0;
8920 first_imiss3=0;
8921end
8922if (active_imiss3==1 && first_imiss3==0 && `SPC3.l15_spc_cpkt[8:6]==3'b011 && `SPC3.l15_spc_valid==1 && `SPC3.l15_spc_cpkt[17:14]==4'b0001) begin
8923 first_imiss3=1;
8924end
8925if (`SPC3.ftu_agc_thr4_cmiss_c==1) begin
8926 start_imiss4=clock;
8927 active_imiss4=1;
8928end
8929if (active_imiss4==1 && first_imiss4==1 && `SPC3.l15_spc_cpkt[8:6]==3'b100 && `SPC3.l15_spc_valid==1 && `SPC3.l15_spc_cpkt[17:14]==4'b0001) begin
8930 sum_imiss_latency = sum_imiss_latency + clock - start_imiss4 + 1;
8931 number_imiss = number_imiss + 1;
8932 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
8933 active_imiss4=0;
8934 first_imiss4=0;
8935end
8936if (active_imiss4==1 && first_imiss4==0 && `SPC3.l15_spc_cpkt[8:6]==3'b100 && `SPC3.l15_spc_valid==1 && `SPC3.l15_spc_cpkt[17:14]==4'b0001) begin
8937 first_imiss4=1;
8938end
8939if (`SPC3.ftu_agc_thr5_cmiss_c==1) begin
8940 start_imiss5=clock;
8941 active_imiss5=1;
8942end
8943if (active_imiss5==1 && first_imiss5==1 && `SPC3.l15_spc_cpkt[8:6]==3'b101 && `SPC3.l15_spc_valid==1 && `SPC3.l15_spc_cpkt[17:14]==4'b0001) begin
8944 sum_imiss_latency = sum_imiss_latency + clock - start_imiss5 + 1;
8945 number_imiss = number_imiss + 1;
8946 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
8947 active_imiss5=0;
8948 first_imiss5=0;
8949end
8950if (active_imiss5==1 && first_imiss5==0 && `SPC3.l15_spc_cpkt[8:6]==3'b101 && `SPC3.l15_spc_valid==1 && `SPC3.l15_spc_cpkt[17:14]==4'b0001) begin
8951 first_imiss5=1;
8952end
8953if (`SPC3.ftu_agc_thr6_cmiss_c==1) begin
8954 start_imiss6=clock;
8955 active_imiss6=1;
8956end
8957if (active_imiss6==1 && first_imiss6==1 && `SPC3.l15_spc_cpkt[8:6]==3'b110 && `SPC3.l15_spc_valid==1 && `SPC3.l15_spc_cpkt[17:14]==4'b0001) begin
8958 sum_imiss_latency = sum_imiss_latency + clock - start_imiss6 + 1;
8959 number_imiss = number_imiss + 1;
8960 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
8961 active_imiss6=0;
8962 first_imiss6=0;
8963end
8964if (active_imiss6==1 && first_imiss6==0 && `SPC3.l15_spc_cpkt[8:6]==3'b110 && `SPC3.l15_spc_valid==1 && `SPC3.l15_spc_cpkt[17:14]==4'b0001) begin
8965 first_imiss6=1;
8966end
8967if (`SPC3.ftu_agc_thr7_cmiss_c==1) begin
8968 start_imiss7=clock;
8969 active_imiss7=1;
8970end
8971if (active_imiss7==1 && first_imiss7==1 && `SPC3.l15_spc_cpkt[8:6]==3'b111 && `SPC3.l15_spc_valid==1 && `SPC3.l15_spc_cpkt[17:14]==4'b0001) begin
8972 sum_imiss_latency = sum_imiss_latency + clock - start_imiss7 + 1;
8973 number_imiss = number_imiss + 1;
8974 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
8975 active_imiss7=0;
8976 first_imiss7=0;
8977end
8978if (active_imiss7==1 && first_imiss7==0 && `SPC3.l15_spc_cpkt[8:6]==3'b111 && `SPC3.l15_spc_valid==1 && `SPC3.l15_spc_cpkt[17:14]==4'b0001) begin
8979 first_imiss7=1;
8980end
8981
8982if (`SPC3.pku.swl0.set_lsu_sync_wait==1) begin
8983 start_dmiss0=clock;
8984end
8985if (`SPC3.pku.swl0.clear_lsu_sync_wait==1) begin
8986 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss0) + 3;
8987 number_dmiss = number_dmiss + 1;
8988 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
8989end
8990if (`SPC3.pku.swl1.set_lsu_sync_wait==1) begin
8991 start_dmiss1=clock;
8992end
8993if (`SPC3.pku.swl1.clear_lsu_sync_wait==1) begin
8994 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss1) + 3;
8995 number_dmiss = number_dmiss + 1;
8996 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
8997end
8998if (`SPC3.pku.swl2.set_lsu_sync_wait==1) begin
8999 start_dmiss2=clock;
9000end
9001if (`SPC3.pku.swl2.clear_lsu_sync_wait==1) begin
9002 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss2) + 3;
9003 number_dmiss = number_dmiss + 1;
9004 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
9005end
9006if (`SPC3.pku.swl3.set_lsu_sync_wait==1) begin
9007 start_dmiss3=clock;
9008end
9009if (`SPC3.pku.swl3.clear_lsu_sync_wait==1) begin
9010 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss3) + 3;
9011 number_dmiss = number_dmiss + 1;
9012 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
9013end
9014if (`SPC3.pku.swl4.set_lsu_sync_wait==1) begin
9015 start_dmiss4=clock;
9016end
9017if (`SPC3.pku.swl4.clear_lsu_sync_wait==1) begin
9018 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss4) + 3;
9019 number_dmiss = number_dmiss + 1;
9020 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
9021end
9022if (`SPC3.pku.swl5.set_lsu_sync_wait==1) begin
9023 start_dmiss5=clock;
9024end
9025if (`SPC3.pku.swl5.clear_lsu_sync_wait==1) begin
9026 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss5) + 3;
9027 number_dmiss = number_dmiss + 1;
9028 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
9029end
9030if (`SPC3.pku.swl6.set_lsu_sync_wait==1) begin
9031 start_dmiss6=clock;
9032end
9033if (`SPC3.pku.swl6.clear_lsu_sync_wait==1) begin
9034 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss6) + 3;
9035 number_dmiss = number_dmiss + 1;
9036 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
9037end
9038if (`SPC3.pku.swl7.set_lsu_sync_wait==1) begin
9039 start_dmiss7=clock;
9040end
9041if (`SPC3.pku.swl7.clear_lsu_sync_wait==1) begin
9042 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss7) + 3;
9043 number_dmiss = number_dmiss + 1;
9044 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
9045end
9046`endif
9047
9048
9049
9050 lsu_tid_e[2:0] <= `SPC3.lsu.dcc.tid_d[2:0];
9051
9052 // FG Valid conditions
9053
9054 // Add fcc valids to fg_valid
9055 fcc_valid_fb <= fcc_valid_f5;
9056 fcc_valid_f5 <= fcc_valid_f4;
9057 fcc_valid_f4 <= |`SPC3.fgu.fgu_cmp_fcc_vld_fx3[3:0];
9058
9059 fg_flush_fb <= fg_flush_f5;
9060 fg_flush_f5 <= fg_flush_f4;
9061 fg_flush_f4 <= fg_flush_f3;
9062 fg_flush_f3 <= fg_flush_f2 | `SPC3.dec_flush_f2 |
9063 `SPC3.tlu_flush_fgu_b;
9064 fg_flush_f2 <= `SPC3.dec_flush_f1;
9065
9066 fgu_err_fx3 <= `SPC3.fgu_cecc_fx2 | `SPC3.fgu_uecc_fx2 | `SPC3.fgu.fpc.exu_flush_fx2; // frf or irf ecc error
9067 fgu_err_fx4 <= fgu_err_fx3;
9068 fgu_err_fx5 <= fgu_err_fx4;
9069 fgu_err_fb <= fgu_err_fx5;
9070
9071 // Siams cause fg_valid ..
9072 siam0_d = `SPC3.dec.dec_inst0_d[31:30]==2'b10 &
9073 `SPC3.dec.dec_inst0_d[24:19]==6'b110110 &
9074 `SPC3.dec.dec_inst0_d[13:5]==9'b010000001;
9075
9076 siam1_d = `SPC3.dec.dec_inst1_d[31:30]==2'b10 &
9077 `SPC3.dec.dec_inst1_d[24:19]==6'b110110 &
9078 `SPC3.dec.dec_inst1_d[13:5]==9'b010000001;
9079
9080
9081 done0_d = `SPC3.dec.dec_inst0_d[31:30]==2'b10 &
9082 `SPC3.dec.dec_inst0_d[29:25]==5'b00000 &
9083 `SPC3.dec.dec_inst0_d[24:19]==6'b111110;
9084 done1_d = `SPC3.dec.dec_inst1_d[31:30]==2'b10 &
9085 `SPC3.dec.dec_inst1_d[29:25]==5'b00000 &
9086 `SPC3.dec.dec_inst1_d[24:19]==6'b111110;
9087
9088 retry0_d = `SPC3.dec.dec_inst0_d[31:30]==2'b10 &
9089 `SPC3.dec.dec_inst0_d[29:25]==5'b00001 &
9090 `SPC3.dec.dec_inst0_d[24:19]==6'b111110;
9091 retry1_d = `SPC3.dec.dec_inst1_d[31:30]==2'b10 &
9092 `SPC3.dec.dec_inst1_d[29:25]==5'b00001 &
9093 `SPC3.dec.dec_inst1_d[24:19]==6'b111110;
9094
9095 done0_e <= done0_d & `SPC3.dec.dec_decode0_d;
9096 done1_e <= done1_d & `SPC3.dec.dec_decode1_d;
9097
9098 retry0_e <= retry0_d & `SPC3.dec.dec_decode0_d;
9099 retry1_e <= retry1_d & `SPC3.dec.dec_decode1_d;
9100
9101
9102 // fold siam into cmov logic
9103
9104 fmov_valid_fb <= fmov_valid_f5;
9105 fmov_valid_f5 <= fmov_valid_f4;
9106 fmov_valid_f4 <= fmov_valid_f3;
9107 fmov_valid_f3 <= fmov_valid_f2;
9108 fmov_valid_f2 <= fmov_valid_m;
9109 fmov_valid_m <= fmov_valid_e & `SPC3.dec.dec_fgu_valid_e;
9110 fmov_valid_e <= ((`SPC3.exu0.ect.cmov_d | siam0_d) &
9111 `SPC3.dec.dec_decode0_d&`SPC3.dec.del.fgu0_d) |
9112 ((`SPC3.exu1.ect.cmov_d | siam1_d) &
9113 `SPC3.dec.dec_decode1_d&`SPC3.dec.del.fgu1_d);
9114
9115 // fgu check bus
9116
9117 // fcc_valid_fb doesn't assert for LDFSR. LDFSR gets checked by the LSU
9118 // checker
9119
9120 fg_valid <= {(`SPC3.fgu.fac.fac_w1_tid_fb[2:0]==3'h7) && fg_cond_fb,
9121 (`SPC3.fgu.fac.fac_w1_tid_fb[2:0]==3'h6) && fg_cond_fb,
9122 (`SPC3.fgu.fac.fac_w1_tid_fb[2:0]==3'h5) && fg_cond_fb,
9123 (`SPC3.fgu.fac.fac_w1_tid_fb[2:0]==3'h4) && fg_cond_fb,
9124 (`SPC3.fgu.fac.fac_w1_tid_fb[2:0]==3'h3) && fg_cond_fb,
9125 (`SPC3.fgu.fac.fac_w1_tid_fb[2:0]==3'h2) && fg_cond_fb,
9126 (`SPC3.fgu.fac.fac_w1_tid_fb[2:0]==3'h1) && fg_cond_fb,
9127 (`SPC3.fgu.fac.fac_w1_tid_fb[2:0]==3'h0) && fg_cond_fb };
9128
9129
9130 fgu_valid_fb0 <= `SPC3.fgu_exu_w_vld_fx5[0] && !`SPC3.fgu.fpc.div_finish_int_fb;
9131 fgu_valid_fb1 <= `SPC3.fgu_exu_w_vld_fx5[1] && !`SPC3.fgu.fpc.div_finish_int_fb;
9132
9133 // Fdiv
9134 div_special_cancel_f4[7:0] <= tid2onehot(`SPC3.fgu.fac.tid_fx3[2:0]) &
9135 {8{`SPC3.fgu.fac.q_div_default_res_fx3}};
9136 fg_fdiv_valid_fw <= `SPC3.fgu_divide_completion & ~div_special_cancel_f4 &
9137 {8{~`SPC3.fgu.fpc.fpc_fpd_ieee_trap_fb}} &
9138 {8{~`SPC3.fgu.fpc.fpc_fpd_unfin_fb}};
9139
9140
9141 // Used in CCX Stub ?
9142 inst0_e[31:0] <= `SPC3.dec.dec_inst0_d[31:0];
9143 inst1_e[31:0] <= `SPC3.dec.dec_inst1_d[31:0];
9144
9145 // only fgu ops that are not loads/stores
9146 fgu0_e <= `SPC3.dec.del.decode_fgu0_d;
9147 fgu1_e <= `SPC3.dec.del.decode_fgu1_d;
9148
9149 // LSU logic
9150 load_b <= load_m;
9151 load_m <= (load0_e | load1_e);
9152
9153 load0_e <= (`SPC3.dec.dec_decode0_d & `SPC3.dec.del.lsu0_d &
9154 `SPC3.dec.dcd0.dcd_load_d);
9155
9156 load1_e <= (`SPC3.dec.dec_decode1_d & `SPC3.dec.del.lsu1_d &
9157 `SPC3.dec.dcd1.dcd_load_d);
9158
9159 lsu_tid_b[2:0] <= lsu_tid_m[2:0];
9160 lsu_tid_m[2:0] <= lsu_tid_e[2:0];
9161
9162 lsu_complete_m[7:0] <= `SPC3.lsu_complete[7:0];
9163 lsu_complete_b[7:0] <= lsu_complete_m[7:0];
9164
9165 lsu_data_w <= lsu_data_b;
9166
9167 // Divide destination logic ..
9168 sel_divide0_e <= (`SPC3.dec_decode0_d &
9169 ((`SPC3.pku.swl0.vld_d & `SPC3.pku.swl_divide_wait[0]) |
9170 (`SPC3.pku.swl1.vld_d & `SPC3.pku.swl_divide_wait[1]) |
9171 (`SPC3.pku.swl2.vld_d & `SPC3.pku.swl_divide_wait[2]) |
9172 (`SPC3.pku.swl3.vld_d & `SPC3.pku.swl_divide_wait[3])));
9173 sel_divide1_e <= (`SPC3.dec_decode1_d &
9174 ((`SPC3.pku.swl4.vld_d & `SPC3.pku.swl_divide_wait[4]) |
9175 (`SPC3.pku.swl5.vld_d & `SPC3.pku.swl_divide_wait[5]) |
9176 (`SPC3.pku.swl6.vld_d & `SPC3.pku.swl_divide_wait[6]) |
9177 (`SPC3.pku.swl7.vld_d & `SPC3.pku.swl_divide_wait[7])));
9178
9179
9180 dcd_fdest_e <= {`SPC3.dec.del.fdest1_d,`SPC3.dec.del.fdest0_d};
9181 dcd_idest_e <= {`SPC3.dec.del.idest1_d,`SPC3.dec.del.idest0_d};
9182
9183 if (sel_divide0_e) begin // {
9184 div_idest[{1'b0, `SPC3.dec.del.tid0_e[1:0]}] <= dcd_idest_e[0];
9185 div_fdest[{1'b0, `SPC3.dec.del.tid0_e[1:0]}] <= dcd_fdest_e[0];
9186 end // }
9187 if (sel_divide1_e) begin // {
9188 div_idest[{1'b1, `SPC3.dec.del.tid1_e[1:0]}] <= dcd_idest_e[1];
9189 div_fdest[{1'b1, `SPC3.dec.del.tid1_e[1:0]}] <= dcd_fdest_e[1];
9190 end // }
9191
9192
9193 // EX logic
9194 // Save EX tids for later use
9195 ex0_tid_m <= ex0_tid_e;
9196 ex1_tid_m <= ex1_tid_e;
9197 ex0_tid_b <= ex0_tid_m;
9198 ex1_tid_b <= ex1_tid_m;
9199 ex0_tid_w <= ex0_tid_b;
9200 ex1_tid_w <= ex1_tid_b;
9201
9202 // EX Flush conditions
9203 ex_flush_w <= {ex_flush_b | {{4{(`SPC3.dec.dec_flush_b[1] |
9204 `SPC3.tlu_flush_exu_b[1])}},
9205 {4{(`SPC3.dec.dec_flush_b[0] |
9206 `SPC3.tlu_flush_exu_b[0])}}}};
9207
9208 ex_flush_b <= {{4{`SPC3.dec.dec_flush_m[1]}},
9209 {4{`SPC3.dec.dec_flush_m[0]}}};
9210
9211
9212 // ex_valid_f4 valid will only fire on return
9213 return_f4 <= return_w & ~(`SPC3.tlu_flush_ifu & real_exception);
9214 ex_valid_w <= ex_valid_b;
9215
9216 // Cancel EX valid if it turns out to be asr/asi access for this tid
9217
9218 ex_valid_b <= ex_valid_m & ~ex_asr_access;
9219
9220
9221 ex_valid_m <= { (ex1_tid_e == 2'h3) && ex1_valid_e,
9222 (ex1_tid_e == 2'h2) && ex1_valid_e,
9223 (ex1_tid_e == 2'h1) && ex1_valid_e,
9224 (ex1_tid_e == 2'h0) && ex1_valid_e,
9225 (ex0_tid_e == 2'h3) && ex0_valid_e,
9226 (ex0_tid_e == 2'h2) && ex0_valid_e,
9227 (ex0_tid_e == 2'h1) && ex0_valid_e,
9228 (ex0_tid_e == 2'h0) && ex0_valid_e};
9229
9230
9231 // TLU delays for done and retries
9232 tlu_ccr_cwp_0_valid_last <= `SPC3.tlu.tlu_ccr_cwp_0_valid;
9233 tlu_ccr_cwp_1_valid_last <= `SPC3.tlu.tlu_ccr_cwp_1_valid;
9234
9235
9236end // END posedge gclk
9237
9238// Return instruction is separated out of ex*_valid because CWP update is in
9239// W+1 for return new window is not available for IRF scan (nas_pipe) until
9240// W+2
9241assign return0 = `SPC3.exu0.rml.return_w &
9242 `SPC3.exu0.rml.inst_vld_w;
9243assign return1 = `SPC3.exu1.rml.return_w &
9244 `SPC3.exu1.rml.inst_vld_w;
9245assign return_w = {(ex1_tid_w == 2'h3) && return1,
9246 (ex1_tid_w == 2'h2) && return1,
9247 (ex1_tid_w == 2'h1) && return1,
9248 (ex1_tid_w == 2'h0) && return1,
9249 (ex0_tid_w == 2'h3) && return0,
9250 (ex0_tid_w == 2'h2) && return0,
9251 (ex0_tid_w == 2'h1) && return0,
9252 (ex0_tid_w == 2'h0) && return0};
9253
9254
9255// Cancel EX valid if it turns out that exception (tlu flush) taken for
9256// this tid
9257
9258// exu check bus
9259assign ex0_tid_e = `SPC3.exu0.ect_tid_lth_e[1:0];
9260assign ex0_valid_e = `SPC3.dec.dec_valid_e[0] & ~fgu0_e & ~load0_e &
9261 ~retry0_e & ~done0_e;
9262assign ex1_tid_e = `SPC3.exu1.ect_tid_lth_e[1:0];
9263assign ex1_valid_e = `SPC3.dec.dec_valid_e[1] & ~fgu1_e & ~load1_e &
9264 ~retry1_e & ~done1_e;
9265
9266assign ex_asr_valid = `SPC3.lsu.dcc.asi_store_m & `SPC3.lsu.dcc.asi_sync_m ;
9267
9268assign ex_asr_access ={(`SPC3.lsu.dcc.dcc_tid_m[2:0]==3'h7) & ex_asr_valid,
9269 (`SPC3.lsu.dcc.dcc_tid_m[2:0]==3'h6) & ex_asr_valid,
9270 (`SPC3.lsu.dcc.dcc_tid_m[2:0]==3'h5) & ex_asr_valid,
9271 (`SPC3.lsu.dcc.dcc_tid_m[2:0]==3'h4) & ex_asr_valid,
9272 (`SPC3.lsu.dcc.dcc_tid_m[2:0]==3'h3) & ex_asr_valid,
9273 (`SPC3.lsu.dcc.dcc_tid_m[2:0]==3'h2) & ex_asr_valid,
9274 (`SPC3.lsu.dcc.dcc_tid_m[2:0]==3'h1) & ex_asr_valid,
9275 (`SPC3.lsu.dcc.dcc_tid_m[2:0]==3'h0) & ex_asr_valid};
9276
9277
9278// EXU valid is ex_valid_w, except flushes, delayed return, traps, and stfsr
9279// real_exception added because tlu_flush_ifu activates for second redirect
9280// of retry if TPC and TNPC are not verified as sequential
9281assign real_exception =
9282 {{4 {`SPC3.tlu.fls1.dec_exc_w |
9283 `SPC3.tlu.fls1.exu_exc_w |
9284 `SPC3.tlu.fls1.lsu_exc_w |
9285 `SPC3.tlu.fls1.bsee_req_w}},
9286 {4 {`SPC3.tlu.fls0.dec_exc_w |
9287 `SPC3.tlu.fls0.exu_exc_w |
9288 `SPC3.tlu.fls0.lsu_exc_w |
9289 `SPC3.tlu.fls0.bsee_req_w}}};
9290
9291// Do not assert ex_valid for block store instructions
9292wire [7:0] block_store_first_at_w =
9293 {`SPC3.lsu.sbs7.bst_pend & `SPC3.lsu.sbs7.blk_inst_w,
9294 `SPC3.lsu.sbs6.bst_pend & `SPC3.lsu.sbs6.blk_inst_w,
9295 `SPC3.lsu.sbs5.bst_pend & `SPC3.lsu.sbs5.blk_inst_w,
9296 `SPC3.lsu.sbs4.bst_pend & `SPC3.lsu.sbs4.blk_inst_w,
9297 `SPC3.lsu.sbs3.bst_pend & `SPC3.lsu.sbs3.blk_inst_w,
9298 `SPC3.lsu.sbs2.bst_pend & `SPC3.lsu.sbs2.blk_inst_w,
9299 `SPC3.lsu.sbs1.bst_pend & `SPC3.lsu.sbs1.blk_inst_w,
9300 `SPC3.lsu.sbs0.bst_pend & `SPC3.lsu.sbs0.blk_inst_w};
9301
9302// But inject a valid for a block store that's done...
9303reg [7:0] block_store_w;
9304always @(posedge `BENCH_SPC3_GCLK) begin
9305 block_store_w[7:0] <= `SPC3.lsu.lsu_block_store_b[7:0];
9306 lsu_trap_flush_d <= `SPC3.lsu_trap_flush[7:0];
9307end
9308
9309wire [7:0] block_store_inject_at_w =
9310 ~`SPC3.lsu.lsu_block_store_b[7:0] &
9311 block_store_w[7:0] &
9312 {~`SPC3.lsu.sbs7.bst_kill,
9313 ~`SPC3.lsu.sbs6.bst_kill,
9314 ~`SPC3.lsu.sbs5.bst_kill,
9315 ~`SPC3.lsu.sbs4.bst_kill,
9316 ~`SPC3.lsu.sbs3.bst_kill,
9317 ~`SPC3.lsu.sbs2.bst_kill,
9318 ~`SPC3.lsu.sbs1.bst_kill,
9319 ~`SPC3.lsu.sbs0.bst_kill};
9320
9321assign ex_valid = (((ex_valid_w & ~ex_flush_w & ~return_w & ~block_store_first_at_w & ~exception_w &
9322 ~({{4{`SPC3.tlu.fls1.exu_exc_b & `SPC3.tlu.fls1.beat_two_b}},
9323 {4{`SPC3.tlu.fls0.exu_exc_b & `SPC3.tlu.fls0.beat_two_b}}}) &
9324 ~{(`SPC3.fgu.fac.tid_fx3[2:0]==3'h7) & `SPC3.fgu.fpc.fsr_store_fx3,
9325 (`SPC3.fgu.fac.tid_fx3[2:0]==3'h6) & `SPC3.fgu.fpc.fsr_store_fx3,
9326 (`SPC3.fgu.fac.tid_fx3[2:0]==3'h5) & `SPC3.fgu.fpc.fsr_store_fx3,
9327 (`SPC3.fgu.fac.tid_fx3[2:0]==3'h4) & `SPC3.fgu.fpc.fsr_store_fx3,
9328 (`SPC3.fgu.fac.tid_fx3[2:0]==3'h3) & `SPC3.fgu.fpc.fsr_store_fx3,
9329 (`SPC3.fgu.fac.tid_fx3[2:0]==3'h2) & `SPC3.fgu.fpc.fsr_store_fx3,
9330 (`SPC3.fgu.fac.tid_fx3[2:0]==3'h1) & `SPC3.fgu.fpc.fsr_store_fx3,
9331 (`SPC3.fgu.fac.tid_fx3[2:0]==3'h0) & `SPC3.fgu.fpc.fsr_store_fx3}) |
9332 block_store_inject_at_w) &
9333 ~(`SPC3.tlu_flush_ifu & real_exception)) | return_f4;
9334
9335assign exception_w = {{4 {`SPC3.tlu.fls1.exc_for_w}} |
9336 `SPC3.tlu.fls1.bsee_req[3:0] |
9337 `SPC3.tlu.fls1.pdist_ecc_w[3:0],
9338 {4 {`SPC3.tlu.fls0.exc_for_w}} |
9339 `SPC3.tlu.fls0.bsee_req[3:0] |
9340 `SPC3.tlu.fls0.pdist_ecc_w[3:0]};
9341
9342// imul check bus - includes imul, save, restore instructions
9343assign imul_valid = {(`SPC3.exu1.ect_tid_lth_w[1:0]== 2'h3) & fgu_valid_fb1,
9344 (`SPC3.exu1.ect_tid_lth_w[1:0]== 2'h2) & fgu_valid_fb1,
9345 (`SPC3.exu1.ect_tid_lth_w[1:0]== 2'h1) & fgu_valid_fb1,
9346 (`SPC3.exu1.ect_tid_lth_w[1:0]== 2'h0) & fgu_valid_fb1,
9347 (`SPC3.exu0.ect_tid_lth_w[1:0]== 2'h3) & fgu_valid_fb0,
9348 (`SPC3.exu0.ect_tid_lth_w[1:0]== 2'h2) & fgu_valid_fb0,
9349 (`SPC3.exu0.ect_tid_lth_w[1:0]== 2'h1) & fgu_valid_fb0,
9350 (`SPC3.exu0.ect_tid_lth_w[1:0]== 2'h0) & fgu_valid_fb0};
9351
9352// qualify this signal with fgu_err. If fgu_err is encountered, deassert
9353//fg_cond_fb, so we don't send a step to Riesling.
9354
9355// FGU conditions
9356wire fg_cond_fb_pre_err = `SPC3.fgu.fpc.fpc_w1_ul_vld_fb | fcc_valid_fb |
9357 (fmov_valid_fb & ~fg_flush_fb) |
9358 (`SPC3.fgu.fac.fsr_w1_vld_fb[1]); // covers ST(X)FSR, which clears FSR.ftt
9359
9360assign fg_cond_fb = fg_cond_fb_pre_err & ~fgu_err_fb;
9361
9362// Idiv/Fdiv signals
9363
9364assign fgu_idiv_valid = fg_div_valid & div_idest;
9365
9366
9367assign fgu_fdiv_valid = fg_fdiv_valid_fw & div_fdest;
9368
9369
9370// Lsu signals needed to check lsu results
9371
9372assign lsu_valid = lsu_check | lsu_data_w;
9373
9374assign fg_div_valid = `SPC3.fgu_divide_completion & ~div_special_cancel_f4;
9375
9376// State machine asserts lsu_check for LD hit/miss
9377always @(posedge `BENCH_SPC3_GCLK) begin
9378 for (i=0; i<=7;i=i+1) begin // {
9379 lsu_check[i] <= 1'b0;
9380 case (lsu_state[i])
9381 1'b0: // IDLE state
9382 begin
9383 // LD hit
9384 if (lsu_ld_valid & lsu_tid_dec_b[i] & load_b) begin
9385 lsu_check[i] <= 1'b1;
9386 lsu_state[i] <= 1'b0; // IDLE state
9387 end
9388 // LD miss - normal case
9389 else if (lsu_ld_valid & lsu_tid_dec_b[i] & lsu_complete_b[i])
9390 begin
9391 lsu_check[i] <= 1'b1;
9392 lsu_state[i] <= 1'b0; // IDLE state
9393 end
9394 // LD miss - LDD or Block LD or SWAP
9395 else if (lsu_ld_valid & lsu_tid_dec_b[i]) begin
9396 lsu_state[i] <= 1'b1; // VALID state
9397 end
9398// Added a new term to handle STB uncorrectable errors on atomic or asi stores that are synced
9399//Send a complete if an atomic is squashed.
9400//lsu_trap_flush is asserted a cycle after the block_store_kill is asserted
9401 else if (`SPC3.lsu.dcc.sync_st[i] & `SPC3.lsu_block_store_kill[i] & ~lsu_trap_flush_d[i])
9402 begin
9403 lsu_check[i] <= 1'b1;
9404 lsu_state[i] <= 1'b0; // IDLE state
9405 end
9406 else begin
9407 lsu_state[i] <= lsu_state[i];
9408 end
9409
9410 end
9411 1'b1: // VALID state
9412 begin
9413 if ((lsu_complete_b[i])) begin
9414 lsu_check[i] <= 1'b1;
9415 lsu_state[i] <= 1'b0; // IDLE state
9416 end
9417 else begin
9418 lsu_state[i] <= lsu_state[i];
9419 end
9420 end
9421 endcase
9422 end // }
9423end
9424
9425
9426assign lsu_tid = `SPC3.lsu.dcc.ld_tid_b[2:0];
9427//Don't assert LSU_complete in case of dtlb or irf errors
9428
9429assign lsu_valid_b = (`SPC3.lsu.dcc.pref_inst_b &
9430 ~(dec_flush_lb | `SPC3.lsu.dcc.pipe_flush_b |
9431 `SPC3.lsu_dtdp_err_b | `SPC3.lsu_dttp_err_b |
9432 `SPC3.lsu_dtmh_err_b | `SPC3.lsu.dcc.exu_error_b));
9433
9434assign lsu_data_b[7:0] = { (lsu_tid == 3'h7) & lsu_valid_b,
9435 (lsu_tid == 3'h6) & lsu_valid_b,
9436 (lsu_tid == 3'h5) & lsu_valid_b,
9437 (lsu_tid == 3'h4) & lsu_valid_b,
9438 (lsu_tid == 3'h3) & lsu_valid_b,
9439 (lsu_tid == 3'h2) & lsu_valid_b,
9440 (lsu_tid == 3'h1) & lsu_valid_b,
9441 (lsu_tid == 3'h0) & lsu_valid_b};
9442
9443assign lsu_tid_dec_b[0] = `SPC3.lsu.dcc.ld_tid_b[2:0] == 3'd0;
9444assign lsu_tid_dec_b[1] = `SPC3.lsu.dcc.ld_tid_b[2:0] == 3'd1;
9445assign lsu_tid_dec_b[2] = `SPC3.lsu.dcc.ld_tid_b[2:0] == 3'd2;
9446assign lsu_tid_dec_b[3] = `SPC3.lsu.dcc.ld_tid_b[2:0] == 3'd3;
9447assign lsu_tid_dec_b[4] = `SPC3.lsu.dcc.ld_tid_b[2:0] == 3'd4;
9448assign lsu_tid_dec_b[5] = `SPC3.lsu.dcc.ld_tid_b[2:0] == 3'd5;
9449assign lsu_tid_dec_b[6] = `SPC3.lsu.dcc.ld_tid_b[2:0] == 3'd6;
9450assign lsu_tid_dec_b[7] = `SPC3.lsu.dcc.ld_tid_b[2:0] == 3'd7;
9451
9452assign lsu_ld_valid = (`SPC3.lsu.dcc.exu_ld_vld_b |`SPC3.lsu.dcc.fgu_fld_vld_b) &
9453 ~(`SPC3.lsu.dcc.flush_all_b & `SPC3.lsu.dcc.ld_inst_vld_b);
9454assign dec_flush_lb = `SPC3.dec.dec_flush_lb | `SPC3.tlu_flush_lsu_b;
9455
9456
9457// LSU interface to CCX stub
9458
9459assign exu_lsu_valid = `SPC3.dec.del.lsu_valid_e;
9460assign exu_lsu_addr[47:0] = `SPC3.exu_lsu_address_e[47:0];
9461assign exu_lsu_tid[2:0] = lsu_tid_e[2:0];
9462assign exu_lsu_regid[4:0] = `SPC3.dec.dec_lsu_rd_e[4:0];
9463assign exu_lsu_data[63:0] = `SPC3.exu_lsu_store_data_e[63:0];
9464assign exu_lsu_instr[31:0] = ({32{`SPC3.dec.dec_lsu_sel0_e}} &
9465 inst0_e[31:0]) |
9466 ({32{~`SPC3.dec.dec_lsu_sel0_e}} &
9467 inst1_e[31:0]);
9468assign ld_inst_d = `SPC3.dec.dec_ld_inst_d;
9469
9470///////////////////////////////////////////////////////////////////////////////
9471// Debugging Instruction Opcodes Pipeline
9472///////////////////////////////////////////////////////////////////////////////
9473
9474
9475 reg [31:0] op_0_w;
9476 reg [31:0] op_1_w;
9477 reg [31:0] op_2_w;
9478 reg [31:0] op_3_w;
9479 reg [31:0] op_4_w;
9480 reg [31:0] op_5_w;
9481 reg [31:0] op_6_w;
9482 reg [31:0] op_7_w;
9483
9484 reg [31:0] op0_b;
9485 reg [31:0] op0_m;
9486 reg [31:0] op0_e;
9487 reg [31:0] op0_d;
9488
9489 reg [31:0] op1_b;
9490 reg [31:0] op1_m;
9491 reg [31:0] op1_e;
9492 reg [31:0] op1_d;
9493
9494 reg [255:0] inst0_string_w;
9495 reg [255:0] inst0_string_b;
9496 reg [255:0] inst0_string_m;
9497 reg [255:0] inst0_string_e;
9498 reg [255:0] inst0_string_d;
9499
9500 reg [255:0] inst1_string_w;
9501 reg [255:0] inst1_string_b;
9502 reg [255:0] inst1_string_m;
9503 reg [255:0] inst1_string_e;
9504 reg [255:0] inst1_string_d;
9505
9506 reg [255:0] inst0_string_p;
9507 reg [255:0] inst1_string_p;
9508 reg [255:0] inst2_string_p;
9509 reg [255:0] inst3_string_p;
9510 reg [255:0] inst4_string_p;
9511 reg [255:0] inst5_string_p;
9512 reg [255:0] inst6_string_p;
9513 reg [255:0] inst7_string_p;
9514
9515initial begin
9516 op_0_w = 32'b0;
9517 op_1_w = 32'b0;
9518 op_2_w = 32'b0;
9519 op_3_w = 32'b0;
9520 op_4_w = 32'b0;
9521 op_5_w = 32'b0;
9522 op_6_w = 32'b0;
9523 op_7_w = 32'b0;
9524end
9525
9526always @(posedge `BENCH_SPC3_GCLK) begin // {
9527 op_0_w <= ({32 { select_pc_b[0]}} & op0_b[31:0]) |
9528 ({32 {~select_pc_b[0]}} & op_0_w[31:0]) ;
9529 op_1_w <= ({32 { select_pc_b[1]}} & op0_b[31:0]) |
9530 ({32 {~select_pc_b[1]}} & op_1_w[31:0]) ;
9531 op_2_w <= ({32 { select_pc_b[2]}} & op0_b[31:0]) |
9532 ({32 {~select_pc_b[2]}} & op_2_w[31:0]) ;
9533 op_3_w <= ({32 { select_pc_b[3]}} & op0_b[31:0]) |
9534 ({32 {~select_pc_b[3]}} & op_3_w[31:0]) ;
9535 op_4_w <= ({32 { select_pc_b[4]}} & op1_b[31:0]) |
9536 ({32 {~select_pc_b[4]}} & op_4_w[31:0]) ;
9537 op_5_w <= ({32 { select_pc_b[5]}} & op1_b[31:0]) |
9538 ({32 {~select_pc_b[5]}} & op_5_w[31:0]) ;
9539 op_6_w <= ({32 { select_pc_b[6]}} & op1_b[31:0]) |
9540 ({32 {~select_pc_b[6]}} & op_6_w[31:0]) ;
9541 op_7_w <= ({32 { select_pc_b[7]}} & op1_b[31:0]) |
9542 ({32 {~select_pc_b[7]}} & op_7_w[31:0]) ;
9543
9544 op0_b <= op0_m;
9545 op0_m <= op0_e;
9546 op0_e <= op0_d;
9547 op0_d <= `SPC3.dec.ded0.decode_mux[31:0];
9548
9549 op1_b <= op1_m;
9550 op1_m <= op1_e;
9551 op1_e <= op1_d;
9552 op1_d <= `SPC3.dec.ded1.decode_mux[31:0];
9553
9554 inst0_string_w<=inst0_string_b;
9555 inst0_string_b<=inst0_string_m;
9556 inst0_string_m<=inst0_string_e;
9557 inst0_string_e<=inst0_string_d;
9558 inst0_string_d<=xlate(`SPC3.dec.ded0.decode_mux[31:0]);
9559
9560 inst1_string_w<=inst1_string_b;
9561 inst1_string_b<=inst1_string_m;
9562 inst1_string_m<=inst1_string_e;
9563 inst1_string_e<=inst1_string_d;
9564 inst1_string_d<=xlate(`SPC3.dec.ded1.decode_mux[31:0]);
9565
9566// instructions for each thread at pick
9567 inst0_string_p<=xlate(`SPC3.ifu_ibu.ibf0.buf0_in[31:0]);
9568 inst1_string_p<=xlate(`SPC3.ifu_ibu.ibf1.buf0_in[31:0]);
9569 inst2_string_p<=xlate(`SPC3.ifu_ibu.ibf2.buf0_in[31:0]);
9570 inst3_string_p<=xlate(`SPC3.ifu_ibu.ibf3.buf0_in[31:0]);
9571 inst4_string_p<=xlate(`SPC3.ifu_ibu.ibf4.buf0_in[31:0]);
9572 inst5_string_p<=xlate(`SPC3.ifu_ibu.ibf5.buf0_in[31:0]);
9573 inst6_string_p<=xlate(`SPC3.ifu_ibu.ibf6.buf0_in[31:0]);
9574 inst7_string_p<=xlate(`SPC3.ifu_ibu.ibf7.buf0_in[31:0]);
9575
9576end //}
9577
9578///////////////////////////////////////////////////////////////////////////////
9579// Functions
9580///////////////////////////////////////////////////////////////////////////////
9581function [2:0] onehot2tid;
9582 input [7:0] onehot;
9583
9584 begin
9585
9586 if (onehot[7:0]==8'b00000001) onehot2tid[2:0] = 3'b000;
9587 else if (onehot[7:0]==8'b00000010) onehot2tid[2:0] = 3'b001;
9588 else if (onehot[7:0]==8'b00000100) onehot2tid[2:0] = 3'b010;
9589 else if (onehot[7:0]==8'b00001000) onehot2tid[2:0] = 3'b011;
9590 else if (onehot[7:0]==8'b00010000) onehot2tid[2:0] = 3'b100;
9591 else if (onehot[7:0]==8'b00100000) onehot2tid[2:0] = 3'b101;
9592 else if (onehot[7:0]==8'b01000000) onehot2tid[2:0] = 3'b110;
9593 else if (onehot[7:0]==8'b10000000) onehot2tid[2:0] = 3'b111;
9594
9595 end
9596endfunction
9597
9598function [7:0] tid2onehot;
9599 input [2:0] tid;
9600
9601 begin
9602
9603 if (tid[2:0]==3'b000) tid2onehot[7:0] = 8'b00000001;
9604 else if (tid[2:0]==3'b001) tid2onehot[7:0] = 8'b00000010;
9605 else if (tid[2:0]==3'b010) tid2onehot[7:0] = 8'b00000100;
9606 else if (tid[2:0]==3'b011) tid2onehot[7:0] = 8'b00001000;
9607 else if (tid[2:0]==3'b100) tid2onehot[7:0] = 8'b00010000;
9608 else if (tid[2:0]==3'b101) tid2onehot[7:0] = 8'b00100000;
9609 else if (tid[2:0]==3'b110) tid2onehot[7:0] = 8'b01000000;
9610 else if (tid[2:0]==3'b111) tid2onehot[7:0] = 8'b10000000;
9611
9612 end
9613endfunction
9614
9615//---------------------
9616
9617function [255:0] xlate;
9618 input [31:0] inst;
9619
9620 begin
9621 casex(inst[31:0])
962232'b10xxxxx110100xxxxx001000011xxxxx : xlate[255:0]="FADDq";
962332'b10xxxxx110100xxxxx001000111xxxxx : xlate[255:0]="FSUBq";
962432'b10000xx110101xxxxx001010011xxxxx : xlate[255:0]="FCMPq";
962532'b10000xx110101xxxxx001010111xxxxx : xlate[255:0]="FCMPEq";
962632'b10xxxxx110100xxxxx011001101xxxxx : xlate[255:0]="FsTOq";
962732'b10xxxxx110100xxxxx011001110xxxxx : xlate[255:0]="FdTOq";
962832'b10xxxxx110100xxxxx010001100xxxxx : xlate[255:0]="FxTOq";
962932'b10xxxxx110100xxxxx011001100xxxxx : xlate[255:0]="FiTOq";
963032'b10xxxxx110100xxxxx000000011xxxxx : xlate[255:0]="FMOVq";
963132'b10xxxxx110100xxxxx000000111xxxxx : xlate[255:0]="FNEGq";
963232'b10xxxxx110100xxxxx000001011xxxxx : xlate[255:0]="FABSq";
963332'b10xxxxx110100xxxxx001001011xxxxx : xlate[255:0]="FMULq";
963432'b10xxxxx110100xxxxx001101110xxxxx : xlate[255:0]="FdMULq";
963532'b10xxxxx110100xxxxx001001111xxxxx : xlate[255:0]="FDIVq";
963632'b10xxxxx110100xxxxx000101011xxxxx : xlate[255:0]="FSQRTq";
963732'b10xxxxx1101010xxxx0xx100111xxxxx : xlate[255:0]="FMOVrQa";
963832'b10xxxxx1101010xxxx0x1x00111xxxxx : xlate[255:0]="FMOVrQb";
963932'b10xxxxx110100xxxxx011010011xxxxx : xlate[255:0]="FqTOi";
964032'b10xxxxx110100xxxxx010000011xxxxx : xlate[255:0]="FqTOx";
964132'b10xxxxx110100xxxxx011000111xxxxx : xlate[255:0]="FqTOs";
964232'b10xxxxx110100xxxxx011001011xxxxx : xlate[255:0]="FqTOd";
964332'b11xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQF";
964432'b11xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFi";
964532'b11xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQFA";
964632'b11xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFAi";
964732'b11xxxxx100110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFi";
964832'b11xxxxx100110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQF";
964932'b11xxxxx110110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQFA";
965032'b11xxxxx110110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFAi";
965132'b10xxxxx1101010xxxxxxx000011xxxxx : xlate[255:0]="FMOVQcc";
965232'b10xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADD";
965332'b10xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDcc";
965432'b10xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDC";
965532'b10xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDCcc";
965632'b10xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDi";
965732'b10xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDcci";
965832'b10xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCi";
965932'b10xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCcci";
966032'b00x0xx1011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr1";
966132'b00x0x1x011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr2";
966232'b00xx000110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfccA";
966332'b00xx1xx110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc1";
966432'b00xxx1x110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc2";
966532'b00xxxx1110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc3";
966632'b00xx000101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfccA";
966732'b00xx1xx101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc1";
966832'b00xxx1x101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc2";
966932'b00xxxx1101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc3";
967032'b00xx000010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BiccA";
967132'b00xx1xx010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc1";
967232'b00xxx1x010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc2";
967332'b00xxxx1010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc3";
967432'b00xx000001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPccA";
967532'b00xx1xx001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc1";
967632'b00xxx1x001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc2";
967732'b00xxxx1001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc3";
967832'b01xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="CALL";
967932'b11xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASA";
968032'b11xxxxx111110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASXA";
968132'b11xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASAi";
968232'b11xxxxx111110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASXAi";
968332'b10xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIV";
968432'b10xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIV";
968532'b10xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVcc";
968632'b10xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVcc";
968732'b10xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVi";
968832'b10xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVi";
968932'b10xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVcci";
969032'b10xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVcci";
969132'b1000000111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="DONE";
969232'b1000001111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RETRY";
969332'b10xxxxx110100xxxxx001000001xxxxx : xlate[255:0]="FADDs";
969432'b10xxxxx110100xxxxx001000010xxxxx : xlate[255:0]="FADDd";
969532'b10xxxxx110100xxxxx001000101xxxxx : xlate[255:0]="FSUBs";
969632'b10xxxxx110100xxxxx001000110xxxxx : xlate[255:0]="FSUBd";
969732'b10000xx110101xxxxx001010001xxxxx : xlate[255:0]="FCMPs";
969832'b10000xx110101xxxxx001010010xxxxx : xlate[255:0]="FCMPd";
969932'b10000xx110101xxxxx001010101xxxxx : xlate[255:0]="FCMPEs";
970032'b10000xx110101xxxxx001010110xxxxx : xlate[255:0]="FCMPEd";
970132'b10xxxxx110100xxxxx010000001xxxxx : xlate[255:0]="FsTOx";
970232'b10xxxxx110100xxxxx010000010xxxxx : xlate[255:0]="FdTOx";
970332'b10xxxxx110100xxxxx011010001xxxxx : xlate[255:0]="FsTOi";
970432'b10xxxxx110100xxxxx011010010xxxxx : xlate[255:0]="FdTOi";
970532'b10xxxxx110100xxxxx011001001xxxxx : xlate[255:0]="FsTOd";
970632'b10xxxxx110100xxxxx011000110xxxxx : xlate[255:0]="FdTOs";
970732'b10xxxxx110100xxxxx010000100xxxxx : xlate[255:0]="FxTOs";
970832'b10xxxxx110100xxxxx010001000xxxxx : xlate[255:0]="FxTOd";
970932'b10xxxxx110100xxxxx011000100xxxxx : xlate[255:0]="FiTOs";
971032'b10xxxxx110100xxxxx011001000xxxxx : xlate[255:0]="FiTOd";
971132'b10xxxxx110100xxxxx000000001xxxxx : xlate[255:0]="FMOVs";
971232'b10xxxxx110100xxxxx000000010xxxxx : xlate[255:0]="FMOVd";
971332'b10xxxxx110100xxxxx000000101xxxxx : xlate[255:0]="FNEGs";
971432'b10xxxxx110100xxxxx000000110xxxxx : xlate[255:0]="FNEGd";
971532'b10xxxxx110100xxxxx000001001xxxxx : xlate[255:0]="FABSs";
971632'b10xxxxx110100xxxxx000001010xxxxx : xlate[255:0]="FABSd";
971732'b10xxxxx110100xxxxx001001001xxxxx : xlate[255:0]="FMULs";
971832'b10xxxxx110100xxxxx001001010xxxxx : xlate[255:0]="FMULd";
971932'b10xxxxx110100xxxxx001101001xxxxx : xlate[255:0]="FsMULd";
972032'b10xxxxx110100xxxxx001001101xxxxx : xlate[255:0]="FDIVs";
972132'b10xxxxx110100xxxxx001001110xxxxx : xlate[255:0]="FDIVd";
972232'b10xxxxx110100xxxxx000101001xxxxx : xlate[255:0]="FSQRTs";
972332'b10xxxxx110100xxxxx000101010xxxxx : xlate[255:0]="FSQRTd";
972432'b10xxxxx111011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSH";
972532'b10xxxxx111011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="FLUSHi";
972632'b10xxxxx101011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSHw";
972732'b10xxxxx111000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="JMPL";
972832'b10xxxxx111000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="JMPLi";
972932'b11xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDF";
973032'b11xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDF";
973132'b1100000100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFSR";
973232'b1100001100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXFSR";
973332'b11xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFi";
973432'b11xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFi";
973532'b1100000100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFSRi";
973632'b1100001100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXFSRi";
973732'b11xxxxx110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFA";
973832'b11xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDFA";
973932'b11xxxxx110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFAi";
974032'b11xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFAi";
974132'b11xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSB";
974232'b11xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSH";
974332'b11xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSW";
974432'b11xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUB";
974532'b11xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUH";
974632'b11xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUW";
974732'b11xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDX";
974832'b11xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDD";
974932'b11xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBi";
975032'b11xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHi";
975132'b11xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWi";
975232'b11xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBi";
975332'b11xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHi";
975432'b11xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWi";
975532'b11xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXi";
975632'b11xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDi";
975732'b11xxxxx011001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSBA";
975832'b11xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSHA";
975932'b11xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSWA";
976032'b11xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUBA";
976132'b11xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUHA";
976232'b11xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUWA";
976332'b11xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXA";
976432'b11xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDA";
976532'b11xxxxx011001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBAi";
976632'b11xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHAi";
976732'b11xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWAi";
976832'b11xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBAi";
976932'b11xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHAi";
977032'b11xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWAi";
977132'b11xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXAi";
977232'b11xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDAi";
977332'b11xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUB";
977432'b11xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBi";
977532'b11xxxxx011101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUBA";
977632'b11xxxxx011101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBAi";
977732'b10xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="AND";
977832'b10xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDcc";
977932'b10xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDN";
978032'b10xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDNcc";
978132'b10xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="OR";
978232'b10xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORcc";
978332'b10xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORN";
978432'b10xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORNcc";
978532'b10xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XOR";
978632'b10xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XORcc";
978732'b10xxxxx000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNOR";
978832'b10xxxxx010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNORcc";
978932'b10xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDi";
979032'b10xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDcci";
979132'b10xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNi";
979232'b10xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNcci";
979332'b10xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORi";
979432'b10xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORcci";
979532'b10xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNi";
979632'b10xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNcci";
979732'b10xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORi";
979832'b10xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORcci";
979932'b10xxxxx000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORi";
980032'b10xxxxx010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORcci";
980132'b1000000101000011111xxxxxxxxxxxxx : xlate[255:0]="MEMBAR";
980232'b1000000101000011110xxxxxxxxxxxxx : xlate[255:0]="STBAR";
980332'b10xxxxx101000000000xxxxxxxxxxxxx : xlate[255:0]="RDY";
980432'b10xxxxx101000000100xxxxxxxxxxxxx : xlate[255:0]="RDCCR";
980532'b10xxxxx101000000110xxxxxxxxxxxxx : xlate[255:0]="RDASI";
980632'b10xxxxx101000001000xxxxxxxxxxxxx : xlate[255:0]="RDTICK";
980732'b10xxxxx101000001010xxxxxxxxxxxxx : xlate[255:0]="RDPC";
980832'b10xxxxx101000001100xxxxxxxxxxxxx : xlate[255:0]="RDFPRS";
980932'b10xxxxx101000100110xxxxxxxxxxxxx : xlate[255:0]="RDGSR";
981032'b10xxxxx101000100000xxxxxxxxxxxxx : xlate[255:0]="RDPCR";
981132'b10xxxxx101000100010xxxxxxxxxxxxx : xlate[255:0]="RDPIC";
981232'b10xxxxx1101010xxxx0xx000001xxxxx : xlate[255:0]="FMOVSfcc";
981332'b10xxxxx1101010xxxx1xx000001xxxxx : xlate[255:0]="FMOVSxcc";
981432'b10xxxxx1101010xxxx0xx000010xxxxx : xlate[255:0]="FMOVDfcc";
981532'b10xxxxx1101010xxxx1xx000010xxxxx : xlate[255:0]="FMOVDxcc";
981632'b10xxxxx110101xxxxx0xx100101xxxxx : xlate[255:0]="FMOVrS1";
981732'b10xxxxx110101xxxxx0x1x00101xxxxx : xlate[255:0]="FMOVrS2";
981832'b10xxxxx110101xxxxx0xx100110xxxxx : xlate[255:0]="FMOVrD1";
981932'b10xxxxx110101xxxxx0x1x00110xxxxx : xlate[255:0]="FMOVrD2";
982032'b10xxxxx1011001xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVxcc";
982132'b10xxxxx1011001xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVxcci";
982232'b10xxxxx1011000xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVfcc";
982332'b10xxxxx1011000xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVfcci";
982432'b10xxxxx101111xxxxx0xx1xxxxxxxxxx : xlate[255:0]="MOVR1";
982532'b10xxxxx101111xxxxx0x1xxxxxxxxxxx : xlate[255:0]="MOVR2";
982632'b10xxxxx101111xxxxx1xx1xxxxxxxxxx : xlate[255:0]="MOVRi1";
982732'b10xxxxx101111xxxxx1x1xxxxxxxxxxx : xlate[255:0]="MOVRi2";
982832'b10xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULX";
982932'b10xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVX";
983032'b10xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVX";
983132'b10xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULXi";
983232'b10xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVXi";
983332'b10xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVXi";
983432'b10xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMUL";
983532'b10xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMUL";
983632'b10xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMULcc";
983732'b10xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMULcc";
983832'b10xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULi";
983932'b10xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULi";
984032'b10xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULcci";
984132'b10xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULcci";
984232'b10xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULScc";
984332'b10xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULScci";
984432'b10xxxxx101110000000xxxxxxxxxxxxx : xlate[255:0]="POPC";
984532'b10xxxxx101110000001xxxxxxxxxxxxx : xlate[255:0]="POPCi";
984632'b11xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCH";
984732'b11xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHi";
984832'b11xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCHA";
984932'b11xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHAi";
985032'b10xxxxx101010xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDPR";
985132'b10xxxxx101001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDHPR";
985232'b10xxxxx111001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RETURN";
985332'b10xxxxx111001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RETURNi";
985432'b10xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SAVE";
985532'b10xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SAVEi";
985632'b10xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RESTORE";
985732'b10xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RESTOREi";
985832'b1000000110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="SAVED";
985932'b1000001110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RESTORED";
986032'b00xxxxx100xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="SETHI";
986132'b10xxxxx100101xxxxx00xxxxxxxxxxxx : xlate[255:0]="SLL";
986232'b10xxxxx100110xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRL";
986332'b10xxxxx100111xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRA";
986432'b10xxxxx100101xxxxx01xxxxxxxxxxxx : xlate[255:0]="SLLX";
986532'b10xxxxx100110xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRLX";
986632'b10xxxxx100111xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRAX";
986732'b10xxxxx100101xxxxx10xxxxxxxxxxxx : xlate[255:0]="SLLi";
986832'b10xxxxx100110xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRLi";
986932'b10xxxxx100111xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRAi";
987032'b10xxxxx100101xxxxx11xxxxxxxxxxxx : xlate[255:0]="SLLXi";
987132'b10xxxxx100110xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRLXi";
987232'b10xxxxx100111xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRAXi";
987332'b11xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STF";
987432'b11xxxxx100111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDF";
987532'b1100000100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFSR";
987632'b1100001100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXFSR";
987732'b11xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFi";
987832'b11xxxxx100111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFi";
987932'b1100000100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFSRi";
988032'b1100001100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXFSRi";
988132'b11xxxxx110100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFA";
988232'b11xxxxx110111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDFA";
988332'b11xxxxx110100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFAi";
988432'b11xxxxx110111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFAi";
988532'b11xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STB";
988632'b11xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STH";
988732'b11xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STW";
988832'b11xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STX";
988932'b11xxxx0000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STD";
989032'b11xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBi";
989132'b11xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHi";
989232'b11xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWi";
989332'b11xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXi";
989432'b11xxxx0000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDi";
989532'b11xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STBA";
989632'b11xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STHA";
989732'b11xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STWA";
989832'b11xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXA";
989932'b11xxxx0010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDA";
990032'b11xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBAi";
990132'b11xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHAi";
990232'b11xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWAi";
990332'b11xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXAi";
990432'b11xxxx0010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDAi";
990532'b10xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUB";
990632'b10xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBcc";
990732'b10xxxxx001100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBC";
990832'b10xxxxx011100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBCcc";
990932'b10xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBi";
991032'b10xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBcci";
991132'b10xxxxx001100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCi";
991232'b10xxxxx011100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCcci";
991332'b11xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAP";
991432'b11xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPi";
991532'b11xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAPA";
991632'b11xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPAi";
991732'b10xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDcc";
991832'b10xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDccTV";
991932'b10xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDcci";
992032'b10xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDccTVi";
992132'b10xxxxx100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBcc";
992232'b10xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBccTV";
992332'b10xxxxx100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBcci";
992432'b10xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBccTVi";
992532'b10xxxxx111010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TCC";
992632'b10xxxxx111010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TCCi";
992732'b10xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPR";
992832'b10xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPRi";
992932'b10xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRHPR";
993032'b10xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRHPRi";
993132'b1000000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRY";
993232'b1000010110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRCCR";
993332'b1000011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRASI";
993432'b1000110110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRFPRS";
993532'b1010011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRGSR";
993632'b1010000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPCR";
993732'b1010001110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPIC";
993832'b1000000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRYi";
993932'b1000010110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRCCRi";
994032'b1000011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRASIi";
994132'b1000110110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRFPRSi";
994232'b1010011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRGSRi";
994332'b1010000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPCRi";
994432'b1010001110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPICi";
994532'b1001111110000000001xxxxxxxxxxxxx : xlate[255:0]="SIR";
994632'b10xxxxx110110xxxxx001010000xxxxx : xlate[255:0]="FPADD16";
994732'b10xxxxx110110xxxxx001010001xxxxx : xlate[255:0]="FPADD16S";
994832'b10xxxxx110110xxxxx001010010xxxxx : xlate[255:0]="FPADD32";
994932'b10xxxxx110110xxxxx001010011xxxxx : xlate[255:0]="FPADD32S";
995032'b10xxxxx110110xxxxx001010100xxxxx : xlate[255:0]="FPSUB16";
995132'b10xxxxx110110xxxxx001010101xxxxx : xlate[255:0]="FPSUB16S";
995232'b10xxxxx110110xxxxx001010110xxxxx : xlate[255:0]="FPSUB32";
995332'b10xxxxx110110xxxxx001010111xxxxx : xlate[255:0]="FPSUB32S";
995432'b10xxxxx110110xxxxx000111011xxxxx : xlate[255:0]="FPACK16";
995532'b10xxxxx110110xxxxx000111010xxxxx : xlate[255:0]="FPACK32";
995632'b10xxxxx110110xxxxx000111101xxxxx : xlate[255:0]="FPACKFIX";
995732'b10xxxxx110110xxxxx001001101xxxxx : xlate[255:0]="FEXPAND";
995832'b10xxxxx110110xxxxx001001011xxxxx : xlate[255:0]="FPMERGE";
995932'b10xxxxx110110xxxxx000110001xxxxx : xlate[255:0]="FMUL8x16";
996032'b10xxxxx110110xxxxx000110011xxxxx : xlate[255:0]="FMUL8x16AU";
996132'b10xxxxx110110xxxxx000110101xxxxx : xlate[255:0]="FMUL8x16AL";
996232'b10xxxxx110110xxxxx000110110xxxxx : xlate[255:0]="FMUL8SUx16";
996332'b10xxxxx110110xxxxx000110111xxxxx : xlate[255:0]="FMUL8ULx16";
996432'b10xxxxx110110xxxxx000111000xxxxx : xlate[255:0]="FMULD8SUx16";
996532'b10xxxxx110110xxxxx000111001xxxxx : xlate[255:0]="FMULD8ULx16";
996632'b10xxxxx110110xxxxx000011000xxxxx : xlate[255:0]="ALIGNADDRESS";
996732'b10xxxxx110110xxxxx000011010xxxxx : xlate[255:0]="ALIGNADDRESS_LITTLE";
996832'b10xxxxx110110xxxxx000011001xxxxx : xlate[255:0]="BMASK";
996932'b10xxxxx110110xxxxx001001000xxxxx : xlate[255:0]="FALIGNDATA";
997032'b10xxxxx110110xxxxx001001100xxxxx : xlate[255:0]="BSHUFFLE";
997132'b10xxxxx110110xxxxx001100000xxxxx : xlate[255:0]="FZERO";
997232'b10xxxxx110110xxxxx001100001xxxxx : xlate[255:0]="FZEROS";
997332'b10xxxxx110110xxxxx001111110xxxxx : xlate[255:0]="FONE";
997432'b10xxxxx110110xxxxx001111111xxxxx : xlate[255:0]="FONES";
997532'b10xxxxx110110xxxxx001110100xxxxx : xlate[255:0]="FSRC1";
997632'b10xxxxx110110xxxxx001110101xxxxx : xlate[255:0]="FSRC1S";
997732'b10xxxxx110110xxxxx001111000xxxxx : xlate[255:0]="FSRC2";
997832'b10xxxxx110110xxxxx001111001xxxxx : xlate[255:0]="FSRC2S";
997932'b10xxxxx110110xxxxx001101010xxxxx : xlate[255:0]="FNOT1";
998032'b10xxxxx110110xxxxx001101011xxxxx : xlate[255:0]="FNOT1S";
998132'b10xxxxx110110xxxxx001100110xxxxx : xlate[255:0]="FNOT2";
998232'b10xxxxx110110xxxxx001100111xxxxx : xlate[255:0]="FNOT2S";
998332'b10xxxxx110110xxxxx001111100xxxxx : xlate[255:0]="FOR";
998432'b10xxxxx110110xxxxx001111101xxxxx : xlate[255:0]="FORS";
998532'b10xxxxx110110xxxxx001100010xxxxx : xlate[255:0]="FNOR";
998632'b10xxxxx110110xxxxx001100011xxxxx : xlate[255:0]="FNORS";
998732'b10xxxxx110110xxxxx001110000xxxxx : xlate[255:0]="FAND";
998832'b10xxxxx110110xxxxx001110001xxxxx : xlate[255:0]="FANDS";
998932'b10xxxxx110110xxxxx001101110xxxxx : xlate[255:0]="FNAND";
999032'b10xxxxx110110xxxxx001101111xxxxx : xlate[255:0]="FNANDS";
999132'b10xxxxx110110xxxxx001101100xxxxx : xlate[255:0]="FXOR";
999232'b10xxxxx110110xxxxx001101101xxxxx : xlate[255:0]="FXORS";
999332'b10xxxxx110110xxxxx001110010xxxxx : xlate[255:0]="FXNOR";
999432'b10xxxxx110110xxxxx001110011xxxxx : xlate[255:0]="FXNORS";
999532'b10xxxxx110110xxxxx001111010xxxxx : xlate[255:0]="FORNOT1";
999632'b10xxxxx110110xxxxx001111011xxxxx : xlate[255:0]="FORNOT1S";
999732'b10xxxxx110110xxxxx001110110xxxxx : xlate[255:0]="FORNOT2";
999832'b10xxxxx110110xxxxx001110111xxxxx : xlate[255:0]="FORNOT2S";
999932'b10xxxxx110110xxxxx001101000xxxxx : xlate[255:0]="FANDNOT1";
1000032'b10xxxxx110110xxxxx001101001xxxxx : xlate[255:0]="FANDNOT1S";
1000132'b10xxxxx110110xxxxx001100100xxxxx : xlate[255:0]="FANDNOT2";
1000232'b10xxxxx110110xxxxx001100101xxxxx : xlate[255:0]="FANDNOT2S";
1000332'b10xxxxx110110xxxxx000101000xxxxx : xlate[255:0]="FCMPGT16";
1000432'b10xxxxx110110xxxxx000101100xxxxx : xlate[255:0]="FCMPGT32";
1000532'b10xxxxx110110xxxxx000100000xxxxx : xlate[255:0]="FCMPLE16";
1000632'b10xxxxx110110xxxxx000100100xxxxx : xlate[255:0]="FCMPLE32";
1000732'b10xxxxx110110xxxxx000100010xxxxx : xlate[255:0]="FCMPNE16";
1000832'b10xxxxx110110xxxxx000100110xxxxx : xlate[255:0]="FCMPNE32";
1000932'b10xxxxx110110xxxxx000101010xxxxx : xlate[255:0]="FCMPEQ16";
1001032'b10xxxxx110110xxxxx000101110xxxxx : xlate[255:0]="FCMPEQ32";
1001132'b10xxxxx110110xxxxx000111110xxxxx : xlate[255:0]="PDIST";
1001232'b10xxxxx110110xxxxx000000000xxxxx : xlate[255:0]="EDGE8";
1001332'b10xxxxx110110xxxxx000000001xxxxx : xlate[255:0]="EDGE8N";
1001432'b10xxxxx110110xxxxx000000010xxxxx : xlate[255:0]="EDGE8L";
1001532'b10xxxxx110110xxxxx000000011xxxxx : xlate[255:0]="EDGE8LN";
1001632'b10xxxxx110110xxxxx000000100xxxxx : xlate[255:0]="EDGE16";
1001732'b10xxxxx110110xxxxx000000101xxxxx : xlate[255:0]="EDGE16N";
1001832'b10xxxxx110110xxxxx000000110xxxxx : xlate[255:0]="EDGE16L";
1001932'b10xxxxx110110xxxxx000000111xxxxx : xlate[255:0]="EDGE16LN";
1002032'b10xxxxx110110xxxxx000001000xxxxx : xlate[255:0]="EDGE32";
1002132'b10xxxxx110110xxxxx000001001xxxxx : xlate[255:0]="EDGE32N";
1002232'b10xxxxx110110xxxxx000001010xxxxx : xlate[255:0]="EDGE32L";
1002332'b10xxxxx110110xxxxx000001011xxxxx : xlate[255:0]="EDGE32LN";
1002432'b10xxxxx110110xxxxx000010000xxxxx : xlate[255:0]="ARRAY8";
1002532'b10xxxxx110110xxxxx000010010xxxxx : xlate[255:0]="ARRAY16";
1002632'b10xxxxx110110xxxxx000010100xxxxx : xlate[255:0]="ARRAY32";
1002732'b10xxxxx110110xxxxx010000001xxxxx : xlate[255:0]="SIAM";
10028 default : xlate[255:0]="unknown";
10029 endcase
10030 end
10031endfunction // xlate
10032
10033
10034`endif
10035
10036endmodule
10037
10038`endif
10039
10040
10041`ifdef CORE_4
10042
10043module nas_probes4;
10044
10045
10046`ifdef GATESIM
10047
10048
10049`else
10050 reg [7:0] ex_valid_m;
10051 reg [7:0] ex_valid_b;
10052 reg [7:0] ex_valid_w;
10053 reg [7:0] return_f4;
10054 reg [2:0] ex0_tid_m;
10055 reg [2:0] ex1_tid_m;
10056 reg [2:0] ex0_tid_b;
10057 reg [2:0] ex1_tid_b;
10058 reg [2:0] ex0_tid_w;
10059 reg [2:0] ex1_tid_w;
10060 reg fgu_valid_fb0;
10061 reg fgu_valid_fb1;
10062
10063 reg [31:0] inst0_e;
10064 reg [31:0] inst1_e;
10065
10066 reg [7:0] fg_valid;
10067
10068 reg fcc_valid_f4;
10069 reg fcc_valid_f5;
10070 reg fcc_valid_fb;
10071
10072 reg fgu0_e;
10073 reg fgu1_e;
10074 reg lsu0_e;
10075 reg lsu1_e;
10076
10077 reg [1:0] dcd_idest_e;
10078 reg [1:0] dcd_fdest_e;
10079
10080 wire [7:0] ex_valid;
10081 wire [7:0] exception_w;
10082
10083 wire [7:0] imul_valid;
10084
10085 wire fg_cond_fb;
10086
10087 wire exu_lsu_valid;
10088 wire [47:0] exu_lsu_addr;
10089 wire [31:0] exu_lsu_instr;
10090 wire [2:0] exu_lsu_tid;
10091 wire [4:0] exu_lsu_regid;
10092 wire [63:0] exu_lsu_data;
10093
10094 wire [2:0] ex0_tid_e;
10095 wire [2:0] ex1_tid_e;
10096 wire ex0_valid_e;
10097 wire ex1_valid_e;
10098 wire [7:0] ex_asr_access;
10099 wire ex_asr_valid;
10100
10101 wire [7:0] lsu_valid;
10102 wire [2:0] lsu_tid;
10103 wire [7:0] lsu_tid_dec_b;
10104 wire lsu_ld_valid;
10105 reg [7:0] lsu_data_w;
10106 wire [7:0] lsu_data_b;
10107
10108 wire ld_inst_d;
10109
10110 reg [7:0] div_idest;
10111 reg [7:0] div_fdest;
10112
10113 reg load0_e;
10114 reg load1_e;
10115
10116 reg load_m;
10117 reg load_b;
10118
10119 reg [2:0] lsu_tid_m;
10120 reg [7:0] lsu_complete_m;
10121 reg [7:0] lsu_complete_b;
10122 reg [7:0] lsu_trap_flush_d; //reqd. for store buffer ue testing
10123
10124 reg [7:0] ex_flush_w;
10125 reg [7:0] ex_flush_b;
10126
10127 reg sel_divide0_e;
10128 reg sel_divide1_e;
10129
10130 wire dec_flush_lb;
10131
10132 wire [7:0] fgu_idiv_valid;
10133
10134 wire [7:0] fgu_fdiv_valid;
10135
10136 wire [7:0] fg_div_valid;
10137
10138 wire lsu_valid_b;
10139
10140 wire [7:0] return_w;
10141 wire return0;
10142 wire return1;
10143 wire [7:0] real_exception;
10144
10145 reg [2:0] lsu_tid_b;
10146 reg fmov_valid_fb;
10147 reg fmov_valid_f5;
10148 reg fmov_valid_f4;
10149 reg fmov_valid_f3;
10150 reg fmov_valid_f2;
10151 reg fmov_valid_m;
10152 reg fmov_valid_e;
10153
10154 reg fg_flush_fb;
10155 reg fg_flush_f5;
10156 reg fg_flush_f4;
10157 reg fg_flush_f3;
10158 reg fg_flush_f2;
10159
10160 reg siam0_d;
10161 reg siam1_d;
10162
10163 reg done0_d;
10164 reg done1_d;
10165 reg retry0_d;
10166 reg retry1_d;
10167 reg done0_e;
10168 reg done1_e;
10169 reg retry0_e;
10170 reg retry1_e;
10171 reg tlu_ccr_cwp_0_valid_last;
10172 reg tlu_ccr_cwp_1_valid_last;
10173 reg [7:0] fg_fdiv_valid_fw;
10174 reg [7:0] asi_in_progress_b;
10175 reg [7:0] asi_in_progress_w;
10176 reg [7:0] asi_in_progress_fx4;
10177 reg [7:0] tlu_valid;
10178 reg [7:0] sync_reset_w;
10179
10180 reg [7:0] div_special_cancel_f4;
10181
10182 reg asi_store_b;
10183 reg asi_store_w;
10184 reg [2:0] dcc_tid_b;
10185 reg [2:0] dcc_tid_w;
10186 reg [7:0] asi_valid_w;
10187 reg [7:0] asi_valid_fx4;
10188 reg [7:0] asi_valid_fx5;
10189
10190 reg [7:0] lsu_state;
10191 reg [7:0] lsu_check;
10192 reg [2:0] lsu_tid_e;
10193
10194 reg [47:0] pc_0_e;
10195 reg [47:0] pc_1_e;
10196 reg [47:0] pc_0_m;
10197 reg [47:0] pc_1_m;
10198 reg [47:0] pc_0_b;
10199 reg [47:0] pc_1_b;
10200 reg [47:0] pc_0_w;
10201 reg [47:0] pc_1_w;
10202 reg [47:0] pc_2_w;
10203 reg [47:0] pc_3_w;
10204 reg [47:0] pc_4_w;
10205 reg [47:0] pc_5_w;
10206 reg [47:0] pc_6_w;
10207 reg [47:0] pc_7_w;
10208
10209 reg fgu_err_fx3;
10210 reg fgu_err_fx4;
10211 reg fgu_err_fx5;
10212 reg fgu_err_fb;
10213
10214 reg clkstop_d1;
10215 reg clkstop_d2;
10216 reg clkstop_d3;
10217 reg clkstop_d4;
10218 reg clkstop_d5;
10219
10220integer i;
10221integer start_dmiss0;
10222integer start_dmiss1;
10223integer start_dmiss2;
10224integer start_dmiss3;
10225integer start_dmiss4;
10226integer start_dmiss5;
10227integer start_dmiss6;
10228integer start_dmiss7;
10229integer number_dmiss;
10230integer start_imiss0;
10231integer start_imiss1;
10232integer start_imiss2;
10233integer start_imiss3;
10234integer start_imiss4;
10235integer start_imiss5;
10236integer start_imiss6;
10237integer start_imiss7;
10238integer active_imiss0;
10239integer active_imiss1;
10240integer active_imiss2;
10241integer active_imiss3;
10242integer active_imiss4;
10243integer active_imiss5;
10244integer active_imiss6;
10245integer active_imiss7;
10246integer first_imiss0;
10247integer first_imiss1;
10248integer first_imiss2;
10249integer first_imiss3;
10250integer first_imiss4;
10251integer first_imiss5;
10252integer first_imiss6;
10253integer first_imiss7;
10254integer number_imiss;
10255integer clock;
10256integer sum_dmiss_latency;
10257integer sum_imiss_latency;
10258reg spec_dmiss;
10259integer dmiss_cnt;
10260integer imiss_cnt;
10261reg pcx_req;
10262integer l15dmiss_cnt;
10263integer l15imiss_cnt;
10264
10265
10266initial begin // {
10267 pcx_req=0;
10268 l15imiss_cnt=0;
10269 l15dmiss_cnt=0;
10270 imiss_cnt=0;
10271 dmiss_cnt=0;
10272 clock=0;
10273 start_dmiss0=0;
10274 start_dmiss1=0;
10275 start_dmiss2=0;
10276 start_dmiss3=0;
10277 start_dmiss4=0;
10278 start_dmiss5=0;
10279 start_dmiss6=0;
10280 start_dmiss7=0;
10281 number_dmiss=0;
10282 start_imiss0=0;
10283 start_imiss1=0;
10284 start_imiss2=0;
10285 start_imiss3=0;
10286 start_imiss4=0;
10287 start_imiss5=0;
10288 start_imiss6=0;
10289 start_imiss7=0;
10290 active_imiss0=0;
10291 active_imiss1=0;
10292 active_imiss2=0;
10293 active_imiss3=0;
10294 active_imiss4=0;
10295 active_imiss5=0;
10296 active_imiss6=0;
10297 active_imiss7=0;
10298 first_imiss0=0;
10299 first_imiss1=0;
10300 first_imiss2=0;
10301 first_imiss3=0;
10302 first_imiss4=0;
10303 first_imiss5=0;
10304 first_imiss6=0;
10305 first_imiss7=0;
10306 number_imiss=0;
10307 sum_dmiss_latency=0;
10308 sum_imiss_latency=0;
10309 asi_in_progress_b <= 8'h0;
10310 asi_in_progress_w <= 8'h0;
10311 asi_in_progress_fx4 <= 8'h0;
10312 tlu_valid <= 8'h0;
10313 div_idest <= 8'h0;
10314 div_fdest <= 8'h0;
10315 lsu_state <= 8'h0;
10316 clkstop_d1 <=0;
10317 clkstop_d2 <=0;
10318 clkstop_d3 <=0;
10319 clkstop_d4 <=0;
10320 clkstop_d5 <=0;
10321
10322end //}
10323
10324wire [7:0] asi_store_flush_w = {`SPC4.lsu.sbs7.flush_st_w,
10325 `SPC4.lsu.sbs6.flush_st_w,
10326 `SPC4.lsu.sbs5.flush_st_w,
10327 `SPC4.lsu.sbs4.flush_st_w,
10328 `SPC4.lsu.sbs3.flush_st_w,
10329 `SPC4.lsu.sbs2.flush_st_w,
10330 `SPC4.lsu.sbs1.flush_st_w,
10331 `SPC4.lsu.sbs0.flush_st_w};
10332
10333wire [7:0] store_sync = {`SPC4.lsu.sbs7.trap_sync,
10334 `SPC4.lsu.sbs6.trap_sync,
10335 `SPC4.lsu.sbs5.trap_sync,
10336 `SPC4.lsu.sbs4.trap_sync,
10337 `SPC4.lsu.sbs3.trap_sync,
10338 `SPC4.lsu.sbs2.trap_sync,
10339 `SPC4.lsu.sbs1.trap_sync,
10340 `SPC4.lsu.sbs0.trap_sync};
10341wire [7:0] sync_reset = {`SPC4.lsu.sbs7.sync_state_rst,
10342 `SPC4.lsu.sbs6.sync_state_rst,
10343 `SPC4.lsu.sbs5.sync_state_rst,
10344 `SPC4.lsu.sbs4.sync_state_rst,
10345 `SPC4.lsu.sbs3.sync_state_rst,
10346 `SPC4.lsu.sbs2.sync_state_rst,
10347 `SPC4.lsu.sbs1.sync_state_rst,
10348 `SPC4.lsu.sbs0.sync_state_rst};
10349
10350//--------------------
10351// Used in nas_pipe for TSB Config Regs Capture/Compare
10352// ADD_TSB_CFG
10353
10354// NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
10355`ifndef EMUL
10356wire [63:0] ctxt_z_tsb_cfg0_reg [7:0]; // 1 per thread
10357wire [63:0] ctxt_z_tsb_cfg1_reg [7:0];
10358wire [63:0] ctxt_z_tsb_cfg2_reg [7:0];
10359wire [63:0] ctxt_z_tsb_cfg3_reg [7:0];
10360wire [63:0] ctxt_nz_tsb_cfg0_reg [7:0];
10361wire [63:0] ctxt_nz_tsb_cfg1_reg [7:0];
10362wire [63:0] ctxt_nz_tsb_cfg2_reg [7:0];
10363wire [63:0] ctxt_nz_tsb_cfg3_reg [7:0];
10364
10365// There are 32 entries in each MMU MRA but not all are needed.
10366// Indexing:
10367// Bits 4:3 of the address are the lower two bits of the TID
10368// Bits 2:0 of the address select the register as below
10369// mmu.mra0.array.mem for T0-T3
10370// mmu.mra1.array.mem for T4-T7
10371// (this is documented in mmu_asi_ctl.sv)
10372// z TSB cfg 0,1 address 0
10373// z TSB cfg 2,3 address 1
10374// nz TSB cfg 0,1 address 2
10375// nz TSB cfg 2,3 address 3
10376// Real range, physical offset pair 0 address 4
10377// Real range, physical offset pair 1 address 5
10378// Real range, physical offset pair 2 address 6
10379// Real range, physical offset pair 3 address 7
10380
10381wire [83:0] mmu_mra0_a0 = `SPC4.mmu.mra0.array.mem[0];
10382wire [83:0] mmu_mra0_a8 = `SPC4.mmu.mra0.array.mem[8];
10383wire [83:0] mmu_mra0_a16 = `SPC4.mmu.mra0.array.mem[16];
10384wire [83:0] mmu_mra0_a24 = `SPC4.mmu.mra0.array.mem[24];
10385wire [83:0] mmu_mra0_a1 = `SPC4.mmu.mra0.array.mem[1];
10386wire [83:0] mmu_mra0_a9 = `SPC4.mmu.mra0.array.mem[9];
10387wire [83:0] mmu_mra0_a17 = `SPC4.mmu.mra0.array.mem[17];
10388wire [83:0] mmu_mra0_a25 = `SPC4.mmu.mra0.array.mem[25];
10389wire [83:0] mmu_mra0_a2 = `SPC4.mmu.mra0.array.mem[2];
10390wire [83:0] mmu_mra0_a10 = `SPC4.mmu.mra0.array.mem[10];
10391wire [83:0] mmu_mra0_a18 = `SPC4.mmu.mra0.array.mem[18];
10392wire [83:0] mmu_mra0_a26 = `SPC4.mmu.mra0.array.mem[26];
10393wire [83:0] mmu_mra0_a3 = `SPC4.mmu.mra0.array.mem[3];
10394wire [83:0] mmu_mra0_a11 = `SPC4.mmu.mra0.array.mem[11];
10395wire [83:0] mmu_mra0_a19 = `SPC4.mmu.mra0.array.mem[19];
10396wire [83:0] mmu_mra0_a27 = `SPC4.mmu.mra0.array.mem[27];
10397wire [83:0] mmu_mra1_a0 = `SPC4.mmu.mra1.array.mem[0];
10398wire [83:0] mmu_mra1_a8 = `SPC4.mmu.mra1.array.mem[8];
10399wire [83:0] mmu_mra1_a16 = `SPC4.mmu.mra1.array.mem[16];
10400wire [83:0] mmu_mra1_a24 = `SPC4.mmu.mra1.array.mem[24];
10401wire [83:0] mmu_mra1_a1 = `SPC4.mmu.mra1.array.mem[1];
10402wire [83:0] mmu_mra1_a9 = `SPC4.mmu.mra1.array.mem[9];
10403wire [83:0] mmu_mra1_a17 = `SPC4.mmu.mra1.array.mem[17];
10404wire [83:0] mmu_mra1_a25 = `SPC4.mmu.mra1.array.mem[25];
10405wire [83:0] mmu_mra1_a2 = `SPC4.mmu.mra1.array.mem[2];
10406wire [83:0] mmu_mra1_a10 = `SPC4.mmu.mra1.array.mem[10];
10407wire [83:0] mmu_mra1_a18 = `SPC4.mmu.mra1.array.mem[18];
10408wire [83:0] mmu_mra1_a26 = `SPC4.mmu.mra1.array.mem[26];
10409wire [83:0] mmu_mra1_a3 = `SPC4.mmu.mra1.array.mem[3];
10410wire [83:0] mmu_mra1_a11 = `SPC4.mmu.mra1.array.mem[11];
10411wire [83:0] mmu_mra1_a19 = `SPC4.mmu.mra1.array.mem[19];
10412wire [83:0] mmu_mra1_a27 = `SPC4.mmu.mra1.array.mem[27];
10413
10414
10415// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
10416// as well as the physical to architectural bit position relationships.
10417assign ctxt_z_tsb_cfg0_reg[0] = {`SPC4.mmu.asi.t0_e_z[0], // z_tsb_cfg0[63]
10418 mmu_mra0_a0[76:75], // z_tsb_cfg0[62:61]
10419 21'b0, // z_tsb_cfg0[60:40]
10420 mmu_mra0_a0[74:48], // z_tsb_cfg0[39:13]
10421 4'b0, // z_tsb_cfg0[12:9]
10422 mmu_mra0_a0[47:39] // z_tsb_cfg0[8:0]
10423 };
10424assign ctxt_z_tsb_cfg1_reg[0] = {`SPC4.mmu.asi.t0_e_z[1], // z_tsb_cfg0[63]
10425 mmu_mra0_a0[37:36], // z_tsb_cfg0[62:61]
10426 21'b0, // z_tsb_cfg0[60:40]
10427 mmu_mra0_a0[35:9], // z_tsb_cfg0[39:13]
10428 4'b0, // z_tsb_cfg0[12:9]
10429 mmu_mra0_a0[8:0] // z_tsb_cfg0[8:0]
10430 };
10431assign ctxt_z_tsb_cfg2_reg[0] = {`SPC4.mmu.asi.t0_e_z[2], // z_tsb_cfg0[63]
10432 mmu_mra0_a1[76:75], // z_tsb_cfg0[62:61]
10433 21'b0, // z_tsb_cfg0[60:40]
10434 mmu_mra0_a1[74:48], // z_tsb_cfg0[39:13]
10435 4'b0, // z_tsb_cfg0[12:9]
10436 mmu_mra0_a1[47:39] // z_tsb_cfg0[8:0]
10437 };
10438assign ctxt_z_tsb_cfg3_reg[0] = {`SPC4.mmu.asi.t0_e_z[3], // z_tsb_cfg0[63]
10439 mmu_mra0_a1[37:36], // z_tsb_cfg0[62:61]
10440 21'b0, // z_tsb_cfg0[60:40]
10441 mmu_mra0_a1[35:9], // z_tsb_cfg0[39:13]
10442 4'b0, // z_tsb_cfg0[12:9]
10443 mmu_mra0_a1[8:0] // z_tsb_cfg0[8:0]
10444 };
10445assign ctxt_nz_tsb_cfg0_reg[0] = {`SPC4.mmu.asi.t0_e_nz[0],// z_tsb_cfg0[63]
10446 mmu_mra0_a2[76:75], // z_tsb_cfg0[62:61]
10447 21'b0, // z_tsb_cfg0[60:40]
10448 mmu_mra0_a2[74:48], // z_tsb_cfg0[39:13]
10449 4'b0, // z_tsb_cfg0[12:9]
10450 mmu_mra0_a2[47:39] // z_tsb_cfg0[8:0]
10451 };
10452assign ctxt_nz_tsb_cfg1_reg[0] = {`SPC4.mmu.asi.t0_e_nz[1],// z_tsb_cfg0[63]
10453 mmu_mra0_a2[37:36], // z_tsb_cfg0[62:61]
10454 21'b0, // z_tsb_cfg0[60:40]
10455 mmu_mra0_a2[35:9], // z_tsb_cfg0[39:13]
10456 4'b0, // z_tsb_cfg0[12:9]
10457 mmu_mra0_a2[8:0] // z_tsb_cfg0[8:0]
10458 };
10459assign ctxt_nz_tsb_cfg2_reg[0] = {`SPC4.mmu.asi.t0_e_nz[2],// z_tsb_cfg0[63]
10460 mmu_mra0_a3[76:75], // z_tsb_cfg0[62:61]
10461 21'b0, // z_tsb_cfg0[60:40]
10462 mmu_mra0_a3[74:48], // z_tsb_cfg0[39:13]
10463 4'b0, // z_tsb_cfg0[12:9]
10464 mmu_mra0_a3[47:39] // z_tsb_cfg0[8:0]
10465 };
10466assign ctxt_nz_tsb_cfg3_reg[0] = {`SPC4.mmu.asi.t0_e_nz[3],// z_tsb_cfg0[63]
10467 mmu_mra0_a3[37:36], // z_tsb_cfg0[62:61]
10468 21'b0, // z_tsb_cfg0[60:40]
10469 mmu_mra0_a3[35:9], // z_tsb_cfg0[39:13]
10470 4'b0, // z_tsb_cfg0[12:9]
10471 mmu_mra0_a3[8:0] // z_tsb_cfg0[8:0]
10472 };
10473
10474// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
10475// as well as the physical to architectural bit position relationships.
10476assign ctxt_z_tsb_cfg0_reg[1] = {`SPC4.mmu.asi.t1_e_z[0], // z_tsb_cfg0[63]
10477 mmu_mra0_a8[76:75], // z_tsb_cfg0[62:61]
10478 21'b0, // z_tsb_cfg0[60:40]
10479 mmu_mra0_a8[74:48], // z_tsb_cfg0[39:13]
10480 4'b0, // z_tsb_cfg0[12:9]
10481 mmu_mra0_a8[47:39] // z_tsb_cfg0[8:0]
10482 };
10483assign ctxt_z_tsb_cfg1_reg[1] = {`SPC4.mmu.asi.t1_e_z[1], // z_tsb_cfg0[63]
10484 mmu_mra0_a8[37:36], // z_tsb_cfg0[62:61]
10485 21'b0, // z_tsb_cfg0[60:40]
10486 mmu_mra0_a8[35:9], // z_tsb_cfg0[39:13]
10487 4'b0, // z_tsb_cfg0[12:9]
10488 mmu_mra0_a8[8:0] // z_tsb_cfg0[8:0]
10489 };
10490assign ctxt_z_tsb_cfg2_reg[1] = {`SPC4.mmu.asi.t1_e_z[2], // z_tsb_cfg0[63]
10491 mmu_mra0_a9[76:75], // z_tsb_cfg0[62:61]
10492 21'b0, // z_tsb_cfg0[60:40]
10493 mmu_mra0_a9[74:48], // z_tsb_cfg0[39:13]
10494 4'b0, // z_tsb_cfg0[12:9]
10495 mmu_mra0_a9[47:39] // z_tsb_cfg0[8:0]
10496 };
10497assign ctxt_z_tsb_cfg3_reg[1] = {`SPC4.mmu.asi.t1_e_z[3], // z_tsb_cfg0[63]
10498 mmu_mra0_a9[37:36], // z_tsb_cfg0[62:61]
10499 21'b0, // z_tsb_cfg0[60:40]
10500 mmu_mra0_a9[35:9], // z_tsb_cfg0[39:13]
10501 4'b0, // z_tsb_cfg0[12:9]
10502 mmu_mra0_a9[8:0] // z_tsb_cfg0[8:0]
10503 };
10504assign ctxt_nz_tsb_cfg0_reg[1] = {`SPC4.mmu.asi.t1_e_nz[0],// z_tsb_cfg0[63]
10505 mmu_mra0_a10[76:75], // z_tsb_cfg0[62:61]
10506 21'b0, // z_tsb_cfg0[60:40]
10507 mmu_mra0_a10[74:48], // z_tsb_cfg0[39:13]
10508 4'b0, // z_tsb_cfg0[12:9]
10509 mmu_mra0_a10[47:39] // z_tsb_cfg0[8:0]
10510 };
10511assign ctxt_nz_tsb_cfg1_reg[1] = {`SPC4.mmu.asi.t1_e_nz[1],// z_tsb_cfg0[63]
10512 mmu_mra0_a10[37:36], // z_tsb_cfg0[62:61]
10513 21'b0, // z_tsb_cfg0[60:40]
10514 mmu_mra0_a10[35:9], // z_tsb_cfg0[39:13]
10515 4'b0, // z_tsb_cfg0[12:9]
10516 mmu_mra0_a10[8:0] // z_tsb_cfg0[8:0]
10517 };
10518assign ctxt_nz_tsb_cfg2_reg[1] = {`SPC4.mmu.asi.t1_e_nz[2],// z_tsb_cfg0[63]
10519 mmu_mra0_a11[76:75], // z_tsb_cfg0[62:61]
10520 21'b0, // z_tsb_cfg0[60:40]
10521 mmu_mra0_a11[74:48], // z_tsb_cfg0[39:13]
10522 4'b0, // z_tsb_cfg0[12:9]
10523 mmu_mra0_a11[47:39] // z_tsb_cfg0[8:0]
10524 };
10525assign ctxt_nz_tsb_cfg3_reg[1] = {`SPC4.mmu.asi.t1_e_nz[3],// z_tsb_cfg0[63]
10526 mmu_mra0_a11[37:36], // z_tsb_cfg0[62:61]
10527 21'b0, // z_tsb_cfg0[60:40]
10528 mmu_mra0_a11[35:9], // z_tsb_cfg0[39:13]
10529 4'b0, // z_tsb_cfg0[12:9]
10530 mmu_mra0_a11[8:0] // z_tsb_cfg0[8:0]
10531 };
10532
10533// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
10534// as well as the physical to architectural bit position relationships.
10535assign ctxt_z_tsb_cfg0_reg[2] = {`SPC4.mmu.asi.t2_e_z[0], // z_tsb_cfg0[63]
10536 mmu_mra0_a16[76:75], // z_tsb_cfg0[62:61]
10537 21'b0, // z_tsb_cfg0[60:40]
10538 mmu_mra0_a16[74:48], // z_tsb_cfg0[39:13]
10539 4'b0, // z_tsb_cfg0[12:9]
10540 mmu_mra0_a16[47:39] // z_tsb_cfg0[8:0]
10541 };
10542assign ctxt_z_tsb_cfg1_reg[2] = {`SPC4.mmu.asi.t2_e_z[1], // z_tsb_cfg0[63]
10543 mmu_mra0_a16[37:36], // z_tsb_cfg0[62:61]
10544 21'b0, // z_tsb_cfg0[60:40]
10545 mmu_mra0_a16[35:9], // z_tsb_cfg0[39:13]
10546 4'b0, // z_tsb_cfg0[12:9]
10547 mmu_mra0_a16[8:0] // z_tsb_cfg0[8:0]
10548 };
10549assign ctxt_z_tsb_cfg2_reg[2] = {`SPC4.mmu.asi.t2_e_z[2], // z_tsb_cfg0[63]
10550 mmu_mra0_a17[76:75], // z_tsb_cfg0[62:61]
10551 21'b0, // z_tsb_cfg0[60:40]
10552 mmu_mra0_a17[74:48], // z_tsb_cfg0[39:13]
10553 4'b0, // z_tsb_cfg0[12:9]
10554 mmu_mra0_a17[47:39] // z_tsb_cfg0[8:0]
10555 };
10556assign ctxt_z_tsb_cfg3_reg[2] = {`SPC4.mmu.asi.t2_e_z[3], // z_tsb_cfg0[63]
10557 mmu_mra0_a17[37:36], // z_tsb_cfg0[62:61]
10558 21'b0, // z_tsb_cfg0[60:40]
10559 mmu_mra0_a17[35:9], // z_tsb_cfg0[39:13]
10560 4'b0, // z_tsb_cfg0[12:9]
10561 mmu_mra0_a17[8:0] // z_tsb_cfg0[8:0]
10562 };
10563assign ctxt_nz_tsb_cfg0_reg[2] = {`SPC4.mmu.asi.t2_e_nz[0],// z_tsb_cfg0[63]
10564 mmu_mra0_a18[76:75], // z_tsb_cfg0[62:61]
10565 21'b0, // z_tsb_cfg0[60:40]
10566 mmu_mra0_a18[74:48], // z_tsb_cfg0[39:13]
10567 4'b0, // z_tsb_cfg0[12:9]
10568 mmu_mra0_a18[47:39] // z_tsb_cfg0[8:0]
10569 };
10570assign ctxt_nz_tsb_cfg1_reg[2] = {`SPC4.mmu.asi.t2_e_nz[1],// z_tsb_cfg0[63]
10571 mmu_mra0_a18[37:36], // z_tsb_cfg0[62:61]
10572 21'b0, // z_tsb_cfg0[60:40]
10573 mmu_mra0_a18[35:9], // z_tsb_cfg0[39:13]
10574 4'b0, // z_tsb_cfg0[12:9]
10575 mmu_mra0_a18[8:0] // z_tsb_cfg0[8:0]
10576 };
10577assign ctxt_nz_tsb_cfg2_reg[2] = {`SPC4.mmu.asi.t2_e_nz[2],// z_tsb_cfg0[63]
10578 mmu_mra0_a19[76:75], // z_tsb_cfg0[62:61]
10579 21'b0, // z_tsb_cfg0[60:40]
10580 mmu_mra0_a19[74:48], // z_tsb_cfg0[39:13]
10581 4'b0, // z_tsb_cfg0[12:9]
10582 mmu_mra0_a19[47:39] // z_tsb_cfg0[8:0]
10583 };
10584assign ctxt_nz_tsb_cfg3_reg[2] = {`SPC4.mmu.asi.t2_e_nz[3],// z_tsb_cfg0[63]
10585 mmu_mra0_a19[37:36], // z_tsb_cfg0[62:61]
10586 21'b0, // z_tsb_cfg0[60:40]
10587 mmu_mra0_a19[35:9], // z_tsb_cfg0[39:13]
10588 4'b0, // z_tsb_cfg0[12:9]
10589 mmu_mra0_a19[8:0] // z_tsb_cfg0[8:0]
10590 };
10591
10592// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
10593// as well as the physical to architectural bit position relationships.
10594assign ctxt_z_tsb_cfg0_reg[3] = {`SPC4.mmu.asi.t3_e_z[0], // z_tsb_cfg0[63]
10595 mmu_mra0_a24[76:75], // z_tsb_cfg0[62:61]
10596 21'b0, // z_tsb_cfg0[60:40]
10597 mmu_mra0_a24[74:48], // z_tsb_cfg0[39:13]
10598 4'b0, // z_tsb_cfg0[12:9]
10599 mmu_mra0_a24[47:39] // z_tsb_cfg0[8:0]
10600 };
10601assign ctxt_z_tsb_cfg1_reg[3] = {`SPC4.mmu.asi.t3_e_z[1], // z_tsb_cfg0[63]
10602 mmu_mra0_a24[37:36], // z_tsb_cfg0[62:61]
10603 21'b0, // z_tsb_cfg0[60:40]
10604 mmu_mra0_a24[35:9], // z_tsb_cfg0[39:13]
10605 4'b0, // z_tsb_cfg0[12:9]
10606 mmu_mra0_a24[8:0] // z_tsb_cfg0[8:0]
10607 };
10608assign ctxt_z_tsb_cfg2_reg[3] = {`SPC4.mmu.asi.t3_e_z[2], // z_tsb_cfg0[63]
10609 mmu_mra0_a25[76:75], // z_tsb_cfg0[62:61]
10610 21'b0, // z_tsb_cfg0[60:40]
10611 mmu_mra0_a25[74:48], // z_tsb_cfg0[39:13]
10612 4'b0, // z_tsb_cfg0[12:9]
10613 mmu_mra0_a25[47:39] // z_tsb_cfg0[8:0]
10614 };
10615assign ctxt_z_tsb_cfg3_reg[3] = {`SPC4.mmu.asi.t3_e_z[3], // z_tsb_cfg0[63]
10616 mmu_mra0_a25[37:36], // z_tsb_cfg0[62:61]
10617 21'b0, // z_tsb_cfg0[60:40]
10618 mmu_mra0_a25[35:9], // z_tsb_cfg0[39:13]
10619 4'b0, // z_tsb_cfg0[12:9]
10620 mmu_mra0_a25[8:0] // z_tsb_cfg0[8:0]
10621 };
10622assign ctxt_nz_tsb_cfg0_reg[3] = {`SPC4.mmu.asi.t3_e_nz[0],// z_tsb_cfg0[63]
10623 mmu_mra0_a26[76:75], // z_tsb_cfg0[62:61]
10624 21'b0, // z_tsb_cfg0[60:40]
10625 mmu_mra0_a26[74:48], // z_tsb_cfg0[39:13]
10626 4'b0, // z_tsb_cfg0[12:9]
10627 mmu_mra0_a26[47:39] // z_tsb_cfg0[8:0]
10628 };
10629assign ctxt_nz_tsb_cfg1_reg[3] = {`SPC4.mmu.asi.t3_e_nz[1],// z_tsb_cfg0[63]
10630 mmu_mra0_a26[37:36], // z_tsb_cfg0[62:61]
10631 21'b0, // z_tsb_cfg0[60:40]
10632 mmu_mra0_a26[35:9], // z_tsb_cfg0[39:13]
10633 4'b0, // z_tsb_cfg0[12:9]
10634 mmu_mra0_a26[8:0] // z_tsb_cfg0[8:0]
10635 };
10636assign ctxt_nz_tsb_cfg2_reg[3] = {`SPC4.mmu.asi.t3_e_nz[2],// z_tsb_cfg0[63]
10637 mmu_mra0_a27[76:75], // z_tsb_cfg0[62:61]
10638 21'b0, // z_tsb_cfg0[60:40]
10639 mmu_mra0_a27[74:48], // z_tsb_cfg0[39:13]
10640 4'b0, // z_tsb_cfg0[12:9]
10641 mmu_mra0_a27[47:39] // z_tsb_cfg0[8:0]
10642 };
10643assign ctxt_nz_tsb_cfg3_reg[3] = {`SPC4.mmu.asi.t3_e_nz[3],// z_tsb_cfg0[63]
10644 mmu_mra0_a27[37:36], // z_tsb_cfg0[62:61]
10645 21'b0, // z_tsb_cfg0[60:40]
10646 mmu_mra0_a27[35:9], // z_tsb_cfg0[39:13]
10647 4'b0, // z_tsb_cfg0[12:9]
10648 mmu_mra0_a27[8:0] // z_tsb_cfg0[8:0]
10649 };
10650
10651// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
10652// as well as the physical to architectural bit position relationships.
10653assign ctxt_z_tsb_cfg0_reg[4] = {`SPC4.mmu.asi.t4_e_z[0], // z_tsb_cfg0[63]
10654 mmu_mra1_a0[76:75], // z_tsb_cfg0[62:61]
10655 21'b0, // z_tsb_cfg0[60:40]
10656 mmu_mra1_a0[74:48], // z_tsb_cfg0[39:13]
10657 4'b0, // z_tsb_cfg0[12:9]
10658 mmu_mra1_a0[47:39] // z_tsb_cfg0[8:0]
10659 };
10660assign ctxt_z_tsb_cfg1_reg[4] = {`SPC4.mmu.asi.t4_e_z[1], // z_tsb_cfg0[63]
10661 mmu_mra1_a0[37:36], // z_tsb_cfg0[62:61]
10662 21'b0, // z_tsb_cfg0[60:40]
10663 mmu_mra1_a0[35:9], // z_tsb_cfg0[39:13]
10664 4'b0, // z_tsb_cfg0[12:9]
10665 mmu_mra1_a0[8:0] // z_tsb_cfg0[8:0]
10666 };
10667assign ctxt_z_tsb_cfg2_reg[4] = {`SPC4.mmu.asi.t4_e_z[2], // z_tsb_cfg0[63]
10668 mmu_mra1_a1[76:75], // z_tsb_cfg0[62:61]
10669 21'b0, // z_tsb_cfg0[60:40]
10670 mmu_mra1_a1[74:48], // z_tsb_cfg0[39:13]
10671 4'b0, // z_tsb_cfg0[12:9]
10672 mmu_mra1_a1[47:39] // z_tsb_cfg0[8:0]
10673 };
10674assign ctxt_z_tsb_cfg3_reg[4] = {`SPC4.mmu.asi.t4_e_z[3], // z_tsb_cfg0[63]
10675 mmu_mra1_a1[37:36], // z_tsb_cfg0[62:61]
10676 21'b0, // z_tsb_cfg0[60:40]
10677 mmu_mra1_a1[35:9], // z_tsb_cfg0[39:13]
10678 4'b0, // z_tsb_cfg0[12:9]
10679 mmu_mra1_a1[8:0] // z_tsb_cfg0[8:0]
10680 };
10681assign ctxt_nz_tsb_cfg0_reg[4] = {`SPC4.mmu.asi.t4_e_nz[0],// z_tsb_cfg0[63]
10682 mmu_mra1_a2[76:75], // z_tsb_cfg0[62:61]
10683 21'b0, // z_tsb_cfg0[60:40]
10684 mmu_mra1_a2[74:48], // z_tsb_cfg0[39:13]
10685 4'b0, // z_tsb_cfg0[12:9]
10686 mmu_mra1_a2[47:39] // z_tsb_cfg0[8:0]
10687 };
10688assign ctxt_nz_tsb_cfg1_reg[4] = {`SPC4.mmu.asi.t4_e_nz[1],// z_tsb_cfg0[63]
10689 mmu_mra1_a2[37:36], // z_tsb_cfg0[62:61]
10690 21'b0, // z_tsb_cfg0[60:40]
10691 mmu_mra1_a2[35:9], // z_tsb_cfg0[39:13]
10692 4'b0, // z_tsb_cfg0[12:9]
10693 mmu_mra1_a2[8:0] // z_tsb_cfg0[8:0]
10694 };
10695assign ctxt_nz_tsb_cfg2_reg[4] = {`SPC4.mmu.asi.t4_e_nz[2],// z_tsb_cfg0[63]
10696 mmu_mra1_a3[76:75], // z_tsb_cfg0[62:61]
10697 21'b0, // z_tsb_cfg0[60:40]
10698 mmu_mra1_a3[74:48], // z_tsb_cfg0[39:13]
10699 4'b0, // z_tsb_cfg0[12:9]
10700 mmu_mra1_a3[47:39] // z_tsb_cfg0[8:0]
10701 };
10702assign ctxt_nz_tsb_cfg3_reg[4] = {`SPC4.mmu.asi.t4_e_nz[3],// z_tsb_cfg0[63]
10703 mmu_mra1_a3[37:36], // z_tsb_cfg0[62:61]
10704 21'b0, // z_tsb_cfg0[60:40]
10705 mmu_mra1_a3[35:9], // z_tsb_cfg0[39:13]
10706 4'b0, // z_tsb_cfg0[12:9]
10707 mmu_mra1_a3[8:0] // z_tsb_cfg0[8:0]
10708 };
10709
10710// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
10711// as well as the physical to architectural bit position relationships.
10712assign ctxt_z_tsb_cfg0_reg[5] = {`SPC4.mmu.asi.t5_e_z[0], // z_tsb_cfg0[63]
10713 mmu_mra1_a8[76:75], // z_tsb_cfg0[62:61]
10714 21'b0, // z_tsb_cfg0[60:40]
10715 mmu_mra1_a8[74:48], // z_tsb_cfg0[39:13]
10716 4'b0, // z_tsb_cfg0[12:9]
10717 mmu_mra1_a8[47:39] // z_tsb_cfg0[8:0]
10718 };
10719assign ctxt_z_tsb_cfg1_reg[5] = {`SPC4.mmu.asi.t5_e_z[1], // z_tsb_cfg0[63]
10720 mmu_mra1_a8[37:36], // z_tsb_cfg0[62:61]
10721 21'b0, // z_tsb_cfg0[60:40]
10722 mmu_mra1_a8[35:9], // z_tsb_cfg0[39:13]
10723 4'b0, // z_tsb_cfg0[12:9]
10724 mmu_mra1_a8[8:0] // z_tsb_cfg0[8:0]
10725 };
10726assign ctxt_z_tsb_cfg2_reg[5] = {`SPC4.mmu.asi.t5_e_z[2], // z_tsb_cfg0[63]
10727 mmu_mra1_a9[76:75], // z_tsb_cfg0[62:61]
10728 21'b0, // z_tsb_cfg0[60:40]
10729 mmu_mra1_a9[74:48], // z_tsb_cfg0[39:13]
10730 4'b0, // z_tsb_cfg0[12:9]
10731 mmu_mra1_a9[47:39] // z_tsb_cfg0[8:0]
10732 };
10733assign ctxt_z_tsb_cfg3_reg[5] = {`SPC4.mmu.asi.t5_e_z[3], // z_tsb_cfg0[63]
10734 mmu_mra1_a9[37:36], // z_tsb_cfg0[62:61]
10735 21'b0, // z_tsb_cfg0[60:40]
10736 mmu_mra1_a9[35:9], // z_tsb_cfg0[39:13]
10737 4'b0, // z_tsb_cfg0[12:9]
10738 mmu_mra1_a9[8:0] // z_tsb_cfg0[8:0]
10739 };
10740assign ctxt_nz_tsb_cfg0_reg[5] = {`SPC4.mmu.asi.t5_e_nz[0],// z_tsb_cfg0[63]
10741 mmu_mra1_a10[76:75], // z_tsb_cfg0[62:61]
10742 21'b0, // z_tsb_cfg0[60:40]
10743 mmu_mra1_a10[74:48], // z_tsb_cfg0[39:13]
10744 4'b0, // z_tsb_cfg0[12:9]
10745 mmu_mra1_a10[47:39] // z_tsb_cfg0[8:0]
10746 };
10747assign ctxt_nz_tsb_cfg1_reg[5] = {`SPC4.mmu.asi.t5_e_nz[1],// z_tsb_cfg0[63]
10748 mmu_mra1_a10[37:36], // z_tsb_cfg0[62:61]
10749 21'b0, // z_tsb_cfg0[60:40]
10750 mmu_mra1_a10[35:9], // z_tsb_cfg0[39:13]
10751 4'b0, // z_tsb_cfg0[12:9]
10752 mmu_mra1_a10[8:0] // z_tsb_cfg0[8:0]
10753 };
10754assign ctxt_nz_tsb_cfg2_reg[5] = {`SPC4.mmu.asi.t5_e_nz[2],// z_tsb_cfg0[63]
10755 mmu_mra1_a11[76:75], // z_tsb_cfg0[62:61]
10756 21'b0, // z_tsb_cfg0[60:40]
10757 mmu_mra1_a11[74:48], // z_tsb_cfg0[39:13]
10758 4'b0, // z_tsb_cfg0[12:9]
10759 mmu_mra1_a11[47:39] // z_tsb_cfg0[8:0]
10760 };
10761assign ctxt_nz_tsb_cfg3_reg[5] = {`SPC4.mmu.asi.t5_e_nz[3],// z_tsb_cfg0[63]
10762 mmu_mra1_a11[37:36], // z_tsb_cfg0[62:61]
10763 21'b0, // z_tsb_cfg0[60:40]
10764 mmu_mra1_a11[35:9], // z_tsb_cfg0[39:13]
10765 4'b0, // z_tsb_cfg0[12:9]
10766 mmu_mra1_a11[8:0] // z_tsb_cfg0[8:0]
10767 };
10768
10769// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
10770// as well as the physical to architectural bit position relationships.
10771assign ctxt_z_tsb_cfg0_reg[6] = {`SPC4.mmu.asi.t6_e_z[0], // z_tsb_cfg0[63]
10772 mmu_mra1_a16[76:75], // z_tsb_cfg0[62:61]
10773 21'b0, // z_tsb_cfg0[60:40]
10774 mmu_mra1_a16[74:48], // z_tsb_cfg0[39:13]
10775 4'b0, // z_tsb_cfg0[12:9]
10776 mmu_mra1_a16[47:39] // z_tsb_cfg0[8:0]
10777 };
10778assign ctxt_z_tsb_cfg1_reg[6] = {`SPC4.mmu.asi.t6_e_z[1], // z_tsb_cfg0[63]
10779 mmu_mra1_a16[37:36], // z_tsb_cfg0[62:61]
10780 21'b0, // z_tsb_cfg0[60:40]
10781 mmu_mra1_a16[35:9], // z_tsb_cfg0[39:13]
10782 4'b0, // z_tsb_cfg0[12:9]
10783 mmu_mra1_a16[8:0] // z_tsb_cfg0[8:0]
10784 };
10785assign ctxt_z_tsb_cfg2_reg[6] = {`SPC4.mmu.asi.t6_e_z[2], // z_tsb_cfg0[63]
10786 mmu_mra1_a17[76:75], // z_tsb_cfg0[62:61]
10787 21'b0, // z_tsb_cfg0[60:40]
10788 mmu_mra1_a17[74:48], // z_tsb_cfg0[39:13]
10789 4'b0, // z_tsb_cfg0[12:9]
10790 mmu_mra1_a17[47:39] // z_tsb_cfg0[8:0]
10791 };
10792assign ctxt_z_tsb_cfg3_reg[6] = {`SPC4.mmu.asi.t6_e_z[3], // z_tsb_cfg0[63]
10793 mmu_mra1_a17[37:36], // z_tsb_cfg0[62:61]
10794 21'b0, // z_tsb_cfg0[60:40]
10795 mmu_mra1_a17[35:9], // z_tsb_cfg0[39:13]
10796 4'b0, // z_tsb_cfg0[12:9]
10797 mmu_mra1_a17[8:0] // z_tsb_cfg0[8:0]
10798 };
10799assign ctxt_nz_tsb_cfg0_reg[6] = {`SPC4.mmu.asi.t6_e_nz[0],// z_tsb_cfg0[63]
10800 mmu_mra1_a18[76:75], // z_tsb_cfg0[62:61]
10801 21'b0, // z_tsb_cfg0[60:40]
10802 mmu_mra1_a18[74:48], // z_tsb_cfg0[39:13]
10803 4'b0, // z_tsb_cfg0[12:9]
10804 mmu_mra1_a18[47:39] // z_tsb_cfg0[8:0]
10805 };
10806assign ctxt_nz_tsb_cfg1_reg[6] = {`SPC4.mmu.asi.t6_e_nz[1],// z_tsb_cfg0[63]
10807 mmu_mra1_a18[37:36], // z_tsb_cfg0[62:61]
10808 21'b0, // z_tsb_cfg0[60:40]
10809 mmu_mra1_a18[35:9], // z_tsb_cfg0[39:13]
10810 4'b0, // z_tsb_cfg0[12:9]
10811 mmu_mra1_a18[8:0] // z_tsb_cfg0[8:0]
10812 };
10813assign ctxt_nz_tsb_cfg2_reg[6] = {`SPC4.mmu.asi.t6_e_nz[2],// z_tsb_cfg0[63]
10814 mmu_mra1_a19[76:75], // z_tsb_cfg0[62:61]
10815 21'b0, // z_tsb_cfg0[60:40]
10816 mmu_mra1_a19[74:48], // z_tsb_cfg0[39:13]
10817 4'b0, // z_tsb_cfg0[12:9]
10818 mmu_mra1_a19[47:39] // z_tsb_cfg0[8:0]
10819 };
10820assign ctxt_nz_tsb_cfg3_reg[6] = {`SPC4.mmu.asi.t6_e_nz[3],// z_tsb_cfg0[63]
10821 mmu_mra1_a19[37:36], // z_tsb_cfg0[62:61]
10822 21'b0, // z_tsb_cfg0[60:40]
10823 mmu_mra1_a19[35:9], // z_tsb_cfg0[39:13]
10824 4'b0, // z_tsb_cfg0[12:9]
10825 mmu_mra1_a19[8:0] // z_tsb_cfg0[8:0]
10826 };
10827
10828// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
10829// as well as the physical to architectural bit position relationships.
10830assign ctxt_z_tsb_cfg0_reg[7] = {`SPC4.mmu.asi.t7_e_z[0], // z_tsb_cfg0[63]
10831 mmu_mra1_a24[76:75], // z_tsb_cfg0[62:61]
10832 21'b0, // z_tsb_cfg0[60:40]
10833 mmu_mra1_a24[74:48], // z_tsb_cfg0[39:13]
10834 4'b0, // z_tsb_cfg0[12:9]
10835 mmu_mra1_a24[47:39] // z_tsb_cfg0[8:0]
10836 };
10837assign ctxt_z_tsb_cfg1_reg[7] = {`SPC4.mmu.asi.t7_e_z[1], // z_tsb_cfg0[63]
10838 mmu_mra1_a24[37:36], // z_tsb_cfg0[62:61]
10839 21'b0, // z_tsb_cfg0[60:40]
10840 mmu_mra1_a24[35:9], // z_tsb_cfg0[39:13]
10841 4'b0, // z_tsb_cfg0[12:9]
10842 mmu_mra1_a24[8:0] // z_tsb_cfg0[8:0]
10843 };
10844assign ctxt_z_tsb_cfg2_reg[7] = {`SPC4.mmu.asi.t7_e_z[2], // z_tsb_cfg0[63]
10845 mmu_mra1_a25[76:75], // z_tsb_cfg0[62:61]
10846 21'b0, // z_tsb_cfg0[60:40]
10847 mmu_mra1_a25[74:48], // z_tsb_cfg0[39:13]
10848 4'b0, // z_tsb_cfg0[12:9]
10849 mmu_mra1_a25[47:39] // z_tsb_cfg0[8:0]
10850 };
10851assign ctxt_z_tsb_cfg3_reg[7] = {`SPC4.mmu.asi.t7_e_z[3], // z_tsb_cfg0[63]
10852 mmu_mra1_a25[37:36], // z_tsb_cfg0[62:61]
10853 21'b0, // z_tsb_cfg0[60:40]
10854 mmu_mra1_a25[35:9], // z_tsb_cfg0[39:13]
10855 4'b0, // z_tsb_cfg0[12:9]
10856 mmu_mra1_a25[8:0] // z_tsb_cfg0[8:0]
10857 };
10858assign ctxt_nz_tsb_cfg0_reg[7] = {`SPC4.mmu.asi.t7_e_nz[0],// z_tsb_cfg0[63]
10859 mmu_mra1_a26[76:75], // z_tsb_cfg0[62:61]
10860 21'b0, // z_tsb_cfg0[60:40]
10861 mmu_mra1_a26[74:48], // z_tsb_cfg0[39:13]
10862 4'b0, // z_tsb_cfg0[12:9]
10863 mmu_mra1_a26[47:39] // z_tsb_cfg0[8:0]
10864 };
10865assign ctxt_nz_tsb_cfg1_reg[7] = {`SPC4.mmu.asi.t7_e_nz[1],// z_tsb_cfg0[63]
10866 mmu_mra1_a26[37:36], // z_tsb_cfg0[62:61]
10867 21'b0, // z_tsb_cfg0[60:40]
10868 mmu_mra1_a26[35:9], // z_tsb_cfg0[39:13]
10869 4'b0, // z_tsb_cfg0[12:9]
10870 mmu_mra1_a26[8:0] // z_tsb_cfg0[8:0]
10871 };
10872assign ctxt_nz_tsb_cfg2_reg[7] = {`SPC4.mmu.asi.t7_e_nz[2],// z_tsb_cfg0[63]
10873 mmu_mra1_a27[76:75], // z_tsb_cfg0[62:61]
10874 21'b0, // z_tsb_cfg0[60:40]
10875 mmu_mra1_a27[74:48], // z_tsb_cfg0[39:13]
10876 4'b0, // z_tsb_cfg0[12:9]
10877 mmu_mra1_a27[47:39] // z_tsb_cfg0[8:0]
10878 };
10879assign ctxt_nz_tsb_cfg3_reg[7] = {`SPC4.mmu.asi.t7_e_nz[3],// z_tsb_cfg0[63]
10880 mmu_mra1_a27[37:36], // z_tsb_cfg0[62:61]
10881 21'b0, // z_tsb_cfg0[60:40]
10882 mmu_mra1_a27[35:9], // z_tsb_cfg0[39:13]
10883 4'b0, // z_tsb_cfg0[12:9]
10884 mmu_mra1_a27[8:0] // z_tsb_cfg0[8:0]
10885 };
10886`endif // EMUL - ADD_TSB_CFG
10887
10888
10889// This was the original select_pc_b, the latest select_pc_b qualifies with errors
10890// But some of the error checkers need this signal without the qualification
10891// of icache errors
10892// Suppress instruction on flush or park request
10893// (clear_disrupting_flush_pending_w_in & idl_req_in)
10894// Suppress instruction for 'refetch' exception after
10895// not taken branch with annulled delay slot
10896// NOTE: 'with_errors' means that the signal actually IGNORES instruction
10897// cache errors and asserts IN SPITE OF instruction cache errors
10898wire [7:0] select_pc_b_with_errors =
10899 {{4 {~`SPC4.dec_flush_b[1]}}, {4 {~`SPC4.dec_flush_b[0]}}} &
10900 {{4 {~`SPC4.tlu.fls1.refetch_w_in}}, {4 {~`SPC4.tlu.fls0.refetch_w_in}}} &
10901 {~(`SPC4.tlu.fls1.clear_disrupting_flush_pending_w_in[3:0] &
10902 {4 {`SPC4.tlu.fls1.idl_req_in}}),
10903 ~(`SPC4.tlu.fls0.clear_disrupting_flush_pending_w_in[3:0] &
10904 {4 {`SPC4.tlu.fls0.idl_req_in}})} &
10905 {`SPC4.tlu.fls1.tid_dec_valid_b[3:0],
10906 `SPC4.tlu.fls0.tid_dec_valid_b[3:0]};
10907
10908//------------------------------------
10909// Qualify select_pc_b_with_errors to get final select_pc_b signal
10910// Qualifications are
10911// - instruction cache errors (ic_err_w_in)
10912// - disrupting single step completion requests (dsc_req_in)
10913wire [7:0] select_pc_b =
10914 select_pc_b_with_errors[7:0] &
10915 {{4 {(~`SPC4.tlu.fls1.ic_err_w_in | `SPC4.tlu.fls1.itlb_nfo_exc_b) &
10916 ~`SPC4.tlu.fls1.dsc_req_in}},
10917 {4 {(~`SPC4.tlu.fls0.ic_err_w_in | `SPC4.tlu.fls0.itlb_nfo_exc_b) &
10918 ~`SPC4.tlu.fls0.dsc_req_in}}};
10919
10920//------------------------------------
10921
10922//original select_pc_b_with errors. Select_pc_b_with_errors is no longer asserted
10923//if the inst. following an annulled delay slot of a not taken branch has a prebuffer
10924//error and it reaches B stage. I still need a signal if this happens to trigger the chkr.
10925
10926wire [7:0] select_pc_b_with_errors_and_refetch =
10927 {{4 {~`SPC4.dec_flush_b[1]}}, {4 {~`SPC4.dec_flush_b[0]}}} &
10928 {~(`SPC4.tlu.fls1.clear_disrupting_flush_pending_w_in[3:0] &
10929 {4 {`SPC4.tlu.fls1.idl_req_in}}),
10930 ~(`SPC4.tlu.fls0.clear_disrupting_flush_pending_w_in[3:0] &
10931 {4 {`SPC4.tlu.fls0.idl_req_in}})} &
10932 {`SPC4.tlu.fls1.tid_dec_valid_b[3:0],
10933 `SPC4.tlu.fls0.tid_dec_valid_b[3:0]};
10934
10935// Signals required for bench TLB sync & LDST sync
10936
10937reg tlb_bypass_m;
10938reg tlb_bypass_b;
10939reg tlb_rd_vld_m;
10940reg tlb_rd_vld_b;
10941reg lsu_tl_gt_0_b;
10942reg [7:0] dcc_asi_b;
10943reg asi_internal_w;
10944
10945always @ (posedge `BENCH_SPC4_GCLK) begin // {
10946
10947 clkstop_d1 <= `SPC4.tcu_clk_stop;
10948 clkstop_d2 <= clkstop_d1;
10949 clkstop_d3 <= clkstop_d2;
10950 clkstop_d4 <= clkstop_d3;
10951 clkstop_d5 <= clkstop_d4;
10952
10953 tlb_bypass_m <= `SPC4.lsu.tlb.tlb_bypass;
10954 tlb_bypass_b <= tlb_bypass_m;
10955 tlb_rd_vld_m <= `SPC4.lsu.tlb.tlb_rd_vld | `SPC4.lsu.tlb.tlb_cam_vld;
10956 tlb_rd_vld_b <= tlb_rd_vld_m;
10957
10958 // This signal is only valid for LD/ST instructions
10959 lsu_tl_gt_0_b <= `SPC4.lsu.dcc.tl_gt_0_m;
10960
10961 // Can't use lsu.dcc_asi_b for tlb_sync so pipeline from M to B
10962 dcc_asi_b <= `SPC4.lsu.dcc_asi_m;
10963
10964 // LD/ST that will not issue to the crossbar
10965 asi_internal_w <= `SPC4.lsu.dcc.asi_internal_b;
10966end // }
10967
10968// TL determines whether Nucleus or Primary
10969wire [7:0] asi_num = `SPC4.lsu.dcc.altspace_ldst_b ?
10970 dcc_asi_b :
10971 (lsu_tl_gt_0_b ? 8'h04 : 8'h80);
10972
10973wire [7:0] itlb_miss = { (`SPC4.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
10974 `SPC4.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
10975 `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
10976 (`SPC4.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
10977 `SPC4.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
10978 `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
10979 (`SPC4.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
10980 `SPC4.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
10981 `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
10982 (`SPC4.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
10983 `SPC4.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
10984 `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
10985 (`SPC4.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
10986 `SPC4.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
10987 `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
10988 (`SPC4.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
10989 `SPC4.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
10990 `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
10991 (`SPC4.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
10992 `SPC4.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
10993 `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
10994 (`SPC4.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
10995 `SPC4.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
10996 `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
10997 };
10998
10999wire [7:0] icache_miss = { (`SPC4.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
11000 `SPC4.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
11001 `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
11002 (`SPC4.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
11003 `SPC4.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
11004 `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
11005 (`SPC4.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
11006 `SPC4.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
11007 `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
11008 (`SPC4.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
11009 `SPC4.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
11010 `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
11011 (`SPC4.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
11012 `SPC4.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
11013 `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
11014 (`SPC4.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
11015 `SPC4.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
11016 `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
11017 (`SPC4.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
11018 `SPC4.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
11019 `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
11020 (`SPC4.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
11021 `SPC4.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
11022 `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
11023 };
11024
11025wire inst_bypass = (`SPC4.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[0] |
11026 `SPC4.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[1] |
11027 `SPC4.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[2]);
11028
11029wire [7:0] fetch_bypass = { (inst_bypass & `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
11030 (inst_bypass & `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
11031 (inst_bypass & `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
11032 (inst_bypass & `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
11033 (inst_bypass & `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
11034 (inst_bypass & `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
11035 (inst_bypass & `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
11036 (inst_bypass & `SPC4.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
11037 };
11038
11039wire [7:0] itlb_wr = {(`SPC4.tlu.trl1.take_itw & `SPC4.tlu.trl1.trap[3]),
11040 (`SPC4.tlu.trl1.take_itw & `SPC4.tlu.trl1.trap[2]),
11041 (`SPC4.tlu.trl1.take_itw & `SPC4.tlu.trl1.trap[1]),
11042 (`SPC4.tlu.trl1.take_itw & `SPC4.tlu.trl1.trap[0]),
11043 (`SPC4.tlu.trl0.take_itw & `SPC4.tlu.trl0.trap[3]),
11044 (`SPC4.tlu.trl0.take_itw & `SPC4.tlu.trl0.trap[2]),
11045 (`SPC4.tlu.trl0.take_itw & `SPC4.tlu.trl0.trap[1]),
11046 (`SPC4.tlu.trl0.take_itw & `SPC4.tlu.trl0.trap[0])
11047 };
11048
11049//------------------------------------
11050
11051reg [71:0] tick_cmpr_0;
11052reg [71:0] stick_cmpr_0;
11053reg [71:0] hstick_cmpr_0;
11054reg [151:0] trap_entry_1_t0;
11055reg [151:0] trap_entry_2_t0;
11056reg [151:0] trap_entry_3_t0;
11057reg [151:0] trap_entry_4_t0;
11058reg [151:0] trap_entry_5_t0;
11059reg [151:0] trap_entry_6_t0;
11060
11061always @(posedge `BENCH_SPC4_GCLK) begin // {
11062
11063 // Probes for nas_pipe
11064 tick_cmpr_0 <= `SPC4.tlu.tca.array.mem[{2'b0,3'h0}];
11065 stick_cmpr_0 <= `SPC4.tlu.tca.array.mem[{2'b01,3'h0}];
11066 hstick_cmpr_0 <= `SPC4.tlu.tca.array.mem[{2'b10,3'h0}];
11067 trap_entry_1_t0 <= `SPC4.tlu.tsa0.array.mem[{2'h0, 3'h0}];
11068 trap_entry_2_t0 <= `SPC4.tlu.tsa0.array.mem[{2'h0, 3'h1}];
11069 trap_entry_3_t0 <= `SPC4.tlu.tsa0.array.mem[{2'h0, 3'h2}];
11070 trap_entry_4_t0 <= `SPC4.tlu.tsa0.array.mem[{2'h0, 3'h3}];
11071 trap_entry_5_t0 <= `SPC4.tlu.tsa0.array.mem[{2'h0, 3'h4}];
11072 trap_entry_6_t0 <= `SPC4.tlu.tsa0.array.mem[{2'h0, 3'h5}];
11073
11074end // }
11075reg [71:0] tick_cmpr_1;
11076reg [71:0] stick_cmpr_1;
11077reg [71:0] hstick_cmpr_1;
11078reg [151:0] trap_entry_1_t1;
11079reg [151:0] trap_entry_2_t1;
11080reg [151:0] trap_entry_3_t1;
11081reg [151:0] trap_entry_4_t1;
11082reg [151:0] trap_entry_5_t1;
11083reg [151:0] trap_entry_6_t1;
11084
11085always @(posedge `BENCH_SPC4_GCLK) begin // {
11086
11087 // Probes for nas_pipe
11088 tick_cmpr_1 <= `SPC4.tlu.tca.array.mem[{2'b0,3'h1}];
11089 stick_cmpr_1 <= `SPC4.tlu.tca.array.mem[{2'b01,3'h1}];
11090 hstick_cmpr_1 <= `SPC4.tlu.tca.array.mem[{2'b10,3'h1}];
11091 trap_entry_1_t1 <= `SPC4.tlu.tsa0.array.mem[{2'h1, 3'h0}];
11092 trap_entry_2_t1 <= `SPC4.tlu.tsa0.array.mem[{2'h1, 3'h1}];
11093 trap_entry_3_t1 <= `SPC4.tlu.tsa0.array.mem[{2'h1, 3'h2}];
11094 trap_entry_4_t1 <= `SPC4.tlu.tsa0.array.mem[{2'h1, 3'h3}];
11095 trap_entry_5_t1 <= `SPC4.tlu.tsa0.array.mem[{2'h1, 3'h4}];
11096 trap_entry_6_t1 <= `SPC4.tlu.tsa0.array.mem[{2'h1, 3'h5}];
11097
11098end // }
11099reg [71:0] tick_cmpr_2;
11100reg [71:0] stick_cmpr_2;
11101reg [71:0] hstick_cmpr_2;
11102reg [151:0] trap_entry_1_t2;
11103reg [151:0] trap_entry_2_t2;
11104reg [151:0] trap_entry_3_t2;
11105reg [151:0] trap_entry_4_t2;
11106reg [151:0] trap_entry_5_t2;
11107reg [151:0] trap_entry_6_t2;
11108
11109always @(posedge `BENCH_SPC4_GCLK) begin // {
11110
11111 // Probes for nas_pipe
11112 tick_cmpr_2 <= `SPC4.tlu.tca.array.mem[{2'b0,3'h2}];
11113 stick_cmpr_2 <= `SPC4.tlu.tca.array.mem[{2'b01,3'h2}];
11114 hstick_cmpr_2 <= `SPC4.tlu.tca.array.mem[{2'b10,3'h2}];
11115 trap_entry_1_t2 <= `SPC4.tlu.tsa0.array.mem[{2'h2, 3'h0}];
11116 trap_entry_2_t2 <= `SPC4.tlu.tsa0.array.mem[{2'h2, 3'h1}];
11117 trap_entry_3_t2 <= `SPC4.tlu.tsa0.array.mem[{2'h2, 3'h2}];
11118 trap_entry_4_t2 <= `SPC4.tlu.tsa0.array.mem[{2'h2, 3'h3}];
11119 trap_entry_5_t2 <= `SPC4.tlu.tsa0.array.mem[{2'h2, 3'h4}];
11120 trap_entry_6_t2 <= `SPC4.tlu.tsa0.array.mem[{2'h2, 3'h5}];
11121
11122end // }
11123reg [71:0] tick_cmpr_3;
11124reg [71:0] stick_cmpr_3;
11125reg [71:0] hstick_cmpr_3;
11126reg [151:0] trap_entry_1_t3;
11127reg [151:0] trap_entry_2_t3;
11128reg [151:0] trap_entry_3_t3;
11129reg [151:0] trap_entry_4_t3;
11130reg [151:0] trap_entry_5_t3;
11131reg [151:0] trap_entry_6_t3;
11132
11133always @(posedge `BENCH_SPC4_GCLK) begin // {
11134
11135 // Probes for nas_pipe
11136 tick_cmpr_3 <= `SPC4.tlu.tca.array.mem[{2'b0,3'h3}];
11137 stick_cmpr_3 <= `SPC4.tlu.tca.array.mem[{2'b01,3'h3}];
11138 hstick_cmpr_3 <= `SPC4.tlu.tca.array.mem[{2'b10,3'h3}];
11139 trap_entry_1_t3 <= `SPC4.tlu.tsa0.array.mem[{2'h3, 3'h0}];
11140 trap_entry_2_t3 <= `SPC4.tlu.tsa0.array.mem[{2'h3, 3'h1}];
11141 trap_entry_3_t3 <= `SPC4.tlu.tsa0.array.mem[{2'h3, 3'h2}];
11142 trap_entry_4_t3 <= `SPC4.tlu.tsa0.array.mem[{2'h3, 3'h3}];
11143 trap_entry_5_t3 <= `SPC4.tlu.tsa0.array.mem[{2'h3, 3'h4}];
11144 trap_entry_6_t3 <= `SPC4.tlu.tsa0.array.mem[{2'h3, 3'h5}];
11145
11146end // }
11147reg [71:0] tick_cmpr_4;
11148reg [71:0] stick_cmpr_4;
11149reg [71:0] hstick_cmpr_4;
11150reg [151:0] trap_entry_1_t4;
11151reg [151:0] trap_entry_2_t4;
11152reg [151:0] trap_entry_3_t4;
11153reg [151:0] trap_entry_4_t4;
11154reg [151:0] trap_entry_5_t4;
11155reg [151:0] trap_entry_6_t4;
11156
11157always @(posedge `BENCH_SPC4_GCLK) begin // {
11158
11159 // Probes for nas_pipe
11160 tick_cmpr_4 <= `SPC4.tlu.tca.array.mem[{2'b0,3'h4}];
11161 stick_cmpr_4 <= `SPC4.tlu.tca.array.mem[{2'b01,3'h4}];
11162 hstick_cmpr_4 <= `SPC4.tlu.tca.array.mem[{2'b10,3'h4}];
11163 trap_entry_1_t4 <= `SPC4.tlu.tsa1.array.mem[{2'h0, 3'h0}];
11164 trap_entry_2_t4 <= `SPC4.tlu.tsa1.array.mem[{2'h0, 3'h1}];
11165 trap_entry_3_t4 <= `SPC4.tlu.tsa1.array.mem[{2'h0, 3'h2}];
11166 trap_entry_4_t4 <= `SPC4.tlu.tsa1.array.mem[{2'h0, 3'h3}];
11167 trap_entry_5_t4 <= `SPC4.tlu.tsa1.array.mem[{2'h0, 3'h4}];
11168 trap_entry_6_t4 <= `SPC4.tlu.tsa1.array.mem[{2'h0, 3'h5}];
11169
11170end // }
11171reg [71:0] tick_cmpr_5;
11172reg [71:0] stick_cmpr_5;
11173reg [71:0] hstick_cmpr_5;
11174reg [151:0] trap_entry_1_t5;
11175reg [151:0] trap_entry_2_t5;
11176reg [151:0] trap_entry_3_t5;
11177reg [151:0] trap_entry_4_t5;
11178reg [151:0] trap_entry_5_t5;
11179reg [151:0] trap_entry_6_t5;
11180
11181always @(posedge `BENCH_SPC4_GCLK) begin // {
11182
11183 // Probes for nas_pipe
11184 tick_cmpr_5 <= `SPC4.tlu.tca.array.mem[{2'b0,3'h5}];
11185 stick_cmpr_5 <= `SPC4.tlu.tca.array.mem[{2'b01,3'h5}];
11186 hstick_cmpr_5 <= `SPC4.tlu.tca.array.mem[{2'b10,3'h5}];
11187 trap_entry_1_t5 <= `SPC4.tlu.tsa1.array.mem[{2'h1, 3'h0}];
11188 trap_entry_2_t5 <= `SPC4.tlu.tsa1.array.mem[{2'h1, 3'h1}];
11189 trap_entry_3_t5 <= `SPC4.tlu.tsa1.array.mem[{2'h1, 3'h2}];
11190 trap_entry_4_t5 <= `SPC4.tlu.tsa1.array.mem[{2'h1, 3'h3}];
11191 trap_entry_5_t5 <= `SPC4.tlu.tsa1.array.mem[{2'h1, 3'h4}];
11192 trap_entry_6_t5 <= `SPC4.tlu.tsa1.array.mem[{2'h1, 3'h5}];
11193
11194end // }
11195reg [71:0] tick_cmpr_6;
11196reg [71:0] stick_cmpr_6;
11197reg [71:0] hstick_cmpr_6;
11198reg [151:0] trap_entry_1_t6;
11199reg [151:0] trap_entry_2_t6;
11200reg [151:0] trap_entry_3_t6;
11201reg [151:0] trap_entry_4_t6;
11202reg [151:0] trap_entry_5_t6;
11203reg [151:0] trap_entry_6_t6;
11204
11205always @(posedge `BENCH_SPC4_GCLK) begin // {
11206
11207 // Probes for nas_pipe
11208 tick_cmpr_6 <= `SPC4.tlu.tca.array.mem[{2'b0,3'h6}];
11209 stick_cmpr_6 <= `SPC4.tlu.tca.array.mem[{2'b01,3'h6}];
11210 hstick_cmpr_6 <= `SPC4.tlu.tca.array.mem[{2'b10,3'h6}];
11211 trap_entry_1_t6 <= `SPC4.tlu.tsa1.array.mem[{2'h2, 3'h0}];
11212 trap_entry_2_t6 <= `SPC4.tlu.tsa1.array.mem[{2'h2, 3'h1}];
11213 trap_entry_3_t6 <= `SPC4.tlu.tsa1.array.mem[{2'h2, 3'h2}];
11214 trap_entry_4_t6 <= `SPC4.tlu.tsa1.array.mem[{2'h2, 3'h3}];
11215 trap_entry_5_t6 <= `SPC4.tlu.tsa1.array.mem[{2'h2, 3'h4}];
11216 trap_entry_6_t6 <= `SPC4.tlu.tsa1.array.mem[{2'h2, 3'h5}];
11217
11218end // }
11219reg [71:0] tick_cmpr_7;
11220reg [71:0] stick_cmpr_7;
11221reg [71:0] hstick_cmpr_7;
11222reg [151:0] trap_entry_1_t7;
11223reg [151:0] trap_entry_2_t7;
11224reg [151:0] trap_entry_3_t7;
11225reg [151:0] trap_entry_4_t7;
11226reg [151:0] trap_entry_5_t7;
11227reg [151:0] trap_entry_6_t7;
11228
11229always @(posedge `BENCH_SPC4_GCLK) begin // {
11230
11231 // Probes for nas_pipe
11232 tick_cmpr_7 <= `SPC4.tlu.tca.array.mem[{2'b0,3'h7}];
11233 stick_cmpr_7 <= `SPC4.tlu.tca.array.mem[{2'b01,3'h7}];
11234 hstick_cmpr_7 <= `SPC4.tlu.tca.array.mem[{2'b10,3'h7}];
11235 trap_entry_1_t7 <= `SPC4.tlu.tsa1.array.mem[{2'h3, 3'h0}];
11236 trap_entry_2_t7 <= `SPC4.tlu.tsa1.array.mem[{2'h3, 3'h1}];
11237 trap_entry_3_t7 <= `SPC4.tlu.tsa1.array.mem[{2'h3, 3'h2}];
11238 trap_entry_4_t7 <= `SPC4.tlu.tsa1.array.mem[{2'h3, 3'h3}];
11239 trap_entry_5_t7 <= `SPC4.tlu.tsa1.array.mem[{2'h3, 3'h4}];
11240 trap_entry_6_t7 <= `SPC4.tlu.tsa1.array.mem[{2'h3, 3'h5}];
11241
11242end // }
11243
11244//------------------------------------
11245// ASI & Trap State machines
11246always @(posedge `BENCH_SPC4_GCLK) begin // {
11247
11248// pc_0_e[47:0] <= `SPC4.ifu_pc_d0[47:0];
11249// pc_1_e[47:0] <= `SPC4.ifu_pc_d1[47:0];
11250 pc_0_e[47:0] <= {`SPC4.tlu_pc_0_d[47:2], 2'b00};
11251 pc_1_e[47:0] <= {`SPC4.tlu_pc_1_d[47:2], 2'b00};
11252 pc_0_m[47:0] <= pc_0_e[47:0];
11253 pc_1_m[47:0] <= pc_1_e[47:0];
11254 pc_0_b[47:0] <= pc_0_m[47:0];
11255 pc_1_b[47:0] <= pc_1_m[47:0];
11256 pc_0_w[47:0] <= ({48 { select_pc_b[0]}} & pc_0_b[47:0]) |
11257 ({48 {~select_pc_b[0]}} & pc_0_w[47:0]) ;
11258 pc_1_w[47:0] <= ({48 { select_pc_b[1]}} & pc_0_b[47:0]) |
11259 ({48 {~select_pc_b[1]}} & pc_1_w[47:0]) ;
11260 pc_2_w[47:0] <= ({48 { select_pc_b[2]}} & pc_0_b[47:0]) |
11261 ({48 {~select_pc_b[2]}} & pc_2_w[47:0]) ;
11262 pc_3_w[47:0] <= ({48 { select_pc_b[3]}} & pc_0_b[47:0]) |
11263 ({48 {~select_pc_b[3]}} & pc_3_w[47:0]) ;
11264 pc_4_w[47:0] <= ({48 { select_pc_b[4]}} & pc_1_b[47:0]) |
11265 ({48 {~select_pc_b[4]}} & pc_4_w[47:0]) ;
11266 pc_5_w[47:0] <= ({48 { select_pc_b[5]}} & pc_1_b[47:0]) |
11267 ({48 {~select_pc_b[5]}} & pc_5_w[47:0]) ;
11268 pc_6_w[47:0] <= ({48 { select_pc_b[6]}} & pc_1_b[47:0]) |
11269 ({48 {~select_pc_b[6]}} & pc_6_w[47:0]) ;
11270 pc_7_w[47:0] <= ({48 { select_pc_b[7]}} & pc_1_b[47:0]) |
11271 ({48 {~select_pc_b[7]}} & pc_7_w[47:0]) ;
11272
11273
11274 // altspace_ldst_m is asserted for asi accesses that don't change arch state
11275 asi_store_b <= (`SPC4.lsu.dcc.asi_store_m & `SPC4.lsu.dcc.asi_sync_m);
11276 asi_store_w <= asi_store_b;
11277 dcc_tid_b <= `SPC4.lsu.dcc.dcc_tid_m;
11278 dcc_tid_w <= dcc_tid_b;
11279
11280 // ASI in progress state m/c
11281 if (asi_store_w & ~asi_store_flush_w[dcc_tid_w]) begin // {
11282 asi_in_progress_b[dcc_tid_w] <= 1'b1;
11283 end // }
11284
11285 asi_valid_w <= asi_in_progress_b & store_sync;
11286
11287 // Delay asi_valid_w and asi_in_progress
11288 // 2 clocks to ensure TLB Sync DTLBWRITE (demap) comes before SSTEP stxa
11289 asi_valid_fx4 <= asi_valid_w;
11290 asi_valid_fx5 <= asi_valid_fx4;
11291 asi_in_progress_w <= asi_in_progress_b;
11292 asi_in_progress_fx4 <= asi_in_progress_w;
11293 sync_reset_w <= sync_reset;
11294
11295 for (i=0;i<8;i=i+1) begin // {
11296 if (asi_valid_w[i] | sync_reset_w[i]) begin // {
11297 asi_in_progress_b[i] <= 1'b0;
11298 end//}
11299 end //}
11300
11301 // Trap0 pipeline [valid W stage]
11302
11303 for (i=0;i<4;i=i+1) begin // {
11304 // Done & Retry
11305 if ((`SPC4.tlu.tlu_trap_0_tid[1:0] == i) &&
11306 `SPC4.tlu.tlu_trap_pc_0_valid & tlu_ccr_cwp_0_valid_last)
11307 begin //{
11308 tlu_valid[i] <= 1'b1;
11309 end //}
11310 // Trap taken
11311 else if (`SPC4.tlu.trl0.real_trap[i] & ~`SPC4.tlu.trl0.take_por) begin // {
11312 tlu_valid[i] <= 1'b1;
11313 end //}
11314 else
11315 tlu_valid[i] <= 1'b0;
11316 end //}
11317
11318 // Trap1 pipeline [valid W stage]
11319
11320 for (i=0;i<4;i=i+1) begin // {
11321 // Done & Retry
11322 if ((`SPC4.tlu.tlu_trap_1_tid[1:0] == i) &&
11323 `SPC4.tlu.tlu_trap_pc_1_valid & tlu_ccr_cwp_1_valid_last)
11324 begin //{
11325 tlu_valid[i+4] <= 1'b1;
11326 end //}
11327 // Trap taken
11328 else if (`SPC4.tlu.trl1.real_trap[i] & ~`SPC4.tlu.trl1.take_por) begin // {
11329 tlu_valid[i+4] <= 1'b1;
11330 end //}
11331 else
11332 tlu_valid[i+4] <= 1'b0;
11333 end //}
11334
11335end // }
11336
11337
11338always @(posedge `BENCH_SPC4_GCLK) begin
11339
11340// debug code for TPCC analysis
11341`ifdef TPCC
11342if (pcx_req==1) begin
11343 if (`SPC4.spc_pcx_data_pa[129:124]==6'b100000) begin // l15 dmiss
11344 l15dmiss_cnt=l15dmiss_cnt+1;
11345 $display("dmissl15 cnt is %0d",l15dmiss_cnt);
11346 end
11347 if (`SPC4.spc_pcx_data_pa[129:124]==6'b110000) begin // l15 imiss
11348 l15imiss_cnt=l15imiss_cnt+1;
11349 $display("imissl15 cnt is %0d",l15imiss_cnt);
11350 end
11351 // `TOP.spg.spc_pcx_data_pa[129:124]==6'b100001 -> all stores
11352end
11353
11354pcx_req <= |`SPC4.spc_pcx_req_pq[8:0];
11355
11356if (`SPC4.ifu_l15_valid==1) begin
11357 imiss_cnt=imiss_cnt+1;
11358 $display("imiss cnt is %0d",imiss_cnt);
11359end
11360if (spec_dmiss==1 && `SPC4.lsu_l15_cancel==0) begin
11361 dmiss_cnt=dmiss_cnt+1;
11362 $display("dmiss cnt is %0d",dmiss_cnt);
11363
11364end
11365spec_dmiss <= `SPC4.lsu_l15_valid & `SPC4.lsu_l15_load;
11366
11367clock = clock+1;
11368
11369// keep track of imiss latencies
11370if (`SPC4.ftu_agc_thr0_cmiss_c==1) begin
11371 start_imiss0=clock;
11372 active_imiss0=1;
11373end
11374if (active_imiss0==1 && first_imiss0==1 && `SPC4.l15_spc_cpkt[8:6]==3'b000 && `SPC4.l15_spc_valid==1 && `SPC4.l15_spc_cpkt[17:14]==4'b0001) begin
11375 sum_imiss_latency = sum_imiss_latency + clock - start_imiss0 + 1;
11376 number_imiss = number_imiss + 1;
11377 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
11378 active_imiss0=0;
11379 first_imiss0=0;
11380end
11381if (active_imiss0==1 && first_imiss0==0 && `SPC4.l15_spc_cpkt[8:6]==3'b000 && `SPC4.l15_spc_valid==1 && `SPC4.l15_spc_cpkt[17:14]==4'b0001) begin
11382 first_imiss0=1;
11383end
11384if (`SPC4.ftu_agc_thr1_cmiss_c==1) begin
11385 start_imiss1=clock;
11386 active_imiss1=1;
11387end
11388if (active_imiss1==1 && first_imiss1==1 && `SPC4.l15_spc_cpkt[8:6]==3'b001 && `SPC4.l15_spc_valid==1 && `SPC4.l15_spc_cpkt[17:14]==4'b0001) begin
11389 sum_imiss_latency = sum_imiss_latency + clock - start_imiss1 + 1;
11390 number_imiss = number_imiss + 1;
11391 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
11392 active_imiss1=0;
11393 first_imiss1=0;
11394end
11395if (active_imiss1==1 && first_imiss1==0 && `SPC4.l15_spc_cpkt[8:6]==3'b001 && `SPC4.l15_spc_valid==1 && `SPC4.l15_spc_cpkt[17:14]==4'b0001) begin
11396 first_imiss1=1;
11397end
11398if (`SPC4.ftu_agc_thr2_cmiss_c==1) begin
11399 start_imiss2=clock;
11400 active_imiss2=1;
11401end
11402if (active_imiss2==1 && first_imiss2==1 && `SPC4.l15_spc_cpkt[8:6]==3'b010 && `SPC4.l15_spc_valid==1 && `SPC4.l15_spc_cpkt[17:14]==4'b0001) begin
11403 sum_imiss_latency = sum_imiss_latency + clock - start_imiss2 + 1;
11404 number_imiss = number_imiss + 1;
11405 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
11406 active_imiss2=0;
11407 first_imiss2=0;
11408end
11409if (active_imiss2==1 && first_imiss2==0 && `SPC4.l15_spc_cpkt[8:6]==3'b010 && `SPC4.l15_spc_valid==1 && `SPC4.l15_spc_cpkt[17:14]==4'b0001) begin
11410 first_imiss2=1;
11411end
11412if (`SPC4.ftu_agc_thr3_cmiss_c==1) begin
11413 start_imiss3=clock;
11414 active_imiss3=1;
11415end
11416if (active_imiss3==1 && first_imiss3==1 && `SPC4.l15_spc_cpkt[8:6]==3'b011 && `SPC4.l15_spc_valid==1 && `SPC4.l15_spc_cpkt[17:14]==4'b0001) begin
11417 sum_imiss_latency = sum_imiss_latency + clock - start_imiss3 + 1;
11418 number_imiss = number_imiss + 1;
11419 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
11420 active_imiss3=0;
11421 first_imiss3=0;
11422end
11423if (active_imiss3==1 && first_imiss3==0 && `SPC4.l15_spc_cpkt[8:6]==3'b011 && `SPC4.l15_spc_valid==1 && `SPC4.l15_spc_cpkt[17:14]==4'b0001) begin
11424 first_imiss3=1;
11425end
11426if (`SPC4.ftu_agc_thr4_cmiss_c==1) begin
11427 start_imiss4=clock;
11428 active_imiss4=1;
11429end
11430if (active_imiss4==1 && first_imiss4==1 && `SPC4.l15_spc_cpkt[8:6]==3'b100 && `SPC4.l15_spc_valid==1 && `SPC4.l15_spc_cpkt[17:14]==4'b0001) begin
11431 sum_imiss_latency = sum_imiss_latency + clock - start_imiss4 + 1;
11432 number_imiss = number_imiss + 1;
11433 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
11434 active_imiss4=0;
11435 first_imiss4=0;
11436end
11437if (active_imiss4==1 && first_imiss4==0 && `SPC4.l15_spc_cpkt[8:6]==3'b100 && `SPC4.l15_spc_valid==1 && `SPC4.l15_spc_cpkt[17:14]==4'b0001) begin
11438 first_imiss4=1;
11439end
11440if (`SPC4.ftu_agc_thr5_cmiss_c==1) begin
11441 start_imiss5=clock;
11442 active_imiss5=1;
11443end
11444if (active_imiss5==1 && first_imiss5==1 && `SPC4.l15_spc_cpkt[8:6]==3'b101 && `SPC4.l15_spc_valid==1 && `SPC4.l15_spc_cpkt[17:14]==4'b0001) begin
11445 sum_imiss_latency = sum_imiss_latency + clock - start_imiss5 + 1;
11446 number_imiss = number_imiss + 1;
11447 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
11448 active_imiss5=0;
11449 first_imiss5=0;
11450end
11451if (active_imiss5==1 && first_imiss5==0 && `SPC4.l15_spc_cpkt[8:6]==3'b101 && `SPC4.l15_spc_valid==1 && `SPC4.l15_spc_cpkt[17:14]==4'b0001) begin
11452 first_imiss5=1;
11453end
11454if (`SPC4.ftu_agc_thr6_cmiss_c==1) begin
11455 start_imiss6=clock;
11456 active_imiss6=1;
11457end
11458if (active_imiss6==1 && first_imiss6==1 && `SPC4.l15_spc_cpkt[8:6]==3'b110 && `SPC4.l15_spc_valid==1 && `SPC4.l15_spc_cpkt[17:14]==4'b0001) begin
11459 sum_imiss_latency = sum_imiss_latency + clock - start_imiss6 + 1;
11460 number_imiss = number_imiss + 1;
11461 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
11462 active_imiss6=0;
11463 first_imiss6=0;
11464end
11465if (active_imiss6==1 && first_imiss6==0 && `SPC4.l15_spc_cpkt[8:6]==3'b110 && `SPC4.l15_spc_valid==1 && `SPC4.l15_spc_cpkt[17:14]==4'b0001) begin
11466 first_imiss6=1;
11467end
11468if (`SPC4.ftu_agc_thr7_cmiss_c==1) begin
11469 start_imiss7=clock;
11470 active_imiss7=1;
11471end
11472if (active_imiss7==1 && first_imiss7==1 && `SPC4.l15_spc_cpkt[8:6]==3'b111 && `SPC4.l15_spc_valid==1 && `SPC4.l15_spc_cpkt[17:14]==4'b0001) begin
11473 sum_imiss_latency = sum_imiss_latency + clock - start_imiss7 + 1;
11474 number_imiss = number_imiss + 1;
11475 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
11476 active_imiss7=0;
11477 first_imiss7=0;
11478end
11479if (active_imiss7==1 && first_imiss7==0 && `SPC4.l15_spc_cpkt[8:6]==3'b111 && `SPC4.l15_spc_valid==1 && `SPC4.l15_spc_cpkt[17:14]==4'b0001) begin
11480 first_imiss7=1;
11481end
11482
11483if (`SPC4.pku.swl0.set_lsu_sync_wait==1) begin
11484 start_dmiss0=clock;
11485end
11486if (`SPC4.pku.swl0.clear_lsu_sync_wait==1) begin
11487 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss0) + 3;
11488 number_dmiss = number_dmiss + 1;
11489 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
11490end
11491if (`SPC4.pku.swl1.set_lsu_sync_wait==1) begin
11492 start_dmiss1=clock;
11493end
11494if (`SPC4.pku.swl1.clear_lsu_sync_wait==1) begin
11495 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss1) + 3;
11496 number_dmiss = number_dmiss + 1;
11497 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
11498end
11499if (`SPC4.pku.swl2.set_lsu_sync_wait==1) begin
11500 start_dmiss2=clock;
11501end
11502if (`SPC4.pku.swl2.clear_lsu_sync_wait==1) begin
11503 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss2) + 3;
11504 number_dmiss = number_dmiss + 1;
11505 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
11506end
11507if (`SPC4.pku.swl3.set_lsu_sync_wait==1) begin
11508 start_dmiss3=clock;
11509end
11510if (`SPC4.pku.swl3.clear_lsu_sync_wait==1) begin
11511 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss3) + 3;
11512 number_dmiss = number_dmiss + 1;
11513 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
11514end
11515if (`SPC4.pku.swl4.set_lsu_sync_wait==1) begin
11516 start_dmiss4=clock;
11517end
11518if (`SPC4.pku.swl4.clear_lsu_sync_wait==1) begin
11519 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss4) + 3;
11520 number_dmiss = number_dmiss + 1;
11521 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
11522end
11523if (`SPC4.pku.swl5.set_lsu_sync_wait==1) begin
11524 start_dmiss5=clock;
11525end
11526if (`SPC4.pku.swl5.clear_lsu_sync_wait==1) begin
11527 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss5) + 3;
11528 number_dmiss = number_dmiss + 1;
11529 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
11530end
11531if (`SPC4.pku.swl6.set_lsu_sync_wait==1) begin
11532 start_dmiss6=clock;
11533end
11534if (`SPC4.pku.swl6.clear_lsu_sync_wait==1) begin
11535 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss6) + 3;
11536 number_dmiss = number_dmiss + 1;
11537 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
11538end
11539if (`SPC4.pku.swl7.set_lsu_sync_wait==1) begin
11540 start_dmiss7=clock;
11541end
11542if (`SPC4.pku.swl7.clear_lsu_sync_wait==1) begin
11543 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss7) + 3;
11544 number_dmiss = number_dmiss + 1;
11545 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
11546end
11547`endif
11548
11549
11550
11551 lsu_tid_e[2:0] <= `SPC4.lsu.dcc.tid_d[2:0];
11552
11553 // FG Valid conditions
11554
11555 // Add fcc valids to fg_valid
11556 fcc_valid_fb <= fcc_valid_f5;
11557 fcc_valid_f5 <= fcc_valid_f4;
11558 fcc_valid_f4 <= |`SPC4.fgu.fgu_cmp_fcc_vld_fx3[3:0];
11559
11560 fg_flush_fb <= fg_flush_f5;
11561 fg_flush_f5 <= fg_flush_f4;
11562 fg_flush_f4 <= fg_flush_f3;
11563 fg_flush_f3 <= fg_flush_f2 | `SPC4.dec_flush_f2 |
11564 `SPC4.tlu_flush_fgu_b;
11565 fg_flush_f2 <= `SPC4.dec_flush_f1;
11566
11567 fgu_err_fx3 <= `SPC4.fgu_cecc_fx2 | `SPC4.fgu_uecc_fx2 | `SPC4.fgu.fpc.exu_flush_fx2; // frf or irf ecc error
11568 fgu_err_fx4 <= fgu_err_fx3;
11569 fgu_err_fx5 <= fgu_err_fx4;
11570 fgu_err_fb <= fgu_err_fx5;
11571
11572 // Siams cause fg_valid ..
11573 siam0_d = `SPC4.dec.dec_inst0_d[31:30]==2'b10 &
11574 `SPC4.dec.dec_inst0_d[24:19]==6'b110110 &
11575 `SPC4.dec.dec_inst0_d[13:5]==9'b010000001;
11576
11577 siam1_d = `SPC4.dec.dec_inst1_d[31:30]==2'b10 &
11578 `SPC4.dec.dec_inst1_d[24:19]==6'b110110 &
11579 `SPC4.dec.dec_inst1_d[13:5]==9'b010000001;
11580
11581
11582 done0_d = `SPC4.dec.dec_inst0_d[31:30]==2'b10 &
11583 `SPC4.dec.dec_inst0_d[29:25]==5'b00000 &
11584 `SPC4.dec.dec_inst0_d[24:19]==6'b111110;
11585 done1_d = `SPC4.dec.dec_inst1_d[31:30]==2'b10 &
11586 `SPC4.dec.dec_inst1_d[29:25]==5'b00000 &
11587 `SPC4.dec.dec_inst1_d[24:19]==6'b111110;
11588
11589 retry0_d = `SPC4.dec.dec_inst0_d[31:30]==2'b10 &
11590 `SPC4.dec.dec_inst0_d[29:25]==5'b00001 &
11591 `SPC4.dec.dec_inst0_d[24:19]==6'b111110;
11592 retry1_d = `SPC4.dec.dec_inst1_d[31:30]==2'b10 &
11593 `SPC4.dec.dec_inst1_d[29:25]==5'b00001 &
11594 `SPC4.dec.dec_inst1_d[24:19]==6'b111110;
11595
11596 done0_e <= done0_d & `SPC4.dec.dec_decode0_d;
11597 done1_e <= done1_d & `SPC4.dec.dec_decode1_d;
11598
11599 retry0_e <= retry0_d & `SPC4.dec.dec_decode0_d;
11600 retry1_e <= retry1_d & `SPC4.dec.dec_decode1_d;
11601
11602
11603 // fold siam into cmov logic
11604
11605 fmov_valid_fb <= fmov_valid_f5;
11606 fmov_valid_f5 <= fmov_valid_f4;
11607 fmov_valid_f4 <= fmov_valid_f3;
11608 fmov_valid_f3 <= fmov_valid_f2;
11609 fmov_valid_f2 <= fmov_valid_m;
11610 fmov_valid_m <= fmov_valid_e & `SPC4.dec.dec_fgu_valid_e;
11611 fmov_valid_e <= ((`SPC4.exu0.ect.cmov_d | siam0_d) &
11612 `SPC4.dec.dec_decode0_d&`SPC4.dec.del.fgu0_d) |
11613 ((`SPC4.exu1.ect.cmov_d | siam1_d) &
11614 `SPC4.dec.dec_decode1_d&`SPC4.dec.del.fgu1_d);
11615
11616 // fgu check bus
11617
11618 // fcc_valid_fb doesn't assert for LDFSR. LDFSR gets checked by the LSU
11619 // checker
11620
11621 fg_valid <= {(`SPC4.fgu.fac.fac_w1_tid_fb[2:0]==3'h7) && fg_cond_fb,
11622 (`SPC4.fgu.fac.fac_w1_tid_fb[2:0]==3'h6) && fg_cond_fb,
11623 (`SPC4.fgu.fac.fac_w1_tid_fb[2:0]==3'h5) && fg_cond_fb,
11624 (`SPC4.fgu.fac.fac_w1_tid_fb[2:0]==3'h4) && fg_cond_fb,
11625 (`SPC4.fgu.fac.fac_w1_tid_fb[2:0]==3'h3) && fg_cond_fb,
11626 (`SPC4.fgu.fac.fac_w1_tid_fb[2:0]==3'h2) && fg_cond_fb,
11627 (`SPC4.fgu.fac.fac_w1_tid_fb[2:0]==3'h1) && fg_cond_fb,
11628 (`SPC4.fgu.fac.fac_w1_tid_fb[2:0]==3'h0) && fg_cond_fb };
11629
11630
11631 fgu_valid_fb0 <= `SPC4.fgu_exu_w_vld_fx5[0] && !`SPC4.fgu.fpc.div_finish_int_fb;
11632 fgu_valid_fb1 <= `SPC4.fgu_exu_w_vld_fx5[1] && !`SPC4.fgu.fpc.div_finish_int_fb;
11633
11634 // Fdiv
11635 div_special_cancel_f4[7:0] <= tid2onehot(`SPC4.fgu.fac.tid_fx3[2:0]) &
11636 {8{`SPC4.fgu.fac.q_div_default_res_fx3}};
11637 fg_fdiv_valid_fw <= `SPC4.fgu_divide_completion & ~div_special_cancel_f4 &
11638 {8{~`SPC4.fgu.fpc.fpc_fpd_ieee_trap_fb}} &
11639 {8{~`SPC4.fgu.fpc.fpc_fpd_unfin_fb}};
11640
11641
11642 // Used in CCX Stub ?
11643 inst0_e[31:0] <= `SPC4.dec.dec_inst0_d[31:0];
11644 inst1_e[31:0] <= `SPC4.dec.dec_inst1_d[31:0];
11645
11646 // only fgu ops that are not loads/stores
11647 fgu0_e <= `SPC4.dec.del.decode_fgu0_d;
11648 fgu1_e <= `SPC4.dec.del.decode_fgu1_d;
11649
11650 // LSU logic
11651 load_b <= load_m;
11652 load_m <= (load0_e | load1_e);
11653
11654 load0_e <= (`SPC4.dec.dec_decode0_d & `SPC4.dec.del.lsu0_d &
11655 `SPC4.dec.dcd0.dcd_load_d);
11656
11657 load1_e <= (`SPC4.dec.dec_decode1_d & `SPC4.dec.del.lsu1_d &
11658 `SPC4.dec.dcd1.dcd_load_d);
11659
11660 lsu_tid_b[2:0] <= lsu_tid_m[2:0];
11661 lsu_tid_m[2:0] <= lsu_tid_e[2:0];
11662
11663 lsu_complete_m[7:0] <= `SPC4.lsu_complete[7:0];
11664 lsu_complete_b[7:0] <= lsu_complete_m[7:0];
11665
11666 lsu_data_w <= lsu_data_b;
11667
11668 // Divide destination logic ..
11669 sel_divide0_e <= (`SPC4.dec_decode0_d &
11670 ((`SPC4.pku.swl0.vld_d & `SPC4.pku.swl_divide_wait[0]) |
11671 (`SPC4.pku.swl1.vld_d & `SPC4.pku.swl_divide_wait[1]) |
11672 (`SPC4.pku.swl2.vld_d & `SPC4.pku.swl_divide_wait[2]) |
11673 (`SPC4.pku.swl3.vld_d & `SPC4.pku.swl_divide_wait[3])));
11674 sel_divide1_e <= (`SPC4.dec_decode1_d &
11675 ((`SPC4.pku.swl4.vld_d & `SPC4.pku.swl_divide_wait[4]) |
11676 (`SPC4.pku.swl5.vld_d & `SPC4.pku.swl_divide_wait[5]) |
11677 (`SPC4.pku.swl6.vld_d & `SPC4.pku.swl_divide_wait[6]) |
11678 (`SPC4.pku.swl7.vld_d & `SPC4.pku.swl_divide_wait[7])));
11679
11680
11681 dcd_fdest_e <= {`SPC4.dec.del.fdest1_d,`SPC4.dec.del.fdest0_d};
11682 dcd_idest_e <= {`SPC4.dec.del.idest1_d,`SPC4.dec.del.idest0_d};
11683
11684 if (sel_divide0_e) begin // {
11685 div_idest[{1'b0, `SPC4.dec.del.tid0_e[1:0]}] <= dcd_idest_e[0];
11686 div_fdest[{1'b0, `SPC4.dec.del.tid0_e[1:0]}] <= dcd_fdest_e[0];
11687 end // }
11688 if (sel_divide1_e) begin // {
11689 div_idest[{1'b1, `SPC4.dec.del.tid1_e[1:0]}] <= dcd_idest_e[1];
11690 div_fdest[{1'b1, `SPC4.dec.del.tid1_e[1:0]}] <= dcd_fdest_e[1];
11691 end // }
11692
11693
11694 // EX logic
11695 // Save EX tids for later use
11696 ex0_tid_m <= ex0_tid_e;
11697 ex1_tid_m <= ex1_tid_e;
11698 ex0_tid_b <= ex0_tid_m;
11699 ex1_tid_b <= ex1_tid_m;
11700 ex0_tid_w <= ex0_tid_b;
11701 ex1_tid_w <= ex1_tid_b;
11702
11703 // EX Flush conditions
11704 ex_flush_w <= {ex_flush_b | {{4{(`SPC4.dec.dec_flush_b[1] |
11705 `SPC4.tlu_flush_exu_b[1])}},
11706 {4{(`SPC4.dec.dec_flush_b[0] |
11707 `SPC4.tlu_flush_exu_b[0])}}}};
11708
11709 ex_flush_b <= {{4{`SPC4.dec.dec_flush_m[1]}},
11710 {4{`SPC4.dec.dec_flush_m[0]}}};
11711
11712
11713 // ex_valid_f4 valid will only fire on return
11714 return_f4 <= return_w & ~(`SPC4.tlu_flush_ifu & real_exception);
11715 ex_valid_w <= ex_valid_b;
11716
11717 // Cancel EX valid if it turns out to be asr/asi access for this tid
11718
11719 ex_valid_b <= ex_valid_m & ~ex_asr_access;
11720
11721
11722 ex_valid_m <= { (ex1_tid_e == 2'h3) && ex1_valid_e,
11723 (ex1_tid_e == 2'h2) && ex1_valid_e,
11724 (ex1_tid_e == 2'h1) && ex1_valid_e,
11725 (ex1_tid_e == 2'h0) && ex1_valid_e,
11726 (ex0_tid_e == 2'h3) && ex0_valid_e,
11727 (ex0_tid_e == 2'h2) && ex0_valid_e,
11728 (ex0_tid_e == 2'h1) && ex0_valid_e,
11729 (ex0_tid_e == 2'h0) && ex0_valid_e};
11730
11731
11732 // TLU delays for done and retries
11733 tlu_ccr_cwp_0_valid_last <= `SPC4.tlu.tlu_ccr_cwp_0_valid;
11734 tlu_ccr_cwp_1_valid_last <= `SPC4.tlu.tlu_ccr_cwp_1_valid;
11735
11736
11737end // END posedge gclk
11738
11739// Return instruction is separated out of ex*_valid because CWP update is in
11740// W+1 for return new window is not available for IRF scan (nas_pipe) until
11741// W+2
11742assign return0 = `SPC4.exu0.rml.return_w &
11743 `SPC4.exu0.rml.inst_vld_w;
11744assign return1 = `SPC4.exu1.rml.return_w &
11745 `SPC4.exu1.rml.inst_vld_w;
11746assign return_w = {(ex1_tid_w == 2'h3) && return1,
11747 (ex1_tid_w == 2'h2) && return1,
11748 (ex1_tid_w == 2'h1) && return1,
11749 (ex1_tid_w == 2'h0) && return1,
11750 (ex0_tid_w == 2'h3) && return0,
11751 (ex0_tid_w == 2'h2) && return0,
11752 (ex0_tid_w == 2'h1) && return0,
11753 (ex0_tid_w == 2'h0) && return0};
11754
11755
11756// Cancel EX valid if it turns out that exception (tlu flush) taken for
11757// this tid
11758
11759// exu check bus
11760assign ex0_tid_e = `SPC4.exu0.ect_tid_lth_e[1:0];
11761assign ex0_valid_e = `SPC4.dec.dec_valid_e[0] & ~fgu0_e & ~load0_e &
11762 ~retry0_e & ~done0_e;
11763assign ex1_tid_e = `SPC4.exu1.ect_tid_lth_e[1:0];
11764assign ex1_valid_e = `SPC4.dec.dec_valid_e[1] & ~fgu1_e & ~load1_e &
11765 ~retry1_e & ~done1_e;
11766
11767assign ex_asr_valid = `SPC4.lsu.dcc.asi_store_m & `SPC4.lsu.dcc.asi_sync_m ;
11768
11769assign ex_asr_access ={(`SPC4.lsu.dcc.dcc_tid_m[2:0]==3'h7) & ex_asr_valid,
11770 (`SPC4.lsu.dcc.dcc_tid_m[2:0]==3'h6) & ex_asr_valid,
11771 (`SPC4.lsu.dcc.dcc_tid_m[2:0]==3'h5) & ex_asr_valid,
11772 (`SPC4.lsu.dcc.dcc_tid_m[2:0]==3'h4) & ex_asr_valid,
11773 (`SPC4.lsu.dcc.dcc_tid_m[2:0]==3'h3) & ex_asr_valid,
11774 (`SPC4.lsu.dcc.dcc_tid_m[2:0]==3'h2) & ex_asr_valid,
11775 (`SPC4.lsu.dcc.dcc_tid_m[2:0]==3'h1) & ex_asr_valid,
11776 (`SPC4.lsu.dcc.dcc_tid_m[2:0]==3'h0) & ex_asr_valid};
11777
11778
11779// EXU valid is ex_valid_w, except flushes, delayed return, traps, and stfsr
11780// real_exception added because tlu_flush_ifu activates for second redirect
11781// of retry if TPC and TNPC are not verified as sequential
11782assign real_exception =
11783 {{4 {`SPC4.tlu.fls1.dec_exc_w |
11784 `SPC4.tlu.fls1.exu_exc_w |
11785 `SPC4.tlu.fls1.lsu_exc_w |
11786 `SPC4.tlu.fls1.bsee_req_w}},
11787 {4 {`SPC4.tlu.fls0.dec_exc_w |
11788 `SPC4.tlu.fls0.exu_exc_w |
11789 `SPC4.tlu.fls0.lsu_exc_w |
11790 `SPC4.tlu.fls0.bsee_req_w}}};
11791
11792// Do not assert ex_valid for block store instructions
11793wire [7:0] block_store_first_at_w =
11794 {`SPC4.lsu.sbs7.bst_pend & `SPC4.lsu.sbs7.blk_inst_w,
11795 `SPC4.lsu.sbs6.bst_pend & `SPC4.lsu.sbs6.blk_inst_w,
11796 `SPC4.lsu.sbs5.bst_pend & `SPC4.lsu.sbs5.blk_inst_w,
11797 `SPC4.lsu.sbs4.bst_pend & `SPC4.lsu.sbs4.blk_inst_w,
11798 `SPC4.lsu.sbs3.bst_pend & `SPC4.lsu.sbs3.blk_inst_w,
11799 `SPC4.lsu.sbs2.bst_pend & `SPC4.lsu.sbs2.blk_inst_w,
11800 `SPC4.lsu.sbs1.bst_pend & `SPC4.lsu.sbs1.blk_inst_w,
11801 `SPC4.lsu.sbs0.bst_pend & `SPC4.lsu.sbs0.blk_inst_w};
11802
11803// But inject a valid for a block store that's done...
11804reg [7:0] block_store_w;
11805always @(posedge `BENCH_SPC4_GCLK) begin
11806 block_store_w[7:0] <= `SPC4.lsu.lsu_block_store_b[7:0];
11807 lsu_trap_flush_d <= `SPC4.lsu_trap_flush[7:0];
11808end
11809
11810wire [7:0] block_store_inject_at_w =
11811 ~`SPC4.lsu.lsu_block_store_b[7:0] &
11812 block_store_w[7:0] &
11813 {~`SPC4.lsu.sbs7.bst_kill,
11814 ~`SPC4.lsu.sbs6.bst_kill,
11815 ~`SPC4.lsu.sbs5.bst_kill,
11816 ~`SPC4.lsu.sbs4.bst_kill,
11817 ~`SPC4.lsu.sbs3.bst_kill,
11818 ~`SPC4.lsu.sbs2.bst_kill,
11819 ~`SPC4.lsu.sbs1.bst_kill,
11820 ~`SPC4.lsu.sbs0.bst_kill};
11821
11822assign ex_valid = (((ex_valid_w & ~ex_flush_w & ~return_w & ~block_store_first_at_w & ~exception_w &
11823 ~({{4{`SPC4.tlu.fls1.exu_exc_b & `SPC4.tlu.fls1.beat_two_b}},
11824 {4{`SPC4.tlu.fls0.exu_exc_b & `SPC4.tlu.fls0.beat_two_b}}}) &
11825 ~{(`SPC4.fgu.fac.tid_fx3[2:0]==3'h7) & `SPC4.fgu.fpc.fsr_store_fx3,
11826 (`SPC4.fgu.fac.tid_fx3[2:0]==3'h6) & `SPC4.fgu.fpc.fsr_store_fx3,
11827 (`SPC4.fgu.fac.tid_fx3[2:0]==3'h5) & `SPC4.fgu.fpc.fsr_store_fx3,
11828 (`SPC4.fgu.fac.tid_fx3[2:0]==3'h4) & `SPC4.fgu.fpc.fsr_store_fx3,
11829 (`SPC4.fgu.fac.tid_fx3[2:0]==3'h3) & `SPC4.fgu.fpc.fsr_store_fx3,
11830 (`SPC4.fgu.fac.tid_fx3[2:0]==3'h2) & `SPC4.fgu.fpc.fsr_store_fx3,
11831 (`SPC4.fgu.fac.tid_fx3[2:0]==3'h1) & `SPC4.fgu.fpc.fsr_store_fx3,
11832 (`SPC4.fgu.fac.tid_fx3[2:0]==3'h0) & `SPC4.fgu.fpc.fsr_store_fx3}) |
11833 block_store_inject_at_w) &
11834 ~(`SPC4.tlu_flush_ifu & real_exception)) | return_f4;
11835
11836assign exception_w = {{4 {`SPC4.tlu.fls1.exc_for_w}} |
11837 `SPC4.tlu.fls1.bsee_req[3:0] |
11838 `SPC4.tlu.fls1.pdist_ecc_w[3:0],
11839 {4 {`SPC4.tlu.fls0.exc_for_w}} |
11840 `SPC4.tlu.fls0.bsee_req[3:0] |
11841 `SPC4.tlu.fls0.pdist_ecc_w[3:0]};
11842
11843// imul check bus - includes imul, save, restore instructions
11844assign imul_valid = {(`SPC4.exu1.ect_tid_lth_w[1:0]== 2'h3) & fgu_valid_fb1,
11845 (`SPC4.exu1.ect_tid_lth_w[1:0]== 2'h2) & fgu_valid_fb1,
11846 (`SPC4.exu1.ect_tid_lth_w[1:0]== 2'h1) & fgu_valid_fb1,
11847 (`SPC4.exu1.ect_tid_lth_w[1:0]== 2'h0) & fgu_valid_fb1,
11848 (`SPC4.exu0.ect_tid_lth_w[1:0]== 2'h3) & fgu_valid_fb0,
11849 (`SPC4.exu0.ect_tid_lth_w[1:0]== 2'h2) & fgu_valid_fb0,
11850 (`SPC4.exu0.ect_tid_lth_w[1:0]== 2'h1) & fgu_valid_fb0,
11851 (`SPC4.exu0.ect_tid_lth_w[1:0]== 2'h0) & fgu_valid_fb0};
11852
11853// qualify this signal with fgu_err. If fgu_err is encountered, deassert
11854//fg_cond_fb, so we don't send a step to Riesling.
11855
11856// FGU conditions
11857wire fg_cond_fb_pre_err = `SPC4.fgu.fpc.fpc_w1_ul_vld_fb | fcc_valid_fb |
11858 (fmov_valid_fb & ~fg_flush_fb) |
11859 (`SPC4.fgu.fac.fsr_w1_vld_fb[1]); // covers ST(X)FSR, which clears FSR.ftt
11860
11861assign fg_cond_fb = fg_cond_fb_pre_err & ~fgu_err_fb;
11862
11863// Idiv/Fdiv signals
11864
11865assign fgu_idiv_valid = fg_div_valid & div_idest;
11866
11867
11868assign fgu_fdiv_valid = fg_fdiv_valid_fw & div_fdest;
11869
11870
11871// Lsu signals needed to check lsu results
11872
11873assign lsu_valid = lsu_check | lsu_data_w;
11874
11875assign fg_div_valid = `SPC4.fgu_divide_completion & ~div_special_cancel_f4;
11876
11877// State machine asserts lsu_check for LD hit/miss
11878always @(posedge `BENCH_SPC4_GCLK) begin
11879 for (i=0; i<=7;i=i+1) begin // {
11880 lsu_check[i] <= 1'b0;
11881 case (lsu_state[i])
11882 1'b0: // IDLE state
11883 begin
11884 // LD hit
11885 if (lsu_ld_valid & lsu_tid_dec_b[i] & load_b) begin
11886 lsu_check[i] <= 1'b1;
11887 lsu_state[i] <= 1'b0; // IDLE state
11888 end
11889 // LD miss - normal case
11890 else if (lsu_ld_valid & lsu_tid_dec_b[i] & lsu_complete_b[i])
11891 begin
11892 lsu_check[i] <= 1'b1;
11893 lsu_state[i] <= 1'b0; // IDLE state
11894 end
11895 // LD miss - LDD or Block LD or SWAP
11896 else if (lsu_ld_valid & lsu_tid_dec_b[i]) begin
11897 lsu_state[i] <= 1'b1; // VALID state
11898 end
11899// Added a new term to handle STB uncorrectable errors on atomic or asi stores that are synced
11900//Send a complete if an atomic is squashed.
11901//lsu_trap_flush is asserted a cycle after the block_store_kill is asserted
11902 else if (`SPC4.lsu.dcc.sync_st[i] & `SPC4.lsu_block_store_kill[i] & ~lsu_trap_flush_d[i])
11903 begin
11904 lsu_check[i] <= 1'b1;
11905 lsu_state[i] <= 1'b0; // IDLE state
11906 end
11907 else begin
11908 lsu_state[i] <= lsu_state[i];
11909 end
11910
11911 end
11912 1'b1: // VALID state
11913 begin
11914 if ((lsu_complete_b[i])) begin
11915 lsu_check[i] <= 1'b1;
11916 lsu_state[i] <= 1'b0; // IDLE state
11917 end
11918 else begin
11919 lsu_state[i] <= lsu_state[i];
11920 end
11921 end
11922 endcase
11923 end // }
11924end
11925
11926
11927assign lsu_tid = `SPC4.lsu.dcc.ld_tid_b[2:0];
11928// Don't assert LSU_complete in case of dtlb or irf errors
11929
11930assign lsu_valid_b = (`SPC4.lsu.dcc.pref_inst_b &
11931 ~(dec_flush_lb | `SPC4.lsu.dcc.pipe_flush_b |
11932 `SPC4.lsu_dtdp_err_b | `SPC4.lsu_dttp_err_b |
11933 `SPC4.lsu_dtmh_err_b | `SPC4.lsu.dcc.exu_error_b));
11934
11935assign lsu_data_b[7:0] = { (lsu_tid == 3'h7) & lsu_valid_b,
11936 (lsu_tid == 3'h6) & lsu_valid_b,
11937 (lsu_tid == 3'h5) & lsu_valid_b,
11938 (lsu_tid == 3'h4) & lsu_valid_b,
11939 (lsu_tid == 3'h3) & lsu_valid_b,
11940 (lsu_tid == 3'h2) & lsu_valid_b,
11941 (lsu_tid == 3'h1) & lsu_valid_b,
11942 (lsu_tid == 3'h0) & lsu_valid_b};
11943
11944assign lsu_tid_dec_b[0] = `SPC4.lsu.dcc.ld_tid_b[2:0] == 3'd0;
11945assign lsu_tid_dec_b[1] = `SPC4.lsu.dcc.ld_tid_b[2:0] == 3'd1;
11946assign lsu_tid_dec_b[2] = `SPC4.lsu.dcc.ld_tid_b[2:0] == 3'd2;
11947assign lsu_tid_dec_b[3] = `SPC4.lsu.dcc.ld_tid_b[2:0] == 3'd3;
11948assign lsu_tid_dec_b[4] = `SPC4.lsu.dcc.ld_tid_b[2:0] == 3'd4;
11949assign lsu_tid_dec_b[5] = `SPC4.lsu.dcc.ld_tid_b[2:0] == 3'd5;
11950assign lsu_tid_dec_b[6] = `SPC4.lsu.dcc.ld_tid_b[2:0] == 3'd6;
11951assign lsu_tid_dec_b[7] = `SPC4.lsu.dcc.ld_tid_b[2:0] == 3'd7;
11952
11953assign lsu_ld_valid = (`SPC4.lsu.dcc.exu_ld_vld_b |`SPC4.lsu.dcc.fgu_fld_vld_b) &
11954 ~(`SPC4.lsu.dcc.flush_all_b & `SPC4.lsu.dcc.ld_inst_vld_b);
11955assign dec_flush_lb = `SPC4.dec.dec_flush_lb | `SPC4.tlu_flush_lsu_b;
11956
11957
11958// LSU interface to CCX stub
11959
11960assign exu_lsu_valid = `SPC4.dec.del.lsu_valid_e;
11961assign exu_lsu_addr[47:0] = `SPC4.exu_lsu_address_e[47:0];
11962assign exu_lsu_tid[2:0] = lsu_tid_e[2:0];
11963assign exu_lsu_regid[4:0] = `SPC4.dec.dec_lsu_rd_e[4:0];
11964assign exu_lsu_data[63:0] = `SPC4.exu_lsu_store_data_e[63:0];
11965assign exu_lsu_instr[31:0] = ({32{`SPC4.dec.dec_lsu_sel0_e}} &
11966 inst0_e[31:0]) |
11967 ({32{~`SPC4.dec.dec_lsu_sel0_e}} &
11968 inst1_e[31:0]);
11969assign ld_inst_d = `SPC4.dec.dec_ld_inst_d;
11970
11971///////////////////////////////////////////////////////////////////////////////
11972// Debugging Instruction Opcodes Pipeline
11973///////////////////////////////////////////////////////////////////////////////
11974
11975
11976 reg [31:0] op_0_w;
11977 reg [31:0] op_1_w;
11978 reg [31:0] op_2_w;
11979 reg [31:0] op_3_w;
11980 reg [31:0] op_4_w;
11981 reg [31:0] op_5_w;
11982 reg [31:0] op_6_w;
11983 reg [31:0] op_7_w;
11984
11985 reg [31:0] op0_b;
11986 reg [31:0] op0_m;
11987 reg [31:0] op0_e;
11988 reg [31:0] op0_d;
11989
11990 reg [31:0] op1_b;
11991 reg [31:0] op1_m;
11992 reg [31:0] op1_e;
11993 reg [31:0] op1_d;
11994
11995 reg [255:0] inst0_string_w;
11996 reg [255:0] inst0_string_b;
11997 reg [255:0] inst0_string_m;
11998 reg [255:0] inst0_string_e;
11999 reg [255:0] inst0_string_d;
12000
12001 reg [255:0] inst1_string_w;
12002 reg [255:0] inst1_string_b;
12003 reg [255:0] inst1_string_m;
12004 reg [255:0] inst1_string_e;
12005 reg [255:0] inst1_string_d;
12006
12007 reg [255:0] inst0_string_p;
12008 reg [255:0] inst1_string_p;
12009 reg [255:0] inst2_string_p;
12010 reg [255:0] inst3_string_p;
12011 reg [255:0] inst4_string_p;
12012 reg [255:0] inst5_string_p;
12013 reg [255:0] inst6_string_p;
12014 reg [255:0] inst7_string_p;
12015
12016initial begin
12017 op_0_w = 32'b0;
12018 op_1_w = 32'b0;
12019 op_2_w = 32'b0;
12020 op_3_w = 32'b0;
12021 op_4_w = 32'b0;
12022 op_5_w = 32'b0;
12023 op_6_w = 32'b0;
12024 op_7_w = 32'b0;
12025end
12026
12027always @(posedge `BENCH_SPC4_GCLK) begin // {
12028 op_0_w <= ({32 { select_pc_b[0]}} & op0_b[31:0]) |
12029 ({32 {~select_pc_b[0]}} & op_0_w[31:0]) ;
12030 op_1_w <= ({32 { select_pc_b[1]}} & op0_b[31:0]) |
12031 ({32 {~select_pc_b[1]}} & op_1_w[31:0]) ;
12032 op_2_w <= ({32 { select_pc_b[2]}} & op0_b[31:0]) |
12033 ({32 {~select_pc_b[2]}} & op_2_w[31:0]) ;
12034 op_3_w <= ({32 { select_pc_b[3]}} & op0_b[31:0]) |
12035 ({32 {~select_pc_b[3]}} & op_3_w[31:0]) ;
12036 op_4_w <= ({32 { select_pc_b[4]}} & op1_b[31:0]) |
12037 ({32 {~select_pc_b[4]}} & op_4_w[31:0]) ;
12038 op_5_w <= ({32 { select_pc_b[5]}} & op1_b[31:0]) |
12039 ({32 {~select_pc_b[5]}} & op_5_w[31:0]) ;
12040 op_6_w <= ({32 { select_pc_b[6]}} & op1_b[31:0]) |
12041 ({32 {~select_pc_b[6]}} & op_6_w[31:0]) ;
12042 op_7_w <= ({32 { select_pc_b[7]}} & op1_b[31:0]) |
12043 ({32 {~select_pc_b[7]}} & op_7_w[31:0]) ;
12044
12045 op0_b <= op0_m;
12046 op0_m <= op0_e;
12047 op0_e <= op0_d;
12048 op0_d <= `SPC4.dec.ded0.decode_mux[31:0];
12049
12050 op1_b <= op1_m;
12051 op1_m <= op1_e;
12052 op1_e <= op1_d;
12053 op1_d <= `SPC4.dec.ded1.decode_mux[31:0];
12054
12055 inst0_string_w<=inst0_string_b;
12056 inst0_string_b<=inst0_string_m;
12057 inst0_string_m<=inst0_string_e;
12058 inst0_string_e<=inst0_string_d;
12059 inst0_string_d<=xlate(`SPC4.dec.ded0.decode_mux[31:0]);
12060
12061 inst1_string_w<=inst1_string_b;
12062 inst1_string_b<=inst1_string_m;
12063 inst1_string_m<=inst1_string_e;
12064 inst1_string_e<=inst1_string_d;
12065 inst1_string_d<=xlate(`SPC4.dec.ded1.decode_mux[31:0]);
12066
12067// instructions for each thread at pick
12068 inst0_string_p<=xlate(`SPC4.ifu_ibu.ibf0.buf0_in[31:0]);
12069 inst1_string_p<=xlate(`SPC4.ifu_ibu.ibf1.buf0_in[31:0]);
12070 inst2_string_p<=xlate(`SPC4.ifu_ibu.ibf2.buf0_in[31:0]);
12071 inst3_string_p<=xlate(`SPC4.ifu_ibu.ibf3.buf0_in[31:0]);
12072 inst4_string_p<=xlate(`SPC4.ifu_ibu.ibf4.buf0_in[31:0]);
12073 inst5_string_p<=xlate(`SPC4.ifu_ibu.ibf5.buf0_in[31:0]);
12074 inst6_string_p<=xlate(`SPC4.ifu_ibu.ibf6.buf0_in[31:0]);
12075 inst7_string_p<=xlate(`SPC4.ifu_ibu.ibf7.buf0_in[31:0]);
12076
12077end //}
12078
12079///////////////////////////////////////////////////////////////////////////////
12080// Functions
12081///////////////////////////////////////////////////////////////////////////////
12082function [2:0] onehot2tid;
12083 input [7:0] onehot;
12084
12085 begin
12086
12087 if (onehot[7:0]==8'b00000001) onehot2tid[2:0] = 3'b000;
12088 else if (onehot[7:0]==8'b00000010) onehot2tid[2:0] = 3'b001;
12089 else if (onehot[7:0]==8'b00000100) onehot2tid[2:0] = 3'b010;
12090 else if (onehot[7:0]==8'b00001000) onehot2tid[2:0] = 3'b011;
12091 else if (onehot[7:0]==8'b00010000) onehot2tid[2:0] = 3'b100;
12092 else if (onehot[7:0]==8'b00100000) onehot2tid[2:0] = 3'b101;
12093 else if (onehot[7:0]==8'b01000000) onehot2tid[2:0] = 3'b110;
12094 else if (onehot[7:0]==8'b10000000) onehot2tid[2:0] = 3'b111;
12095
12096 end
12097endfunction
12098
12099function [7:0] tid2onehot;
12100 input [2:0] tid;
12101
12102 begin
12103
12104 if (tid[2:0]==3'b000) tid2onehot[7:0] = 8'b00000001;
12105 else if (tid[2:0]==3'b001) tid2onehot[7:0] = 8'b00000010;
12106 else if (tid[2:0]==3'b010) tid2onehot[7:0] = 8'b00000100;
12107 else if (tid[2:0]==3'b011) tid2onehot[7:0] = 8'b00001000;
12108 else if (tid[2:0]==3'b100) tid2onehot[7:0] = 8'b00010000;
12109 else if (tid[2:0]==3'b101) tid2onehot[7:0] = 8'b00100000;
12110 else if (tid[2:0]==3'b110) tid2onehot[7:0] = 8'b01000000;
12111 else if (tid[2:0]==3'b111) tid2onehot[7:0] = 8'b10000000;
12112
12113 end
12114endfunction
12115
12116//---------------------
12117
12118function [255:0] xlate;
12119 input [31:0] inst;
12120
12121 begin
12122 casex(inst[31:0])
1212332'b10xxxxx110100xxxxx001000011xxxxx : xlate[255:0]="FADDq";
1212432'b10xxxxx110100xxxxx001000111xxxxx : xlate[255:0]="FSUBq";
1212532'b10000xx110101xxxxx001010011xxxxx : xlate[255:0]="FCMPq";
1212632'b10000xx110101xxxxx001010111xxxxx : xlate[255:0]="FCMPEq";
1212732'b10xxxxx110100xxxxx011001101xxxxx : xlate[255:0]="FsTOq";
1212832'b10xxxxx110100xxxxx011001110xxxxx : xlate[255:0]="FdTOq";
1212932'b10xxxxx110100xxxxx010001100xxxxx : xlate[255:0]="FxTOq";
1213032'b10xxxxx110100xxxxx011001100xxxxx : xlate[255:0]="FiTOq";
1213132'b10xxxxx110100xxxxx000000011xxxxx : xlate[255:0]="FMOVq";
1213232'b10xxxxx110100xxxxx000000111xxxxx : xlate[255:0]="FNEGq";
1213332'b10xxxxx110100xxxxx000001011xxxxx : xlate[255:0]="FABSq";
1213432'b10xxxxx110100xxxxx001001011xxxxx : xlate[255:0]="FMULq";
1213532'b10xxxxx110100xxxxx001101110xxxxx : xlate[255:0]="FdMULq";
1213632'b10xxxxx110100xxxxx001001111xxxxx : xlate[255:0]="FDIVq";
1213732'b10xxxxx110100xxxxx000101011xxxxx : xlate[255:0]="FSQRTq";
1213832'b10xxxxx1101010xxxx0xx100111xxxxx : xlate[255:0]="FMOVrQa";
1213932'b10xxxxx1101010xxxx0x1x00111xxxxx : xlate[255:0]="FMOVrQb";
1214032'b10xxxxx110100xxxxx011010011xxxxx : xlate[255:0]="FqTOi";
1214132'b10xxxxx110100xxxxx010000011xxxxx : xlate[255:0]="FqTOx";
1214232'b10xxxxx110100xxxxx011000111xxxxx : xlate[255:0]="FqTOs";
1214332'b10xxxxx110100xxxxx011001011xxxxx : xlate[255:0]="FqTOd";
1214432'b11xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQF";
1214532'b11xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFi";
1214632'b11xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQFA";
1214732'b11xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFAi";
1214832'b11xxxxx100110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFi";
1214932'b11xxxxx100110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQF";
1215032'b11xxxxx110110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQFA";
1215132'b11xxxxx110110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFAi";
1215232'b10xxxxx1101010xxxxxxx000011xxxxx : xlate[255:0]="FMOVQcc";
1215332'b10xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADD";
1215432'b10xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDcc";
1215532'b10xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDC";
1215632'b10xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDCcc";
1215732'b10xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDi";
1215832'b10xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDcci";
1215932'b10xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCi";
1216032'b10xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCcci";
1216132'b00x0xx1011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr1";
1216232'b00x0x1x011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr2";
1216332'b00xx000110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfccA";
1216432'b00xx1xx110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc1";
1216532'b00xxx1x110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc2";
1216632'b00xxxx1110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc3";
1216732'b00xx000101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfccA";
1216832'b00xx1xx101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc1";
1216932'b00xxx1x101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc2";
1217032'b00xxxx1101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc3";
1217132'b00xx000010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BiccA";
1217232'b00xx1xx010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc1";
1217332'b00xxx1x010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc2";
1217432'b00xxxx1010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc3";
1217532'b00xx000001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPccA";
1217632'b00xx1xx001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc1";
1217732'b00xxx1x001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc2";
1217832'b00xxxx1001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc3";
1217932'b01xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="CALL";
1218032'b11xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASA";
1218132'b11xxxxx111110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASXA";
1218232'b11xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASAi";
1218332'b11xxxxx111110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASXAi";
1218432'b10xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIV";
1218532'b10xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIV";
1218632'b10xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVcc";
1218732'b10xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVcc";
1218832'b10xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVi";
1218932'b10xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVi";
1219032'b10xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVcci";
1219132'b10xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVcci";
1219232'b1000000111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="DONE";
1219332'b1000001111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RETRY";
1219432'b10xxxxx110100xxxxx001000001xxxxx : xlate[255:0]="FADDs";
1219532'b10xxxxx110100xxxxx001000010xxxxx : xlate[255:0]="FADDd";
1219632'b10xxxxx110100xxxxx001000101xxxxx : xlate[255:0]="FSUBs";
1219732'b10xxxxx110100xxxxx001000110xxxxx : xlate[255:0]="FSUBd";
1219832'b10000xx110101xxxxx001010001xxxxx : xlate[255:0]="FCMPs";
1219932'b10000xx110101xxxxx001010010xxxxx : xlate[255:0]="FCMPd";
1220032'b10000xx110101xxxxx001010101xxxxx : xlate[255:0]="FCMPEs";
1220132'b10000xx110101xxxxx001010110xxxxx : xlate[255:0]="FCMPEd";
1220232'b10xxxxx110100xxxxx010000001xxxxx : xlate[255:0]="FsTOx";
1220332'b10xxxxx110100xxxxx010000010xxxxx : xlate[255:0]="FdTOx";
1220432'b10xxxxx110100xxxxx011010001xxxxx : xlate[255:0]="FsTOi";
1220532'b10xxxxx110100xxxxx011010010xxxxx : xlate[255:0]="FdTOi";
1220632'b10xxxxx110100xxxxx011001001xxxxx : xlate[255:0]="FsTOd";
1220732'b10xxxxx110100xxxxx011000110xxxxx : xlate[255:0]="FdTOs";
1220832'b10xxxxx110100xxxxx010000100xxxxx : xlate[255:0]="FxTOs";
1220932'b10xxxxx110100xxxxx010001000xxxxx : xlate[255:0]="FxTOd";
1221032'b10xxxxx110100xxxxx011000100xxxxx : xlate[255:0]="FiTOs";
1221132'b10xxxxx110100xxxxx011001000xxxxx : xlate[255:0]="FiTOd";
1221232'b10xxxxx110100xxxxx000000001xxxxx : xlate[255:0]="FMOVs";
1221332'b10xxxxx110100xxxxx000000010xxxxx : xlate[255:0]="FMOVd";
1221432'b10xxxxx110100xxxxx000000101xxxxx : xlate[255:0]="FNEGs";
1221532'b10xxxxx110100xxxxx000000110xxxxx : xlate[255:0]="FNEGd";
1221632'b10xxxxx110100xxxxx000001001xxxxx : xlate[255:0]="FABSs";
1221732'b10xxxxx110100xxxxx000001010xxxxx : xlate[255:0]="FABSd";
1221832'b10xxxxx110100xxxxx001001001xxxxx : xlate[255:0]="FMULs";
1221932'b10xxxxx110100xxxxx001001010xxxxx : xlate[255:0]="FMULd";
1222032'b10xxxxx110100xxxxx001101001xxxxx : xlate[255:0]="FsMULd";
1222132'b10xxxxx110100xxxxx001001101xxxxx : xlate[255:0]="FDIVs";
1222232'b10xxxxx110100xxxxx001001110xxxxx : xlate[255:0]="FDIVd";
1222332'b10xxxxx110100xxxxx000101001xxxxx : xlate[255:0]="FSQRTs";
1222432'b10xxxxx110100xxxxx000101010xxxxx : xlate[255:0]="FSQRTd";
1222532'b10xxxxx111011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSH";
1222632'b10xxxxx111011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="FLUSHi";
1222732'b10xxxxx101011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSHw";
1222832'b10xxxxx111000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="JMPL";
1222932'b10xxxxx111000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="JMPLi";
1223032'b11xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDF";
1223132'b11xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDF";
1223232'b1100000100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFSR";
1223332'b1100001100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXFSR";
1223432'b11xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFi";
1223532'b11xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFi";
1223632'b1100000100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFSRi";
1223732'b1100001100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXFSRi";
1223832'b11xxxxx110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFA";
1223932'b11xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDFA";
1224032'b11xxxxx110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFAi";
1224132'b11xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFAi";
1224232'b11xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSB";
1224332'b11xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSH";
1224432'b11xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSW";
1224532'b11xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUB";
1224632'b11xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUH";
1224732'b11xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUW";
1224832'b11xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDX";
1224932'b11xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDD";
1225032'b11xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBi";
1225132'b11xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHi";
1225232'b11xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWi";
1225332'b11xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBi";
1225432'b11xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHi";
1225532'b11xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWi";
1225632'b11xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXi";
1225732'b11xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDi";
1225832'b11xxxxx011001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSBA";
1225932'b11xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSHA";
1226032'b11xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSWA";
1226132'b11xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUBA";
1226232'b11xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUHA";
1226332'b11xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUWA";
1226432'b11xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXA";
1226532'b11xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDA";
1226632'b11xxxxx011001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBAi";
1226732'b11xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHAi";
1226832'b11xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWAi";
1226932'b11xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBAi";
1227032'b11xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHAi";
1227132'b11xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWAi";
1227232'b11xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXAi";
1227332'b11xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDAi";
1227432'b11xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUB";
1227532'b11xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBi";
1227632'b11xxxxx011101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUBA";
1227732'b11xxxxx011101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBAi";
1227832'b10xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="AND";
1227932'b10xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDcc";
1228032'b10xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDN";
1228132'b10xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDNcc";
1228232'b10xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="OR";
1228332'b10xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORcc";
1228432'b10xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORN";
1228532'b10xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORNcc";
1228632'b10xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XOR";
1228732'b10xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XORcc";
1228832'b10xxxxx000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNOR";
1228932'b10xxxxx010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNORcc";
1229032'b10xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDi";
1229132'b10xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDcci";
1229232'b10xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNi";
1229332'b10xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNcci";
1229432'b10xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORi";
1229532'b10xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORcci";
1229632'b10xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNi";
1229732'b10xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNcci";
1229832'b10xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORi";
1229932'b10xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORcci";
1230032'b10xxxxx000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORi";
1230132'b10xxxxx010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORcci";
1230232'b1000000101000011111xxxxxxxxxxxxx : xlate[255:0]="MEMBAR";
1230332'b1000000101000011110xxxxxxxxxxxxx : xlate[255:0]="STBAR";
1230432'b10xxxxx101000000000xxxxxxxxxxxxx : xlate[255:0]="RDY";
1230532'b10xxxxx101000000100xxxxxxxxxxxxx : xlate[255:0]="RDCCR";
1230632'b10xxxxx101000000110xxxxxxxxxxxxx : xlate[255:0]="RDASI";
1230732'b10xxxxx101000001000xxxxxxxxxxxxx : xlate[255:0]="RDTICK";
1230832'b10xxxxx101000001010xxxxxxxxxxxxx : xlate[255:0]="RDPC";
1230932'b10xxxxx101000001100xxxxxxxxxxxxx : xlate[255:0]="RDFPRS";
1231032'b10xxxxx101000100110xxxxxxxxxxxxx : xlate[255:0]="RDGSR";
1231132'b10xxxxx101000100000xxxxxxxxxxxxx : xlate[255:0]="RDPCR";
1231232'b10xxxxx101000100010xxxxxxxxxxxxx : xlate[255:0]="RDPIC";
1231332'b10xxxxx1101010xxxx0xx000001xxxxx : xlate[255:0]="FMOVSfcc";
1231432'b10xxxxx1101010xxxx1xx000001xxxxx : xlate[255:0]="FMOVSxcc";
1231532'b10xxxxx1101010xxxx0xx000010xxxxx : xlate[255:0]="FMOVDfcc";
1231632'b10xxxxx1101010xxxx1xx000010xxxxx : xlate[255:0]="FMOVDxcc";
1231732'b10xxxxx110101xxxxx0xx100101xxxxx : xlate[255:0]="FMOVrS1";
1231832'b10xxxxx110101xxxxx0x1x00101xxxxx : xlate[255:0]="FMOVrS2";
1231932'b10xxxxx110101xxxxx0xx100110xxxxx : xlate[255:0]="FMOVrD1";
1232032'b10xxxxx110101xxxxx0x1x00110xxxxx : xlate[255:0]="FMOVrD2";
1232132'b10xxxxx1011001xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVxcc";
1232232'b10xxxxx1011001xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVxcci";
1232332'b10xxxxx1011000xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVfcc";
1232432'b10xxxxx1011000xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVfcci";
1232532'b10xxxxx101111xxxxx0xx1xxxxxxxxxx : xlate[255:0]="MOVR1";
1232632'b10xxxxx101111xxxxx0x1xxxxxxxxxxx : xlate[255:0]="MOVR2";
1232732'b10xxxxx101111xxxxx1xx1xxxxxxxxxx : xlate[255:0]="MOVRi1";
1232832'b10xxxxx101111xxxxx1x1xxxxxxxxxxx : xlate[255:0]="MOVRi2";
1232932'b10xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULX";
1233032'b10xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVX";
1233132'b10xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVX";
1233232'b10xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULXi";
1233332'b10xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVXi";
1233432'b10xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVXi";
1233532'b10xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMUL";
1233632'b10xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMUL";
1233732'b10xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMULcc";
1233832'b10xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMULcc";
1233932'b10xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULi";
1234032'b10xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULi";
1234132'b10xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULcci";
1234232'b10xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULcci";
1234332'b10xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULScc";
1234432'b10xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULScci";
1234532'b10xxxxx101110000000xxxxxxxxxxxxx : xlate[255:0]="POPC";
1234632'b10xxxxx101110000001xxxxxxxxxxxxx : xlate[255:0]="POPCi";
1234732'b11xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCH";
1234832'b11xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHi";
1234932'b11xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCHA";
1235032'b11xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHAi";
1235132'b10xxxxx101010xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDPR";
1235232'b10xxxxx101001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDHPR";
1235332'b10xxxxx111001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RETURN";
1235432'b10xxxxx111001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RETURNi";
1235532'b10xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SAVE";
1235632'b10xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SAVEi";
1235732'b10xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RESTORE";
1235832'b10xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RESTOREi";
1235932'b1000000110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="SAVED";
1236032'b1000001110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RESTORED";
1236132'b00xxxxx100xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="SETHI";
1236232'b10xxxxx100101xxxxx00xxxxxxxxxxxx : xlate[255:0]="SLL";
1236332'b10xxxxx100110xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRL";
1236432'b10xxxxx100111xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRA";
1236532'b10xxxxx100101xxxxx01xxxxxxxxxxxx : xlate[255:0]="SLLX";
1236632'b10xxxxx100110xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRLX";
1236732'b10xxxxx100111xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRAX";
1236832'b10xxxxx100101xxxxx10xxxxxxxxxxxx : xlate[255:0]="SLLi";
1236932'b10xxxxx100110xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRLi";
1237032'b10xxxxx100111xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRAi";
1237132'b10xxxxx100101xxxxx11xxxxxxxxxxxx : xlate[255:0]="SLLXi";
1237232'b10xxxxx100110xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRLXi";
1237332'b10xxxxx100111xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRAXi";
1237432'b11xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STF";
1237532'b11xxxxx100111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDF";
1237632'b1100000100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFSR";
1237732'b1100001100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXFSR";
1237832'b11xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFi";
1237932'b11xxxxx100111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFi";
1238032'b1100000100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFSRi";
1238132'b1100001100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXFSRi";
1238232'b11xxxxx110100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFA";
1238332'b11xxxxx110111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDFA";
1238432'b11xxxxx110100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFAi";
1238532'b11xxxxx110111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFAi";
1238632'b11xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STB";
1238732'b11xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STH";
1238832'b11xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STW";
1238932'b11xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STX";
1239032'b11xxxx0000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STD";
1239132'b11xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBi";
1239232'b11xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHi";
1239332'b11xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWi";
1239432'b11xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXi";
1239532'b11xxxx0000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDi";
1239632'b11xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STBA";
1239732'b11xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STHA";
1239832'b11xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STWA";
1239932'b11xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXA";
1240032'b11xxxx0010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDA";
1240132'b11xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBAi";
1240232'b11xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHAi";
1240332'b11xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWAi";
1240432'b11xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXAi";
1240532'b11xxxx0010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDAi";
1240632'b10xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUB";
1240732'b10xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBcc";
1240832'b10xxxxx001100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBC";
1240932'b10xxxxx011100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBCcc";
1241032'b10xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBi";
1241132'b10xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBcci";
1241232'b10xxxxx001100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCi";
1241332'b10xxxxx011100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCcci";
1241432'b11xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAP";
1241532'b11xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPi";
1241632'b11xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAPA";
1241732'b11xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPAi";
1241832'b10xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDcc";
1241932'b10xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDccTV";
1242032'b10xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDcci";
1242132'b10xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDccTVi";
1242232'b10xxxxx100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBcc";
1242332'b10xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBccTV";
1242432'b10xxxxx100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBcci";
1242532'b10xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBccTVi";
1242632'b10xxxxx111010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TCC";
1242732'b10xxxxx111010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TCCi";
1242832'b10xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPR";
1242932'b10xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPRi";
1243032'b10xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRHPR";
1243132'b10xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRHPRi";
1243232'b1000000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRY";
1243332'b1000010110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRCCR";
1243432'b1000011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRASI";
1243532'b1000110110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRFPRS";
1243632'b1010011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRGSR";
1243732'b1010000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPCR";
1243832'b1010001110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPIC";
1243932'b1000000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRYi";
1244032'b1000010110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRCCRi";
1244132'b1000011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRASIi";
1244232'b1000110110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRFPRSi";
1244332'b1010011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRGSRi";
1244432'b1010000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPCRi";
1244532'b1010001110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPICi";
1244632'b1001111110000000001xxxxxxxxxxxxx : xlate[255:0]="SIR";
1244732'b10xxxxx110110xxxxx001010000xxxxx : xlate[255:0]="FPADD16";
1244832'b10xxxxx110110xxxxx001010001xxxxx : xlate[255:0]="FPADD16S";
1244932'b10xxxxx110110xxxxx001010010xxxxx : xlate[255:0]="FPADD32";
1245032'b10xxxxx110110xxxxx001010011xxxxx : xlate[255:0]="FPADD32S";
1245132'b10xxxxx110110xxxxx001010100xxxxx : xlate[255:0]="FPSUB16";
1245232'b10xxxxx110110xxxxx001010101xxxxx : xlate[255:0]="FPSUB16S";
1245332'b10xxxxx110110xxxxx001010110xxxxx : xlate[255:0]="FPSUB32";
1245432'b10xxxxx110110xxxxx001010111xxxxx : xlate[255:0]="FPSUB32S";
1245532'b10xxxxx110110xxxxx000111011xxxxx : xlate[255:0]="FPACK16";
1245632'b10xxxxx110110xxxxx000111010xxxxx : xlate[255:0]="FPACK32";
1245732'b10xxxxx110110xxxxx000111101xxxxx : xlate[255:0]="FPACKFIX";
1245832'b10xxxxx110110xxxxx001001101xxxxx : xlate[255:0]="FEXPAND";
1245932'b10xxxxx110110xxxxx001001011xxxxx : xlate[255:0]="FPMERGE";
1246032'b10xxxxx110110xxxxx000110001xxxxx : xlate[255:0]="FMUL8x16";
1246132'b10xxxxx110110xxxxx000110011xxxxx : xlate[255:0]="FMUL8x16AU";
1246232'b10xxxxx110110xxxxx000110101xxxxx : xlate[255:0]="FMUL8x16AL";
1246332'b10xxxxx110110xxxxx000110110xxxxx : xlate[255:0]="FMUL8SUx16";
1246432'b10xxxxx110110xxxxx000110111xxxxx : xlate[255:0]="FMUL8ULx16";
1246532'b10xxxxx110110xxxxx000111000xxxxx : xlate[255:0]="FMULD8SUx16";
1246632'b10xxxxx110110xxxxx000111001xxxxx : xlate[255:0]="FMULD8ULx16";
1246732'b10xxxxx110110xxxxx000011000xxxxx : xlate[255:0]="ALIGNADDRESS";
1246832'b10xxxxx110110xxxxx000011010xxxxx : xlate[255:0]="ALIGNADDRESS_LITTLE";
1246932'b10xxxxx110110xxxxx000011001xxxxx : xlate[255:0]="BMASK";
1247032'b10xxxxx110110xxxxx001001000xxxxx : xlate[255:0]="FALIGNDATA";
1247132'b10xxxxx110110xxxxx001001100xxxxx : xlate[255:0]="BSHUFFLE";
1247232'b10xxxxx110110xxxxx001100000xxxxx : xlate[255:0]="FZERO";
1247332'b10xxxxx110110xxxxx001100001xxxxx : xlate[255:0]="FZEROS";
1247432'b10xxxxx110110xxxxx001111110xxxxx : xlate[255:0]="FONE";
1247532'b10xxxxx110110xxxxx001111111xxxxx : xlate[255:0]="FONES";
1247632'b10xxxxx110110xxxxx001110100xxxxx : xlate[255:0]="FSRC1";
1247732'b10xxxxx110110xxxxx001110101xxxxx : xlate[255:0]="FSRC1S";
1247832'b10xxxxx110110xxxxx001111000xxxxx : xlate[255:0]="FSRC2";
1247932'b10xxxxx110110xxxxx001111001xxxxx : xlate[255:0]="FSRC2S";
1248032'b10xxxxx110110xxxxx001101010xxxxx : xlate[255:0]="FNOT1";
1248132'b10xxxxx110110xxxxx001101011xxxxx : xlate[255:0]="FNOT1S";
1248232'b10xxxxx110110xxxxx001100110xxxxx : xlate[255:0]="FNOT2";
1248332'b10xxxxx110110xxxxx001100111xxxxx : xlate[255:0]="FNOT2S";
1248432'b10xxxxx110110xxxxx001111100xxxxx : xlate[255:0]="FOR";
1248532'b10xxxxx110110xxxxx001111101xxxxx : xlate[255:0]="FORS";
1248632'b10xxxxx110110xxxxx001100010xxxxx : xlate[255:0]="FNOR";
1248732'b10xxxxx110110xxxxx001100011xxxxx : xlate[255:0]="FNORS";
1248832'b10xxxxx110110xxxxx001110000xxxxx : xlate[255:0]="FAND";
1248932'b10xxxxx110110xxxxx001110001xxxxx : xlate[255:0]="FANDS";
1249032'b10xxxxx110110xxxxx001101110xxxxx : xlate[255:0]="FNAND";
1249132'b10xxxxx110110xxxxx001101111xxxxx : xlate[255:0]="FNANDS";
1249232'b10xxxxx110110xxxxx001101100xxxxx : xlate[255:0]="FXOR";
1249332'b10xxxxx110110xxxxx001101101xxxxx : xlate[255:0]="FXORS";
1249432'b10xxxxx110110xxxxx001110010xxxxx : xlate[255:0]="FXNOR";
1249532'b10xxxxx110110xxxxx001110011xxxxx : xlate[255:0]="FXNORS";
1249632'b10xxxxx110110xxxxx001111010xxxxx : xlate[255:0]="FORNOT1";
1249732'b10xxxxx110110xxxxx001111011xxxxx : xlate[255:0]="FORNOT1S";
1249832'b10xxxxx110110xxxxx001110110xxxxx : xlate[255:0]="FORNOT2";
1249932'b10xxxxx110110xxxxx001110111xxxxx : xlate[255:0]="FORNOT2S";
1250032'b10xxxxx110110xxxxx001101000xxxxx : xlate[255:0]="FANDNOT1";
1250132'b10xxxxx110110xxxxx001101001xxxxx : xlate[255:0]="FANDNOT1S";
1250232'b10xxxxx110110xxxxx001100100xxxxx : xlate[255:0]="FANDNOT2";
1250332'b10xxxxx110110xxxxx001100101xxxxx : xlate[255:0]="FANDNOT2S";
1250432'b10xxxxx110110xxxxx000101000xxxxx : xlate[255:0]="FCMPGT16";
1250532'b10xxxxx110110xxxxx000101100xxxxx : xlate[255:0]="FCMPGT32";
1250632'b10xxxxx110110xxxxx000100000xxxxx : xlate[255:0]="FCMPLE16";
1250732'b10xxxxx110110xxxxx000100100xxxxx : xlate[255:0]="FCMPLE32";
1250832'b10xxxxx110110xxxxx000100010xxxxx : xlate[255:0]="FCMPNE16";
1250932'b10xxxxx110110xxxxx000100110xxxxx : xlate[255:0]="FCMPNE32";
1251032'b10xxxxx110110xxxxx000101010xxxxx : xlate[255:0]="FCMPEQ16";
1251132'b10xxxxx110110xxxxx000101110xxxxx : xlate[255:0]="FCMPEQ32";
1251232'b10xxxxx110110xxxxx000111110xxxxx : xlate[255:0]="PDIST";
1251332'b10xxxxx110110xxxxx000000000xxxxx : xlate[255:0]="EDGE8";
1251432'b10xxxxx110110xxxxx000000001xxxxx : xlate[255:0]="EDGE8N";
1251532'b10xxxxx110110xxxxx000000010xxxxx : xlate[255:0]="EDGE8L";
1251632'b10xxxxx110110xxxxx000000011xxxxx : xlate[255:0]="EDGE8LN";
1251732'b10xxxxx110110xxxxx000000100xxxxx : xlate[255:0]="EDGE16";
1251832'b10xxxxx110110xxxxx000000101xxxxx : xlate[255:0]="EDGE16N";
1251932'b10xxxxx110110xxxxx000000110xxxxx : xlate[255:0]="EDGE16L";
1252032'b10xxxxx110110xxxxx000000111xxxxx : xlate[255:0]="EDGE16LN";
1252132'b10xxxxx110110xxxxx000001000xxxxx : xlate[255:0]="EDGE32";
1252232'b10xxxxx110110xxxxx000001001xxxxx : xlate[255:0]="EDGE32N";
1252332'b10xxxxx110110xxxxx000001010xxxxx : xlate[255:0]="EDGE32L";
1252432'b10xxxxx110110xxxxx000001011xxxxx : xlate[255:0]="EDGE32LN";
1252532'b10xxxxx110110xxxxx000010000xxxxx : xlate[255:0]="ARRAY8";
1252632'b10xxxxx110110xxxxx000010010xxxxx : xlate[255:0]="ARRAY16";
1252732'b10xxxxx110110xxxxx000010100xxxxx : xlate[255:0]="ARRAY32";
1252832'b10xxxxx110110xxxxx010000001xxxxx : xlate[255:0]="SIAM";
12529 default : xlate[255:0]="unknown";
12530 endcase
12531 end
12532endfunction // xlate
12533
12534
12535`endif
12536
12537endmodule
12538
12539`endif
12540
12541
12542`ifdef CORE_5
12543
12544module nas_probes5;
12545
12546
12547`ifdef GATESIM
12548
12549
12550`else
12551 reg [7:0] ex_valid_m;
12552 reg [7:0] ex_valid_b;
12553 reg [7:0] ex_valid_w;
12554 reg [7:0] return_f4;
12555 reg [2:0] ex0_tid_m;
12556 reg [2:0] ex1_tid_m;
12557 reg [2:0] ex0_tid_b;
12558 reg [2:0] ex1_tid_b;
12559 reg [2:0] ex0_tid_w;
12560 reg [2:0] ex1_tid_w;
12561 reg fgu_valid_fb0;
12562 reg fgu_valid_fb1;
12563
12564 reg [31:0] inst0_e;
12565 reg [31:0] inst1_e;
12566
12567 reg [7:0] fg_valid;
12568
12569 reg fcc_valid_f4;
12570 reg fcc_valid_f5;
12571 reg fcc_valid_fb;
12572
12573 reg fgu0_e;
12574 reg fgu1_e;
12575 reg lsu0_e;
12576 reg lsu1_e;
12577
12578 reg [1:0] dcd_idest_e;
12579 reg [1:0] dcd_fdest_e;
12580
12581 wire [7:0] ex_valid;
12582 wire [7:0] exception_w;
12583
12584 wire [7:0] imul_valid;
12585
12586 wire fg_cond_fb;
12587
12588 wire exu_lsu_valid;
12589 wire [47:0] exu_lsu_addr;
12590 wire [31:0] exu_lsu_instr;
12591 wire [2:0] exu_lsu_tid;
12592 wire [4:0] exu_lsu_regid;
12593 wire [63:0] exu_lsu_data;
12594
12595 wire [2:0] ex0_tid_e;
12596 wire [2:0] ex1_tid_e;
12597 wire ex0_valid_e;
12598 wire ex1_valid_e;
12599 wire [7:0] ex_asr_access;
12600 wire ex_asr_valid;
12601
12602 wire [7:0] lsu_valid;
12603 wire [2:0] lsu_tid;
12604 wire [7:0] lsu_tid_dec_b;
12605 wire lsu_ld_valid;
12606 reg [7:0] lsu_data_w;
12607 wire [7:0] lsu_data_b;
12608
12609 wire ld_inst_d;
12610
12611 reg [7:0] div_idest;
12612 reg [7:0] div_fdest;
12613
12614 reg load0_e;
12615 reg load1_e;
12616
12617 reg load_m;
12618 reg load_b;
12619
12620 reg [2:0] lsu_tid_m;
12621 reg [7:0] lsu_complete_m;
12622 reg [7:0] lsu_complete_b;
12623 reg [7:0] lsu_trap_flush_d; //reqd. for store buffer ue testing
12624
12625 reg [7:0] ex_flush_w;
12626 reg [7:0] ex_flush_b;
12627
12628 reg sel_divide0_e;
12629 reg sel_divide1_e;
12630
12631 wire dec_flush_lb;
12632
12633 wire [7:0] fgu_idiv_valid;
12634
12635 wire [7:0] fgu_fdiv_valid;
12636
12637 wire [7:0] fg_div_valid;
12638
12639 wire lsu_valid_b;
12640
12641 wire [7:0] return_w;
12642 wire return0;
12643 wire return1;
12644 wire [7:0] real_exception;
12645
12646 reg [2:0] lsu_tid_b;
12647 reg fmov_valid_fb;
12648 reg fmov_valid_f5;
12649 reg fmov_valid_f4;
12650 reg fmov_valid_f3;
12651 reg fmov_valid_f2;
12652 reg fmov_valid_m;
12653 reg fmov_valid_e;
12654
12655 reg fg_flush_fb;
12656 reg fg_flush_f5;
12657 reg fg_flush_f4;
12658 reg fg_flush_f3;
12659 reg fg_flush_f2;
12660
12661 reg siam0_d;
12662 reg siam1_d;
12663
12664 reg done0_d;
12665 reg done1_d;
12666 reg retry0_d;
12667 reg retry1_d;
12668 reg done0_e;
12669 reg done1_e;
12670 reg retry0_e;
12671 reg retry1_e;
12672 reg tlu_ccr_cwp_0_valid_last;
12673 reg tlu_ccr_cwp_1_valid_last;
12674 reg [7:0] fg_fdiv_valid_fw;
12675 reg [7:0] asi_in_progress_b;
12676 reg [7:0] asi_in_progress_w;
12677 reg [7:0] asi_in_progress_fx4;
12678 reg [7:0] tlu_valid;
12679 reg [7:0] sync_reset_w;
12680
12681 reg [7:0] div_special_cancel_f4;
12682
12683 reg asi_store_b;
12684 reg asi_store_w;
12685 reg [2:0] dcc_tid_b;
12686 reg [2:0] dcc_tid_w;
12687 reg [7:0] asi_valid_w;
12688 reg [7:0] asi_valid_fx4;
12689 reg [7:0] asi_valid_fx5;
12690
12691 reg [7:0] lsu_state;
12692 reg [7:0] lsu_check;
12693 reg [2:0] lsu_tid_e;
12694
12695 reg [47:0] pc_0_e;
12696 reg [47:0] pc_1_e;
12697 reg [47:0] pc_0_m;
12698 reg [47:0] pc_1_m;
12699 reg [47:0] pc_0_b;
12700 reg [47:0] pc_1_b;
12701 reg [47:0] pc_0_w;
12702 reg [47:0] pc_1_w;
12703 reg [47:0] pc_2_w;
12704 reg [47:0] pc_3_w;
12705 reg [47:0] pc_4_w;
12706 reg [47:0] pc_5_w;
12707 reg [47:0] pc_6_w;
12708 reg [47:0] pc_7_w;
12709
12710 reg fgu_err_fx3;
12711 reg fgu_err_fx4;
12712 reg fgu_err_fx5;
12713 reg fgu_err_fb;
12714
12715 reg clkstop_d1;
12716 reg clkstop_d2;
12717 reg clkstop_d3;
12718 reg clkstop_d4;
12719 reg clkstop_d5;
12720
12721integer i;
12722integer start_dmiss0;
12723integer start_dmiss1;
12724integer start_dmiss2;
12725integer start_dmiss3;
12726integer start_dmiss4;
12727integer start_dmiss5;
12728integer start_dmiss6;
12729integer start_dmiss7;
12730integer number_dmiss;
12731integer start_imiss0;
12732integer start_imiss1;
12733integer start_imiss2;
12734integer start_imiss3;
12735integer start_imiss4;
12736integer start_imiss5;
12737integer start_imiss6;
12738integer start_imiss7;
12739integer active_imiss0;
12740integer active_imiss1;
12741integer active_imiss2;
12742integer active_imiss3;
12743integer active_imiss4;
12744integer active_imiss5;
12745integer active_imiss6;
12746integer active_imiss7;
12747integer first_imiss0;
12748integer first_imiss1;
12749integer first_imiss2;
12750integer first_imiss3;
12751integer first_imiss4;
12752integer first_imiss5;
12753integer first_imiss6;
12754integer first_imiss7;
12755integer number_imiss;
12756integer clock;
12757integer sum_dmiss_latency;
12758integer sum_imiss_latency;
12759reg spec_dmiss;
12760integer dmiss_cnt;
12761integer imiss_cnt;
12762reg pcx_req;
12763integer l15dmiss_cnt;
12764integer l15imiss_cnt;
12765
12766
12767initial begin // {
12768 pcx_req=0;
12769 l15imiss_cnt=0;
12770 l15dmiss_cnt=0;
12771 imiss_cnt=0;
12772 dmiss_cnt=0;
12773 clock=0;
12774 start_dmiss0=0;
12775 start_dmiss1=0;
12776 start_dmiss2=0;
12777 start_dmiss3=0;
12778 start_dmiss4=0;
12779 start_dmiss5=0;
12780 start_dmiss6=0;
12781 start_dmiss7=0;
12782 number_dmiss=0;
12783 start_imiss0=0;
12784 start_imiss1=0;
12785 start_imiss2=0;
12786 start_imiss3=0;
12787 start_imiss4=0;
12788 start_imiss5=0;
12789 start_imiss6=0;
12790 start_imiss7=0;
12791 active_imiss0=0;
12792 active_imiss1=0;
12793 active_imiss2=0;
12794 active_imiss3=0;
12795 active_imiss4=0;
12796 active_imiss5=0;
12797 active_imiss6=0;
12798 active_imiss7=0;
12799 first_imiss0=0;
12800 first_imiss1=0;
12801 first_imiss2=0;
12802 first_imiss3=0;
12803 first_imiss4=0;
12804 first_imiss5=0;
12805 first_imiss6=0;
12806 first_imiss7=0;
12807 number_imiss=0;
12808 sum_dmiss_latency=0;
12809 sum_imiss_latency=0;
12810 asi_in_progress_b <= 8'h0;
12811 asi_in_progress_w <= 8'h0;
12812 asi_in_progress_fx4 <= 8'h0;
12813 tlu_valid <= 8'h0;
12814 div_idest <= 8'h0;
12815 div_fdest <= 8'h0;
12816 lsu_state <= 8'h0;
12817 clkstop_d1 <=0;
12818 clkstop_d2 <=0;
12819 clkstop_d3 <=0;
12820 clkstop_d4 <=0;
12821 clkstop_d5 <=0;
12822
12823end //}
12824
12825wire [7:0] asi_store_flush_w = {`SPC5.lsu.sbs7.flush_st_w,
12826 `SPC5.lsu.sbs6.flush_st_w,
12827 `SPC5.lsu.sbs5.flush_st_w,
12828 `SPC5.lsu.sbs4.flush_st_w,
12829 `SPC5.lsu.sbs3.flush_st_w,
12830 `SPC5.lsu.sbs2.flush_st_w,
12831 `SPC5.lsu.sbs1.flush_st_w,
12832 `SPC5.lsu.sbs0.flush_st_w};
12833
12834wire [7:0] store_sync = {`SPC5.lsu.sbs7.trap_sync,
12835 `SPC5.lsu.sbs6.trap_sync,
12836 `SPC5.lsu.sbs5.trap_sync,
12837 `SPC5.lsu.sbs4.trap_sync,
12838 `SPC5.lsu.sbs3.trap_sync,
12839 `SPC5.lsu.sbs2.trap_sync,
12840 `SPC5.lsu.sbs1.trap_sync,
12841 `SPC5.lsu.sbs0.trap_sync};
12842wire [7:0] sync_reset = {`SPC5.lsu.sbs7.sync_state_rst,
12843 `SPC5.lsu.sbs6.sync_state_rst,
12844 `SPC5.lsu.sbs5.sync_state_rst,
12845 `SPC5.lsu.sbs4.sync_state_rst,
12846 `SPC5.lsu.sbs3.sync_state_rst,
12847 `SPC5.lsu.sbs2.sync_state_rst,
12848 `SPC5.lsu.sbs1.sync_state_rst,
12849 `SPC5.lsu.sbs0.sync_state_rst};
12850
12851//--------------------
12852// Used in nas_pipe for TSB Config Regs Capture/Compare
12853// ADD_TSB_CFG
12854
12855// NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
12856`ifndef EMUL
12857wire [63:0] ctxt_z_tsb_cfg0_reg [7:0]; // 1 per thread
12858wire [63:0] ctxt_z_tsb_cfg1_reg [7:0];
12859wire [63:0] ctxt_z_tsb_cfg2_reg [7:0];
12860wire [63:0] ctxt_z_tsb_cfg3_reg [7:0];
12861wire [63:0] ctxt_nz_tsb_cfg0_reg [7:0];
12862wire [63:0] ctxt_nz_tsb_cfg1_reg [7:0];
12863wire [63:0] ctxt_nz_tsb_cfg2_reg [7:0];
12864wire [63:0] ctxt_nz_tsb_cfg3_reg [7:0];
12865
12866// There are 32 entries in each MMU MRA but not all are needed.
12867// Indexing:
12868// Bits 4:3 of the address are the lower two bits of the TID
12869// Bits 2:0 of the address select the register as below
12870// mmu.mra0.array.mem for T0-T3
12871// mmu.mra1.array.mem for T4-T7
12872// (this is documented in mmu_asi_ctl.sv)
12873// z TSB cfg 0,1 address 0
12874// z TSB cfg 2,3 address 1
12875// nz TSB cfg 0,1 address 2
12876// nz TSB cfg 2,3 address 3
12877// Real range, physical offset pair 0 address 4
12878// Real range, physical offset pair 1 address 5
12879// Real range, physical offset pair 2 address 6
12880// Real range, physical offset pair 3 address 7
12881
12882wire [83:0] mmu_mra0_a0 = `SPC5.mmu.mra0.array.mem[0];
12883wire [83:0] mmu_mra0_a8 = `SPC5.mmu.mra0.array.mem[8];
12884wire [83:0] mmu_mra0_a16 = `SPC5.mmu.mra0.array.mem[16];
12885wire [83:0] mmu_mra0_a24 = `SPC5.mmu.mra0.array.mem[24];
12886wire [83:0] mmu_mra0_a1 = `SPC5.mmu.mra0.array.mem[1];
12887wire [83:0] mmu_mra0_a9 = `SPC5.mmu.mra0.array.mem[9];
12888wire [83:0] mmu_mra0_a17 = `SPC5.mmu.mra0.array.mem[17];
12889wire [83:0] mmu_mra0_a25 = `SPC5.mmu.mra0.array.mem[25];
12890wire [83:0] mmu_mra0_a2 = `SPC5.mmu.mra0.array.mem[2];
12891wire [83:0] mmu_mra0_a10 = `SPC5.mmu.mra0.array.mem[10];
12892wire [83:0] mmu_mra0_a18 = `SPC5.mmu.mra0.array.mem[18];
12893wire [83:0] mmu_mra0_a26 = `SPC5.mmu.mra0.array.mem[26];
12894wire [83:0] mmu_mra0_a3 = `SPC5.mmu.mra0.array.mem[3];
12895wire [83:0] mmu_mra0_a11 = `SPC5.mmu.mra0.array.mem[11];
12896wire [83:0] mmu_mra0_a19 = `SPC5.mmu.mra0.array.mem[19];
12897wire [83:0] mmu_mra0_a27 = `SPC5.mmu.mra0.array.mem[27];
12898wire [83:0] mmu_mra1_a0 = `SPC5.mmu.mra1.array.mem[0];
12899wire [83:0] mmu_mra1_a8 = `SPC5.mmu.mra1.array.mem[8];
12900wire [83:0] mmu_mra1_a16 = `SPC5.mmu.mra1.array.mem[16];
12901wire [83:0] mmu_mra1_a24 = `SPC5.mmu.mra1.array.mem[24];
12902wire [83:0] mmu_mra1_a1 = `SPC5.mmu.mra1.array.mem[1];
12903wire [83:0] mmu_mra1_a9 = `SPC5.mmu.mra1.array.mem[9];
12904wire [83:0] mmu_mra1_a17 = `SPC5.mmu.mra1.array.mem[17];
12905wire [83:0] mmu_mra1_a25 = `SPC5.mmu.mra1.array.mem[25];
12906wire [83:0] mmu_mra1_a2 = `SPC5.mmu.mra1.array.mem[2];
12907wire [83:0] mmu_mra1_a10 = `SPC5.mmu.mra1.array.mem[10];
12908wire [83:0] mmu_mra1_a18 = `SPC5.mmu.mra1.array.mem[18];
12909wire [83:0] mmu_mra1_a26 = `SPC5.mmu.mra1.array.mem[26];
12910wire [83:0] mmu_mra1_a3 = `SPC5.mmu.mra1.array.mem[3];
12911wire [83:0] mmu_mra1_a11 = `SPC5.mmu.mra1.array.mem[11];
12912wire [83:0] mmu_mra1_a19 = `SPC5.mmu.mra1.array.mem[19];
12913wire [83:0] mmu_mra1_a27 = `SPC5.mmu.mra1.array.mem[27];
12914
12915
12916// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
12917// as well as the physical to architectural bit position relationships.
12918assign ctxt_z_tsb_cfg0_reg[0] = {`SPC5.mmu.asi.t0_e_z[0], // z_tsb_cfg0[63]
12919 mmu_mra0_a0[76:75], // z_tsb_cfg0[62:61]
12920 21'b0, // z_tsb_cfg0[60:40]
12921 mmu_mra0_a0[74:48], // z_tsb_cfg0[39:13]
12922 4'b0, // z_tsb_cfg0[12:9]
12923 mmu_mra0_a0[47:39] // z_tsb_cfg0[8:0]
12924 };
12925assign ctxt_z_tsb_cfg1_reg[0] = {`SPC5.mmu.asi.t0_e_z[1], // z_tsb_cfg0[63]
12926 mmu_mra0_a0[37:36], // z_tsb_cfg0[62:61]
12927 21'b0, // z_tsb_cfg0[60:40]
12928 mmu_mra0_a0[35:9], // z_tsb_cfg0[39:13]
12929 4'b0, // z_tsb_cfg0[12:9]
12930 mmu_mra0_a0[8:0] // z_tsb_cfg0[8:0]
12931 };
12932assign ctxt_z_tsb_cfg2_reg[0] = {`SPC5.mmu.asi.t0_e_z[2], // z_tsb_cfg0[63]
12933 mmu_mra0_a1[76:75], // z_tsb_cfg0[62:61]
12934 21'b0, // z_tsb_cfg0[60:40]
12935 mmu_mra0_a1[74:48], // z_tsb_cfg0[39:13]
12936 4'b0, // z_tsb_cfg0[12:9]
12937 mmu_mra0_a1[47:39] // z_tsb_cfg0[8:0]
12938 };
12939assign ctxt_z_tsb_cfg3_reg[0] = {`SPC5.mmu.asi.t0_e_z[3], // z_tsb_cfg0[63]
12940 mmu_mra0_a1[37:36], // z_tsb_cfg0[62:61]
12941 21'b0, // z_tsb_cfg0[60:40]
12942 mmu_mra0_a1[35:9], // z_tsb_cfg0[39:13]
12943 4'b0, // z_tsb_cfg0[12:9]
12944 mmu_mra0_a1[8:0] // z_tsb_cfg0[8:0]
12945 };
12946assign ctxt_nz_tsb_cfg0_reg[0] = {`SPC5.mmu.asi.t0_e_nz[0],// z_tsb_cfg0[63]
12947 mmu_mra0_a2[76:75], // z_tsb_cfg0[62:61]
12948 21'b0, // z_tsb_cfg0[60:40]
12949 mmu_mra0_a2[74:48], // z_tsb_cfg0[39:13]
12950 4'b0, // z_tsb_cfg0[12:9]
12951 mmu_mra0_a2[47:39] // z_tsb_cfg0[8:0]
12952 };
12953assign ctxt_nz_tsb_cfg1_reg[0] = {`SPC5.mmu.asi.t0_e_nz[1],// z_tsb_cfg0[63]
12954 mmu_mra0_a2[37:36], // z_tsb_cfg0[62:61]
12955 21'b0, // z_tsb_cfg0[60:40]
12956 mmu_mra0_a2[35:9], // z_tsb_cfg0[39:13]
12957 4'b0, // z_tsb_cfg0[12:9]
12958 mmu_mra0_a2[8:0] // z_tsb_cfg0[8:0]
12959 };
12960assign ctxt_nz_tsb_cfg2_reg[0] = {`SPC5.mmu.asi.t0_e_nz[2],// z_tsb_cfg0[63]
12961 mmu_mra0_a3[76:75], // z_tsb_cfg0[62:61]
12962 21'b0, // z_tsb_cfg0[60:40]
12963 mmu_mra0_a3[74:48], // z_tsb_cfg0[39:13]
12964 4'b0, // z_tsb_cfg0[12:9]
12965 mmu_mra0_a3[47:39] // z_tsb_cfg0[8:0]
12966 };
12967assign ctxt_nz_tsb_cfg3_reg[0] = {`SPC5.mmu.asi.t0_e_nz[3],// z_tsb_cfg0[63]
12968 mmu_mra0_a3[37:36], // z_tsb_cfg0[62:61]
12969 21'b0, // z_tsb_cfg0[60:40]
12970 mmu_mra0_a3[35:9], // z_tsb_cfg0[39:13]
12971 4'b0, // z_tsb_cfg0[12:9]
12972 mmu_mra0_a3[8:0] // z_tsb_cfg0[8:0]
12973 };
12974
12975// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
12976// as well as the physical to architectural bit position relationships.
12977assign ctxt_z_tsb_cfg0_reg[1] = {`SPC5.mmu.asi.t1_e_z[0], // z_tsb_cfg0[63]
12978 mmu_mra0_a8[76:75], // z_tsb_cfg0[62:61]
12979 21'b0, // z_tsb_cfg0[60:40]
12980 mmu_mra0_a8[74:48], // z_tsb_cfg0[39:13]
12981 4'b0, // z_tsb_cfg0[12:9]
12982 mmu_mra0_a8[47:39] // z_tsb_cfg0[8:0]
12983 };
12984assign ctxt_z_tsb_cfg1_reg[1] = {`SPC5.mmu.asi.t1_e_z[1], // z_tsb_cfg0[63]
12985 mmu_mra0_a8[37:36], // z_tsb_cfg0[62:61]
12986 21'b0, // z_tsb_cfg0[60:40]
12987 mmu_mra0_a8[35:9], // z_tsb_cfg0[39:13]
12988 4'b0, // z_tsb_cfg0[12:9]
12989 mmu_mra0_a8[8:0] // z_tsb_cfg0[8:0]
12990 };
12991assign ctxt_z_tsb_cfg2_reg[1] = {`SPC5.mmu.asi.t1_e_z[2], // z_tsb_cfg0[63]
12992 mmu_mra0_a9[76:75], // z_tsb_cfg0[62:61]
12993 21'b0, // z_tsb_cfg0[60:40]
12994 mmu_mra0_a9[74:48], // z_tsb_cfg0[39:13]
12995 4'b0, // z_tsb_cfg0[12:9]
12996 mmu_mra0_a9[47:39] // z_tsb_cfg0[8:0]
12997 };
12998assign ctxt_z_tsb_cfg3_reg[1] = {`SPC5.mmu.asi.t1_e_z[3], // z_tsb_cfg0[63]
12999 mmu_mra0_a9[37:36], // z_tsb_cfg0[62:61]
13000 21'b0, // z_tsb_cfg0[60:40]
13001 mmu_mra0_a9[35:9], // z_tsb_cfg0[39:13]
13002 4'b0, // z_tsb_cfg0[12:9]
13003 mmu_mra0_a9[8:0] // z_tsb_cfg0[8:0]
13004 };
13005assign ctxt_nz_tsb_cfg0_reg[1] = {`SPC5.mmu.asi.t1_e_nz[0],// z_tsb_cfg0[63]
13006 mmu_mra0_a10[76:75], // z_tsb_cfg0[62:61]
13007 21'b0, // z_tsb_cfg0[60:40]
13008 mmu_mra0_a10[74:48], // z_tsb_cfg0[39:13]
13009 4'b0, // z_tsb_cfg0[12:9]
13010 mmu_mra0_a10[47:39] // z_tsb_cfg0[8:0]
13011 };
13012assign ctxt_nz_tsb_cfg1_reg[1] = {`SPC5.mmu.asi.t1_e_nz[1],// z_tsb_cfg0[63]
13013 mmu_mra0_a10[37:36], // z_tsb_cfg0[62:61]
13014 21'b0, // z_tsb_cfg0[60:40]
13015 mmu_mra0_a10[35:9], // z_tsb_cfg0[39:13]
13016 4'b0, // z_tsb_cfg0[12:9]
13017 mmu_mra0_a10[8:0] // z_tsb_cfg0[8:0]
13018 };
13019assign ctxt_nz_tsb_cfg2_reg[1] = {`SPC5.mmu.asi.t1_e_nz[2],// z_tsb_cfg0[63]
13020 mmu_mra0_a11[76:75], // z_tsb_cfg0[62:61]
13021 21'b0, // z_tsb_cfg0[60:40]
13022 mmu_mra0_a11[74:48], // z_tsb_cfg0[39:13]
13023 4'b0, // z_tsb_cfg0[12:9]
13024 mmu_mra0_a11[47:39] // z_tsb_cfg0[8:0]
13025 };
13026assign ctxt_nz_tsb_cfg3_reg[1] = {`SPC5.mmu.asi.t1_e_nz[3],// z_tsb_cfg0[63]
13027 mmu_mra0_a11[37:36], // z_tsb_cfg0[62:61]
13028 21'b0, // z_tsb_cfg0[60:40]
13029 mmu_mra0_a11[35:9], // z_tsb_cfg0[39:13]
13030 4'b0, // z_tsb_cfg0[12:9]
13031 mmu_mra0_a11[8:0] // z_tsb_cfg0[8:0]
13032 };
13033
13034// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
13035// as well as the physical to architectural bit position relationships.
13036assign ctxt_z_tsb_cfg0_reg[2] = {`SPC5.mmu.asi.t2_e_z[0], // z_tsb_cfg0[63]
13037 mmu_mra0_a16[76:75], // z_tsb_cfg0[62:61]
13038 21'b0, // z_tsb_cfg0[60:40]
13039 mmu_mra0_a16[74:48], // z_tsb_cfg0[39:13]
13040 4'b0, // z_tsb_cfg0[12:9]
13041 mmu_mra0_a16[47:39] // z_tsb_cfg0[8:0]
13042 };
13043assign ctxt_z_tsb_cfg1_reg[2] = {`SPC5.mmu.asi.t2_e_z[1], // z_tsb_cfg0[63]
13044 mmu_mra0_a16[37:36], // z_tsb_cfg0[62:61]
13045 21'b0, // z_tsb_cfg0[60:40]
13046 mmu_mra0_a16[35:9], // z_tsb_cfg0[39:13]
13047 4'b0, // z_tsb_cfg0[12:9]
13048 mmu_mra0_a16[8:0] // z_tsb_cfg0[8:0]
13049 };
13050assign ctxt_z_tsb_cfg2_reg[2] = {`SPC5.mmu.asi.t2_e_z[2], // z_tsb_cfg0[63]
13051 mmu_mra0_a17[76:75], // z_tsb_cfg0[62:61]
13052 21'b0, // z_tsb_cfg0[60:40]
13053 mmu_mra0_a17[74:48], // z_tsb_cfg0[39:13]
13054 4'b0, // z_tsb_cfg0[12:9]
13055 mmu_mra0_a17[47:39] // z_tsb_cfg0[8:0]
13056 };
13057assign ctxt_z_tsb_cfg3_reg[2] = {`SPC5.mmu.asi.t2_e_z[3], // z_tsb_cfg0[63]
13058 mmu_mra0_a17[37:36], // z_tsb_cfg0[62:61]
13059 21'b0, // z_tsb_cfg0[60:40]
13060 mmu_mra0_a17[35:9], // z_tsb_cfg0[39:13]
13061 4'b0, // z_tsb_cfg0[12:9]
13062 mmu_mra0_a17[8:0] // z_tsb_cfg0[8:0]
13063 };
13064assign ctxt_nz_tsb_cfg0_reg[2] = {`SPC5.mmu.asi.t2_e_nz[0],// z_tsb_cfg0[63]
13065 mmu_mra0_a18[76:75], // z_tsb_cfg0[62:61]
13066 21'b0, // z_tsb_cfg0[60:40]
13067 mmu_mra0_a18[74:48], // z_tsb_cfg0[39:13]
13068 4'b0, // z_tsb_cfg0[12:9]
13069 mmu_mra0_a18[47:39] // z_tsb_cfg0[8:0]
13070 };
13071assign ctxt_nz_tsb_cfg1_reg[2] = {`SPC5.mmu.asi.t2_e_nz[1],// z_tsb_cfg0[63]
13072 mmu_mra0_a18[37:36], // z_tsb_cfg0[62:61]
13073 21'b0, // z_tsb_cfg0[60:40]
13074 mmu_mra0_a18[35:9], // z_tsb_cfg0[39:13]
13075 4'b0, // z_tsb_cfg0[12:9]
13076 mmu_mra0_a18[8:0] // z_tsb_cfg0[8:0]
13077 };
13078assign ctxt_nz_tsb_cfg2_reg[2] = {`SPC5.mmu.asi.t2_e_nz[2],// z_tsb_cfg0[63]
13079 mmu_mra0_a19[76:75], // z_tsb_cfg0[62:61]
13080 21'b0, // z_tsb_cfg0[60:40]
13081 mmu_mra0_a19[74:48], // z_tsb_cfg0[39:13]
13082 4'b0, // z_tsb_cfg0[12:9]
13083 mmu_mra0_a19[47:39] // z_tsb_cfg0[8:0]
13084 };
13085assign ctxt_nz_tsb_cfg3_reg[2] = {`SPC5.mmu.asi.t2_e_nz[3],// z_tsb_cfg0[63]
13086 mmu_mra0_a19[37:36], // z_tsb_cfg0[62:61]
13087 21'b0, // z_tsb_cfg0[60:40]
13088 mmu_mra0_a19[35:9], // z_tsb_cfg0[39:13]
13089 4'b0, // z_tsb_cfg0[12:9]
13090 mmu_mra0_a19[8:0] // z_tsb_cfg0[8:0]
13091 };
13092
13093// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
13094// as well as the physical to architectural bit position relationships.
13095assign ctxt_z_tsb_cfg0_reg[3] = {`SPC5.mmu.asi.t3_e_z[0], // z_tsb_cfg0[63]
13096 mmu_mra0_a24[76:75], // z_tsb_cfg0[62:61]
13097 21'b0, // z_tsb_cfg0[60:40]
13098 mmu_mra0_a24[74:48], // z_tsb_cfg0[39:13]
13099 4'b0, // z_tsb_cfg0[12:9]
13100 mmu_mra0_a24[47:39] // z_tsb_cfg0[8:0]
13101 };
13102assign ctxt_z_tsb_cfg1_reg[3] = {`SPC5.mmu.asi.t3_e_z[1], // z_tsb_cfg0[63]
13103 mmu_mra0_a24[37:36], // z_tsb_cfg0[62:61]
13104 21'b0, // z_tsb_cfg0[60:40]
13105 mmu_mra0_a24[35:9], // z_tsb_cfg0[39:13]
13106 4'b0, // z_tsb_cfg0[12:9]
13107 mmu_mra0_a24[8:0] // z_tsb_cfg0[8:0]
13108 };
13109assign ctxt_z_tsb_cfg2_reg[3] = {`SPC5.mmu.asi.t3_e_z[2], // z_tsb_cfg0[63]
13110 mmu_mra0_a25[76:75], // z_tsb_cfg0[62:61]
13111 21'b0, // z_tsb_cfg0[60:40]
13112 mmu_mra0_a25[74:48], // z_tsb_cfg0[39:13]
13113 4'b0, // z_tsb_cfg0[12:9]
13114 mmu_mra0_a25[47:39] // z_tsb_cfg0[8:0]
13115 };
13116assign ctxt_z_tsb_cfg3_reg[3] = {`SPC5.mmu.asi.t3_e_z[3], // z_tsb_cfg0[63]
13117 mmu_mra0_a25[37:36], // z_tsb_cfg0[62:61]
13118 21'b0, // z_tsb_cfg0[60:40]
13119 mmu_mra0_a25[35:9], // z_tsb_cfg0[39:13]
13120 4'b0, // z_tsb_cfg0[12:9]
13121 mmu_mra0_a25[8:0] // z_tsb_cfg0[8:0]
13122 };
13123assign ctxt_nz_tsb_cfg0_reg[3] = {`SPC5.mmu.asi.t3_e_nz[0],// z_tsb_cfg0[63]
13124 mmu_mra0_a26[76:75], // z_tsb_cfg0[62:61]
13125 21'b0, // z_tsb_cfg0[60:40]
13126 mmu_mra0_a26[74:48], // z_tsb_cfg0[39:13]
13127 4'b0, // z_tsb_cfg0[12:9]
13128 mmu_mra0_a26[47:39] // z_tsb_cfg0[8:0]
13129 };
13130assign ctxt_nz_tsb_cfg1_reg[3] = {`SPC5.mmu.asi.t3_e_nz[1],// z_tsb_cfg0[63]
13131 mmu_mra0_a26[37:36], // z_tsb_cfg0[62:61]
13132 21'b0, // z_tsb_cfg0[60:40]
13133 mmu_mra0_a26[35:9], // z_tsb_cfg0[39:13]
13134 4'b0, // z_tsb_cfg0[12:9]
13135 mmu_mra0_a26[8:0] // z_tsb_cfg0[8:0]
13136 };
13137assign ctxt_nz_tsb_cfg2_reg[3] = {`SPC5.mmu.asi.t3_e_nz[2],// z_tsb_cfg0[63]
13138 mmu_mra0_a27[76:75], // z_tsb_cfg0[62:61]
13139 21'b0, // z_tsb_cfg0[60:40]
13140 mmu_mra0_a27[74:48], // z_tsb_cfg0[39:13]
13141 4'b0, // z_tsb_cfg0[12:9]
13142 mmu_mra0_a27[47:39] // z_tsb_cfg0[8:0]
13143 };
13144assign ctxt_nz_tsb_cfg3_reg[3] = {`SPC5.mmu.asi.t3_e_nz[3],// z_tsb_cfg0[63]
13145 mmu_mra0_a27[37:36], // z_tsb_cfg0[62:61]
13146 21'b0, // z_tsb_cfg0[60:40]
13147 mmu_mra0_a27[35:9], // z_tsb_cfg0[39:13]
13148 4'b0, // z_tsb_cfg0[12:9]
13149 mmu_mra0_a27[8:0] // z_tsb_cfg0[8:0]
13150 };
13151
13152// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
13153// as well as the physical to architectural bit position relationships.
13154assign ctxt_z_tsb_cfg0_reg[4] = {`SPC5.mmu.asi.t4_e_z[0], // z_tsb_cfg0[63]
13155 mmu_mra1_a0[76:75], // z_tsb_cfg0[62:61]
13156 21'b0, // z_tsb_cfg0[60:40]
13157 mmu_mra1_a0[74:48], // z_tsb_cfg0[39:13]
13158 4'b0, // z_tsb_cfg0[12:9]
13159 mmu_mra1_a0[47:39] // z_tsb_cfg0[8:0]
13160 };
13161assign ctxt_z_tsb_cfg1_reg[4] = {`SPC5.mmu.asi.t4_e_z[1], // z_tsb_cfg0[63]
13162 mmu_mra1_a0[37:36], // z_tsb_cfg0[62:61]
13163 21'b0, // z_tsb_cfg0[60:40]
13164 mmu_mra1_a0[35:9], // z_tsb_cfg0[39:13]
13165 4'b0, // z_tsb_cfg0[12:9]
13166 mmu_mra1_a0[8:0] // z_tsb_cfg0[8:0]
13167 };
13168assign ctxt_z_tsb_cfg2_reg[4] = {`SPC5.mmu.asi.t4_e_z[2], // z_tsb_cfg0[63]
13169 mmu_mra1_a1[76:75], // z_tsb_cfg0[62:61]
13170 21'b0, // z_tsb_cfg0[60:40]
13171 mmu_mra1_a1[74:48], // z_tsb_cfg0[39:13]
13172 4'b0, // z_tsb_cfg0[12:9]
13173 mmu_mra1_a1[47:39] // z_tsb_cfg0[8:0]
13174 };
13175assign ctxt_z_tsb_cfg3_reg[4] = {`SPC5.mmu.asi.t4_e_z[3], // z_tsb_cfg0[63]
13176 mmu_mra1_a1[37:36], // z_tsb_cfg0[62:61]
13177 21'b0, // z_tsb_cfg0[60:40]
13178 mmu_mra1_a1[35:9], // z_tsb_cfg0[39:13]
13179 4'b0, // z_tsb_cfg0[12:9]
13180 mmu_mra1_a1[8:0] // z_tsb_cfg0[8:0]
13181 };
13182assign ctxt_nz_tsb_cfg0_reg[4] = {`SPC5.mmu.asi.t4_e_nz[0],// z_tsb_cfg0[63]
13183 mmu_mra1_a2[76:75], // z_tsb_cfg0[62:61]
13184 21'b0, // z_tsb_cfg0[60:40]
13185 mmu_mra1_a2[74:48], // z_tsb_cfg0[39:13]
13186 4'b0, // z_tsb_cfg0[12:9]
13187 mmu_mra1_a2[47:39] // z_tsb_cfg0[8:0]
13188 };
13189assign ctxt_nz_tsb_cfg1_reg[4] = {`SPC5.mmu.asi.t4_e_nz[1],// z_tsb_cfg0[63]
13190 mmu_mra1_a2[37:36], // z_tsb_cfg0[62:61]
13191 21'b0, // z_tsb_cfg0[60:40]
13192 mmu_mra1_a2[35:9], // z_tsb_cfg0[39:13]
13193 4'b0, // z_tsb_cfg0[12:9]
13194 mmu_mra1_a2[8:0] // z_tsb_cfg0[8:0]
13195 };
13196assign ctxt_nz_tsb_cfg2_reg[4] = {`SPC5.mmu.asi.t4_e_nz[2],// z_tsb_cfg0[63]
13197 mmu_mra1_a3[76:75], // z_tsb_cfg0[62:61]
13198 21'b0, // z_tsb_cfg0[60:40]
13199 mmu_mra1_a3[74:48], // z_tsb_cfg0[39:13]
13200 4'b0, // z_tsb_cfg0[12:9]
13201 mmu_mra1_a3[47:39] // z_tsb_cfg0[8:0]
13202 };
13203assign ctxt_nz_tsb_cfg3_reg[4] = {`SPC5.mmu.asi.t4_e_nz[3],// z_tsb_cfg0[63]
13204 mmu_mra1_a3[37:36], // z_tsb_cfg0[62:61]
13205 21'b0, // z_tsb_cfg0[60:40]
13206 mmu_mra1_a3[35:9], // z_tsb_cfg0[39:13]
13207 4'b0, // z_tsb_cfg0[12:9]
13208 mmu_mra1_a3[8:0] // z_tsb_cfg0[8:0]
13209 };
13210
13211// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
13212// as well as the physical to architectural bit position relationships.
13213assign ctxt_z_tsb_cfg0_reg[5] = {`SPC5.mmu.asi.t5_e_z[0], // z_tsb_cfg0[63]
13214 mmu_mra1_a8[76:75], // z_tsb_cfg0[62:61]
13215 21'b0, // z_tsb_cfg0[60:40]
13216 mmu_mra1_a8[74:48], // z_tsb_cfg0[39:13]
13217 4'b0, // z_tsb_cfg0[12:9]
13218 mmu_mra1_a8[47:39] // z_tsb_cfg0[8:0]
13219 };
13220assign ctxt_z_tsb_cfg1_reg[5] = {`SPC5.mmu.asi.t5_e_z[1], // z_tsb_cfg0[63]
13221 mmu_mra1_a8[37:36], // z_tsb_cfg0[62:61]
13222 21'b0, // z_tsb_cfg0[60:40]
13223 mmu_mra1_a8[35:9], // z_tsb_cfg0[39:13]
13224 4'b0, // z_tsb_cfg0[12:9]
13225 mmu_mra1_a8[8:0] // z_tsb_cfg0[8:0]
13226 };
13227assign ctxt_z_tsb_cfg2_reg[5] = {`SPC5.mmu.asi.t5_e_z[2], // z_tsb_cfg0[63]
13228 mmu_mra1_a9[76:75], // z_tsb_cfg0[62:61]
13229 21'b0, // z_tsb_cfg0[60:40]
13230 mmu_mra1_a9[74:48], // z_tsb_cfg0[39:13]
13231 4'b0, // z_tsb_cfg0[12:9]
13232 mmu_mra1_a9[47:39] // z_tsb_cfg0[8:0]
13233 };
13234assign ctxt_z_tsb_cfg3_reg[5] = {`SPC5.mmu.asi.t5_e_z[3], // z_tsb_cfg0[63]
13235 mmu_mra1_a9[37:36], // z_tsb_cfg0[62:61]
13236 21'b0, // z_tsb_cfg0[60:40]
13237 mmu_mra1_a9[35:9], // z_tsb_cfg0[39:13]
13238 4'b0, // z_tsb_cfg0[12:9]
13239 mmu_mra1_a9[8:0] // z_tsb_cfg0[8:0]
13240 };
13241assign ctxt_nz_tsb_cfg0_reg[5] = {`SPC5.mmu.asi.t5_e_nz[0],// z_tsb_cfg0[63]
13242 mmu_mra1_a10[76:75], // z_tsb_cfg0[62:61]
13243 21'b0, // z_tsb_cfg0[60:40]
13244 mmu_mra1_a10[74:48], // z_tsb_cfg0[39:13]
13245 4'b0, // z_tsb_cfg0[12:9]
13246 mmu_mra1_a10[47:39] // z_tsb_cfg0[8:0]
13247 };
13248assign ctxt_nz_tsb_cfg1_reg[5] = {`SPC5.mmu.asi.t5_e_nz[1],// z_tsb_cfg0[63]
13249 mmu_mra1_a10[37:36], // z_tsb_cfg0[62:61]
13250 21'b0, // z_tsb_cfg0[60:40]
13251 mmu_mra1_a10[35:9], // z_tsb_cfg0[39:13]
13252 4'b0, // z_tsb_cfg0[12:9]
13253 mmu_mra1_a10[8:0] // z_tsb_cfg0[8:0]
13254 };
13255assign ctxt_nz_tsb_cfg2_reg[5] = {`SPC5.mmu.asi.t5_e_nz[2],// z_tsb_cfg0[63]
13256 mmu_mra1_a11[76:75], // z_tsb_cfg0[62:61]
13257 21'b0, // z_tsb_cfg0[60:40]
13258 mmu_mra1_a11[74:48], // z_tsb_cfg0[39:13]
13259 4'b0, // z_tsb_cfg0[12:9]
13260 mmu_mra1_a11[47:39] // z_tsb_cfg0[8:0]
13261 };
13262assign ctxt_nz_tsb_cfg3_reg[5] = {`SPC5.mmu.asi.t5_e_nz[3],// z_tsb_cfg0[63]
13263 mmu_mra1_a11[37:36], // z_tsb_cfg0[62:61]
13264 21'b0, // z_tsb_cfg0[60:40]
13265 mmu_mra1_a11[35:9], // z_tsb_cfg0[39:13]
13266 4'b0, // z_tsb_cfg0[12:9]
13267 mmu_mra1_a11[8:0] // z_tsb_cfg0[8:0]
13268 };
13269
13270// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
13271// as well as the physical to architectural bit position relationships.
13272assign ctxt_z_tsb_cfg0_reg[6] = {`SPC5.mmu.asi.t6_e_z[0], // z_tsb_cfg0[63]
13273 mmu_mra1_a16[76:75], // z_tsb_cfg0[62:61]
13274 21'b0, // z_tsb_cfg0[60:40]
13275 mmu_mra1_a16[74:48], // z_tsb_cfg0[39:13]
13276 4'b0, // z_tsb_cfg0[12:9]
13277 mmu_mra1_a16[47:39] // z_tsb_cfg0[8:0]
13278 };
13279assign ctxt_z_tsb_cfg1_reg[6] = {`SPC5.mmu.asi.t6_e_z[1], // z_tsb_cfg0[63]
13280 mmu_mra1_a16[37:36], // z_tsb_cfg0[62:61]
13281 21'b0, // z_tsb_cfg0[60:40]
13282 mmu_mra1_a16[35:9], // z_tsb_cfg0[39:13]
13283 4'b0, // z_tsb_cfg0[12:9]
13284 mmu_mra1_a16[8:0] // z_tsb_cfg0[8:0]
13285 };
13286assign ctxt_z_tsb_cfg2_reg[6] = {`SPC5.mmu.asi.t6_e_z[2], // z_tsb_cfg0[63]
13287 mmu_mra1_a17[76:75], // z_tsb_cfg0[62:61]
13288 21'b0, // z_tsb_cfg0[60:40]
13289 mmu_mra1_a17[74:48], // z_tsb_cfg0[39:13]
13290 4'b0, // z_tsb_cfg0[12:9]
13291 mmu_mra1_a17[47:39] // z_tsb_cfg0[8:0]
13292 };
13293assign ctxt_z_tsb_cfg3_reg[6] = {`SPC5.mmu.asi.t6_e_z[3], // z_tsb_cfg0[63]
13294 mmu_mra1_a17[37:36], // z_tsb_cfg0[62:61]
13295 21'b0, // z_tsb_cfg0[60:40]
13296 mmu_mra1_a17[35:9], // z_tsb_cfg0[39:13]
13297 4'b0, // z_tsb_cfg0[12:9]
13298 mmu_mra1_a17[8:0] // z_tsb_cfg0[8:0]
13299 };
13300assign ctxt_nz_tsb_cfg0_reg[6] = {`SPC5.mmu.asi.t6_e_nz[0],// z_tsb_cfg0[63]
13301 mmu_mra1_a18[76:75], // z_tsb_cfg0[62:61]
13302 21'b0, // z_tsb_cfg0[60:40]
13303 mmu_mra1_a18[74:48], // z_tsb_cfg0[39:13]
13304 4'b0, // z_tsb_cfg0[12:9]
13305 mmu_mra1_a18[47:39] // z_tsb_cfg0[8:0]
13306 };
13307assign ctxt_nz_tsb_cfg1_reg[6] = {`SPC5.mmu.asi.t6_e_nz[1],// z_tsb_cfg0[63]
13308 mmu_mra1_a18[37:36], // z_tsb_cfg0[62:61]
13309 21'b0, // z_tsb_cfg0[60:40]
13310 mmu_mra1_a18[35:9], // z_tsb_cfg0[39:13]
13311 4'b0, // z_tsb_cfg0[12:9]
13312 mmu_mra1_a18[8:0] // z_tsb_cfg0[8:0]
13313 };
13314assign ctxt_nz_tsb_cfg2_reg[6] = {`SPC5.mmu.asi.t6_e_nz[2],// z_tsb_cfg0[63]
13315 mmu_mra1_a19[76:75], // z_tsb_cfg0[62:61]
13316 21'b0, // z_tsb_cfg0[60:40]
13317 mmu_mra1_a19[74:48], // z_tsb_cfg0[39:13]
13318 4'b0, // z_tsb_cfg0[12:9]
13319 mmu_mra1_a19[47:39] // z_tsb_cfg0[8:0]
13320 };
13321assign ctxt_nz_tsb_cfg3_reg[6] = {`SPC5.mmu.asi.t6_e_nz[3],// z_tsb_cfg0[63]
13322 mmu_mra1_a19[37:36], // z_tsb_cfg0[62:61]
13323 21'b0, // z_tsb_cfg0[60:40]
13324 mmu_mra1_a19[35:9], // z_tsb_cfg0[39:13]
13325 4'b0, // z_tsb_cfg0[12:9]
13326 mmu_mra1_a19[8:0] // z_tsb_cfg0[8:0]
13327 };
13328
13329// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
13330// as well as the physical to architectural bit position relationships.
13331assign ctxt_z_tsb_cfg0_reg[7] = {`SPC5.mmu.asi.t7_e_z[0], // z_tsb_cfg0[63]
13332 mmu_mra1_a24[76:75], // z_tsb_cfg0[62:61]
13333 21'b0, // z_tsb_cfg0[60:40]
13334 mmu_mra1_a24[74:48], // z_tsb_cfg0[39:13]
13335 4'b0, // z_tsb_cfg0[12:9]
13336 mmu_mra1_a24[47:39] // z_tsb_cfg0[8:0]
13337 };
13338assign ctxt_z_tsb_cfg1_reg[7] = {`SPC5.mmu.asi.t7_e_z[1], // z_tsb_cfg0[63]
13339 mmu_mra1_a24[37:36], // z_tsb_cfg0[62:61]
13340 21'b0, // z_tsb_cfg0[60:40]
13341 mmu_mra1_a24[35:9], // z_tsb_cfg0[39:13]
13342 4'b0, // z_tsb_cfg0[12:9]
13343 mmu_mra1_a24[8:0] // z_tsb_cfg0[8:0]
13344 };
13345assign ctxt_z_tsb_cfg2_reg[7] = {`SPC5.mmu.asi.t7_e_z[2], // z_tsb_cfg0[63]
13346 mmu_mra1_a25[76:75], // z_tsb_cfg0[62:61]
13347 21'b0, // z_tsb_cfg0[60:40]
13348 mmu_mra1_a25[74:48], // z_tsb_cfg0[39:13]
13349 4'b0, // z_tsb_cfg0[12:9]
13350 mmu_mra1_a25[47:39] // z_tsb_cfg0[8:0]
13351 };
13352assign ctxt_z_tsb_cfg3_reg[7] = {`SPC5.mmu.asi.t7_e_z[3], // z_tsb_cfg0[63]
13353 mmu_mra1_a25[37:36], // z_tsb_cfg0[62:61]
13354 21'b0, // z_tsb_cfg0[60:40]
13355 mmu_mra1_a25[35:9], // z_tsb_cfg0[39:13]
13356 4'b0, // z_tsb_cfg0[12:9]
13357 mmu_mra1_a25[8:0] // z_tsb_cfg0[8:0]
13358 };
13359assign ctxt_nz_tsb_cfg0_reg[7] = {`SPC5.mmu.asi.t7_e_nz[0],// z_tsb_cfg0[63]
13360 mmu_mra1_a26[76:75], // z_tsb_cfg0[62:61]
13361 21'b0, // z_tsb_cfg0[60:40]
13362 mmu_mra1_a26[74:48], // z_tsb_cfg0[39:13]
13363 4'b0, // z_tsb_cfg0[12:9]
13364 mmu_mra1_a26[47:39] // z_tsb_cfg0[8:0]
13365 };
13366assign ctxt_nz_tsb_cfg1_reg[7] = {`SPC5.mmu.asi.t7_e_nz[1],// z_tsb_cfg0[63]
13367 mmu_mra1_a26[37:36], // z_tsb_cfg0[62:61]
13368 21'b0, // z_tsb_cfg0[60:40]
13369 mmu_mra1_a26[35:9], // z_tsb_cfg0[39:13]
13370 4'b0, // z_tsb_cfg0[12:9]
13371 mmu_mra1_a26[8:0] // z_tsb_cfg0[8:0]
13372 };
13373assign ctxt_nz_tsb_cfg2_reg[7] = {`SPC5.mmu.asi.t7_e_nz[2],// z_tsb_cfg0[63]
13374 mmu_mra1_a27[76:75], // z_tsb_cfg0[62:61]
13375 21'b0, // z_tsb_cfg0[60:40]
13376 mmu_mra1_a27[74:48], // z_tsb_cfg0[39:13]
13377 4'b0, // z_tsb_cfg0[12:9]
13378 mmu_mra1_a27[47:39] // z_tsb_cfg0[8:0]
13379 };
13380assign ctxt_nz_tsb_cfg3_reg[7] = {`SPC5.mmu.asi.t7_e_nz[3],// z_tsb_cfg0[63]
13381 mmu_mra1_a27[37:36], // z_tsb_cfg0[62:61]
13382 21'b0, // z_tsb_cfg0[60:40]
13383 mmu_mra1_a27[35:9], // z_tsb_cfg0[39:13]
13384 4'b0, // z_tsb_cfg0[12:9]
13385 mmu_mra1_a27[8:0] // z_tsb_cfg0[8:0]
13386 };
13387`endif // EMUL - ADD_TSB_CFG
13388
13389
13390// This was the original select_pc_b, the latest select_pc_b qualifies with errors
13391// But some of the error checkers need this signal without the qualification
13392// of icache errors
13393// Suppress instruction on flush or park request
13394// (clear_disrupting_flush_pending_w_in & idl_req_in)
13395// Suppress instruction for 'refetch' exception after
13396// not taken branch with annulled delay slot
13397// NOTE: 'with_errors' means that the signal actually IGNORES instruction
13398// cache errors and asserts IN SPITE OF instruction cache errors
13399wire [7:0] select_pc_b_with_errors =
13400 {{4 {~`SPC5.dec_flush_b[1]}}, {4 {~`SPC5.dec_flush_b[0]}}} &
13401 {{4 {~`SPC5.tlu.fls1.refetch_w_in}}, {4 {~`SPC5.tlu.fls0.refetch_w_in}}} &
13402 {~(`SPC5.tlu.fls1.clear_disrupting_flush_pending_w_in[3:0] &
13403 {4 {`SPC5.tlu.fls1.idl_req_in}}),
13404 ~(`SPC5.tlu.fls0.clear_disrupting_flush_pending_w_in[3:0] &
13405 {4 {`SPC5.tlu.fls0.idl_req_in}})} &
13406 {`SPC5.tlu.fls1.tid_dec_valid_b[3:0],
13407 `SPC5.tlu.fls0.tid_dec_valid_b[3:0]};
13408
13409//------------------------------------
13410// Qualify select_pc_b_with_errors to get final select_pc_b signal
13411// Qualifications are
13412// - instruction cache errors (ic_err_w_in)
13413// - disrupting single step completion requests (dsc_req_in)
13414wire [7:0] select_pc_b =
13415 select_pc_b_with_errors[7:0] &
13416 {{4 {(~`SPC5.tlu.fls1.ic_err_w_in | `SPC5.tlu.fls1.itlb_nfo_exc_b) &
13417 ~`SPC5.tlu.fls1.dsc_req_in}},
13418 {4 {(~`SPC5.tlu.fls0.ic_err_w_in | `SPC5.tlu.fls0.itlb_nfo_exc_b) &
13419 ~`SPC5.tlu.fls0.dsc_req_in}}};
13420
13421//------------------------------------
13422
13423//original select_pc_b_with errors. Select_pc_b_with_errors is no longer asserted
13424//if the inst. following an annulled delay slot of a not taken branch has a prebuffer
13425//error and it reaches B stage. I still need a signal if this happens to trigger the chkr.
13426
13427wire [7:0] select_pc_b_with_errors_and_refetch =
13428 {{4 {~`SPC5.dec_flush_b[1]}}, {4 {~`SPC5.dec_flush_b[0]}}} &
13429 {~(`SPC5.tlu.fls1.clear_disrupting_flush_pending_w_in[3:0] &
13430 {4 {`SPC5.tlu.fls1.idl_req_in}}),
13431 ~(`SPC5.tlu.fls0.clear_disrupting_flush_pending_w_in[3:0] &
13432 {4 {`SPC5.tlu.fls0.idl_req_in}})} &
13433 {`SPC5.tlu.fls1.tid_dec_valid_b[3:0],
13434 `SPC5.tlu.fls0.tid_dec_valid_b[3:0]};
13435
13436// Signals required for bench TLB sync & LDST sync
13437
13438reg tlb_bypass_m;
13439reg tlb_bypass_b;
13440reg tlb_rd_vld_m;
13441reg tlb_rd_vld_b;
13442reg lsu_tl_gt_0_b;
13443reg [7:0] dcc_asi_b;
13444reg asi_internal_w;
13445
13446always @ (posedge `BENCH_SPC5_GCLK) begin // {
13447
13448 clkstop_d1 <= `SPC5.tcu_clk_stop;
13449 clkstop_d2 <= clkstop_d1;
13450 clkstop_d3 <= clkstop_d2;
13451 clkstop_d4 <= clkstop_d3;
13452 clkstop_d5 <= clkstop_d4;
13453
13454 tlb_bypass_m <= `SPC5.lsu.tlb.tlb_bypass;
13455 tlb_bypass_b <= tlb_bypass_m;
13456 tlb_rd_vld_m <= `SPC5.lsu.tlb.tlb_rd_vld | `SPC5.lsu.tlb.tlb_cam_vld;
13457 tlb_rd_vld_b <= tlb_rd_vld_m;
13458
13459 // This signal is only valid for LD/ST instructions
13460 lsu_tl_gt_0_b <= `SPC5.lsu.dcc.tl_gt_0_m;
13461
13462 // Can't use lsu.dcc_asi_b for tlb_sync so pipeline from M to B
13463 dcc_asi_b <= `SPC5.lsu.dcc_asi_m;
13464
13465 // LD/ST that will not issue to the crossbar
13466 asi_internal_w <= `SPC5.lsu.dcc.asi_internal_b;
13467end // }
13468
13469// TL determines whether Nucleus or Primary
13470wire [7:0] asi_num = `SPC5.lsu.dcc.altspace_ldst_b ?
13471 dcc_asi_b :
13472 (lsu_tl_gt_0_b ? 8'h04 : 8'h80);
13473
13474wire [7:0] itlb_miss = { (`SPC5.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
13475 `SPC5.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
13476 `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
13477 (`SPC5.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
13478 `SPC5.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
13479 `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
13480 (`SPC5.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
13481 `SPC5.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
13482 `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
13483 (`SPC5.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
13484 `SPC5.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
13485 `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
13486 (`SPC5.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
13487 `SPC5.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
13488 `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
13489 (`SPC5.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
13490 `SPC5.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
13491 `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
13492 (`SPC5.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
13493 `SPC5.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
13494 `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
13495 (`SPC5.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
13496 `SPC5.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
13497 `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
13498 };
13499
13500wire [7:0] icache_miss = { (`SPC5.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
13501 `SPC5.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
13502 `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
13503 (`SPC5.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
13504 `SPC5.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
13505 `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
13506 (`SPC5.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
13507 `SPC5.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
13508 `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
13509 (`SPC5.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
13510 `SPC5.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
13511 `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
13512 (`SPC5.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
13513 `SPC5.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
13514 `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
13515 (`SPC5.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
13516 `SPC5.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
13517 `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
13518 (`SPC5.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
13519 `SPC5.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
13520 `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
13521 (`SPC5.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
13522 `SPC5.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
13523 `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
13524 };
13525
13526wire inst_bypass = (`SPC5.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[0] |
13527 `SPC5.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[1] |
13528 `SPC5.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[2]);
13529
13530wire [7:0] fetch_bypass = { (inst_bypass & `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
13531 (inst_bypass & `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
13532 (inst_bypass & `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
13533 (inst_bypass & `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
13534 (inst_bypass & `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
13535 (inst_bypass & `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
13536 (inst_bypass & `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
13537 (inst_bypass & `SPC5.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
13538 };
13539
13540wire [7:0] itlb_wr = {(`SPC5.tlu.trl1.take_itw & `SPC5.tlu.trl1.trap[3]),
13541 (`SPC5.tlu.trl1.take_itw & `SPC5.tlu.trl1.trap[2]),
13542 (`SPC5.tlu.trl1.take_itw & `SPC5.tlu.trl1.trap[1]),
13543 (`SPC5.tlu.trl1.take_itw & `SPC5.tlu.trl1.trap[0]),
13544 (`SPC5.tlu.trl0.take_itw & `SPC5.tlu.trl0.trap[3]),
13545 (`SPC5.tlu.trl0.take_itw & `SPC5.tlu.trl0.trap[2]),
13546 (`SPC5.tlu.trl0.take_itw & `SPC5.tlu.trl0.trap[1]),
13547 (`SPC5.tlu.trl0.take_itw & `SPC5.tlu.trl0.trap[0])
13548 };
13549
13550//------------------------------------
13551
13552reg [71:0] tick_cmpr_0;
13553reg [71:0] stick_cmpr_0;
13554reg [71:0] hstick_cmpr_0;
13555reg [151:0] trap_entry_1_t0;
13556reg [151:0] trap_entry_2_t0;
13557reg [151:0] trap_entry_3_t0;
13558reg [151:0] trap_entry_4_t0;
13559reg [151:0] trap_entry_5_t0;
13560reg [151:0] trap_entry_6_t0;
13561
13562always @(posedge `BENCH_SPC5_GCLK) begin // {
13563
13564 // Probes for nas_pipe
13565 tick_cmpr_0 <= `SPC5.tlu.tca.array.mem[{2'b0,3'h0}];
13566 stick_cmpr_0 <= `SPC5.tlu.tca.array.mem[{2'b01,3'h0}];
13567 hstick_cmpr_0 <= `SPC5.tlu.tca.array.mem[{2'b10,3'h0}];
13568 trap_entry_1_t0 <= `SPC5.tlu.tsa0.array.mem[{2'h0, 3'h0}];
13569 trap_entry_2_t0 <= `SPC5.tlu.tsa0.array.mem[{2'h0, 3'h1}];
13570 trap_entry_3_t0 <= `SPC5.tlu.tsa0.array.mem[{2'h0, 3'h2}];
13571 trap_entry_4_t0 <= `SPC5.tlu.tsa0.array.mem[{2'h0, 3'h3}];
13572 trap_entry_5_t0 <= `SPC5.tlu.tsa0.array.mem[{2'h0, 3'h4}];
13573 trap_entry_6_t0 <= `SPC5.tlu.tsa0.array.mem[{2'h0, 3'h5}];
13574
13575end // }
13576reg [71:0] tick_cmpr_1;
13577reg [71:0] stick_cmpr_1;
13578reg [71:0] hstick_cmpr_1;
13579reg [151:0] trap_entry_1_t1;
13580reg [151:0] trap_entry_2_t1;
13581reg [151:0] trap_entry_3_t1;
13582reg [151:0] trap_entry_4_t1;
13583reg [151:0] trap_entry_5_t1;
13584reg [151:0] trap_entry_6_t1;
13585
13586always @(posedge `BENCH_SPC5_GCLK) begin // {
13587
13588 // Probes for nas_pipe
13589 tick_cmpr_1 <= `SPC5.tlu.tca.array.mem[{2'b0,3'h1}];
13590 stick_cmpr_1 <= `SPC5.tlu.tca.array.mem[{2'b01,3'h1}];
13591 hstick_cmpr_1 <= `SPC5.tlu.tca.array.mem[{2'b10,3'h1}];
13592 trap_entry_1_t1 <= `SPC5.tlu.tsa0.array.mem[{2'h1, 3'h0}];
13593 trap_entry_2_t1 <= `SPC5.tlu.tsa0.array.mem[{2'h1, 3'h1}];
13594 trap_entry_3_t1 <= `SPC5.tlu.tsa0.array.mem[{2'h1, 3'h2}];
13595 trap_entry_4_t1 <= `SPC5.tlu.tsa0.array.mem[{2'h1, 3'h3}];
13596 trap_entry_5_t1 <= `SPC5.tlu.tsa0.array.mem[{2'h1, 3'h4}];
13597 trap_entry_6_t1 <= `SPC5.tlu.tsa0.array.mem[{2'h1, 3'h5}];
13598
13599end // }
13600reg [71:0] tick_cmpr_2;
13601reg [71:0] stick_cmpr_2;
13602reg [71:0] hstick_cmpr_2;
13603reg [151:0] trap_entry_1_t2;
13604reg [151:0] trap_entry_2_t2;
13605reg [151:0] trap_entry_3_t2;
13606reg [151:0] trap_entry_4_t2;
13607reg [151:0] trap_entry_5_t2;
13608reg [151:0] trap_entry_6_t2;
13609
13610always @(posedge `BENCH_SPC5_GCLK) begin // {
13611
13612 // Probes for nas_pipe
13613 tick_cmpr_2 <= `SPC5.tlu.tca.array.mem[{2'b0,3'h2}];
13614 stick_cmpr_2 <= `SPC5.tlu.tca.array.mem[{2'b01,3'h2}];
13615 hstick_cmpr_2 <= `SPC5.tlu.tca.array.mem[{2'b10,3'h2}];
13616 trap_entry_1_t2 <= `SPC5.tlu.tsa0.array.mem[{2'h2, 3'h0}];
13617 trap_entry_2_t2 <= `SPC5.tlu.tsa0.array.mem[{2'h2, 3'h1}];
13618 trap_entry_3_t2 <= `SPC5.tlu.tsa0.array.mem[{2'h2, 3'h2}];
13619 trap_entry_4_t2 <= `SPC5.tlu.tsa0.array.mem[{2'h2, 3'h3}];
13620 trap_entry_5_t2 <= `SPC5.tlu.tsa0.array.mem[{2'h2, 3'h4}];
13621 trap_entry_6_t2 <= `SPC5.tlu.tsa0.array.mem[{2'h2, 3'h5}];
13622
13623end // }
13624reg [71:0] tick_cmpr_3;
13625reg [71:0] stick_cmpr_3;
13626reg [71:0] hstick_cmpr_3;
13627reg [151:0] trap_entry_1_t3;
13628reg [151:0] trap_entry_2_t3;
13629reg [151:0] trap_entry_3_t3;
13630reg [151:0] trap_entry_4_t3;
13631reg [151:0] trap_entry_5_t3;
13632reg [151:0] trap_entry_6_t3;
13633
13634always @(posedge `BENCH_SPC5_GCLK) begin // {
13635
13636 // Probes for nas_pipe
13637 tick_cmpr_3 <= `SPC5.tlu.tca.array.mem[{2'b0,3'h3}];
13638 stick_cmpr_3 <= `SPC5.tlu.tca.array.mem[{2'b01,3'h3}];
13639 hstick_cmpr_3 <= `SPC5.tlu.tca.array.mem[{2'b10,3'h3}];
13640 trap_entry_1_t3 <= `SPC5.tlu.tsa0.array.mem[{2'h3, 3'h0}];
13641 trap_entry_2_t3 <= `SPC5.tlu.tsa0.array.mem[{2'h3, 3'h1}];
13642 trap_entry_3_t3 <= `SPC5.tlu.tsa0.array.mem[{2'h3, 3'h2}];
13643 trap_entry_4_t3 <= `SPC5.tlu.tsa0.array.mem[{2'h3, 3'h3}];
13644 trap_entry_5_t3 <= `SPC5.tlu.tsa0.array.mem[{2'h3, 3'h4}];
13645 trap_entry_6_t3 <= `SPC5.tlu.tsa0.array.mem[{2'h3, 3'h5}];
13646
13647end // }
13648reg [71:0] tick_cmpr_4;
13649reg [71:0] stick_cmpr_4;
13650reg [71:0] hstick_cmpr_4;
13651reg [151:0] trap_entry_1_t4;
13652reg [151:0] trap_entry_2_t4;
13653reg [151:0] trap_entry_3_t4;
13654reg [151:0] trap_entry_4_t4;
13655reg [151:0] trap_entry_5_t4;
13656reg [151:0] trap_entry_6_t4;
13657
13658always @(posedge `BENCH_SPC5_GCLK) begin // {
13659
13660 // Probes for nas_pipe
13661 tick_cmpr_4 <= `SPC5.tlu.tca.array.mem[{2'b0,3'h4}];
13662 stick_cmpr_4 <= `SPC5.tlu.tca.array.mem[{2'b01,3'h4}];
13663 hstick_cmpr_4 <= `SPC5.tlu.tca.array.mem[{2'b10,3'h4}];
13664 trap_entry_1_t4 <= `SPC5.tlu.tsa1.array.mem[{2'h0, 3'h0}];
13665 trap_entry_2_t4 <= `SPC5.tlu.tsa1.array.mem[{2'h0, 3'h1}];
13666 trap_entry_3_t4 <= `SPC5.tlu.tsa1.array.mem[{2'h0, 3'h2}];
13667 trap_entry_4_t4 <= `SPC5.tlu.tsa1.array.mem[{2'h0, 3'h3}];
13668 trap_entry_5_t4 <= `SPC5.tlu.tsa1.array.mem[{2'h0, 3'h4}];
13669 trap_entry_6_t4 <= `SPC5.tlu.tsa1.array.mem[{2'h0, 3'h5}];
13670
13671end // }
13672reg [71:0] tick_cmpr_5;
13673reg [71:0] stick_cmpr_5;
13674reg [71:0] hstick_cmpr_5;
13675reg [151:0] trap_entry_1_t5;
13676reg [151:0] trap_entry_2_t5;
13677reg [151:0] trap_entry_3_t5;
13678reg [151:0] trap_entry_4_t5;
13679reg [151:0] trap_entry_5_t5;
13680reg [151:0] trap_entry_6_t5;
13681
13682always @(posedge `BENCH_SPC5_GCLK) begin // {
13683
13684 // Probes for nas_pipe
13685 tick_cmpr_5 <= `SPC5.tlu.tca.array.mem[{2'b0,3'h5}];
13686 stick_cmpr_5 <= `SPC5.tlu.tca.array.mem[{2'b01,3'h5}];
13687 hstick_cmpr_5 <= `SPC5.tlu.tca.array.mem[{2'b10,3'h5}];
13688 trap_entry_1_t5 <= `SPC5.tlu.tsa1.array.mem[{2'h1, 3'h0}];
13689 trap_entry_2_t5 <= `SPC5.tlu.tsa1.array.mem[{2'h1, 3'h1}];
13690 trap_entry_3_t5 <= `SPC5.tlu.tsa1.array.mem[{2'h1, 3'h2}];
13691 trap_entry_4_t5 <= `SPC5.tlu.tsa1.array.mem[{2'h1, 3'h3}];
13692 trap_entry_5_t5 <= `SPC5.tlu.tsa1.array.mem[{2'h1, 3'h4}];
13693 trap_entry_6_t5 <= `SPC5.tlu.tsa1.array.mem[{2'h1, 3'h5}];
13694
13695end // }
13696reg [71:0] tick_cmpr_6;
13697reg [71:0] stick_cmpr_6;
13698reg [71:0] hstick_cmpr_6;
13699reg [151:0] trap_entry_1_t6;
13700reg [151:0] trap_entry_2_t6;
13701reg [151:0] trap_entry_3_t6;
13702reg [151:0] trap_entry_4_t6;
13703reg [151:0] trap_entry_5_t6;
13704reg [151:0] trap_entry_6_t6;
13705
13706always @(posedge `BENCH_SPC5_GCLK) begin // {
13707
13708 // Probes for nas_pipe
13709 tick_cmpr_6 <= `SPC5.tlu.tca.array.mem[{2'b0,3'h6}];
13710 stick_cmpr_6 <= `SPC5.tlu.tca.array.mem[{2'b01,3'h6}];
13711 hstick_cmpr_6 <= `SPC5.tlu.tca.array.mem[{2'b10,3'h6}];
13712 trap_entry_1_t6 <= `SPC5.tlu.tsa1.array.mem[{2'h2, 3'h0}];
13713 trap_entry_2_t6 <= `SPC5.tlu.tsa1.array.mem[{2'h2, 3'h1}];
13714 trap_entry_3_t6 <= `SPC5.tlu.tsa1.array.mem[{2'h2, 3'h2}];
13715 trap_entry_4_t6 <= `SPC5.tlu.tsa1.array.mem[{2'h2, 3'h3}];
13716 trap_entry_5_t6 <= `SPC5.tlu.tsa1.array.mem[{2'h2, 3'h4}];
13717 trap_entry_6_t6 <= `SPC5.tlu.tsa1.array.mem[{2'h2, 3'h5}];
13718
13719end // }
13720reg [71:0] tick_cmpr_7;
13721reg [71:0] stick_cmpr_7;
13722reg [71:0] hstick_cmpr_7;
13723reg [151:0] trap_entry_1_t7;
13724reg [151:0] trap_entry_2_t7;
13725reg [151:0] trap_entry_3_t7;
13726reg [151:0] trap_entry_4_t7;
13727reg [151:0] trap_entry_5_t7;
13728reg [151:0] trap_entry_6_t7;
13729
13730always @(posedge `BENCH_SPC5_GCLK) begin // {
13731
13732 // Probes for nas_pipe
13733 tick_cmpr_7 <= `SPC5.tlu.tca.array.mem[{2'b0,3'h7}];
13734 stick_cmpr_7 <= `SPC5.tlu.tca.array.mem[{2'b01,3'h7}];
13735 hstick_cmpr_7 <= `SPC5.tlu.tca.array.mem[{2'b10,3'h7}];
13736 trap_entry_1_t7 <= `SPC5.tlu.tsa1.array.mem[{2'h3, 3'h0}];
13737 trap_entry_2_t7 <= `SPC5.tlu.tsa1.array.mem[{2'h3, 3'h1}];
13738 trap_entry_3_t7 <= `SPC5.tlu.tsa1.array.mem[{2'h3, 3'h2}];
13739 trap_entry_4_t7 <= `SPC5.tlu.tsa1.array.mem[{2'h3, 3'h3}];
13740 trap_entry_5_t7 <= `SPC5.tlu.tsa1.array.mem[{2'h3, 3'h4}];
13741 trap_entry_6_t7 <= `SPC5.tlu.tsa1.array.mem[{2'h3, 3'h5}];
13742
13743end // }
13744
13745//------------------------------------
13746// ASI & Trap State machines
13747always @(posedge `BENCH_SPC5_GCLK) begin // {
13748
13749// pc_0_e[47:0] <= `SPC5.ifu_pc_d0[47:0];
13750// pc_1_e[47:0] <= `SPC5.ifu_pc_d1[47:0];
13751 pc_0_e[47:0] <= {`SPC5.tlu_pc_0_d[47:2], 2'b00};
13752 pc_1_e[47:0] <= {`SPC5.tlu_pc_1_d[47:2], 2'b00};
13753 pc_0_m[47:0] <= pc_0_e[47:0];
13754 pc_1_m[47:0] <= pc_1_e[47:0];
13755 pc_0_b[47:0] <= pc_0_m[47:0];
13756 pc_1_b[47:0] <= pc_1_m[47:0];
13757 pc_0_w[47:0] <= ({48 { select_pc_b[0]}} & pc_0_b[47:0]) |
13758 ({48 {~select_pc_b[0]}} & pc_0_w[47:0]) ;
13759 pc_1_w[47:0] <= ({48 { select_pc_b[1]}} & pc_0_b[47:0]) |
13760 ({48 {~select_pc_b[1]}} & pc_1_w[47:0]) ;
13761 pc_2_w[47:0] <= ({48 { select_pc_b[2]}} & pc_0_b[47:0]) |
13762 ({48 {~select_pc_b[2]}} & pc_2_w[47:0]) ;
13763 pc_3_w[47:0] <= ({48 { select_pc_b[3]}} & pc_0_b[47:0]) |
13764 ({48 {~select_pc_b[3]}} & pc_3_w[47:0]) ;
13765 pc_4_w[47:0] <= ({48 { select_pc_b[4]}} & pc_1_b[47:0]) |
13766 ({48 {~select_pc_b[4]}} & pc_4_w[47:0]) ;
13767 pc_5_w[47:0] <= ({48 { select_pc_b[5]}} & pc_1_b[47:0]) |
13768 ({48 {~select_pc_b[5]}} & pc_5_w[47:0]) ;
13769 pc_6_w[47:0] <= ({48 { select_pc_b[6]}} & pc_1_b[47:0]) |
13770 ({48 {~select_pc_b[6]}} & pc_6_w[47:0]) ;
13771 pc_7_w[47:0] <= ({48 { select_pc_b[7]}} & pc_1_b[47:0]) |
13772 ({48 {~select_pc_b[7]}} & pc_7_w[47:0]) ;
13773
13774
13775 // altspace_ldst_m is asserted for asi accesses that don't change arch state
13776 asi_store_b <= (`SPC5.lsu.dcc.asi_store_m & `SPC5.lsu.dcc.asi_sync_m);
13777 asi_store_w <= asi_store_b;
13778 dcc_tid_b <= `SPC5.lsu.dcc.dcc_tid_m;
13779 dcc_tid_w <= dcc_tid_b;
13780
13781 // ASI in progress state m/c
13782 if (asi_store_w & ~asi_store_flush_w[dcc_tid_w]) begin // {
13783 asi_in_progress_b[dcc_tid_w] <= 1'b1;
13784 end // }
13785
13786 asi_valid_w <= asi_in_progress_b & store_sync;
13787
13788 // Delay asi_valid_w and asi_in_progress
13789 // 2 clocks to ensure TLB Sync DTLBWRITE (demap) comes before SSTEP stxa
13790 asi_valid_fx4 <= asi_valid_w;
13791 asi_valid_fx5 <= asi_valid_fx4;
13792 asi_in_progress_w <= asi_in_progress_b;
13793 asi_in_progress_fx4 <= asi_in_progress_w;
13794 sync_reset_w <= sync_reset;
13795
13796 for (i=0;i<8;i=i+1) begin // {
13797 if (asi_valid_w[i] | sync_reset_w[i]) begin // {
13798 asi_in_progress_b[i] <= 1'b0;
13799 end//}
13800 end //}
13801
13802 // Trap0 pipeline [valid W stage]
13803
13804 for (i=0;i<4;i=i+1) begin // {
13805 // Done & Retry
13806 if ((`SPC5.tlu.tlu_trap_0_tid[1:0] == i) &&
13807 `SPC5.tlu.tlu_trap_pc_0_valid & tlu_ccr_cwp_0_valid_last)
13808 begin //{
13809 tlu_valid[i] <= 1'b1;
13810 end //}
13811 // Trap taken
13812 else if (`SPC5.tlu.trl0.real_trap[i] & ~`SPC5.tlu.trl0.take_por) begin // {
13813 tlu_valid[i] <= 1'b1;
13814 end //}
13815 else
13816 tlu_valid[i] <= 1'b0;
13817 end //}
13818
13819 // Trap1 pipeline [valid W stage]
13820
13821 for (i=0;i<4;i=i+1) begin // {
13822 // Done & Retry
13823 if ((`SPC5.tlu.tlu_trap_1_tid[1:0] == i) &&
13824 `SPC5.tlu.tlu_trap_pc_1_valid & tlu_ccr_cwp_1_valid_last)
13825 begin //{
13826 tlu_valid[i+4] <= 1'b1;
13827 end //}
13828 // Trap taken
13829 else if (`SPC5.tlu.trl1.real_trap[i] & ~`SPC5.tlu.trl1.take_por) begin // {
13830 tlu_valid[i+4] <= 1'b1;
13831 end //}
13832 else
13833 tlu_valid[i+4] <= 1'b0;
13834 end //}
13835
13836end // }
13837
13838
13839always @(posedge `BENCH_SPC5_GCLK) begin
13840
13841// debug code for TPCC analysis
13842`ifdef TPCC
13843if (pcx_req==1) begin
13844 if (`SPC5.spc_pcx_data_pa[129:124]==6'b100000) begin // l15 dmiss
13845 l15dmiss_cnt=l15dmiss_cnt+1;
13846 $display("dmissl15 cnt is %0d",l15dmiss_cnt);
13847 end
13848 if (`SPC5.spc_pcx_data_pa[129:124]==6'b110000) begin // l15 imiss
13849 l15imiss_cnt=l15imiss_cnt+1;
13850 $display("imissl15 cnt is %0d",l15imiss_cnt);
13851 end
13852 // `TOP.spg.spc_pcx_data_pa[129:124]==6'b100001 -> all stores
13853end
13854
13855pcx_req <= |`SPC5.spc_pcx_req_pq[8:0];
13856
13857if (`SPC5.ifu_l15_valid==1) begin
13858 imiss_cnt=imiss_cnt+1;
13859 $display("imiss cnt is %0d",imiss_cnt);
13860end
13861if (spec_dmiss==1 && `SPC5.lsu_l15_cancel==0) begin
13862 dmiss_cnt=dmiss_cnt+1;
13863 $display("dmiss cnt is %0d",dmiss_cnt);
13864
13865end
13866spec_dmiss <= `SPC5.lsu_l15_valid & `SPC5.lsu_l15_load;
13867
13868clock = clock+1;
13869
13870// keep track of imiss latencies
13871if (`SPC5.ftu_agc_thr0_cmiss_c==1) begin
13872 start_imiss0=clock;
13873 active_imiss0=1;
13874end
13875if (active_imiss0==1 && first_imiss0==1 && `SPC5.l15_spc_cpkt[8:6]==3'b000 && `SPC5.l15_spc_valid==1 && `SPC5.l15_spc_cpkt[17:14]==4'b0001) begin
13876 sum_imiss_latency = sum_imiss_latency + clock - start_imiss0 + 1;
13877 number_imiss = number_imiss + 1;
13878 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
13879 active_imiss0=0;
13880 first_imiss0=0;
13881end
13882if (active_imiss0==1 && first_imiss0==0 && `SPC5.l15_spc_cpkt[8:6]==3'b000 && `SPC5.l15_spc_valid==1 && `SPC5.l15_spc_cpkt[17:14]==4'b0001) begin
13883 first_imiss0=1;
13884end
13885if (`SPC5.ftu_agc_thr1_cmiss_c==1) begin
13886 start_imiss1=clock;
13887 active_imiss1=1;
13888end
13889if (active_imiss1==1 && first_imiss1==1 && `SPC5.l15_spc_cpkt[8:6]==3'b001 && `SPC5.l15_spc_valid==1 && `SPC5.l15_spc_cpkt[17:14]==4'b0001) begin
13890 sum_imiss_latency = sum_imiss_latency + clock - start_imiss1 + 1;
13891 number_imiss = number_imiss + 1;
13892 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
13893 active_imiss1=0;
13894 first_imiss1=0;
13895end
13896if (active_imiss1==1 && first_imiss1==0 && `SPC5.l15_spc_cpkt[8:6]==3'b001 && `SPC5.l15_spc_valid==1 && `SPC5.l15_spc_cpkt[17:14]==4'b0001) begin
13897 first_imiss1=1;
13898end
13899if (`SPC5.ftu_agc_thr2_cmiss_c==1) begin
13900 start_imiss2=clock;
13901 active_imiss2=1;
13902end
13903if (active_imiss2==1 && first_imiss2==1 && `SPC5.l15_spc_cpkt[8:6]==3'b010 && `SPC5.l15_spc_valid==1 && `SPC5.l15_spc_cpkt[17:14]==4'b0001) begin
13904 sum_imiss_latency = sum_imiss_latency + clock - start_imiss2 + 1;
13905 number_imiss = number_imiss + 1;
13906 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
13907 active_imiss2=0;
13908 first_imiss2=0;
13909end
13910if (active_imiss2==1 && first_imiss2==0 && `SPC5.l15_spc_cpkt[8:6]==3'b010 && `SPC5.l15_spc_valid==1 && `SPC5.l15_spc_cpkt[17:14]==4'b0001) begin
13911 first_imiss2=1;
13912end
13913if (`SPC5.ftu_agc_thr3_cmiss_c==1) begin
13914 start_imiss3=clock;
13915 active_imiss3=1;
13916end
13917if (active_imiss3==1 && first_imiss3==1 && `SPC5.l15_spc_cpkt[8:6]==3'b011 && `SPC5.l15_spc_valid==1 && `SPC5.l15_spc_cpkt[17:14]==4'b0001) begin
13918 sum_imiss_latency = sum_imiss_latency + clock - start_imiss3 + 1;
13919 number_imiss = number_imiss + 1;
13920 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
13921 active_imiss3=0;
13922 first_imiss3=0;
13923end
13924if (active_imiss3==1 && first_imiss3==0 && `SPC5.l15_spc_cpkt[8:6]==3'b011 && `SPC5.l15_spc_valid==1 && `SPC5.l15_spc_cpkt[17:14]==4'b0001) begin
13925 first_imiss3=1;
13926end
13927if (`SPC5.ftu_agc_thr4_cmiss_c==1) begin
13928 start_imiss4=clock;
13929 active_imiss4=1;
13930end
13931if (active_imiss4==1 && first_imiss4==1 && `SPC5.l15_spc_cpkt[8:6]==3'b100 && `SPC5.l15_spc_valid==1 && `SPC5.l15_spc_cpkt[17:14]==4'b0001) begin
13932 sum_imiss_latency = sum_imiss_latency + clock - start_imiss4 + 1;
13933 number_imiss = number_imiss + 1;
13934 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
13935 active_imiss4=0;
13936 first_imiss4=0;
13937end
13938if (active_imiss4==1 && first_imiss4==0 && `SPC5.l15_spc_cpkt[8:6]==3'b100 && `SPC5.l15_spc_valid==1 && `SPC5.l15_spc_cpkt[17:14]==4'b0001) begin
13939 first_imiss4=1;
13940end
13941if (`SPC5.ftu_agc_thr5_cmiss_c==1) begin
13942 start_imiss5=clock;
13943 active_imiss5=1;
13944end
13945if (active_imiss5==1 && first_imiss5==1 && `SPC5.l15_spc_cpkt[8:6]==3'b101 && `SPC5.l15_spc_valid==1 && `SPC5.l15_spc_cpkt[17:14]==4'b0001) begin
13946 sum_imiss_latency = sum_imiss_latency + clock - start_imiss5 + 1;
13947 number_imiss = number_imiss + 1;
13948 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
13949 active_imiss5=0;
13950 first_imiss5=0;
13951end
13952if (active_imiss5==1 && first_imiss5==0 && `SPC5.l15_spc_cpkt[8:6]==3'b101 && `SPC5.l15_spc_valid==1 && `SPC5.l15_spc_cpkt[17:14]==4'b0001) begin
13953 first_imiss5=1;
13954end
13955if (`SPC5.ftu_agc_thr6_cmiss_c==1) begin
13956 start_imiss6=clock;
13957 active_imiss6=1;
13958end
13959if (active_imiss6==1 && first_imiss6==1 && `SPC5.l15_spc_cpkt[8:6]==3'b110 && `SPC5.l15_spc_valid==1 && `SPC5.l15_spc_cpkt[17:14]==4'b0001) begin
13960 sum_imiss_latency = sum_imiss_latency + clock - start_imiss6 + 1;
13961 number_imiss = number_imiss + 1;
13962 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
13963 active_imiss6=0;
13964 first_imiss6=0;
13965end
13966if (active_imiss6==1 && first_imiss6==0 && `SPC5.l15_spc_cpkt[8:6]==3'b110 && `SPC5.l15_spc_valid==1 && `SPC5.l15_spc_cpkt[17:14]==4'b0001) begin
13967 first_imiss6=1;
13968end
13969if (`SPC5.ftu_agc_thr7_cmiss_c==1) begin
13970 start_imiss7=clock;
13971 active_imiss7=1;
13972end
13973if (active_imiss7==1 && first_imiss7==1 && `SPC5.l15_spc_cpkt[8:6]==3'b111 && `SPC5.l15_spc_valid==1 && `SPC5.l15_spc_cpkt[17:14]==4'b0001) begin
13974 sum_imiss_latency = sum_imiss_latency + clock - start_imiss7 + 1;
13975 number_imiss = number_imiss + 1;
13976 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
13977 active_imiss7=0;
13978 first_imiss7=0;
13979end
13980if (active_imiss7==1 && first_imiss7==0 && `SPC5.l15_spc_cpkt[8:6]==3'b111 && `SPC5.l15_spc_valid==1 && `SPC5.l15_spc_cpkt[17:14]==4'b0001) begin
13981 first_imiss7=1;
13982end
13983
13984if (`SPC5.pku.swl0.set_lsu_sync_wait==1) begin
13985 start_dmiss0=clock;
13986end
13987if (`SPC5.pku.swl0.clear_lsu_sync_wait==1) begin
13988 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss0) + 3;
13989 number_dmiss = number_dmiss + 1;
13990 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
13991end
13992if (`SPC5.pku.swl1.set_lsu_sync_wait==1) begin
13993 start_dmiss1=clock;
13994end
13995if (`SPC5.pku.swl1.clear_lsu_sync_wait==1) begin
13996 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss1) + 3;
13997 number_dmiss = number_dmiss + 1;
13998 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
13999end
14000if (`SPC5.pku.swl2.set_lsu_sync_wait==1) begin
14001 start_dmiss2=clock;
14002end
14003if (`SPC5.pku.swl2.clear_lsu_sync_wait==1) begin
14004 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss2) + 3;
14005 number_dmiss = number_dmiss + 1;
14006 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
14007end
14008if (`SPC5.pku.swl3.set_lsu_sync_wait==1) begin
14009 start_dmiss3=clock;
14010end
14011if (`SPC5.pku.swl3.clear_lsu_sync_wait==1) begin
14012 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss3) + 3;
14013 number_dmiss = number_dmiss + 1;
14014 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
14015end
14016if (`SPC5.pku.swl4.set_lsu_sync_wait==1) begin
14017 start_dmiss4=clock;
14018end
14019if (`SPC5.pku.swl4.clear_lsu_sync_wait==1) begin
14020 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss4) + 3;
14021 number_dmiss = number_dmiss + 1;
14022 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
14023end
14024if (`SPC5.pku.swl5.set_lsu_sync_wait==1) begin
14025 start_dmiss5=clock;
14026end
14027if (`SPC5.pku.swl5.clear_lsu_sync_wait==1) begin
14028 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss5) + 3;
14029 number_dmiss = number_dmiss + 1;
14030 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
14031end
14032if (`SPC5.pku.swl6.set_lsu_sync_wait==1) begin
14033 start_dmiss6=clock;
14034end
14035if (`SPC5.pku.swl6.clear_lsu_sync_wait==1) begin
14036 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss6) + 3;
14037 number_dmiss = number_dmiss + 1;
14038 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
14039end
14040if (`SPC5.pku.swl7.set_lsu_sync_wait==1) begin
14041 start_dmiss7=clock;
14042end
14043if (`SPC5.pku.swl7.clear_lsu_sync_wait==1) begin
14044 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss7) + 3;
14045 number_dmiss = number_dmiss + 1;
14046 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
14047end
14048`endif
14049
14050
14051
14052 lsu_tid_e[2:0] <= `SPC5.lsu.dcc.tid_d[2:0];
14053
14054 // FG Valid conditions
14055
14056 // Add fcc valids to fg_valid
14057 fcc_valid_fb <= fcc_valid_f5;
14058 fcc_valid_f5 <= fcc_valid_f4;
14059 fcc_valid_f4 <= |`SPC5.fgu.fgu_cmp_fcc_vld_fx3[3:0];
14060
14061 fg_flush_fb <= fg_flush_f5;
14062 fg_flush_f5 <= fg_flush_f4;
14063 fg_flush_f4 <= fg_flush_f3;
14064 fg_flush_f3 <= fg_flush_f2 | `SPC5.dec_flush_f2 |
14065 `SPC5.tlu_flush_fgu_b;
14066 fg_flush_f2 <= `SPC5.dec_flush_f1;
14067
14068 fgu_err_fx3 <= `SPC5.fgu_cecc_fx2 | `SPC5.fgu_uecc_fx2 | `SPC5.fgu.fpc.exu_flush_fx2; // frf or irf ecc error
14069 fgu_err_fx4 <= fgu_err_fx3;
14070 fgu_err_fx5 <= fgu_err_fx4;
14071 fgu_err_fb <= fgu_err_fx5;
14072
14073 // Siams cause fg_valid ..
14074 siam0_d = `SPC5.dec.dec_inst0_d[31:30]==2'b10 &
14075 `SPC5.dec.dec_inst0_d[24:19]==6'b110110 &
14076 `SPC5.dec.dec_inst0_d[13:5]==9'b010000001;
14077
14078 siam1_d = `SPC5.dec.dec_inst1_d[31:30]==2'b10 &
14079 `SPC5.dec.dec_inst1_d[24:19]==6'b110110 &
14080 `SPC5.dec.dec_inst1_d[13:5]==9'b010000001;
14081
14082
14083 done0_d = `SPC5.dec.dec_inst0_d[31:30]==2'b10 &
14084 `SPC5.dec.dec_inst0_d[29:25]==5'b00000 &
14085 `SPC5.dec.dec_inst0_d[24:19]==6'b111110;
14086 done1_d = `SPC5.dec.dec_inst1_d[31:30]==2'b10 &
14087 `SPC5.dec.dec_inst1_d[29:25]==5'b00000 &
14088 `SPC5.dec.dec_inst1_d[24:19]==6'b111110;
14089
14090 retry0_d = `SPC5.dec.dec_inst0_d[31:30]==2'b10 &
14091 `SPC5.dec.dec_inst0_d[29:25]==5'b00001 &
14092 `SPC5.dec.dec_inst0_d[24:19]==6'b111110;
14093 retry1_d = `SPC5.dec.dec_inst1_d[31:30]==2'b10 &
14094 `SPC5.dec.dec_inst1_d[29:25]==5'b00001 &
14095 `SPC5.dec.dec_inst1_d[24:19]==6'b111110;
14096
14097 done0_e <= done0_d & `SPC5.dec.dec_decode0_d;
14098 done1_e <= done1_d & `SPC5.dec.dec_decode1_d;
14099
14100 retry0_e <= retry0_d & `SPC5.dec.dec_decode0_d;
14101 retry1_e <= retry1_d & `SPC5.dec.dec_decode1_d;
14102
14103
14104 // fold siam into cmov logic
14105
14106 fmov_valid_fb <= fmov_valid_f5;
14107 fmov_valid_f5 <= fmov_valid_f4;
14108 fmov_valid_f4 <= fmov_valid_f3;
14109 fmov_valid_f3 <= fmov_valid_f2;
14110 fmov_valid_f2 <= fmov_valid_m;
14111 fmov_valid_m <= fmov_valid_e & `SPC5.dec.dec_fgu_valid_e;
14112 fmov_valid_e <= ((`SPC5.exu0.ect.cmov_d | siam0_d) &
14113 `SPC5.dec.dec_decode0_d&`SPC5.dec.del.fgu0_d) |
14114 ((`SPC5.exu1.ect.cmov_d | siam1_d) &
14115 `SPC5.dec.dec_decode1_d&`SPC5.dec.del.fgu1_d);
14116
14117 // fgu check bus
14118
14119 // fcc_valid_fb doesn't assert for LDFSR. LDFSR gets checked by the LSU
14120 // checker
14121
14122 fg_valid <= {(`SPC5.fgu.fac.fac_w1_tid_fb[2:0]==3'h7) && fg_cond_fb,
14123 (`SPC5.fgu.fac.fac_w1_tid_fb[2:0]==3'h6) && fg_cond_fb,
14124 (`SPC5.fgu.fac.fac_w1_tid_fb[2:0]==3'h5) && fg_cond_fb,
14125 (`SPC5.fgu.fac.fac_w1_tid_fb[2:0]==3'h4) && fg_cond_fb,
14126 (`SPC5.fgu.fac.fac_w1_tid_fb[2:0]==3'h3) && fg_cond_fb,
14127 (`SPC5.fgu.fac.fac_w1_tid_fb[2:0]==3'h2) && fg_cond_fb,
14128 (`SPC5.fgu.fac.fac_w1_tid_fb[2:0]==3'h1) && fg_cond_fb,
14129 (`SPC5.fgu.fac.fac_w1_tid_fb[2:0]==3'h0) && fg_cond_fb };
14130
14131
14132 fgu_valid_fb0 <= `SPC5.fgu_exu_w_vld_fx5[0] && !`SPC5.fgu.fpc.div_finish_int_fb;
14133 fgu_valid_fb1 <= `SPC5.fgu_exu_w_vld_fx5[1] && !`SPC5.fgu.fpc.div_finish_int_fb;
14134
14135 // Fdiv
14136 div_special_cancel_f4[7:0] <= tid2onehot(`SPC5.fgu.fac.tid_fx3[2:0]) &
14137 {8{`SPC5.fgu.fac.q_div_default_res_fx3}};
14138 fg_fdiv_valid_fw <= `SPC5.fgu_divide_completion & ~div_special_cancel_f4 &
14139 {8{~`SPC5.fgu.fpc.fpc_fpd_ieee_trap_fb}} &
14140 {8{~`SPC5.fgu.fpc.fpc_fpd_unfin_fb}};
14141
14142
14143 // Used in CCX Stub ?
14144 inst0_e[31:0] <= `SPC5.dec.dec_inst0_d[31:0];
14145 inst1_e[31:0] <= `SPC5.dec.dec_inst1_d[31:0];
14146
14147 // only fgu ops that are not loads/stores
14148 fgu0_e <= `SPC5.dec.del.decode_fgu0_d;
14149 fgu1_e <= `SPC5.dec.del.decode_fgu1_d;
14150
14151 // LSU logic
14152 load_b <= load_m;
14153 load_m <= (load0_e | load1_e);
14154
14155 load0_e <= (`SPC5.dec.dec_decode0_d & `SPC5.dec.del.lsu0_d &
14156 `SPC5.dec.dcd0.dcd_load_d);
14157
14158 load1_e <= (`SPC5.dec.dec_decode1_d & `SPC5.dec.del.lsu1_d &
14159 `SPC5.dec.dcd1.dcd_load_d);
14160
14161 lsu_tid_b[2:0] <= lsu_tid_m[2:0];
14162 lsu_tid_m[2:0] <= lsu_tid_e[2:0];
14163
14164 lsu_complete_m[7:0] <= `SPC5.lsu_complete[7:0];
14165 lsu_complete_b[7:0] <= lsu_complete_m[7:0];
14166
14167 lsu_data_w <= lsu_data_b;
14168
14169 // Divide destination logic ..
14170 sel_divide0_e <= (`SPC5.dec_decode0_d &
14171 ((`SPC5.pku.swl0.vld_d & `SPC5.pku.swl_divide_wait[0]) |
14172 (`SPC5.pku.swl1.vld_d & `SPC5.pku.swl_divide_wait[1]) |
14173 (`SPC5.pku.swl2.vld_d & `SPC5.pku.swl_divide_wait[2]) |
14174 (`SPC5.pku.swl3.vld_d & `SPC5.pku.swl_divide_wait[3])));
14175 sel_divide1_e <= (`SPC5.dec_decode1_d &
14176 ((`SPC5.pku.swl4.vld_d & `SPC5.pku.swl_divide_wait[4]) |
14177 (`SPC5.pku.swl5.vld_d & `SPC5.pku.swl_divide_wait[5]) |
14178 (`SPC5.pku.swl6.vld_d & `SPC5.pku.swl_divide_wait[6]) |
14179 (`SPC5.pku.swl7.vld_d & `SPC5.pku.swl_divide_wait[7])));
14180
14181
14182 dcd_fdest_e <= {`SPC5.dec.del.fdest1_d,`SPC5.dec.del.fdest0_d};
14183 dcd_idest_e <= {`SPC5.dec.del.idest1_d,`SPC5.dec.del.idest0_d};
14184
14185 if (sel_divide0_e) begin // {
14186 div_idest[{1'b0, `SPC5.dec.del.tid0_e[1:0]}] <= dcd_idest_e[0];
14187 div_fdest[{1'b0, `SPC5.dec.del.tid0_e[1:0]}] <= dcd_fdest_e[0];
14188 end // }
14189 if (sel_divide1_e) begin // {
14190 div_idest[{1'b1, `SPC5.dec.del.tid1_e[1:0]}] <= dcd_idest_e[1];
14191 div_fdest[{1'b1, `SPC5.dec.del.tid1_e[1:0]}] <= dcd_fdest_e[1];
14192 end // }
14193
14194
14195 // EX logic
14196 // Save EX tids for later use
14197 ex0_tid_m <= ex0_tid_e;
14198 ex1_tid_m <= ex1_tid_e;
14199 ex0_tid_b <= ex0_tid_m;
14200 ex1_tid_b <= ex1_tid_m;
14201 ex0_tid_w <= ex0_tid_b;
14202 ex1_tid_w <= ex1_tid_b;
14203
14204 // EX Flush conditions
14205 ex_flush_w <= {ex_flush_b | {{4{(`SPC5.dec.dec_flush_b[1] |
14206 `SPC5.tlu_flush_exu_b[1])}},
14207 {4{(`SPC5.dec.dec_flush_b[0] |
14208 `SPC5.tlu_flush_exu_b[0])}}}};
14209
14210 ex_flush_b <= {{4{`SPC5.dec.dec_flush_m[1]}},
14211 {4{`SPC5.dec.dec_flush_m[0]}}};
14212
14213
14214 // ex_valid_f4 valid will only fire on return
14215 return_f4 <= return_w & ~(`SPC5.tlu_flush_ifu & real_exception);
14216 ex_valid_w <= ex_valid_b;
14217
14218 // Cancel EX valid if it turns out to be asr/asi access for this tid
14219
14220 ex_valid_b <= ex_valid_m & ~ex_asr_access;
14221
14222
14223 ex_valid_m <= { (ex1_tid_e == 2'h3) && ex1_valid_e,
14224 (ex1_tid_e == 2'h2) && ex1_valid_e,
14225 (ex1_tid_e == 2'h1) && ex1_valid_e,
14226 (ex1_tid_e == 2'h0) && ex1_valid_e,
14227 (ex0_tid_e == 2'h3) && ex0_valid_e,
14228 (ex0_tid_e == 2'h2) && ex0_valid_e,
14229 (ex0_tid_e == 2'h1) && ex0_valid_e,
14230 (ex0_tid_e == 2'h0) && ex0_valid_e};
14231
14232
14233 // TLU delays for done and retries
14234 tlu_ccr_cwp_0_valid_last <= `SPC5.tlu.tlu_ccr_cwp_0_valid;
14235 tlu_ccr_cwp_1_valid_last <= `SPC5.tlu.tlu_ccr_cwp_1_valid;
14236
14237
14238end // END posedge gclk
14239
14240// Return instruction is separated out of ex*_valid because CWP update is in
14241// W+1 for return new window is not available for IRF scan (nas_pipe) until
14242// W+2
14243assign return0 = `SPC5.exu0.rml.return_w &
14244 `SPC5.exu0.rml.inst_vld_w;
14245assign return1 = `SPC5.exu1.rml.return_w &
14246 `SPC5.exu1.rml.inst_vld_w;
14247assign return_w = {(ex1_tid_w == 2'h3) && return1,
14248 (ex1_tid_w == 2'h2) && return1,
14249 (ex1_tid_w == 2'h1) && return1,
14250 (ex1_tid_w == 2'h0) && return1,
14251 (ex0_tid_w == 2'h3) && return0,
14252 (ex0_tid_w == 2'h2) && return0,
14253 (ex0_tid_w == 2'h1) && return0,
14254 (ex0_tid_w == 2'h0) && return0};
14255
14256
14257// Cancel EX valid if it turns out that exception (tlu flush) taken for
14258// this tid
14259
14260// exu check bus
14261assign ex0_tid_e = `SPC5.exu0.ect_tid_lth_e[1:0];
14262assign ex0_valid_e = `SPC5.dec.dec_valid_e[0] & ~fgu0_e & ~load0_e &
14263 ~retry0_e & ~done0_e;
14264assign ex1_tid_e = `SPC5.exu1.ect_tid_lth_e[1:0];
14265assign ex1_valid_e = `SPC5.dec.dec_valid_e[1] & ~fgu1_e & ~load1_e &
14266 ~retry1_e & ~done1_e;
14267
14268assign ex_asr_valid = `SPC5.lsu.dcc.asi_store_m & `SPC5.lsu.dcc.asi_sync_m ;
14269
14270assign ex_asr_access ={(`SPC5.lsu.dcc.dcc_tid_m[2:0]==3'h7) & ex_asr_valid,
14271 (`SPC5.lsu.dcc.dcc_tid_m[2:0]==3'h6) & ex_asr_valid,
14272 (`SPC5.lsu.dcc.dcc_tid_m[2:0]==3'h5) & ex_asr_valid,
14273 (`SPC5.lsu.dcc.dcc_tid_m[2:0]==3'h4) & ex_asr_valid,
14274 (`SPC5.lsu.dcc.dcc_tid_m[2:0]==3'h3) & ex_asr_valid,
14275 (`SPC5.lsu.dcc.dcc_tid_m[2:0]==3'h2) & ex_asr_valid,
14276 (`SPC5.lsu.dcc.dcc_tid_m[2:0]==3'h1) & ex_asr_valid,
14277 (`SPC5.lsu.dcc.dcc_tid_m[2:0]==3'h0) & ex_asr_valid};
14278
14279
14280// EXU valid is ex_valid_w, except flushes, delayed return, traps, and stfsr
14281// real_exception added because tlu_flush_ifu activates for second redirect
14282// of retry if TPC and TNPC are not verified as sequential
14283assign real_exception =
14284 {{4 {`SPC5.tlu.fls1.dec_exc_w |
14285 `SPC5.tlu.fls1.exu_exc_w |
14286 `SPC5.tlu.fls1.lsu_exc_w |
14287 `SPC5.tlu.fls1.bsee_req_w}},
14288 {4 {`SPC5.tlu.fls0.dec_exc_w |
14289 `SPC5.tlu.fls0.exu_exc_w |
14290 `SPC5.tlu.fls0.lsu_exc_w |
14291 `SPC5.tlu.fls0.bsee_req_w}}};
14292
14293// Do not assert ex_valid for block store instructions
14294wire [7:0] block_store_first_at_w =
14295 {`SPC5.lsu.sbs7.bst_pend & `SPC5.lsu.sbs7.blk_inst_w,
14296 `SPC5.lsu.sbs6.bst_pend & `SPC5.lsu.sbs6.blk_inst_w,
14297 `SPC5.lsu.sbs5.bst_pend & `SPC5.lsu.sbs5.blk_inst_w,
14298 `SPC5.lsu.sbs4.bst_pend & `SPC5.lsu.sbs4.blk_inst_w,
14299 `SPC5.lsu.sbs3.bst_pend & `SPC5.lsu.sbs3.blk_inst_w,
14300 `SPC5.lsu.sbs2.bst_pend & `SPC5.lsu.sbs2.blk_inst_w,
14301 `SPC5.lsu.sbs1.bst_pend & `SPC5.lsu.sbs1.blk_inst_w,
14302 `SPC5.lsu.sbs0.bst_pend & `SPC5.lsu.sbs0.blk_inst_w};
14303
14304// But inject a valid for a block store that's done...
14305reg [7:0] block_store_w;
14306always @(posedge `BENCH_SPC5_GCLK) begin
14307 block_store_w[7:0] <= `SPC5.lsu.lsu_block_store_b[7:0];
14308 lsu_trap_flush_d <= `SPC5.lsu_trap_flush[7:0];
14309end
14310
14311wire [7:0] block_store_inject_at_w =
14312 ~`SPC5.lsu.lsu_block_store_b[7:0] &
14313 block_store_w[7:0] &
14314 {~`SPC5.lsu.sbs7.bst_kill,
14315 ~`SPC5.lsu.sbs6.bst_kill,
14316 ~`SPC5.lsu.sbs5.bst_kill,
14317 ~`SPC5.lsu.sbs4.bst_kill,
14318 ~`SPC5.lsu.sbs3.bst_kill,
14319 ~`SPC5.lsu.sbs2.bst_kill,
14320 ~`SPC5.lsu.sbs1.bst_kill,
14321 ~`SPC5.lsu.sbs0.bst_kill};
14322
14323assign ex_valid = (((ex_valid_w & ~ex_flush_w & ~return_w & ~block_store_first_at_w & ~exception_w &
14324 ~({{4{`SPC5.tlu.fls1.exu_exc_b & `SPC5.tlu.fls1.beat_two_b}},
14325 {4{`SPC5.tlu.fls0.exu_exc_b & `SPC5.tlu.fls0.beat_two_b}}}) &
14326 ~{(`SPC5.fgu.fac.tid_fx3[2:0]==3'h7) & `SPC5.fgu.fpc.fsr_store_fx3,
14327 (`SPC5.fgu.fac.tid_fx3[2:0]==3'h6) & `SPC5.fgu.fpc.fsr_store_fx3,
14328 (`SPC5.fgu.fac.tid_fx3[2:0]==3'h5) & `SPC5.fgu.fpc.fsr_store_fx3,
14329 (`SPC5.fgu.fac.tid_fx3[2:0]==3'h4) & `SPC5.fgu.fpc.fsr_store_fx3,
14330 (`SPC5.fgu.fac.tid_fx3[2:0]==3'h3) & `SPC5.fgu.fpc.fsr_store_fx3,
14331 (`SPC5.fgu.fac.tid_fx3[2:0]==3'h2) & `SPC5.fgu.fpc.fsr_store_fx3,
14332 (`SPC5.fgu.fac.tid_fx3[2:0]==3'h1) & `SPC5.fgu.fpc.fsr_store_fx3,
14333 (`SPC5.fgu.fac.tid_fx3[2:0]==3'h0) & `SPC5.fgu.fpc.fsr_store_fx3}) |
14334 block_store_inject_at_w) &
14335 ~(`SPC5.tlu_flush_ifu & real_exception)) | return_f4;
14336
14337assign exception_w = {{4 {`SPC5.tlu.fls1.exc_for_w}} |
14338 `SPC5.tlu.fls1.bsee_req[3:0] |
14339 `SPC5.tlu.fls1.pdist_ecc_w[3:0],
14340 {4 {`SPC5.tlu.fls0.exc_for_w}} |
14341 `SPC5.tlu.fls0.bsee_req[3:0] |
14342 `SPC5.tlu.fls0.pdist_ecc_w[3:0]};
14343
14344// imul check bus - includes imul, save, restore instructions
14345assign imul_valid = {(`SPC5.exu1.ect_tid_lth_w[1:0]== 2'h3) & fgu_valid_fb1,
14346 (`SPC5.exu1.ect_tid_lth_w[1:0]== 2'h2) & fgu_valid_fb1,
14347 (`SPC5.exu1.ect_tid_lth_w[1:0]== 2'h1) & fgu_valid_fb1,
14348 (`SPC5.exu1.ect_tid_lth_w[1:0]== 2'h0) & fgu_valid_fb1,
14349 (`SPC5.exu0.ect_tid_lth_w[1:0]== 2'h3) & fgu_valid_fb0,
14350 (`SPC5.exu0.ect_tid_lth_w[1:0]== 2'h2) & fgu_valid_fb0,
14351 (`SPC5.exu0.ect_tid_lth_w[1:0]== 2'h1) & fgu_valid_fb0,
14352 (`SPC5.exu0.ect_tid_lth_w[1:0]== 2'h0) & fgu_valid_fb0};
14353
14354// qualify this signal with fgu_err. If fgu_err is encountered, deassert
14355//fg_cond_fb, so we don't send a step to Riesling.
14356
14357// FGU conditions
14358wire fg_cond_fb_pre_err = `SPC5.fgu.fpc.fpc_w1_ul_vld_fb | fcc_valid_fb |
14359 (fmov_valid_fb & ~fg_flush_fb) |
14360 (`SPC5.fgu.fac.fsr_w1_vld_fb[1]); // covers ST(X)FSR, which clears FSR.ftt
14361
14362assign fg_cond_fb = fg_cond_fb_pre_err & ~fgu_err_fb;
14363
14364// Idiv/Fdiv signals
14365
14366assign fgu_idiv_valid = fg_div_valid & div_idest;
14367
14368
14369assign fgu_fdiv_valid = fg_fdiv_valid_fw & div_fdest;
14370
14371
14372// Lsu signals needed to check lsu results
14373
14374assign lsu_valid = lsu_check | lsu_data_w;
14375
14376assign fg_div_valid = `SPC5.fgu_divide_completion & ~div_special_cancel_f4;
14377
14378// State machine asserts lsu_check for LD hit/miss
14379always @(posedge `BENCH_SPC5_GCLK) begin
14380 for (i=0; i<=7;i=i+1) begin // {
14381 lsu_check[i] <= 1'b0;
14382 case (lsu_state[i])
14383 1'b0: // IDLE state
14384 begin
14385 // LD hit
14386 if (lsu_ld_valid & lsu_tid_dec_b[i] & load_b) begin
14387 lsu_check[i] <= 1'b1;
14388 lsu_state[i] <= 1'b0; // IDLE state
14389 end
14390 // LD miss - normal case
14391 else if (lsu_ld_valid & lsu_tid_dec_b[i] & lsu_complete_b[i])
14392 begin
14393 lsu_check[i] <= 1'b1;
14394 lsu_state[i] <= 1'b0; // IDLE state
14395 end
14396 // LD miss - LDD or Block LD or SWAP
14397 else if (lsu_ld_valid & lsu_tid_dec_b[i]) begin
14398 lsu_state[i] <= 1'b1; // VALID state
14399 end
14400// Added a new term to handle STB uncorrectable errors on atomic or asi stores that are synced
14401//Send a complete if an atomic is squashed.
14402//lsu_trap_flush is asserted a cycle after the block_store_kill is asserted
14403 else if (`SPC5.lsu.dcc.sync_st[i] & `SPC5.lsu_block_store_kill[i] & ~lsu_trap_flush_d[i])
14404 begin
14405 lsu_check[i] <= 1'b1;
14406 lsu_state[i] <= 1'b0; // IDLE state
14407 end
14408 else begin
14409 lsu_state[i] <= lsu_state[i];
14410 end
14411
14412 end
14413 1'b1: // VALID state
14414 begin
14415 if ((lsu_complete_b[i])) begin
14416 lsu_check[i] <= 1'b1;
14417 lsu_state[i] <= 1'b0; // IDLE state
14418 end
14419 else begin
14420 lsu_state[i] <= lsu_state[i];
14421 end
14422 end
14423 endcase
14424 end // }
14425end
14426
14427
14428assign lsu_tid = `SPC5.lsu.dcc.ld_tid_b[2:0];
14429// Don't assert LSU_complete in case of dtlb or irf errors
14430
14431assign lsu_valid_b = (`SPC5.lsu.dcc.pref_inst_b &
14432 ~(dec_flush_lb | `SPC5.lsu.dcc.pipe_flush_b |
14433 `SPC5.lsu_dtdp_err_b | `SPC5.lsu_dttp_err_b |
14434 `SPC5.lsu_dtmh_err_b | `SPC5.lsu.dcc.exu_error_b));
14435
14436assign lsu_data_b[7:0] = { (lsu_tid == 3'h7) & lsu_valid_b,
14437 (lsu_tid == 3'h6) & lsu_valid_b,
14438 (lsu_tid == 3'h5) & lsu_valid_b,
14439 (lsu_tid == 3'h4) & lsu_valid_b,
14440 (lsu_tid == 3'h3) & lsu_valid_b,
14441 (lsu_tid == 3'h2) & lsu_valid_b,
14442 (lsu_tid == 3'h1) & lsu_valid_b,
14443 (lsu_tid == 3'h0) & lsu_valid_b};
14444
14445assign lsu_tid_dec_b[0] = `SPC5.lsu.dcc.ld_tid_b[2:0] == 3'd0;
14446assign lsu_tid_dec_b[1] = `SPC5.lsu.dcc.ld_tid_b[2:0] == 3'd1;
14447assign lsu_tid_dec_b[2] = `SPC5.lsu.dcc.ld_tid_b[2:0] == 3'd2;
14448assign lsu_tid_dec_b[3] = `SPC5.lsu.dcc.ld_tid_b[2:0] == 3'd3;
14449assign lsu_tid_dec_b[4] = `SPC5.lsu.dcc.ld_tid_b[2:0] == 3'd4;
14450assign lsu_tid_dec_b[5] = `SPC5.lsu.dcc.ld_tid_b[2:0] == 3'd5;
14451assign lsu_tid_dec_b[6] = `SPC5.lsu.dcc.ld_tid_b[2:0] == 3'd6;
14452assign lsu_tid_dec_b[7] = `SPC5.lsu.dcc.ld_tid_b[2:0] == 3'd7;
14453
14454assign lsu_ld_valid = (`SPC5.lsu.dcc.exu_ld_vld_b |`SPC5.lsu.dcc.fgu_fld_vld_b) &
14455 ~(`SPC5.lsu.dcc.flush_all_b & `SPC5.lsu.dcc.ld_inst_vld_b);
14456assign dec_flush_lb = `SPC5.dec.dec_flush_lb | `SPC5.tlu_flush_lsu_b;
14457
14458
14459// LSU interface to CCX stub
14460
14461assign exu_lsu_valid = `SPC5.dec.del.lsu_valid_e;
14462assign exu_lsu_addr[47:0] = `SPC5.exu_lsu_address_e[47:0];
14463assign exu_lsu_tid[2:0] = lsu_tid_e[2:0];
14464assign exu_lsu_regid[4:0] = `SPC5.dec.dec_lsu_rd_e[4:0];
14465assign exu_lsu_data[63:0] = `SPC5.exu_lsu_store_data_e[63:0];
14466assign exu_lsu_instr[31:0] = ({32{`SPC5.dec.dec_lsu_sel0_e}} &
14467 inst0_e[31:0]) |
14468 ({32{~`SPC5.dec.dec_lsu_sel0_e}} &
14469 inst1_e[31:0]);
14470assign ld_inst_d = `SPC5.dec.dec_ld_inst_d;
14471
14472///////////////////////////////////////////////////////////////////////////////
14473// Debugging Instruction Opcodes Pipeline
14474///////////////////////////////////////////////////////////////////////////////
14475
14476
14477 reg [31:0] op_0_w;
14478 reg [31:0] op_1_w;
14479 reg [31:0] op_2_w;
14480 reg [31:0] op_3_w;
14481 reg [31:0] op_4_w;
14482 reg [31:0] op_5_w;
14483 reg [31:0] op_6_w;
14484 reg [31:0] op_7_w;
14485
14486 reg [31:0] op0_b;
14487 reg [31:0] op0_m;
14488 reg [31:0] op0_e;
14489 reg [31:0] op0_d;
14490
14491 reg [31:0] op1_b;
14492 reg [31:0] op1_m;
14493 reg [31:0] op1_e;
14494 reg [31:0] op1_d;
14495
14496 reg [255:0] inst0_string_w;
14497 reg [255:0] inst0_string_b;
14498 reg [255:0] inst0_string_m;
14499 reg [255:0] inst0_string_e;
14500 reg [255:0] inst0_string_d;
14501
14502 reg [255:0] inst1_string_w;
14503 reg [255:0] inst1_string_b;
14504 reg [255:0] inst1_string_m;
14505 reg [255:0] inst1_string_e;
14506 reg [255:0] inst1_string_d;
14507
14508 reg [255:0] inst0_string_p;
14509 reg [255:0] inst1_string_p;
14510 reg [255:0] inst2_string_p;
14511 reg [255:0] inst3_string_p;
14512 reg [255:0] inst4_string_p;
14513 reg [255:0] inst5_string_p;
14514 reg [255:0] inst6_string_p;
14515 reg [255:0] inst7_string_p;
14516
14517initial begin
14518 op_0_w = 32'b0;
14519 op_1_w = 32'b0;
14520 op_2_w = 32'b0;
14521 op_3_w = 32'b0;
14522 op_4_w = 32'b0;
14523 op_5_w = 32'b0;
14524 op_6_w = 32'b0;
14525 op_7_w = 32'b0;
14526end
14527
14528always @(posedge `BENCH_SPC5_GCLK) begin // {
14529 op_0_w <= ({32 { select_pc_b[0]}} & op0_b[31:0]) |
14530 ({32 {~select_pc_b[0]}} & op_0_w[31:0]) ;
14531 op_1_w <= ({32 { select_pc_b[1]}} & op0_b[31:0]) |
14532 ({32 {~select_pc_b[1]}} & op_1_w[31:0]) ;
14533 op_2_w <= ({32 { select_pc_b[2]}} & op0_b[31:0]) |
14534 ({32 {~select_pc_b[2]}} & op_2_w[31:0]) ;
14535 op_3_w <= ({32 { select_pc_b[3]}} & op0_b[31:0]) |
14536 ({32 {~select_pc_b[3]}} & op_3_w[31:0]) ;
14537 op_4_w <= ({32 { select_pc_b[4]}} & op1_b[31:0]) |
14538 ({32 {~select_pc_b[4]}} & op_4_w[31:0]) ;
14539 op_5_w <= ({32 { select_pc_b[5]}} & op1_b[31:0]) |
14540 ({32 {~select_pc_b[5]}} & op_5_w[31:0]) ;
14541 op_6_w <= ({32 { select_pc_b[6]}} & op1_b[31:0]) |
14542 ({32 {~select_pc_b[6]}} & op_6_w[31:0]) ;
14543 op_7_w <= ({32 { select_pc_b[7]}} & op1_b[31:0]) |
14544 ({32 {~select_pc_b[7]}} & op_7_w[31:0]) ;
14545
14546 op0_b <= op0_m;
14547 op0_m <= op0_e;
14548 op0_e <= op0_d;
14549 op0_d <= `SPC5.dec.ded0.decode_mux[31:0];
14550
14551 op1_b <= op1_m;
14552 op1_m <= op1_e;
14553 op1_e <= op1_d;
14554 op1_d <= `SPC5.dec.ded1.decode_mux[31:0];
14555
14556 inst0_string_w<=inst0_string_b;
14557 inst0_string_b<=inst0_string_m;
14558 inst0_string_m<=inst0_string_e;
14559 inst0_string_e<=inst0_string_d;
14560 inst0_string_d<=xlate(`SPC5.dec.ded0.decode_mux[31:0]);
14561
14562 inst1_string_w<=inst1_string_b;
14563 inst1_string_b<=inst1_string_m;
14564 inst1_string_m<=inst1_string_e;
14565 inst1_string_e<=inst1_string_d;
14566 inst1_string_d<=xlate(`SPC5.dec.ded1.decode_mux[31:0]);
14567
14568// instructions for each thread at pick
14569 inst0_string_p<=xlate(`SPC5.ifu_ibu.ibf0.buf0_in[31:0]);
14570 inst1_string_p<=xlate(`SPC5.ifu_ibu.ibf1.buf0_in[31:0]);
14571 inst2_string_p<=xlate(`SPC5.ifu_ibu.ibf2.buf0_in[31:0]);
14572 inst3_string_p<=xlate(`SPC5.ifu_ibu.ibf3.buf0_in[31:0]);
14573 inst4_string_p<=xlate(`SPC5.ifu_ibu.ibf4.buf0_in[31:0]);
14574 inst5_string_p<=xlate(`SPC5.ifu_ibu.ibf5.buf0_in[31:0]);
14575 inst6_string_p<=xlate(`SPC5.ifu_ibu.ibf6.buf0_in[31:0]);
14576 inst7_string_p<=xlate(`SPC5.ifu_ibu.ibf7.buf0_in[31:0]);
14577
14578end //}
14579
14580///////////////////////////////////////////////////////////////////////////////
14581// Functions
14582///////////////////////////////////////////////////////////////////////////////
14583function [2:0] onehot2tid;
14584 input [7:0] onehot;
14585
14586 begin
14587
14588 if (onehot[7:0]==8'b00000001) onehot2tid[2:0] = 3'b000;
14589 else if (onehot[7:0]==8'b00000010) onehot2tid[2:0] = 3'b001;
14590 else if (onehot[7:0]==8'b00000100) onehot2tid[2:0] = 3'b010;
14591 else if (onehot[7:0]==8'b00001000) onehot2tid[2:0] = 3'b011;
14592 else if (onehot[7:0]==8'b00010000) onehot2tid[2:0] = 3'b100;
14593 else if (onehot[7:0]==8'b00100000) onehot2tid[2:0] = 3'b101;
14594 else if (onehot[7:0]==8'b01000000) onehot2tid[2:0] = 3'b110;
14595 else if (onehot[7:0]==8'b10000000) onehot2tid[2:0] = 3'b111;
14596
14597 end
14598endfunction
14599
14600function [7:0] tid2onehot;
14601 input [2:0] tid;
14602
14603 begin
14604
14605 if (tid[2:0]==3'b000) tid2onehot[7:0] = 8'b00000001;
14606 else if (tid[2:0]==3'b001) tid2onehot[7:0] = 8'b00000010;
14607 else if (tid[2:0]==3'b010) tid2onehot[7:0] = 8'b00000100;
14608 else if (tid[2:0]==3'b011) tid2onehot[7:0] = 8'b00001000;
14609 else if (tid[2:0]==3'b100) tid2onehot[7:0] = 8'b00010000;
14610 else if (tid[2:0]==3'b101) tid2onehot[7:0] = 8'b00100000;
14611 else if (tid[2:0]==3'b110) tid2onehot[7:0] = 8'b01000000;
14612 else if (tid[2:0]==3'b111) tid2onehot[7:0] = 8'b10000000;
14613
14614 end
14615endfunction
14616
14617//---------------------
14618
14619function [255:0] xlate;
14620 input [31:0] inst;
14621
14622 begin
14623 casex(inst[31:0])
1462432'b10xxxxx110100xxxxx001000011xxxxx : xlate[255:0]="FADDq";
1462532'b10xxxxx110100xxxxx001000111xxxxx : xlate[255:0]="FSUBq";
1462632'b10000xx110101xxxxx001010011xxxxx : xlate[255:0]="FCMPq";
1462732'b10000xx110101xxxxx001010111xxxxx : xlate[255:0]="FCMPEq";
1462832'b10xxxxx110100xxxxx011001101xxxxx : xlate[255:0]="FsTOq";
1462932'b10xxxxx110100xxxxx011001110xxxxx : xlate[255:0]="FdTOq";
1463032'b10xxxxx110100xxxxx010001100xxxxx : xlate[255:0]="FxTOq";
1463132'b10xxxxx110100xxxxx011001100xxxxx : xlate[255:0]="FiTOq";
1463232'b10xxxxx110100xxxxx000000011xxxxx : xlate[255:0]="FMOVq";
1463332'b10xxxxx110100xxxxx000000111xxxxx : xlate[255:0]="FNEGq";
1463432'b10xxxxx110100xxxxx000001011xxxxx : xlate[255:0]="FABSq";
1463532'b10xxxxx110100xxxxx001001011xxxxx : xlate[255:0]="FMULq";
1463632'b10xxxxx110100xxxxx001101110xxxxx : xlate[255:0]="FdMULq";
1463732'b10xxxxx110100xxxxx001001111xxxxx : xlate[255:0]="FDIVq";
1463832'b10xxxxx110100xxxxx000101011xxxxx : xlate[255:0]="FSQRTq";
1463932'b10xxxxx1101010xxxx0xx100111xxxxx : xlate[255:0]="FMOVrQa";
1464032'b10xxxxx1101010xxxx0x1x00111xxxxx : xlate[255:0]="FMOVrQb";
1464132'b10xxxxx110100xxxxx011010011xxxxx : xlate[255:0]="FqTOi";
1464232'b10xxxxx110100xxxxx010000011xxxxx : xlate[255:0]="FqTOx";
1464332'b10xxxxx110100xxxxx011000111xxxxx : xlate[255:0]="FqTOs";
1464432'b10xxxxx110100xxxxx011001011xxxxx : xlate[255:0]="FqTOd";
1464532'b11xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQF";
1464632'b11xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFi";
1464732'b11xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQFA";
1464832'b11xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFAi";
1464932'b11xxxxx100110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFi";
1465032'b11xxxxx100110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQF";
1465132'b11xxxxx110110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQFA";
1465232'b11xxxxx110110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFAi";
1465332'b10xxxxx1101010xxxxxxx000011xxxxx : xlate[255:0]="FMOVQcc";
1465432'b10xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADD";
1465532'b10xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDcc";
1465632'b10xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDC";
1465732'b10xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDCcc";
1465832'b10xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDi";
1465932'b10xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDcci";
1466032'b10xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCi";
1466132'b10xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCcci";
1466232'b00x0xx1011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr1";
1466332'b00x0x1x011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr2";
1466432'b00xx000110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfccA";
1466532'b00xx1xx110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc1";
1466632'b00xxx1x110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc2";
1466732'b00xxxx1110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc3";
1466832'b00xx000101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfccA";
1466932'b00xx1xx101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc1";
1467032'b00xxx1x101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc2";
1467132'b00xxxx1101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc3";
1467232'b00xx000010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BiccA";
1467332'b00xx1xx010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc1";
1467432'b00xxx1x010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc2";
1467532'b00xxxx1010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc3";
1467632'b00xx000001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPccA";
1467732'b00xx1xx001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc1";
1467832'b00xxx1x001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc2";
1467932'b00xxxx1001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc3";
1468032'b01xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="CALL";
1468132'b11xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASA";
1468232'b11xxxxx111110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASXA";
1468332'b11xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASAi";
1468432'b11xxxxx111110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASXAi";
1468532'b10xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIV";
1468632'b10xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIV";
1468732'b10xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVcc";
1468832'b10xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVcc";
1468932'b10xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVi";
1469032'b10xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVi";
1469132'b10xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVcci";
1469232'b10xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVcci";
1469332'b1000000111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="DONE";
1469432'b1000001111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RETRY";
1469532'b10xxxxx110100xxxxx001000001xxxxx : xlate[255:0]="FADDs";
1469632'b10xxxxx110100xxxxx001000010xxxxx : xlate[255:0]="FADDd";
1469732'b10xxxxx110100xxxxx001000101xxxxx : xlate[255:0]="FSUBs";
1469832'b10xxxxx110100xxxxx001000110xxxxx : xlate[255:0]="FSUBd";
1469932'b10000xx110101xxxxx001010001xxxxx : xlate[255:0]="FCMPs";
1470032'b10000xx110101xxxxx001010010xxxxx : xlate[255:0]="FCMPd";
1470132'b10000xx110101xxxxx001010101xxxxx : xlate[255:0]="FCMPEs";
1470232'b10000xx110101xxxxx001010110xxxxx : xlate[255:0]="FCMPEd";
1470332'b10xxxxx110100xxxxx010000001xxxxx : xlate[255:0]="FsTOx";
1470432'b10xxxxx110100xxxxx010000010xxxxx : xlate[255:0]="FdTOx";
1470532'b10xxxxx110100xxxxx011010001xxxxx : xlate[255:0]="FsTOi";
1470632'b10xxxxx110100xxxxx011010010xxxxx : xlate[255:0]="FdTOi";
1470732'b10xxxxx110100xxxxx011001001xxxxx : xlate[255:0]="FsTOd";
1470832'b10xxxxx110100xxxxx011000110xxxxx : xlate[255:0]="FdTOs";
1470932'b10xxxxx110100xxxxx010000100xxxxx : xlate[255:0]="FxTOs";
1471032'b10xxxxx110100xxxxx010001000xxxxx : xlate[255:0]="FxTOd";
1471132'b10xxxxx110100xxxxx011000100xxxxx : xlate[255:0]="FiTOs";
1471232'b10xxxxx110100xxxxx011001000xxxxx : xlate[255:0]="FiTOd";
1471332'b10xxxxx110100xxxxx000000001xxxxx : xlate[255:0]="FMOVs";
1471432'b10xxxxx110100xxxxx000000010xxxxx : xlate[255:0]="FMOVd";
1471532'b10xxxxx110100xxxxx000000101xxxxx : xlate[255:0]="FNEGs";
1471632'b10xxxxx110100xxxxx000000110xxxxx : xlate[255:0]="FNEGd";
1471732'b10xxxxx110100xxxxx000001001xxxxx : xlate[255:0]="FABSs";
1471832'b10xxxxx110100xxxxx000001010xxxxx : xlate[255:0]="FABSd";
1471932'b10xxxxx110100xxxxx001001001xxxxx : xlate[255:0]="FMULs";
1472032'b10xxxxx110100xxxxx001001010xxxxx : xlate[255:0]="FMULd";
1472132'b10xxxxx110100xxxxx001101001xxxxx : xlate[255:0]="FsMULd";
1472232'b10xxxxx110100xxxxx001001101xxxxx : xlate[255:0]="FDIVs";
1472332'b10xxxxx110100xxxxx001001110xxxxx : xlate[255:0]="FDIVd";
1472432'b10xxxxx110100xxxxx000101001xxxxx : xlate[255:0]="FSQRTs";
1472532'b10xxxxx110100xxxxx000101010xxxxx : xlate[255:0]="FSQRTd";
1472632'b10xxxxx111011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSH";
1472732'b10xxxxx111011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="FLUSHi";
1472832'b10xxxxx101011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSHw";
1472932'b10xxxxx111000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="JMPL";
1473032'b10xxxxx111000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="JMPLi";
1473132'b11xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDF";
1473232'b11xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDF";
1473332'b1100000100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFSR";
1473432'b1100001100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXFSR";
1473532'b11xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFi";
1473632'b11xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFi";
1473732'b1100000100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFSRi";
1473832'b1100001100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXFSRi";
1473932'b11xxxxx110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFA";
1474032'b11xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDFA";
1474132'b11xxxxx110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFAi";
1474232'b11xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFAi";
1474332'b11xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSB";
1474432'b11xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSH";
1474532'b11xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSW";
1474632'b11xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUB";
1474732'b11xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUH";
1474832'b11xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUW";
1474932'b11xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDX";
1475032'b11xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDD";
1475132'b11xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBi";
1475232'b11xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHi";
1475332'b11xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWi";
1475432'b11xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBi";
1475532'b11xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHi";
1475632'b11xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWi";
1475732'b11xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXi";
1475832'b11xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDi";
1475932'b11xxxxx011001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSBA";
1476032'b11xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSHA";
1476132'b11xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSWA";
1476232'b11xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUBA";
1476332'b11xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUHA";
1476432'b11xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUWA";
1476532'b11xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXA";
1476632'b11xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDA";
1476732'b11xxxxx011001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBAi";
1476832'b11xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHAi";
1476932'b11xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWAi";
1477032'b11xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBAi";
1477132'b11xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHAi";
1477232'b11xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWAi";
1477332'b11xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXAi";
1477432'b11xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDAi";
1477532'b11xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUB";
1477632'b11xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBi";
1477732'b11xxxxx011101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUBA";
1477832'b11xxxxx011101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBAi";
1477932'b10xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="AND";
1478032'b10xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDcc";
1478132'b10xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDN";
1478232'b10xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDNcc";
1478332'b10xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="OR";
1478432'b10xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORcc";
1478532'b10xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORN";
1478632'b10xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORNcc";
1478732'b10xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XOR";
1478832'b10xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XORcc";
1478932'b10xxxxx000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNOR";
1479032'b10xxxxx010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNORcc";
1479132'b10xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDi";
1479232'b10xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDcci";
1479332'b10xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNi";
1479432'b10xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNcci";
1479532'b10xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORi";
1479632'b10xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORcci";
1479732'b10xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNi";
1479832'b10xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNcci";
1479932'b10xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORi";
1480032'b10xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORcci";
1480132'b10xxxxx000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORi";
1480232'b10xxxxx010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORcci";
1480332'b1000000101000011111xxxxxxxxxxxxx : xlate[255:0]="MEMBAR";
1480432'b1000000101000011110xxxxxxxxxxxxx : xlate[255:0]="STBAR";
1480532'b10xxxxx101000000000xxxxxxxxxxxxx : xlate[255:0]="RDY";
1480632'b10xxxxx101000000100xxxxxxxxxxxxx : xlate[255:0]="RDCCR";
1480732'b10xxxxx101000000110xxxxxxxxxxxxx : xlate[255:0]="RDASI";
1480832'b10xxxxx101000001000xxxxxxxxxxxxx : xlate[255:0]="RDTICK";
1480932'b10xxxxx101000001010xxxxxxxxxxxxx : xlate[255:0]="RDPC";
1481032'b10xxxxx101000001100xxxxxxxxxxxxx : xlate[255:0]="RDFPRS";
1481132'b10xxxxx101000100110xxxxxxxxxxxxx : xlate[255:0]="RDGSR";
1481232'b10xxxxx101000100000xxxxxxxxxxxxx : xlate[255:0]="RDPCR";
1481332'b10xxxxx101000100010xxxxxxxxxxxxx : xlate[255:0]="RDPIC";
1481432'b10xxxxx1101010xxxx0xx000001xxxxx : xlate[255:0]="FMOVSfcc";
1481532'b10xxxxx1101010xxxx1xx000001xxxxx : xlate[255:0]="FMOVSxcc";
1481632'b10xxxxx1101010xxxx0xx000010xxxxx : xlate[255:0]="FMOVDfcc";
1481732'b10xxxxx1101010xxxx1xx000010xxxxx : xlate[255:0]="FMOVDxcc";
1481832'b10xxxxx110101xxxxx0xx100101xxxxx : xlate[255:0]="FMOVrS1";
1481932'b10xxxxx110101xxxxx0x1x00101xxxxx : xlate[255:0]="FMOVrS2";
1482032'b10xxxxx110101xxxxx0xx100110xxxxx : xlate[255:0]="FMOVrD1";
1482132'b10xxxxx110101xxxxx0x1x00110xxxxx : xlate[255:0]="FMOVrD2";
1482232'b10xxxxx1011001xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVxcc";
1482332'b10xxxxx1011001xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVxcci";
1482432'b10xxxxx1011000xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVfcc";
1482532'b10xxxxx1011000xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVfcci";
1482632'b10xxxxx101111xxxxx0xx1xxxxxxxxxx : xlate[255:0]="MOVR1";
1482732'b10xxxxx101111xxxxx0x1xxxxxxxxxxx : xlate[255:0]="MOVR2";
1482832'b10xxxxx101111xxxxx1xx1xxxxxxxxxx : xlate[255:0]="MOVRi1";
1482932'b10xxxxx101111xxxxx1x1xxxxxxxxxxx : xlate[255:0]="MOVRi2";
1483032'b10xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULX";
1483132'b10xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVX";
1483232'b10xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVX";
1483332'b10xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULXi";
1483432'b10xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVXi";
1483532'b10xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVXi";
1483632'b10xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMUL";
1483732'b10xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMUL";
1483832'b10xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMULcc";
1483932'b10xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMULcc";
1484032'b10xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULi";
1484132'b10xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULi";
1484232'b10xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULcci";
1484332'b10xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULcci";
1484432'b10xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULScc";
1484532'b10xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULScci";
1484632'b10xxxxx101110000000xxxxxxxxxxxxx : xlate[255:0]="POPC";
1484732'b10xxxxx101110000001xxxxxxxxxxxxx : xlate[255:0]="POPCi";
1484832'b11xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCH";
1484932'b11xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHi";
1485032'b11xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCHA";
1485132'b11xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHAi";
1485232'b10xxxxx101010xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDPR";
1485332'b10xxxxx101001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDHPR";
1485432'b10xxxxx111001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RETURN";
1485532'b10xxxxx111001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RETURNi";
1485632'b10xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SAVE";
1485732'b10xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SAVEi";
1485832'b10xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RESTORE";
1485932'b10xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RESTOREi";
1486032'b1000000110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="SAVED";
1486132'b1000001110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RESTORED";
1486232'b00xxxxx100xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="SETHI";
1486332'b10xxxxx100101xxxxx00xxxxxxxxxxxx : xlate[255:0]="SLL";
1486432'b10xxxxx100110xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRL";
1486532'b10xxxxx100111xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRA";
1486632'b10xxxxx100101xxxxx01xxxxxxxxxxxx : xlate[255:0]="SLLX";
1486732'b10xxxxx100110xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRLX";
1486832'b10xxxxx100111xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRAX";
1486932'b10xxxxx100101xxxxx10xxxxxxxxxxxx : xlate[255:0]="SLLi";
1487032'b10xxxxx100110xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRLi";
1487132'b10xxxxx100111xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRAi";
1487232'b10xxxxx100101xxxxx11xxxxxxxxxxxx : xlate[255:0]="SLLXi";
1487332'b10xxxxx100110xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRLXi";
1487432'b10xxxxx100111xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRAXi";
1487532'b11xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STF";
1487632'b11xxxxx100111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDF";
1487732'b1100000100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFSR";
1487832'b1100001100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXFSR";
1487932'b11xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFi";
1488032'b11xxxxx100111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFi";
1488132'b1100000100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFSRi";
1488232'b1100001100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXFSRi";
1488332'b11xxxxx110100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFA";
1488432'b11xxxxx110111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDFA";
1488532'b11xxxxx110100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFAi";
1488632'b11xxxxx110111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFAi";
1488732'b11xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STB";
1488832'b11xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STH";
1488932'b11xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STW";
1489032'b11xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STX";
1489132'b11xxxx0000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STD";
1489232'b11xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBi";
1489332'b11xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHi";
1489432'b11xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWi";
1489532'b11xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXi";
1489632'b11xxxx0000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDi";
1489732'b11xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STBA";
1489832'b11xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STHA";
1489932'b11xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STWA";
1490032'b11xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXA";
1490132'b11xxxx0010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDA";
1490232'b11xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBAi";
1490332'b11xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHAi";
1490432'b11xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWAi";
1490532'b11xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXAi";
1490632'b11xxxx0010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDAi";
1490732'b10xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUB";
1490832'b10xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBcc";
1490932'b10xxxxx001100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBC";
1491032'b10xxxxx011100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBCcc";
1491132'b10xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBi";
1491232'b10xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBcci";
1491332'b10xxxxx001100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCi";
1491432'b10xxxxx011100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCcci";
1491532'b11xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAP";
1491632'b11xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPi";
1491732'b11xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAPA";
1491832'b11xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPAi";
1491932'b10xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDcc";
1492032'b10xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDccTV";
1492132'b10xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDcci";
1492232'b10xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDccTVi";
1492332'b10xxxxx100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBcc";
1492432'b10xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBccTV";
1492532'b10xxxxx100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBcci";
1492632'b10xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBccTVi";
1492732'b10xxxxx111010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TCC";
1492832'b10xxxxx111010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TCCi";
1492932'b10xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPR";
1493032'b10xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPRi";
1493132'b10xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRHPR";
1493232'b10xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRHPRi";
1493332'b1000000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRY";
1493432'b1000010110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRCCR";
1493532'b1000011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRASI";
1493632'b1000110110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRFPRS";
1493732'b1010011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRGSR";
1493832'b1010000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPCR";
1493932'b1010001110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPIC";
1494032'b1000000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRYi";
1494132'b1000010110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRCCRi";
1494232'b1000011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRASIi";
1494332'b1000110110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRFPRSi";
1494432'b1010011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRGSRi";
1494532'b1010000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPCRi";
1494632'b1010001110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPICi";
1494732'b1001111110000000001xxxxxxxxxxxxx : xlate[255:0]="SIR";
1494832'b10xxxxx110110xxxxx001010000xxxxx : xlate[255:0]="FPADD16";
1494932'b10xxxxx110110xxxxx001010001xxxxx : xlate[255:0]="FPADD16S";
1495032'b10xxxxx110110xxxxx001010010xxxxx : xlate[255:0]="FPADD32";
1495132'b10xxxxx110110xxxxx001010011xxxxx : xlate[255:0]="FPADD32S";
1495232'b10xxxxx110110xxxxx001010100xxxxx : xlate[255:0]="FPSUB16";
1495332'b10xxxxx110110xxxxx001010101xxxxx : xlate[255:0]="FPSUB16S";
1495432'b10xxxxx110110xxxxx001010110xxxxx : xlate[255:0]="FPSUB32";
1495532'b10xxxxx110110xxxxx001010111xxxxx : xlate[255:0]="FPSUB32S";
1495632'b10xxxxx110110xxxxx000111011xxxxx : xlate[255:0]="FPACK16";
1495732'b10xxxxx110110xxxxx000111010xxxxx : xlate[255:0]="FPACK32";
1495832'b10xxxxx110110xxxxx000111101xxxxx : xlate[255:0]="FPACKFIX";
1495932'b10xxxxx110110xxxxx001001101xxxxx : xlate[255:0]="FEXPAND";
1496032'b10xxxxx110110xxxxx001001011xxxxx : xlate[255:0]="FPMERGE";
1496132'b10xxxxx110110xxxxx000110001xxxxx : xlate[255:0]="FMUL8x16";
1496232'b10xxxxx110110xxxxx000110011xxxxx : xlate[255:0]="FMUL8x16AU";
1496332'b10xxxxx110110xxxxx000110101xxxxx : xlate[255:0]="FMUL8x16AL";
1496432'b10xxxxx110110xxxxx000110110xxxxx : xlate[255:0]="FMUL8SUx16";
1496532'b10xxxxx110110xxxxx000110111xxxxx : xlate[255:0]="FMUL8ULx16";
1496632'b10xxxxx110110xxxxx000111000xxxxx : xlate[255:0]="FMULD8SUx16";
1496732'b10xxxxx110110xxxxx000111001xxxxx : xlate[255:0]="FMULD8ULx16";
1496832'b10xxxxx110110xxxxx000011000xxxxx : xlate[255:0]="ALIGNADDRESS";
1496932'b10xxxxx110110xxxxx000011010xxxxx : xlate[255:0]="ALIGNADDRESS_LITTLE";
1497032'b10xxxxx110110xxxxx000011001xxxxx : xlate[255:0]="BMASK";
1497132'b10xxxxx110110xxxxx001001000xxxxx : xlate[255:0]="FALIGNDATA";
1497232'b10xxxxx110110xxxxx001001100xxxxx : xlate[255:0]="BSHUFFLE";
1497332'b10xxxxx110110xxxxx001100000xxxxx : xlate[255:0]="FZERO";
1497432'b10xxxxx110110xxxxx001100001xxxxx : xlate[255:0]="FZEROS";
1497532'b10xxxxx110110xxxxx001111110xxxxx : xlate[255:0]="FONE";
1497632'b10xxxxx110110xxxxx001111111xxxxx : xlate[255:0]="FONES";
1497732'b10xxxxx110110xxxxx001110100xxxxx : xlate[255:0]="FSRC1";
1497832'b10xxxxx110110xxxxx001110101xxxxx : xlate[255:0]="FSRC1S";
1497932'b10xxxxx110110xxxxx001111000xxxxx : xlate[255:0]="FSRC2";
1498032'b10xxxxx110110xxxxx001111001xxxxx : xlate[255:0]="FSRC2S";
1498132'b10xxxxx110110xxxxx001101010xxxxx : xlate[255:0]="FNOT1";
1498232'b10xxxxx110110xxxxx001101011xxxxx : xlate[255:0]="FNOT1S";
1498332'b10xxxxx110110xxxxx001100110xxxxx : xlate[255:0]="FNOT2";
1498432'b10xxxxx110110xxxxx001100111xxxxx : xlate[255:0]="FNOT2S";
1498532'b10xxxxx110110xxxxx001111100xxxxx : xlate[255:0]="FOR";
1498632'b10xxxxx110110xxxxx001111101xxxxx : xlate[255:0]="FORS";
1498732'b10xxxxx110110xxxxx001100010xxxxx : xlate[255:0]="FNOR";
1498832'b10xxxxx110110xxxxx001100011xxxxx : xlate[255:0]="FNORS";
1498932'b10xxxxx110110xxxxx001110000xxxxx : xlate[255:0]="FAND";
1499032'b10xxxxx110110xxxxx001110001xxxxx : xlate[255:0]="FANDS";
1499132'b10xxxxx110110xxxxx001101110xxxxx : xlate[255:0]="FNAND";
1499232'b10xxxxx110110xxxxx001101111xxxxx : xlate[255:0]="FNANDS";
1499332'b10xxxxx110110xxxxx001101100xxxxx : xlate[255:0]="FXOR";
1499432'b10xxxxx110110xxxxx001101101xxxxx : xlate[255:0]="FXORS";
1499532'b10xxxxx110110xxxxx001110010xxxxx : xlate[255:0]="FXNOR";
1499632'b10xxxxx110110xxxxx001110011xxxxx : xlate[255:0]="FXNORS";
1499732'b10xxxxx110110xxxxx001111010xxxxx : xlate[255:0]="FORNOT1";
1499832'b10xxxxx110110xxxxx001111011xxxxx : xlate[255:0]="FORNOT1S";
1499932'b10xxxxx110110xxxxx001110110xxxxx : xlate[255:0]="FORNOT2";
1500032'b10xxxxx110110xxxxx001110111xxxxx : xlate[255:0]="FORNOT2S";
1500132'b10xxxxx110110xxxxx001101000xxxxx : xlate[255:0]="FANDNOT1";
1500232'b10xxxxx110110xxxxx001101001xxxxx : xlate[255:0]="FANDNOT1S";
1500332'b10xxxxx110110xxxxx001100100xxxxx : xlate[255:0]="FANDNOT2";
1500432'b10xxxxx110110xxxxx001100101xxxxx : xlate[255:0]="FANDNOT2S";
1500532'b10xxxxx110110xxxxx000101000xxxxx : xlate[255:0]="FCMPGT16";
1500632'b10xxxxx110110xxxxx000101100xxxxx : xlate[255:0]="FCMPGT32";
1500732'b10xxxxx110110xxxxx000100000xxxxx : xlate[255:0]="FCMPLE16";
1500832'b10xxxxx110110xxxxx000100100xxxxx : xlate[255:0]="FCMPLE32";
1500932'b10xxxxx110110xxxxx000100010xxxxx : xlate[255:0]="FCMPNE16";
1501032'b10xxxxx110110xxxxx000100110xxxxx : xlate[255:0]="FCMPNE32";
1501132'b10xxxxx110110xxxxx000101010xxxxx : xlate[255:0]="FCMPEQ16";
1501232'b10xxxxx110110xxxxx000101110xxxxx : xlate[255:0]="FCMPEQ32";
1501332'b10xxxxx110110xxxxx000111110xxxxx : xlate[255:0]="PDIST";
1501432'b10xxxxx110110xxxxx000000000xxxxx : xlate[255:0]="EDGE8";
1501532'b10xxxxx110110xxxxx000000001xxxxx : xlate[255:0]="EDGE8N";
1501632'b10xxxxx110110xxxxx000000010xxxxx : xlate[255:0]="EDGE8L";
1501732'b10xxxxx110110xxxxx000000011xxxxx : xlate[255:0]="EDGE8LN";
1501832'b10xxxxx110110xxxxx000000100xxxxx : xlate[255:0]="EDGE16";
1501932'b10xxxxx110110xxxxx000000101xxxxx : xlate[255:0]="EDGE16N";
1502032'b10xxxxx110110xxxxx000000110xxxxx : xlate[255:0]="EDGE16L";
1502132'b10xxxxx110110xxxxx000000111xxxxx : xlate[255:0]="EDGE16LN";
1502232'b10xxxxx110110xxxxx000001000xxxxx : xlate[255:0]="EDGE32";
1502332'b10xxxxx110110xxxxx000001001xxxxx : xlate[255:0]="EDGE32N";
1502432'b10xxxxx110110xxxxx000001010xxxxx : xlate[255:0]="EDGE32L";
1502532'b10xxxxx110110xxxxx000001011xxxxx : xlate[255:0]="EDGE32LN";
1502632'b10xxxxx110110xxxxx000010000xxxxx : xlate[255:0]="ARRAY8";
1502732'b10xxxxx110110xxxxx000010010xxxxx : xlate[255:0]="ARRAY16";
1502832'b10xxxxx110110xxxxx000010100xxxxx : xlate[255:0]="ARRAY32";
1502932'b10xxxxx110110xxxxx010000001xxxxx : xlate[255:0]="SIAM";
15030 default : xlate[255:0]="unknown";
15031 endcase
15032 end
15033endfunction // xlate
15034
15035
15036`endif
15037
15038endmodule
15039
15040`endif
15041
15042
15043`ifdef CORE_6
15044
15045module nas_probes6;
15046
15047
15048`ifdef GATESIM
15049
15050
15051`else
15052 reg [7:0] ex_valid_m;
15053 reg [7:0] ex_valid_b;
15054 reg [7:0] ex_valid_w;
15055 reg [7:0] return_f4;
15056 reg [2:0] ex0_tid_m;
15057 reg [2:0] ex1_tid_m;
15058 reg [2:0] ex0_tid_b;
15059 reg [2:0] ex1_tid_b;
15060 reg [2:0] ex0_tid_w;
15061 reg [2:0] ex1_tid_w;
15062 reg fgu_valid_fb0;
15063 reg fgu_valid_fb1;
15064
15065 reg [31:0] inst0_e;
15066 reg [31:0] inst1_e;
15067
15068 reg [7:0] fg_valid;
15069
15070 reg fcc_valid_f4;
15071 reg fcc_valid_f5;
15072 reg fcc_valid_fb;
15073
15074 reg fgu0_e;
15075 reg fgu1_e;
15076 reg lsu0_e;
15077 reg lsu1_e;
15078
15079 reg [1:0] dcd_idest_e;
15080 reg [1:0] dcd_fdest_e;
15081
15082 wire [7:0] ex_valid;
15083 wire [7:0] exception_w;
15084
15085 wire [7:0] imul_valid;
15086
15087 wire fg_cond_fb;
15088
15089 wire exu_lsu_valid;
15090 wire [47:0] exu_lsu_addr;
15091 wire [31:0] exu_lsu_instr;
15092 wire [2:0] exu_lsu_tid;
15093 wire [4:0] exu_lsu_regid;
15094 wire [63:0] exu_lsu_data;
15095
15096 wire [2:0] ex0_tid_e;
15097 wire [2:0] ex1_tid_e;
15098 wire ex0_valid_e;
15099 wire ex1_valid_e;
15100 wire [7:0] ex_asr_access;
15101 wire ex_asr_valid;
15102
15103 wire [7:0] lsu_valid;
15104 wire [2:0] lsu_tid;
15105 wire [7:0] lsu_tid_dec_b;
15106 wire lsu_ld_valid;
15107 reg [7:0] lsu_data_w;
15108 wire [7:0] lsu_data_b;
15109
15110 wire ld_inst_d;
15111
15112 reg [7:0] div_idest;
15113 reg [7:0] div_fdest;
15114
15115 reg load0_e;
15116 reg load1_e;
15117
15118 reg load_m;
15119 reg load_b;
15120
15121 reg [2:0] lsu_tid_m;
15122 reg [7:0] lsu_complete_m;
15123 reg [7:0] lsu_complete_b;
15124 reg [7:0] lsu_trap_flush_d; //reqd. for store buffer ue testing
15125
15126 reg [7:0] ex_flush_w;
15127 reg [7:0] ex_flush_b;
15128
15129 reg sel_divide0_e;
15130 reg sel_divide1_e;
15131
15132 wire dec_flush_lb;
15133
15134 wire [7:0] fgu_idiv_valid;
15135
15136 wire [7:0] fgu_fdiv_valid;
15137
15138 wire [7:0] fg_div_valid;
15139
15140 wire lsu_valid_b;
15141
15142 wire [7:0] return_w;
15143 wire return0;
15144 wire return1;
15145 wire [7:0] real_exception;
15146
15147 reg [2:0] lsu_tid_b;
15148 reg fmov_valid_fb;
15149 reg fmov_valid_f5;
15150 reg fmov_valid_f4;
15151 reg fmov_valid_f3;
15152 reg fmov_valid_f2;
15153 reg fmov_valid_m;
15154 reg fmov_valid_e;
15155
15156 reg fg_flush_fb;
15157 reg fg_flush_f5;
15158 reg fg_flush_f4;
15159 reg fg_flush_f3;
15160 reg fg_flush_f2;
15161
15162 reg siam0_d;
15163 reg siam1_d;
15164
15165 reg done0_d;
15166 reg done1_d;
15167 reg retry0_d;
15168 reg retry1_d;
15169 reg done0_e;
15170 reg done1_e;
15171 reg retry0_e;
15172 reg retry1_e;
15173 reg tlu_ccr_cwp_0_valid_last;
15174 reg tlu_ccr_cwp_1_valid_last;
15175 reg [7:0] fg_fdiv_valid_fw;
15176 reg [7:0] asi_in_progress_b;
15177 reg [7:0] asi_in_progress_w;
15178 reg [7:0] asi_in_progress_fx4;
15179 reg [7:0] tlu_valid;
15180 reg [7:0] sync_reset_w;
15181
15182 reg [7:0] div_special_cancel_f4;
15183
15184 reg asi_store_b;
15185 reg asi_store_w;
15186 reg [2:0] dcc_tid_b;
15187 reg [2:0] dcc_tid_w;
15188 reg [7:0] asi_valid_w;
15189 reg [7:0] asi_valid_fx4;
15190 reg [7:0] asi_valid_fx5;
15191
15192 reg [7:0] lsu_state;
15193 reg [7:0] lsu_check;
15194 reg [2:0] lsu_tid_e;
15195
15196 reg [47:0] pc_0_e;
15197 reg [47:0] pc_1_e;
15198 reg [47:0] pc_0_m;
15199 reg [47:0] pc_1_m;
15200 reg [47:0] pc_0_b;
15201 reg [47:0] pc_1_b;
15202 reg [47:0] pc_0_w;
15203 reg [47:0] pc_1_w;
15204 reg [47:0] pc_2_w;
15205 reg [47:0] pc_3_w;
15206 reg [47:0] pc_4_w;
15207 reg [47:0] pc_5_w;
15208 reg [47:0] pc_6_w;
15209 reg [47:0] pc_7_w;
15210
15211 reg fgu_err_fx3;
15212 reg fgu_err_fx4;
15213 reg fgu_err_fx5;
15214 reg fgu_err_fb;
15215
15216 reg clkstop_d1;
15217 reg clkstop_d2;
15218 reg clkstop_d3;
15219 reg clkstop_d4;
15220 reg clkstop_d5;
15221
15222integer i;
15223integer start_dmiss0;
15224integer start_dmiss1;
15225integer start_dmiss2;
15226integer start_dmiss3;
15227integer start_dmiss4;
15228integer start_dmiss5;
15229integer start_dmiss6;
15230integer start_dmiss7;
15231integer number_dmiss;
15232integer start_imiss0;
15233integer start_imiss1;
15234integer start_imiss2;
15235integer start_imiss3;
15236integer start_imiss4;
15237integer start_imiss5;
15238integer start_imiss6;
15239integer start_imiss7;
15240integer active_imiss0;
15241integer active_imiss1;
15242integer active_imiss2;
15243integer active_imiss3;
15244integer active_imiss4;
15245integer active_imiss5;
15246integer active_imiss6;
15247integer active_imiss7;
15248integer first_imiss0;
15249integer first_imiss1;
15250integer first_imiss2;
15251integer first_imiss3;
15252integer first_imiss4;
15253integer first_imiss5;
15254integer first_imiss6;
15255integer first_imiss7;
15256integer number_imiss;
15257integer clock;
15258integer sum_dmiss_latency;
15259integer sum_imiss_latency;
15260reg spec_dmiss;
15261integer dmiss_cnt;
15262integer imiss_cnt;
15263reg pcx_req;
15264integer l15dmiss_cnt;
15265integer l15imiss_cnt;
15266
15267
15268initial begin // {
15269 pcx_req=0;
15270 l15imiss_cnt=0;
15271 l15dmiss_cnt=0;
15272 imiss_cnt=0;
15273 dmiss_cnt=0;
15274 clock=0;
15275 start_dmiss0=0;
15276 start_dmiss1=0;
15277 start_dmiss2=0;
15278 start_dmiss3=0;
15279 start_dmiss4=0;
15280 start_dmiss5=0;
15281 start_dmiss6=0;
15282 start_dmiss7=0;
15283 number_dmiss=0;
15284 start_imiss0=0;
15285 start_imiss1=0;
15286 start_imiss2=0;
15287 start_imiss3=0;
15288 start_imiss4=0;
15289 start_imiss5=0;
15290 start_imiss6=0;
15291 start_imiss7=0;
15292 active_imiss0=0;
15293 active_imiss1=0;
15294 active_imiss2=0;
15295 active_imiss3=0;
15296 active_imiss4=0;
15297 active_imiss5=0;
15298 active_imiss6=0;
15299 active_imiss7=0;
15300 first_imiss0=0;
15301 first_imiss1=0;
15302 first_imiss2=0;
15303 first_imiss3=0;
15304 first_imiss4=0;
15305 first_imiss5=0;
15306 first_imiss6=0;
15307 first_imiss7=0;
15308 number_imiss=0;
15309 sum_dmiss_latency=0;
15310 sum_imiss_latency=0;
15311 asi_in_progress_b <= 8'h0;
15312 asi_in_progress_w <= 8'h0;
15313 asi_in_progress_fx4 <= 8'h0;
15314 tlu_valid <= 8'h0;
15315 div_idest <= 8'h0;
15316 div_fdest <= 8'h0;
15317 lsu_state <= 8'h0;
15318 clkstop_d1 <=0;
15319 clkstop_d2 <=0;
15320 clkstop_d3 <=0;
15321 clkstop_d4 <=0;
15322 clkstop_d5 <=0;
15323
15324end //}
15325
15326wire [7:0] asi_store_flush_w = {`SPC6.lsu.sbs7.flush_st_w,
15327 `SPC6.lsu.sbs6.flush_st_w,
15328 `SPC6.lsu.sbs5.flush_st_w,
15329 `SPC6.lsu.sbs4.flush_st_w,
15330 `SPC6.lsu.sbs3.flush_st_w,
15331 `SPC6.lsu.sbs2.flush_st_w,
15332 `SPC6.lsu.sbs1.flush_st_w,
15333 `SPC6.lsu.sbs0.flush_st_w};
15334
15335wire [7:0] store_sync = {`SPC6.lsu.sbs7.trap_sync,
15336 `SPC6.lsu.sbs6.trap_sync,
15337 `SPC6.lsu.sbs5.trap_sync,
15338 `SPC6.lsu.sbs4.trap_sync,
15339 `SPC6.lsu.sbs3.trap_sync,
15340 `SPC6.lsu.sbs2.trap_sync,
15341 `SPC6.lsu.sbs1.trap_sync,
15342 `SPC6.lsu.sbs0.trap_sync};
15343wire [7:0] sync_reset = {`SPC6.lsu.sbs7.sync_state_rst,
15344 `SPC6.lsu.sbs6.sync_state_rst,
15345 `SPC6.lsu.sbs5.sync_state_rst,
15346 `SPC6.lsu.sbs4.sync_state_rst,
15347 `SPC6.lsu.sbs3.sync_state_rst,
15348 `SPC6.lsu.sbs2.sync_state_rst,
15349 `SPC6.lsu.sbs1.sync_state_rst,
15350 `SPC6.lsu.sbs0.sync_state_rst};
15351
15352//--------------------
15353// Used in nas_pipe for TSB Config Regs Capture/Compare
15354// ADD_TSB_CFG
15355
15356// NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
15357`ifndef EMUL
15358wire [63:0] ctxt_z_tsb_cfg0_reg [7:0]; // 1 per thread
15359wire [63:0] ctxt_z_tsb_cfg1_reg [7:0];
15360wire [63:0] ctxt_z_tsb_cfg2_reg [7:0];
15361wire [63:0] ctxt_z_tsb_cfg3_reg [7:0];
15362wire [63:0] ctxt_nz_tsb_cfg0_reg [7:0];
15363wire [63:0] ctxt_nz_tsb_cfg1_reg [7:0];
15364wire [63:0] ctxt_nz_tsb_cfg2_reg [7:0];
15365wire [63:0] ctxt_nz_tsb_cfg3_reg [7:0];
15366
15367// There are 32 entries in each MMU MRA but not all are needed.
15368// Indexing:
15369// Bits 4:3 of the address are the lower two bits of the TID
15370// Bits 2:0 of the address select the register as below
15371// mmu.mra0.array.mem for T0-T3
15372// mmu.mra1.array.mem for T4-T7
15373// (this is documented in mmu_asi_ctl.sv)
15374// z TSB cfg 0,1 address 0
15375// z TSB cfg 2,3 address 1
15376// nz TSB cfg 0,1 address 2
15377// nz TSB cfg 2,3 address 3
15378// Real range, physical offset pair 0 address 4
15379// Real range, physical offset pair 1 address 5
15380// Real range, physical offset pair 2 address 6
15381// Real range, physical offset pair 3 address 7
15382
15383wire [83:0] mmu_mra0_a0 = `SPC6.mmu.mra0.array.mem[0];
15384wire [83:0] mmu_mra0_a8 = `SPC6.mmu.mra0.array.mem[8];
15385wire [83:0] mmu_mra0_a16 = `SPC6.mmu.mra0.array.mem[16];
15386wire [83:0] mmu_mra0_a24 = `SPC6.mmu.mra0.array.mem[24];
15387wire [83:0] mmu_mra0_a1 = `SPC6.mmu.mra0.array.mem[1];
15388wire [83:0] mmu_mra0_a9 = `SPC6.mmu.mra0.array.mem[9];
15389wire [83:0] mmu_mra0_a17 = `SPC6.mmu.mra0.array.mem[17];
15390wire [83:0] mmu_mra0_a25 = `SPC6.mmu.mra0.array.mem[25];
15391wire [83:0] mmu_mra0_a2 = `SPC6.mmu.mra0.array.mem[2];
15392wire [83:0] mmu_mra0_a10 = `SPC6.mmu.mra0.array.mem[10];
15393wire [83:0] mmu_mra0_a18 = `SPC6.mmu.mra0.array.mem[18];
15394wire [83:0] mmu_mra0_a26 = `SPC6.mmu.mra0.array.mem[26];
15395wire [83:0] mmu_mra0_a3 = `SPC6.mmu.mra0.array.mem[3];
15396wire [83:0] mmu_mra0_a11 = `SPC6.mmu.mra0.array.mem[11];
15397wire [83:0] mmu_mra0_a19 = `SPC6.mmu.mra0.array.mem[19];
15398wire [83:0] mmu_mra0_a27 = `SPC6.mmu.mra0.array.mem[27];
15399wire [83:0] mmu_mra1_a0 = `SPC6.mmu.mra1.array.mem[0];
15400wire [83:0] mmu_mra1_a8 = `SPC6.mmu.mra1.array.mem[8];
15401wire [83:0] mmu_mra1_a16 = `SPC6.mmu.mra1.array.mem[16];
15402wire [83:0] mmu_mra1_a24 = `SPC6.mmu.mra1.array.mem[24];
15403wire [83:0] mmu_mra1_a1 = `SPC6.mmu.mra1.array.mem[1];
15404wire [83:0] mmu_mra1_a9 = `SPC6.mmu.mra1.array.mem[9];
15405wire [83:0] mmu_mra1_a17 = `SPC6.mmu.mra1.array.mem[17];
15406wire [83:0] mmu_mra1_a25 = `SPC6.mmu.mra1.array.mem[25];
15407wire [83:0] mmu_mra1_a2 = `SPC6.mmu.mra1.array.mem[2];
15408wire [83:0] mmu_mra1_a10 = `SPC6.mmu.mra1.array.mem[10];
15409wire [83:0] mmu_mra1_a18 = `SPC6.mmu.mra1.array.mem[18];
15410wire [83:0] mmu_mra1_a26 = `SPC6.mmu.mra1.array.mem[26];
15411wire [83:0] mmu_mra1_a3 = `SPC6.mmu.mra1.array.mem[3];
15412wire [83:0] mmu_mra1_a11 = `SPC6.mmu.mra1.array.mem[11];
15413wire [83:0] mmu_mra1_a19 = `SPC6.mmu.mra1.array.mem[19];
15414wire [83:0] mmu_mra1_a27 = `SPC6.mmu.mra1.array.mem[27];
15415
15416
15417// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
15418// as well as the physical to architectural bit position relationships.
15419assign ctxt_z_tsb_cfg0_reg[0] = {`SPC6.mmu.asi.t0_e_z[0], // z_tsb_cfg0[63]
15420 mmu_mra0_a0[76:75], // z_tsb_cfg0[62:61]
15421 21'b0, // z_tsb_cfg0[60:40]
15422 mmu_mra0_a0[74:48], // z_tsb_cfg0[39:13]
15423 4'b0, // z_tsb_cfg0[12:9]
15424 mmu_mra0_a0[47:39] // z_tsb_cfg0[8:0]
15425 };
15426assign ctxt_z_tsb_cfg1_reg[0] = {`SPC6.mmu.asi.t0_e_z[1], // z_tsb_cfg0[63]
15427 mmu_mra0_a0[37:36], // z_tsb_cfg0[62:61]
15428 21'b0, // z_tsb_cfg0[60:40]
15429 mmu_mra0_a0[35:9], // z_tsb_cfg0[39:13]
15430 4'b0, // z_tsb_cfg0[12:9]
15431 mmu_mra0_a0[8:0] // z_tsb_cfg0[8:0]
15432 };
15433assign ctxt_z_tsb_cfg2_reg[0] = {`SPC6.mmu.asi.t0_e_z[2], // z_tsb_cfg0[63]
15434 mmu_mra0_a1[76:75], // z_tsb_cfg0[62:61]
15435 21'b0, // z_tsb_cfg0[60:40]
15436 mmu_mra0_a1[74:48], // z_tsb_cfg0[39:13]
15437 4'b0, // z_tsb_cfg0[12:9]
15438 mmu_mra0_a1[47:39] // z_tsb_cfg0[8:0]
15439 };
15440assign ctxt_z_tsb_cfg3_reg[0] = {`SPC6.mmu.asi.t0_e_z[3], // z_tsb_cfg0[63]
15441 mmu_mra0_a1[37:36], // z_tsb_cfg0[62:61]
15442 21'b0, // z_tsb_cfg0[60:40]
15443 mmu_mra0_a1[35:9], // z_tsb_cfg0[39:13]
15444 4'b0, // z_tsb_cfg0[12:9]
15445 mmu_mra0_a1[8:0] // z_tsb_cfg0[8:0]
15446 };
15447assign ctxt_nz_tsb_cfg0_reg[0] = {`SPC6.mmu.asi.t0_e_nz[0],// z_tsb_cfg0[63]
15448 mmu_mra0_a2[76:75], // z_tsb_cfg0[62:61]
15449 21'b0, // z_tsb_cfg0[60:40]
15450 mmu_mra0_a2[74:48], // z_tsb_cfg0[39:13]
15451 4'b0, // z_tsb_cfg0[12:9]
15452 mmu_mra0_a2[47:39] // z_tsb_cfg0[8:0]
15453 };
15454assign ctxt_nz_tsb_cfg1_reg[0] = {`SPC6.mmu.asi.t0_e_nz[1],// z_tsb_cfg0[63]
15455 mmu_mra0_a2[37:36], // z_tsb_cfg0[62:61]
15456 21'b0, // z_tsb_cfg0[60:40]
15457 mmu_mra0_a2[35:9], // z_tsb_cfg0[39:13]
15458 4'b0, // z_tsb_cfg0[12:9]
15459 mmu_mra0_a2[8:0] // z_tsb_cfg0[8:0]
15460 };
15461assign ctxt_nz_tsb_cfg2_reg[0] = {`SPC6.mmu.asi.t0_e_nz[2],// z_tsb_cfg0[63]
15462 mmu_mra0_a3[76:75], // z_tsb_cfg0[62:61]
15463 21'b0, // z_tsb_cfg0[60:40]
15464 mmu_mra0_a3[74:48], // z_tsb_cfg0[39:13]
15465 4'b0, // z_tsb_cfg0[12:9]
15466 mmu_mra0_a3[47:39] // z_tsb_cfg0[8:0]
15467 };
15468assign ctxt_nz_tsb_cfg3_reg[0] = {`SPC6.mmu.asi.t0_e_nz[3],// z_tsb_cfg0[63]
15469 mmu_mra0_a3[37:36], // z_tsb_cfg0[62:61]
15470 21'b0, // z_tsb_cfg0[60:40]
15471 mmu_mra0_a3[35:9], // z_tsb_cfg0[39:13]
15472 4'b0, // z_tsb_cfg0[12:9]
15473 mmu_mra0_a3[8:0] // z_tsb_cfg0[8:0]
15474 };
15475
15476// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
15477// as well as the physical to architectural bit position relationships.
15478assign ctxt_z_tsb_cfg0_reg[1] = {`SPC6.mmu.asi.t1_e_z[0], // z_tsb_cfg0[63]
15479 mmu_mra0_a8[76:75], // z_tsb_cfg0[62:61]
15480 21'b0, // z_tsb_cfg0[60:40]
15481 mmu_mra0_a8[74:48], // z_tsb_cfg0[39:13]
15482 4'b0, // z_tsb_cfg0[12:9]
15483 mmu_mra0_a8[47:39] // z_tsb_cfg0[8:0]
15484 };
15485assign ctxt_z_tsb_cfg1_reg[1] = {`SPC6.mmu.asi.t1_e_z[1], // z_tsb_cfg0[63]
15486 mmu_mra0_a8[37:36], // z_tsb_cfg0[62:61]
15487 21'b0, // z_tsb_cfg0[60:40]
15488 mmu_mra0_a8[35:9], // z_tsb_cfg0[39:13]
15489 4'b0, // z_tsb_cfg0[12:9]
15490 mmu_mra0_a8[8:0] // z_tsb_cfg0[8:0]
15491 };
15492assign ctxt_z_tsb_cfg2_reg[1] = {`SPC6.mmu.asi.t1_e_z[2], // z_tsb_cfg0[63]
15493 mmu_mra0_a9[76:75], // z_tsb_cfg0[62:61]
15494 21'b0, // z_tsb_cfg0[60:40]
15495 mmu_mra0_a9[74:48], // z_tsb_cfg0[39:13]
15496 4'b0, // z_tsb_cfg0[12:9]
15497 mmu_mra0_a9[47:39] // z_tsb_cfg0[8:0]
15498 };
15499assign ctxt_z_tsb_cfg3_reg[1] = {`SPC6.mmu.asi.t1_e_z[3], // z_tsb_cfg0[63]
15500 mmu_mra0_a9[37:36], // z_tsb_cfg0[62:61]
15501 21'b0, // z_tsb_cfg0[60:40]
15502 mmu_mra0_a9[35:9], // z_tsb_cfg0[39:13]
15503 4'b0, // z_tsb_cfg0[12:9]
15504 mmu_mra0_a9[8:0] // z_tsb_cfg0[8:0]
15505 };
15506assign ctxt_nz_tsb_cfg0_reg[1] = {`SPC6.mmu.asi.t1_e_nz[0],// z_tsb_cfg0[63]
15507 mmu_mra0_a10[76:75], // z_tsb_cfg0[62:61]
15508 21'b0, // z_tsb_cfg0[60:40]
15509 mmu_mra0_a10[74:48], // z_tsb_cfg0[39:13]
15510 4'b0, // z_tsb_cfg0[12:9]
15511 mmu_mra0_a10[47:39] // z_tsb_cfg0[8:0]
15512 };
15513assign ctxt_nz_tsb_cfg1_reg[1] = {`SPC6.mmu.asi.t1_e_nz[1],// z_tsb_cfg0[63]
15514 mmu_mra0_a10[37:36], // z_tsb_cfg0[62:61]
15515 21'b0, // z_tsb_cfg0[60:40]
15516 mmu_mra0_a10[35:9], // z_tsb_cfg0[39:13]
15517 4'b0, // z_tsb_cfg0[12:9]
15518 mmu_mra0_a10[8:0] // z_tsb_cfg0[8:0]
15519 };
15520assign ctxt_nz_tsb_cfg2_reg[1] = {`SPC6.mmu.asi.t1_e_nz[2],// z_tsb_cfg0[63]
15521 mmu_mra0_a11[76:75], // z_tsb_cfg0[62:61]
15522 21'b0, // z_tsb_cfg0[60:40]
15523 mmu_mra0_a11[74:48], // z_tsb_cfg0[39:13]
15524 4'b0, // z_tsb_cfg0[12:9]
15525 mmu_mra0_a11[47:39] // z_tsb_cfg0[8:0]
15526 };
15527assign ctxt_nz_tsb_cfg3_reg[1] = {`SPC6.mmu.asi.t1_e_nz[3],// z_tsb_cfg0[63]
15528 mmu_mra0_a11[37:36], // z_tsb_cfg0[62:61]
15529 21'b0, // z_tsb_cfg0[60:40]
15530 mmu_mra0_a11[35:9], // z_tsb_cfg0[39:13]
15531 4'b0, // z_tsb_cfg0[12:9]
15532 mmu_mra0_a11[8:0] // z_tsb_cfg0[8:0]
15533 };
15534
15535// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
15536// as well as the physical to architectural bit position relationships.
15537assign ctxt_z_tsb_cfg0_reg[2] = {`SPC6.mmu.asi.t2_e_z[0], // z_tsb_cfg0[63]
15538 mmu_mra0_a16[76:75], // z_tsb_cfg0[62:61]
15539 21'b0, // z_tsb_cfg0[60:40]
15540 mmu_mra0_a16[74:48], // z_tsb_cfg0[39:13]
15541 4'b0, // z_tsb_cfg0[12:9]
15542 mmu_mra0_a16[47:39] // z_tsb_cfg0[8:0]
15543 };
15544assign ctxt_z_tsb_cfg1_reg[2] = {`SPC6.mmu.asi.t2_e_z[1], // z_tsb_cfg0[63]
15545 mmu_mra0_a16[37:36], // z_tsb_cfg0[62:61]
15546 21'b0, // z_tsb_cfg0[60:40]
15547 mmu_mra0_a16[35:9], // z_tsb_cfg0[39:13]
15548 4'b0, // z_tsb_cfg0[12:9]
15549 mmu_mra0_a16[8:0] // z_tsb_cfg0[8:0]
15550 };
15551assign ctxt_z_tsb_cfg2_reg[2] = {`SPC6.mmu.asi.t2_e_z[2], // z_tsb_cfg0[63]
15552 mmu_mra0_a17[76:75], // z_tsb_cfg0[62:61]
15553 21'b0, // z_tsb_cfg0[60:40]
15554 mmu_mra0_a17[74:48], // z_tsb_cfg0[39:13]
15555 4'b0, // z_tsb_cfg0[12:9]
15556 mmu_mra0_a17[47:39] // z_tsb_cfg0[8:0]
15557 };
15558assign ctxt_z_tsb_cfg3_reg[2] = {`SPC6.mmu.asi.t2_e_z[3], // z_tsb_cfg0[63]
15559 mmu_mra0_a17[37:36], // z_tsb_cfg0[62:61]
15560 21'b0, // z_tsb_cfg0[60:40]
15561 mmu_mra0_a17[35:9], // z_tsb_cfg0[39:13]
15562 4'b0, // z_tsb_cfg0[12:9]
15563 mmu_mra0_a17[8:0] // z_tsb_cfg0[8:0]
15564 };
15565assign ctxt_nz_tsb_cfg0_reg[2] = {`SPC6.mmu.asi.t2_e_nz[0],// z_tsb_cfg0[63]
15566 mmu_mra0_a18[76:75], // z_tsb_cfg0[62:61]
15567 21'b0, // z_tsb_cfg0[60:40]
15568 mmu_mra0_a18[74:48], // z_tsb_cfg0[39:13]
15569 4'b0, // z_tsb_cfg0[12:9]
15570 mmu_mra0_a18[47:39] // z_tsb_cfg0[8:0]
15571 };
15572assign ctxt_nz_tsb_cfg1_reg[2] = {`SPC6.mmu.asi.t2_e_nz[1],// z_tsb_cfg0[63]
15573 mmu_mra0_a18[37:36], // z_tsb_cfg0[62:61]
15574 21'b0, // z_tsb_cfg0[60:40]
15575 mmu_mra0_a18[35:9], // z_tsb_cfg0[39:13]
15576 4'b0, // z_tsb_cfg0[12:9]
15577 mmu_mra0_a18[8:0] // z_tsb_cfg0[8:0]
15578 };
15579assign ctxt_nz_tsb_cfg2_reg[2] = {`SPC6.mmu.asi.t2_e_nz[2],// z_tsb_cfg0[63]
15580 mmu_mra0_a19[76:75], // z_tsb_cfg0[62:61]
15581 21'b0, // z_tsb_cfg0[60:40]
15582 mmu_mra0_a19[74:48], // z_tsb_cfg0[39:13]
15583 4'b0, // z_tsb_cfg0[12:9]
15584 mmu_mra0_a19[47:39] // z_tsb_cfg0[8:0]
15585 };
15586assign ctxt_nz_tsb_cfg3_reg[2] = {`SPC6.mmu.asi.t2_e_nz[3],// z_tsb_cfg0[63]
15587 mmu_mra0_a19[37:36], // z_tsb_cfg0[62:61]
15588 21'b0, // z_tsb_cfg0[60:40]
15589 mmu_mra0_a19[35:9], // z_tsb_cfg0[39:13]
15590 4'b0, // z_tsb_cfg0[12:9]
15591 mmu_mra0_a19[8:0] // z_tsb_cfg0[8:0]
15592 };
15593
15594// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
15595// as well as the physical to architectural bit position relationships.
15596assign ctxt_z_tsb_cfg0_reg[3] = {`SPC6.mmu.asi.t3_e_z[0], // z_tsb_cfg0[63]
15597 mmu_mra0_a24[76:75], // z_tsb_cfg0[62:61]
15598 21'b0, // z_tsb_cfg0[60:40]
15599 mmu_mra0_a24[74:48], // z_tsb_cfg0[39:13]
15600 4'b0, // z_tsb_cfg0[12:9]
15601 mmu_mra0_a24[47:39] // z_tsb_cfg0[8:0]
15602 };
15603assign ctxt_z_tsb_cfg1_reg[3] = {`SPC6.mmu.asi.t3_e_z[1], // z_tsb_cfg0[63]
15604 mmu_mra0_a24[37:36], // z_tsb_cfg0[62:61]
15605 21'b0, // z_tsb_cfg0[60:40]
15606 mmu_mra0_a24[35:9], // z_tsb_cfg0[39:13]
15607 4'b0, // z_tsb_cfg0[12:9]
15608 mmu_mra0_a24[8:0] // z_tsb_cfg0[8:0]
15609 };
15610assign ctxt_z_tsb_cfg2_reg[3] = {`SPC6.mmu.asi.t3_e_z[2], // z_tsb_cfg0[63]
15611 mmu_mra0_a25[76:75], // z_tsb_cfg0[62:61]
15612 21'b0, // z_tsb_cfg0[60:40]
15613 mmu_mra0_a25[74:48], // z_tsb_cfg0[39:13]
15614 4'b0, // z_tsb_cfg0[12:9]
15615 mmu_mra0_a25[47:39] // z_tsb_cfg0[8:0]
15616 };
15617assign ctxt_z_tsb_cfg3_reg[3] = {`SPC6.mmu.asi.t3_e_z[3], // z_tsb_cfg0[63]
15618 mmu_mra0_a25[37:36], // z_tsb_cfg0[62:61]
15619 21'b0, // z_tsb_cfg0[60:40]
15620 mmu_mra0_a25[35:9], // z_tsb_cfg0[39:13]
15621 4'b0, // z_tsb_cfg0[12:9]
15622 mmu_mra0_a25[8:0] // z_tsb_cfg0[8:0]
15623 };
15624assign ctxt_nz_tsb_cfg0_reg[3] = {`SPC6.mmu.asi.t3_e_nz[0],// z_tsb_cfg0[63]
15625 mmu_mra0_a26[76:75], // z_tsb_cfg0[62:61]
15626 21'b0, // z_tsb_cfg0[60:40]
15627 mmu_mra0_a26[74:48], // z_tsb_cfg0[39:13]
15628 4'b0, // z_tsb_cfg0[12:9]
15629 mmu_mra0_a26[47:39] // z_tsb_cfg0[8:0]
15630 };
15631assign ctxt_nz_tsb_cfg1_reg[3] = {`SPC6.mmu.asi.t3_e_nz[1],// z_tsb_cfg0[63]
15632 mmu_mra0_a26[37:36], // z_tsb_cfg0[62:61]
15633 21'b0, // z_tsb_cfg0[60:40]
15634 mmu_mra0_a26[35:9], // z_tsb_cfg0[39:13]
15635 4'b0, // z_tsb_cfg0[12:9]
15636 mmu_mra0_a26[8:0] // z_tsb_cfg0[8:0]
15637 };
15638assign ctxt_nz_tsb_cfg2_reg[3] = {`SPC6.mmu.asi.t3_e_nz[2],// z_tsb_cfg0[63]
15639 mmu_mra0_a27[76:75], // z_tsb_cfg0[62:61]
15640 21'b0, // z_tsb_cfg0[60:40]
15641 mmu_mra0_a27[74:48], // z_tsb_cfg0[39:13]
15642 4'b0, // z_tsb_cfg0[12:9]
15643 mmu_mra0_a27[47:39] // z_tsb_cfg0[8:0]
15644 };
15645assign ctxt_nz_tsb_cfg3_reg[3] = {`SPC6.mmu.asi.t3_e_nz[3],// z_tsb_cfg0[63]
15646 mmu_mra0_a27[37:36], // z_tsb_cfg0[62:61]
15647 21'b0, // z_tsb_cfg0[60:40]
15648 mmu_mra0_a27[35:9], // z_tsb_cfg0[39:13]
15649 4'b0, // z_tsb_cfg0[12:9]
15650 mmu_mra0_a27[8:0] // z_tsb_cfg0[8:0]
15651 };
15652
15653// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
15654// as well as the physical to architectural bit position relationships.
15655assign ctxt_z_tsb_cfg0_reg[4] = {`SPC6.mmu.asi.t4_e_z[0], // z_tsb_cfg0[63]
15656 mmu_mra1_a0[76:75], // z_tsb_cfg0[62:61]
15657 21'b0, // z_tsb_cfg0[60:40]
15658 mmu_mra1_a0[74:48], // z_tsb_cfg0[39:13]
15659 4'b0, // z_tsb_cfg0[12:9]
15660 mmu_mra1_a0[47:39] // z_tsb_cfg0[8:0]
15661 };
15662assign ctxt_z_tsb_cfg1_reg[4] = {`SPC6.mmu.asi.t4_e_z[1], // z_tsb_cfg0[63]
15663 mmu_mra1_a0[37:36], // z_tsb_cfg0[62:61]
15664 21'b0, // z_tsb_cfg0[60:40]
15665 mmu_mra1_a0[35:9], // z_tsb_cfg0[39:13]
15666 4'b0, // z_tsb_cfg0[12:9]
15667 mmu_mra1_a0[8:0] // z_tsb_cfg0[8:0]
15668 };
15669assign ctxt_z_tsb_cfg2_reg[4] = {`SPC6.mmu.asi.t4_e_z[2], // z_tsb_cfg0[63]
15670 mmu_mra1_a1[76:75], // z_tsb_cfg0[62:61]
15671 21'b0, // z_tsb_cfg0[60:40]
15672 mmu_mra1_a1[74:48], // z_tsb_cfg0[39:13]
15673 4'b0, // z_tsb_cfg0[12:9]
15674 mmu_mra1_a1[47:39] // z_tsb_cfg0[8:0]
15675 };
15676assign ctxt_z_tsb_cfg3_reg[4] = {`SPC6.mmu.asi.t4_e_z[3], // z_tsb_cfg0[63]
15677 mmu_mra1_a1[37:36], // z_tsb_cfg0[62:61]
15678 21'b0, // z_tsb_cfg0[60:40]
15679 mmu_mra1_a1[35:9], // z_tsb_cfg0[39:13]
15680 4'b0, // z_tsb_cfg0[12:9]
15681 mmu_mra1_a1[8:0] // z_tsb_cfg0[8:0]
15682 };
15683assign ctxt_nz_tsb_cfg0_reg[4] = {`SPC6.mmu.asi.t4_e_nz[0],// z_tsb_cfg0[63]
15684 mmu_mra1_a2[76:75], // z_tsb_cfg0[62:61]
15685 21'b0, // z_tsb_cfg0[60:40]
15686 mmu_mra1_a2[74:48], // z_tsb_cfg0[39:13]
15687 4'b0, // z_tsb_cfg0[12:9]
15688 mmu_mra1_a2[47:39] // z_tsb_cfg0[8:0]
15689 };
15690assign ctxt_nz_tsb_cfg1_reg[4] = {`SPC6.mmu.asi.t4_e_nz[1],// z_tsb_cfg0[63]
15691 mmu_mra1_a2[37:36], // z_tsb_cfg0[62:61]
15692 21'b0, // z_tsb_cfg0[60:40]
15693 mmu_mra1_a2[35:9], // z_tsb_cfg0[39:13]
15694 4'b0, // z_tsb_cfg0[12:9]
15695 mmu_mra1_a2[8:0] // z_tsb_cfg0[8:0]
15696 };
15697assign ctxt_nz_tsb_cfg2_reg[4] = {`SPC6.mmu.asi.t4_e_nz[2],// z_tsb_cfg0[63]
15698 mmu_mra1_a3[76:75], // z_tsb_cfg0[62:61]
15699 21'b0, // z_tsb_cfg0[60:40]
15700 mmu_mra1_a3[74:48], // z_tsb_cfg0[39:13]
15701 4'b0, // z_tsb_cfg0[12:9]
15702 mmu_mra1_a3[47:39] // z_tsb_cfg0[8:0]
15703 };
15704assign ctxt_nz_tsb_cfg3_reg[4] = {`SPC6.mmu.asi.t4_e_nz[3],// z_tsb_cfg0[63]
15705 mmu_mra1_a3[37:36], // z_tsb_cfg0[62:61]
15706 21'b0, // z_tsb_cfg0[60:40]
15707 mmu_mra1_a3[35:9], // z_tsb_cfg0[39:13]
15708 4'b0, // z_tsb_cfg0[12:9]
15709 mmu_mra1_a3[8:0] // z_tsb_cfg0[8:0]
15710 };
15711
15712// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
15713// as well as the physical to architectural bit position relationships.
15714assign ctxt_z_tsb_cfg0_reg[5] = {`SPC6.mmu.asi.t5_e_z[0], // z_tsb_cfg0[63]
15715 mmu_mra1_a8[76:75], // z_tsb_cfg0[62:61]
15716 21'b0, // z_tsb_cfg0[60:40]
15717 mmu_mra1_a8[74:48], // z_tsb_cfg0[39:13]
15718 4'b0, // z_tsb_cfg0[12:9]
15719 mmu_mra1_a8[47:39] // z_tsb_cfg0[8:0]
15720 };
15721assign ctxt_z_tsb_cfg1_reg[5] = {`SPC6.mmu.asi.t5_e_z[1], // z_tsb_cfg0[63]
15722 mmu_mra1_a8[37:36], // z_tsb_cfg0[62:61]
15723 21'b0, // z_tsb_cfg0[60:40]
15724 mmu_mra1_a8[35:9], // z_tsb_cfg0[39:13]
15725 4'b0, // z_tsb_cfg0[12:9]
15726 mmu_mra1_a8[8:0] // z_tsb_cfg0[8:0]
15727 };
15728assign ctxt_z_tsb_cfg2_reg[5] = {`SPC6.mmu.asi.t5_e_z[2], // z_tsb_cfg0[63]
15729 mmu_mra1_a9[76:75], // z_tsb_cfg0[62:61]
15730 21'b0, // z_tsb_cfg0[60:40]
15731 mmu_mra1_a9[74:48], // z_tsb_cfg0[39:13]
15732 4'b0, // z_tsb_cfg0[12:9]
15733 mmu_mra1_a9[47:39] // z_tsb_cfg0[8:0]
15734 };
15735assign ctxt_z_tsb_cfg3_reg[5] = {`SPC6.mmu.asi.t5_e_z[3], // z_tsb_cfg0[63]
15736 mmu_mra1_a9[37:36], // z_tsb_cfg0[62:61]
15737 21'b0, // z_tsb_cfg0[60:40]
15738 mmu_mra1_a9[35:9], // z_tsb_cfg0[39:13]
15739 4'b0, // z_tsb_cfg0[12:9]
15740 mmu_mra1_a9[8:0] // z_tsb_cfg0[8:0]
15741 };
15742assign ctxt_nz_tsb_cfg0_reg[5] = {`SPC6.mmu.asi.t5_e_nz[0],// z_tsb_cfg0[63]
15743 mmu_mra1_a10[76:75], // z_tsb_cfg0[62:61]
15744 21'b0, // z_tsb_cfg0[60:40]
15745 mmu_mra1_a10[74:48], // z_tsb_cfg0[39:13]
15746 4'b0, // z_tsb_cfg0[12:9]
15747 mmu_mra1_a10[47:39] // z_tsb_cfg0[8:0]
15748 };
15749assign ctxt_nz_tsb_cfg1_reg[5] = {`SPC6.mmu.asi.t5_e_nz[1],// z_tsb_cfg0[63]
15750 mmu_mra1_a10[37:36], // z_tsb_cfg0[62:61]
15751 21'b0, // z_tsb_cfg0[60:40]
15752 mmu_mra1_a10[35:9], // z_tsb_cfg0[39:13]
15753 4'b0, // z_tsb_cfg0[12:9]
15754 mmu_mra1_a10[8:0] // z_tsb_cfg0[8:0]
15755 };
15756assign ctxt_nz_tsb_cfg2_reg[5] = {`SPC6.mmu.asi.t5_e_nz[2],// z_tsb_cfg0[63]
15757 mmu_mra1_a11[76:75], // z_tsb_cfg0[62:61]
15758 21'b0, // z_tsb_cfg0[60:40]
15759 mmu_mra1_a11[74:48], // z_tsb_cfg0[39:13]
15760 4'b0, // z_tsb_cfg0[12:9]
15761 mmu_mra1_a11[47:39] // z_tsb_cfg0[8:0]
15762 };
15763assign ctxt_nz_tsb_cfg3_reg[5] = {`SPC6.mmu.asi.t5_e_nz[3],// z_tsb_cfg0[63]
15764 mmu_mra1_a11[37:36], // z_tsb_cfg0[62:61]
15765 21'b0, // z_tsb_cfg0[60:40]
15766 mmu_mra1_a11[35:9], // z_tsb_cfg0[39:13]
15767 4'b0, // z_tsb_cfg0[12:9]
15768 mmu_mra1_a11[8:0] // z_tsb_cfg0[8:0]
15769 };
15770
15771// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
15772// as well as the physical to architectural bit position relationships.
15773assign ctxt_z_tsb_cfg0_reg[6] = {`SPC6.mmu.asi.t6_e_z[0], // z_tsb_cfg0[63]
15774 mmu_mra1_a16[76:75], // z_tsb_cfg0[62:61]
15775 21'b0, // z_tsb_cfg0[60:40]
15776 mmu_mra1_a16[74:48], // z_tsb_cfg0[39:13]
15777 4'b0, // z_tsb_cfg0[12:9]
15778 mmu_mra1_a16[47:39] // z_tsb_cfg0[8:0]
15779 };
15780assign ctxt_z_tsb_cfg1_reg[6] = {`SPC6.mmu.asi.t6_e_z[1], // z_tsb_cfg0[63]
15781 mmu_mra1_a16[37:36], // z_tsb_cfg0[62:61]
15782 21'b0, // z_tsb_cfg0[60:40]
15783 mmu_mra1_a16[35:9], // z_tsb_cfg0[39:13]
15784 4'b0, // z_tsb_cfg0[12:9]
15785 mmu_mra1_a16[8:0] // z_tsb_cfg0[8:0]
15786 };
15787assign ctxt_z_tsb_cfg2_reg[6] = {`SPC6.mmu.asi.t6_e_z[2], // z_tsb_cfg0[63]
15788 mmu_mra1_a17[76:75], // z_tsb_cfg0[62:61]
15789 21'b0, // z_tsb_cfg0[60:40]
15790 mmu_mra1_a17[74:48], // z_tsb_cfg0[39:13]
15791 4'b0, // z_tsb_cfg0[12:9]
15792 mmu_mra1_a17[47:39] // z_tsb_cfg0[8:0]
15793 };
15794assign ctxt_z_tsb_cfg3_reg[6] = {`SPC6.mmu.asi.t6_e_z[3], // z_tsb_cfg0[63]
15795 mmu_mra1_a17[37:36], // z_tsb_cfg0[62:61]
15796 21'b0, // z_tsb_cfg0[60:40]
15797 mmu_mra1_a17[35:9], // z_tsb_cfg0[39:13]
15798 4'b0, // z_tsb_cfg0[12:9]
15799 mmu_mra1_a17[8:0] // z_tsb_cfg0[8:0]
15800 };
15801assign ctxt_nz_tsb_cfg0_reg[6] = {`SPC6.mmu.asi.t6_e_nz[0],// z_tsb_cfg0[63]
15802 mmu_mra1_a18[76:75], // z_tsb_cfg0[62:61]
15803 21'b0, // z_tsb_cfg0[60:40]
15804 mmu_mra1_a18[74:48], // z_tsb_cfg0[39:13]
15805 4'b0, // z_tsb_cfg0[12:9]
15806 mmu_mra1_a18[47:39] // z_tsb_cfg0[8:0]
15807 };
15808assign ctxt_nz_tsb_cfg1_reg[6] = {`SPC6.mmu.asi.t6_e_nz[1],// z_tsb_cfg0[63]
15809 mmu_mra1_a18[37:36], // z_tsb_cfg0[62:61]
15810 21'b0, // z_tsb_cfg0[60:40]
15811 mmu_mra1_a18[35:9], // z_tsb_cfg0[39:13]
15812 4'b0, // z_tsb_cfg0[12:9]
15813 mmu_mra1_a18[8:0] // z_tsb_cfg0[8:0]
15814 };
15815assign ctxt_nz_tsb_cfg2_reg[6] = {`SPC6.mmu.asi.t6_e_nz[2],// z_tsb_cfg0[63]
15816 mmu_mra1_a19[76:75], // z_tsb_cfg0[62:61]
15817 21'b0, // z_tsb_cfg0[60:40]
15818 mmu_mra1_a19[74:48], // z_tsb_cfg0[39:13]
15819 4'b0, // z_tsb_cfg0[12:9]
15820 mmu_mra1_a19[47:39] // z_tsb_cfg0[8:0]
15821 };
15822assign ctxt_nz_tsb_cfg3_reg[6] = {`SPC6.mmu.asi.t6_e_nz[3],// z_tsb_cfg0[63]
15823 mmu_mra1_a19[37:36], // z_tsb_cfg0[62:61]
15824 21'b0, // z_tsb_cfg0[60:40]
15825 mmu_mra1_a19[35:9], // z_tsb_cfg0[39:13]
15826 4'b0, // z_tsb_cfg0[12:9]
15827 mmu_mra1_a19[8:0] // z_tsb_cfg0[8:0]
15828 };
15829
15830// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
15831// as well as the physical to architectural bit position relationships.
15832assign ctxt_z_tsb_cfg0_reg[7] = {`SPC6.mmu.asi.t7_e_z[0], // z_tsb_cfg0[63]
15833 mmu_mra1_a24[76:75], // z_tsb_cfg0[62:61]
15834 21'b0, // z_tsb_cfg0[60:40]
15835 mmu_mra1_a24[74:48], // z_tsb_cfg0[39:13]
15836 4'b0, // z_tsb_cfg0[12:9]
15837 mmu_mra1_a24[47:39] // z_tsb_cfg0[8:0]
15838 };
15839assign ctxt_z_tsb_cfg1_reg[7] = {`SPC6.mmu.asi.t7_e_z[1], // z_tsb_cfg0[63]
15840 mmu_mra1_a24[37:36], // z_tsb_cfg0[62:61]
15841 21'b0, // z_tsb_cfg0[60:40]
15842 mmu_mra1_a24[35:9], // z_tsb_cfg0[39:13]
15843 4'b0, // z_tsb_cfg0[12:9]
15844 mmu_mra1_a24[8:0] // z_tsb_cfg0[8:0]
15845 };
15846assign ctxt_z_tsb_cfg2_reg[7] = {`SPC6.mmu.asi.t7_e_z[2], // z_tsb_cfg0[63]
15847 mmu_mra1_a25[76:75], // z_tsb_cfg0[62:61]
15848 21'b0, // z_tsb_cfg0[60:40]
15849 mmu_mra1_a25[74:48], // z_tsb_cfg0[39:13]
15850 4'b0, // z_tsb_cfg0[12:9]
15851 mmu_mra1_a25[47:39] // z_tsb_cfg0[8:0]
15852 };
15853assign ctxt_z_tsb_cfg3_reg[7] = {`SPC6.mmu.asi.t7_e_z[3], // z_tsb_cfg0[63]
15854 mmu_mra1_a25[37:36], // z_tsb_cfg0[62:61]
15855 21'b0, // z_tsb_cfg0[60:40]
15856 mmu_mra1_a25[35:9], // z_tsb_cfg0[39:13]
15857 4'b0, // z_tsb_cfg0[12:9]
15858 mmu_mra1_a25[8:0] // z_tsb_cfg0[8:0]
15859 };
15860assign ctxt_nz_tsb_cfg0_reg[7] = {`SPC6.mmu.asi.t7_e_nz[0],// z_tsb_cfg0[63]
15861 mmu_mra1_a26[76:75], // z_tsb_cfg0[62:61]
15862 21'b0, // z_tsb_cfg0[60:40]
15863 mmu_mra1_a26[74:48], // z_tsb_cfg0[39:13]
15864 4'b0, // z_tsb_cfg0[12:9]
15865 mmu_mra1_a26[47:39] // z_tsb_cfg0[8:0]
15866 };
15867assign ctxt_nz_tsb_cfg1_reg[7] = {`SPC6.mmu.asi.t7_e_nz[1],// z_tsb_cfg0[63]
15868 mmu_mra1_a26[37:36], // z_tsb_cfg0[62:61]
15869 21'b0, // z_tsb_cfg0[60:40]
15870 mmu_mra1_a26[35:9], // z_tsb_cfg0[39:13]
15871 4'b0, // z_tsb_cfg0[12:9]
15872 mmu_mra1_a26[8:0] // z_tsb_cfg0[8:0]
15873 };
15874assign ctxt_nz_tsb_cfg2_reg[7] = {`SPC6.mmu.asi.t7_e_nz[2],// z_tsb_cfg0[63]
15875 mmu_mra1_a27[76:75], // z_tsb_cfg0[62:61]
15876 21'b0, // z_tsb_cfg0[60:40]
15877 mmu_mra1_a27[74:48], // z_tsb_cfg0[39:13]
15878 4'b0, // z_tsb_cfg0[12:9]
15879 mmu_mra1_a27[47:39] // z_tsb_cfg0[8:0]
15880 };
15881assign ctxt_nz_tsb_cfg3_reg[7] = {`SPC6.mmu.asi.t7_e_nz[3],// z_tsb_cfg0[63]
15882 mmu_mra1_a27[37:36], // z_tsb_cfg0[62:61]
15883 21'b0, // z_tsb_cfg0[60:40]
15884 mmu_mra1_a27[35:9], // z_tsb_cfg0[39:13]
15885 4'b0, // z_tsb_cfg0[12:9]
15886 mmu_mra1_a27[8:0] // z_tsb_cfg0[8:0]
15887 };
15888`endif // EMUL - ADD_TSB_CFG
15889
15890
15891// This was the original select_pc_b, the latest select_pc_b qualifies with errors
15892// But some of the error checkers need this signal without the qualification
15893// of icache errors
15894// Suppress instruction on flush or park request
15895// (clear_disrupting_flush_pending_w_in & idl_req_in)
15896// Suppress instruction for 'refetch' exception after
15897// not taken branch with annulled delay slot
15898// NOTE: 'with_errors' means that the signal actually IGNORES instruction
15899// cache errors and asserts IN SPITE OF instruction cache errors
15900wire [7:0] select_pc_b_with_errors =
15901 {{4 {~`SPC6.dec_flush_b[1]}}, {4 {~`SPC6.dec_flush_b[0]}}} &
15902 {{4 {~`SPC6.tlu.fls1.refetch_w_in}}, {4 {~`SPC6.tlu.fls0.refetch_w_in}}} &
15903 {~(`SPC6.tlu.fls1.clear_disrupting_flush_pending_w_in[3:0] &
15904 {4 {`SPC6.tlu.fls1.idl_req_in}}),
15905 ~(`SPC6.tlu.fls0.clear_disrupting_flush_pending_w_in[3:0] &
15906 {4 {`SPC6.tlu.fls0.idl_req_in}})} &
15907 {`SPC6.tlu.fls1.tid_dec_valid_b[3:0],
15908 `SPC6.tlu.fls0.tid_dec_valid_b[3:0]};
15909
15910//------------------------------------
15911// Qualify select_pc_b_with_errors to get final select_pc_b signal
15912// Qualifications are
15913// - instruction cache errors (ic_err_w_in)
15914// - disrupting single step completion requests (dsc_req_in)
15915wire [7:0] select_pc_b =
15916 select_pc_b_with_errors[7:0] &
15917 {{4 {(~`SPC6.tlu.fls1.ic_err_w_in | `SPC6.tlu.fls1.itlb_nfo_exc_b) &
15918 ~`SPC6.tlu.fls1.dsc_req_in}},
15919 {4 {(~`SPC6.tlu.fls0.ic_err_w_in | `SPC6.tlu.fls0.itlb_nfo_exc_b) &
15920 ~`SPC6.tlu.fls0.dsc_req_in}}};
15921
15922//------------------------------------
15923
15924//original select_pc_b_with errors. Select_pc_b_with_errors is no longer asserted
15925//if the inst. following an annulled delay slot of a not taken branch has a prebuffer
15926//error and it reaches B stage. I still need a signal if this happens to trigger the chkr.
15927
15928wire [7:0] select_pc_b_with_errors_and_refetch =
15929 {{4 {~`SPC6.dec_flush_b[1]}}, {4 {~`SPC6.dec_flush_b[0]}}} &
15930 {~(`SPC6.tlu.fls1.clear_disrupting_flush_pending_w_in[3:0] &
15931 {4 {`SPC6.tlu.fls1.idl_req_in}}),
15932 ~(`SPC6.tlu.fls0.clear_disrupting_flush_pending_w_in[3:0] &
15933 {4 {`SPC6.tlu.fls0.idl_req_in}})} &
15934 {`SPC6.tlu.fls1.tid_dec_valid_b[3:0],
15935 `SPC6.tlu.fls0.tid_dec_valid_b[3:0]};
15936
15937// Signals required for bench TLB sync & LDST sync
15938
15939reg tlb_bypass_m;
15940reg tlb_bypass_b;
15941reg tlb_rd_vld_m;
15942reg tlb_rd_vld_b;
15943reg lsu_tl_gt_0_b;
15944reg [7:0] dcc_asi_b;
15945reg asi_internal_w;
15946
15947always @ (posedge `BENCH_SPC6_GCLK) begin // {
15948
15949 clkstop_d1 <= `SPC6.tcu_clk_stop;
15950 clkstop_d2 <= clkstop_d1;
15951 clkstop_d3 <= clkstop_d2;
15952 clkstop_d4 <= clkstop_d3;
15953 clkstop_d5 <= clkstop_d4;
15954
15955 tlb_bypass_m <= `SPC6.lsu.tlb.tlb_bypass;
15956 tlb_bypass_b <= tlb_bypass_m;
15957 tlb_rd_vld_m <= `SPC6.lsu.tlb.tlb_rd_vld | `SPC6.lsu.tlb.tlb_cam_vld;
15958 tlb_rd_vld_b <= tlb_rd_vld_m;
15959
15960 // This signal is only valid for LD/ST instructions
15961 lsu_tl_gt_0_b <= `SPC6.lsu.dcc.tl_gt_0_m;
15962
15963 // Can't use lsu.dcc_asi_b for tlb_sync so pipeline from M to B
15964 dcc_asi_b <= `SPC6.lsu.dcc_asi_m;
15965
15966 // LD/ST that will not issue to the crossbar
15967 asi_internal_w <= `SPC6.lsu.dcc.asi_internal_b;
15968end // }
15969
15970// TL determines whether Nucleus or Primary
15971wire [7:0] asi_num = `SPC6.lsu.dcc.altspace_ldst_b ?
15972 dcc_asi_b :
15973 (lsu_tl_gt_0_b ? 8'h04 : 8'h80);
15974
15975wire [7:0] itlb_miss = { (`SPC6.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
15976 `SPC6.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
15977 `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
15978 (`SPC6.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
15979 `SPC6.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
15980 `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
15981 (`SPC6.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
15982 `SPC6.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
15983 `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
15984 (`SPC6.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
15985 `SPC6.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
15986 `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
15987 (`SPC6.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
15988 `SPC6.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
15989 `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
15990 (`SPC6.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
15991 `SPC6.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
15992 `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
15993 (`SPC6.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
15994 `SPC6.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
15995 `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
15996 (`SPC6.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
15997 `SPC6.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
15998 `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
15999 };
16000
16001wire [7:0] icache_miss = { (`SPC6.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
16002 `SPC6.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
16003 `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
16004 (`SPC6.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
16005 `SPC6.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
16006 `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
16007 (`SPC6.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
16008 `SPC6.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
16009 `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
16010 (`SPC6.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
16011 `SPC6.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
16012 `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
16013 (`SPC6.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
16014 `SPC6.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
16015 `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
16016 (`SPC6.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
16017 `SPC6.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
16018 `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
16019 (`SPC6.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
16020 `SPC6.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
16021 `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
16022 (`SPC6.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
16023 `SPC6.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
16024 `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
16025 };
16026
16027wire inst_bypass = (`SPC6.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[0] |
16028 `SPC6.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[1] |
16029 `SPC6.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[2]);
16030
16031wire [7:0] fetch_bypass = { (inst_bypass & `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
16032 (inst_bypass & `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
16033 (inst_bypass & `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
16034 (inst_bypass & `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
16035 (inst_bypass & `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
16036 (inst_bypass & `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
16037 (inst_bypass & `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
16038 (inst_bypass & `SPC6.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
16039 };
16040
16041wire [7:0] itlb_wr = {(`SPC6.tlu.trl1.take_itw & `SPC6.tlu.trl1.trap[3]),
16042 (`SPC6.tlu.trl1.take_itw & `SPC6.tlu.trl1.trap[2]),
16043 (`SPC6.tlu.trl1.take_itw & `SPC6.tlu.trl1.trap[1]),
16044 (`SPC6.tlu.trl1.take_itw & `SPC6.tlu.trl1.trap[0]),
16045 (`SPC6.tlu.trl0.take_itw & `SPC6.tlu.trl0.trap[3]),
16046 (`SPC6.tlu.trl0.take_itw & `SPC6.tlu.trl0.trap[2]),
16047 (`SPC6.tlu.trl0.take_itw & `SPC6.tlu.trl0.trap[1]),
16048 (`SPC6.tlu.trl0.take_itw & `SPC6.tlu.trl0.trap[0])
16049 };
16050
16051//------------------------------------
16052
16053reg [71:0] tick_cmpr_0;
16054reg [71:0] stick_cmpr_0;
16055reg [71:0] hstick_cmpr_0;
16056reg [151:0] trap_entry_1_t0;
16057reg [151:0] trap_entry_2_t0;
16058reg [151:0] trap_entry_3_t0;
16059reg [151:0] trap_entry_4_t0;
16060reg [151:0] trap_entry_5_t0;
16061reg [151:0] trap_entry_6_t0;
16062
16063always @(posedge `BENCH_SPC6_GCLK) begin // {
16064
16065 // Probes for nas_pipe
16066 tick_cmpr_0 <= `SPC6.tlu.tca.array.mem[{2'b0,3'h0}];
16067 stick_cmpr_0 <= `SPC6.tlu.tca.array.mem[{2'b01,3'h0}];
16068 hstick_cmpr_0 <= `SPC6.tlu.tca.array.mem[{2'b10,3'h0}];
16069 trap_entry_1_t0 <= `SPC6.tlu.tsa0.array.mem[{2'h0, 3'h0}];
16070 trap_entry_2_t0 <= `SPC6.tlu.tsa0.array.mem[{2'h0, 3'h1}];
16071 trap_entry_3_t0 <= `SPC6.tlu.tsa0.array.mem[{2'h0, 3'h2}];
16072 trap_entry_4_t0 <= `SPC6.tlu.tsa0.array.mem[{2'h0, 3'h3}];
16073 trap_entry_5_t0 <= `SPC6.tlu.tsa0.array.mem[{2'h0, 3'h4}];
16074 trap_entry_6_t0 <= `SPC6.tlu.tsa0.array.mem[{2'h0, 3'h5}];
16075
16076end // }
16077reg [71:0] tick_cmpr_1;
16078reg [71:0] stick_cmpr_1;
16079reg [71:0] hstick_cmpr_1;
16080reg [151:0] trap_entry_1_t1;
16081reg [151:0] trap_entry_2_t1;
16082reg [151:0] trap_entry_3_t1;
16083reg [151:0] trap_entry_4_t1;
16084reg [151:0] trap_entry_5_t1;
16085reg [151:0] trap_entry_6_t1;
16086
16087always @(posedge `BENCH_SPC6_GCLK) begin // {
16088
16089 // Probes for nas_pipe
16090 tick_cmpr_1 <= `SPC6.tlu.tca.array.mem[{2'b0,3'h1}];
16091 stick_cmpr_1 <= `SPC6.tlu.tca.array.mem[{2'b01,3'h1}];
16092 hstick_cmpr_1 <= `SPC6.tlu.tca.array.mem[{2'b10,3'h1}];
16093 trap_entry_1_t1 <= `SPC6.tlu.tsa0.array.mem[{2'h1, 3'h0}];
16094 trap_entry_2_t1 <= `SPC6.tlu.tsa0.array.mem[{2'h1, 3'h1}];
16095 trap_entry_3_t1 <= `SPC6.tlu.tsa0.array.mem[{2'h1, 3'h2}];
16096 trap_entry_4_t1 <= `SPC6.tlu.tsa0.array.mem[{2'h1, 3'h3}];
16097 trap_entry_5_t1 <= `SPC6.tlu.tsa0.array.mem[{2'h1, 3'h4}];
16098 trap_entry_6_t1 <= `SPC6.tlu.tsa0.array.mem[{2'h1, 3'h5}];
16099
16100end // }
16101reg [71:0] tick_cmpr_2;
16102reg [71:0] stick_cmpr_2;
16103reg [71:0] hstick_cmpr_2;
16104reg [151:0] trap_entry_1_t2;
16105reg [151:0] trap_entry_2_t2;
16106reg [151:0] trap_entry_3_t2;
16107reg [151:0] trap_entry_4_t2;
16108reg [151:0] trap_entry_5_t2;
16109reg [151:0] trap_entry_6_t2;
16110
16111always @(posedge `BENCH_SPC6_GCLK) begin // {
16112
16113 // Probes for nas_pipe
16114 tick_cmpr_2 <= `SPC6.tlu.tca.array.mem[{2'b0,3'h2}];
16115 stick_cmpr_2 <= `SPC6.tlu.tca.array.mem[{2'b01,3'h2}];
16116 hstick_cmpr_2 <= `SPC6.tlu.tca.array.mem[{2'b10,3'h2}];
16117 trap_entry_1_t2 <= `SPC6.tlu.tsa0.array.mem[{2'h2, 3'h0}];
16118 trap_entry_2_t2 <= `SPC6.tlu.tsa0.array.mem[{2'h2, 3'h1}];
16119 trap_entry_3_t2 <= `SPC6.tlu.tsa0.array.mem[{2'h2, 3'h2}];
16120 trap_entry_4_t2 <= `SPC6.tlu.tsa0.array.mem[{2'h2, 3'h3}];
16121 trap_entry_5_t2 <= `SPC6.tlu.tsa0.array.mem[{2'h2, 3'h4}];
16122 trap_entry_6_t2 <= `SPC6.tlu.tsa0.array.mem[{2'h2, 3'h5}];
16123
16124end // }
16125reg [71:0] tick_cmpr_3;
16126reg [71:0] stick_cmpr_3;
16127reg [71:0] hstick_cmpr_3;
16128reg [151:0] trap_entry_1_t3;
16129reg [151:0] trap_entry_2_t3;
16130reg [151:0] trap_entry_3_t3;
16131reg [151:0] trap_entry_4_t3;
16132reg [151:0] trap_entry_5_t3;
16133reg [151:0] trap_entry_6_t3;
16134
16135always @(posedge `BENCH_SPC6_GCLK) begin // {
16136
16137 // Probes for nas_pipe
16138 tick_cmpr_3 <= `SPC6.tlu.tca.array.mem[{2'b0,3'h3}];
16139 stick_cmpr_3 <= `SPC6.tlu.tca.array.mem[{2'b01,3'h3}];
16140 hstick_cmpr_3 <= `SPC6.tlu.tca.array.mem[{2'b10,3'h3}];
16141 trap_entry_1_t3 <= `SPC6.tlu.tsa0.array.mem[{2'h3, 3'h0}];
16142 trap_entry_2_t3 <= `SPC6.tlu.tsa0.array.mem[{2'h3, 3'h1}];
16143 trap_entry_3_t3 <= `SPC6.tlu.tsa0.array.mem[{2'h3, 3'h2}];
16144 trap_entry_4_t3 <= `SPC6.tlu.tsa0.array.mem[{2'h3, 3'h3}];
16145 trap_entry_5_t3 <= `SPC6.tlu.tsa0.array.mem[{2'h3, 3'h4}];
16146 trap_entry_6_t3 <= `SPC6.tlu.tsa0.array.mem[{2'h3, 3'h5}];
16147
16148end // }
16149reg [71:0] tick_cmpr_4;
16150reg [71:0] stick_cmpr_4;
16151reg [71:0] hstick_cmpr_4;
16152reg [151:0] trap_entry_1_t4;
16153reg [151:0] trap_entry_2_t4;
16154reg [151:0] trap_entry_3_t4;
16155reg [151:0] trap_entry_4_t4;
16156reg [151:0] trap_entry_5_t4;
16157reg [151:0] trap_entry_6_t4;
16158
16159always @(posedge `BENCH_SPC6_GCLK) begin // {
16160
16161 // Probes for nas_pipe
16162 tick_cmpr_4 <= `SPC6.tlu.tca.array.mem[{2'b0,3'h4}];
16163 stick_cmpr_4 <= `SPC6.tlu.tca.array.mem[{2'b01,3'h4}];
16164 hstick_cmpr_4 <= `SPC6.tlu.tca.array.mem[{2'b10,3'h4}];
16165 trap_entry_1_t4 <= `SPC6.tlu.tsa1.array.mem[{2'h0, 3'h0}];
16166 trap_entry_2_t4 <= `SPC6.tlu.tsa1.array.mem[{2'h0, 3'h1}];
16167 trap_entry_3_t4 <= `SPC6.tlu.tsa1.array.mem[{2'h0, 3'h2}];
16168 trap_entry_4_t4 <= `SPC6.tlu.tsa1.array.mem[{2'h0, 3'h3}];
16169 trap_entry_5_t4 <= `SPC6.tlu.tsa1.array.mem[{2'h0, 3'h4}];
16170 trap_entry_6_t4 <= `SPC6.tlu.tsa1.array.mem[{2'h0, 3'h5}];
16171
16172end // }
16173reg [71:0] tick_cmpr_5;
16174reg [71:0] stick_cmpr_5;
16175reg [71:0] hstick_cmpr_5;
16176reg [151:0] trap_entry_1_t5;
16177reg [151:0] trap_entry_2_t5;
16178reg [151:0] trap_entry_3_t5;
16179reg [151:0] trap_entry_4_t5;
16180reg [151:0] trap_entry_5_t5;
16181reg [151:0] trap_entry_6_t5;
16182
16183always @(posedge `BENCH_SPC6_GCLK) begin // {
16184
16185 // Probes for nas_pipe
16186 tick_cmpr_5 <= `SPC6.tlu.tca.array.mem[{2'b0,3'h5}];
16187 stick_cmpr_5 <= `SPC6.tlu.tca.array.mem[{2'b01,3'h5}];
16188 hstick_cmpr_5 <= `SPC6.tlu.tca.array.mem[{2'b10,3'h5}];
16189 trap_entry_1_t5 <= `SPC6.tlu.tsa1.array.mem[{2'h1, 3'h0}];
16190 trap_entry_2_t5 <= `SPC6.tlu.tsa1.array.mem[{2'h1, 3'h1}];
16191 trap_entry_3_t5 <= `SPC6.tlu.tsa1.array.mem[{2'h1, 3'h2}];
16192 trap_entry_4_t5 <= `SPC6.tlu.tsa1.array.mem[{2'h1, 3'h3}];
16193 trap_entry_5_t5 <= `SPC6.tlu.tsa1.array.mem[{2'h1, 3'h4}];
16194 trap_entry_6_t5 <= `SPC6.tlu.tsa1.array.mem[{2'h1, 3'h5}];
16195
16196end // }
16197reg [71:0] tick_cmpr_6;
16198reg [71:0] stick_cmpr_6;
16199reg [71:0] hstick_cmpr_6;
16200reg [151:0] trap_entry_1_t6;
16201reg [151:0] trap_entry_2_t6;
16202reg [151:0] trap_entry_3_t6;
16203reg [151:0] trap_entry_4_t6;
16204reg [151:0] trap_entry_5_t6;
16205reg [151:0] trap_entry_6_t6;
16206
16207always @(posedge `BENCH_SPC6_GCLK) begin // {
16208
16209 // Probes for nas_pipe
16210 tick_cmpr_6 <= `SPC6.tlu.tca.array.mem[{2'b0,3'h6}];
16211 stick_cmpr_6 <= `SPC6.tlu.tca.array.mem[{2'b01,3'h6}];
16212 hstick_cmpr_6 <= `SPC6.tlu.tca.array.mem[{2'b10,3'h6}];
16213 trap_entry_1_t6 <= `SPC6.tlu.tsa1.array.mem[{2'h2, 3'h0}];
16214 trap_entry_2_t6 <= `SPC6.tlu.tsa1.array.mem[{2'h2, 3'h1}];
16215 trap_entry_3_t6 <= `SPC6.tlu.tsa1.array.mem[{2'h2, 3'h2}];
16216 trap_entry_4_t6 <= `SPC6.tlu.tsa1.array.mem[{2'h2, 3'h3}];
16217 trap_entry_5_t6 <= `SPC6.tlu.tsa1.array.mem[{2'h2, 3'h4}];
16218 trap_entry_6_t6 <= `SPC6.tlu.tsa1.array.mem[{2'h2, 3'h5}];
16219
16220end // }
16221reg [71:0] tick_cmpr_7;
16222reg [71:0] stick_cmpr_7;
16223reg [71:0] hstick_cmpr_7;
16224reg [151:0] trap_entry_1_t7;
16225reg [151:0] trap_entry_2_t7;
16226reg [151:0] trap_entry_3_t7;
16227reg [151:0] trap_entry_4_t7;
16228reg [151:0] trap_entry_5_t7;
16229reg [151:0] trap_entry_6_t7;
16230
16231always @(posedge `BENCH_SPC6_GCLK) begin // {
16232
16233 // Probes for nas_pipe
16234 tick_cmpr_7 <= `SPC6.tlu.tca.array.mem[{2'b0,3'h7}];
16235 stick_cmpr_7 <= `SPC6.tlu.tca.array.mem[{2'b01,3'h7}];
16236 hstick_cmpr_7 <= `SPC6.tlu.tca.array.mem[{2'b10,3'h7}];
16237 trap_entry_1_t7 <= `SPC6.tlu.tsa1.array.mem[{2'h3, 3'h0}];
16238 trap_entry_2_t7 <= `SPC6.tlu.tsa1.array.mem[{2'h3, 3'h1}];
16239 trap_entry_3_t7 <= `SPC6.tlu.tsa1.array.mem[{2'h3, 3'h2}];
16240 trap_entry_4_t7 <= `SPC6.tlu.tsa1.array.mem[{2'h3, 3'h3}];
16241 trap_entry_5_t7 <= `SPC6.tlu.tsa1.array.mem[{2'h3, 3'h4}];
16242 trap_entry_6_t7 <= `SPC6.tlu.tsa1.array.mem[{2'h3, 3'h5}];
16243
16244end // }
16245
16246//------------------------------------
16247// ASI & Trap State machines
16248always @(posedge `BENCH_SPC6_GCLK) begin // {
16249
16250// pc_0_e[47:0] <= `SPC6.ifu_pc_d0[47:0];
16251// pc_1_e[47:0] <= `SPC6.ifu_pc_d1[47:0];
16252 pc_0_e[47:0] <= {`SPC6.tlu_pc_0_d[47:2], 2'b00};
16253 pc_1_e[47:0] <= {`SPC6.tlu_pc_1_d[47:2], 2'b00};
16254 pc_0_m[47:0] <= pc_0_e[47:0];
16255 pc_1_m[47:0] <= pc_1_e[47:0];
16256 pc_0_b[47:0] <= pc_0_m[47:0];
16257 pc_1_b[47:0] <= pc_1_m[47:0];
16258 pc_0_w[47:0] <= ({48 { select_pc_b[0]}} & pc_0_b[47:0]) |
16259 ({48 {~select_pc_b[0]}} & pc_0_w[47:0]) ;
16260 pc_1_w[47:0] <= ({48 { select_pc_b[1]}} & pc_0_b[47:0]) |
16261 ({48 {~select_pc_b[1]}} & pc_1_w[47:0]) ;
16262 pc_2_w[47:0] <= ({48 { select_pc_b[2]}} & pc_0_b[47:0]) |
16263 ({48 {~select_pc_b[2]}} & pc_2_w[47:0]) ;
16264 pc_3_w[47:0] <= ({48 { select_pc_b[3]}} & pc_0_b[47:0]) |
16265 ({48 {~select_pc_b[3]}} & pc_3_w[47:0]) ;
16266 pc_4_w[47:0] <= ({48 { select_pc_b[4]}} & pc_1_b[47:0]) |
16267 ({48 {~select_pc_b[4]}} & pc_4_w[47:0]) ;
16268 pc_5_w[47:0] <= ({48 { select_pc_b[5]}} & pc_1_b[47:0]) |
16269 ({48 {~select_pc_b[5]}} & pc_5_w[47:0]) ;
16270 pc_6_w[47:0] <= ({48 { select_pc_b[6]}} & pc_1_b[47:0]) |
16271 ({48 {~select_pc_b[6]}} & pc_6_w[47:0]) ;
16272 pc_7_w[47:0] <= ({48 { select_pc_b[7]}} & pc_1_b[47:0]) |
16273 ({48 {~select_pc_b[7]}} & pc_7_w[47:0]) ;
16274
16275
16276 // altspace_ldst_m is asserted for asi accesses that don't change arch state
16277 asi_store_b <= (`SPC6.lsu.dcc.asi_store_m & `SPC6.lsu.dcc.asi_sync_m);
16278 asi_store_w <= asi_store_b;
16279 dcc_tid_b <= `SPC6.lsu.dcc.dcc_tid_m;
16280 dcc_tid_w <= dcc_tid_b;
16281
16282 // ASI in progress state m/c
16283 if (asi_store_w & ~asi_store_flush_w[dcc_tid_w]) begin // {
16284 asi_in_progress_b[dcc_tid_w] <= 1'b1;
16285 end // }
16286
16287 asi_valid_w <= asi_in_progress_b & store_sync;
16288
16289 // Delay asi_valid_w and asi_in_progress
16290 // 2 clocks to ensure TLB Sync DTLBWRITE (demap) comes before SSTEP stxa
16291 asi_valid_fx4 <= asi_valid_w;
16292 asi_valid_fx5 <= asi_valid_fx4;
16293 asi_in_progress_w <= asi_in_progress_b;
16294 asi_in_progress_fx4 <= asi_in_progress_w;
16295 sync_reset_w <= sync_reset;
16296
16297 for (i=0;i<8;i=i+1) begin // {
16298 if (asi_valid_w[i] | sync_reset_w[i]) begin // {
16299 asi_in_progress_b[i] <= 1'b0;
16300 end//}
16301 end //}
16302
16303 // Trap0 pipeline [valid W stage]
16304
16305 for (i=0;i<4;i=i+1) begin // {
16306 // Done & Retry
16307 if ((`SPC6.tlu.tlu_trap_0_tid[1:0] == i) &&
16308 `SPC6.tlu.tlu_trap_pc_0_valid & tlu_ccr_cwp_0_valid_last)
16309 begin //{
16310 tlu_valid[i] <= 1'b1;
16311 end //}
16312 // Trap taken
16313 else if (`SPC6.tlu.trl0.real_trap[i] & ~`SPC6.tlu.trl0.take_por) begin // {
16314 tlu_valid[i] <= 1'b1;
16315 end //}
16316 else
16317 tlu_valid[i] <= 1'b0;
16318 end //}
16319
16320 // Trap1 pipeline [valid W stage]
16321
16322 for (i=0;i<4;i=i+1) begin // {
16323 // Done & Retry
16324 if ((`SPC6.tlu.tlu_trap_1_tid[1:0] == i) &&
16325 `SPC6.tlu.tlu_trap_pc_1_valid & tlu_ccr_cwp_1_valid_last)
16326 begin //{
16327 tlu_valid[i+4] <= 1'b1;
16328 end //}
16329 // Trap taken
16330 else if (`SPC6.tlu.trl1.real_trap[i] & ~`SPC6.tlu.trl1.take_por) begin // {
16331 tlu_valid[i+4] <= 1'b1;
16332 end //}
16333 else
16334 tlu_valid[i+4] <= 1'b0;
16335 end //}
16336
16337end // }
16338
16339
16340always @(posedge `BENCH_SPC6_GCLK) begin
16341
16342// debug code for TPCC analysis
16343`ifdef TPCC
16344if (pcx_req==1) begin
16345 if (`SPC6.spc_pcx_data_pa[129:124]==6'b100000) begin // l15 dmiss
16346 l15dmiss_cnt=l15dmiss_cnt+1;
16347 $display("dmissl15 cnt is %0d",l15dmiss_cnt);
16348 end
16349 if (`SPC6.spc_pcx_data_pa[129:124]==6'b110000) begin // l15 imiss
16350 l15imiss_cnt=l15imiss_cnt+1;
16351 $display("imissl15 cnt is %0d",l15imiss_cnt);
16352 end
16353 // `TOP.spg.spc_pcx_data_pa[129:124]==6'b100001 -> all stores
16354end
16355
16356pcx_req <= |`SPC6.spc_pcx_req_pq[8:0];
16357
16358if (`SPC6.ifu_l15_valid==1) begin
16359 imiss_cnt=imiss_cnt+1;
16360 $display("imiss cnt is %0d",imiss_cnt);
16361end
16362if (spec_dmiss==1 && `SPC6.lsu_l15_cancel==0) begin
16363 dmiss_cnt=dmiss_cnt+1;
16364 $display("dmiss cnt is %0d",dmiss_cnt);
16365
16366end
16367spec_dmiss <= `SPC6.lsu_l15_valid & `SPC6.lsu_l15_load;
16368
16369clock = clock+1;
16370
16371// keep track of imiss latencies
16372if (`SPC6.ftu_agc_thr0_cmiss_c==1) begin
16373 start_imiss0=clock;
16374 active_imiss0=1;
16375end
16376if (active_imiss0==1 && first_imiss0==1 && `SPC6.l15_spc_cpkt[8:6]==3'b000 && `SPC6.l15_spc_valid==1 && `SPC6.l15_spc_cpkt[17:14]==4'b0001) begin
16377 sum_imiss_latency = sum_imiss_latency + clock - start_imiss0 + 1;
16378 number_imiss = number_imiss + 1;
16379 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
16380 active_imiss0=0;
16381 first_imiss0=0;
16382end
16383if (active_imiss0==1 && first_imiss0==0 && `SPC6.l15_spc_cpkt[8:6]==3'b000 && `SPC6.l15_spc_valid==1 && `SPC6.l15_spc_cpkt[17:14]==4'b0001) begin
16384 first_imiss0=1;
16385end
16386if (`SPC6.ftu_agc_thr1_cmiss_c==1) begin
16387 start_imiss1=clock;
16388 active_imiss1=1;
16389end
16390if (active_imiss1==1 && first_imiss1==1 && `SPC6.l15_spc_cpkt[8:6]==3'b001 && `SPC6.l15_spc_valid==1 && `SPC6.l15_spc_cpkt[17:14]==4'b0001) begin
16391 sum_imiss_latency = sum_imiss_latency + clock - start_imiss1 + 1;
16392 number_imiss = number_imiss + 1;
16393 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
16394 active_imiss1=0;
16395 first_imiss1=0;
16396end
16397if (active_imiss1==1 && first_imiss1==0 && `SPC6.l15_spc_cpkt[8:6]==3'b001 && `SPC6.l15_spc_valid==1 && `SPC6.l15_spc_cpkt[17:14]==4'b0001) begin
16398 first_imiss1=1;
16399end
16400if (`SPC6.ftu_agc_thr2_cmiss_c==1) begin
16401 start_imiss2=clock;
16402 active_imiss2=1;
16403end
16404if (active_imiss2==1 && first_imiss2==1 && `SPC6.l15_spc_cpkt[8:6]==3'b010 && `SPC6.l15_spc_valid==1 && `SPC6.l15_spc_cpkt[17:14]==4'b0001) begin
16405 sum_imiss_latency = sum_imiss_latency + clock - start_imiss2 + 1;
16406 number_imiss = number_imiss + 1;
16407 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
16408 active_imiss2=0;
16409 first_imiss2=0;
16410end
16411if (active_imiss2==1 && first_imiss2==0 && `SPC6.l15_spc_cpkt[8:6]==3'b010 && `SPC6.l15_spc_valid==1 && `SPC6.l15_spc_cpkt[17:14]==4'b0001) begin
16412 first_imiss2=1;
16413end
16414if (`SPC6.ftu_agc_thr3_cmiss_c==1) begin
16415 start_imiss3=clock;
16416 active_imiss3=1;
16417end
16418if (active_imiss3==1 && first_imiss3==1 && `SPC6.l15_spc_cpkt[8:6]==3'b011 && `SPC6.l15_spc_valid==1 && `SPC6.l15_spc_cpkt[17:14]==4'b0001) begin
16419 sum_imiss_latency = sum_imiss_latency + clock - start_imiss3 + 1;
16420 number_imiss = number_imiss + 1;
16421 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
16422 active_imiss3=0;
16423 first_imiss3=0;
16424end
16425if (active_imiss3==1 && first_imiss3==0 && `SPC6.l15_spc_cpkt[8:6]==3'b011 && `SPC6.l15_spc_valid==1 && `SPC6.l15_spc_cpkt[17:14]==4'b0001) begin
16426 first_imiss3=1;
16427end
16428if (`SPC6.ftu_agc_thr4_cmiss_c==1) begin
16429 start_imiss4=clock;
16430 active_imiss4=1;
16431end
16432if (active_imiss4==1 && first_imiss4==1 && `SPC6.l15_spc_cpkt[8:6]==3'b100 && `SPC6.l15_spc_valid==1 && `SPC6.l15_spc_cpkt[17:14]==4'b0001) begin
16433 sum_imiss_latency = sum_imiss_latency + clock - start_imiss4 + 1;
16434 number_imiss = number_imiss + 1;
16435 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
16436 active_imiss4=0;
16437 first_imiss4=0;
16438end
16439if (active_imiss4==1 && first_imiss4==0 && `SPC6.l15_spc_cpkt[8:6]==3'b100 && `SPC6.l15_spc_valid==1 && `SPC6.l15_spc_cpkt[17:14]==4'b0001) begin
16440 first_imiss4=1;
16441end
16442if (`SPC6.ftu_agc_thr5_cmiss_c==1) begin
16443 start_imiss5=clock;
16444 active_imiss5=1;
16445end
16446if (active_imiss5==1 && first_imiss5==1 && `SPC6.l15_spc_cpkt[8:6]==3'b101 && `SPC6.l15_spc_valid==1 && `SPC6.l15_spc_cpkt[17:14]==4'b0001) begin
16447 sum_imiss_latency = sum_imiss_latency + clock - start_imiss5 + 1;
16448 number_imiss = number_imiss + 1;
16449 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
16450 active_imiss5=0;
16451 first_imiss5=0;
16452end
16453if (active_imiss5==1 && first_imiss5==0 && `SPC6.l15_spc_cpkt[8:6]==3'b101 && `SPC6.l15_spc_valid==1 && `SPC6.l15_spc_cpkt[17:14]==4'b0001) begin
16454 first_imiss5=1;
16455end
16456if (`SPC6.ftu_agc_thr6_cmiss_c==1) begin
16457 start_imiss6=clock;
16458 active_imiss6=1;
16459end
16460if (active_imiss6==1 && first_imiss6==1 && `SPC6.l15_spc_cpkt[8:6]==3'b110 && `SPC6.l15_spc_valid==1 && `SPC6.l15_spc_cpkt[17:14]==4'b0001) begin
16461 sum_imiss_latency = sum_imiss_latency + clock - start_imiss6 + 1;
16462 number_imiss = number_imiss + 1;
16463 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
16464 active_imiss6=0;
16465 first_imiss6=0;
16466end
16467if (active_imiss6==1 && first_imiss6==0 && `SPC6.l15_spc_cpkt[8:6]==3'b110 && `SPC6.l15_spc_valid==1 && `SPC6.l15_spc_cpkt[17:14]==4'b0001) begin
16468 first_imiss6=1;
16469end
16470if (`SPC6.ftu_agc_thr7_cmiss_c==1) begin
16471 start_imiss7=clock;
16472 active_imiss7=1;
16473end
16474if (active_imiss7==1 && first_imiss7==1 && `SPC6.l15_spc_cpkt[8:6]==3'b111 && `SPC6.l15_spc_valid==1 && `SPC6.l15_spc_cpkt[17:14]==4'b0001) begin
16475 sum_imiss_latency = sum_imiss_latency + clock - start_imiss7 + 1;
16476 number_imiss = number_imiss + 1;
16477 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
16478 active_imiss7=0;
16479 first_imiss7=0;
16480end
16481if (active_imiss7==1 && first_imiss7==0 && `SPC6.l15_spc_cpkt[8:6]==3'b111 && `SPC6.l15_spc_valid==1 && `SPC6.l15_spc_cpkt[17:14]==4'b0001) begin
16482 first_imiss7=1;
16483end
16484
16485if (`SPC6.pku.swl0.set_lsu_sync_wait==1) begin
16486 start_dmiss0=clock;
16487end
16488if (`SPC6.pku.swl0.clear_lsu_sync_wait==1) begin
16489 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss0) + 3;
16490 number_dmiss = number_dmiss + 1;
16491 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
16492end
16493if (`SPC6.pku.swl1.set_lsu_sync_wait==1) begin
16494 start_dmiss1=clock;
16495end
16496if (`SPC6.pku.swl1.clear_lsu_sync_wait==1) begin
16497 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss1) + 3;
16498 number_dmiss = number_dmiss + 1;
16499 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
16500end
16501if (`SPC6.pku.swl2.set_lsu_sync_wait==1) begin
16502 start_dmiss2=clock;
16503end
16504if (`SPC6.pku.swl2.clear_lsu_sync_wait==1) begin
16505 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss2) + 3;
16506 number_dmiss = number_dmiss + 1;
16507 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
16508end
16509if (`SPC6.pku.swl3.set_lsu_sync_wait==1) begin
16510 start_dmiss3=clock;
16511end
16512if (`SPC6.pku.swl3.clear_lsu_sync_wait==1) begin
16513 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss3) + 3;
16514 number_dmiss = number_dmiss + 1;
16515 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
16516end
16517if (`SPC6.pku.swl4.set_lsu_sync_wait==1) begin
16518 start_dmiss4=clock;
16519end
16520if (`SPC6.pku.swl4.clear_lsu_sync_wait==1) begin
16521 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss4) + 3;
16522 number_dmiss = number_dmiss + 1;
16523 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
16524end
16525if (`SPC6.pku.swl5.set_lsu_sync_wait==1) begin
16526 start_dmiss5=clock;
16527end
16528if (`SPC6.pku.swl5.clear_lsu_sync_wait==1) begin
16529 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss5) + 3;
16530 number_dmiss = number_dmiss + 1;
16531 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
16532end
16533if (`SPC6.pku.swl6.set_lsu_sync_wait==1) begin
16534 start_dmiss6=clock;
16535end
16536if (`SPC6.pku.swl6.clear_lsu_sync_wait==1) begin
16537 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss6) + 3;
16538 number_dmiss = number_dmiss + 1;
16539 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
16540end
16541if (`SPC6.pku.swl7.set_lsu_sync_wait==1) begin
16542 start_dmiss7=clock;
16543end
16544if (`SPC6.pku.swl7.clear_lsu_sync_wait==1) begin
16545 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss7) + 3;
16546 number_dmiss = number_dmiss + 1;
16547 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
16548end
16549`endif
16550
16551
16552
16553 lsu_tid_e[2:0] <= `SPC6.lsu.dcc.tid_d[2:0];
16554
16555 // FG Valid conditions
16556
16557 // Add fcc valids to fg_valid
16558 fcc_valid_fb <= fcc_valid_f5;
16559 fcc_valid_f5 <= fcc_valid_f4;
16560 fcc_valid_f4 <= |`SPC6.fgu.fgu_cmp_fcc_vld_fx3[3:0];
16561
16562 fg_flush_fb <= fg_flush_f5;
16563 fg_flush_f5 <= fg_flush_f4;
16564 fg_flush_f4 <= fg_flush_f3;
16565 fg_flush_f3 <= fg_flush_f2 | `SPC6.dec_flush_f2 |
16566 `SPC6.tlu_flush_fgu_b;
16567 fg_flush_f2 <= `SPC6.dec_flush_f1;
16568
16569 fgu_err_fx3 <= `SPC6.fgu_cecc_fx2 | `SPC6.fgu_uecc_fx2 | `SPC6.fgu.fpc.exu_flush_fx2; // frf or irf ecc error
16570 fgu_err_fx4 <= fgu_err_fx3;
16571 fgu_err_fx5 <= fgu_err_fx4;
16572 fgu_err_fb <= fgu_err_fx5;
16573
16574 // Siams cause fg_valid ..
16575 siam0_d = `SPC6.dec.dec_inst0_d[31:30]==2'b10 &
16576 `SPC6.dec.dec_inst0_d[24:19]==6'b110110 &
16577 `SPC6.dec.dec_inst0_d[13:5]==9'b010000001;
16578
16579 siam1_d = `SPC6.dec.dec_inst1_d[31:30]==2'b10 &
16580 `SPC6.dec.dec_inst1_d[24:19]==6'b110110 &
16581 `SPC6.dec.dec_inst1_d[13:5]==9'b010000001;
16582
16583
16584 done0_d = `SPC6.dec.dec_inst0_d[31:30]==2'b10 &
16585 `SPC6.dec.dec_inst0_d[29:25]==5'b00000 &
16586 `SPC6.dec.dec_inst0_d[24:19]==6'b111110;
16587 done1_d = `SPC6.dec.dec_inst1_d[31:30]==2'b10 &
16588 `SPC6.dec.dec_inst1_d[29:25]==5'b00000 &
16589 `SPC6.dec.dec_inst1_d[24:19]==6'b111110;
16590
16591 retry0_d = `SPC6.dec.dec_inst0_d[31:30]==2'b10 &
16592 `SPC6.dec.dec_inst0_d[29:25]==5'b00001 &
16593 `SPC6.dec.dec_inst0_d[24:19]==6'b111110;
16594 retry1_d = `SPC6.dec.dec_inst1_d[31:30]==2'b10 &
16595 `SPC6.dec.dec_inst1_d[29:25]==5'b00001 &
16596 `SPC6.dec.dec_inst1_d[24:19]==6'b111110;
16597
16598 done0_e <= done0_d & `SPC6.dec.dec_decode0_d;
16599 done1_e <= done1_d & `SPC6.dec.dec_decode1_d;
16600
16601 retry0_e <= retry0_d & `SPC6.dec.dec_decode0_d;
16602 retry1_e <= retry1_d & `SPC6.dec.dec_decode1_d;
16603
16604
16605 // fold siam into cmov logic
16606
16607 fmov_valid_fb <= fmov_valid_f5;
16608 fmov_valid_f5 <= fmov_valid_f4;
16609 fmov_valid_f4 <= fmov_valid_f3;
16610 fmov_valid_f3 <= fmov_valid_f2;
16611 fmov_valid_f2 <= fmov_valid_m;
16612 fmov_valid_m <= fmov_valid_e & `SPC6.dec.dec_fgu_valid_e;
16613 fmov_valid_e <= ((`SPC6.exu0.ect.cmov_d | siam0_d) &
16614 `SPC6.dec.dec_decode0_d&`SPC6.dec.del.fgu0_d) |
16615 ((`SPC6.exu1.ect.cmov_d | siam1_d) &
16616 `SPC6.dec.dec_decode1_d&`SPC6.dec.del.fgu1_d);
16617
16618 // fgu check bus
16619
16620 // fcc_valid_fb doesn't assert for LDFSR. LDFSR gets checked by the LSU
16621 // checker
16622
16623 fg_valid <= {(`SPC6.fgu.fac.fac_w1_tid_fb[2:0]==3'h7) && fg_cond_fb,
16624 (`SPC6.fgu.fac.fac_w1_tid_fb[2:0]==3'h6) && fg_cond_fb,
16625 (`SPC6.fgu.fac.fac_w1_tid_fb[2:0]==3'h5) && fg_cond_fb,
16626 (`SPC6.fgu.fac.fac_w1_tid_fb[2:0]==3'h4) && fg_cond_fb,
16627 (`SPC6.fgu.fac.fac_w1_tid_fb[2:0]==3'h3) && fg_cond_fb,
16628 (`SPC6.fgu.fac.fac_w1_tid_fb[2:0]==3'h2) && fg_cond_fb,
16629 (`SPC6.fgu.fac.fac_w1_tid_fb[2:0]==3'h1) && fg_cond_fb,
16630 (`SPC6.fgu.fac.fac_w1_tid_fb[2:0]==3'h0) && fg_cond_fb };
16631
16632
16633 fgu_valid_fb0 <= `SPC6.fgu_exu_w_vld_fx5[0] && !`SPC6.fgu.fpc.div_finish_int_fb;
16634 fgu_valid_fb1 <= `SPC6.fgu_exu_w_vld_fx5[1] && !`SPC6.fgu.fpc.div_finish_int_fb;
16635
16636 // Fdiv
16637 div_special_cancel_f4[7:0] <= tid2onehot(`SPC6.fgu.fac.tid_fx3[2:0]) &
16638 {8{`SPC6.fgu.fac.q_div_default_res_fx3}};
16639 fg_fdiv_valid_fw <= `SPC6.fgu_divide_completion & ~div_special_cancel_f4 &
16640 {8{~`SPC6.fgu.fpc.fpc_fpd_ieee_trap_fb}} &
16641 {8{~`SPC6.fgu.fpc.fpc_fpd_unfin_fb}};
16642
16643
16644 // Used in CCX Stub ?
16645 inst0_e[31:0] <= `SPC6.dec.dec_inst0_d[31:0];
16646 inst1_e[31:0] <= `SPC6.dec.dec_inst1_d[31:0];
16647
16648 // only fgu ops that are not loads/stores
16649 fgu0_e <= `SPC6.dec.del.decode_fgu0_d;
16650 fgu1_e <= `SPC6.dec.del.decode_fgu1_d;
16651
16652 // LSU logic
16653 load_b <= load_m;
16654 load_m <= (load0_e | load1_e);
16655
16656 load0_e <= (`SPC6.dec.dec_decode0_d & `SPC6.dec.del.lsu0_d &
16657 `SPC6.dec.dcd0.dcd_load_d);
16658
16659 load1_e <= (`SPC6.dec.dec_decode1_d & `SPC6.dec.del.lsu1_d &
16660 `SPC6.dec.dcd1.dcd_load_d);
16661
16662 lsu_tid_b[2:0] <= lsu_tid_m[2:0];
16663 lsu_tid_m[2:0] <= lsu_tid_e[2:0];
16664
16665 lsu_complete_m[7:0] <= `SPC6.lsu_complete[7:0];
16666 lsu_complete_b[7:0] <= lsu_complete_m[7:0];
16667
16668 lsu_data_w <= lsu_data_b;
16669
16670 // Divide destination logic ..
16671 sel_divide0_e <= (`SPC6.dec_decode0_d &
16672 ((`SPC6.pku.swl0.vld_d & `SPC6.pku.swl_divide_wait[0]) |
16673 (`SPC6.pku.swl1.vld_d & `SPC6.pku.swl_divide_wait[1]) |
16674 (`SPC6.pku.swl2.vld_d & `SPC6.pku.swl_divide_wait[2]) |
16675 (`SPC6.pku.swl3.vld_d & `SPC6.pku.swl_divide_wait[3])));
16676 sel_divide1_e <= (`SPC6.dec_decode1_d &
16677 ((`SPC6.pku.swl4.vld_d & `SPC6.pku.swl_divide_wait[4]) |
16678 (`SPC6.pku.swl5.vld_d & `SPC6.pku.swl_divide_wait[5]) |
16679 (`SPC6.pku.swl6.vld_d & `SPC6.pku.swl_divide_wait[6]) |
16680 (`SPC6.pku.swl7.vld_d & `SPC6.pku.swl_divide_wait[7])));
16681
16682
16683 dcd_fdest_e <= {`SPC6.dec.del.fdest1_d,`SPC6.dec.del.fdest0_d};
16684 dcd_idest_e <= {`SPC6.dec.del.idest1_d,`SPC6.dec.del.idest0_d};
16685
16686 if (sel_divide0_e) begin // {
16687 div_idest[{1'b0, `SPC6.dec.del.tid0_e[1:0]}] <= dcd_idest_e[0];
16688 div_fdest[{1'b0, `SPC6.dec.del.tid0_e[1:0]}] <= dcd_fdest_e[0];
16689 end // }
16690 if (sel_divide1_e) begin // {
16691 div_idest[{1'b1, `SPC6.dec.del.tid1_e[1:0]}] <= dcd_idest_e[1];
16692 div_fdest[{1'b1, `SPC6.dec.del.tid1_e[1:0]}] <= dcd_fdest_e[1];
16693 end // }
16694
16695
16696 // EX logic
16697 // Save EX tids for later use
16698 ex0_tid_m <= ex0_tid_e;
16699 ex1_tid_m <= ex1_tid_e;
16700 ex0_tid_b <= ex0_tid_m;
16701 ex1_tid_b <= ex1_tid_m;
16702 ex0_tid_w <= ex0_tid_b;
16703 ex1_tid_w <= ex1_tid_b;
16704
16705 // EX Flush conditions
16706 ex_flush_w <= {ex_flush_b | {{4{(`SPC6.dec.dec_flush_b[1] |
16707 `SPC6.tlu_flush_exu_b[1])}},
16708 {4{(`SPC6.dec.dec_flush_b[0] |
16709 `SPC6.tlu_flush_exu_b[0])}}}};
16710
16711 ex_flush_b <= {{4{`SPC6.dec.dec_flush_m[1]}},
16712 {4{`SPC6.dec.dec_flush_m[0]}}};
16713
16714
16715 // ex_valid_f4 valid will only fire on return
16716 return_f4 <= return_w & ~(`SPC6.tlu_flush_ifu & real_exception);
16717 ex_valid_w <= ex_valid_b;
16718
16719 // Cancel EX valid if it turns out to be asr/asi access for this tid
16720
16721 ex_valid_b <= ex_valid_m & ~ex_asr_access;
16722
16723
16724 ex_valid_m <= { (ex1_tid_e == 2'h3) && ex1_valid_e,
16725 (ex1_tid_e == 2'h2) && ex1_valid_e,
16726 (ex1_tid_e == 2'h1) && ex1_valid_e,
16727 (ex1_tid_e == 2'h0) && ex1_valid_e,
16728 (ex0_tid_e == 2'h3) && ex0_valid_e,
16729 (ex0_tid_e == 2'h2) && ex0_valid_e,
16730 (ex0_tid_e == 2'h1) && ex0_valid_e,
16731 (ex0_tid_e == 2'h0) && ex0_valid_e};
16732
16733
16734 // TLU delays for done and retries
16735 tlu_ccr_cwp_0_valid_last <= `SPC6.tlu.tlu_ccr_cwp_0_valid;
16736 tlu_ccr_cwp_1_valid_last <= `SPC6.tlu.tlu_ccr_cwp_1_valid;
16737
16738
16739end // END posedge gclk
16740
16741// Return instruction is separated out of ex*_valid because CWP update is in
16742// W+1 for return new window is not available for IRF scan (nas_pipe) until
16743// W+2
16744assign return0 = `SPC6.exu0.rml.return_w &
16745 `SPC6.exu0.rml.inst_vld_w;
16746assign return1 = `SPC6.exu1.rml.return_w &
16747 `SPC6.exu1.rml.inst_vld_w;
16748assign return_w = {(ex1_tid_w == 2'h3) && return1,
16749 (ex1_tid_w == 2'h2) && return1,
16750 (ex1_tid_w == 2'h1) && return1,
16751 (ex1_tid_w == 2'h0) && return1,
16752 (ex0_tid_w == 2'h3) && return0,
16753 (ex0_tid_w == 2'h2) && return0,
16754 (ex0_tid_w == 2'h1) && return0,
16755 (ex0_tid_w == 2'h0) && return0};
16756
16757
16758// Cancel EX valid if it turns out that exception (tlu flush) taken for
16759// this tid
16760
16761// exu check bus
16762assign ex0_tid_e = `SPC6.exu0.ect_tid_lth_e[1:0];
16763assign ex0_valid_e = `SPC6.dec.dec_valid_e[0] & ~fgu0_e & ~load0_e &
16764 ~retry0_e & ~done0_e;
16765assign ex1_tid_e = `SPC6.exu1.ect_tid_lth_e[1:0];
16766assign ex1_valid_e = `SPC6.dec.dec_valid_e[1] & ~fgu1_e & ~load1_e &
16767 ~retry1_e & ~done1_e;
16768
16769assign ex_asr_valid = `SPC6.lsu.dcc.asi_store_m & `SPC6.lsu.dcc.asi_sync_m ;
16770
16771assign ex_asr_access ={(`SPC6.lsu.dcc.dcc_tid_m[2:0]==3'h7) & ex_asr_valid,
16772 (`SPC6.lsu.dcc.dcc_tid_m[2:0]==3'h6) & ex_asr_valid,
16773 (`SPC6.lsu.dcc.dcc_tid_m[2:0]==3'h5) & ex_asr_valid,
16774 (`SPC6.lsu.dcc.dcc_tid_m[2:0]==3'h4) & ex_asr_valid,
16775 (`SPC6.lsu.dcc.dcc_tid_m[2:0]==3'h3) & ex_asr_valid,
16776 (`SPC6.lsu.dcc.dcc_tid_m[2:0]==3'h2) & ex_asr_valid,
16777 (`SPC6.lsu.dcc.dcc_tid_m[2:0]==3'h1) & ex_asr_valid,
16778 (`SPC6.lsu.dcc.dcc_tid_m[2:0]==3'h0) & ex_asr_valid};
16779
16780
16781// EXU valid is ex_valid_w, except flushes, delayed return, traps, and stfsr
16782// real_exception added because tlu_flush_ifu activates for second redirect
16783// of retry if TPC and TNPC are not verified as sequential
16784assign real_exception =
16785 {{4 {`SPC6.tlu.fls1.dec_exc_w |
16786 `SPC6.tlu.fls1.exu_exc_w |
16787 `SPC6.tlu.fls1.lsu_exc_w |
16788 `SPC6.tlu.fls1.bsee_req_w}},
16789 {4 {`SPC6.tlu.fls0.dec_exc_w |
16790 `SPC6.tlu.fls0.exu_exc_w |
16791 `SPC6.tlu.fls0.lsu_exc_w |
16792 `SPC6.tlu.fls0.bsee_req_w}}};
16793
16794// Do not assert ex_valid for block store instructions
16795wire [7:0] block_store_first_at_w =
16796 {`SPC6.lsu.sbs7.bst_pend & `SPC6.lsu.sbs7.blk_inst_w,
16797 `SPC6.lsu.sbs6.bst_pend & `SPC6.lsu.sbs6.blk_inst_w,
16798 `SPC6.lsu.sbs5.bst_pend & `SPC6.lsu.sbs5.blk_inst_w,
16799 `SPC6.lsu.sbs4.bst_pend & `SPC6.lsu.sbs4.blk_inst_w,
16800 `SPC6.lsu.sbs3.bst_pend & `SPC6.lsu.sbs3.blk_inst_w,
16801 `SPC6.lsu.sbs2.bst_pend & `SPC6.lsu.sbs2.blk_inst_w,
16802 `SPC6.lsu.sbs1.bst_pend & `SPC6.lsu.sbs1.blk_inst_w,
16803 `SPC6.lsu.sbs0.bst_pend & `SPC6.lsu.sbs0.blk_inst_w};
16804
16805// But inject a valid for a block store that's done...
16806reg [7:0] block_store_w;
16807always @(posedge `BENCH_SPC6_GCLK) begin
16808 block_store_w[7:0] <= `SPC6.lsu.lsu_block_store_b[7:0];
16809 lsu_trap_flush_d <= `SPC6.lsu_trap_flush[7:0];
16810end
16811
16812wire [7:0] block_store_inject_at_w =
16813 ~`SPC6.lsu.lsu_block_store_b[7:0] &
16814 block_store_w[7:0] &
16815 {~`SPC6.lsu.sbs7.bst_kill,
16816 ~`SPC6.lsu.sbs6.bst_kill,
16817 ~`SPC6.lsu.sbs5.bst_kill,
16818 ~`SPC6.lsu.sbs4.bst_kill,
16819 ~`SPC6.lsu.sbs3.bst_kill,
16820 ~`SPC6.lsu.sbs2.bst_kill,
16821 ~`SPC6.lsu.sbs1.bst_kill,
16822 ~`SPC6.lsu.sbs0.bst_kill};
16823
16824assign ex_valid = (((ex_valid_w & ~ex_flush_w & ~return_w & ~block_store_first_at_w & ~exception_w &
16825 ~({{4{`SPC6.tlu.fls1.exu_exc_b & `SPC6.tlu.fls1.beat_two_b}},
16826 {4{`SPC6.tlu.fls0.exu_exc_b & `SPC6.tlu.fls0.beat_two_b}}}) &
16827 ~{(`SPC6.fgu.fac.tid_fx3[2:0]==3'h7) & `SPC6.fgu.fpc.fsr_store_fx3,
16828 (`SPC6.fgu.fac.tid_fx3[2:0]==3'h6) & `SPC6.fgu.fpc.fsr_store_fx3,
16829 (`SPC6.fgu.fac.tid_fx3[2:0]==3'h5) & `SPC6.fgu.fpc.fsr_store_fx3,
16830 (`SPC6.fgu.fac.tid_fx3[2:0]==3'h4) & `SPC6.fgu.fpc.fsr_store_fx3,
16831 (`SPC6.fgu.fac.tid_fx3[2:0]==3'h3) & `SPC6.fgu.fpc.fsr_store_fx3,
16832 (`SPC6.fgu.fac.tid_fx3[2:0]==3'h2) & `SPC6.fgu.fpc.fsr_store_fx3,
16833 (`SPC6.fgu.fac.tid_fx3[2:0]==3'h1) & `SPC6.fgu.fpc.fsr_store_fx3,
16834 (`SPC6.fgu.fac.tid_fx3[2:0]==3'h0) & `SPC6.fgu.fpc.fsr_store_fx3}) |
16835 block_store_inject_at_w) &
16836 ~(`SPC6.tlu_flush_ifu & real_exception)) | return_f4;
16837
16838assign exception_w = {{4 {`SPC6.tlu.fls1.exc_for_w}} |
16839 `SPC6.tlu.fls1.bsee_req[3:0] |
16840 `SPC6.tlu.fls1.pdist_ecc_w[3:0],
16841 {4 {`SPC6.tlu.fls0.exc_for_w}} |
16842 `SPC6.tlu.fls0.bsee_req[3:0] |
16843 `SPC6.tlu.fls0.pdist_ecc_w[3:0]};
16844
16845// imul check bus - includes imul, save, restore instructions
16846assign imul_valid = {(`SPC6.exu1.ect_tid_lth_w[1:0]== 2'h3) & fgu_valid_fb1,
16847 (`SPC6.exu1.ect_tid_lth_w[1:0]== 2'h2) & fgu_valid_fb1,
16848 (`SPC6.exu1.ect_tid_lth_w[1:0]== 2'h1) & fgu_valid_fb1,
16849 (`SPC6.exu1.ect_tid_lth_w[1:0]== 2'h0) & fgu_valid_fb1,
16850 (`SPC6.exu0.ect_tid_lth_w[1:0]== 2'h3) & fgu_valid_fb0,
16851 (`SPC6.exu0.ect_tid_lth_w[1:0]== 2'h2) & fgu_valid_fb0,
16852 (`SPC6.exu0.ect_tid_lth_w[1:0]== 2'h1) & fgu_valid_fb0,
16853 (`SPC6.exu0.ect_tid_lth_w[1:0]== 2'h0) & fgu_valid_fb0};
16854
16855// qualify this signal with fgu_err. If fgu_err is encountered, deassert
16856//fg_cond_fb, so we don't send a step to Riesling.
16857
16858// FGU conditions
16859wire fg_cond_fb_pre_err = `SPC6.fgu.fpc.fpc_w1_ul_vld_fb | fcc_valid_fb |
16860 (fmov_valid_fb & ~fg_flush_fb) |
16861 (`SPC6.fgu.fac.fsr_w1_vld_fb[1]); // covers ST(X)FSR, which clears FSR.ftt
16862
16863assign fg_cond_fb = fg_cond_fb_pre_err & ~fgu_err_fb;
16864
16865// Idiv/Fdiv signals
16866
16867assign fgu_idiv_valid = fg_div_valid & div_idest;
16868
16869
16870assign fgu_fdiv_valid = fg_fdiv_valid_fw & div_fdest;
16871
16872
16873// Lsu signals needed to check lsu results
16874
16875assign lsu_valid = lsu_check | lsu_data_w;
16876
16877assign fg_div_valid = `SPC6.fgu_divide_completion & ~div_special_cancel_f4;
16878
16879// State machine asserts lsu_check for LD hit/miss
16880always @(posedge `BENCH_SPC6_GCLK) begin
16881 for (i=0; i<=7;i=i+1) begin // {
16882 lsu_check[i] <= 1'b0;
16883 case (lsu_state[i])
16884 1'b0: // IDLE state
16885 begin
16886 // LD hit
16887 if (lsu_ld_valid & lsu_tid_dec_b[i] & load_b) begin
16888 lsu_check[i] <= 1'b1;
16889 lsu_state[i] <= 1'b0; // IDLE state
16890 end
16891 // LD miss - normal case
16892 else if (lsu_ld_valid & lsu_tid_dec_b[i] & lsu_complete_b[i])
16893 begin
16894 lsu_check[i] <= 1'b1;
16895 lsu_state[i] <= 1'b0; // IDLE state
16896 end
16897 // LD miss - LDD or Block LD or SWAP
16898 else if (lsu_ld_valid & lsu_tid_dec_b[i]) begin
16899 lsu_state[i] <= 1'b1; // VALID state
16900 end
16901// Added a new term to handle STB uncorrectable errors on atomic or asi stores that are synced
16902//Send a complete if an atomic is squashed.
16903//lsu_trap_flush is asserted a cycle after the block_store_kill is asserted
16904 else if (`SPC6.lsu.dcc.sync_st[i] & `SPC6.lsu_block_store_kill[i] & ~lsu_trap_flush_d[i])
16905 begin
16906 lsu_check[i] <= 1'b1;
16907 lsu_state[i] <= 1'b0; // IDLE state
16908 end
16909 else begin
16910 lsu_state[i] <= lsu_state[i];
16911 end
16912
16913 end
16914 1'b1: // VALID state
16915 begin
16916 if ((lsu_complete_b[i])) begin
16917 lsu_check[i] <= 1'b1;
16918 lsu_state[i] <= 1'b0; // IDLE state
16919 end
16920 else begin
16921 lsu_state[i] <= lsu_state[i];
16922 end
16923 end
16924 endcase
16925 end // }
16926end
16927
16928
16929assign lsu_tid = `SPC6.lsu.dcc.ld_tid_b[2:0];
16930// Don't assert LSU_complete in case of dtlb or irf errors
16931
16932assign lsu_valid_b = (`SPC6.lsu.dcc.pref_inst_b &
16933 ~(dec_flush_lb | `SPC6.lsu.dcc.pipe_flush_b |
16934 `SPC6.lsu_dtdp_err_b | `SPC6.lsu_dttp_err_b |
16935 `SPC6.lsu_dtmh_err_b | `SPC6.lsu.dcc.exu_error_b));
16936
16937assign lsu_data_b[7:0] = { (lsu_tid == 3'h7) & lsu_valid_b,
16938 (lsu_tid == 3'h6) & lsu_valid_b,
16939 (lsu_tid == 3'h5) & lsu_valid_b,
16940 (lsu_tid == 3'h4) & lsu_valid_b,
16941 (lsu_tid == 3'h3) & lsu_valid_b,
16942 (lsu_tid == 3'h2) & lsu_valid_b,
16943 (lsu_tid == 3'h1) & lsu_valid_b,
16944 (lsu_tid == 3'h0) & lsu_valid_b};
16945
16946assign lsu_tid_dec_b[0] = `SPC6.lsu.dcc.ld_tid_b[2:0] == 3'd0;
16947assign lsu_tid_dec_b[1] = `SPC6.lsu.dcc.ld_tid_b[2:0] == 3'd1;
16948assign lsu_tid_dec_b[2] = `SPC6.lsu.dcc.ld_tid_b[2:0] == 3'd2;
16949assign lsu_tid_dec_b[3] = `SPC6.lsu.dcc.ld_tid_b[2:0] == 3'd3;
16950assign lsu_tid_dec_b[4] = `SPC6.lsu.dcc.ld_tid_b[2:0] == 3'd4;
16951assign lsu_tid_dec_b[5] = `SPC6.lsu.dcc.ld_tid_b[2:0] == 3'd5;
16952assign lsu_tid_dec_b[6] = `SPC6.lsu.dcc.ld_tid_b[2:0] == 3'd6;
16953assign lsu_tid_dec_b[7] = `SPC6.lsu.dcc.ld_tid_b[2:0] == 3'd7;
16954
16955assign lsu_ld_valid = (`SPC6.lsu.dcc.exu_ld_vld_b |`SPC6.lsu.dcc.fgu_fld_vld_b) &
16956 ~(`SPC6.lsu.dcc.flush_all_b & `SPC6.lsu.dcc.ld_inst_vld_b);
16957assign dec_flush_lb = `SPC6.dec.dec_flush_lb | `SPC6.tlu_flush_lsu_b;
16958
16959
16960// LSU interface to CCX stub
16961
16962assign exu_lsu_valid = `SPC6.dec.del.lsu_valid_e;
16963assign exu_lsu_addr[47:0] = `SPC6.exu_lsu_address_e[47:0];
16964assign exu_lsu_tid[2:0] = lsu_tid_e[2:0];
16965assign exu_lsu_regid[4:0] = `SPC6.dec.dec_lsu_rd_e[4:0];
16966assign exu_lsu_data[63:0] = `SPC6.exu_lsu_store_data_e[63:0];
16967assign exu_lsu_instr[31:0] = ({32{`SPC6.dec.dec_lsu_sel0_e}} &
16968 inst0_e[31:0]) |
16969 ({32{~`SPC6.dec.dec_lsu_sel0_e}} &
16970 inst1_e[31:0]);
16971assign ld_inst_d = `SPC6.dec.dec_ld_inst_d;
16972
16973///////////////////////////////////////////////////////////////////////////////
16974// Debugging Instruction Opcodes Pipeline
16975///////////////////////////////////////////////////////////////////////////////
16976
16977
16978 reg [31:0] op_0_w;
16979 reg [31:0] op_1_w;
16980 reg [31:0] op_2_w;
16981 reg [31:0] op_3_w;
16982 reg [31:0] op_4_w;
16983 reg [31:0] op_5_w;
16984 reg [31:0] op_6_w;
16985 reg [31:0] op_7_w;
16986
16987 reg [31:0] op0_b;
16988 reg [31:0] op0_m;
16989 reg [31:0] op0_e;
16990 reg [31:0] op0_d;
16991
16992 reg [31:0] op1_b;
16993 reg [31:0] op1_m;
16994 reg [31:0] op1_e;
16995 reg [31:0] op1_d;
16996
16997 reg [255:0] inst0_string_w;
16998 reg [255:0] inst0_string_b;
16999 reg [255:0] inst0_string_m;
17000 reg [255:0] inst0_string_e;
17001 reg [255:0] inst0_string_d;
17002
17003 reg [255:0] inst1_string_w;
17004 reg [255:0] inst1_string_b;
17005 reg [255:0] inst1_string_m;
17006 reg [255:0] inst1_string_e;
17007 reg [255:0] inst1_string_d;
17008
17009 reg [255:0] inst0_string_p;
17010 reg [255:0] inst1_string_p;
17011 reg [255:0] inst2_string_p;
17012 reg [255:0] inst3_string_p;
17013 reg [255:0] inst4_string_p;
17014 reg [255:0] inst5_string_p;
17015 reg [255:0] inst6_string_p;
17016 reg [255:0] inst7_string_p;
17017
17018initial begin
17019 op_0_w = 32'b0;
17020 op_1_w = 32'b0;
17021 op_2_w = 32'b0;
17022 op_3_w = 32'b0;
17023 op_4_w = 32'b0;
17024 op_5_w = 32'b0;
17025 op_6_w = 32'b0;
17026 op_7_w = 32'b0;
17027end
17028
17029always @(posedge `BENCH_SPC6_GCLK) begin // {
17030 op_0_w <= ({32 { select_pc_b[0]}} & op0_b[31:0]) |
17031 ({32 {~select_pc_b[0]}} & op_0_w[31:0]) ;
17032 op_1_w <= ({32 { select_pc_b[1]}} & op0_b[31:0]) |
17033 ({32 {~select_pc_b[1]}} & op_1_w[31:0]) ;
17034 op_2_w <= ({32 { select_pc_b[2]}} & op0_b[31:0]) |
17035 ({32 {~select_pc_b[2]}} & op_2_w[31:0]) ;
17036 op_3_w <= ({32 { select_pc_b[3]}} & op0_b[31:0]) |
17037 ({32 {~select_pc_b[3]}} & op_3_w[31:0]) ;
17038 op_4_w <= ({32 { select_pc_b[4]}} & op1_b[31:0]) |
17039 ({32 {~select_pc_b[4]}} & op_4_w[31:0]) ;
17040 op_5_w <= ({32 { select_pc_b[5]}} & op1_b[31:0]) |
17041 ({32 {~select_pc_b[5]}} & op_5_w[31:0]) ;
17042 op_6_w <= ({32 { select_pc_b[6]}} & op1_b[31:0]) |
17043 ({32 {~select_pc_b[6]}} & op_6_w[31:0]) ;
17044 op_7_w <= ({32 { select_pc_b[7]}} & op1_b[31:0]) |
17045 ({32 {~select_pc_b[7]}} & op_7_w[31:0]) ;
17046
17047 op0_b <= op0_m;
17048 op0_m <= op0_e;
17049 op0_e <= op0_d;
17050 op0_d <= `SPC6.dec.ded0.decode_mux[31:0];
17051
17052 op1_b <= op1_m;
17053 op1_m <= op1_e;
17054 op1_e <= op1_d;
17055 op1_d <= `SPC6.dec.ded1.decode_mux[31:0];
17056
17057 inst0_string_w<=inst0_string_b;
17058 inst0_string_b<=inst0_string_m;
17059 inst0_string_m<=inst0_string_e;
17060 inst0_string_e<=inst0_string_d;
17061 inst0_string_d<=xlate(`SPC6.dec.ded0.decode_mux[31:0]);
17062
17063 inst1_string_w<=inst1_string_b;
17064 inst1_string_b<=inst1_string_m;
17065 inst1_string_m<=inst1_string_e;
17066 inst1_string_e<=inst1_string_d;
17067 inst1_string_d<=xlate(`SPC6.dec.ded1.decode_mux[31:0]);
17068
17069// instructions for each thread at pick
17070 inst0_string_p<=xlate(`SPC6.ifu_ibu.ibf0.buf0_in[31:0]);
17071 inst1_string_p<=xlate(`SPC6.ifu_ibu.ibf1.buf0_in[31:0]);
17072 inst2_string_p<=xlate(`SPC6.ifu_ibu.ibf2.buf0_in[31:0]);
17073 inst3_string_p<=xlate(`SPC6.ifu_ibu.ibf3.buf0_in[31:0]);
17074 inst4_string_p<=xlate(`SPC6.ifu_ibu.ibf4.buf0_in[31:0]);
17075 inst5_string_p<=xlate(`SPC6.ifu_ibu.ibf5.buf0_in[31:0]);
17076 inst6_string_p<=xlate(`SPC6.ifu_ibu.ibf6.buf0_in[31:0]);
17077 inst7_string_p<=xlate(`SPC6.ifu_ibu.ibf7.buf0_in[31:0]);
17078
17079end //}
17080
17081///////////////////////////////////////////////////////////////////////////////
17082// Functions
17083///////////////////////////////////////////////////////////////////////////////
17084function [2:0] onehot2tid;
17085 input [7:0] onehot;
17086
17087 begin
17088
17089 if (onehot[7:0]==8'b00000001) onehot2tid[2:0] = 3'b000;
17090 else if (onehot[7:0]==8'b00000010) onehot2tid[2:0] = 3'b001;
17091 else if (onehot[7:0]==8'b00000100) onehot2tid[2:0] = 3'b010;
17092 else if (onehot[7:0]==8'b00001000) onehot2tid[2:0] = 3'b011;
17093 else if (onehot[7:0]==8'b00010000) onehot2tid[2:0] = 3'b100;
17094 else if (onehot[7:0]==8'b00100000) onehot2tid[2:0] = 3'b101;
17095 else if (onehot[7:0]==8'b01000000) onehot2tid[2:0] = 3'b110;
17096 else if (onehot[7:0]==8'b10000000) onehot2tid[2:0] = 3'b111;
17097
17098 end
17099endfunction
17100
17101function [7:0] tid2onehot;
17102 input [2:0] tid;
17103
17104 begin
17105
17106 if (tid[2:0]==3'b000) tid2onehot[7:0] = 8'b00000001;
17107 else if (tid[2:0]==3'b001) tid2onehot[7:0] = 8'b00000010;
17108 else if (tid[2:0]==3'b010) tid2onehot[7:0] = 8'b00000100;
17109 else if (tid[2:0]==3'b011) tid2onehot[7:0] = 8'b00001000;
17110 else if (tid[2:0]==3'b100) tid2onehot[7:0] = 8'b00010000;
17111 else if (tid[2:0]==3'b101) tid2onehot[7:0] = 8'b00100000;
17112 else if (tid[2:0]==3'b110) tid2onehot[7:0] = 8'b01000000;
17113 else if (tid[2:0]==3'b111) tid2onehot[7:0] = 8'b10000000;
17114
17115 end
17116endfunction
17117
17118//---------------------
17119
17120function [255:0] xlate;
17121 input [31:0] inst;
17122
17123 begin
17124 casex(inst[31:0])
1712532'b10xxxxx110100xxxxx001000011xxxxx : xlate[255:0]="FADDq";
1712632'b10xxxxx110100xxxxx001000111xxxxx : xlate[255:0]="FSUBq";
1712732'b10000xx110101xxxxx001010011xxxxx : xlate[255:0]="FCMPq";
1712832'b10000xx110101xxxxx001010111xxxxx : xlate[255:0]="FCMPEq";
1712932'b10xxxxx110100xxxxx011001101xxxxx : xlate[255:0]="FsTOq";
1713032'b10xxxxx110100xxxxx011001110xxxxx : xlate[255:0]="FdTOq";
1713132'b10xxxxx110100xxxxx010001100xxxxx : xlate[255:0]="FxTOq";
1713232'b10xxxxx110100xxxxx011001100xxxxx : xlate[255:0]="FiTOq";
1713332'b10xxxxx110100xxxxx000000011xxxxx : xlate[255:0]="FMOVq";
1713432'b10xxxxx110100xxxxx000000111xxxxx : xlate[255:0]="FNEGq";
1713532'b10xxxxx110100xxxxx000001011xxxxx : xlate[255:0]="FABSq";
1713632'b10xxxxx110100xxxxx001001011xxxxx : xlate[255:0]="FMULq";
1713732'b10xxxxx110100xxxxx001101110xxxxx : xlate[255:0]="FdMULq";
1713832'b10xxxxx110100xxxxx001001111xxxxx : xlate[255:0]="FDIVq";
1713932'b10xxxxx110100xxxxx000101011xxxxx : xlate[255:0]="FSQRTq";
1714032'b10xxxxx1101010xxxx0xx100111xxxxx : xlate[255:0]="FMOVrQa";
1714132'b10xxxxx1101010xxxx0x1x00111xxxxx : xlate[255:0]="FMOVrQb";
1714232'b10xxxxx110100xxxxx011010011xxxxx : xlate[255:0]="FqTOi";
1714332'b10xxxxx110100xxxxx010000011xxxxx : xlate[255:0]="FqTOx";
1714432'b10xxxxx110100xxxxx011000111xxxxx : xlate[255:0]="FqTOs";
1714532'b10xxxxx110100xxxxx011001011xxxxx : xlate[255:0]="FqTOd";
1714632'b11xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQF";
1714732'b11xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFi";
1714832'b11xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQFA";
1714932'b11xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFAi";
1715032'b11xxxxx100110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFi";
1715132'b11xxxxx100110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQF";
1715232'b11xxxxx110110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQFA";
1715332'b11xxxxx110110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFAi";
1715432'b10xxxxx1101010xxxxxxx000011xxxxx : xlate[255:0]="FMOVQcc";
1715532'b10xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADD";
1715632'b10xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDcc";
1715732'b10xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDC";
1715832'b10xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDCcc";
1715932'b10xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDi";
1716032'b10xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDcci";
1716132'b10xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCi";
1716232'b10xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCcci";
1716332'b00x0xx1011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr1";
1716432'b00x0x1x011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr2";
1716532'b00xx000110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfccA";
1716632'b00xx1xx110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc1";
1716732'b00xxx1x110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc2";
1716832'b00xxxx1110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc3";
1716932'b00xx000101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfccA";
1717032'b00xx1xx101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc1";
1717132'b00xxx1x101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc2";
1717232'b00xxxx1101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc3";
1717332'b00xx000010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BiccA";
1717432'b00xx1xx010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc1";
1717532'b00xxx1x010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc2";
1717632'b00xxxx1010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc3";
1717732'b00xx000001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPccA";
1717832'b00xx1xx001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc1";
1717932'b00xxx1x001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc2";
1718032'b00xxxx1001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc3";
1718132'b01xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="CALL";
1718232'b11xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASA";
1718332'b11xxxxx111110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASXA";
1718432'b11xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASAi";
1718532'b11xxxxx111110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASXAi";
1718632'b10xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIV";
1718732'b10xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIV";
1718832'b10xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVcc";
1718932'b10xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVcc";
1719032'b10xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVi";
1719132'b10xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVi";
1719232'b10xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVcci";
1719332'b10xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVcci";
1719432'b1000000111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="DONE";
1719532'b1000001111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RETRY";
1719632'b10xxxxx110100xxxxx001000001xxxxx : xlate[255:0]="FADDs";
1719732'b10xxxxx110100xxxxx001000010xxxxx : xlate[255:0]="FADDd";
1719832'b10xxxxx110100xxxxx001000101xxxxx : xlate[255:0]="FSUBs";
1719932'b10xxxxx110100xxxxx001000110xxxxx : xlate[255:0]="FSUBd";
1720032'b10000xx110101xxxxx001010001xxxxx : xlate[255:0]="FCMPs";
1720132'b10000xx110101xxxxx001010010xxxxx : xlate[255:0]="FCMPd";
1720232'b10000xx110101xxxxx001010101xxxxx : xlate[255:0]="FCMPEs";
1720332'b10000xx110101xxxxx001010110xxxxx : xlate[255:0]="FCMPEd";
1720432'b10xxxxx110100xxxxx010000001xxxxx : xlate[255:0]="FsTOx";
1720532'b10xxxxx110100xxxxx010000010xxxxx : xlate[255:0]="FdTOx";
1720632'b10xxxxx110100xxxxx011010001xxxxx : xlate[255:0]="FsTOi";
1720732'b10xxxxx110100xxxxx011010010xxxxx : xlate[255:0]="FdTOi";
1720832'b10xxxxx110100xxxxx011001001xxxxx : xlate[255:0]="FsTOd";
1720932'b10xxxxx110100xxxxx011000110xxxxx : xlate[255:0]="FdTOs";
1721032'b10xxxxx110100xxxxx010000100xxxxx : xlate[255:0]="FxTOs";
1721132'b10xxxxx110100xxxxx010001000xxxxx : xlate[255:0]="FxTOd";
1721232'b10xxxxx110100xxxxx011000100xxxxx : xlate[255:0]="FiTOs";
1721332'b10xxxxx110100xxxxx011001000xxxxx : xlate[255:0]="FiTOd";
1721432'b10xxxxx110100xxxxx000000001xxxxx : xlate[255:0]="FMOVs";
1721532'b10xxxxx110100xxxxx000000010xxxxx : xlate[255:0]="FMOVd";
1721632'b10xxxxx110100xxxxx000000101xxxxx : xlate[255:0]="FNEGs";
1721732'b10xxxxx110100xxxxx000000110xxxxx : xlate[255:0]="FNEGd";
1721832'b10xxxxx110100xxxxx000001001xxxxx : xlate[255:0]="FABSs";
1721932'b10xxxxx110100xxxxx000001010xxxxx : xlate[255:0]="FABSd";
1722032'b10xxxxx110100xxxxx001001001xxxxx : xlate[255:0]="FMULs";
1722132'b10xxxxx110100xxxxx001001010xxxxx : xlate[255:0]="FMULd";
1722232'b10xxxxx110100xxxxx001101001xxxxx : xlate[255:0]="FsMULd";
1722332'b10xxxxx110100xxxxx001001101xxxxx : xlate[255:0]="FDIVs";
1722432'b10xxxxx110100xxxxx001001110xxxxx : xlate[255:0]="FDIVd";
1722532'b10xxxxx110100xxxxx000101001xxxxx : xlate[255:0]="FSQRTs";
1722632'b10xxxxx110100xxxxx000101010xxxxx : xlate[255:0]="FSQRTd";
1722732'b10xxxxx111011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSH";
1722832'b10xxxxx111011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="FLUSHi";
1722932'b10xxxxx101011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSHw";
1723032'b10xxxxx111000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="JMPL";
1723132'b10xxxxx111000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="JMPLi";
1723232'b11xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDF";
1723332'b11xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDF";
1723432'b1100000100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFSR";
1723532'b1100001100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXFSR";
1723632'b11xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFi";
1723732'b11xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFi";
1723832'b1100000100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFSRi";
1723932'b1100001100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXFSRi";
1724032'b11xxxxx110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFA";
1724132'b11xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDFA";
1724232'b11xxxxx110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFAi";
1724332'b11xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFAi";
1724432'b11xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSB";
1724532'b11xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSH";
1724632'b11xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSW";
1724732'b11xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUB";
1724832'b11xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUH";
1724932'b11xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUW";
1725032'b11xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDX";
1725132'b11xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDD";
1725232'b11xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBi";
1725332'b11xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHi";
1725432'b11xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWi";
1725532'b11xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBi";
1725632'b11xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHi";
1725732'b11xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWi";
1725832'b11xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXi";
1725932'b11xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDi";
1726032'b11xxxxx011001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSBA";
1726132'b11xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSHA";
1726232'b11xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSWA";
1726332'b11xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUBA";
1726432'b11xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUHA";
1726532'b11xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUWA";
1726632'b11xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXA";
1726732'b11xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDA";
1726832'b11xxxxx011001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBAi";
1726932'b11xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHAi";
1727032'b11xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWAi";
1727132'b11xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBAi";
1727232'b11xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHAi";
1727332'b11xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWAi";
1727432'b11xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXAi";
1727532'b11xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDAi";
1727632'b11xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUB";
1727732'b11xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBi";
1727832'b11xxxxx011101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUBA";
1727932'b11xxxxx011101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBAi";
1728032'b10xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="AND";
1728132'b10xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDcc";
1728232'b10xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDN";
1728332'b10xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDNcc";
1728432'b10xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="OR";
1728532'b10xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORcc";
1728632'b10xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORN";
1728732'b10xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORNcc";
1728832'b10xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XOR";
1728932'b10xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XORcc";
1729032'b10xxxxx000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNOR";
1729132'b10xxxxx010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNORcc";
1729232'b10xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDi";
1729332'b10xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDcci";
1729432'b10xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNi";
1729532'b10xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNcci";
1729632'b10xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORi";
1729732'b10xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORcci";
1729832'b10xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNi";
1729932'b10xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNcci";
1730032'b10xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORi";
1730132'b10xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORcci";
1730232'b10xxxxx000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORi";
1730332'b10xxxxx010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORcci";
1730432'b1000000101000011111xxxxxxxxxxxxx : xlate[255:0]="MEMBAR";
1730532'b1000000101000011110xxxxxxxxxxxxx : xlate[255:0]="STBAR";
1730632'b10xxxxx101000000000xxxxxxxxxxxxx : xlate[255:0]="RDY";
1730732'b10xxxxx101000000100xxxxxxxxxxxxx : xlate[255:0]="RDCCR";
1730832'b10xxxxx101000000110xxxxxxxxxxxxx : xlate[255:0]="RDASI";
1730932'b10xxxxx101000001000xxxxxxxxxxxxx : xlate[255:0]="RDTICK";
1731032'b10xxxxx101000001010xxxxxxxxxxxxx : xlate[255:0]="RDPC";
1731132'b10xxxxx101000001100xxxxxxxxxxxxx : xlate[255:0]="RDFPRS";
1731232'b10xxxxx101000100110xxxxxxxxxxxxx : xlate[255:0]="RDGSR";
1731332'b10xxxxx101000100000xxxxxxxxxxxxx : xlate[255:0]="RDPCR";
1731432'b10xxxxx101000100010xxxxxxxxxxxxx : xlate[255:0]="RDPIC";
1731532'b10xxxxx1101010xxxx0xx000001xxxxx : xlate[255:0]="FMOVSfcc";
1731632'b10xxxxx1101010xxxx1xx000001xxxxx : xlate[255:0]="FMOVSxcc";
1731732'b10xxxxx1101010xxxx0xx000010xxxxx : xlate[255:0]="FMOVDfcc";
1731832'b10xxxxx1101010xxxx1xx000010xxxxx : xlate[255:0]="FMOVDxcc";
1731932'b10xxxxx110101xxxxx0xx100101xxxxx : xlate[255:0]="FMOVrS1";
1732032'b10xxxxx110101xxxxx0x1x00101xxxxx : xlate[255:0]="FMOVrS2";
1732132'b10xxxxx110101xxxxx0xx100110xxxxx : xlate[255:0]="FMOVrD1";
1732232'b10xxxxx110101xxxxx0x1x00110xxxxx : xlate[255:0]="FMOVrD2";
1732332'b10xxxxx1011001xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVxcc";
1732432'b10xxxxx1011001xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVxcci";
1732532'b10xxxxx1011000xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVfcc";
1732632'b10xxxxx1011000xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVfcci";
1732732'b10xxxxx101111xxxxx0xx1xxxxxxxxxx : xlate[255:0]="MOVR1";
1732832'b10xxxxx101111xxxxx0x1xxxxxxxxxxx : xlate[255:0]="MOVR2";
1732932'b10xxxxx101111xxxxx1xx1xxxxxxxxxx : xlate[255:0]="MOVRi1";
1733032'b10xxxxx101111xxxxx1x1xxxxxxxxxxx : xlate[255:0]="MOVRi2";
1733132'b10xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULX";
1733232'b10xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVX";
1733332'b10xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVX";
1733432'b10xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULXi";
1733532'b10xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVXi";
1733632'b10xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVXi";
1733732'b10xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMUL";
1733832'b10xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMUL";
1733932'b10xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMULcc";
1734032'b10xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMULcc";
1734132'b10xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULi";
1734232'b10xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULi";
1734332'b10xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULcci";
1734432'b10xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULcci";
1734532'b10xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULScc";
1734632'b10xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULScci";
1734732'b10xxxxx101110000000xxxxxxxxxxxxx : xlate[255:0]="POPC";
1734832'b10xxxxx101110000001xxxxxxxxxxxxx : xlate[255:0]="POPCi";
1734932'b11xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCH";
1735032'b11xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHi";
1735132'b11xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCHA";
1735232'b11xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHAi";
1735332'b10xxxxx101010xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDPR";
1735432'b10xxxxx101001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDHPR";
1735532'b10xxxxx111001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RETURN";
1735632'b10xxxxx111001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RETURNi";
1735732'b10xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SAVE";
1735832'b10xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SAVEi";
1735932'b10xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RESTORE";
1736032'b10xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RESTOREi";
1736132'b1000000110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="SAVED";
1736232'b1000001110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RESTORED";
1736332'b00xxxxx100xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="SETHI";
1736432'b10xxxxx100101xxxxx00xxxxxxxxxxxx : xlate[255:0]="SLL";
1736532'b10xxxxx100110xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRL";
1736632'b10xxxxx100111xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRA";
1736732'b10xxxxx100101xxxxx01xxxxxxxxxxxx : xlate[255:0]="SLLX";
1736832'b10xxxxx100110xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRLX";
1736932'b10xxxxx100111xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRAX";
1737032'b10xxxxx100101xxxxx10xxxxxxxxxxxx : xlate[255:0]="SLLi";
1737132'b10xxxxx100110xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRLi";
1737232'b10xxxxx100111xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRAi";
1737332'b10xxxxx100101xxxxx11xxxxxxxxxxxx : xlate[255:0]="SLLXi";
1737432'b10xxxxx100110xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRLXi";
1737532'b10xxxxx100111xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRAXi";
1737632'b11xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STF";
1737732'b11xxxxx100111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDF";
1737832'b1100000100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFSR";
1737932'b1100001100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXFSR";
1738032'b11xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFi";
1738132'b11xxxxx100111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFi";
1738232'b1100000100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFSRi";
1738332'b1100001100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXFSRi";
1738432'b11xxxxx110100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFA";
1738532'b11xxxxx110111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDFA";
1738632'b11xxxxx110100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFAi";
1738732'b11xxxxx110111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFAi";
1738832'b11xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STB";
1738932'b11xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STH";
1739032'b11xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STW";
1739132'b11xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STX";
1739232'b11xxxx0000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STD";
1739332'b11xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBi";
1739432'b11xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHi";
1739532'b11xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWi";
1739632'b11xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXi";
1739732'b11xxxx0000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDi";
1739832'b11xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STBA";
1739932'b11xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STHA";
1740032'b11xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STWA";
1740132'b11xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXA";
1740232'b11xxxx0010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDA";
1740332'b11xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBAi";
1740432'b11xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHAi";
1740532'b11xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWAi";
1740632'b11xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXAi";
1740732'b11xxxx0010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDAi";
1740832'b10xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUB";
1740932'b10xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBcc";
1741032'b10xxxxx001100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBC";
1741132'b10xxxxx011100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBCcc";
1741232'b10xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBi";
1741332'b10xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBcci";
1741432'b10xxxxx001100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCi";
1741532'b10xxxxx011100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCcci";
1741632'b11xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAP";
1741732'b11xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPi";
1741832'b11xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAPA";
1741932'b11xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPAi";
1742032'b10xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDcc";
1742132'b10xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDccTV";
1742232'b10xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDcci";
1742332'b10xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDccTVi";
1742432'b10xxxxx100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBcc";
1742532'b10xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBccTV";
1742632'b10xxxxx100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBcci";
1742732'b10xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBccTVi";
1742832'b10xxxxx111010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TCC";
1742932'b10xxxxx111010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TCCi";
1743032'b10xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPR";
1743132'b10xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPRi";
1743232'b10xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRHPR";
1743332'b10xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRHPRi";
1743432'b1000000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRY";
1743532'b1000010110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRCCR";
1743632'b1000011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRASI";
1743732'b1000110110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRFPRS";
1743832'b1010011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRGSR";
1743932'b1010000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPCR";
1744032'b1010001110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPIC";
1744132'b1000000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRYi";
1744232'b1000010110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRCCRi";
1744332'b1000011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRASIi";
1744432'b1000110110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRFPRSi";
1744532'b1010011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRGSRi";
1744632'b1010000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPCRi";
1744732'b1010001110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPICi";
1744832'b1001111110000000001xxxxxxxxxxxxx : xlate[255:0]="SIR";
1744932'b10xxxxx110110xxxxx001010000xxxxx : xlate[255:0]="FPADD16";
1745032'b10xxxxx110110xxxxx001010001xxxxx : xlate[255:0]="FPADD16S";
1745132'b10xxxxx110110xxxxx001010010xxxxx : xlate[255:0]="FPADD32";
1745232'b10xxxxx110110xxxxx001010011xxxxx : xlate[255:0]="FPADD32S";
1745332'b10xxxxx110110xxxxx001010100xxxxx : xlate[255:0]="FPSUB16";
1745432'b10xxxxx110110xxxxx001010101xxxxx : xlate[255:0]="FPSUB16S";
1745532'b10xxxxx110110xxxxx001010110xxxxx : xlate[255:0]="FPSUB32";
1745632'b10xxxxx110110xxxxx001010111xxxxx : xlate[255:0]="FPSUB32S";
1745732'b10xxxxx110110xxxxx000111011xxxxx : xlate[255:0]="FPACK16";
1745832'b10xxxxx110110xxxxx000111010xxxxx : xlate[255:0]="FPACK32";
1745932'b10xxxxx110110xxxxx000111101xxxxx : xlate[255:0]="FPACKFIX";
1746032'b10xxxxx110110xxxxx001001101xxxxx : xlate[255:0]="FEXPAND";
1746132'b10xxxxx110110xxxxx001001011xxxxx : xlate[255:0]="FPMERGE";
1746232'b10xxxxx110110xxxxx000110001xxxxx : xlate[255:0]="FMUL8x16";
1746332'b10xxxxx110110xxxxx000110011xxxxx : xlate[255:0]="FMUL8x16AU";
1746432'b10xxxxx110110xxxxx000110101xxxxx : xlate[255:0]="FMUL8x16AL";
1746532'b10xxxxx110110xxxxx000110110xxxxx : xlate[255:0]="FMUL8SUx16";
1746632'b10xxxxx110110xxxxx000110111xxxxx : xlate[255:0]="FMUL8ULx16";
1746732'b10xxxxx110110xxxxx000111000xxxxx : xlate[255:0]="FMULD8SUx16";
1746832'b10xxxxx110110xxxxx000111001xxxxx : xlate[255:0]="FMULD8ULx16";
1746932'b10xxxxx110110xxxxx000011000xxxxx : xlate[255:0]="ALIGNADDRESS";
1747032'b10xxxxx110110xxxxx000011010xxxxx : xlate[255:0]="ALIGNADDRESS_LITTLE";
1747132'b10xxxxx110110xxxxx000011001xxxxx : xlate[255:0]="BMASK";
1747232'b10xxxxx110110xxxxx001001000xxxxx : xlate[255:0]="FALIGNDATA";
1747332'b10xxxxx110110xxxxx001001100xxxxx : xlate[255:0]="BSHUFFLE";
1747432'b10xxxxx110110xxxxx001100000xxxxx : xlate[255:0]="FZERO";
1747532'b10xxxxx110110xxxxx001100001xxxxx : xlate[255:0]="FZEROS";
1747632'b10xxxxx110110xxxxx001111110xxxxx : xlate[255:0]="FONE";
1747732'b10xxxxx110110xxxxx001111111xxxxx : xlate[255:0]="FONES";
1747832'b10xxxxx110110xxxxx001110100xxxxx : xlate[255:0]="FSRC1";
1747932'b10xxxxx110110xxxxx001110101xxxxx : xlate[255:0]="FSRC1S";
1748032'b10xxxxx110110xxxxx001111000xxxxx : xlate[255:0]="FSRC2";
1748132'b10xxxxx110110xxxxx001111001xxxxx : xlate[255:0]="FSRC2S";
1748232'b10xxxxx110110xxxxx001101010xxxxx : xlate[255:0]="FNOT1";
1748332'b10xxxxx110110xxxxx001101011xxxxx : xlate[255:0]="FNOT1S";
1748432'b10xxxxx110110xxxxx001100110xxxxx : xlate[255:0]="FNOT2";
1748532'b10xxxxx110110xxxxx001100111xxxxx : xlate[255:0]="FNOT2S";
1748632'b10xxxxx110110xxxxx001111100xxxxx : xlate[255:0]="FOR";
1748732'b10xxxxx110110xxxxx001111101xxxxx : xlate[255:0]="FORS";
1748832'b10xxxxx110110xxxxx001100010xxxxx : xlate[255:0]="FNOR";
1748932'b10xxxxx110110xxxxx001100011xxxxx : xlate[255:0]="FNORS";
1749032'b10xxxxx110110xxxxx001110000xxxxx : xlate[255:0]="FAND";
1749132'b10xxxxx110110xxxxx001110001xxxxx : xlate[255:0]="FANDS";
1749232'b10xxxxx110110xxxxx001101110xxxxx : xlate[255:0]="FNAND";
1749332'b10xxxxx110110xxxxx001101111xxxxx : xlate[255:0]="FNANDS";
1749432'b10xxxxx110110xxxxx001101100xxxxx : xlate[255:0]="FXOR";
1749532'b10xxxxx110110xxxxx001101101xxxxx : xlate[255:0]="FXORS";
1749632'b10xxxxx110110xxxxx001110010xxxxx : xlate[255:0]="FXNOR";
1749732'b10xxxxx110110xxxxx001110011xxxxx : xlate[255:0]="FXNORS";
1749832'b10xxxxx110110xxxxx001111010xxxxx : xlate[255:0]="FORNOT1";
1749932'b10xxxxx110110xxxxx001111011xxxxx : xlate[255:0]="FORNOT1S";
1750032'b10xxxxx110110xxxxx001110110xxxxx : xlate[255:0]="FORNOT2";
1750132'b10xxxxx110110xxxxx001110111xxxxx : xlate[255:0]="FORNOT2S";
1750232'b10xxxxx110110xxxxx001101000xxxxx : xlate[255:0]="FANDNOT1";
1750332'b10xxxxx110110xxxxx001101001xxxxx : xlate[255:0]="FANDNOT1S";
1750432'b10xxxxx110110xxxxx001100100xxxxx : xlate[255:0]="FANDNOT2";
1750532'b10xxxxx110110xxxxx001100101xxxxx : xlate[255:0]="FANDNOT2S";
1750632'b10xxxxx110110xxxxx000101000xxxxx : xlate[255:0]="FCMPGT16";
1750732'b10xxxxx110110xxxxx000101100xxxxx : xlate[255:0]="FCMPGT32";
1750832'b10xxxxx110110xxxxx000100000xxxxx : xlate[255:0]="FCMPLE16";
1750932'b10xxxxx110110xxxxx000100100xxxxx : xlate[255:0]="FCMPLE32";
1751032'b10xxxxx110110xxxxx000100010xxxxx : xlate[255:0]="FCMPNE16";
1751132'b10xxxxx110110xxxxx000100110xxxxx : xlate[255:0]="FCMPNE32";
1751232'b10xxxxx110110xxxxx000101010xxxxx : xlate[255:0]="FCMPEQ16";
1751332'b10xxxxx110110xxxxx000101110xxxxx : xlate[255:0]="FCMPEQ32";
1751432'b10xxxxx110110xxxxx000111110xxxxx : xlate[255:0]="PDIST";
1751532'b10xxxxx110110xxxxx000000000xxxxx : xlate[255:0]="EDGE8";
1751632'b10xxxxx110110xxxxx000000001xxxxx : xlate[255:0]="EDGE8N";
1751732'b10xxxxx110110xxxxx000000010xxxxx : xlate[255:0]="EDGE8L";
1751832'b10xxxxx110110xxxxx000000011xxxxx : xlate[255:0]="EDGE8LN";
1751932'b10xxxxx110110xxxxx000000100xxxxx : xlate[255:0]="EDGE16";
1752032'b10xxxxx110110xxxxx000000101xxxxx : xlate[255:0]="EDGE16N";
1752132'b10xxxxx110110xxxxx000000110xxxxx : xlate[255:0]="EDGE16L";
1752232'b10xxxxx110110xxxxx000000111xxxxx : xlate[255:0]="EDGE16LN";
1752332'b10xxxxx110110xxxxx000001000xxxxx : xlate[255:0]="EDGE32";
1752432'b10xxxxx110110xxxxx000001001xxxxx : xlate[255:0]="EDGE32N";
1752532'b10xxxxx110110xxxxx000001010xxxxx : xlate[255:0]="EDGE32L";
1752632'b10xxxxx110110xxxxx000001011xxxxx : xlate[255:0]="EDGE32LN";
1752732'b10xxxxx110110xxxxx000010000xxxxx : xlate[255:0]="ARRAY8";
1752832'b10xxxxx110110xxxxx000010010xxxxx : xlate[255:0]="ARRAY16";
1752932'b10xxxxx110110xxxxx000010100xxxxx : xlate[255:0]="ARRAY32";
1753032'b10xxxxx110110xxxxx010000001xxxxx : xlate[255:0]="SIAM";
17531 default : xlate[255:0]="unknown";
17532 endcase
17533 end
17534endfunction // xlate
17535
17536
17537`endif
17538
17539endmodule
17540
17541`endif
17542
17543
17544`ifdef CORE_7
17545
17546module nas_probes7;
17547
17548
17549`ifdef GATESIM
17550
17551
17552`else
17553 reg [7:0] ex_valid_m;
17554 reg [7:0] ex_valid_b;
17555 reg [7:0] ex_valid_w;
17556 reg [7:0] return_f4;
17557 reg [2:0] ex0_tid_m;
17558 reg [2:0] ex1_tid_m;
17559 reg [2:0] ex0_tid_b;
17560 reg [2:0] ex1_tid_b;
17561 reg [2:0] ex0_tid_w;
17562 reg [2:0] ex1_tid_w;
17563 reg fgu_valid_fb0;
17564 reg fgu_valid_fb1;
17565
17566 reg [31:0] inst0_e;
17567 reg [31:0] inst1_e;
17568
17569 reg [7:0] fg_valid;
17570
17571 reg fcc_valid_f4;
17572 reg fcc_valid_f5;
17573 reg fcc_valid_fb;
17574
17575 reg fgu0_e;
17576 reg fgu1_e;
17577 reg lsu0_e;
17578 reg lsu1_e;
17579
17580 reg [1:0] dcd_idest_e;
17581 reg [1:0] dcd_fdest_e;
17582
17583 wire [7:0] ex_valid;
17584 wire [7:0] exception_w;
17585
17586 wire [7:0] imul_valid;
17587
17588 wire fg_cond_fb;
17589
17590 wire exu_lsu_valid;
17591 wire [47:0] exu_lsu_addr;
17592 wire [31:0] exu_lsu_instr;
17593 wire [2:0] exu_lsu_tid;
17594 wire [4:0] exu_lsu_regid;
17595 wire [63:0] exu_lsu_data;
17596
17597 wire [2:0] ex0_tid_e;
17598 wire [2:0] ex1_tid_e;
17599 wire ex0_valid_e;
17600 wire ex1_valid_e;
17601 wire [7:0] ex_asr_access;
17602 wire ex_asr_valid;
17603
17604 wire [7:0] lsu_valid;
17605 wire [2:0] lsu_tid;
17606 wire [7:0] lsu_tid_dec_b;
17607 wire lsu_ld_valid;
17608 reg [7:0] lsu_data_w;
17609 wire [7:0] lsu_data_b;
17610
17611 wire ld_inst_d;
17612
17613 reg [7:0] div_idest;
17614 reg [7:0] div_fdest;
17615
17616 reg load0_e;
17617 reg load1_e;
17618
17619 reg load_m;
17620 reg load_b;
17621
17622 reg [2:0] lsu_tid_m;
17623 reg [7:0] lsu_complete_m;
17624 reg [7:0] lsu_complete_b;
17625 reg [7:0] lsu_trap_flush_d; //reqd. for store buffer ue testing
17626
17627 reg [7:0] ex_flush_w;
17628 reg [7:0] ex_flush_b;
17629
17630 reg sel_divide0_e;
17631 reg sel_divide1_e;
17632
17633 wire dec_flush_lb;
17634
17635 wire [7:0] fgu_idiv_valid;
17636
17637 wire [7:0] fgu_fdiv_valid;
17638
17639 wire [7:0] fg_div_valid;
17640
17641 wire lsu_valid_b;
17642
17643 wire [7:0] return_w;
17644 wire return0;
17645 wire return1;
17646 wire [7:0] real_exception;
17647
17648 reg [2:0] lsu_tid_b;
17649 reg fmov_valid_fb;
17650 reg fmov_valid_f5;
17651 reg fmov_valid_f4;
17652 reg fmov_valid_f3;
17653 reg fmov_valid_f2;
17654 reg fmov_valid_m;
17655 reg fmov_valid_e;
17656
17657 reg fg_flush_fb;
17658 reg fg_flush_f5;
17659 reg fg_flush_f4;
17660 reg fg_flush_f3;
17661 reg fg_flush_f2;
17662
17663 reg siam0_d;
17664 reg siam1_d;
17665
17666 reg done0_d;
17667 reg done1_d;
17668 reg retry0_d;
17669 reg retry1_d;
17670 reg done0_e;
17671 reg done1_e;
17672 reg retry0_e;
17673 reg retry1_e;
17674 reg tlu_ccr_cwp_0_valid_last;
17675 reg tlu_ccr_cwp_1_valid_last;
17676 reg [7:0] fg_fdiv_valid_fw;
17677 reg [7:0] asi_in_progress_b;
17678 reg [7:0] asi_in_progress_w;
17679 reg [7:0] asi_in_progress_fx4;
17680 reg [7:0] tlu_valid;
17681 reg [7:0] sync_reset_w;
17682
17683 reg [7:0] div_special_cancel_f4;
17684
17685 reg asi_store_b;
17686 reg asi_store_w;
17687 reg [2:0] dcc_tid_b;
17688 reg [2:0] dcc_tid_w;
17689 reg [7:0] asi_valid_w;
17690 reg [7:0] asi_valid_fx4;
17691 reg [7:0] asi_valid_fx5;
17692
17693 reg [7:0] lsu_state;
17694 reg [7:0] lsu_check;
17695 reg [2:0] lsu_tid_e;
17696
17697 reg [47:0] pc_0_e;
17698 reg [47:0] pc_1_e;
17699 reg [47:0] pc_0_m;
17700 reg [47:0] pc_1_m;
17701 reg [47:0] pc_0_b;
17702 reg [47:0] pc_1_b;
17703 reg [47:0] pc_0_w;
17704 reg [47:0] pc_1_w;
17705 reg [47:0] pc_2_w;
17706 reg [47:0] pc_3_w;
17707 reg [47:0] pc_4_w;
17708 reg [47:0] pc_5_w;
17709 reg [47:0] pc_6_w;
17710 reg [47:0] pc_7_w;
17711
17712 reg fgu_err_fx3;
17713 reg fgu_err_fx4;
17714 reg fgu_err_fx5;
17715 reg fgu_err_fb;
17716
17717 reg clkstop_d1;
17718 reg clkstop_d2;
17719 reg clkstop_d3;
17720 reg clkstop_d4;
17721 reg clkstop_d5;
17722
17723integer i;
17724integer start_dmiss0;
17725integer start_dmiss1;
17726integer start_dmiss2;
17727integer start_dmiss3;
17728integer start_dmiss4;
17729integer start_dmiss5;
17730integer start_dmiss6;
17731integer start_dmiss7;
17732integer number_dmiss;
17733integer start_imiss0;
17734integer start_imiss1;
17735integer start_imiss2;
17736integer start_imiss3;
17737integer start_imiss4;
17738integer start_imiss5;
17739integer start_imiss6;
17740integer start_imiss7;
17741integer active_imiss0;
17742integer active_imiss1;
17743integer active_imiss2;
17744integer active_imiss3;
17745integer active_imiss4;
17746integer active_imiss5;
17747integer active_imiss6;
17748integer active_imiss7;
17749integer first_imiss0;
17750integer first_imiss1;
17751integer first_imiss2;
17752integer first_imiss3;
17753integer first_imiss4;
17754integer first_imiss5;
17755integer first_imiss6;
17756integer first_imiss7;
17757integer number_imiss;
17758integer clock;
17759integer sum_dmiss_latency;
17760integer sum_imiss_latency;
17761reg spec_dmiss;
17762integer dmiss_cnt;
17763integer imiss_cnt;
17764reg pcx_req;
17765integer l15dmiss_cnt;
17766integer l15imiss_cnt;
17767
17768
17769initial begin // {
17770 pcx_req=0;
17771 l15imiss_cnt=0;
17772 l15dmiss_cnt=0;
17773 imiss_cnt=0;
17774 dmiss_cnt=0;
17775 clock=0;
17776 start_dmiss0=0;
17777 start_dmiss1=0;
17778 start_dmiss2=0;
17779 start_dmiss3=0;
17780 start_dmiss4=0;
17781 start_dmiss5=0;
17782 start_dmiss6=0;
17783 start_dmiss7=0;
17784 number_dmiss=0;
17785 start_imiss0=0;
17786 start_imiss1=0;
17787 start_imiss2=0;
17788 start_imiss3=0;
17789 start_imiss4=0;
17790 start_imiss5=0;
17791 start_imiss6=0;
17792 start_imiss7=0;
17793 active_imiss0=0;
17794 active_imiss1=0;
17795 active_imiss2=0;
17796 active_imiss3=0;
17797 active_imiss4=0;
17798 active_imiss5=0;
17799 active_imiss6=0;
17800 active_imiss7=0;
17801 first_imiss0=0;
17802 first_imiss1=0;
17803 first_imiss2=0;
17804 first_imiss3=0;
17805 first_imiss4=0;
17806 first_imiss5=0;
17807 first_imiss6=0;
17808 first_imiss7=0;
17809 number_imiss=0;
17810 sum_dmiss_latency=0;
17811 sum_imiss_latency=0;
17812 asi_in_progress_b <= 8'h0;
17813 asi_in_progress_w <= 8'h0;
17814 asi_in_progress_fx4 <= 8'h0;
17815 tlu_valid <= 8'h0;
17816 div_idest <= 8'h0;
17817 div_fdest <= 8'h0;
17818 lsu_state <= 8'h0;
17819 clkstop_d1 <=0;
17820 clkstop_d2 <=0;
17821 clkstop_d3 <=0;
17822 clkstop_d4 <=0;
17823 clkstop_d5 <=0;
17824
17825end //}
17826
17827wire [7:0] asi_store_flush_w = {`SPC7.lsu.sbs7.flush_st_w,
17828 `SPC7.lsu.sbs6.flush_st_w,
17829 `SPC7.lsu.sbs5.flush_st_w,
17830 `SPC7.lsu.sbs4.flush_st_w,
17831 `SPC7.lsu.sbs3.flush_st_w,
17832 `SPC7.lsu.sbs2.flush_st_w,
17833 `SPC7.lsu.sbs1.flush_st_w,
17834 `SPC7.lsu.sbs0.flush_st_w};
17835
17836wire [7:0] store_sync = {`SPC7.lsu.sbs7.trap_sync,
17837 `SPC7.lsu.sbs6.trap_sync,
17838 `SPC7.lsu.sbs5.trap_sync,
17839 `SPC7.lsu.sbs4.trap_sync,
17840 `SPC7.lsu.sbs3.trap_sync,
17841 `SPC7.lsu.sbs2.trap_sync,
17842 `SPC7.lsu.sbs1.trap_sync,
17843 `SPC7.lsu.sbs0.trap_sync};
17844wire [7:0] sync_reset = {`SPC7.lsu.sbs7.sync_state_rst,
17845 `SPC7.lsu.sbs6.sync_state_rst,
17846 `SPC7.lsu.sbs5.sync_state_rst,
17847 `SPC7.lsu.sbs4.sync_state_rst,
17848 `SPC7.lsu.sbs3.sync_state_rst,
17849 `SPC7.lsu.sbs2.sync_state_rst,
17850 `SPC7.lsu.sbs1.sync_state_rst,
17851 `SPC7.lsu.sbs0.sync_state_rst};
17852
17853//--------------------
17854// Used in nas_pipe for TSB Config Regs Capture/Compare
17855// ADD_TSB_CFG
17856
17857// NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
17858`ifndef EMUL
17859wire [63:0] ctxt_z_tsb_cfg0_reg [7:0]; // 1 per thread
17860wire [63:0] ctxt_z_tsb_cfg1_reg [7:0];
17861wire [63:0] ctxt_z_tsb_cfg2_reg [7:0];
17862wire [63:0] ctxt_z_tsb_cfg3_reg [7:0];
17863wire [63:0] ctxt_nz_tsb_cfg0_reg [7:0];
17864wire [63:0] ctxt_nz_tsb_cfg1_reg [7:0];
17865wire [63:0] ctxt_nz_tsb_cfg2_reg [7:0];
17866wire [63:0] ctxt_nz_tsb_cfg3_reg [7:0];
17867
17868// There are 32 entries in each MMU MRA but not all are needed.
17869// Indexing:
17870// Bits 4:3 of the address are the lower two bits of the TID
17871// Bits 2:0 of the address select the register as below
17872// mmu.mra0.array.mem for T0-T3
17873// mmu.mra1.array.mem for T4-T7
17874// (this is documented in mmu_asi_ctl.sv)
17875// z TSB cfg 0,1 address 0
17876// z TSB cfg 2,3 address 1
17877// nz TSB cfg 0,1 address 2
17878// nz TSB cfg 2,3 address 3
17879// Real range, physical offset pair 0 address 4
17880// Real range, physical offset pair 1 address 5
17881// Real range, physical offset pair 2 address 6
17882// Real range, physical offset pair 3 address 7
17883
17884wire [83:0] mmu_mra0_a0 = `SPC7.mmu.mra0.array.mem[0];
17885wire [83:0] mmu_mra0_a8 = `SPC7.mmu.mra0.array.mem[8];
17886wire [83:0] mmu_mra0_a16 = `SPC7.mmu.mra0.array.mem[16];
17887wire [83:0] mmu_mra0_a24 = `SPC7.mmu.mra0.array.mem[24];
17888wire [83:0] mmu_mra0_a1 = `SPC7.mmu.mra0.array.mem[1];
17889wire [83:0] mmu_mra0_a9 = `SPC7.mmu.mra0.array.mem[9];
17890wire [83:0] mmu_mra0_a17 = `SPC7.mmu.mra0.array.mem[17];
17891wire [83:0] mmu_mra0_a25 = `SPC7.mmu.mra0.array.mem[25];
17892wire [83:0] mmu_mra0_a2 = `SPC7.mmu.mra0.array.mem[2];
17893wire [83:0] mmu_mra0_a10 = `SPC7.mmu.mra0.array.mem[10];
17894wire [83:0] mmu_mra0_a18 = `SPC7.mmu.mra0.array.mem[18];
17895wire [83:0] mmu_mra0_a26 = `SPC7.mmu.mra0.array.mem[26];
17896wire [83:0] mmu_mra0_a3 = `SPC7.mmu.mra0.array.mem[3];
17897wire [83:0] mmu_mra0_a11 = `SPC7.mmu.mra0.array.mem[11];
17898wire [83:0] mmu_mra0_a19 = `SPC7.mmu.mra0.array.mem[19];
17899wire [83:0] mmu_mra0_a27 = `SPC7.mmu.mra0.array.mem[27];
17900wire [83:0] mmu_mra1_a0 = `SPC7.mmu.mra1.array.mem[0];
17901wire [83:0] mmu_mra1_a8 = `SPC7.mmu.mra1.array.mem[8];
17902wire [83:0] mmu_mra1_a16 = `SPC7.mmu.mra1.array.mem[16];
17903wire [83:0] mmu_mra1_a24 = `SPC7.mmu.mra1.array.mem[24];
17904wire [83:0] mmu_mra1_a1 = `SPC7.mmu.mra1.array.mem[1];
17905wire [83:0] mmu_mra1_a9 = `SPC7.mmu.mra1.array.mem[9];
17906wire [83:0] mmu_mra1_a17 = `SPC7.mmu.mra1.array.mem[17];
17907wire [83:0] mmu_mra1_a25 = `SPC7.mmu.mra1.array.mem[25];
17908wire [83:0] mmu_mra1_a2 = `SPC7.mmu.mra1.array.mem[2];
17909wire [83:0] mmu_mra1_a10 = `SPC7.mmu.mra1.array.mem[10];
17910wire [83:0] mmu_mra1_a18 = `SPC7.mmu.mra1.array.mem[18];
17911wire [83:0] mmu_mra1_a26 = `SPC7.mmu.mra1.array.mem[26];
17912wire [83:0] mmu_mra1_a3 = `SPC7.mmu.mra1.array.mem[3];
17913wire [83:0] mmu_mra1_a11 = `SPC7.mmu.mra1.array.mem[11];
17914wire [83:0] mmu_mra1_a19 = `SPC7.mmu.mra1.array.mem[19];
17915wire [83:0] mmu_mra1_a27 = `SPC7.mmu.mra1.array.mem[27];
17916
17917
17918// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
17919// as well as the physical to architectural bit position relationships.
17920assign ctxt_z_tsb_cfg0_reg[0] = {`SPC7.mmu.asi.t0_e_z[0], // z_tsb_cfg0[63]
17921 mmu_mra0_a0[76:75], // z_tsb_cfg0[62:61]
17922 21'b0, // z_tsb_cfg0[60:40]
17923 mmu_mra0_a0[74:48], // z_tsb_cfg0[39:13]
17924 4'b0, // z_tsb_cfg0[12:9]
17925 mmu_mra0_a0[47:39] // z_tsb_cfg0[8:0]
17926 };
17927assign ctxt_z_tsb_cfg1_reg[0] = {`SPC7.mmu.asi.t0_e_z[1], // z_tsb_cfg0[63]
17928 mmu_mra0_a0[37:36], // z_tsb_cfg0[62:61]
17929 21'b0, // z_tsb_cfg0[60:40]
17930 mmu_mra0_a0[35:9], // z_tsb_cfg0[39:13]
17931 4'b0, // z_tsb_cfg0[12:9]
17932 mmu_mra0_a0[8:0] // z_tsb_cfg0[8:0]
17933 };
17934assign ctxt_z_tsb_cfg2_reg[0] = {`SPC7.mmu.asi.t0_e_z[2], // z_tsb_cfg0[63]
17935 mmu_mra0_a1[76:75], // z_tsb_cfg0[62:61]
17936 21'b0, // z_tsb_cfg0[60:40]
17937 mmu_mra0_a1[74:48], // z_tsb_cfg0[39:13]
17938 4'b0, // z_tsb_cfg0[12:9]
17939 mmu_mra0_a1[47:39] // z_tsb_cfg0[8:0]
17940 };
17941assign ctxt_z_tsb_cfg3_reg[0] = {`SPC7.mmu.asi.t0_e_z[3], // z_tsb_cfg0[63]
17942 mmu_mra0_a1[37:36], // z_tsb_cfg0[62:61]
17943 21'b0, // z_tsb_cfg0[60:40]
17944 mmu_mra0_a1[35:9], // z_tsb_cfg0[39:13]
17945 4'b0, // z_tsb_cfg0[12:9]
17946 mmu_mra0_a1[8:0] // z_tsb_cfg0[8:0]
17947 };
17948assign ctxt_nz_tsb_cfg0_reg[0] = {`SPC7.mmu.asi.t0_e_nz[0],// z_tsb_cfg0[63]
17949 mmu_mra0_a2[76:75], // z_tsb_cfg0[62:61]
17950 21'b0, // z_tsb_cfg0[60:40]
17951 mmu_mra0_a2[74:48], // z_tsb_cfg0[39:13]
17952 4'b0, // z_tsb_cfg0[12:9]
17953 mmu_mra0_a2[47:39] // z_tsb_cfg0[8:0]
17954 };
17955assign ctxt_nz_tsb_cfg1_reg[0] = {`SPC7.mmu.asi.t0_e_nz[1],// z_tsb_cfg0[63]
17956 mmu_mra0_a2[37:36], // z_tsb_cfg0[62:61]
17957 21'b0, // z_tsb_cfg0[60:40]
17958 mmu_mra0_a2[35:9], // z_tsb_cfg0[39:13]
17959 4'b0, // z_tsb_cfg0[12:9]
17960 mmu_mra0_a2[8:0] // z_tsb_cfg0[8:0]
17961 };
17962assign ctxt_nz_tsb_cfg2_reg[0] = {`SPC7.mmu.asi.t0_e_nz[2],// z_tsb_cfg0[63]
17963 mmu_mra0_a3[76:75], // z_tsb_cfg0[62:61]
17964 21'b0, // z_tsb_cfg0[60:40]
17965 mmu_mra0_a3[74:48], // z_tsb_cfg0[39:13]
17966 4'b0, // z_tsb_cfg0[12:9]
17967 mmu_mra0_a3[47:39] // z_tsb_cfg0[8:0]
17968 };
17969assign ctxt_nz_tsb_cfg3_reg[0] = {`SPC7.mmu.asi.t0_e_nz[3],// z_tsb_cfg0[63]
17970 mmu_mra0_a3[37:36], // z_tsb_cfg0[62:61]
17971 21'b0, // z_tsb_cfg0[60:40]
17972 mmu_mra0_a3[35:9], // z_tsb_cfg0[39:13]
17973 4'b0, // z_tsb_cfg0[12:9]
17974 mmu_mra0_a3[8:0] // z_tsb_cfg0[8:0]
17975 };
17976
17977// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
17978// as well as the physical to architectural bit position relationships.
17979assign ctxt_z_tsb_cfg0_reg[1] = {`SPC7.mmu.asi.t1_e_z[0], // z_tsb_cfg0[63]
17980 mmu_mra0_a8[76:75], // z_tsb_cfg0[62:61]
17981 21'b0, // z_tsb_cfg0[60:40]
17982 mmu_mra0_a8[74:48], // z_tsb_cfg0[39:13]
17983 4'b0, // z_tsb_cfg0[12:9]
17984 mmu_mra0_a8[47:39] // z_tsb_cfg0[8:0]
17985 };
17986assign ctxt_z_tsb_cfg1_reg[1] = {`SPC7.mmu.asi.t1_e_z[1], // z_tsb_cfg0[63]
17987 mmu_mra0_a8[37:36], // z_tsb_cfg0[62:61]
17988 21'b0, // z_tsb_cfg0[60:40]
17989 mmu_mra0_a8[35:9], // z_tsb_cfg0[39:13]
17990 4'b0, // z_tsb_cfg0[12:9]
17991 mmu_mra0_a8[8:0] // z_tsb_cfg0[8:0]
17992 };
17993assign ctxt_z_tsb_cfg2_reg[1] = {`SPC7.mmu.asi.t1_e_z[2], // z_tsb_cfg0[63]
17994 mmu_mra0_a9[76:75], // z_tsb_cfg0[62:61]
17995 21'b0, // z_tsb_cfg0[60:40]
17996 mmu_mra0_a9[74:48], // z_tsb_cfg0[39:13]
17997 4'b0, // z_tsb_cfg0[12:9]
17998 mmu_mra0_a9[47:39] // z_tsb_cfg0[8:0]
17999 };
18000assign ctxt_z_tsb_cfg3_reg[1] = {`SPC7.mmu.asi.t1_e_z[3], // z_tsb_cfg0[63]
18001 mmu_mra0_a9[37:36], // z_tsb_cfg0[62:61]
18002 21'b0, // z_tsb_cfg0[60:40]
18003 mmu_mra0_a9[35:9], // z_tsb_cfg0[39:13]
18004 4'b0, // z_tsb_cfg0[12:9]
18005 mmu_mra0_a9[8:0] // z_tsb_cfg0[8:0]
18006 };
18007assign ctxt_nz_tsb_cfg0_reg[1] = {`SPC7.mmu.asi.t1_e_nz[0],// z_tsb_cfg0[63]
18008 mmu_mra0_a10[76:75], // z_tsb_cfg0[62:61]
18009 21'b0, // z_tsb_cfg0[60:40]
18010 mmu_mra0_a10[74:48], // z_tsb_cfg0[39:13]
18011 4'b0, // z_tsb_cfg0[12:9]
18012 mmu_mra0_a10[47:39] // z_tsb_cfg0[8:0]
18013 };
18014assign ctxt_nz_tsb_cfg1_reg[1] = {`SPC7.mmu.asi.t1_e_nz[1],// z_tsb_cfg0[63]
18015 mmu_mra0_a10[37:36], // z_tsb_cfg0[62:61]
18016 21'b0, // z_tsb_cfg0[60:40]
18017 mmu_mra0_a10[35:9], // z_tsb_cfg0[39:13]
18018 4'b0, // z_tsb_cfg0[12:9]
18019 mmu_mra0_a10[8:0] // z_tsb_cfg0[8:0]
18020 };
18021assign ctxt_nz_tsb_cfg2_reg[1] = {`SPC7.mmu.asi.t1_e_nz[2],// z_tsb_cfg0[63]
18022 mmu_mra0_a11[76:75], // z_tsb_cfg0[62:61]
18023 21'b0, // z_tsb_cfg0[60:40]
18024 mmu_mra0_a11[74:48], // z_tsb_cfg0[39:13]
18025 4'b0, // z_tsb_cfg0[12:9]
18026 mmu_mra0_a11[47:39] // z_tsb_cfg0[8:0]
18027 };
18028assign ctxt_nz_tsb_cfg3_reg[1] = {`SPC7.mmu.asi.t1_e_nz[3],// z_tsb_cfg0[63]
18029 mmu_mra0_a11[37:36], // z_tsb_cfg0[62:61]
18030 21'b0, // z_tsb_cfg0[60:40]
18031 mmu_mra0_a11[35:9], // z_tsb_cfg0[39:13]
18032 4'b0, // z_tsb_cfg0[12:9]
18033 mmu_mra0_a11[8:0] // z_tsb_cfg0[8:0]
18034 };
18035
18036// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
18037// as well as the physical to architectural bit position relationships.
18038assign ctxt_z_tsb_cfg0_reg[2] = {`SPC7.mmu.asi.t2_e_z[0], // z_tsb_cfg0[63]
18039 mmu_mra0_a16[76:75], // z_tsb_cfg0[62:61]
18040 21'b0, // z_tsb_cfg0[60:40]
18041 mmu_mra0_a16[74:48], // z_tsb_cfg0[39:13]
18042 4'b0, // z_tsb_cfg0[12:9]
18043 mmu_mra0_a16[47:39] // z_tsb_cfg0[8:0]
18044 };
18045assign ctxt_z_tsb_cfg1_reg[2] = {`SPC7.mmu.asi.t2_e_z[1], // z_tsb_cfg0[63]
18046 mmu_mra0_a16[37:36], // z_tsb_cfg0[62:61]
18047 21'b0, // z_tsb_cfg0[60:40]
18048 mmu_mra0_a16[35:9], // z_tsb_cfg0[39:13]
18049 4'b0, // z_tsb_cfg0[12:9]
18050 mmu_mra0_a16[8:0] // z_tsb_cfg0[8:0]
18051 };
18052assign ctxt_z_tsb_cfg2_reg[2] = {`SPC7.mmu.asi.t2_e_z[2], // z_tsb_cfg0[63]
18053 mmu_mra0_a17[76:75], // z_tsb_cfg0[62:61]
18054 21'b0, // z_tsb_cfg0[60:40]
18055 mmu_mra0_a17[74:48], // z_tsb_cfg0[39:13]
18056 4'b0, // z_tsb_cfg0[12:9]
18057 mmu_mra0_a17[47:39] // z_tsb_cfg0[8:0]
18058 };
18059assign ctxt_z_tsb_cfg3_reg[2] = {`SPC7.mmu.asi.t2_e_z[3], // z_tsb_cfg0[63]
18060 mmu_mra0_a17[37:36], // z_tsb_cfg0[62:61]
18061 21'b0, // z_tsb_cfg0[60:40]
18062 mmu_mra0_a17[35:9], // z_tsb_cfg0[39:13]
18063 4'b0, // z_tsb_cfg0[12:9]
18064 mmu_mra0_a17[8:0] // z_tsb_cfg0[8:0]
18065 };
18066assign ctxt_nz_tsb_cfg0_reg[2] = {`SPC7.mmu.asi.t2_e_nz[0],// z_tsb_cfg0[63]
18067 mmu_mra0_a18[76:75], // z_tsb_cfg0[62:61]
18068 21'b0, // z_tsb_cfg0[60:40]
18069 mmu_mra0_a18[74:48], // z_tsb_cfg0[39:13]
18070 4'b0, // z_tsb_cfg0[12:9]
18071 mmu_mra0_a18[47:39] // z_tsb_cfg0[8:0]
18072 };
18073assign ctxt_nz_tsb_cfg1_reg[2] = {`SPC7.mmu.asi.t2_e_nz[1],// z_tsb_cfg0[63]
18074 mmu_mra0_a18[37:36], // z_tsb_cfg0[62:61]
18075 21'b0, // z_tsb_cfg0[60:40]
18076 mmu_mra0_a18[35:9], // z_tsb_cfg0[39:13]
18077 4'b0, // z_tsb_cfg0[12:9]
18078 mmu_mra0_a18[8:0] // z_tsb_cfg0[8:0]
18079 };
18080assign ctxt_nz_tsb_cfg2_reg[2] = {`SPC7.mmu.asi.t2_e_nz[2],// z_tsb_cfg0[63]
18081 mmu_mra0_a19[76:75], // z_tsb_cfg0[62:61]
18082 21'b0, // z_tsb_cfg0[60:40]
18083 mmu_mra0_a19[74:48], // z_tsb_cfg0[39:13]
18084 4'b0, // z_tsb_cfg0[12:9]
18085 mmu_mra0_a19[47:39] // z_tsb_cfg0[8:0]
18086 };
18087assign ctxt_nz_tsb_cfg3_reg[2] = {`SPC7.mmu.asi.t2_e_nz[3],// z_tsb_cfg0[63]
18088 mmu_mra0_a19[37:36], // z_tsb_cfg0[62:61]
18089 21'b0, // z_tsb_cfg0[60:40]
18090 mmu_mra0_a19[35:9], // z_tsb_cfg0[39:13]
18091 4'b0, // z_tsb_cfg0[12:9]
18092 mmu_mra0_a19[8:0] // z_tsb_cfg0[8:0]
18093 };
18094
18095// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
18096// as well as the physical to architectural bit position relationships.
18097assign ctxt_z_tsb_cfg0_reg[3] = {`SPC7.mmu.asi.t3_e_z[0], // z_tsb_cfg0[63]
18098 mmu_mra0_a24[76:75], // z_tsb_cfg0[62:61]
18099 21'b0, // z_tsb_cfg0[60:40]
18100 mmu_mra0_a24[74:48], // z_tsb_cfg0[39:13]
18101 4'b0, // z_tsb_cfg0[12:9]
18102 mmu_mra0_a24[47:39] // z_tsb_cfg0[8:0]
18103 };
18104assign ctxt_z_tsb_cfg1_reg[3] = {`SPC7.mmu.asi.t3_e_z[1], // z_tsb_cfg0[63]
18105 mmu_mra0_a24[37:36], // z_tsb_cfg0[62:61]
18106 21'b0, // z_tsb_cfg0[60:40]
18107 mmu_mra0_a24[35:9], // z_tsb_cfg0[39:13]
18108 4'b0, // z_tsb_cfg0[12:9]
18109 mmu_mra0_a24[8:0] // z_tsb_cfg0[8:0]
18110 };
18111assign ctxt_z_tsb_cfg2_reg[3] = {`SPC7.mmu.asi.t3_e_z[2], // z_tsb_cfg0[63]
18112 mmu_mra0_a25[76:75], // z_tsb_cfg0[62:61]
18113 21'b0, // z_tsb_cfg0[60:40]
18114 mmu_mra0_a25[74:48], // z_tsb_cfg0[39:13]
18115 4'b0, // z_tsb_cfg0[12:9]
18116 mmu_mra0_a25[47:39] // z_tsb_cfg0[8:0]
18117 };
18118assign ctxt_z_tsb_cfg3_reg[3] = {`SPC7.mmu.asi.t3_e_z[3], // z_tsb_cfg0[63]
18119 mmu_mra0_a25[37:36], // z_tsb_cfg0[62:61]
18120 21'b0, // z_tsb_cfg0[60:40]
18121 mmu_mra0_a25[35:9], // z_tsb_cfg0[39:13]
18122 4'b0, // z_tsb_cfg0[12:9]
18123 mmu_mra0_a25[8:0] // z_tsb_cfg0[8:0]
18124 };
18125assign ctxt_nz_tsb_cfg0_reg[3] = {`SPC7.mmu.asi.t3_e_nz[0],// z_tsb_cfg0[63]
18126 mmu_mra0_a26[76:75], // z_tsb_cfg0[62:61]
18127 21'b0, // z_tsb_cfg0[60:40]
18128 mmu_mra0_a26[74:48], // z_tsb_cfg0[39:13]
18129 4'b0, // z_tsb_cfg0[12:9]
18130 mmu_mra0_a26[47:39] // z_tsb_cfg0[8:0]
18131 };
18132assign ctxt_nz_tsb_cfg1_reg[3] = {`SPC7.mmu.asi.t3_e_nz[1],// z_tsb_cfg0[63]
18133 mmu_mra0_a26[37:36], // z_tsb_cfg0[62:61]
18134 21'b0, // z_tsb_cfg0[60:40]
18135 mmu_mra0_a26[35:9], // z_tsb_cfg0[39:13]
18136 4'b0, // z_tsb_cfg0[12:9]
18137 mmu_mra0_a26[8:0] // z_tsb_cfg0[8:0]
18138 };
18139assign ctxt_nz_tsb_cfg2_reg[3] = {`SPC7.mmu.asi.t3_e_nz[2],// z_tsb_cfg0[63]
18140 mmu_mra0_a27[76:75], // z_tsb_cfg0[62:61]
18141 21'b0, // z_tsb_cfg0[60:40]
18142 mmu_mra0_a27[74:48], // z_tsb_cfg0[39:13]
18143 4'b0, // z_tsb_cfg0[12:9]
18144 mmu_mra0_a27[47:39] // z_tsb_cfg0[8:0]
18145 };
18146assign ctxt_nz_tsb_cfg3_reg[3] = {`SPC7.mmu.asi.t3_e_nz[3],// z_tsb_cfg0[63]
18147 mmu_mra0_a27[37:36], // z_tsb_cfg0[62:61]
18148 21'b0, // z_tsb_cfg0[60:40]
18149 mmu_mra0_a27[35:9], // z_tsb_cfg0[39:13]
18150 4'b0, // z_tsb_cfg0[12:9]
18151 mmu_mra0_a27[8:0] // z_tsb_cfg0[8:0]
18152 };
18153
18154// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
18155// as well as the physical to architectural bit position relationships.
18156assign ctxt_z_tsb_cfg0_reg[4] = {`SPC7.mmu.asi.t4_e_z[0], // z_tsb_cfg0[63]
18157 mmu_mra1_a0[76:75], // z_tsb_cfg0[62:61]
18158 21'b0, // z_tsb_cfg0[60:40]
18159 mmu_mra1_a0[74:48], // z_tsb_cfg0[39:13]
18160 4'b0, // z_tsb_cfg0[12:9]
18161 mmu_mra1_a0[47:39] // z_tsb_cfg0[8:0]
18162 };
18163assign ctxt_z_tsb_cfg1_reg[4] = {`SPC7.mmu.asi.t4_e_z[1], // z_tsb_cfg0[63]
18164 mmu_mra1_a0[37:36], // z_tsb_cfg0[62:61]
18165 21'b0, // z_tsb_cfg0[60:40]
18166 mmu_mra1_a0[35:9], // z_tsb_cfg0[39:13]
18167 4'b0, // z_tsb_cfg0[12:9]
18168 mmu_mra1_a0[8:0] // z_tsb_cfg0[8:0]
18169 };
18170assign ctxt_z_tsb_cfg2_reg[4] = {`SPC7.mmu.asi.t4_e_z[2], // z_tsb_cfg0[63]
18171 mmu_mra1_a1[76:75], // z_tsb_cfg0[62:61]
18172 21'b0, // z_tsb_cfg0[60:40]
18173 mmu_mra1_a1[74:48], // z_tsb_cfg0[39:13]
18174 4'b0, // z_tsb_cfg0[12:9]
18175 mmu_mra1_a1[47:39] // z_tsb_cfg0[8:0]
18176 };
18177assign ctxt_z_tsb_cfg3_reg[4] = {`SPC7.mmu.asi.t4_e_z[3], // z_tsb_cfg0[63]
18178 mmu_mra1_a1[37:36], // z_tsb_cfg0[62:61]
18179 21'b0, // z_tsb_cfg0[60:40]
18180 mmu_mra1_a1[35:9], // z_tsb_cfg0[39:13]
18181 4'b0, // z_tsb_cfg0[12:9]
18182 mmu_mra1_a1[8:0] // z_tsb_cfg0[8:0]
18183 };
18184assign ctxt_nz_tsb_cfg0_reg[4] = {`SPC7.mmu.asi.t4_e_nz[0],// z_tsb_cfg0[63]
18185 mmu_mra1_a2[76:75], // z_tsb_cfg0[62:61]
18186 21'b0, // z_tsb_cfg0[60:40]
18187 mmu_mra1_a2[74:48], // z_tsb_cfg0[39:13]
18188 4'b0, // z_tsb_cfg0[12:9]
18189 mmu_mra1_a2[47:39] // z_tsb_cfg0[8:0]
18190 };
18191assign ctxt_nz_tsb_cfg1_reg[4] = {`SPC7.mmu.asi.t4_e_nz[1],// z_tsb_cfg0[63]
18192 mmu_mra1_a2[37:36], // z_tsb_cfg0[62:61]
18193 21'b0, // z_tsb_cfg0[60:40]
18194 mmu_mra1_a2[35:9], // z_tsb_cfg0[39:13]
18195 4'b0, // z_tsb_cfg0[12:9]
18196 mmu_mra1_a2[8:0] // z_tsb_cfg0[8:0]
18197 };
18198assign ctxt_nz_tsb_cfg2_reg[4] = {`SPC7.mmu.asi.t4_e_nz[2],// z_tsb_cfg0[63]
18199 mmu_mra1_a3[76:75], // z_tsb_cfg0[62:61]
18200 21'b0, // z_tsb_cfg0[60:40]
18201 mmu_mra1_a3[74:48], // z_tsb_cfg0[39:13]
18202 4'b0, // z_tsb_cfg0[12:9]
18203 mmu_mra1_a3[47:39] // z_tsb_cfg0[8:0]
18204 };
18205assign ctxt_nz_tsb_cfg3_reg[4] = {`SPC7.mmu.asi.t4_e_nz[3],// z_tsb_cfg0[63]
18206 mmu_mra1_a3[37:36], // z_tsb_cfg0[62:61]
18207 21'b0, // z_tsb_cfg0[60:40]
18208 mmu_mra1_a3[35:9], // z_tsb_cfg0[39:13]
18209 4'b0, // z_tsb_cfg0[12:9]
18210 mmu_mra1_a3[8:0] // z_tsb_cfg0[8:0]
18211 };
18212
18213// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
18214// as well as the physical to architectural bit position relationships.
18215assign ctxt_z_tsb_cfg0_reg[5] = {`SPC7.mmu.asi.t5_e_z[0], // z_tsb_cfg0[63]
18216 mmu_mra1_a8[76:75], // z_tsb_cfg0[62:61]
18217 21'b0, // z_tsb_cfg0[60:40]
18218 mmu_mra1_a8[74:48], // z_tsb_cfg0[39:13]
18219 4'b0, // z_tsb_cfg0[12:9]
18220 mmu_mra1_a8[47:39] // z_tsb_cfg0[8:0]
18221 };
18222assign ctxt_z_tsb_cfg1_reg[5] = {`SPC7.mmu.asi.t5_e_z[1], // z_tsb_cfg0[63]
18223 mmu_mra1_a8[37:36], // z_tsb_cfg0[62:61]
18224 21'b0, // z_tsb_cfg0[60:40]
18225 mmu_mra1_a8[35:9], // z_tsb_cfg0[39:13]
18226 4'b0, // z_tsb_cfg0[12:9]
18227 mmu_mra1_a8[8:0] // z_tsb_cfg0[8:0]
18228 };
18229assign ctxt_z_tsb_cfg2_reg[5] = {`SPC7.mmu.asi.t5_e_z[2], // z_tsb_cfg0[63]
18230 mmu_mra1_a9[76:75], // z_tsb_cfg0[62:61]
18231 21'b0, // z_tsb_cfg0[60:40]
18232 mmu_mra1_a9[74:48], // z_tsb_cfg0[39:13]
18233 4'b0, // z_tsb_cfg0[12:9]
18234 mmu_mra1_a9[47:39] // z_tsb_cfg0[8:0]
18235 };
18236assign ctxt_z_tsb_cfg3_reg[5] = {`SPC7.mmu.asi.t5_e_z[3], // z_tsb_cfg0[63]
18237 mmu_mra1_a9[37:36], // z_tsb_cfg0[62:61]
18238 21'b0, // z_tsb_cfg0[60:40]
18239 mmu_mra1_a9[35:9], // z_tsb_cfg0[39:13]
18240 4'b0, // z_tsb_cfg0[12:9]
18241 mmu_mra1_a9[8:0] // z_tsb_cfg0[8:0]
18242 };
18243assign ctxt_nz_tsb_cfg0_reg[5] = {`SPC7.mmu.asi.t5_e_nz[0],// z_tsb_cfg0[63]
18244 mmu_mra1_a10[76:75], // z_tsb_cfg0[62:61]
18245 21'b0, // z_tsb_cfg0[60:40]
18246 mmu_mra1_a10[74:48], // z_tsb_cfg0[39:13]
18247 4'b0, // z_tsb_cfg0[12:9]
18248 mmu_mra1_a10[47:39] // z_tsb_cfg0[8:0]
18249 };
18250assign ctxt_nz_tsb_cfg1_reg[5] = {`SPC7.mmu.asi.t5_e_nz[1],// z_tsb_cfg0[63]
18251 mmu_mra1_a10[37:36], // z_tsb_cfg0[62:61]
18252 21'b0, // z_tsb_cfg0[60:40]
18253 mmu_mra1_a10[35:9], // z_tsb_cfg0[39:13]
18254 4'b0, // z_tsb_cfg0[12:9]
18255 mmu_mra1_a10[8:0] // z_tsb_cfg0[8:0]
18256 };
18257assign ctxt_nz_tsb_cfg2_reg[5] = {`SPC7.mmu.asi.t5_e_nz[2],// z_tsb_cfg0[63]
18258 mmu_mra1_a11[76:75], // z_tsb_cfg0[62:61]
18259 21'b0, // z_tsb_cfg0[60:40]
18260 mmu_mra1_a11[74:48], // z_tsb_cfg0[39:13]
18261 4'b0, // z_tsb_cfg0[12:9]
18262 mmu_mra1_a11[47:39] // z_tsb_cfg0[8:0]
18263 };
18264assign ctxt_nz_tsb_cfg3_reg[5] = {`SPC7.mmu.asi.t5_e_nz[3],// z_tsb_cfg0[63]
18265 mmu_mra1_a11[37:36], // z_tsb_cfg0[62:61]
18266 21'b0, // z_tsb_cfg0[60:40]
18267 mmu_mra1_a11[35:9], // z_tsb_cfg0[39:13]
18268 4'b0, // z_tsb_cfg0[12:9]
18269 mmu_mra1_a11[8:0] // z_tsb_cfg0[8:0]
18270 };
18271
18272// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
18273// as well as the physical to architectural bit position relationships.
18274assign ctxt_z_tsb_cfg0_reg[6] = {`SPC7.mmu.asi.t6_e_z[0], // z_tsb_cfg0[63]
18275 mmu_mra1_a16[76:75], // z_tsb_cfg0[62:61]
18276 21'b0, // z_tsb_cfg0[60:40]
18277 mmu_mra1_a16[74:48], // z_tsb_cfg0[39:13]
18278 4'b0, // z_tsb_cfg0[12:9]
18279 mmu_mra1_a16[47:39] // z_tsb_cfg0[8:0]
18280 };
18281assign ctxt_z_tsb_cfg1_reg[6] = {`SPC7.mmu.asi.t6_e_z[1], // z_tsb_cfg0[63]
18282 mmu_mra1_a16[37:36], // z_tsb_cfg0[62:61]
18283 21'b0, // z_tsb_cfg0[60:40]
18284 mmu_mra1_a16[35:9], // z_tsb_cfg0[39:13]
18285 4'b0, // z_tsb_cfg0[12:9]
18286 mmu_mra1_a16[8:0] // z_tsb_cfg0[8:0]
18287 };
18288assign ctxt_z_tsb_cfg2_reg[6] = {`SPC7.mmu.asi.t6_e_z[2], // z_tsb_cfg0[63]
18289 mmu_mra1_a17[76:75], // z_tsb_cfg0[62:61]
18290 21'b0, // z_tsb_cfg0[60:40]
18291 mmu_mra1_a17[74:48], // z_tsb_cfg0[39:13]
18292 4'b0, // z_tsb_cfg0[12:9]
18293 mmu_mra1_a17[47:39] // z_tsb_cfg0[8:0]
18294 };
18295assign ctxt_z_tsb_cfg3_reg[6] = {`SPC7.mmu.asi.t6_e_z[3], // z_tsb_cfg0[63]
18296 mmu_mra1_a17[37:36], // z_tsb_cfg0[62:61]
18297 21'b0, // z_tsb_cfg0[60:40]
18298 mmu_mra1_a17[35:9], // z_tsb_cfg0[39:13]
18299 4'b0, // z_tsb_cfg0[12:9]
18300 mmu_mra1_a17[8:0] // z_tsb_cfg0[8:0]
18301 };
18302assign ctxt_nz_tsb_cfg0_reg[6] = {`SPC7.mmu.asi.t6_e_nz[0],// z_tsb_cfg0[63]
18303 mmu_mra1_a18[76:75], // z_tsb_cfg0[62:61]
18304 21'b0, // z_tsb_cfg0[60:40]
18305 mmu_mra1_a18[74:48], // z_tsb_cfg0[39:13]
18306 4'b0, // z_tsb_cfg0[12:9]
18307 mmu_mra1_a18[47:39] // z_tsb_cfg0[8:0]
18308 };
18309assign ctxt_nz_tsb_cfg1_reg[6] = {`SPC7.mmu.asi.t6_e_nz[1],// z_tsb_cfg0[63]
18310 mmu_mra1_a18[37:36], // z_tsb_cfg0[62:61]
18311 21'b0, // z_tsb_cfg0[60:40]
18312 mmu_mra1_a18[35:9], // z_tsb_cfg0[39:13]
18313 4'b0, // z_tsb_cfg0[12:9]
18314 mmu_mra1_a18[8:0] // z_tsb_cfg0[8:0]
18315 };
18316assign ctxt_nz_tsb_cfg2_reg[6] = {`SPC7.mmu.asi.t6_e_nz[2],// z_tsb_cfg0[63]
18317 mmu_mra1_a19[76:75], // z_tsb_cfg0[62:61]
18318 21'b0, // z_tsb_cfg0[60:40]
18319 mmu_mra1_a19[74:48], // z_tsb_cfg0[39:13]
18320 4'b0, // z_tsb_cfg0[12:9]
18321 mmu_mra1_a19[47:39] // z_tsb_cfg0[8:0]
18322 };
18323assign ctxt_nz_tsb_cfg3_reg[6] = {`SPC7.mmu.asi.t6_e_nz[3],// z_tsb_cfg0[63]
18324 mmu_mra1_a19[37:36], // z_tsb_cfg0[62:61]
18325 21'b0, // z_tsb_cfg0[60:40]
18326 mmu_mra1_a19[35:9], // z_tsb_cfg0[39:13]
18327 4'b0, // z_tsb_cfg0[12:9]
18328 mmu_mra1_a19[8:0] // z_tsb_cfg0[8:0]
18329 };
18330
18331// See Table 28-31 in PRM 0.8 (section 28.13) documents the indexing within a thread
18332// as well as the physical to architectural bit position relationships.
18333assign ctxt_z_tsb_cfg0_reg[7] = {`SPC7.mmu.asi.t7_e_z[0], // z_tsb_cfg0[63]
18334 mmu_mra1_a24[76:75], // z_tsb_cfg0[62:61]
18335 21'b0, // z_tsb_cfg0[60:40]
18336 mmu_mra1_a24[74:48], // z_tsb_cfg0[39:13]
18337 4'b0, // z_tsb_cfg0[12:9]
18338 mmu_mra1_a24[47:39] // z_tsb_cfg0[8:0]
18339 };
18340assign ctxt_z_tsb_cfg1_reg[7] = {`SPC7.mmu.asi.t7_e_z[1], // z_tsb_cfg0[63]
18341 mmu_mra1_a24[37:36], // z_tsb_cfg0[62:61]
18342 21'b0, // z_tsb_cfg0[60:40]
18343 mmu_mra1_a24[35:9], // z_tsb_cfg0[39:13]
18344 4'b0, // z_tsb_cfg0[12:9]
18345 mmu_mra1_a24[8:0] // z_tsb_cfg0[8:0]
18346 };
18347assign ctxt_z_tsb_cfg2_reg[7] = {`SPC7.mmu.asi.t7_e_z[2], // z_tsb_cfg0[63]
18348 mmu_mra1_a25[76:75], // z_tsb_cfg0[62:61]
18349 21'b0, // z_tsb_cfg0[60:40]
18350 mmu_mra1_a25[74:48], // z_tsb_cfg0[39:13]
18351 4'b0, // z_tsb_cfg0[12:9]
18352 mmu_mra1_a25[47:39] // z_tsb_cfg0[8:0]
18353 };
18354assign ctxt_z_tsb_cfg3_reg[7] = {`SPC7.mmu.asi.t7_e_z[3], // z_tsb_cfg0[63]
18355 mmu_mra1_a25[37:36], // z_tsb_cfg0[62:61]
18356 21'b0, // z_tsb_cfg0[60:40]
18357 mmu_mra1_a25[35:9], // z_tsb_cfg0[39:13]
18358 4'b0, // z_tsb_cfg0[12:9]
18359 mmu_mra1_a25[8:0] // z_tsb_cfg0[8:0]
18360 };
18361assign ctxt_nz_tsb_cfg0_reg[7] = {`SPC7.mmu.asi.t7_e_nz[0],// z_tsb_cfg0[63]
18362 mmu_mra1_a26[76:75], // z_tsb_cfg0[62:61]
18363 21'b0, // z_tsb_cfg0[60:40]
18364 mmu_mra1_a26[74:48], // z_tsb_cfg0[39:13]
18365 4'b0, // z_tsb_cfg0[12:9]
18366 mmu_mra1_a26[47:39] // z_tsb_cfg0[8:0]
18367 };
18368assign ctxt_nz_tsb_cfg1_reg[7] = {`SPC7.mmu.asi.t7_e_nz[1],// z_tsb_cfg0[63]
18369 mmu_mra1_a26[37:36], // z_tsb_cfg0[62:61]
18370 21'b0, // z_tsb_cfg0[60:40]
18371 mmu_mra1_a26[35:9], // z_tsb_cfg0[39:13]
18372 4'b0, // z_tsb_cfg0[12:9]
18373 mmu_mra1_a26[8:0] // z_tsb_cfg0[8:0]
18374 };
18375assign ctxt_nz_tsb_cfg2_reg[7] = {`SPC7.mmu.asi.t7_e_nz[2],// z_tsb_cfg0[63]
18376 mmu_mra1_a27[76:75], // z_tsb_cfg0[62:61]
18377 21'b0, // z_tsb_cfg0[60:40]
18378 mmu_mra1_a27[74:48], // z_tsb_cfg0[39:13]
18379 4'b0, // z_tsb_cfg0[12:9]
18380 mmu_mra1_a27[47:39] // z_tsb_cfg0[8:0]
18381 };
18382assign ctxt_nz_tsb_cfg3_reg[7] = {`SPC7.mmu.asi.t7_e_nz[3],// z_tsb_cfg0[63]
18383 mmu_mra1_a27[37:36], // z_tsb_cfg0[62:61]
18384 21'b0, // z_tsb_cfg0[60:40]
18385 mmu_mra1_a27[35:9], // z_tsb_cfg0[39:13]
18386 4'b0, // z_tsb_cfg0[12:9]
18387 mmu_mra1_a27[8:0] // z_tsb_cfg0[8:0]
18388 };
18389`endif // EMUL - ADD_TSB_CFG
18390
18391
18392// This was the original select_pc_b, the latest select_pc_b qualifies with errors
18393// But some of the error checkers need this signal without the qualification
18394// of icache errors
18395// Suppress instruction on flush or park request
18396// (clear_disrupting_flush_pending_w_in & idl_req_in)
18397// Suppress instruction for 'refetch' exception after
18398// not taken branch with annulled delay slot
18399// NOTE: 'with_errors' means that the signal actually IGNORES instruction
18400// cache errors and asserts IN SPITE OF instruction cache errors
18401wire [7:0] select_pc_b_with_errors =
18402 {{4 {~`SPC7.dec_flush_b[1]}}, {4 {~`SPC7.dec_flush_b[0]}}} &
18403 {{4 {~`SPC7.tlu.fls1.refetch_w_in}}, {4 {~`SPC7.tlu.fls0.refetch_w_in}}} &
18404 {~(`SPC7.tlu.fls1.clear_disrupting_flush_pending_w_in[3:0] &
18405 {4 {`SPC7.tlu.fls1.idl_req_in}}),
18406 ~(`SPC7.tlu.fls0.clear_disrupting_flush_pending_w_in[3:0] &
18407 {4 {`SPC7.tlu.fls0.idl_req_in}})} &
18408 {`SPC7.tlu.fls1.tid_dec_valid_b[3:0],
18409 `SPC7.tlu.fls0.tid_dec_valid_b[3:0]};
18410
18411//------------------------------------
18412// Qualify select_pc_b_with_errors to get final select_pc_b signal
18413// Qualifications are
18414// - instruction cache errors (ic_err_w_in)
18415// - disrupting single step completion requests (dsc_req_in)
18416wire [7:0] select_pc_b =
18417 select_pc_b_with_errors[7:0] &
18418 {{4 {(~`SPC7.tlu.fls1.ic_err_w_in | `SPC7.tlu.fls1.itlb_nfo_exc_b) &
18419 ~`SPC7.tlu.fls1.dsc_req_in}},
18420 {4 {(~`SPC7.tlu.fls0.ic_err_w_in | `SPC7.tlu.fls0.itlb_nfo_exc_b) &
18421 ~`SPC7.tlu.fls0.dsc_req_in}}};
18422
18423//------------------------------------
18424
18425//original select_pc_b_with errors. Select_pc_b_with_errors is no longer asserted
18426//if the inst. following an annulled delay slot of a not taken branch has a prebuffer
18427//error and it reaches B stage. I still need a signal if this happens to trigger the chkr.
18428
18429wire [7:0] select_pc_b_with_errors_and_refetch =
18430 {{4 {~`SPC7.dec_flush_b[1]}}, {4 {~`SPC7.dec_flush_b[0]}}} &
18431 {~(`SPC7.tlu.fls1.clear_disrupting_flush_pending_w_in[3:0] &
18432 {4 {`SPC7.tlu.fls1.idl_req_in}}),
18433 ~(`SPC7.tlu.fls0.clear_disrupting_flush_pending_w_in[3:0] &
18434 {4 {`SPC7.tlu.fls0.idl_req_in}})} &
18435 {`SPC7.tlu.fls1.tid_dec_valid_b[3:0],
18436 `SPC7.tlu.fls0.tid_dec_valid_b[3:0]};
18437
18438// Signals required for bench TLB sync & LDST sync
18439
18440reg tlb_bypass_m;
18441reg tlb_bypass_b;
18442reg tlb_rd_vld_m;
18443reg tlb_rd_vld_b;
18444reg lsu_tl_gt_0_b;
18445reg [7:0] dcc_asi_b;
18446reg asi_internal_w;
18447
18448always @ (posedge `BENCH_SPC7_GCLK) begin // {
18449
18450 clkstop_d1 <= `SPC7.tcu_clk_stop;
18451 clkstop_d2 <= clkstop_d1;
18452 clkstop_d3 <= clkstop_d2;
18453 clkstop_d4 <= clkstop_d3;
18454 clkstop_d5 <= clkstop_d4;
18455
18456 tlb_bypass_m <= `SPC7.lsu.tlb.tlb_bypass;
18457 tlb_bypass_b <= tlb_bypass_m;
18458 tlb_rd_vld_m <= `SPC7.lsu.tlb.tlb_rd_vld | `SPC7.lsu.tlb.tlb_cam_vld;
18459 tlb_rd_vld_b <= tlb_rd_vld_m;
18460
18461 // This signal is only valid for LD/ST instructions
18462 lsu_tl_gt_0_b <= `SPC7.lsu.dcc.tl_gt_0_m;
18463
18464 // Can't use lsu.dcc_asi_b for tlb_sync so pipeline from M to B
18465 dcc_asi_b <= `SPC7.lsu.dcc_asi_m;
18466
18467 // LD/ST that will not issue to the crossbar
18468 asi_internal_w <= `SPC7.lsu.dcc.asi_internal_b;
18469end // }
18470
18471// TL determines whether Nucleus or Primary
18472wire [7:0] asi_num = `SPC7.lsu.dcc.altspace_ldst_b ?
18473 dcc_asi_b :
18474 (lsu_tl_gt_0_b ? 8'h04 : 8'h80);
18475
18476wire [7:0] itlb_miss = { (`SPC7.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
18477 `SPC7.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
18478 `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
18479 (`SPC7.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
18480 `SPC7.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
18481 `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
18482 (`SPC7.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
18483 `SPC7.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
18484 `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
18485 (`SPC7.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
18486 `SPC7.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
18487 `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
18488 (`SPC7.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
18489 `SPC7.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
18490 `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
18491 (`SPC7.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
18492 `SPC7.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
18493 `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
18494 (`SPC7.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
18495 `SPC7.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
18496 `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
18497 (`SPC7.ifu_ftu.ftu_agc_ctl.itb_itb_miss_c &
18498 `SPC7.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
18499 `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
18500 };
18501
18502wire [7:0] icache_miss = { (`SPC7.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
18503 `SPC7.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
18504 `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
18505 (`SPC7.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
18506 `SPC7.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
18507 `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
18508 (`SPC7.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
18509 `SPC7.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
18510 `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
18511 (`SPC7.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
18512 `SPC7.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
18513 `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
18514 (`SPC7.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
18515 `SPC7.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
18516 `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
18517 (`SPC7.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
18518 `SPC7.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
18519 `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
18520 (`SPC7.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
18521 `SPC7.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
18522 `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
18523 (`SPC7.ifu_ftu.ftu_agc_ctl.itb_cmiss_c &
18524 `SPC7.ifu_ftu.ftu_agc_ctl.agc_fetch_v_c &
18525 `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
18526 };
18527
18528wire inst_bypass = (`SPC7.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[0] |
18529 `SPC7.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[1] |
18530 `SPC7.ifu_ftu.ftu_agc_ctl.agc_bypass_selects[2]);
18531
18532wire [7:0] fetch_bypass = { (inst_bypass & `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[7]),
18533 (inst_bypass & `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[6]),
18534 (inst_bypass & `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[5]),
18535 (inst_bypass & `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[4]),
18536 (inst_bypass & `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[3]),
18537 (inst_bypass & `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[2]),
18538 (inst_bypass & `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[1]),
18539 (inst_bypass & `SPC7.ifu_ftu.ftu_agc_ctl.ftu_fetch_thr_c[0])
18540 };
18541
18542wire [7:0] itlb_wr = {(`SPC7.tlu.trl1.take_itw & `SPC7.tlu.trl1.trap[3]),
18543 (`SPC7.tlu.trl1.take_itw & `SPC7.tlu.trl1.trap[2]),
18544 (`SPC7.tlu.trl1.take_itw & `SPC7.tlu.trl1.trap[1]),
18545 (`SPC7.tlu.trl1.take_itw & `SPC7.tlu.trl1.trap[0]),
18546 (`SPC7.tlu.trl0.take_itw & `SPC7.tlu.trl0.trap[3]),
18547 (`SPC7.tlu.trl0.take_itw & `SPC7.tlu.trl0.trap[2]),
18548 (`SPC7.tlu.trl0.take_itw & `SPC7.tlu.trl0.trap[1]),
18549 (`SPC7.tlu.trl0.take_itw & `SPC7.tlu.trl0.trap[0])
18550 };
18551
18552//------------------------------------
18553
18554reg [71:0] tick_cmpr_0;
18555reg [71:0] stick_cmpr_0;
18556reg [71:0] hstick_cmpr_0;
18557reg [151:0] trap_entry_1_t0;
18558reg [151:0] trap_entry_2_t0;
18559reg [151:0] trap_entry_3_t0;
18560reg [151:0] trap_entry_4_t0;
18561reg [151:0] trap_entry_5_t0;
18562reg [151:0] trap_entry_6_t0;
18563
18564always @(posedge `BENCH_SPC7_GCLK) begin // {
18565
18566 // Probes for nas_pipe
18567 tick_cmpr_0 <= `SPC7.tlu.tca.array.mem[{2'b0,3'h0}];
18568 stick_cmpr_0 <= `SPC7.tlu.tca.array.mem[{2'b01,3'h0}];
18569 hstick_cmpr_0 <= `SPC7.tlu.tca.array.mem[{2'b10,3'h0}];
18570 trap_entry_1_t0 <= `SPC7.tlu.tsa0.array.mem[{2'h0, 3'h0}];
18571 trap_entry_2_t0 <= `SPC7.tlu.tsa0.array.mem[{2'h0, 3'h1}];
18572 trap_entry_3_t0 <= `SPC7.tlu.tsa0.array.mem[{2'h0, 3'h2}];
18573 trap_entry_4_t0 <= `SPC7.tlu.tsa0.array.mem[{2'h0, 3'h3}];
18574 trap_entry_5_t0 <= `SPC7.tlu.tsa0.array.mem[{2'h0, 3'h4}];
18575 trap_entry_6_t0 <= `SPC7.tlu.tsa0.array.mem[{2'h0, 3'h5}];
18576
18577end // }
18578reg [71:0] tick_cmpr_1;
18579reg [71:0] stick_cmpr_1;
18580reg [71:0] hstick_cmpr_1;
18581reg [151:0] trap_entry_1_t1;
18582reg [151:0] trap_entry_2_t1;
18583reg [151:0] trap_entry_3_t1;
18584reg [151:0] trap_entry_4_t1;
18585reg [151:0] trap_entry_5_t1;
18586reg [151:0] trap_entry_6_t1;
18587
18588always @(posedge `BENCH_SPC7_GCLK) begin // {
18589
18590 // Probes for nas_pipe
18591 tick_cmpr_1 <= `SPC7.tlu.tca.array.mem[{2'b0,3'h1}];
18592 stick_cmpr_1 <= `SPC7.tlu.tca.array.mem[{2'b01,3'h1}];
18593 hstick_cmpr_1 <= `SPC7.tlu.tca.array.mem[{2'b10,3'h1}];
18594 trap_entry_1_t1 <= `SPC7.tlu.tsa0.array.mem[{2'h1, 3'h0}];
18595 trap_entry_2_t1 <= `SPC7.tlu.tsa0.array.mem[{2'h1, 3'h1}];
18596 trap_entry_3_t1 <= `SPC7.tlu.tsa0.array.mem[{2'h1, 3'h2}];
18597 trap_entry_4_t1 <= `SPC7.tlu.tsa0.array.mem[{2'h1, 3'h3}];
18598 trap_entry_5_t1 <= `SPC7.tlu.tsa0.array.mem[{2'h1, 3'h4}];
18599 trap_entry_6_t1 <= `SPC7.tlu.tsa0.array.mem[{2'h1, 3'h5}];
18600
18601end // }
18602reg [71:0] tick_cmpr_2;
18603reg [71:0] stick_cmpr_2;
18604reg [71:0] hstick_cmpr_2;
18605reg [151:0] trap_entry_1_t2;
18606reg [151:0] trap_entry_2_t2;
18607reg [151:0] trap_entry_3_t2;
18608reg [151:0] trap_entry_4_t2;
18609reg [151:0] trap_entry_5_t2;
18610reg [151:0] trap_entry_6_t2;
18611
18612always @(posedge `BENCH_SPC7_GCLK) begin // {
18613
18614 // Probes for nas_pipe
18615 tick_cmpr_2 <= `SPC7.tlu.tca.array.mem[{2'b0,3'h2}];
18616 stick_cmpr_2 <= `SPC7.tlu.tca.array.mem[{2'b01,3'h2}];
18617 hstick_cmpr_2 <= `SPC7.tlu.tca.array.mem[{2'b10,3'h2}];
18618 trap_entry_1_t2 <= `SPC7.tlu.tsa0.array.mem[{2'h2, 3'h0}];
18619 trap_entry_2_t2 <= `SPC7.tlu.tsa0.array.mem[{2'h2, 3'h1}];
18620 trap_entry_3_t2 <= `SPC7.tlu.tsa0.array.mem[{2'h2, 3'h2}];
18621 trap_entry_4_t2 <= `SPC7.tlu.tsa0.array.mem[{2'h2, 3'h3}];
18622 trap_entry_5_t2 <= `SPC7.tlu.tsa0.array.mem[{2'h2, 3'h4}];
18623 trap_entry_6_t2 <= `SPC7.tlu.tsa0.array.mem[{2'h2, 3'h5}];
18624
18625end // }
18626reg [71:0] tick_cmpr_3;
18627reg [71:0] stick_cmpr_3;
18628reg [71:0] hstick_cmpr_3;
18629reg [151:0] trap_entry_1_t3;
18630reg [151:0] trap_entry_2_t3;
18631reg [151:0] trap_entry_3_t3;
18632reg [151:0] trap_entry_4_t3;
18633reg [151:0] trap_entry_5_t3;
18634reg [151:0] trap_entry_6_t3;
18635
18636always @(posedge `BENCH_SPC7_GCLK) begin // {
18637
18638 // Probes for nas_pipe
18639 tick_cmpr_3 <= `SPC7.tlu.tca.array.mem[{2'b0,3'h3}];
18640 stick_cmpr_3 <= `SPC7.tlu.tca.array.mem[{2'b01,3'h3}];
18641 hstick_cmpr_3 <= `SPC7.tlu.tca.array.mem[{2'b10,3'h3}];
18642 trap_entry_1_t3 <= `SPC7.tlu.tsa0.array.mem[{2'h3, 3'h0}];
18643 trap_entry_2_t3 <= `SPC7.tlu.tsa0.array.mem[{2'h3, 3'h1}];
18644 trap_entry_3_t3 <= `SPC7.tlu.tsa0.array.mem[{2'h3, 3'h2}];
18645 trap_entry_4_t3 <= `SPC7.tlu.tsa0.array.mem[{2'h3, 3'h3}];
18646 trap_entry_5_t3 <= `SPC7.tlu.tsa0.array.mem[{2'h3, 3'h4}];
18647 trap_entry_6_t3 <= `SPC7.tlu.tsa0.array.mem[{2'h3, 3'h5}];
18648
18649end // }
18650reg [71:0] tick_cmpr_4;
18651reg [71:0] stick_cmpr_4;
18652reg [71:0] hstick_cmpr_4;
18653reg [151:0] trap_entry_1_t4;
18654reg [151:0] trap_entry_2_t4;
18655reg [151:0] trap_entry_3_t4;
18656reg [151:0] trap_entry_4_t4;
18657reg [151:0] trap_entry_5_t4;
18658reg [151:0] trap_entry_6_t4;
18659
18660always @(posedge `BENCH_SPC7_GCLK) begin // {
18661
18662 // Probes for nas_pipe
18663 tick_cmpr_4 <= `SPC7.tlu.tca.array.mem[{2'b0,3'h4}];
18664 stick_cmpr_4 <= `SPC7.tlu.tca.array.mem[{2'b01,3'h4}];
18665 hstick_cmpr_4 <= `SPC7.tlu.tca.array.mem[{2'b10,3'h4}];
18666 trap_entry_1_t4 <= `SPC7.tlu.tsa1.array.mem[{2'h0, 3'h0}];
18667 trap_entry_2_t4 <= `SPC7.tlu.tsa1.array.mem[{2'h0, 3'h1}];
18668 trap_entry_3_t4 <= `SPC7.tlu.tsa1.array.mem[{2'h0, 3'h2}];
18669 trap_entry_4_t4 <= `SPC7.tlu.tsa1.array.mem[{2'h0, 3'h3}];
18670 trap_entry_5_t4 <= `SPC7.tlu.tsa1.array.mem[{2'h0, 3'h4}];
18671 trap_entry_6_t4 <= `SPC7.tlu.tsa1.array.mem[{2'h0, 3'h5}];
18672
18673end // }
18674reg [71:0] tick_cmpr_5;
18675reg [71:0] stick_cmpr_5;
18676reg [71:0] hstick_cmpr_5;
18677reg [151:0] trap_entry_1_t5;
18678reg [151:0] trap_entry_2_t5;
18679reg [151:0] trap_entry_3_t5;
18680reg [151:0] trap_entry_4_t5;
18681reg [151:0] trap_entry_5_t5;
18682reg [151:0] trap_entry_6_t5;
18683
18684always @(posedge `BENCH_SPC7_GCLK) begin // {
18685
18686 // Probes for nas_pipe
18687 tick_cmpr_5 <= `SPC7.tlu.tca.array.mem[{2'b0,3'h5}];
18688 stick_cmpr_5 <= `SPC7.tlu.tca.array.mem[{2'b01,3'h5}];
18689 hstick_cmpr_5 <= `SPC7.tlu.tca.array.mem[{2'b10,3'h5}];
18690 trap_entry_1_t5 <= `SPC7.tlu.tsa1.array.mem[{2'h1, 3'h0}];
18691 trap_entry_2_t5 <= `SPC7.tlu.tsa1.array.mem[{2'h1, 3'h1}];
18692 trap_entry_3_t5 <= `SPC7.tlu.tsa1.array.mem[{2'h1, 3'h2}];
18693 trap_entry_4_t5 <= `SPC7.tlu.tsa1.array.mem[{2'h1, 3'h3}];
18694 trap_entry_5_t5 <= `SPC7.tlu.tsa1.array.mem[{2'h1, 3'h4}];
18695 trap_entry_6_t5 <= `SPC7.tlu.tsa1.array.mem[{2'h1, 3'h5}];
18696
18697end // }
18698reg [71:0] tick_cmpr_6;
18699reg [71:0] stick_cmpr_6;
18700reg [71:0] hstick_cmpr_6;
18701reg [151:0] trap_entry_1_t6;
18702reg [151:0] trap_entry_2_t6;
18703reg [151:0] trap_entry_3_t6;
18704reg [151:0] trap_entry_4_t6;
18705reg [151:0] trap_entry_5_t6;
18706reg [151:0] trap_entry_6_t6;
18707
18708always @(posedge `BENCH_SPC7_GCLK) begin // {
18709
18710 // Probes for nas_pipe
18711 tick_cmpr_6 <= `SPC7.tlu.tca.array.mem[{2'b0,3'h6}];
18712 stick_cmpr_6 <= `SPC7.tlu.tca.array.mem[{2'b01,3'h6}];
18713 hstick_cmpr_6 <= `SPC7.tlu.tca.array.mem[{2'b10,3'h6}];
18714 trap_entry_1_t6 <= `SPC7.tlu.tsa1.array.mem[{2'h2, 3'h0}];
18715 trap_entry_2_t6 <= `SPC7.tlu.tsa1.array.mem[{2'h2, 3'h1}];
18716 trap_entry_3_t6 <= `SPC7.tlu.tsa1.array.mem[{2'h2, 3'h2}];
18717 trap_entry_4_t6 <= `SPC7.tlu.tsa1.array.mem[{2'h2, 3'h3}];
18718 trap_entry_5_t6 <= `SPC7.tlu.tsa1.array.mem[{2'h2, 3'h4}];
18719 trap_entry_6_t6 <= `SPC7.tlu.tsa1.array.mem[{2'h2, 3'h5}];
18720
18721end // }
18722reg [71:0] tick_cmpr_7;
18723reg [71:0] stick_cmpr_7;
18724reg [71:0] hstick_cmpr_7;
18725reg [151:0] trap_entry_1_t7;
18726reg [151:0] trap_entry_2_t7;
18727reg [151:0] trap_entry_3_t7;
18728reg [151:0] trap_entry_4_t7;
18729reg [151:0] trap_entry_5_t7;
18730reg [151:0] trap_entry_6_t7;
18731
18732always @(posedge `BENCH_SPC7_GCLK) begin // {
18733
18734 // Probes for nas_pipe
18735 tick_cmpr_7 <= `SPC7.tlu.tca.array.mem[{2'b0,3'h7}];
18736 stick_cmpr_7 <= `SPC7.tlu.tca.array.mem[{2'b01,3'h7}];
18737 hstick_cmpr_7 <= `SPC7.tlu.tca.array.mem[{2'b10,3'h7}];
18738 trap_entry_1_t7 <= `SPC7.tlu.tsa1.array.mem[{2'h3, 3'h0}];
18739 trap_entry_2_t7 <= `SPC7.tlu.tsa1.array.mem[{2'h3, 3'h1}];
18740 trap_entry_3_t7 <= `SPC7.tlu.tsa1.array.mem[{2'h3, 3'h2}];
18741 trap_entry_4_t7 <= `SPC7.tlu.tsa1.array.mem[{2'h3, 3'h3}];
18742 trap_entry_5_t7 <= `SPC7.tlu.tsa1.array.mem[{2'h3, 3'h4}];
18743 trap_entry_6_t7 <= `SPC7.tlu.tsa1.array.mem[{2'h3, 3'h5}];
18744
18745end // }
18746
18747//------------------------------------
18748// ASI & Trap State machines
18749always @(posedge `BENCH_SPC7_GCLK) begin // {
18750
18751// pc_0_e[47:0] <= `SPC7.ifu_pc_d0[47:0];
18752// pc_1_e[47:0] <= `SPC7.ifu_pc_d1[47:0];
18753 pc_0_e[47:0] <= {`SPC7.tlu_pc_0_d[47:2], 2'b00};
18754 pc_1_e[47:0] <= {`SPC7.tlu_pc_1_d[47:2], 2'b00};
18755 pc_0_m[47:0] <= pc_0_e[47:0];
18756 pc_1_m[47:0] <= pc_1_e[47:0];
18757 pc_0_b[47:0] <= pc_0_m[47:0];
18758 pc_1_b[47:0] <= pc_1_m[47:0];
18759 pc_0_w[47:0] <= ({48 { select_pc_b[0]}} & pc_0_b[47:0]) |
18760 ({48 {~select_pc_b[0]}} & pc_0_w[47:0]) ;
18761 pc_1_w[47:0] <= ({48 { select_pc_b[1]}} & pc_0_b[47:0]) |
18762 ({48 {~select_pc_b[1]}} & pc_1_w[47:0]) ;
18763 pc_2_w[47:0] <= ({48 { select_pc_b[2]}} & pc_0_b[47:0]) |
18764 ({48 {~select_pc_b[2]}} & pc_2_w[47:0]) ;
18765 pc_3_w[47:0] <= ({48 { select_pc_b[3]}} & pc_0_b[47:0]) |
18766 ({48 {~select_pc_b[3]}} & pc_3_w[47:0]) ;
18767 pc_4_w[47:0] <= ({48 { select_pc_b[4]}} & pc_1_b[47:0]) |
18768 ({48 {~select_pc_b[4]}} & pc_4_w[47:0]) ;
18769 pc_5_w[47:0] <= ({48 { select_pc_b[5]}} & pc_1_b[47:0]) |
18770 ({48 {~select_pc_b[5]}} & pc_5_w[47:0]) ;
18771 pc_6_w[47:0] <= ({48 { select_pc_b[6]}} & pc_1_b[47:0]) |
18772 ({48 {~select_pc_b[6]}} & pc_6_w[47:0]) ;
18773 pc_7_w[47:0] <= ({48 { select_pc_b[7]}} & pc_1_b[47:0]) |
18774 ({48 {~select_pc_b[7]}} & pc_7_w[47:0]) ;
18775
18776
18777 // altspace_ldst_m is asserted for asi accesses that don't change arch state
18778 asi_store_b <= (`SPC7.lsu.dcc.asi_store_m & `SPC7.lsu.dcc.asi_sync_m);
18779 asi_store_w <= asi_store_b;
18780 dcc_tid_b <= `SPC7.lsu.dcc.dcc_tid_m;
18781 dcc_tid_w <= dcc_tid_b;
18782
18783 // ASI in progress state m/c
18784 if (asi_store_w & ~asi_store_flush_w[dcc_tid_w]) begin // {
18785 asi_in_progress_b[dcc_tid_w] <= 1'b1;
18786 end // }
18787
18788 asi_valid_w <= asi_in_progress_b & store_sync;
18789
18790 // Delay asi_valid_w and asi_in_progress
18791 // 2 clocks to ensure TLB Sync DTLBWRITE (demap) comes before SSTEP stxa
18792 asi_valid_fx4 <= asi_valid_w;
18793 asi_valid_fx5 <= asi_valid_fx4;
18794 asi_in_progress_w <= asi_in_progress_b;
18795 asi_in_progress_fx4 <= asi_in_progress_w;
18796 sync_reset_w <= sync_reset;
18797
18798 for (i=0;i<8;i=i+1) begin // {
18799 if (asi_valid_w[i] | sync_reset_w[i]) begin // {
18800 asi_in_progress_b[i] <= 1'b0;
18801 end//}
18802 end //}
18803
18804 // Trap0 pipeline [valid W stage]
18805
18806 for (i=0;i<4;i=i+1) begin // {
18807 // Done & Retry
18808 if ((`SPC7.tlu.tlu_trap_0_tid[1:0] == i) &&
18809 `SPC7.tlu.tlu_trap_pc_0_valid & tlu_ccr_cwp_0_valid_last)
18810 begin //{
18811 tlu_valid[i] <= 1'b1;
18812 end //}
18813 // Trap taken
18814 else if (`SPC7.tlu.trl0.real_trap[i] & ~`SPC7.tlu.trl0.take_por) begin // {
18815 tlu_valid[i] <= 1'b1;
18816 end //}
18817 else
18818 tlu_valid[i] <= 1'b0;
18819 end //}
18820
18821 // Trap1 pipeline [valid W stage]
18822
18823 for (i=0;i<4;i=i+1) begin // {
18824 // Done & Retry
18825 if ((`SPC7.tlu.tlu_trap_1_tid[1:0] == i) &&
18826 `SPC7.tlu.tlu_trap_pc_1_valid & tlu_ccr_cwp_1_valid_last)
18827 begin //{
18828 tlu_valid[i+4] <= 1'b1;
18829 end //}
18830 // Trap taken
18831 else if (`SPC7.tlu.trl1.real_trap[i] & ~`SPC7.tlu.trl1.take_por) begin // {
18832 tlu_valid[i+4] <= 1'b1;
18833 end //}
18834 else
18835 tlu_valid[i+4] <= 1'b0;
18836 end //}
18837
18838end // }
18839
18840
18841always @(posedge `BENCH_SPC7_GCLK) begin
18842
18843// debug code for TPCC analysis
18844`ifdef TPCC
18845if (pcx_req==1) begin
18846 if (`SPC7.spc_pcx_data_pa[129:124]==6'b100000) begin // l15 dmiss
18847 l15dmiss_cnt=l15dmiss_cnt+1;
18848 $display("dmissl15 cnt is %0d",l15dmiss_cnt);
18849 end
18850 if (`SPC7.spc_pcx_data_pa[129:124]==6'b110000) begin // l15 imiss
18851 l15imiss_cnt=l15imiss_cnt+1;
18852 $display("imissl15 cnt is %0d",l15imiss_cnt);
18853 end
18854 // `TOP.spg.spc_pcx_data_pa[129:124]==6'b100001 -> all stores
18855end
18856
18857pcx_req <= |`SPC7.spc_pcx_req_pq[8:0];
18858
18859if (`SPC7.ifu_l15_valid==1) begin
18860 imiss_cnt=imiss_cnt+1;
18861 $display("imiss cnt is %0d",imiss_cnt);
18862end
18863if (spec_dmiss==1 && `SPC7.lsu_l15_cancel==0) begin
18864 dmiss_cnt=dmiss_cnt+1;
18865 $display("dmiss cnt is %0d",dmiss_cnt);
18866
18867end
18868spec_dmiss <= `SPC7.lsu_l15_valid & `SPC7.lsu_l15_load;
18869
18870clock = clock+1;
18871
18872// keep track of imiss latencies
18873if (`SPC7.ftu_agc_thr0_cmiss_c==1) begin
18874 start_imiss0=clock;
18875 active_imiss0=1;
18876end
18877if (active_imiss0==1 && first_imiss0==1 && `SPC7.l15_spc_cpkt[8:6]==3'b000 && `SPC7.l15_spc_valid==1 && `SPC7.l15_spc_cpkt[17:14]==4'b0001) begin
18878 sum_imiss_latency = sum_imiss_latency + clock - start_imiss0 + 1;
18879 number_imiss = number_imiss + 1;
18880 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
18881 active_imiss0=0;
18882 first_imiss0=0;
18883end
18884if (active_imiss0==1 && first_imiss0==0 && `SPC7.l15_spc_cpkt[8:6]==3'b000 && `SPC7.l15_spc_valid==1 && `SPC7.l15_spc_cpkt[17:14]==4'b0001) begin
18885 first_imiss0=1;
18886end
18887if (`SPC7.ftu_agc_thr1_cmiss_c==1) begin
18888 start_imiss1=clock;
18889 active_imiss1=1;
18890end
18891if (active_imiss1==1 && first_imiss1==1 && `SPC7.l15_spc_cpkt[8:6]==3'b001 && `SPC7.l15_spc_valid==1 && `SPC7.l15_spc_cpkt[17:14]==4'b0001) begin
18892 sum_imiss_latency = sum_imiss_latency + clock - start_imiss1 + 1;
18893 number_imiss = number_imiss + 1;
18894 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
18895 active_imiss1=0;
18896 first_imiss1=0;
18897end
18898if (active_imiss1==1 && first_imiss1==0 && `SPC7.l15_spc_cpkt[8:6]==3'b001 && `SPC7.l15_spc_valid==1 && `SPC7.l15_spc_cpkt[17:14]==4'b0001) begin
18899 first_imiss1=1;
18900end
18901if (`SPC7.ftu_agc_thr2_cmiss_c==1) begin
18902 start_imiss2=clock;
18903 active_imiss2=1;
18904end
18905if (active_imiss2==1 && first_imiss2==1 && `SPC7.l15_spc_cpkt[8:6]==3'b010 && `SPC7.l15_spc_valid==1 && `SPC7.l15_spc_cpkt[17:14]==4'b0001) begin
18906 sum_imiss_latency = sum_imiss_latency + clock - start_imiss2 + 1;
18907 number_imiss = number_imiss + 1;
18908 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
18909 active_imiss2=0;
18910 first_imiss2=0;
18911end
18912if (active_imiss2==1 && first_imiss2==0 && `SPC7.l15_spc_cpkt[8:6]==3'b010 && `SPC7.l15_spc_valid==1 && `SPC7.l15_spc_cpkt[17:14]==4'b0001) begin
18913 first_imiss2=1;
18914end
18915if (`SPC7.ftu_agc_thr3_cmiss_c==1) begin
18916 start_imiss3=clock;
18917 active_imiss3=1;
18918end
18919if (active_imiss3==1 && first_imiss3==1 && `SPC7.l15_spc_cpkt[8:6]==3'b011 && `SPC7.l15_spc_valid==1 && `SPC7.l15_spc_cpkt[17:14]==4'b0001) begin
18920 sum_imiss_latency = sum_imiss_latency + clock - start_imiss3 + 1;
18921 number_imiss = number_imiss + 1;
18922 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
18923 active_imiss3=0;
18924 first_imiss3=0;
18925end
18926if (active_imiss3==1 && first_imiss3==0 && `SPC7.l15_spc_cpkt[8:6]==3'b011 && `SPC7.l15_spc_valid==1 && `SPC7.l15_spc_cpkt[17:14]==4'b0001) begin
18927 first_imiss3=1;
18928end
18929if (`SPC7.ftu_agc_thr4_cmiss_c==1) begin
18930 start_imiss4=clock;
18931 active_imiss4=1;
18932end
18933if (active_imiss4==1 && first_imiss4==1 && `SPC7.l15_spc_cpkt[8:6]==3'b100 && `SPC7.l15_spc_valid==1 && `SPC7.l15_spc_cpkt[17:14]==4'b0001) begin
18934 sum_imiss_latency = sum_imiss_latency + clock - start_imiss4 + 1;
18935 number_imiss = number_imiss + 1;
18936 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
18937 active_imiss4=0;
18938 first_imiss4=0;
18939end
18940if (active_imiss4==1 && first_imiss4==0 && `SPC7.l15_spc_cpkt[8:6]==3'b100 && `SPC7.l15_spc_valid==1 && `SPC7.l15_spc_cpkt[17:14]==4'b0001) begin
18941 first_imiss4=1;
18942end
18943if (`SPC7.ftu_agc_thr5_cmiss_c==1) begin
18944 start_imiss5=clock;
18945 active_imiss5=1;
18946end
18947if (active_imiss5==1 && first_imiss5==1 && `SPC7.l15_spc_cpkt[8:6]==3'b101 && `SPC7.l15_spc_valid==1 && `SPC7.l15_spc_cpkt[17:14]==4'b0001) begin
18948 sum_imiss_latency = sum_imiss_latency + clock - start_imiss5 + 1;
18949 number_imiss = number_imiss + 1;
18950 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
18951 active_imiss5=0;
18952 first_imiss5=0;
18953end
18954if (active_imiss5==1 && first_imiss5==0 && `SPC7.l15_spc_cpkt[8:6]==3'b101 && `SPC7.l15_spc_valid==1 && `SPC7.l15_spc_cpkt[17:14]==4'b0001) begin
18955 first_imiss5=1;
18956end
18957if (`SPC7.ftu_agc_thr6_cmiss_c==1) begin
18958 start_imiss6=clock;
18959 active_imiss6=1;
18960end
18961if (active_imiss6==1 && first_imiss6==1 && `SPC7.l15_spc_cpkt[8:6]==3'b110 && `SPC7.l15_spc_valid==1 && `SPC7.l15_spc_cpkt[17:14]==4'b0001) begin
18962 sum_imiss_latency = sum_imiss_latency + clock - start_imiss6 + 1;
18963 number_imiss = number_imiss + 1;
18964 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
18965 active_imiss6=0;
18966 first_imiss6=0;
18967end
18968if (active_imiss6==1 && first_imiss6==0 && `SPC7.l15_spc_cpkt[8:6]==3'b110 && `SPC7.l15_spc_valid==1 && `SPC7.l15_spc_cpkt[17:14]==4'b0001) begin
18969 first_imiss6=1;
18970end
18971if (`SPC7.ftu_agc_thr7_cmiss_c==1) begin
18972 start_imiss7=clock;
18973 active_imiss7=1;
18974end
18975if (active_imiss7==1 && first_imiss7==1 && `SPC7.l15_spc_cpkt[8:6]==3'b111 && `SPC7.l15_spc_valid==1 && `SPC7.l15_spc_cpkt[17:14]==4'b0001) begin
18976 sum_imiss_latency = sum_imiss_latency + clock - start_imiss7 + 1;
18977 number_imiss = number_imiss + 1;
18978 $display("sum imiss latency %0d number imiss %0d",sum_imiss_latency,number_imiss);
18979 active_imiss7=0;
18980 first_imiss7=0;
18981end
18982if (active_imiss7==1 && first_imiss7==0 && `SPC7.l15_spc_cpkt[8:6]==3'b111 && `SPC7.l15_spc_valid==1 && `SPC7.l15_spc_cpkt[17:14]==4'b0001) begin
18983 first_imiss7=1;
18984end
18985
18986if (`SPC7.pku.swl0.set_lsu_sync_wait==1) begin
18987 start_dmiss0=clock;
18988end
18989if (`SPC7.pku.swl0.clear_lsu_sync_wait==1) begin
18990 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss0) + 3;
18991 number_dmiss = number_dmiss + 1;
18992 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
18993end
18994if (`SPC7.pku.swl1.set_lsu_sync_wait==1) begin
18995 start_dmiss1=clock;
18996end
18997if (`SPC7.pku.swl1.clear_lsu_sync_wait==1) begin
18998 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss1) + 3;
18999 number_dmiss = number_dmiss + 1;
19000 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
19001end
19002if (`SPC7.pku.swl2.set_lsu_sync_wait==1) begin
19003 start_dmiss2=clock;
19004end
19005if (`SPC7.pku.swl2.clear_lsu_sync_wait==1) begin
19006 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss2) + 3;
19007 number_dmiss = number_dmiss + 1;
19008 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
19009end
19010if (`SPC7.pku.swl3.set_lsu_sync_wait==1) begin
19011 start_dmiss3=clock;
19012end
19013if (`SPC7.pku.swl3.clear_lsu_sync_wait==1) begin
19014 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss3) + 3;
19015 number_dmiss = number_dmiss + 1;
19016 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
19017end
19018if (`SPC7.pku.swl4.set_lsu_sync_wait==1) begin
19019 start_dmiss4=clock;
19020end
19021if (`SPC7.pku.swl4.clear_lsu_sync_wait==1) begin
19022 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss4) + 3;
19023 number_dmiss = number_dmiss + 1;
19024 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
19025end
19026if (`SPC7.pku.swl5.set_lsu_sync_wait==1) begin
19027 start_dmiss5=clock;
19028end
19029if (`SPC7.pku.swl5.clear_lsu_sync_wait==1) begin
19030 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss5) + 3;
19031 number_dmiss = number_dmiss + 1;
19032 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
19033end
19034if (`SPC7.pku.swl6.set_lsu_sync_wait==1) begin
19035 start_dmiss6=clock;
19036end
19037if (`SPC7.pku.swl6.clear_lsu_sync_wait==1) begin
19038 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss6) + 3;
19039 number_dmiss = number_dmiss + 1;
19040 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
19041end
19042if (`SPC7.pku.swl7.set_lsu_sync_wait==1) begin
19043 start_dmiss7=clock;
19044end
19045if (`SPC7.pku.swl7.clear_lsu_sync_wait==1) begin
19046 sum_dmiss_latency = sum_dmiss_latency + (clock - start_dmiss7) + 3;
19047 number_dmiss = number_dmiss + 1;
19048 $display("sum dmiss latency %0d number dmiss %0d",sum_dmiss_latency,number_dmiss);
19049end
19050`endif
19051
19052
19053
19054 lsu_tid_e[2:0] <= `SPC7.lsu.dcc.tid_d[2:0];
19055
19056 // FG Valid conditions
19057
19058 // Add fcc valids to fg_valid
19059 fcc_valid_fb <= fcc_valid_f5;
19060 fcc_valid_f5 <= fcc_valid_f4;
19061 fcc_valid_f4 <= |`SPC7.fgu.fgu_cmp_fcc_vld_fx3[3:0];
19062
19063 fg_flush_fb <= fg_flush_f5;
19064 fg_flush_f5 <= fg_flush_f4;
19065 fg_flush_f4 <= fg_flush_f3;
19066 fg_flush_f3 <= fg_flush_f2 | `SPC7.dec_flush_f2 |
19067 `SPC7.tlu_flush_fgu_b;
19068 fg_flush_f2 <= `SPC7.dec_flush_f1;
19069
19070 fgu_err_fx3 <= `SPC7.fgu_cecc_fx2 | `SPC7.fgu_uecc_fx2 | `SPC7.fgu.fpc.exu_flush_fx2; // frf or irf ecc error
19071 fgu_err_fx4 <= fgu_err_fx3;
19072 fgu_err_fx5 <= fgu_err_fx4;
19073 fgu_err_fb <= fgu_err_fx5;
19074
19075 // Siams cause fg_valid ..
19076 siam0_d = `SPC7.dec.dec_inst0_d[31:30]==2'b10 &
19077 `SPC7.dec.dec_inst0_d[24:19]==6'b110110 &
19078 `SPC7.dec.dec_inst0_d[13:5]==9'b010000001;
19079
19080 siam1_d = `SPC7.dec.dec_inst1_d[31:30]==2'b10 &
19081 `SPC7.dec.dec_inst1_d[24:19]==6'b110110 &
19082 `SPC7.dec.dec_inst1_d[13:5]==9'b010000001;
19083
19084
19085 done0_d = `SPC7.dec.dec_inst0_d[31:30]==2'b10 &
19086 `SPC7.dec.dec_inst0_d[29:25]==5'b00000 &
19087 `SPC7.dec.dec_inst0_d[24:19]==6'b111110;
19088 done1_d = `SPC7.dec.dec_inst1_d[31:30]==2'b10 &
19089 `SPC7.dec.dec_inst1_d[29:25]==5'b00000 &
19090 `SPC7.dec.dec_inst1_d[24:19]==6'b111110;
19091
19092 retry0_d = `SPC7.dec.dec_inst0_d[31:30]==2'b10 &
19093 `SPC7.dec.dec_inst0_d[29:25]==5'b00001 &
19094 `SPC7.dec.dec_inst0_d[24:19]==6'b111110;
19095 retry1_d = `SPC7.dec.dec_inst1_d[31:30]==2'b10 &
19096 `SPC7.dec.dec_inst1_d[29:25]==5'b00001 &
19097 `SPC7.dec.dec_inst1_d[24:19]==6'b111110;
19098
19099 done0_e <= done0_d & `SPC7.dec.dec_decode0_d;
19100 done1_e <= done1_d & `SPC7.dec.dec_decode1_d;
19101
19102 retry0_e <= retry0_d & `SPC7.dec.dec_decode0_d;
19103 retry1_e <= retry1_d & `SPC7.dec.dec_decode1_d;
19104
19105
19106 // fold siam into cmov logic
19107
19108 fmov_valid_fb <= fmov_valid_f5;
19109 fmov_valid_f5 <= fmov_valid_f4;
19110 fmov_valid_f4 <= fmov_valid_f3;
19111 fmov_valid_f3 <= fmov_valid_f2;
19112 fmov_valid_f2 <= fmov_valid_m;
19113 fmov_valid_m <= fmov_valid_e & `SPC7.dec.dec_fgu_valid_e;
19114 fmov_valid_e <= ((`SPC7.exu0.ect.cmov_d | siam0_d) &
19115 `SPC7.dec.dec_decode0_d&`SPC7.dec.del.fgu0_d) |
19116 ((`SPC7.exu1.ect.cmov_d | siam1_d) &
19117 `SPC7.dec.dec_decode1_d&`SPC7.dec.del.fgu1_d);
19118
19119 // fgu check bus
19120
19121 // fcc_valid_fb doesn't assert for LDFSR. LDFSR gets checked by the LSU
19122 // checker
19123
19124 fg_valid <= {(`SPC7.fgu.fac.fac_w1_tid_fb[2:0]==3'h7) && fg_cond_fb,
19125 (`SPC7.fgu.fac.fac_w1_tid_fb[2:0]==3'h6) && fg_cond_fb,
19126 (`SPC7.fgu.fac.fac_w1_tid_fb[2:0]==3'h5) && fg_cond_fb,
19127 (`SPC7.fgu.fac.fac_w1_tid_fb[2:0]==3'h4) && fg_cond_fb,
19128 (`SPC7.fgu.fac.fac_w1_tid_fb[2:0]==3'h3) && fg_cond_fb,
19129 (`SPC7.fgu.fac.fac_w1_tid_fb[2:0]==3'h2) && fg_cond_fb,
19130 (`SPC7.fgu.fac.fac_w1_tid_fb[2:0]==3'h1) && fg_cond_fb,
19131 (`SPC7.fgu.fac.fac_w1_tid_fb[2:0]==3'h0) && fg_cond_fb };
19132
19133
19134 fgu_valid_fb0 <= `SPC7.fgu_exu_w_vld_fx5[0] && !`SPC7.fgu.fpc.div_finish_int_fb;
19135 fgu_valid_fb1 <= `SPC7.fgu_exu_w_vld_fx5[1] && !`SPC7.fgu.fpc.div_finish_int_fb;
19136
19137 // Fdiv
19138 div_special_cancel_f4[7:0] <= tid2onehot(`SPC7.fgu.fac.tid_fx3[2:0]) &
19139 {8{`SPC7.fgu.fac.q_div_default_res_fx3}};
19140 fg_fdiv_valid_fw <= `SPC7.fgu_divide_completion & ~div_special_cancel_f4 &
19141 {8{~`SPC7.fgu.fpc.fpc_fpd_ieee_trap_fb}} &
19142 {8{~`SPC7.fgu.fpc.fpc_fpd_unfin_fb}};
19143
19144
19145 // Used in CCX Stub ?
19146 inst0_e[31:0] <= `SPC7.dec.dec_inst0_d[31:0];
19147 inst1_e[31:0] <= `SPC7.dec.dec_inst1_d[31:0];
19148
19149 // only fgu ops that are not loads/stores
19150 fgu0_e <= `SPC7.dec.del.decode_fgu0_d;
19151 fgu1_e <= `SPC7.dec.del.decode_fgu1_d;
19152
19153 // LSU logic
19154 load_b <= load_m;
19155 load_m <= (load0_e | load1_e);
19156
19157 load0_e <= (`SPC7.dec.dec_decode0_d & `SPC7.dec.del.lsu0_d &
19158 `SPC7.dec.dcd0.dcd_load_d);
19159
19160 load1_e <= (`SPC7.dec.dec_decode1_d & `SPC7.dec.del.lsu1_d &
19161 `SPC7.dec.dcd1.dcd_load_d);
19162
19163 lsu_tid_b[2:0] <= lsu_tid_m[2:0];
19164 lsu_tid_m[2:0] <= lsu_tid_e[2:0];
19165
19166 lsu_complete_m[7:0] <= `SPC7.lsu_complete[7:0];
19167 lsu_complete_b[7:0] <= lsu_complete_m[7:0];
19168
19169 lsu_data_w <= lsu_data_b;
19170
19171 // Divide destination logic ..
19172 sel_divide0_e <= (`SPC7.dec_decode0_d &
19173 ((`SPC7.pku.swl0.vld_d & `SPC7.pku.swl_divide_wait[0]) |
19174 (`SPC7.pku.swl1.vld_d & `SPC7.pku.swl_divide_wait[1]) |
19175 (`SPC7.pku.swl2.vld_d & `SPC7.pku.swl_divide_wait[2]) |
19176 (`SPC7.pku.swl3.vld_d & `SPC7.pku.swl_divide_wait[3])));
19177 sel_divide1_e <= (`SPC7.dec_decode1_d &
19178 ((`SPC7.pku.swl4.vld_d & `SPC7.pku.swl_divide_wait[4]) |
19179 (`SPC7.pku.swl5.vld_d & `SPC7.pku.swl_divide_wait[5]) |
19180 (`SPC7.pku.swl6.vld_d & `SPC7.pku.swl_divide_wait[6]) |
19181 (`SPC7.pku.swl7.vld_d & `SPC7.pku.swl_divide_wait[7])));
19182
19183
19184 dcd_fdest_e <= {`SPC7.dec.del.fdest1_d,`SPC7.dec.del.fdest0_d};
19185 dcd_idest_e <= {`SPC7.dec.del.idest1_d,`SPC7.dec.del.idest0_d};
19186
19187 if (sel_divide0_e) begin // {
19188 div_idest[{1'b0, `SPC7.dec.del.tid0_e[1:0]}] <= dcd_idest_e[0];
19189 div_fdest[{1'b0, `SPC7.dec.del.tid0_e[1:0]}] <= dcd_fdest_e[0];
19190 end // }
19191 if (sel_divide1_e) begin // {
19192 div_idest[{1'b1, `SPC7.dec.del.tid1_e[1:0]}] <= dcd_idest_e[1];
19193 div_fdest[{1'b1, `SPC7.dec.del.tid1_e[1:0]}] <= dcd_fdest_e[1];
19194 end // }
19195
19196
19197 // EX logic
19198 // Save EX tids for later use
19199 ex0_tid_m <= ex0_tid_e;
19200 ex1_tid_m <= ex1_tid_e;
19201 ex0_tid_b <= ex0_tid_m;
19202 ex1_tid_b <= ex1_tid_m;
19203 ex0_tid_w <= ex0_tid_b;
19204 ex1_tid_w <= ex1_tid_b;
19205
19206 // EX Flush conditions
19207 ex_flush_w <= {ex_flush_b | {{4{(`SPC7.dec.dec_flush_b[1] |
19208 `SPC7.tlu_flush_exu_b[1])}},
19209 {4{(`SPC7.dec.dec_flush_b[0] |
19210 `SPC7.tlu_flush_exu_b[0])}}}};
19211
19212 ex_flush_b <= {{4{`SPC7.dec.dec_flush_m[1]}},
19213 {4{`SPC7.dec.dec_flush_m[0]}}};
19214
19215
19216 // ex_valid_f4 valid will only fire on return
19217 return_f4 <= return_w & ~(`SPC7.tlu_flush_ifu & real_exception);
19218 ex_valid_w <= ex_valid_b;
19219
19220 // Cancel EX valid if it turns out to be asr/asi access for this tid
19221
19222 ex_valid_b <= ex_valid_m & ~ex_asr_access;
19223
19224
19225 ex_valid_m <= { (ex1_tid_e == 2'h3) && ex1_valid_e,
19226 (ex1_tid_e == 2'h2) && ex1_valid_e,
19227 (ex1_tid_e == 2'h1) && ex1_valid_e,
19228 (ex1_tid_e == 2'h0) && ex1_valid_e,
19229 (ex0_tid_e == 2'h3) && ex0_valid_e,
19230 (ex0_tid_e == 2'h2) && ex0_valid_e,
19231 (ex0_tid_e == 2'h1) && ex0_valid_e,
19232 (ex0_tid_e == 2'h0) && ex0_valid_e};
19233
19234
19235 // TLU delays for done and retries
19236 tlu_ccr_cwp_0_valid_last <= `SPC7.tlu.tlu_ccr_cwp_0_valid;
19237 tlu_ccr_cwp_1_valid_last <= `SPC7.tlu.tlu_ccr_cwp_1_valid;
19238
19239
19240end // END posedge gclk
19241
19242// Return instruction is separated out of ex*_valid because CWP update is in
19243// W+1 for return new window is not available for IRF scan (nas_pipe) until
19244// W+2
19245assign return0 = `SPC7.exu0.rml.return_w &
19246 `SPC7.exu0.rml.inst_vld_w;
19247assign return1 = `SPC7.exu1.rml.return_w &
19248 `SPC7.exu1.rml.inst_vld_w;
19249assign return_w = {(ex1_tid_w == 2'h3) && return1,
19250 (ex1_tid_w == 2'h2) && return1,
19251 (ex1_tid_w == 2'h1) && return1,
19252 (ex1_tid_w == 2'h0) && return1,
19253 (ex0_tid_w == 2'h3) && return0,
19254 (ex0_tid_w == 2'h2) && return0,
19255 (ex0_tid_w == 2'h1) && return0,
19256 (ex0_tid_w == 2'h0) && return0};
19257
19258
19259// Cancel EX valid if it turns out that exception (tlu flush) taken for
19260// this tid
19261
19262// exu check bus
19263assign ex0_tid_e = `SPC7.exu0.ect_tid_lth_e[1:0];
19264assign ex0_valid_e = `SPC7.dec.dec_valid_e[0] & ~fgu0_e & ~load0_e &
19265 ~retry0_e & ~done0_e;
19266assign ex1_tid_e = `SPC7.exu1.ect_tid_lth_e[1:0];
19267assign ex1_valid_e = `SPC7.dec.dec_valid_e[1] & ~fgu1_e & ~load1_e &
19268 ~retry1_e & ~done1_e;
19269
19270assign ex_asr_valid = `SPC7.lsu.dcc.asi_store_m & `SPC7.lsu.dcc.asi_sync_m ;
19271
19272assign ex_asr_access ={(`SPC7.lsu.dcc.dcc_tid_m[2:0]==3'h7) & ex_asr_valid,
19273 (`SPC7.lsu.dcc.dcc_tid_m[2:0]==3'h6) & ex_asr_valid,
19274 (`SPC7.lsu.dcc.dcc_tid_m[2:0]==3'h5) & ex_asr_valid,
19275 (`SPC7.lsu.dcc.dcc_tid_m[2:0]==3'h4) & ex_asr_valid,
19276 (`SPC7.lsu.dcc.dcc_tid_m[2:0]==3'h3) & ex_asr_valid,
19277 (`SPC7.lsu.dcc.dcc_tid_m[2:0]==3'h2) & ex_asr_valid,
19278 (`SPC7.lsu.dcc.dcc_tid_m[2:0]==3'h1) & ex_asr_valid,
19279 (`SPC7.lsu.dcc.dcc_tid_m[2:0]==3'h0) & ex_asr_valid};
19280
19281
19282// EXU valid is ex_valid_w, except flushes, delayed return, traps, and stfsr
19283// real_exception added because tlu_flush_ifu activates for second redirect
19284// of retry if TPC and TNPC are not verified as sequential
19285assign real_exception =
19286 {{4 {`SPC7.tlu.fls1.dec_exc_w |
19287 `SPC7.tlu.fls1.exu_exc_w |
19288 `SPC7.tlu.fls1.lsu_exc_w |
19289 `SPC7.tlu.fls1.bsee_req_w}},
19290 {4 {`SPC7.tlu.fls0.dec_exc_w |
19291 `SPC7.tlu.fls0.exu_exc_w |
19292 `SPC7.tlu.fls0.lsu_exc_w |
19293 `SPC7.tlu.fls0.bsee_req_w}}};
19294
19295// Do not assert ex_valid for block store instructions
19296wire [7:0] block_store_first_at_w =
19297 {`SPC7.lsu.sbs7.bst_pend & `SPC7.lsu.sbs7.blk_inst_w,
19298 `SPC7.lsu.sbs6.bst_pend & `SPC7.lsu.sbs6.blk_inst_w,
19299 `SPC7.lsu.sbs5.bst_pend & `SPC7.lsu.sbs5.blk_inst_w,
19300 `SPC7.lsu.sbs4.bst_pend & `SPC7.lsu.sbs4.blk_inst_w,
19301 `SPC7.lsu.sbs3.bst_pend & `SPC7.lsu.sbs3.blk_inst_w,
19302 `SPC7.lsu.sbs2.bst_pend & `SPC7.lsu.sbs2.blk_inst_w,
19303 `SPC7.lsu.sbs1.bst_pend & `SPC7.lsu.sbs1.blk_inst_w,
19304 `SPC7.lsu.sbs0.bst_pend & `SPC7.lsu.sbs0.blk_inst_w};
19305
19306// But inject a valid for a block store that's done...
19307reg [7:0] block_store_w;
19308always @(posedge `BENCH_SPC7_GCLK) begin
19309 block_store_w[7:0] <= `SPC7.lsu.lsu_block_store_b[7:0];
19310 lsu_trap_flush_d <= `SPC7.lsu_trap_flush[7:0];
19311end
19312
19313wire [7:0] block_store_inject_at_w =
19314 ~`SPC7.lsu.lsu_block_store_b[7:0] &
19315 block_store_w[7:0] &
19316 {~`SPC7.lsu.sbs7.bst_kill,
19317 ~`SPC7.lsu.sbs6.bst_kill,
19318 ~`SPC7.lsu.sbs5.bst_kill,
19319 ~`SPC7.lsu.sbs4.bst_kill,
19320 ~`SPC7.lsu.sbs3.bst_kill,
19321 ~`SPC7.lsu.sbs2.bst_kill,
19322 ~`SPC7.lsu.sbs1.bst_kill,
19323 ~`SPC7.lsu.sbs0.bst_kill};
19324
19325assign ex_valid = (((ex_valid_w & ~ex_flush_w & ~return_w & ~block_store_first_at_w & ~exception_w &
19326 ~({{4{`SPC7.tlu.fls1.exu_exc_b & `SPC7.tlu.fls1.beat_two_b}},
19327 {4{`SPC7.tlu.fls0.exu_exc_b & `SPC7.tlu.fls0.beat_two_b}}}) &
19328 ~{(`SPC7.fgu.fac.tid_fx3[2:0]==3'h7) & `SPC7.fgu.fpc.fsr_store_fx3,
19329 (`SPC7.fgu.fac.tid_fx3[2:0]==3'h6) & `SPC7.fgu.fpc.fsr_store_fx3,
19330 (`SPC7.fgu.fac.tid_fx3[2:0]==3'h5) & `SPC7.fgu.fpc.fsr_store_fx3,
19331 (`SPC7.fgu.fac.tid_fx3[2:0]==3'h4) & `SPC7.fgu.fpc.fsr_store_fx3,
19332 (`SPC7.fgu.fac.tid_fx3[2:0]==3'h3) & `SPC7.fgu.fpc.fsr_store_fx3,
19333 (`SPC7.fgu.fac.tid_fx3[2:0]==3'h2) & `SPC7.fgu.fpc.fsr_store_fx3,
19334 (`SPC7.fgu.fac.tid_fx3[2:0]==3'h1) & `SPC7.fgu.fpc.fsr_store_fx3,
19335 (`SPC7.fgu.fac.tid_fx3[2:0]==3'h0) & `SPC7.fgu.fpc.fsr_store_fx3}) |
19336 block_store_inject_at_w) &
19337 ~(`SPC7.tlu_flush_ifu & real_exception)) | return_f4;
19338
19339assign exception_w = {{4 {`SPC7.tlu.fls1.exc_for_w}} |
19340 `SPC7.tlu.fls1.bsee_req[3:0] |
19341 `SPC7.tlu.fls1.pdist_ecc_w[3:0],
19342 {4 {`SPC7.tlu.fls0.exc_for_w}} |
19343 `SPC7.tlu.fls0.bsee_req[3:0] |
19344 `SPC7.tlu.fls0.pdist_ecc_w[3:0]};
19345
19346// imul check bus - includes imul, save, restore instructions
19347assign imul_valid = {(`SPC7.exu1.ect_tid_lth_w[1:0]== 2'h3) & fgu_valid_fb1,
19348 (`SPC7.exu1.ect_tid_lth_w[1:0]== 2'h2) & fgu_valid_fb1,
19349 (`SPC7.exu1.ect_tid_lth_w[1:0]== 2'h1) & fgu_valid_fb1,
19350 (`SPC7.exu1.ect_tid_lth_w[1:0]== 2'h0) & fgu_valid_fb1,
19351 (`SPC7.exu0.ect_tid_lth_w[1:0]== 2'h3) & fgu_valid_fb0,
19352 (`SPC7.exu0.ect_tid_lth_w[1:0]== 2'h2) & fgu_valid_fb0,
19353 (`SPC7.exu0.ect_tid_lth_w[1:0]== 2'h1) & fgu_valid_fb0,
19354 (`SPC7.exu0.ect_tid_lth_w[1:0]== 2'h0) & fgu_valid_fb0};
19355
19356// qualify this signal with fgu_err. If fgu_err is encountered, deassert
19357//fg_cond_fb, so we don't send a step to Riesling.
19358
19359// FGU conditions
19360wire fg_cond_fb_pre_err = `SPC7.fgu.fpc.fpc_w1_ul_vld_fb | fcc_valid_fb |
19361 (fmov_valid_fb & ~fg_flush_fb) |
19362 (`SPC7.fgu.fac.fsr_w1_vld_fb[1]); // covers ST(X)FSR, which clears FSR.ftt
19363
19364assign fg_cond_fb = fg_cond_fb_pre_err & ~fgu_err_fb;
19365
19366// Idiv/Fdiv signals
19367
19368assign fgu_idiv_valid = fg_div_valid & div_idest;
19369
19370
19371assign fgu_fdiv_valid = fg_fdiv_valid_fw & div_fdest;
19372
19373
19374// Lsu signals needed to check lsu results
19375
19376assign lsu_valid = lsu_check | lsu_data_w;
19377
19378assign fg_div_valid = `SPC7.fgu_divide_completion & ~div_special_cancel_f4;
19379
19380// State machine asserts lsu_check for LD hit/miss
19381always @(posedge `BENCH_SPC7_GCLK) begin
19382 for (i=0; i<=7;i=i+1) begin // {
19383 lsu_check[i] <= 1'b0;
19384 case (lsu_state[i])
19385 1'b0: // IDLE state
19386 begin
19387 // LD hit
19388 if (lsu_ld_valid & lsu_tid_dec_b[i] & load_b) begin
19389 lsu_check[i] <= 1'b1;
19390 lsu_state[i] <= 1'b0; // IDLE state
19391 end
19392 // LD miss - normal case
19393 else if (lsu_ld_valid & lsu_tid_dec_b[i] & lsu_complete_b[i])
19394 begin
19395 lsu_check[i] <= 1'b1;
19396 lsu_state[i] <= 1'b0; // IDLE state
19397 end
19398 // LD miss - LDD or Block LD or SWAP
19399 else if (lsu_ld_valid & lsu_tid_dec_b[i]) begin
19400 lsu_state[i] <= 1'b1; // VALID state
19401 end
19402// Added a new term to handle STB uncorrectable errors on atomic or asi stores that are synced
19403//Send a complete if an atomic is squashed.
19404//lsu_trap_flush is asserted a cycle after the block_store_kill is asserted
19405 else if (`SPC7.lsu.dcc.sync_st[i] & `SPC7.lsu_block_store_kill[i] & ~lsu_trap_flush_d[i])
19406 begin
19407 lsu_check[i] <= 1'b1;
19408 lsu_state[i] <= 1'b0; // IDLE state
19409 end
19410 else begin
19411 lsu_state[i] <= lsu_state[i];
19412 end
19413
19414 end
19415 1'b1: // VALID state
19416 begin
19417 if ((lsu_complete_b[i])) begin
19418 lsu_check[i] <= 1'b1;
19419 lsu_state[i] <= 1'b0; // IDLE state
19420 end
19421 else begin
19422 lsu_state[i] <= lsu_state[i];
19423 end
19424 end
19425 endcase
19426 end // }
19427end
19428
19429
19430assign lsu_tid = `SPC7.lsu.dcc.ld_tid_b[2:0];
19431// Don't assert LSU_complete in case of dtlb or irf errors
19432
19433assign lsu_valid_b = (`SPC7.lsu.dcc.pref_inst_b &
19434 ~(dec_flush_lb | `SPC7.lsu.dcc.pipe_flush_b |
19435 `SPC7.lsu_dtdp_err_b | `SPC7.lsu_dttp_err_b |
19436 `SPC7.lsu_dtmh_err_b | `SPC7.lsu.dcc.exu_error_b));
19437
19438assign lsu_data_b[7:0] = { (lsu_tid == 3'h7) & lsu_valid_b,
19439 (lsu_tid == 3'h6) & lsu_valid_b,
19440 (lsu_tid == 3'h5) & lsu_valid_b,
19441 (lsu_tid == 3'h4) & lsu_valid_b,
19442 (lsu_tid == 3'h3) & lsu_valid_b,
19443 (lsu_tid == 3'h2) & lsu_valid_b,
19444 (lsu_tid == 3'h1) & lsu_valid_b,
19445 (lsu_tid == 3'h0) & lsu_valid_b};
19446
19447assign lsu_tid_dec_b[0] = `SPC7.lsu.dcc.ld_tid_b[2:0] == 3'd0;
19448assign lsu_tid_dec_b[1] = `SPC7.lsu.dcc.ld_tid_b[2:0] == 3'd1;
19449assign lsu_tid_dec_b[2] = `SPC7.lsu.dcc.ld_tid_b[2:0] == 3'd2;
19450assign lsu_tid_dec_b[3] = `SPC7.lsu.dcc.ld_tid_b[2:0] == 3'd3;
19451assign lsu_tid_dec_b[4] = `SPC7.lsu.dcc.ld_tid_b[2:0] == 3'd4;
19452assign lsu_tid_dec_b[5] = `SPC7.lsu.dcc.ld_tid_b[2:0] == 3'd5;
19453assign lsu_tid_dec_b[6] = `SPC7.lsu.dcc.ld_tid_b[2:0] == 3'd6;
19454assign lsu_tid_dec_b[7] = `SPC7.lsu.dcc.ld_tid_b[2:0] == 3'd7;
19455
19456assign lsu_ld_valid = (`SPC7.lsu.dcc.exu_ld_vld_b |`SPC7.lsu.dcc.fgu_fld_vld_b) &
19457 ~(`SPC7.lsu.dcc.flush_all_b & `SPC7.lsu.dcc.ld_inst_vld_b);
19458assign dec_flush_lb = `SPC7.dec.dec_flush_lb | `SPC7.tlu_flush_lsu_b;
19459
19460
19461// LSU interface to CCX stub
19462
19463assign exu_lsu_valid = `SPC7.dec.del.lsu_valid_e;
19464assign exu_lsu_addr[47:0] = `SPC7.exu_lsu_address_e[47:0];
19465assign exu_lsu_tid[2:0] = lsu_tid_e[2:0];
19466assign exu_lsu_regid[4:0] = `SPC7.dec.dec_lsu_rd_e[4:0];
19467assign exu_lsu_data[63:0] = `SPC7.exu_lsu_store_data_e[63:0];
19468assign exu_lsu_instr[31:0] = ({32{`SPC7.dec.dec_lsu_sel0_e}} &
19469 inst0_e[31:0]) |
19470 ({32{~`SPC7.dec.dec_lsu_sel0_e}} &
19471 inst1_e[31:0]);
19472assign ld_inst_d = `SPC7.dec.dec_ld_inst_d;
19473
19474///////////////////////////////////////////////////////////////////////////////
19475// Debugging Instruction Opcodes Pipeline
19476///////////////////////////////////////////////////////////////////////////////
19477
19478
19479 reg [31:0] op_0_w;
19480 reg [31:0] op_1_w;
19481 reg [31:0] op_2_w;
19482 reg [31:0] op_3_w;
19483 reg [31:0] op_4_w;
19484 reg [31:0] op_5_w;
19485 reg [31:0] op_6_w;
19486 reg [31:0] op_7_w;
19487
19488 reg [31:0] op0_b;
19489 reg [31:0] op0_m;
19490 reg [31:0] op0_e;
19491 reg [31:0] op0_d;
19492
19493 reg [31:0] op1_b;
19494 reg [31:0] op1_m;
19495 reg [31:0] op1_e;
19496 reg [31:0] op1_d;
19497
19498 reg [255:0] inst0_string_w;
19499 reg [255:0] inst0_string_b;
19500 reg [255:0] inst0_string_m;
19501 reg [255:0] inst0_string_e;
19502 reg [255:0] inst0_string_d;
19503
19504 reg [255:0] inst1_string_w;
19505 reg [255:0] inst1_string_b;
19506 reg [255:0] inst1_string_m;
19507 reg [255:0] inst1_string_e;
19508 reg [255:0] inst1_string_d;
19509
19510 reg [255:0] inst0_string_p;
19511 reg [255:0] inst1_string_p;
19512 reg [255:0] inst2_string_p;
19513 reg [255:0] inst3_string_p;
19514 reg [255:0] inst4_string_p;
19515 reg [255:0] inst5_string_p;
19516 reg [255:0] inst6_string_p;
19517 reg [255:0] inst7_string_p;
19518
19519initial begin
19520 op_0_w = 32'b0;
19521 op_1_w = 32'b0;
19522 op_2_w = 32'b0;
19523 op_3_w = 32'b0;
19524 op_4_w = 32'b0;
19525 op_5_w = 32'b0;
19526 op_6_w = 32'b0;
19527 op_7_w = 32'b0;
19528end
19529
19530always @(posedge `BENCH_SPC7_GCLK) begin // {
19531 op_0_w <= ({32 { select_pc_b[0]}} & op0_b[31:0]) |
19532 ({32 {~select_pc_b[0]}} & op_0_w[31:0]) ;
19533 op_1_w <= ({32 { select_pc_b[1]}} & op0_b[31:0]) |
19534 ({32 {~select_pc_b[1]}} & op_1_w[31:0]) ;
19535 op_2_w <= ({32 { select_pc_b[2]}} & op0_b[31:0]) |
19536 ({32 {~select_pc_b[2]}} & op_2_w[31:0]) ;
19537 op_3_w <= ({32 { select_pc_b[3]}} & op0_b[31:0]) |
19538 ({32 {~select_pc_b[3]}} & op_3_w[31:0]) ;
19539 op_4_w <= ({32 { select_pc_b[4]}} & op1_b[31:0]) |
19540 ({32 {~select_pc_b[4]}} & op_4_w[31:0]) ;
19541 op_5_w <= ({32 { select_pc_b[5]}} & op1_b[31:0]) |
19542 ({32 {~select_pc_b[5]}} & op_5_w[31:0]) ;
19543 op_6_w <= ({32 { select_pc_b[6]}} & op1_b[31:0]) |
19544 ({32 {~select_pc_b[6]}} & op_6_w[31:0]) ;
19545 op_7_w <= ({32 { select_pc_b[7]}} & op1_b[31:0]) |
19546 ({32 {~select_pc_b[7]}} & op_7_w[31:0]) ;
19547
19548 op0_b <= op0_m;
19549 op0_m <= op0_e;
19550 op0_e <= op0_d;
19551 op0_d <= `SPC7.dec.ded0.decode_mux[31:0];
19552
19553 op1_b <= op1_m;
19554 op1_m <= op1_e;
19555 op1_e <= op1_d;
19556 op1_d <= `SPC7.dec.ded1.decode_mux[31:0];
19557
19558 inst0_string_w<=inst0_string_b;
19559 inst0_string_b<=inst0_string_m;
19560 inst0_string_m<=inst0_string_e;
19561 inst0_string_e<=inst0_string_d;
19562 inst0_string_d<=xlate(`SPC7.dec.ded0.decode_mux[31:0]);
19563
19564 inst1_string_w<=inst1_string_b;
19565 inst1_string_b<=inst1_string_m;
19566 inst1_string_m<=inst1_string_e;
19567 inst1_string_e<=inst1_string_d;
19568 inst1_string_d<=xlate(`SPC7.dec.ded1.decode_mux[31:0]);
19569
19570// instructions for each thread at pick
19571 inst0_string_p<=xlate(`SPC7.ifu_ibu.ibf0.buf0_in[31:0]);
19572 inst1_string_p<=xlate(`SPC7.ifu_ibu.ibf1.buf0_in[31:0]);
19573 inst2_string_p<=xlate(`SPC7.ifu_ibu.ibf2.buf0_in[31:0]);
19574 inst3_string_p<=xlate(`SPC7.ifu_ibu.ibf3.buf0_in[31:0]);
19575 inst4_string_p<=xlate(`SPC7.ifu_ibu.ibf4.buf0_in[31:0]);
19576 inst5_string_p<=xlate(`SPC7.ifu_ibu.ibf5.buf0_in[31:0]);
19577 inst6_string_p<=xlate(`SPC7.ifu_ibu.ibf6.buf0_in[31:0]);
19578 inst7_string_p<=xlate(`SPC7.ifu_ibu.ibf7.buf0_in[31:0]);
19579
19580end //}
19581
19582///////////////////////////////////////////////////////////////////////////////
19583// Functions
19584///////////////////////////////////////////////////////////////////////////////
19585function [2:0] onehot2tid;
19586 input [7:0] onehot;
19587
19588 begin
19589
19590 if (onehot[7:0]==8'b00000001) onehot2tid[2:0] = 3'b000;
19591 else if (onehot[7:0]==8'b00000010) onehot2tid[2:0] = 3'b001;
19592 else if (onehot[7:0]==8'b00000100) onehot2tid[2:0] = 3'b010;
19593 else if (onehot[7:0]==8'b00001000) onehot2tid[2:0] = 3'b011;
19594 else if (onehot[7:0]==8'b00010000) onehot2tid[2:0] = 3'b100;
19595 else if (onehot[7:0]==8'b00100000) onehot2tid[2:0] = 3'b101;
19596 else if (onehot[7:0]==8'b01000000) onehot2tid[2:0] = 3'b110;
19597 else if (onehot[7:0]==8'b10000000) onehot2tid[2:0] = 3'b111;
19598
19599 end
19600endfunction
19601
19602function [7:0] tid2onehot;
19603 input [2:0] tid;
19604
19605 begin
19606
19607 if (tid[2:0]==3'b000) tid2onehot[7:0] = 8'b00000001;
19608 else if (tid[2:0]==3'b001) tid2onehot[7:0] = 8'b00000010;
19609 else if (tid[2:0]==3'b010) tid2onehot[7:0] = 8'b00000100;
19610 else if (tid[2:0]==3'b011) tid2onehot[7:0] = 8'b00001000;
19611 else if (tid[2:0]==3'b100) tid2onehot[7:0] = 8'b00010000;
19612 else if (tid[2:0]==3'b101) tid2onehot[7:0] = 8'b00100000;
19613 else if (tid[2:0]==3'b110) tid2onehot[7:0] = 8'b01000000;
19614 else if (tid[2:0]==3'b111) tid2onehot[7:0] = 8'b10000000;
19615
19616 end
19617endfunction
19618
19619//---------------------
19620
19621function [255:0] xlate;
19622 input [31:0] inst;
19623
19624 begin
19625 casex(inst[31:0])
1962632'b10xxxxx110100xxxxx001000011xxxxx : xlate[255:0]="FADDq";
1962732'b10xxxxx110100xxxxx001000111xxxxx : xlate[255:0]="FSUBq";
1962832'b10000xx110101xxxxx001010011xxxxx : xlate[255:0]="FCMPq";
1962932'b10000xx110101xxxxx001010111xxxxx : xlate[255:0]="FCMPEq";
1963032'b10xxxxx110100xxxxx011001101xxxxx : xlate[255:0]="FsTOq";
1963132'b10xxxxx110100xxxxx011001110xxxxx : xlate[255:0]="FdTOq";
1963232'b10xxxxx110100xxxxx010001100xxxxx : xlate[255:0]="FxTOq";
1963332'b10xxxxx110100xxxxx011001100xxxxx : xlate[255:0]="FiTOq";
1963432'b10xxxxx110100xxxxx000000011xxxxx : xlate[255:0]="FMOVq";
1963532'b10xxxxx110100xxxxx000000111xxxxx : xlate[255:0]="FNEGq";
1963632'b10xxxxx110100xxxxx000001011xxxxx : xlate[255:0]="FABSq";
1963732'b10xxxxx110100xxxxx001001011xxxxx : xlate[255:0]="FMULq";
1963832'b10xxxxx110100xxxxx001101110xxxxx : xlate[255:0]="FdMULq";
1963932'b10xxxxx110100xxxxx001001111xxxxx : xlate[255:0]="FDIVq";
1964032'b10xxxxx110100xxxxx000101011xxxxx : xlate[255:0]="FSQRTq";
1964132'b10xxxxx1101010xxxx0xx100111xxxxx : xlate[255:0]="FMOVrQa";
1964232'b10xxxxx1101010xxxx0x1x00111xxxxx : xlate[255:0]="FMOVrQb";
1964332'b10xxxxx110100xxxxx011010011xxxxx : xlate[255:0]="FqTOi";
1964432'b10xxxxx110100xxxxx010000011xxxxx : xlate[255:0]="FqTOx";
1964532'b10xxxxx110100xxxxx011000111xxxxx : xlate[255:0]="FqTOs";
1964632'b10xxxxx110100xxxxx011001011xxxxx : xlate[255:0]="FqTOd";
1964732'b11xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQF";
1964832'b11xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFi";
1964932'b11xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQFA";
1965032'b11xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFAi";
1965132'b11xxxxx100110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFi";
1965232'b11xxxxx100110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQF";
1965332'b11xxxxx110110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQFA";
1965432'b11xxxxx110110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFAi";
1965532'b10xxxxx1101010xxxxxxx000011xxxxx : xlate[255:0]="FMOVQcc";
1965632'b10xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADD";
1965732'b10xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDcc";
1965832'b10xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDC";
1965932'b10xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDCcc";
1966032'b10xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDi";
1966132'b10xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDcci";
1966232'b10xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCi";
1966332'b10xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCcci";
1966432'b00x0xx1011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr1";
1966532'b00x0x1x011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr2";
1966632'b00xx000110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfccA";
1966732'b00xx1xx110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc1";
1966832'b00xxx1x110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc2";
1966932'b00xxxx1110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc3";
1967032'b00xx000101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfccA";
1967132'b00xx1xx101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc1";
1967232'b00xxx1x101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc2";
1967332'b00xxxx1101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc3";
1967432'b00xx000010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BiccA";
1967532'b00xx1xx010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc1";
1967632'b00xxx1x010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc2";
1967732'b00xxxx1010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc3";
1967832'b00xx000001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPccA";
1967932'b00xx1xx001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc1";
1968032'b00xxx1x001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc2";
1968132'b00xxxx1001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc3";
1968232'b01xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="CALL";
1968332'b11xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASA";
1968432'b11xxxxx111110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASXA";
1968532'b11xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASAi";
1968632'b11xxxxx111110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASXAi";
1968732'b10xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIV";
1968832'b10xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIV";
1968932'b10xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVcc";
1969032'b10xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVcc";
1969132'b10xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVi";
1969232'b10xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVi";
1969332'b10xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVcci";
1969432'b10xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVcci";
1969532'b1000000111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="DONE";
1969632'b1000001111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RETRY";
1969732'b10xxxxx110100xxxxx001000001xxxxx : xlate[255:0]="FADDs";
1969832'b10xxxxx110100xxxxx001000010xxxxx : xlate[255:0]="FADDd";
1969932'b10xxxxx110100xxxxx001000101xxxxx : xlate[255:0]="FSUBs";
1970032'b10xxxxx110100xxxxx001000110xxxxx : xlate[255:0]="FSUBd";
1970132'b10000xx110101xxxxx001010001xxxxx : xlate[255:0]="FCMPs";
1970232'b10000xx110101xxxxx001010010xxxxx : xlate[255:0]="FCMPd";
1970332'b10000xx110101xxxxx001010101xxxxx : xlate[255:0]="FCMPEs";
1970432'b10000xx110101xxxxx001010110xxxxx : xlate[255:0]="FCMPEd";
1970532'b10xxxxx110100xxxxx010000001xxxxx : xlate[255:0]="FsTOx";
1970632'b10xxxxx110100xxxxx010000010xxxxx : xlate[255:0]="FdTOx";
1970732'b10xxxxx110100xxxxx011010001xxxxx : xlate[255:0]="FsTOi";
1970832'b10xxxxx110100xxxxx011010010xxxxx : xlate[255:0]="FdTOi";
1970932'b10xxxxx110100xxxxx011001001xxxxx : xlate[255:0]="FsTOd";
1971032'b10xxxxx110100xxxxx011000110xxxxx : xlate[255:0]="FdTOs";
1971132'b10xxxxx110100xxxxx010000100xxxxx : xlate[255:0]="FxTOs";
1971232'b10xxxxx110100xxxxx010001000xxxxx : xlate[255:0]="FxTOd";
1971332'b10xxxxx110100xxxxx011000100xxxxx : xlate[255:0]="FiTOs";
1971432'b10xxxxx110100xxxxx011001000xxxxx : xlate[255:0]="FiTOd";
1971532'b10xxxxx110100xxxxx000000001xxxxx : xlate[255:0]="FMOVs";
1971632'b10xxxxx110100xxxxx000000010xxxxx : xlate[255:0]="FMOVd";
1971732'b10xxxxx110100xxxxx000000101xxxxx : xlate[255:0]="FNEGs";
1971832'b10xxxxx110100xxxxx000000110xxxxx : xlate[255:0]="FNEGd";
1971932'b10xxxxx110100xxxxx000001001xxxxx : xlate[255:0]="FABSs";
1972032'b10xxxxx110100xxxxx000001010xxxxx : xlate[255:0]="FABSd";
1972132'b10xxxxx110100xxxxx001001001xxxxx : xlate[255:0]="FMULs";
1972232'b10xxxxx110100xxxxx001001010xxxxx : xlate[255:0]="FMULd";
1972332'b10xxxxx110100xxxxx001101001xxxxx : xlate[255:0]="FsMULd";
1972432'b10xxxxx110100xxxxx001001101xxxxx : xlate[255:0]="FDIVs";
1972532'b10xxxxx110100xxxxx001001110xxxxx : xlate[255:0]="FDIVd";
1972632'b10xxxxx110100xxxxx000101001xxxxx : xlate[255:0]="FSQRTs";
1972732'b10xxxxx110100xxxxx000101010xxxxx : xlate[255:0]="FSQRTd";
1972832'b10xxxxx111011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSH";
1972932'b10xxxxx111011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="FLUSHi";
1973032'b10xxxxx101011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSHw";
1973132'b10xxxxx111000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="JMPL";
1973232'b10xxxxx111000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="JMPLi";
1973332'b11xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDF";
1973432'b11xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDF";
1973532'b1100000100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFSR";
1973632'b1100001100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXFSR";
1973732'b11xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFi";
1973832'b11xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFi";
1973932'b1100000100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFSRi";
1974032'b1100001100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXFSRi";
1974132'b11xxxxx110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFA";
1974232'b11xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDFA";
1974332'b11xxxxx110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFAi";
1974432'b11xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFAi";
1974532'b11xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSB";
1974632'b11xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSH";
1974732'b11xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSW";
1974832'b11xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUB";
1974932'b11xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUH";
1975032'b11xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUW";
1975132'b11xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDX";
1975232'b11xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDD";
1975332'b11xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBi";
1975432'b11xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHi";
1975532'b11xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWi";
1975632'b11xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBi";
1975732'b11xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHi";
1975832'b11xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWi";
1975932'b11xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXi";
1976032'b11xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDi";
1976132'b11xxxxx011001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSBA";
1976232'b11xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSHA";
1976332'b11xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSWA";
1976432'b11xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUBA";
1976532'b11xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUHA";
1976632'b11xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUWA";
1976732'b11xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXA";
1976832'b11xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDA";
1976932'b11xxxxx011001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBAi";
1977032'b11xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHAi";
1977132'b11xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWAi";
1977232'b11xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBAi";
1977332'b11xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHAi";
1977432'b11xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWAi";
1977532'b11xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXAi";
1977632'b11xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDAi";
1977732'b11xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUB";
1977832'b11xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBi";
1977932'b11xxxxx011101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUBA";
1978032'b11xxxxx011101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBAi";
1978132'b10xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="AND";
1978232'b10xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDcc";
1978332'b10xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDN";
1978432'b10xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDNcc";
1978532'b10xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="OR";
1978632'b10xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORcc";
1978732'b10xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORN";
1978832'b10xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORNcc";
1978932'b10xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XOR";
1979032'b10xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XORcc";
1979132'b10xxxxx000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNOR";
1979232'b10xxxxx010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNORcc";
1979332'b10xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDi";
1979432'b10xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDcci";
1979532'b10xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNi";
1979632'b10xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNcci";
1979732'b10xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORi";
1979832'b10xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORcci";
1979932'b10xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNi";
1980032'b10xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNcci";
1980132'b10xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORi";
1980232'b10xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORcci";
1980332'b10xxxxx000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORi";
1980432'b10xxxxx010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORcci";
1980532'b1000000101000011111xxxxxxxxxxxxx : xlate[255:0]="MEMBAR";
1980632'b1000000101000011110xxxxxxxxxxxxx : xlate[255:0]="STBAR";
1980732'b10xxxxx101000000000xxxxxxxxxxxxx : xlate[255:0]="RDY";
1980832'b10xxxxx101000000100xxxxxxxxxxxxx : xlate[255:0]="RDCCR";
1980932'b10xxxxx101000000110xxxxxxxxxxxxx : xlate[255:0]="RDASI";
1981032'b10xxxxx101000001000xxxxxxxxxxxxx : xlate[255:0]="RDTICK";
1981132'b10xxxxx101000001010xxxxxxxxxxxxx : xlate[255:0]="RDPC";
1981232'b10xxxxx101000001100xxxxxxxxxxxxx : xlate[255:0]="RDFPRS";
1981332'b10xxxxx101000100110xxxxxxxxxxxxx : xlate[255:0]="RDGSR";
1981432'b10xxxxx101000100000xxxxxxxxxxxxx : xlate[255:0]="RDPCR";
1981532'b10xxxxx101000100010xxxxxxxxxxxxx : xlate[255:0]="RDPIC";
1981632'b10xxxxx1101010xxxx0xx000001xxxxx : xlate[255:0]="FMOVSfcc";
1981732'b10xxxxx1101010xxxx1xx000001xxxxx : xlate[255:0]="FMOVSxcc";
1981832'b10xxxxx1101010xxxx0xx000010xxxxx : xlate[255:0]="FMOVDfcc";
1981932'b10xxxxx1101010xxxx1xx000010xxxxx : xlate[255:0]="FMOVDxcc";
1982032'b10xxxxx110101xxxxx0xx100101xxxxx : xlate[255:0]="FMOVrS1";
1982132'b10xxxxx110101xxxxx0x1x00101xxxxx : xlate[255:0]="FMOVrS2";
1982232'b10xxxxx110101xxxxx0xx100110xxxxx : xlate[255:0]="FMOVrD1";
1982332'b10xxxxx110101xxxxx0x1x00110xxxxx : xlate[255:0]="FMOVrD2";
1982432'b10xxxxx1011001xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVxcc";
1982532'b10xxxxx1011001xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVxcci";
1982632'b10xxxxx1011000xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVfcc";
1982732'b10xxxxx1011000xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVfcci";
1982832'b10xxxxx101111xxxxx0xx1xxxxxxxxxx : xlate[255:0]="MOVR1";
1982932'b10xxxxx101111xxxxx0x1xxxxxxxxxxx : xlate[255:0]="MOVR2";
1983032'b10xxxxx101111xxxxx1xx1xxxxxxxxxx : xlate[255:0]="MOVRi1";
1983132'b10xxxxx101111xxxxx1x1xxxxxxxxxxx : xlate[255:0]="MOVRi2";
1983232'b10xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULX";
1983332'b10xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVX";
1983432'b10xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVX";
1983532'b10xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULXi";
1983632'b10xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVXi";
1983732'b10xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVXi";
1983832'b10xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMUL";
1983932'b10xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMUL";
1984032'b10xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMULcc";
1984132'b10xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMULcc";
1984232'b10xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULi";
1984332'b10xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULi";
1984432'b10xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULcci";
1984532'b10xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULcci";
1984632'b10xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULScc";
1984732'b10xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULScci";
1984832'b10xxxxx101110000000xxxxxxxxxxxxx : xlate[255:0]="POPC";
1984932'b10xxxxx101110000001xxxxxxxxxxxxx : xlate[255:0]="POPCi";
1985032'b11xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCH";
1985132'b11xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHi";
1985232'b11xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCHA";
1985332'b11xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHAi";
1985432'b10xxxxx101010xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDPR";
1985532'b10xxxxx101001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDHPR";
1985632'b10xxxxx111001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RETURN";
1985732'b10xxxxx111001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RETURNi";
1985832'b10xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SAVE";
1985932'b10xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SAVEi";
1986032'b10xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RESTORE";
1986132'b10xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RESTOREi";
1986232'b1000000110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="SAVED";
1986332'b1000001110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RESTORED";
1986432'b00xxxxx100xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="SETHI";
1986532'b10xxxxx100101xxxxx00xxxxxxxxxxxx : xlate[255:0]="SLL";
1986632'b10xxxxx100110xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRL";
1986732'b10xxxxx100111xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRA";
1986832'b10xxxxx100101xxxxx01xxxxxxxxxxxx : xlate[255:0]="SLLX";
1986932'b10xxxxx100110xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRLX";
1987032'b10xxxxx100111xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRAX";
1987132'b10xxxxx100101xxxxx10xxxxxxxxxxxx : xlate[255:0]="SLLi";
1987232'b10xxxxx100110xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRLi";
1987332'b10xxxxx100111xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRAi";
1987432'b10xxxxx100101xxxxx11xxxxxxxxxxxx : xlate[255:0]="SLLXi";
1987532'b10xxxxx100110xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRLXi";
1987632'b10xxxxx100111xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRAXi";
1987732'b11xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STF";
1987832'b11xxxxx100111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDF";
1987932'b1100000100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFSR";
1988032'b1100001100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXFSR";
1988132'b11xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFi";
1988232'b11xxxxx100111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFi";
1988332'b1100000100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFSRi";
1988432'b1100001100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXFSRi";
1988532'b11xxxxx110100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFA";
1988632'b11xxxxx110111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDFA";
1988732'b11xxxxx110100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFAi";
1988832'b11xxxxx110111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFAi";
1988932'b11xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STB";
1989032'b11xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STH";
1989132'b11xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STW";
1989232'b11xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STX";
1989332'b11xxxx0000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STD";
1989432'b11xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBi";
1989532'b11xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHi";
1989632'b11xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWi";
1989732'b11xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXi";
1989832'b11xxxx0000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDi";
1989932'b11xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STBA";
1990032'b11xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STHA";
1990132'b11xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STWA";
1990232'b11xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXA";
1990332'b11xxxx0010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDA";
1990432'b11xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBAi";
1990532'b11xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHAi";
1990632'b11xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWAi";
1990732'b11xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXAi";
1990832'b11xxxx0010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDAi";
1990932'b10xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUB";
1991032'b10xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBcc";
1991132'b10xxxxx001100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBC";
1991232'b10xxxxx011100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBCcc";
1991332'b10xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBi";
1991432'b10xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBcci";
1991532'b10xxxxx001100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCi";
1991632'b10xxxxx011100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCcci";
1991732'b11xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAP";
1991832'b11xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPi";
1991932'b11xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAPA";
1992032'b11xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPAi";
1992132'b10xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDcc";
1992232'b10xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDccTV";
1992332'b10xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDcci";
1992432'b10xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDccTVi";
1992532'b10xxxxx100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBcc";
1992632'b10xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBccTV";
1992732'b10xxxxx100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBcci";
1992832'b10xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBccTVi";
1992932'b10xxxxx111010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TCC";
1993032'b10xxxxx111010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TCCi";
1993132'b10xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPR";
1993232'b10xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPRi";
1993332'b10xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRHPR";
1993432'b10xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRHPRi";
1993532'b1000000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRY";
1993632'b1000010110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRCCR";
1993732'b1000011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRASI";
1993832'b1000110110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRFPRS";
1993932'b1010011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRGSR";
1994032'b1010000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPCR";
1994132'b1010001110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPIC";
1994232'b1000000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRYi";
1994332'b1000010110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRCCRi";
1994432'b1000011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRASIi";
1994532'b1000110110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRFPRSi";
1994632'b1010011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRGSRi";
1994732'b1010000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPCRi";
1994832'b1010001110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPICi";
1994932'b1001111110000000001xxxxxxxxxxxxx : xlate[255:0]="SIR";
1995032'b10xxxxx110110xxxxx001010000xxxxx : xlate[255:0]="FPADD16";
1995132'b10xxxxx110110xxxxx001010001xxxxx : xlate[255:0]="FPADD16S";
1995232'b10xxxxx110110xxxxx001010010xxxxx : xlate[255:0]="FPADD32";
1995332'b10xxxxx110110xxxxx001010011xxxxx : xlate[255:0]="FPADD32S";
1995432'b10xxxxx110110xxxxx001010100xxxxx : xlate[255:0]="FPSUB16";
1995532'b10xxxxx110110xxxxx001010101xxxxx : xlate[255:0]="FPSUB16S";
1995632'b10xxxxx110110xxxxx001010110xxxxx : xlate[255:0]="FPSUB32";
1995732'b10xxxxx110110xxxxx001010111xxxxx : xlate[255:0]="FPSUB32S";
1995832'b10xxxxx110110xxxxx000111011xxxxx : xlate[255:0]="FPACK16";
1995932'b10xxxxx110110xxxxx000111010xxxxx : xlate[255:0]="FPACK32";
1996032'b10xxxxx110110xxxxx000111101xxxxx : xlate[255:0]="FPACKFIX";
1996132'b10xxxxx110110xxxxx001001101xxxxx : xlate[255:0]="FEXPAND";
1996232'b10xxxxx110110xxxxx001001011xxxxx : xlate[255:0]="FPMERGE";
1996332'b10xxxxx110110xxxxx000110001xxxxx : xlate[255:0]="FMUL8x16";
1996432'b10xxxxx110110xxxxx000110011xxxxx : xlate[255:0]="FMUL8x16AU";
1996532'b10xxxxx110110xxxxx000110101xxxxx : xlate[255:0]="FMUL8x16AL";
1996632'b10xxxxx110110xxxxx000110110xxxxx : xlate[255:0]="FMUL8SUx16";
1996732'b10xxxxx110110xxxxx000110111xxxxx : xlate[255:0]="FMUL8ULx16";
1996832'b10xxxxx110110xxxxx000111000xxxxx : xlate[255:0]="FMULD8SUx16";
1996932'b10xxxxx110110xxxxx000111001xxxxx : xlate[255:0]="FMULD8ULx16";
1997032'b10xxxxx110110xxxxx000011000xxxxx : xlate[255:0]="ALIGNADDRESS";
1997132'b10xxxxx110110xxxxx000011010xxxxx : xlate[255:0]="ALIGNADDRESS_LITTLE";
1997232'b10xxxxx110110xxxxx000011001xxxxx : xlate[255:0]="BMASK";
1997332'b10xxxxx110110xxxxx001001000xxxxx : xlate[255:0]="FALIGNDATA";
1997432'b10xxxxx110110xxxxx001001100xxxxx : xlate[255:0]="BSHUFFLE";
1997532'b10xxxxx110110xxxxx001100000xxxxx : xlate[255:0]="FZERO";
1997632'b10xxxxx110110xxxxx001100001xxxxx : xlate[255:0]="FZEROS";
1997732'b10xxxxx110110xxxxx001111110xxxxx : xlate[255:0]="FONE";
1997832'b10xxxxx110110xxxxx001111111xxxxx : xlate[255:0]="FONES";
1997932'b10xxxxx110110xxxxx001110100xxxxx : xlate[255:0]="FSRC1";
1998032'b10xxxxx110110xxxxx001110101xxxxx : xlate[255:0]="FSRC1S";
1998132'b10xxxxx110110xxxxx001111000xxxxx : xlate[255:0]="FSRC2";
1998232'b10xxxxx110110xxxxx001111001xxxxx : xlate[255:0]="FSRC2S";
1998332'b10xxxxx110110xxxxx001101010xxxxx : xlate[255:0]="FNOT1";
1998432'b10xxxxx110110xxxxx001101011xxxxx : xlate[255:0]="FNOT1S";
1998532'b10xxxxx110110xxxxx001100110xxxxx : xlate[255:0]="FNOT2";
1998632'b10xxxxx110110xxxxx001100111xxxxx : xlate[255:0]="FNOT2S";
1998732'b10xxxxx110110xxxxx001111100xxxxx : xlate[255:0]="FOR";
1998832'b10xxxxx110110xxxxx001111101xxxxx : xlate[255:0]="FORS";
1998932'b10xxxxx110110xxxxx001100010xxxxx : xlate[255:0]="FNOR";
1999032'b10xxxxx110110xxxxx001100011xxxxx : xlate[255:0]="FNORS";
1999132'b10xxxxx110110xxxxx001110000xxxxx : xlate[255:0]="FAND";
1999232'b10xxxxx110110xxxxx001110001xxxxx : xlate[255:0]="FANDS";
1999332'b10xxxxx110110xxxxx001101110xxxxx : xlate[255:0]="FNAND";
1999432'b10xxxxx110110xxxxx001101111xxxxx : xlate[255:0]="FNANDS";
1999532'b10xxxxx110110xxxxx001101100xxxxx : xlate[255:0]="FXOR";
1999632'b10xxxxx110110xxxxx001101101xxxxx : xlate[255:0]="FXORS";
1999732'b10xxxxx110110xxxxx001110010xxxxx : xlate[255:0]="FXNOR";
1999832'b10xxxxx110110xxxxx001110011xxxxx : xlate[255:0]="FXNORS";
1999932'b10xxxxx110110xxxxx001111010xxxxx : xlate[255:0]="FORNOT1";
2000032'b10xxxxx110110xxxxx001111011xxxxx : xlate[255:0]="FORNOT1S";
2000132'b10xxxxx110110xxxxx001110110xxxxx : xlate[255:0]="FORNOT2";
2000232'b10xxxxx110110xxxxx001110111xxxxx : xlate[255:0]="FORNOT2S";
2000332'b10xxxxx110110xxxxx001101000xxxxx : xlate[255:0]="FANDNOT1";
2000432'b10xxxxx110110xxxxx001101001xxxxx : xlate[255:0]="FANDNOT1S";
2000532'b10xxxxx110110xxxxx001100100xxxxx : xlate[255:0]="FANDNOT2";
2000632'b10xxxxx110110xxxxx001100101xxxxx : xlate[255:0]="FANDNOT2S";
2000732'b10xxxxx110110xxxxx000101000xxxxx : xlate[255:0]="FCMPGT16";
2000832'b10xxxxx110110xxxxx000101100xxxxx : xlate[255:0]="FCMPGT32";
2000932'b10xxxxx110110xxxxx000100000xxxxx : xlate[255:0]="FCMPLE16";
2001032'b10xxxxx110110xxxxx000100100xxxxx : xlate[255:0]="FCMPLE32";
2001132'b10xxxxx110110xxxxx000100010xxxxx : xlate[255:0]="FCMPNE16";
2001232'b10xxxxx110110xxxxx000100110xxxxx : xlate[255:0]="FCMPNE32";
2001332'b10xxxxx110110xxxxx000101010xxxxx : xlate[255:0]="FCMPEQ16";
2001432'b10xxxxx110110xxxxx000101110xxxxx : xlate[255:0]="FCMPEQ32";
2001532'b10xxxxx110110xxxxx000111110xxxxx : xlate[255:0]="PDIST";
2001632'b10xxxxx110110xxxxx000000000xxxxx : xlate[255:0]="EDGE8";
2001732'b10xxxxx110110xxxxx000000001xxxxx : xlate[255:0]="EDGE8N";
2001832'b10xxxxx110110xxxxx000000010xxxxx : xlate[255:0]="EDGE8L";
2001932'b10xxxxx110110xxxxx000000011xxxxx : xlate[255:0]="EDGE8LN";
2002032'b10xxxxx110110xxxxx000000100xxxxx : xlate[255:0]="EDGE16";
2002132'b10xxxxx110110xxxxx000000101xxxxx : xlate[255:0]="EDGE16N";
2002232'b10xxxxx110110xxxxx000000110xxxxx : xlate[255:0]="EDGE16L";
2002332'b10xxxxx110110xxxxx000000111xxxxx : xlate[255:0]="EDGE16LN";
2002432'b10xxxxx110110xxxxx000001000xxxxx : xlate[255:0]="EDGE32";
2002532'b10xxxxx110110xxxxx000001001xxxxx : xlate[255:0]="EDGE32N";
2002632'b10xxxxx110110xxxxx000001010xxxxx : xlate[255:0]="EDGE32L";
2002732'b10xxxxx110110xxxxx000001011xxxxx : xlate[255:0]="EDGE32LN";
2002832'b10xxxxx110110xxxxx000010000xxxxx : xlate[255:0]="ARRAY8";
2002932'b10xxxxx110110xxxxx000010010xxxxx : xlate[255:0]="ARRAY16";
2003032'b10xxxxx110110xxxxx000010100xxxxx : xlate[255:0]="ARRAY32";
2003132'b10xxxxx110110xxxxx010000001xxxxx : xlate[255:0]="SIAM";
20032 default : xlate[255:0]="unknown";
20033 endcase
20034 end
20035endfunction // xlate
20036
20037
20038`endif
20039
20040endmodule
20041
20042`endif
20043
20044