Commit | Line | Data |
---|---|---|
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 | ||
39 | module 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 | ||
216 | integer i; | |
217 | integer start_dmiss0; | |
218 | integer start_dmiss1; | |
219 | integer start_dmiss2; | |
220 | integer start_dmiss3; | |
221 | integer start_dmiss4; | |
222 | integer start_dmiss5; | |
223 | integer start_dmiss6; | |
224 | integer start_dmiss7; | |
225 | integer number_dmiss; | |
226 | integer start_imiss0; | |
227 | integer start_imiss1; | |
228 | integer start_imiss2; | |
229 | integer start_imiss3; | |
230 | integer start_imiss4; | |
231 | integer start_imiss5; | |
232 | integer start_imiss6; | |
233 | integer start_imiss7; | |
234 | integer active_imiss0; | |
235 | integer active_imiss1; | |
236 | integer active_imiss2; | |
237 | integer active_imiss3; | |
238 | integer active_imiss4; | |
239 | integer active_imiss5; | |
240 | integer active_imiss6; | |
241 | integer active_imiss7; | |
242 | integer first_imiss0; | |
243 | integer first_imiss1; | |
244 | integer first_imiss2; | |
245 | integer first_imiss3; | |
246 | integer first_imiss4; | |
247 | integer first_imiss5; | |
248 | integer first_imiss6; | |
249 | integer first_imiss7; | |
250 | integer number_imiss; | |
251 | integer clock; | |
252 | integer sum_dmiss_latency; | |
253 | integer sum_imiss_latency; | |
254 | reg spec_dmiss; | |
255 | integer dmiss_cnt; | |
256 | integer imiss_cnt; | |
257 | reg pcx_req; | |
258 | integer l15dmiss_cnt; | |
259 | integer l15imiss_cnt; | |
260 | ||
261 | ||
262 | initial 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 | ||
318 | end //} | |
319 | ||
320 | wire [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 | ||
329 | wire [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}; | |
337 | wire [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 | |
352 | wire [63:0] ctxt_z_tsb_cfg0_reg [7:0]; // 1 per thread | |
353 | wire [63:0] ctxt_z_tsb_cfg1_reg [7:0]; | |
354 | wire [63:0] ctxt_z_tsb_cfg2_reg [7:0]; | |
355 | wire [63:0] ctxt_z_tsb_cfg3_reg [7:0]; | |
356 | wire [63:0] ctxt_nz_tsb_cfg0_reg [7:0]; | |
357 | wire [63:0] ctxt_nz_tsb_cfg1_reg [7:0]; | |
358 | wire [63:0] ctxt_nz_tsb_cfg2_reg [7:0]; | |
359 | wire [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 | ||
377 | wire [83:0] mmu_mra0_a0 = `SPC0.mmu.mra0.array.mem[0]; | |
378 | wire [83:0] mmu_mra0_a8 = `SPC0.mmu.mra0.array.mem[8]; | |
379 | wire [83:0] mmu_mra0_a16 = `SPC0.mmu.mra0.array.mem[16]; | |
380 | wire [83:0] mmu_mra0_a24 = `SPC0.mmu.mra0.array.mem[24]; | |
381 | wire [83:0] mmu_mra0_a1 = `SPC0.mmu.mra0.array.mem[1]; | |
382 | wire [83:0] mmu_mra0_a9 = `SPC0.mmu.mra0.array.mem[9]; | |
383 | wire [83:0] mmu_mra0_a17 = `SPC0.mmu.mra0.array.mem[17]; | |
384 | wire [83:0] mmu_mra0_a25 = `SPC0.mmu.mra0.array.mem[25]; | |
385 | wire [83:0] mmu_mra0_a2 = `SPC0.mmu.mra0.array.mem[2]; | |
386 | wire [83:0] mmu_mra0_a10 = `SPC0.mmu.mra0.array.mem[10]; | |
387 | wire [83:0] mmu_mra0_a18 = `SPC0.mmu.mra0.array.mem[18]; | |
388 | wire [83:0] mmu_mra0_a26 = `SPC0.mmu.mra0.array.mem[26]; | |
389 | wire [83:0] mmu_mra0_a3 = `SPC0.mmu.mra0.array.mem[3]; | |
390 | wire [83:0] mmu_mra0_a11 = `SPC0.mmu.mra0.array.mem[11]; | |
391 | wire [83:0] mmu_mra0_a19 = `SPC0.mmu.mra0.array.mem[19]; | |
392 | wire [83:0] mmu_mra0_a27 = `SPC0.mmu.mra0.array.mem[27]; | |
393 | wire [83:0] mmu_mra1_a0 = `SPC0.mmu.mra1.array.mem[0]; | |
394 | wire [83:0] mmu_mra1_a8 = `SPC0.mmu.mra1.array.mem[8]; | |
395 | wire [83:0] mmu_mra1_a16 = `SPC0.mmu.mra1.array.mem[16]; | |
396 | wire [83:0] mmu_mra1_a24 = `SPC0.mmu.mra1.array.mem[24]; | |
397 | wire [83:0] mmu_mra1_a1 = `SPC0.mmu.mra1.array.mem[1]; | |
398 | wire [83:0] mmu_mra1_a9 = `SPC0.mmu.mra1.array.mem[9]; | |
399 | wire [83:0] mmu_mra1_a17 = `SPC0.mmu.mra1.array.mem[17]; | |
400 | wire [83:0] mmu_mra1_a25 = `SPC0.mmu.mra1.array.mem[25]; | |
401 | wire [83:0] mmu_mra1_a2 = `SPC0.mmu.mra1.array.mem[2]; | |
402 | wire [83:0] mmu_mra1_a10 = `SPC0.mmu.mra1.array.mem[10]; | |
403 | wire [83:0] mmu_mra1_a18 = `SPC0.mmu.mra1.array.mem[18]; | |
404 | wire [83:0] mmu_mra1_a26 = `SPC0.mmu.mra1.array.mem[26]; | |
405 | wire [83:0] mmu_mra1_a3 = `SPC0.mmu.mra1.array.mem[3]; | |
406 | wire [83:0] mmu_mra1_a11 = `SPC0.mmu.mra1.array.mem[11]; | |
407 | wire [83:0] mmu_mra1_a19 = `SPC0.mmu.mra1.array.mem[19]; | |
408 | wire [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. | |
413 | assign 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 | }; | |
420 | assign 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 | }; | |
427 | assign 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 | }; | |
434 | assign 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 | }; | |
441 | assign 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 | }; | |
448 | assign 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 | }; | |
455 | assign 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 | }; | |
462 | assign 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. | |
472 | assign 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 | }; | |
479 | assign 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 | }; | |
486 | assign 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 | }; | |
493 | assign 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 | }; | |
500 | assign 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 | }; | |
507 | assign 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 | }; | |
514 | assign 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 | }; | |
521 | assign 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. | |
531 | assign 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 | }; | |
538 | assign 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 | }; | |
545 | assign 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 | }; | |
552 | assign 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 | }; | |
559 | assign 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 | }; | |
566 | assign 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 | }; | |
573 | assign 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 | }; | |
580 | assign 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. | |
590 | assign 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 | }; | |
597 | assign 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 | }; | |
604 | assign 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 | }; | |
611 | assign 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 | }; | |
618 | assign 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 | }; | |
625 | assign 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 | }; | |
632 | assign 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 | }; | |
639 | assign 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. | |
649 | assign 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 | }; | |
656 | assign 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 | }; | |
663 | assign 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 | }; | |
670 | assign 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 | }; | |
677 | assign 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 | }; | |
684 | assign 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 | }; | |
691 | assign 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 | }; | |
698 | assign 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. | |
708 | assign 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 | }; | |
715 | assign 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 | }; | |
722 | assign 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 | }; | |
729 | assign 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 | }; | |
736 | assign 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 | }; | |
743 | assign 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 | }; | |
750 | assign 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 | }; | |
757 | assign 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. | |
767 | assign 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 | }; | |
774 | assign 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 | }; | |
781 | assign 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 | }; | |
788 | assign 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 | }; | |
795 | assign 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 | }; | |
802 | assign 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 | }; | |
809 | assign 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 | }; | |
816 | assign 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. | |
826 | assign 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 | }; | |
833 | assign 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 | }; | |
840 | assign 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 | }; | |
847 | assign 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 | }; | |
854 | assign 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 | }; | |
861 | assign 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 | }; | |
868 | assign 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 | }; | |
875 | assign 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 | |
894 | wire [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) | |
909 | wire [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 | ||
922 | wire [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 | ||
933 | reg tlb_bypass_m; | |
934 | reg tlb_bypass_b; | |
935 | reg tlb_rd_vld_m; | |
936 | reg tlb_rd_vld_b; | |
937 | reg lsu_tl_gt_0_b; | |
938 | reg [7:0] dcc_asi_b; | |
939 | reg asi_internal_w; | |
940 | ||
941 | always @ (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; | |
962 | end // } | |
963 | ||
964 | // TL determines whether Nucleus or Primary | |
965 | wire [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 | ||
969 | wire [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 | ||
995 | wire [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 | ||
1021 | wire 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 | ||
1025 | wire [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 | ||
1035 | wire [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 | ||
1047 | reg [71:0] tick_cmpr_0; | |
1048 | reg [71:0] stick_cmpr_0; | |
1049 | reg [71:0] hstick_cmpr_0; | |
1050 | reg [151:0] trap_entry_1_t0; | |
1051 | reg [151:0] trap_entry_2_t0; | |
1052 | reg [151:0] trap_entry_3_t0; | |
1053 | reg [151:0] trap_entry_4_t0; | |
1054 | reg [151:0] trap_entry_5_t0; | |
1055 | reg [151:0] trap_entry_6_t0; | |
1056 | ||
1057 | always @(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 | ||
1070 | end // } | |
1071 | reg [71:0] tick_cmpr_1; | |
1072 | reg [71:0] stick_cmpr_1; | |
1073 | reg [71:0] hstick_cmpr_1; | |
1074 | reg [151:0] trap_entry_1_t1; | |
1075 | reg [151:0] trap_entry_2_t1; | |
1076 | reg [151:0] trap_entry_3_t1; | |
1077 | reg [151:0] trap_entry_4_t1; | |
1078 | reg [151:0] trap_entry_5_t1; | |
1079 | reg [151:0] trap_entry_6_t1; | |
1080 | ||
1081 | always @(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 | ||
1094 | end // } | |
1095 | reg [71:0] tick_cmpr_2; | |
1096 | reg [71:0] stick_cmpr_2; | |
1097 | reg [71:0] hstick_cmpr_2; | |
1098 | reg [151:0] trap_entry_1_t2; | |
1099 | reg [151:0] trap_entry_2_t2; | |
1100 | reg [151:0] trap_entry_3_t2; | |
1101 | reg [151:0] trap_entry_4_t2; | |
1102 | reg [151:0] trap_entry_5_t2; | |
1103 | reg [151:0] trap_entry_6_t2; | |
1104 | ||
1105 | always @(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 | ||
1118 | end // } | |
1119 | reg [71:0] tick_cmpr_3; | |
1120 | reg [71:0] stick_cmpr_3; | |
1121 | reg [71:0] hstick_cmpr_3; | |
1122 | reg [151:0] trap_entry_1_t3; | |
1123 | reg [151:0] trap_entry_2_t3; | |
1124 | reg [151:0] trap_entry_3_t3; | |
1125 | reg [151:0] trap_entry_4_t3; | |
1126 | reg [151:0] trap_entry_5_t3; | |
1127 | reg [151:0] trap_entry_6_t3; | |
1128 | ||
1129 | always @(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 | ||
1142 | end // } | |
1143 | reg [71:0] tick_cmpr_4; | |
1144 | reg [71:0] stick_cmpr_4; | |
1145 | reg [71:0] hstick_cmpr_4; | |
1146 | reg [151:0] trap_entry_1_t4; | |
1147 | reg [151:0] trap_entry_2_t4; | |
1148 | reg [151:0] trap_entry_3_t4; | |
1149 | reg [151:0] trap_entry_4_t4; | |
1150 | reg [151:0] trap_entry_5_t4; | |
1151 | reg [151:0] trap_entry_6_t4; | |
1152 | ||
1153 | always @(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 | ||
1166 | end // } | |
1167 | reg [71:0] tick_cmpr_5; | |
1168 | reg [71:0] stick_cmpr_5; | |
1169 | reg [71:0] hstick_cmpr_5; | |
1170 | reg [151:0] trap_entry_1_t5; | |
1171 | reg [151:0] trap_entry_2_t5; | |
1172 | reg [151:0] trap_entry_3_t5; | |
1173 | reg [151:0] trap_entry_4_t5; | |
1174 | reg [151:0] trap_entry_5_t5; | |
1175 | reg [151:0] trap_entry_6_t5; | |
1176 | ||
1177 | always @(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 | ||
1190 | end // } | |
1191 | reg [71:0] tick_cmpr_6; | |
1192 | reg [71:0] stick_cmpr_6; | |
1193 | reg [71:0] hstick_cmpr_6; | |
1194 | reg [151:0] trap_entry_1_t6; | |
1195 | reg [151:0] trap_entry_2_t6; | |
1196 | reg [151:0] trap_entry_3_t6; | |
1197 | reg [151:0] trap_entry_4_t6; | |
1198 | reg [151:0] trap_entry_5_t6; | |
1199 | reg [151:0] trap_entry_6_t6; | |
1200 | ||
1201 | always @(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 | ||
1214 | end // } | |
1215 | reg [71:0] tick_cmpr_7; | |
1216 | reg [71:0] stick_cmpr_7; | |
1217 | reg [71:0] hstick_cmpr_7; | |
1218 | reg [151:0] trap_entry_1_t7; | |
1219 | reg [151:0] trap_entry_2_t7; | |
1220 | reg [151:0] trap_entry_3_t7; | |
1221 | reg [151:0] trap_entry_4_t7; | |
1222 | reg [151:0] trap_entry_5_t7; | |
1223 | reg [151:0] trap_entry_6_t7; | |
1224 | ||
1225 | always @(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 | ||
1238 | end // } | |
1239 | ||
1240 | //------------------------------------ | |
1241 | // ASI & Trap State machines | |
1242 | always @(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 | ||
1331 | end // } | |
1332 | ||
1333 | ||
1334 | always @(posedge `BENCH_SPC0_GCLK) begin | |
1335 | ||
1336 | // debug code for TPCC analysis | |
1337 | `ifdef TPCC | |
1338 | if (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 | |
1348 | end | |
1349 | ||
1350 | pcx_req <= |`SPC0.spc_pcx_req_pq[8:0]; | |
1351 | ||
1352 | if (`SPC0.ifu_l15_valid==1) begin | |
1353 | imiss_cnt=imiss_cnt+1; | |
1354 | $display("imiss cnt is %0d",imiss_cnt); | |
1355 | end | |
1356 | if (spec_dmiss==1 && `SPC0.lsu_l15_cancel==0) begin | |
1357 | dmiss_cnt=dmiss_cnt+1; | |
1358 | $display("dmiss cnt is %0d",dmiss_cnt); | |
1359 | ||
1360 | end | |
1361 | spec_dmiss <= `SPC0.lsu_l15_valid & `SPC0.lsu_l15_load; | |
1362 | ||
1363 | clock = clock+1; | |
1364 | ||
1365 | // keep track of imiss latencies | |
1366 | if (`SPC0.ftu_agc_thr0_cmiss_c==1) begin | |
1367 | start_imiss0=clock; | |
1368 | active_imiss0=1; | |
1369 | end | |
1370 | if (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; | |
1376 | end | |
1377 | if (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; | |
1379 | end | |
1380 | if (`SPC0.ftu_agc_thr1_cmiss_c==1) begin | |
1381 | start_imiss1=clock; | |
1382 | active_imiss1=1; | |
1383 | end | |
1384 | if (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; | |
1390 | end | |
1391 | if (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; | |
1393 | end | |
1394 | if (`SPC0.ftu_agc_thr2_cmiss_c==1) begin | |
1395 | start_imiss2=clock; | |
1396 | active_imiss2=1; | |
1397 | end | |
1398 | if (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; | |
1404 | end | |
1405 | if (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; | |
1407 | end | |
1408 | if (`SPC0.ftu_agc_thr3_cmiss_c==1) begin | |
1409 | start_imiss3=clock; | |
1410 | active_imiss3=1; | |
1411 | end | |
1412 | if (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; | |
1418 | end | |
1419 | if (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; | |
1421 | end | |
1422 | if (`SPC0.ftu_agc_thr4_cmiss_c==1) begin | |
1423 | start_imiss4=clock; | |
1424 | active_imiss4=1; | |
1425 | end | |
1426 | if (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; | |
1432 | end | |
1433 | if (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; | |
1435 | end | |
1436 | if (`SPC0.ftu_agc_thr5_cmiss_c==1) begin | |
1437 | start_imiss5=clock; | |
1438 | active_imiss5=1; | |
1439 | end | |
1440 | if (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; | |
1446 | end | |
1447 | if (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; | |
1449 | end | |
1450 | if (`SPC0.ftu_agc_thr6_cmiss_c==1) begin | |
1451 | start_imiss6=clock; | |
1452 | active_imiss6=1; | |
1453 | end | |
1454 | if (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; | |
1460 | end | |
1461 | if (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; | |
1463 | end | |
1464 | if (`SPC0.ftu_agc_thr7_cmiss_c==1) begin | |
1465 | start_imiss7=clock; | |
1466 | active_imiss7=1; | |
1467 | end | |
1468 | if (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; | |
1474 | end | |
1475 | if (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; | |
1477 | end | |
1478 | ||
1479 | if (`SPC0.pku.swl0.set_lsu_sync_wait==1) begin | |
1480 | start_dmiss0=clock; | |
1481 | end | |
1482 | if (`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); | |
1486 | end | |
1487 | if (`SPC0.pku.swl1.set_lsu_sync_wait==1) begin | |
1488 | start_dmiss1=clock; | |
1489 | end | |
1490 | if (`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); | |
1494 | end | |
1495 | if (`SPC0.pku.swl2.set_lsu_sync_wait==1) begin | |
1496 | start_dmiss2=clock; | |
1497 | end | |
1498 | if (`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); | |
1502 | end | |
1503 | if (`SPC0.pku.swl3.set_lsu_sync_wait==1) begin | |
1504 | start_dmiss3=clock; | |
1505 | end | |
1506 | if (`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); | |
1510 | end | |
1511 | if (`SPC0.pku.swl4.set_lsu_sync_wait==1) begin | |
1512 | start_dmiss4=clock; | |
1513 | end | |
1514 | if (`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); | |
1518 | end | |
1519 | if (`SPC0.pku.swl5.set_lsu_sync_wait==1) begin | |
1520 | start_dmiss5=clock; | |
1521 | end | |
1522 | if (`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); | |
1526 | end | |
1527 | if (`SPC0.pku.swl6.set_lsu_sync_wait==1) begin | |
1528 | start_dmiss6=clock; | |
1529 | end | |
1530 | if (`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); | |
1534 | end | |
1535 | if (`SPC0.pku.swl7.set_lsu_sync_wait==1) begin | |
1536 | start_dmiss7=clock; | |
1537 | end | |
1538 | if (`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); | |
1542 | end | |
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 | ||
1733 | end // 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 | |
1738 | assign return0 = `SPC0.exu0.rml.return_w & | |
1739 | `SPC0.exu0.rml.inst_vld_w; | |
1740 | assign return1 = `SPC0.exu1.rml.return_w & | |
1741 | `SPC0.exu1.rml.inst_vld_w; | |
1742 | assign 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 | |
1756 | assign ex0_tid_e = `SPC0.exu0.ect_tid_lth_e[1:0]; | |
1757 | assign ex0_valid_e = `SPC0.dec.dec_valid_e[0] & ~fgu0_e & ~load0_e & | |
1758 | ~retry0_e & ~done0_e; | |
1759 | assign ex1_tid_e = `SPC0.exu1.ect_tid_lth_e[1:0]; | |
1760 | assign ex1_valid_e = `SPC0.dec.dec_valid_e[1] & ~fgu1_e & ~load1_e & | |
1761 | ~retry1_e & ~done1_e; | |
1762 | ||
1763 | assign ex_asr_valid = `SPC0.lsu.dcc.asi_store_m & `SPC0.lsu.dcc.asi_sync_m ; | |
1764 | ||
1765 | assign 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 | |
1778 | assign 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 | |
1789 | wire [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... | |
1800 | reg [7:0] block_store_w; | |
1801 | always @(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]; | |
1804 | end | |
1805 | ||
1806 | wire [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 | ||
1818 | assign 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 | ||
1832 | assign 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 | |
1840 | assign 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 | |
1853 | wire 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 | ||
1857 | assign fg_cond_fb = fg_cond_fb_pre_err & ~fgu_err_fb; | |
1858 | ||
1859 | // Idiv/Fdiv signals | |
1860 | ||
1861 | assign fgu_idiv_valid = fg_div_valid & div_idest; | |
1862 | ||
1863 | ||
1864 | assign fgu_fdiv_valid = fg_fdiv_valid_fw & div_fdest; | |
1865 | ||
1866 | ||
1867 | // Lsu signals needed to check lsu results | |
1868 | ||
1869 | assign lsu_valid = lsu_check | lsu_data_w; | |
1870 | ||
1871 | assign fg_div_valid = `SPC0.fgu_divide_completion & ~div_special_cancel_f4; | |
1872 | ||
1873 | // State machine asserts lsu_check for LD hit/miss | |
1874 | always @(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 // } | |
1920 | end | |
1921 | ||
1922 | ||
1923 | assign lsu_tid = `SPC0.lsu.dcc.ld_tid_b[2:0]; | |
1924 | // Don't assert LSU_complete in case of dtlb or irf errors | |
1925 | ||
1926 | assign 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 | ||
1931 | assign 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 | ||
1940 | assign lsu_tid_dec_b[0] = `SPC0.lsu.dcc.ld_tid_b[2:0] == 3'd0; | |
1941 | assign lsu_tid_dec_b[1] = `SPC0.lsu.dcc.ld_tid_b[2:0] == 3'd1; | |
1942 | assign lsu_tid_dec_b[2] = `SPC0.lsu.dcc.ld_tid_b[2:0] == 3'd2; | |
1943 | assign lsu_tid_dec_b[3] = `SPC0.lsu.dcc.ld_tid_b[2:0] == 3'd3; | |
1944 | assign lsu_tid_dec_b[4] = `SPC0.lsu.dcc.ld_tid_b[2:0] == 3'd4; | |
1945 | assign lsu_tid_dec_b[5] = `SPC0.lsu.dcc.ld_tid_b[2:0] == 3'd5; | |
1946 | assign lsu_tid_dec_b[6] = `SPC0.lsu.dcc.ld_tid_b[2:0] == 3'd6; | |
1947 | assign lsu_tid_dec_b[7] = `SPC0.lsu.dcc.ld_tid_b[2:0] == 3'd7; | |
1948 | ||
1949 | assign 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); | |
1951 | assign dec_flush_lb = `SPC0.dec.dec_flush_lb | `SPC0.tlu_flush_lsu_b; | |
1952 | ||
1953 | ||
1954 | // LSU interface to CCX stub | |
1955 | ||
1956 | assign exu_lsu_valid = `SPC0.dec.del.lsu_valid_e; | |
1957 | assign exu_lsu_addr[47:0] = `SPC0.exu_lsu_address_e[47:0]; | |
1958 | assign exu_lsu_tid[2:0] = lsu_tid_e[2:0]; | |
1959 | assign exu_lsu_regid[4:0] = `SPC0.dec.dec_lsu_rd_e[4:0]; | |
1960 | assign exu_lsu_data[63:0] = `SPC0.exu_lsu_store_data_e[63:0]; | |
1961 | assign 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]); | |
1965 | assign 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 | ||
2012 | initial 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; | |
2021 | end | |
2022 | ||
2023 | always @(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 | ||
2073 | end //} | |
2074 | ||
2075 | /////////////////////////////////////////////////////////////////////////////// | |
2076 | // Functions | |
2077 | /////////////////////////////////////////////////////////////////////////////// | |
2078 | function [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 | |
2093 | endfunction | |
2094 | ||
2095 | function [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 | |
2110 | endfunction | |
2111 | ||
2112 | //--------------------- | |
2113 | ||
2114 | function [255:0] xlate; | |
2115 | input [31:0] inst; | |
2116 | ||
2117 | begin | |
2118 | casex(inst[31:0]) | |
2119 | 32'b10xxxxx110100xxxxx001000011xxxxx : xlate[255:0]="FADDq"; | |
2120 | 32'b10xxxxx110100xxxxx001000111xxxxx : xlate[255:0]="FSUBq"; | |
2121 | 32'b10000xx110101xxxxx001010011xxxxx : xlate[255:0]="FCMPq"; | |
2122 | 32'b10000xx110101xxxxx001010111xxxxx : xlate[255:0]="FCMPEq"; | |
2123 | 32'b10xxxxx110100xxxxx011001101xxxxx : xlate[255:0]="FsTOq"; | |
2124 | 32'b10xxxxx110100xxxxx011001110xxxxx : xlate[255:0]="FdTOq"; | |
2125 | 32'b10xxxxx110100xxxxx010001100xxxxx : xlate[255:0]="FxTOq"; | |
2126 | 32'b10xxxxx110100xxxxx011001100xxxxx : xlate[255:0]="FiTOq"; | |
2127 | 32'b10xxxxx110100xxxxx000000011xxxxx : xlate[255:0]="FMOVq"; | |
2128 | 32'b10xxxxx110100xxxxx000000111xxxxx : xlate[255:0]="FNEGq"; | |
2129 | 32'b10xxxxx110100xxxxx000001011xxxxx : xlate[255:0]="FABSq"; | |
2130 | 32'b10xxxxx110100xxxxx001001011xxxxx : xlate[255:0]="FMULq"; | |
2131 | 32'b10xxxxx110100xxxxx001101110xxxxx : xlate[255:0]="FdMULq"; | |
2132 | 32'b10xxxxx110100xxxxx001001111xxxxx : xlate[255:0]="FDIVq"; | |
2133 | 32'b10xxxxx110100xxxxx000101011xxxxx : xlate[255:0]="FSQRTq"; | |
2134 | 32'b10xxxxx1101010xxxx0xx100111xxxxx : xlate[255:0]="FMOVrQa"; | |
2135 | 32'b10xxxxx1101010xxxx0x1x00111xxxxx : xlate[255:0]="FMOVrQb"; | |
2136 | 32'b10xxxxx110100xxxxx011010011xxxxx : xlate[255:0]="FqTOi"; | |
2137 | 32'b10xxxxx110100xxxxx010000011xxxxx : xlate[255:0]="FqTOx"; | |
2138 | 32'b10xxxxx110100xxxxx011000111xxxxx : xlate[255:0]="FqTOs"; | |
2139 | 32'b10xxxxx110100xxxxx011001011xxxxx : xlate[255:0]="FqTOd"; | |
2140 | 32'b11xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQF"; | |
2141 | 32'b11xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFi"; | |
2142 | 32'b11xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQFA"; | |
2143 | 32'b11xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFAi"; | |
2144 | 32'b11xxxxx100110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFi"; | |
2145 | 32'b11xxxxx100110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQF"; | |
2146 | 32'b11xxxxx110110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQFA"; | |
2147 | 32'b11xxxxx110110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFAi"; | |
2148 | 32'b10xxxxx1101010xxxxxxx000011xxxxx : xlate[255:0]="FMOVQcc"; | |
2149 | 32'b10xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADD"; | |
2150 | 32'b10xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDcc"; | |
2151 | 32'b10xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDC"; | |
2152 | 32'b10xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDCcc"; | |
2153 | 32'b10xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDi"; | |
2154 | 32'b10xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDcci"; | |
2155 | 32'b10xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCi"; | |
2156 | 32'b10xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCcci"; | |
2157 | 32'b00x0xx1011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr1"; | |
2158 | 32'b00x0x1x011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr2"; | |
2159 | 32'b00xx000110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfccA"; | |
2160 | 32'b00xx1xx110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc1"; | |
2161 | 32'b00xxx1x110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc2"; | |
2162 | 32'b00xxxx1110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc3"; | |
2163 | 32'b00xx000101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfccA"; | |
2164 | 32'b00xx1xx101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc1"; | |
2165 | 32'b00xxx1x101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc2"; | |
2166 | 32'b00xxxx1101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc3"; | |
2167 | 32'b00xx000010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BiccA"; | |
2168 | 32'b00xx1xx010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc1"; | |
2169 | 32'b00xxx1x010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc2"; | |
2170 | 32'b00xxxx1010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc3"; | |
2171 | 32'b00xx000001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPccA"; | |
2172 | 32'b00xx1xx001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc1"; | |
2173 | 32'b00xxx1x001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc2"; | |
2174 | 32'b00xxxx1001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc3"; | |
2175 | 32'b01xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="CALL"; | |
2176 | 32'b11xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASA"; | |
2177 | 32'b11xxxxx111110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASXA"; | |
2178 | 32'b11xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASAi"; | |
2179 | 32'b11xxxxx111110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASXAi"; | |
2180 | 32'b10xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIV"; | |
2181 | 32'b10xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIV"; | |
2182 | 32'b10xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVcc"; | |
2183 | 32'b10xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVcc"; | |
2184 | 32'b10xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVi"; | |
2185 | 32'b10xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVi"; | |
2186 | 32'b10xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVcci"; | |
2187 | 32'b10xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVcci"; | |
2188 | 32'b1000000111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="DONE"; | |
2189 | 32'b1000001111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RETRY"; | |
2190 | 32'b10xxxxx110100xxxxx001000001xxxxx : xlate[255:0]="FADDs"; | |
2191 | 32'b10xxxxx110100xxxxx001000010xxxxx : xlate[255:0]="FADDd"; | |
2192 | 32'b10xxxxx110100xxxxx001000101xxxxx : xlate[255:0]="FSUBs"; | |
2193 | 32'b10xxxxx110100xxxxx001000110xxxxx : xlate[255:0]="FSUBd"; | |
2194 | 32'b10000xx110101xxxxx001010001xxxxx : xlate[255:0]="FCMPs"; | |
2195 | 32'b10000xx110101xxxxx001010010xxxxx : xlate[255:0]="FCMPd"; | |
2196 | 32'b10000xx110101xxxxx001010101xxxxx : xlate[255:0]="FCMPEs"; | |
2197 | 32'b10000xx110101xxxxx001010110xxxxx : xlate[255:0]="FCMPEd"; | |
2198 | 32'b10xxxxx110100xxxxx010000001xxxxx : xlate[255:0]="FsTOx"; | |
2199 | 32'b10xxxxx110100xxxxx010000010xxxxx : xlate[255:0]="FdTOx"; | |
2200 | 32'b10xxxxx110100xxxxx011010001xxxxx : xlate[255:0]="FsTOi"; | |
2201 | 32'b10xxxxx110100xxxxx011010010xxxxx : xlate[255:0]="FdTOi"; | |
2202 | 32'b10xxxxx110100xxxxx011001001xxxxx : xlate[255:0]="FsTOd"; | |
2203 | 32'b10xxxxx110100xxxxx011000110xxxxx : xlate[255:0]="FdTOs"; | |
2204 | 32'b10xxxxx110100xxxxx010000100xxxxx : xlate[255:0]="FxTOs"; | |
2205 | 32'b10xxxxx110100xxxxx010001000xxxxx : xlate[255:0]="FxTOd"; | |
2206 | 32'b10xxxxx110100xxxxx011000100xxxxx : xlate[255:0]="FiTOs"; | |
2207 | 32'b10xxxxx110100xxxxx011001000xxxxx : xlate[255:0]="FiTOd"; | |
2208 | 32'b10xxxxx110100xxxxx000000001xxxxx : xlate[255:0]="FMOVs"; | |
2209 | 32'b10xxxxx110100xxxxx000000010xxxxx : xlate[255:0]="FMOVd"; | |
2210 | 32'b10xxxxx110100xxxxx000000101xxxxx : xlate[255:0]="FNEGs"; | |
2211 | 32'b10xxxxx110100xxxxx000000110xxxxx : xlate[255:0]="FNEGd"; | |
2212 | 32'b10xxxxx110100xxxxx000001001xxxxx : xlate[255:0]="FABSs"; | |
2213 | 32'b10xxxxx110100xxxxx000001010xxxxx : xlate[255:0]="FABSd"; | |
2214 | 32'b10xxxxx110100xxxxx001001001xxxxx : xlate[255:0]="FMULs"; | |
2215 | 32'b10xxxxx110100xxxxx001001010xxxxx : xlate[255:0]="FMULd"; | |
2216 | 32'b10xxxxx110100xxxxx001101001xxxxx : xlate[255:0]="FsMULd"; | |
2217 | 32'b10xxxxx110100xxxxx001001101xxxxx : xlate[255:0]="FDIVs"; | |
2218 | 32'b10xxxxx110100xxxxx001001110xxxxx : xlate[255:0]="FDIVd"; | |
2219 | 32'b10xxxxx110100xxxxx000101001xxxxx : xlate[255:0]="FSQRTs"; | |
2220 | 32'b10xxxxx110100xxxxx000101010xxxxx : xlate[255:0]="FSQRTd"; | |
2221 | 32'b10xxxxx111011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSH"; | |
2222 | 32'b10xxxxx111011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="FLUSHi"; | |
2223 | 32'b10xxxxx101011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSHw"; | |
2224 | 32'b10xxxxx111000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="JMPL"; | |
2225 | 32'b10xxxxx111000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="JMPLi"; | |
2226 | 32'b11xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDF"; | |
2227 | 32'b11xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDF"; | |
2228 | 32'b1100000100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFSR"; | |
2229 | 32'b1100001100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXFSR"; | |
2230 | 32'b11xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFi"; | |
2231 | 32'b11xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFi"; | |
2232 | 32'b1100000100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFSRi"; | |
2233 | 32'b1100001100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXFSRi"; | |
2234 | 32'b11xxxxx110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFA"; | |
2235 | 32'b11xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDFA"; | |
2236 | 32'b11xxxxx110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFAi"; | |
2237 | 32'b11xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFAi"; | |
2238 | 32'b11xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSB"; | |
2239 | 32'b11xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSH"; | |
2240 | 32'b11xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSW"; | |
2241 | 32'b11xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUB"; | |
2242 | 32'b11xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUH"; | |
2243 | 32'b11xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUW"; | |
2244 | 32'b11xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDX"; | |
2245 | 32'b11xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDD"; | |
2246 | 32'b11xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBi"; | |
2247 | 32'b11xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHi"; | |
2248 | 32'b11xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWi"; | |
2249 | 32'b11xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBi"; | |
2250 | 32'b11xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHi"; | |
2251 | 32'b11xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWi"; | |
2252 | 32'b11xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXi"; | |
2253 | 32'b11xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDi"; | |
2254 | 32'b11xxxxx011001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSBA"; | |
2255 | 32'b11xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSHA"; | |
2256 | 32'b11xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSWA"; | |
2257 | 32'b11xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUBA"; | |
2258 | 32'b11xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUHA"; | |
2259 | 32'b11xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUWA"; | |
2260 | 32'b11xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXA"; | |
2261 | 32'b11xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDA"; | |
2262 | 32'b11xxxxx011001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBAi"; | |
2263 | 32'b11xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHAi"; | |
2264 | 32'b11xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWAi"; | |
2265 | 32'b11xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBAi"; | |
2266 | 32'b11xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHAi"; | |
2267 | 32'b11xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWAi"; | |
2268 | 32'b11xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXAi"; | |
2269 | 32'b11xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDAi"; | |
2270 | 32'b11xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUB"; | |
2271 | 32'b11xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBi"; | |
2272 | 32'b11xxxxx011101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUBA"; | |
2273 | 32'b11xxxxx011101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBAi"; | |
2274 | 32'b10xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="AND"; | |
2275 | 32'b10xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDcc"; | |
2276 | 32'b10xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDN"; | |
2277 | 32'b10xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDNcc"; | |
2278 | 32'b10xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="OR"; | |
2279 | 32'b10xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORcc"; | |
2280 | 32'b10xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORN"; | |
2281 | 32'b10xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORNcc"; | |
2282 | 32'b10xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XOR"; | |
2283 | 32'b10xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XORcc"; | |
2284 | 32'b10xxxxx000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNOR"; | |
2285 | 32'b10xxxxx010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNORcc"; | |
2286 | 32'b10xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDi"; | |
2287 | 32'b10xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDcci"; | |
2288 | 32'b10xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNi"; | |
2289 | 32'b10xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNcci"; | |
2290 | 32'b10xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORi"; | |
2291 | 32'b10xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORcci"; | |
2292 | 32'b10xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNi"; | |
2293 | 32'b10xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNcci"; | |
2294 | 32'b10xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORi"; | |
2295 | 32'b10xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORcci"; | |
2296 | 32'b10xxxxx000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORi"; | |
2297 | 32'b10xxxxx010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORcci"; | |
2298 | 32'b1000000101000011111xxxxxxxxxxxxx : xlate[255:0]="MEMBAR"; | |
2299 | 32'b1000000101000011110xxxxxxxxxxxxx : xlate[255:0]="STBAR"; | |
2300 | 32'b10xxxxx101000000000xxxxxxxxxxxxx : xlate[255:0]="RDY"; | |
2301 | 32'b10xxxxx101000000100xxxxxxxxxxxxx : xlate[255:0]="RDCCR"; | |
2302 | 32'b10xxxxx101000000110xxxxxxxxxxxxx : xlate[255:0]="RDASI"; | |
2303 | 32'b10xxxxx101000001000xxxxxxxxxxxxx : xlate[255:0]="RDTICK"; | |
2304 | 32'b10xxxxx101000001010xxxxxxxxxxxxx : xlate[255:0]="RDPC"; | |
2305 | 32'b10xxxxx101000001100xxxxxxxxxxxxx : xlate[255:0]="RDFPRS"; | |
2306 | 32'b10xxxxx101000100110xxxxxxxxxxxxx : xlate[255:0]="RDGSR"; | |
2307 | 32'b10xxxxx101000100000xxxxxxxxxxxxx : xlate[255:0]="RDPCR"; | |
2308 | 32'b10xxxxx101000100010xxxxxxxxxxxxx : xlate[255:0]="RDPIC"; | |
2309 | 32'b10xxxxx1101010xxxx0xx000001xxxxx : xlate[255:0]="FMOVSfcc"; | |
2310 | 32'b10xxxxx1101010xxxx1xx000001xxxxx : xlate[255:0]="FMOVSxcc"; | |
2311 | 32'b10xxxxx1101010xxxx0xx000010xxxxx : xlate[255:0]="FMOVDfcc"; | |
2312 | 32'b10xxxxx1101010xxxx1xx000010xxxxx : xlate[255:0]="FMOVDxcc"; | |
2313 | 32'b10xxxxx110101xxxxx0xx100101xxxxx : xlate[255:0]="FMOVrS1"; | |
2314 | 32'b10xxxxx110101xxxxx0x1x00101xxxxx : xlate[255:0]="FMOVrS2"; | |
2315 | 32'b10xxxxx110101xxxxx0xx100110xxxxx : xlate[255:0]="FMOVrD1"; | |
2316 | 32'b10xxxxx110101xxxxx0x1x00110xxxxx : xlate[255:0]="FMOVrD2"; | |
2317 | 32'b10xxxxx1011001xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVxcc"; | |
2318 | 32'b10xxxxx1011001xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVxcci"; | |
2319 | 32'b10xxxxx1011000xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVfcc"; | |
2320 | 32'b10xxxxx1011000xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVfcci"; | |
2321 | 32'b10xxxxx101111xxxxx0xx1xxxxxxxxxx : xlate[255:0]="MOVR1"; | |
2322 | 32'b10xxxxx101111xxxxx0x1xxxxxxxxxxx : xlate[255:0]="MOVR2"; | |
2323 | 32'b10xxxxx101111xxxxx1xx1xxxxxxxxxx : xlate[255:0]="MOVRi1"; | |
2324 | 32'b10xxxxx101111xxxxx1x1xxxxxxxxxxx : xlate[255:0]="MOVRi2"; | |
2325 | 32'b10xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULX"; | |
2326 | 32'b10xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVX"; | |
2327 | 32'b10xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVX"; | |
2328 | 32'b10xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULXi"; | |
2329 | 32'b10xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVXi"; | |
2330 | 32'b10xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVXi"; | |
2331 | 32'b10xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMUL"; | |
2332 | 32'b10xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMUL"; | |
2333 | 32'b10xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMULcc"; | |
2334 | 32'b10xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMULcc"; | |
2335 | 32'b10xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULi"; | |
2336 | 32'b10xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULi"; | |
2337 | 32'b10xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULcci"; | |
2338 | 32'b10xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULcci"; | |
2339 | 32'b10xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULScc"; | |
2340 | 32'b10xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULScci"; | |
2341 | 32'b10xxxxx101110000000xxxxxxxxxxxxx : xlate[255:0]="POPC"; | |
2342 | 32'b10xxxxx101110000001xxxxxxxxxxxxx : xlate[255:0]="POPCi"; | |
2343 | 32'b11xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCH"; | |
2344 | 32'b11xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHi"; | |
2345 | 32'b11xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCHA"; | |
2346 | 32'b11xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHAi"; | |
2347 | 32'b10xxxxx101010xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDPR"; | |
2348 | 32'b10xxxxx101001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDHPR"; | |
2349 | 32'b10xxxxx111001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RETURN"; | |
2350 | 32'b10xxxxx111001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RETURNi"; | |
2351 | 32'b10xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SAVE"; | |
2352 | 32'b10xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SAVEi"; | |
2353 | 32'b10xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RESTORE"; | |
2354 | 32'b10xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RESTOREi"; | |
2355 | 32'b1000000110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="SAVED"; | |
2356 | 32'b1000001110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RESTORED"; | |
2357 | 32'b00xxxxx100xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="SETHI"; | |
2358 | 32'b10xxxxx100101xxxxx00xxxxxxxxxxxx : xlate[255:0]="SLL"; | |
2359 | 32'b10xxxxx100110xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRL"; | |
2360 | 32'b10xxxxx100111xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRA"; | |
2361 | 32'b10xxxxx100101xxxxx01xxxxxxxxxxxx : xlate[255:0]="SLLX"; | |
2362 | 32'b10xxxxx100110xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRLX"; | |
2363 | 32'b10xxxxx100111xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRAX"; | |
2364 | 32'b10xxxxx100101xxxxx10xxxxxxxxxxxx : xlate[255:0]="SLLi"; | |
2365 | 32'b10xxxxx100110xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRLi"; | |
2366 | 32'b10xxxxx100111xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRAi"; | |
2367 | 32'b10xxxxx100101xxxxx11xxxxxxxxxxxx : xlate[255:0]="SLLXi"; | |
2368 | 32'b10xxxxx100110xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRLXi"; | |
2369 | 32'b10xxxxx100111xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRAXi"; | |
2370 | 32'b11xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STF"; | |
2371 | 32'b11xxxxx100111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDF"; | |
2372 | 32'b1100000100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFSR"; | |
2373 | 32'b1100001100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXFSR"; | |
2374 | 32'b11xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFi"; | |
2375 | 32'b11xxxxx100111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFi"; | |
2376 | 32'b1100000100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFSRi"; | |
2377 | 32'b1100001100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXFSRi"; | |
2378 | 32'b11xxxxx110100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFA"; | |
2379 | 32'b11xxxxx110111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDFA"; | |
2380 | 32'b11xxxxx110100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFAi"; | |
2381 | 32'b11xxxxx110111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFAi"; | |
2382 | 32'b11xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STB"; | |
2383 | 32'b11xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STH"; | |
2384 | 32'b11xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STW"; | |
2385 | 32'b11xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STX"; | |
2386 | 32'b11xxxx0000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STD"; | |
2387 | 32'b11xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBi"; | |
2388 | 32'b11xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHi"; | |
2389 | 32'b11xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWi"; | |
2390 | 32'b11xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXi"; | |
2391 | 32'b11xxxx0000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDi"; | |
2392 | 32'b11xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STBA"; | |
2393 | 32'b11xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STHA"; | |
2394 | 32'b11xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STWA"; | |
2395 | 32'b11xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXA"; | |
2396 | 32'b11xxxx0010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDA"; | |
2397 | 32'b11xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBAi"; | |
2398 | 32'b11xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHAi"; | |
2399 | 32'b11xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWAi"; | |
2400 | 32'b11xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXAi"; | |
2401 | 32'b11xxxx0010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDAi"; | |
2402 | 32'b10xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUB"; | |
2403 | 32'b10xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBcc"; | |
2404 | 32'b10xxxxx001100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBC"; | |
2405 | 32'b10xxxxx011100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBCcc"; | |
2406 | 32'b10xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBi"; | |
2407 | 32'b10xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBcci"; | |
2408 | 32'b10xxxxx001100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCi"; | |
2409 | 32'b10xxxxx011100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCcci"; | |
2410 | 32'b11xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAP"; | |
2411 | 32'b11xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPi"; | |
2412 | 32'b11xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAPA"; | |
2413 | 32'b11xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPAi"; | |
2414 | 32'b10xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDcc"; | |
2415 | 32'b10xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDccTV"; | |
2416 | 32'b10xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDcci"; | |
2417 | 32'b10xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDccTVi"; | |
2418 | 32'b10xxxxx100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBcc"; | |
2419 | 32'b10xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBccTV"; | |
2420 | 32'b10xxxxx100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBcci"; | |
2421 | 32'b10xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBccTVi"; | |
2422 | 32'b10xxxxx111010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TCC"; | |
2423 | 32'b10xxxxx111010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TCCi"; | |
2424 | 32'b10xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPR"; | |
2425 | 32'b10xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPRi"; | |
2426 | 32'b10xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRHPR"; | |
2427 | 32'b10xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRHPRi"; | |
2428 | 32'b1000000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRY"; | |
2429 | 32'b1000010110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRCCR"; | |
2430 | 32'b1000011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRASI"; | |
2431 | 32'b1000110110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRFPRS"; | |
2432 | 32'b1010011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRGSR"; | |
2433 | 32'b1010000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPCR"; | |
2434 | 32'b1010001110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPIC"; | |
2435 | 32'b1000000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRYi"; | |
2436 | 32'b1000010110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRCCRi"; | |
2437 | 32'b1000011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRASIi"; | |
2438 | 32'b1000110110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRFPRSi"; | |
2439 | 32'b1010011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRGSRi"; | |
2440 | 32'b1010000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPCRi"; | |
2441 | 32'b1010001110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPICi"; | |
2442 | 32'b1001111110000000001xxxxxxxxxxxxx : xlate[255:0]="SIR"; | |
2443 | 32'b10xxxxx110110xxxxx001010000xxxxx : xlate[255:0]="FPADD16"; | |
2444 | 32'b10xxxxx110110xxxxx001010001xxxxx : xlate[255:0]="FPADD16S"; | |
2445 | 32'b10xxxxx110110xxxxx001010010xxxxx : xlate[255:0]="FPADD32"; | |
2446 | 32'b10xxxxx110110xxxxx001010011xxxxx : xlate[255:0]="FPADD32S"; | |
2447 | 32'b10xxxxx110110xxxxx001010100xxxxx : xlate[255:0]="FPSUB16"; | |
2448 | 32'b10xxxxx110110xxxxx001010101xxxxx : xlate[255:0]="FPSUB16S"; | |
2449 | 32'b10xxxxx110110xxxxx001010110xxxxx : xlate[255:0]="FPSUB32"; | |
2450 | 32'b10xxxxx110110xxxxx001010111xxxxx : xlate[255:0]="FPSUB32S"; | |
2451 | 32'b10xxxxx110110xxxxx000111011xxxxx : xlate[255:0]="FPACK16"; | |
2452 | 32'b10xxxxx110110xxxxx000111010xxxxx : xlate[255:0]="FPACK32"; | |
2453 | 32'b10xxxxx110110xxxxx000111101xxxxx : xlate[255:0]="FPACKFIX"; | |
2454 | 32'b10xxxxx110110xxxxx001001101xxxxx : xlate[255:0]="FEXPAND"; | |
2455 | 32'b10xxxxx110110xxxxx001001011xxxxx : xlate[255:0]="FPMERGE"; | |
2456 | 32'b10xxxxx110110xxxxx000110001xxxxx : xlate[255:0]="FMUL8x16"; | |
2457 | 32'b10xxxxx110110xxxxx000110011xxxxx : xlate[255:0]="FMUL8x16AU"; | |
2458 | 32'b10xxxxx110110xxxxx000110101xxxxx : xlate[255:0]="FMUL8x16AL"; | |
2459 | 32'b10xxxxx110110xxxxx000110110xxxxx : xlate[255:0]="FMUL8SUx16"; | |
2460 | 32'b10xxxxx110110xxxxx000110111xxxxx : xlate[255:0]="FMUL8ULx16"; | |
2461 | 32'b10xxxxx110110xxxxx000111000xxxxx : xlate[255:0]="FMULD8SUx16"; | |
2462 | 32'b10xxxxx110110xxxxx000111001xxxxx : xlate[255:0]="FMULD8ULx16"; | |
2463 | 32'b10xxxxx110110xxxxx000011000xxxxx : xlate[255:0]="ALIGNADDRESS"; | |
2464 | 32'b10xxxxx110110xxxxx000011010xxxxx : xlate[255:0]="ALIGNADDRESS_LITTLE"; | |
2465 | 32'b10xxxxx110110xxxxx000011001xxxxx : xlate[255:0]="BMASK"; | |
2466 | 32'b10xxxxx110110xxxxx001001000xxxxx : xlate[255:0]="FALIGNDATA"; | |
2467 | 32'b10xxxxx110110xxxxx001001100xxxxx : xlate[255:0]="BSHUFFLE"; | |
2468 | 32'b10xxxxx110110xxxxx001100000xxxxx : xlate[255:0]="FZERO"; | |
2469 | 32'b10xxxxx110110xxxxx001100001xxxxx : xlate[255:0]="FZEROS"; | |
2470 | 32'b10xxxxx110110xxxxx001111110xxxxx : xlate[255:0]="FONE"; | |
2471 | 32'b10xxxxx110110xxxxx001111111xxxxx : xlate[255:0]="FONES"; | |
2472 | 32'b10xxxxx110110xxxxx001110100xxxxx : xlate[255:0]="FSRC1"; | |
2473 | 32'b10xxxxx110110xxxxx001110101xxxxx : xlate[255:0]="FSRC1S"; | |
2474 | 32'b10xxxxx110110xxxxx001111000xxxxx : xlate[255:0]="FSRC2"; | |
2475 | 32'b10xxxxx110110xxxxx001111001xxxxx : xlate[255:0]="FSRC2S"; | |
2476 | 32'b10xxxxx110110xxxxx001101010xxxxx : xlate[255:0]="FNOT1"; | |
2477 | 32'b10xxxxx110110xxxxx001101011xxxxx : xlate[255:0]="FNOT1S"; | |
2478 | 32'b10xxxxx110110xxxxx001100110xxxxx : xlate[255:0]="FNOT2"; | |
2479 | 32'b10xxxxx110110xxxxx001100111xxxxx : xlate[255:0]="FNOT2S"; | |
2480 | 32'b10xxxxx110110xxxxx001111100xxxxx : xlate[255:0]="FOR"; | |
2481 | 32'b10xxxxx110110xxxxx001111101xxxxx : xlate[255:0]="FORS"; | |
2482 | 32'b10xxxxx110110xxxxx001100010xxxxx : xlate[255:0]="FNOR"; | |
2483 | 32'b10xxxxx110110xxxxx001100011xxxxx : xlate[255:0]="FNORS"; | |
2484 | 32'b10xxxxx110110xxxxx001110000xxxxx : xlate[255:0]="FAND"; | |
2485 | 32'b10xxxxx110110xxxxx001110001xxxxx : xlate[255:0]="FANDS"; | |
2486 | 32'b10xxxxx110110xxxxx001101110xxxxx : xlate[255:0]="FNAND"; | |
2487 | 32'b10xxxxx110110xxxxx001101111xxxxx : xlate[255:0]="FNANDS"; | |
2488 | 32'b10xxxxx110110xxxxx001101100xxxxx : xlate[255:0]="FXOR"; | |
2489 | 32'b10xxxxx110110xxxxx001101101xxxxx : xlate[255:0]="FXORS"; | |
2490 | 32'b10xxxxx110110xxxxx001110010xxxxx : xlate[255:0]="FXNOR"; | |
2491 | 32'b10xxxxx110110xxxxx001110011xxxxx : xlate[255:0]="FXNORS"; | |
2492 | 32'b10xxxxx110110xxxxx001111010xxxxx : xlate[255:0]="FORNOT1"; | |
2493 | 32'b10xxxxx110110xxxxx001111011xxxxx : xlate[255:0]="FORNOT1S"; | |
2494 | 32'b10xxxxx110110xxxxx001110110xxxxx : xlate[255:0]="FORNOT2"; | |
2495 | 32'b10xxxxx110110xxxxx001110111xxxxx : xlate[255:0]="FORNOT2S"; | |
2496 | 32'b10xxxxx110110xxxxx001101000xxxxx : xlate[255:0]="FANDNOT1"; | |
2497 | 32'b10xxxxx110110xxxxx001101001xxxxx : xlate[255:0]="FANDNOT1S"; | |
2498 | 32'b10xxxxx110110xxxxx001100100xxxxx : xlate[255:0]="FANDNOT2"; | |
2499 | 32'b10xxxxx110110xxxxx001100101xxxxx : xlate[255:0]="FANDNOT2S"; | |
2500 | 32'b10xxxxx110110xxxxx000101000xxxxx : xlate[255:0]="FCMPGT16"; | |
2501 | 32'b10xxxxx110110xxxxx000101100xxxxx : xlate[255:0]="FCMPGT32"; | |
2502 | 32'b10xxxxx110110xxxxx000100000xxxxx : xlate[255:0]="FCMPLE16"; | |
2503 | 32'b10xxxxx110110xxxxx000100100xxxxx : xlate[255:0]="FCMPLE32"; | |
2504 | 32'b10xxxxx110110xxxxx000100010xxxxx : xlate[255:0]="FCMPNE16"; | |
2505 | 32'b10xxxxx110110xxxxx000100110xxxxx : xlate[255:0]="FCMPNE32"; | |
2506 | 32'b10xxxxx110110xxxxx000101010xxxxx : xlate[255:0]="FCMPEQ16"; | |
2507 | 32'b10xxxxx110110xxxxx000101110xxxxx : xlate[255:0]="FCMPEQ32"; | |
2508 | 32'b10xxxxx110110xxxxx000111110xxxxx : xlate[255:0]="PDIST"; | |
2509 | 32'b10xxxxx110110xxxxx000000000xxxxx : xlate[255:0]="EDGE8"; | |
2510 | 32'b10xxxxx110110xxxxx000000001xxxxx : xlate[255:0]="EDGE8N"; | |
2511 | 32'b10xxxxx110110xxxxx000000010xxxxx : xlate[255:0]="EDGE8L"; | |
2512 | 32'b10xxxxx110110xxxxx000000011xxxxx : xlate[255:0]="EDGE8LN"; | |
2513 | 32'b10xxxxx110110xxxxx000000100xxxxx : xlate[255:0]="EDGE16"; | |
2514 | 32'b10xxxxx110110xxxxx000000101xxxxx : xlate[255:0]="EDGE16N"; | |
2515 | 32'b10xxxxx110110xxxxx000000110xxxxx : xlate[255:0]="EDGE16L"; | |
2516 | 32'b10xxxxx110110xxxxx000000111xxxxx : xlate[255:0]="EDGE16LN"; | |
2517 | 32'b10xxxxx110110xxxxx000001000xxxxx : xlate[255:0]="EDGE32"; | |
2518 | 32'b10xxxxx110110xxxxx000001001xxxxx : xlate[255:0]="EDGE32N"; | |
2519 | 32'b10xxxxx110110xxxxx000001010xxxxx : xlate[255:0]="EDGE32L"; | |
2520 | 32'b10xxxxx110110xxxxx000001011xxxxx : xlate[255:0]="EDGE32LN"; | |
2521 | 32'b10xxxxx110110xxxxx000010000xxxxx : xlate[255:0]="ARRAY8"; | |
2522 | 32'b10xxxxx110110xxxxx000010010xxxxx : xlate[255:0]="ARRAY16"; | |
2523 | 32'b10xxxxx110110xxxxx000010100xxxxx : xlate[255:0]="ARRAY32"; | |
2524 | 32'b10xxxxx110110xxxxx010000001xxxxx : xlate[255:0]="SIAM"; | |
2525 | default : xlate[255:0]="unknown"; | |
2526 | endcase | |
2527 | end | |
2528 | endfunction // xlate | |
2529 | ||
2530 | ||
2531 | `endif | |
2532 | ||
2533 | endmodule | |
2534 | ||
2535 | `endif | |
2536 | ||
2537 | ||
2538 | `ifdef CORE_1 | |
2539 | ||
2540 | module 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 | ||
2717 | integer i; | |
2718 | integer start_dmiss0; | |
2719 | integer start_dmiss1; | |
2720 | integer start_dmiss2; | |
2721 | integer start_dmiss3; | |
2722 | integer start_dmiss4; | |
2723 | integer start_dmiss5; | |
2724 | integer start_dmiss6; | |
2725 | integer start_dmiss7; | |
2726 | integer number_dmiss; | |
2727 | integer start_imiss0; | |
2728 | integer start_imiss1; | |
2729 | integer start_imiss2; | |
2730 | integer start_imiss3; | |
2731 | integer start_imiss4; | |
2732 | integer start_imiss5; | |
2733 | integer start_imiss6; | |
2734 | integer start_imiss7; | |
2735 | integer active_imiss0; | |
2736 | integer active_imiss1; | |
2737 | integer active_imiss2; | |
2738 | integer active_imiss3; | |
2739 | integer active_imiss4; | |
2740 | integer active_imiss5; | |
2741 | integer active_imiss6; | |
2742 | integer active_imiss7; | |
2743 | integer first_imiss0; | |
2744 | integer first_imiss1; | |
2745 | integer first_imiss2; | |
2746 | integer first_imiss3; | |
2747 | integer first_imiss4; | |
2748 | integer first_imiss5; | |
2749 | integer first_imiss6; | |
2750 | integer first_imiss7; | |
2751 | integer number_imiss; | |
2752 | integer clock; | |
2753 | integer sum_dmiss_latency; | |
2754 | integer sum_imiss_latency; | |
2755 | reg spec_dmiss; | |
2756 | integer dmiss_cnt; | |
2757 | integer imiss_cnt; | |
2758 | reg pcx_req; | |
2759 | integer l15dmiss_cnt; | |
2760 | integer l15imiss_cnt; | |
2761 | ||
2762 | ||
2763 | initial 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 | ||
2819 | end //} | |
2820 | ||
2821 | wire [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 | ||
2830 | wire [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}; | |
2838 | wire [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 | |
2853 | wire [63:0] ctxt_z_tsb_cfg0_reg [7:0]; // 1 per thread | |
2854 | wire [63:0] ctxt_z_tsb_cfg1_reg [7:0]; | |
2855 | wire [63:0] ctxt_z_tsb_cfg2_reg [7:0]; | |
2856 | wire [63:0] ctxt_z_tsb_cfg3_reg [7:0]; | |
2857 | wire [63:0] ctxt_nz_tsb_cfg0_reg [7:0]; | |
2858 | wire [63:0] ctxt_nz_tsb_cfg1_reg [7:0]; | |
2859 | wire [63:0] ctxt_nz_tsb_cfg2_reg [7:0]; | |
2860 | wire [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 | ||
2878 | wire [83:0] mmu_mra0_a0 = `SPC1.mmu.mra0.array.mem[0]; | |
2879 | wire [83:0] mmu_mra0_a8 = `SPC1.mmu.mra0.array.mem[8]; | |
2880 | wire [83:0] mmu_mra0_a16 = `SPC1.mmu.mra0.array.mem[16]; | |
2881 | wire [83:0] mmu_mra0_a24 = `SPC1.mmu.mra0.array.mem[24]; | |
2882 | wire [83:0] mmu_mra0_a1 = `SPC1.mmu.mra0.array.mem[1]; | |
2883 | wire [83:0] mmu_mra0_a9 = `SPC1.mmu.mra0.array.mem[9]; | |
2884 | wire [83:0] mmu_mra0_a17 = `SPC1.mmu.mra0.array.mem[17]; | |
2885 | wire [83:0] mmu_mra0_a25 = `SPC1.mmu.mra0.array.mem[25]; | |
2886 | wire [83:0] mmu_mra0_a2 = `SPC1.mmu.mra0.array.mem[2]; | |
2887 | wire [83:0] mmu_mra0_a10 = `SPC1.mmu.mra0.array.mem[10]; | |
2888 | wire [83:0] mmu_mra0_a18 = `SPC1.mmu.mra0.array.mem[18]; | |
2889 | wire [83:0] mmu_mra0_a26 = `SPC1.mmu.mra0.array.mem[26]; | |
2890 | wire [83:0] mmu_mra0_a3 = `SPC1.mmu.mra0.array.mem[3]; | |
2891 | wire [83:0] mmu_mra0_a11 = `SPC1.mmu.mra0.array.mem[11]; | |
2892 | wire [83:0] mmu_mra0_a19 = `SPC1.mmu.mra0.array.mem[19]; | |
2893 | wire [83:0] mmu_mra0_a27 = `SPC1.mmu.mra0.array.mem[27]; | |
2894 | wire [83:0] mmu_mra1_a0 = `SPC1.mmu.mra1.array.mem[0]; | |
2895 | wire [83:0] mmu_mra1_a8 = `SPC1.mmu.mra1.array.mem[8]; | |
2896 | wire [83:0] mmu_mra1_a16 = `SPC1.mmu.mra1.array.mem[16]; | |
2897 | wire [83:0] mmu_mra1_a24 = `SPC1.mmu.mra1.array.mem[24]; | |
2898 | wire [83:0] mmu_mra1_a1 = `SPC1.mmu.mra1.array.mem[1]; | |
2899 | wire [83:0] mmu_mra1_a9 = `SPC1.mmu.mra1.array.mem[9]; | |
2900 | wire [83:0] mmu_mra1_a17 = `SPC1.mmu.mra1.array.mem[17]; | |
2901 | wire [83:0] mmu_mra1_a25 = `SPC1.mmu.mra1.array.mem[25]; | |
2902 | wire [83:0] mmu_mra1_a2 = `SPC1.mmu.mra1.array.mem[2]; | |
2903 | wire [83:0] mmu_mra1_a10 = `SPC1.mmu.mra1.array.mem[10]; | |
2904 | wire [83:0] mmu_mra1_a18 = `SPC1.mmu.mra1.array.mem[18]; | |
2905 | wire [83:0] mmu_mra1_a26 = `SPC1.mmu.mra1.array.mem[26]; | |
2906 | wire [83:0] mmu_mra1_a3 = `SPC1.mmu.mra1.array.mem[3]; | |
2907 | wire [83:0] mmu_mra1_a11 = `SPC1.mmu.mra1.array.mem[11]; | |
2908 | wire [83:0] mmu_mra1_a19 = `SPC1.mmu.mra1.array.mem[19]; | |
2909 | wire [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. | |
2914 | assign 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 | }; | |
2921 | assign 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 | }; | |
2928 | assign 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 | }; | |
2935 | assign 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 | }; | |
2942 | assign 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 | }; | |
2949 | assign 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 | }; | |
2956 | assign 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 | }; | |
2963 | assign 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. | |
2973 | assign 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 | }; | |
2980 | assign 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 | }; | |
2987 | assign 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 | }; | |
2994 | assign 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 | }; | |
3001 | assign 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 | }; | |
3008 | assign 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 | }; | |
3015 | assign 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 | }; | |
3022 | assign 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. | |
3032 | assign 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 | }; | |
3039 | assign 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 | }; | |
3046 | assign 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 | }; | |
3053 | assign 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 | }; | |
3060 | assign 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 | }; | |
3067 | assign 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 | }; | |
3074 | assign 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 | }; | |
3081 | assign 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. | |
3091 | assign 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 | }; | |
3098 | assign 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 | }; | |
3105 | assign 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 | }; | |
3112 | assign 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 | }; | |
3119 | assign 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 | }; | |
3126 | assign 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 | }; | |
3133 | assign 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 | }; | |
3140 | assign 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. | |
3150 | assign 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 | }; | |
3157 | assign 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 | }; | |
3164 | assign 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 | }; | |
3171 | assign 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 | }; | |
3178 | assign 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 | }; | |
3185 | assign 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 | }; | |
3192 | assign 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 | }; | |
3199 | assign 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. | |
3209 | assign 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 | }; | |
3216 | assign 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 | }; | |
3223 | assign 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 | }; | |
3230 | assign 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 | }; | |
3237 | assign 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 | }; | |
3244 | assign 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 | }; | |
3251 | assign 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 | }; | |
3258 | assign 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. | |
3268 | assign 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 | }; | |
3275 | assign 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 | }; | |
3282 | assign 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 | }; | |
3289 | assign 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 | }; | |
3296 | assign 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 | }; | |
3303 | assign 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 | }; | |
3310 | assign 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 | }; | |
3317 | assign 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. | |
3327 | assign 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 | }; | |
3334 | assign 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 | }; | |
3341 | assign 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 | }; | |
3348 | assign 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 | }; | |
3355 | assign 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 | }; | |
3362 | assign 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 | }; | |
3369 | assign 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 | }; | |
3376 | assign 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 | |
3395 | wire [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) | |
3410 | wire [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 | ||
3423 | wire [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 | ||
3434 | reg tlb_bypass_m; | |
3435 | reg tlb_bypass_b; | |
3436 | reg tlb_rd_vld_m; | |
3437 | reg tlb_rd_vld_b; | |
3438 | reg lsu_tl_gt_0_b; | |
3439 | reg [7:0] dcc_asi_b; | |
3440 | reg asi_internal_w; | |
3441 | ||
3442 | always @ (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; | |
3463 | end // } | |
3464 | ||
3465 | // TL determines whether Nucleus or Primary | |
3466 | wire [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 | ||
3470 | wire [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 | ||
3496 | wire [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 | ||
3522 | wire 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 | ||
3526 | wire [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 | ||
3536 | wire [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 | ||
3548 | reg [71:0] tick_cmpr_0; | |
3549 | reg [71:0] stick_cmpr_0; | |
3550 | reg [71:0] hstick_cmpr_0; | |
3551 | reg [151:0] trap_entry_1_t0; | |
3552 | reg [151:0] trap_entry_2_t0; | |
3553 | reg [151:0] trap_entry_3_t0; | |
3554 | reg [151:0] trap_entry_4_t0; | |
3555 | reg [151:0] trap_entry_5_t0; | |
3556 | reg [151:0] trap_entry_6_t0; | |
3557 | ||
3558 | always @(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 | ||
3571 | end // } | |
3572 | reg [71:0] tick_cmpr_1; | |
3573 | reg [71:0] stick_cmpr_1; | |
3574 | reg [71:0] hstick_cmpr_1; | |
3575 | reg [151:0] trap_entry_1_t1; | |
3576 | reg [151:0] trap_entry_2_t1; | |
3577 | reg [151:0] trap_entry_3_t1; | |
3578 | reg [151:0] trap_entry_4_t1; | |
3579 | reg [151:0] trap_entry_5_t1; | |
3580 | reg [151:0] trap_entry_6_t1; | |
3581 | ||
3582 | always @(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 | ||
3595 | end // } | |
3596 | reg [71:0] tick_cmpr_2; | |
3597 | reg [71:0] stick_cmpr_2; | |
3598 | reg [71:0] hstick_cmpr_2; | |
3599 | reg [151:0] trap_entry_1_t2; | |
3600 | reg [151:0] trap_entry_2_t2; | |
3601 | reg [151:0] trap_entry_3_t2; | |
3602 | reg [151:0] trap_entry_4_t2; | |
3603 | reg [151:0] trap_entry_5_t2; | |
3604 | reg [151:0] trap_entry_6_t2; | |
3605 | ||
3606 | always @(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 | ||
3619 | end // } | |
3620 | reg [71:0] tick_cmpr_3; | |
3621 | reg [71:0] stick_cmpr_3; | |
3622 | reg [71:0] hstick_cmpr_3; | |
3623 | reg [151:0] trap_entry_1_t3; | |
3624 | reg [151:0] trap_entry_2_t3; | |
3625 | reg [151:0] trap_entry_3_t3; | |
3626 | reg [151:0] trap_entry_4_t3; | |
3627 | reg [151:0] trap_entry_5_t3; | |
3628 | reg [151:0] trap_entry_6_t3; | |
3629 | ||
3630 | always @(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 | ||
3643 | end // } | |
3644 | reg [71:0] tick_cmpr_4; | |
3645 | reg [71:0] stick_cmpr_4; | |
3646 | reg [71:0] hstick_cmpr_4; | |
3647 | reg [151:0] trap_entry_1_t4; | |
3648 | reg [151:0] trap_entry_2_t4; | |
3649 | reg [151:0] trap_entry_3_t4; | |
3650 | reg [151:0] trap_entry_4_t4; | |
3651 | reg [151:0] trap_entry_5_t4; | |
3652 | reg [151:0] trap_entry_6_t4; | |
3653 | ||
3654 | always @(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 | ||
3667 | end // } | |
3668 | reg [71:0] tick_cmpr_5; | |
3669 | reg [71:0] stick_cmpr_5; | |
3670 | reg [71:0] hstick_cmpr_5; | |
3671 | reg [151:0] trap_entry_1_t5; | |
3672 | reg [151:0] trap_entry_2_t5; | |
3673 | reg [151:0] trap_entry_3_t5; | |
3674 | reg [151:0] trap_entry_4_t5; | |
3675 | reg [151:0] trap_entry_5_t5; | |
3676 | reg [151:0] trap_entry_6_t5; | |
3677 | ||
3678 | always @(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 | ||
3691 | end // } | |
3692 | reg [71:0] tick_cmpr_6; | |
3693 | reg [71:0] stick_cmpr_6; | |
3694 | reg [71:0] hstick_cmpr_6; | |
3695 | reg [151:0] trap_entry_1_t6; | |
3696 | reg [151:0] trap_entry_2_t6; | |
3697 | reg [151:0] trap_entry_3_t6; | |
3698 | reg [151:0] trap_entry_4_t6; | |
3699 | reg [151:0] trap_entry_5_t6; | |
3700 | reg [151:0] trap_entry_6_t6; | |
3701 | ||
3702 | always @(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 | ||
3715 | end // } | |
3716 | reg [71:0] tick_cmpr_7; | |
3717 | reg [71:0] stick_cmpr_7; | |
3718 | reg [71:0] hstick_cmpr_7; | |
3719 | reg [151:0] trap_entry_1_t7; | |
3720 | reg [151:0] trap_entry_2_t7; | |
3721 | reg [151:0] trap_entry_3_t7; | |
3722 | reg [151:0] trap_entry_4_t7; | |
3723 | reg [151:0] trap_entry_5_t7; | |
3724 | reg [151:0] trap_entry_6_t7; | |
3725 | ||
3726 | always @(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 | ||
3739 | end // } | |
3740 | ||
3741 | //------------------------------------ | |
3742 | // ASI & Trap State machines | |
3743 | always @(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 | ||
3832 | end // } | |
3833 | ||
3834 | ||
3835 | always @(posedge `BENCH_SPC1_GCLK) begin | |
3836 | ||
3837 | // debug code for TPCC analysis | |
3838 | `ifdef TPCC | |
3839 | if (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 | |
3849 | end | |
3850 | ||
3851 | pcx_req <= |`SPC1.spc_pcx_req_pq[8:0]; | |
3852 | ||
3853 | if (`SPC1.ifu_l15_valid==1) begin | |
3854 | imiss_cnt=imiss_cnt+1; | |
3855 | $display("imiss cnt is %0d",imiss_cnt); | |
3856 | end | |
3857 | if (spec_dmiss==1 && `SPC1.lsu_l15_cancel==0) begin | |
3858 | dmiss_cnt=dmiss_cnt+1; | |
3859 | $display("dmiss cnt is %0d",dmiss_cnt); | |
3860 | ||
3861 | end | |
3862 | spec_dmiss <= `SPC1.lsu_l15_valid & `SPC1.lsu_l15_load; | |
3863 | ||
3864 | clock = clock+1; | |
3865 | ||
3866 | // keep track of imiss latencies | |
3867 | if (`SPC1.ftu_agc_thr0_cmiss_c==1) begin | |
3868 | start_imiss0=clock; | |
3869 | active_imiss0=1; | |
3870 | end | |
3871 | if (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; | |
3877 | end | |
3878 | if (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; | |
3880 | end | |
3881 | if (`SPC1.ftu_agc_thr1_cmiss_c==1) begin | |
3882 | start_imiss1=clock; | |
3883 | active_imiss1=1; | |
3884 | end | |
3885 | if (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; | |
3891 | end | |
3892 | if (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; | |
3894 | end | |
3895 | if (`SPC1.ftu_agc_thr2_cmiss_c==1) begin | |
3896 | start_imiss2=clock; | |
3897 | active_imiss2=1; | |
3898 | end | |
3899 | if (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; | |
3905 | end | |
3906 | if (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; | |
3908 | end | |
3909 | if (`SPC1.ftu_agc_thr3_cmiss_c==1) begin | |
3910 | start_imiss3=clock; | |
3911 | active_imiss3=1; | |
3912 | end | |
3913 | if (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; | |
3919 | end | |
3920 | if (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; | |
3922 | end | |
3923 | if (`SPC1.ftu_agc_thr4_cmiss_c==1) begin | |
3924 | start_imiss4=clock; | |
3925 | active_imiss4=1; | |
3926 | end | |
3927 | if (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; | |
3933 | end | |
3934 | if (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; | |
3936 | end | |
3937 | if (`SPC1.ftu_agc_thr5_cmiss_c==1) begin | |
3938 | start_imiss5=clock; | |
3939 | active_imiss5=1; | |
3940 | end | |
3941 | if (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; | |
3947 | end | |
3948 | if (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; | |
3950 | end | |
3951 | if (`SPC1.ftu_agc_thr6_cmiss_c==1) begin | |
3952 | start_imiss6=clock; | |
3953 | active_imiss6=1; | |
3954 | end | |
3955 | if (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; | |
3961 | end | |
3962 | if (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; | |
3964 | end | |
3965 | if (`SPC1.ftu_agc_thr7_cmiss_c==1) begin | |
3966 | start_imiss7=clock; | |
3967 | active_imiss7=1; | |
3968 | end | |
3969 | if (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; | |
3975 | end | |
3976 | if (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; | |
3978 | end | |
3979 | ||
3980 | if (`SPC1.pku.swl0.set_lsu_sync_wait==1) begin | |
3981 | start_dmiss0=clock; | |
3982 | end | |
3983 | if (`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); | |
3987 | end | |
3988 | if (`SPC1.pku.swl1.set_lsu_sync_wait==1) begin | |
3989 | start_dmiss1=clock; | |
3990 | end | |
3991 | if (`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); | |
3995 | end | |
3996 | if (`SPC1.pku.swl2.set_lsu_sync_wait==1) begin | |
3997 | start_dmiss2=clock; | |
3998 | end | |
3999 | if (`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); | |
4003 | end | |
4004 | if (`SPC1.pku.swl3.set_lsu_sync_wait==1) begin | |
4005 | start_dmiss3=clock; | |
4006 | end | |
4007 | if (`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); | |
4011 | end | |
4012 | if (`SPC1.pku.swl4.set_lsu_sync_wait==1) begin | |
4013 | start_dmiss4=clock; | |
4014 | end | |
4015 | if (`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); | |
4019 | end | |
4020 | if (`SPC1.pku.swl5.set_lsu_sync_wait==1) begin | |
4021 | start_dmiss5=clock; | |
4022 | end | |
4023 | if (`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); | |
4027 | end | |
4028 | if (`SPC1.pku.swl6.set_lsu_sync_wait==1) begin | |
4029 | start_dmiss6=clock; | |
4030 | end | |
4031 | if (`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); | |
4035 | end | |
4036 | if (`SPC1.pku.swl7.set_lsu_sync_wait==1) begin | |
4037 | start_dmiss7=clock; | |
4038 | end | |
4039 | if (`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); | |
4043 | end | |
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 | ||
4234 | end // 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 | |
4239 | assign return0 = `SPC1.exu0.rml.return_w & | |
4240 | `SPC1.exu0.rml.inst_vld_w; | |
4241 | assign return1 = `SPC1.exu1.rml.return_w & | |
4242 | `SPC1.exu1.rml.inst_vld_w; | |
4243 | assign 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 | |
4257 | assign ex0_tid_e = `SPC1.exu0.ect_tid_lth_e[1:0]; | |
4258 | assign ex0_valid_e = `SPC1.dec.dec_valid_e[0] & ~fgu0_e & ~load0_e & | |
4259 | ~retry0_e & ~done0_e; | |
4260 | assign ex1_tid_e = `SPC1.exu1.ect_tid_lth_e[1:0]; | |
4261 | assign ex1_valid_e = `SPC1.dec.dec_valid_e[1] & ~fgu1_e & ~load1_e & | |
4262 | ~retry1_e & ~done1_e; | |
4263 | ||
4264 | assign ex_asr_valid = `SPC1.lsu.dcc.asi_store_m & `SPC1.lsu.dcc.asi_sync_m ; | |
4265 | ||
4266 | assign 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 | |
4279 | assign 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 | |
4290 | wire [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... | |
4301 | reg [7:0] block_store_w; | |
4302 | always @(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]; | |
4305 | end | |
4306 | ||
4307 | wire [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 | ||
4319 | assign 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 | ||
4333 | assign 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 | |
4341 | assign 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 | |
4354 | wire 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 | ||
4358 | assign fg_cond_fb = fg_cond_fb_pre_err & ~fgu_err_fb; | |
4359 | ||
4360 | // Idiv/Fdiv signals | |
4361 | ||
4362 | assign fgu_idiv_valid = fg_div_valid & div_idest; | |
4363 | ||
4364 | ||
4365 | assign fgu_fdiv_valid = fg_fdiv_valid_fw & div_fdest; | |
4366 | ||
4367 | ||
4368 | // Lsu signals needed to check lsu results | |
4369 | ||
4370 | assign lsu_valid = lsu_check | lsu_data_w; | |
4371 | ||
4372 | assign fg_div_valid = `SPC1.fgu_divide_completion & ~div_special_cancel_f4; | |
4373 | ||
4374 | // State machine asserts lsu_check for LD hit/miss | |
4375 | always @(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 // } | |
4421 | end | |
4422 | ||
4423 | ||
4424 | assign lsu_tid = `SPC1.lsu.dcc.ld_tid_b[2:0]; | |
4425 | // Don't assert LSU_complete in case of dtlb or irf errors | |
4426 | ||
4427 | assign 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 | ||
4432 | assign 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 | ||
4441 | assign lsu_tid_dec_b[0] = `SPC1.lsu.dcc.ld_tid_b[2:0] == 3'd0; | |
4442 | assign lsu_tid_dec_b[1] = `SPC1.lsu.dcc.ld_tid_b[2:0] == 3'd1; | |
4443 | assign lsu_tid_dec_b[2] = `SPC1.lsu.dcc.ld_tid_b[2:0] == 3'd2; | |
4444 | assign lsu_tid_dec_b[3] = `SPC1.lsu.dcc.ld_tid_b[2:0] == 3'd3; | |
4445 | assign lsu_tid_dec_b[4] = `SPC1.lsu.dcc.ld_tid_b[2:0] == 3'd4; | |
4446 | assign lsu_tid_dec_b[5] = `SPC1.lsu.dcc.ld_tid_b[2:0] == 3'd5; | |
4447 | assign lsu_tid_dec_b[6] = `SPC1.lsu.dcc.ld_tid_b[2:0] == 3'd6; | |
4448 | assign lsu_tid_dec_b[7] = `SPC1.lsu.dcc.ld_tid_b[2:0] == 3'd7; | |
4449 | ||
4450 | assign 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); | |
4452 | assign dec_flush_lb = `SPC1.dec.dec_flush_lb | `SPC1.tlu_flush_lsu_b; | |
4453 | ||
4454 | ||
4455 | // LSU interface to CCX stub | |
4456 | ||
4457 | assign exu_lsu_valid = `SPC1.dec.del.lsu_valid_e; | |
4458 | assign exu_lsu_addr[47:0] = `SPC1.exu_lsu_address_e[47:0]; | |
4459 | assign exu_lsu_tid[2:0] = lsu_tid_e[2:0]; | |
4460 | assign exu_lsu_regid[4:0] = `SPC1.dec.dec_lsu_rd_e[4:0]; | |
4461 | assign exu_lsu_data[63:0] = `SPC1.exu_lsu_store_data_e[63:0]; | |
4462 | assign 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]); | |
4466 | assign 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 | ||
4513 | initial 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; | |
4522 | end | |
4523 | ||
4524 | always @(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 | ||
4574 | end //} | |
4575 | ||
4576 | /////////////////////////////////////////////////////////////////////////////// | |
4577 | // Functions | |
4578 | /////////////////////////////////////////////////////////////////////////////// | |
4579 | function [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 | |
4594 | endfunction | |
4595 | ||
4596 | function [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 | |
4611 | endfunction | |
4612 | ||
4613 | //--------------------- | |
4614 | ||
4615 | function [255:0] xlate; | |
4616 | input [31:0] inst; | |
4617 | ||
4618 | begin | |
4619 | casex(inst[31:0]) | |
4620 | 32'b10xxxxx110100xxxxx001000011xxxxx : xlate[255:0]="FADDq"; | |
4621 | 32'b10xxxxx110100xxxxx001000111xxxxx : xlate[255:0]="FSUBq"; | |
4622 | 32'b10000xx110101xxxxx001010011xxxxx : xlate[255:0]="FCMPq"; | |
4623 | 32'b10000xx110101xxxxx001010111xxxxx : xlate[255:0]="FCMPEq"; | |
4624 | 32'b10xxxxx110100xxxxx011001101xxxxx : xlate[255:0]="FsTOq"; | |
4625 | 32'b10xxxxx110100xxxxx011001110xxxxx : xlate[255:0]="FdTOq"; | |
4626 | 32'b10xxxxx110100xxxxx010001100xxxxx : xlate[255:0]="FxTOq"; | |
4627 | 32'b10xxxxx110100xxxxx011001100xxxxx : xlate[255:0]="FiTOq"; | |
4628 | 32'b10xxxxx110100xxxxx000000011xxxxx : xlate[255:0]="FMOVq"; | |
4629 | 32'b10xxxxx110100xxxxx000000111xxxxx : xlate[255:0]="FNEGq"; | |
4630 | 32'b10xxxxx110100xxxxx000001011xxxxx : xlate[255:0]="FABSq"; | |
4631 | 32'b10xxxxx110100xxxxx001001011xxxxx : xlate[255:0]="FMULq"; | |
4632 | 32'b10xxxxx110100xxxxx001101110xxxxx : xlate[255:0]="FdMULq"; | |
4633 | 32'b10xxxxx110100xxxxx001001111xxxxx : xlate[255:0]="FDIVq"; | |
4634 | 32'b10xxxxx110100xxxxx000101011xxxxx : xlate[255:0]="FSQRTq"; | |
4635 | 32'b10xxxxx1101010xxxx0xx100111xxxxx : xlate[255:0]="FMOVrQa"; | |
4636 | 32'b10xxxxx1101010xxxx0x1x00111xxxxx : xlate[255:0]="FMOVrQb"; | |
4637 | 32'b10xxxxx110100xxxxx011010011xxxxx : xlate[255:0]="FqTOi"; | |
4638 | 32'b10xxxxx110100xxxxx010000011xxxxx : xlate[255:0]="FqTOx"; | |
4639 | 32'b10xxxxx110100xxxxx011000111xxxxx : xlate[255:0]="FqTOs"; | |
4640 | 32'b10xxxxx110100xxxxx011001011xxxxx : xlate[255:0]="FqTOd"; | |
4641 | 32'b11xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQF"; | |
4642 | 32'b11xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFi"; | |
4643 | 32'b11xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQFA"; | |
4644 | 32'b11xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFAi"; | |
4645 | 32'b11xxxxx100110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFi"; | |
4646 | 32'b11xxxxx100110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQF"; | |
4647 | 32'b11xxxxx110110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQFA"; | |
4648 | 32'b11xxxxx110110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFAi"; | |
4649 | 32'b10xxxxx1101010xxxxxxx000011xxxxx : xlate[255:0]="FMOVQcc"; | |
4650 | 32'b10xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADD"; | |
4651 | 32'b10xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDcc"; | |
4652 | 32'b10xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDC"; | |
4653 | 32'b10xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDCcc"; | |
4654 | 32'b10xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDi"; | |
4655 | 32'b10xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDcci"; | |
4656 | 32'b10xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCi"; | |
4657 | 32'b10xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCcci"; | |
4658 | 32'b00x0xx1011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr1"; | |
4659 | 32'b00x0x1x011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr2"; | |
4660 | 32'b00xx000110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfccA"; | |
4661 | 32'b00xx1xx110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc1"; | |
4662 | 32'b00xxx1x110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc2"; | |
4663 | 32'b00xxxx1110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc3"; | |
4664 | 32'b00xx000101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfccA"; | |
4665 | 32'b00xx1xx101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc1"; | |
4666 | 32'b00xxx1x101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc2"; | |
4667 | 32'b00xxxx1101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc3"; | |
4668 | 32'b00xx000010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BiccA"; | |
4669 | 32'b00xx1xx010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc1"; | |
4670 | 32'b00xxx1x010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc2"; | |
4671 | 32'b00xxxx1010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc3"; | |
4672 | 32'b00xx000001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPccA"; | |
4673 | 32'b00xx1xx001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc1"; | |
4674 | 32'b00xxx1x001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc2"; | |
4675 | 32'b00xxxx1001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc3"; | |
4676 | 32'b01xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="CALL"; | |
4677 | 32'b11xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASA"; | |
4678 | 32'b11xxxxx111110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASXA"; | |
4679 | 32'b11xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASAi"; | |
4680 | 32'b11xxxxx111110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASXAi"; | |
4681 | 32'b10xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIV"; | |
4682 | 32'b10xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIV"; | |
4683 | 32'b10xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVcc"; | |
4684 | 32'b10xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVcc"; | |
4685 | 32'b10xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVi"; | |
4686 | 32'b10xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVi"; | |
4687 | 32'b10xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVcci"; | |
4688 | 32'b10xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVcci"; | |
4689 | 32'b1000000111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="DONE"; | |
4690 | 32'b1000001111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RETRY"; | |
4691 | 32'b10xxxxx110100xxxxx001000001xxxxx : xlate[255:0]="FADDs"; | |
4692 | 32'b10xxxxx110100xxxxx001000010xxxxx : xlate[255:0]="FADDd"; | |
4693 | 32'b10xxxxx110100xxxxx001000101xxxxx : xlate[255:0]="FSUBs"; | |
4694 | 32'b10xxxxx110100xxxxx001000110xxxxx : xlate[255:0]="FSUBd"; | |
4695 | 32'b10000xx110101xxxxx001010001xxxxx : xlate[255:0]="FCMPs"; | |
4696 | 32'b10000xx110101xxxxx001010010xxxxx : xlate[255:0]="FCMPd"; | |
4697 | 32'b10000xx110101xxxxx001010101xxxxx : xlate[255:0]="FCMPEs"; | |
4698 | 32'b10000xx110101xxxxx001010110xxxxx : xlate[255:0]="FCMPEd"; | |
4699 | 32'b10xxxxx110100xxxxx010000001xxxxx : xlate[255:0]="FsTOx"; | |
4700 | 32'b10xxxxx110100xxxxx010000010xxxxx : xlate[255:0]="FdTOx"; | |
4701 | 32'b10xxxxx110100xxxxx011010001xxxxx : xlate[255:0]="FsTOi"; | |
4702 | 32'b10xxxxx110100xxxxx011010010xxxxx : xlate[255:0]="FdTOi"; | |
4703 | 32'b10xxxxx110100xxxxx011001001xxxxx : xlate[255:0]="FsTOd"; | |
4704 | 32'b10xxxxx110100xxxxx011000110xxxxx : xlate[255:0]="FdTOs"; | |
4705 | 32'b10xxxxx110100xxxxx010000100xxxxx : xlate[255:0]="FxTOs"; | |
4706 | 32'b10xxxxx110100xxxxx010001000xxxxx : xlate[255:0]="FxTOd"; | |
4707 | 32'b10xxxxx110100xxxxx011000100xxxxx : xlate[255:0]="FiTOs"; | |
4708 | 32'b10xxxxx110100xxxxx011001000xxxxx : xlate[255:0]="FiTOd"; | |
4709 | 32'b10xxxxx110100xxxxx000000001xxxxx : xlate[255:0]="FMOVs"; | |
4710 | 32'b10xxxxx110100xxxxx000000010xxxxx : xlate[255:0]="FMOVd"; | |
4711 | 32'b10xxxxx110100xxxxx000000101xxxxx : xlate[255:0]="FNEGs"; | |
4712 | 32'b10xxxxx110100xxxxx000000110xxxxx : xlate[255:0]="FNEGd"; | |
4713 | 32'b10xxxxx110100xxxxx000001001xxxxx : xlate[255:0]="FABSs"; | |
4714 | 32'b10xxxxx110100xxxxx000001010xxxxx : xlate[255:0]="FABSd"; | |
4715 | 32'b10xxxxx110100xxxxx001001001xxxxx : xlate[255:0]="FMULs"; | |
4716 | 32'b10xxxxx110100xxxxx001001010xxxxx : xlate[255:0]="FMULd"; | |
4717 | 32'b10xxxxx110100xxxxx001101001xxxxx : xlate[255:0]="FsMULd"; | |
4718 | 32'b10xxxxx110100xxxxx001001101xxxxx : xlate[255:0]="FDIVs"; | |
4719 | 32'b10xxxxx110100xxxxx001001110xxxxx : xlate[255:0]="FDIVd"; | |
4720 | 32'b10xxxxx110100xxxxx000101001xxxxx : xlate[255:0]="FSQRTs"; | |
4721 | 32'b10xxxxx110100xxxxx000101010xxxxx : xlate[255:0]="FSQRTd"; | |
4722 | 32'b10xxxxx111011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSH"; | |
4723 | 32'b10xxxxx111011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="FLUSHi"; | |
4724 | 32'b10xxxxx101011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSHw"; | |
4725 | 32'b10xxxxx111000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="JMPL"; | |
4726 | 32'b10xxxxx111000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="JMPLi"; | |
4727 | 32'b11xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDF"; | |
4728 | 32'b11xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDF"; | |
4729 | 32'b1100000100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFSR"; | |
4730 | 32'b1100001100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXFSR"; | |
4731 | 32'b11xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFi"; | |
4732 | 32'b11xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFi"; | |
4733 | 32'b1100000100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFSRi"; | |
4734 | 32'b1100001100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXFSRi"; | |
4735 | 32'b11xxxxx110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFA"; | |
4736 | 32'b11xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDFA"; | |
4737 | 32'b11xxxxx110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFAi"; | |
4738 | 32'b11xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFAi"; | |
4739 | 32'b11xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSB"; | |
4740 | 32'b11xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSH"; | |
4741 | 32'b11xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSW"; | |
4742 | 32'b11xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUB"; | |
4743 | 32'b11xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUH"; | |
4744 | 32'b11xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUW"; | |
4745 | 32'b11xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDX"; | |
4746 | 32'b11xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDD"; | |
4747 | 32'b11xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBi"; | |
4748 | 32'b11xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHi"; | |
4749 | 32'b11xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWi"; | |
4750 | 32'b11xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBi"; | |
4751 | 32'b11xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHi"; | |
4752 | 32'b11xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWi"; | |
4753 | 32'b11xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXi"; | |
4754 | 32'b11xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDi"; | |
4755 | 32'b11xxxxx011001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSBA"; | |
4756 | 32'b11xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSHA"; | |
4757 | 32'b11xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSWA"; | |
4758 | 32'b11xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUBA"; | |
4759 | 32'b11xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUHA"; | |
4760 | 32'b11xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUWA"; | |
4761 | 32'b11xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXA"; | |
4762 | 32'b11xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDA"; | |
4763 | 32'b11xxxxx011001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBAi"; | |
4764 | 32'b11xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHAi"; | |
4765 | 32'b11xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWAi"; | |
4766 | 32'b11xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBAi"; | |
4767 | 32'b11xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHAi"; | |
4768 | 32'b11xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWAi"; | |
4769 | 32'b11xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXAi"; | |
4770 | 32'b11xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDAi"; | |
4771 | 32'b11xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUB"; | |
4772 | 32'b11xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBi"; | |
4773 | 32'b11xxxxx011101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUBA"; | |
4774 | 32'b11xxxxx011101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBAi"; | |
4775 | 32'b10xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="AND"; | |
4776 | 32'b10xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDcc"; | |
4777 | 32'b10xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDN"; | |
4778 | 32'b10xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDNcc"; | |
4779 | 32'b10xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="OR"; | |
4780 | 32'b10xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORcc"; | |
4781 | 32'b10xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORN"; | |
4782 | 32'b10xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORNcc"; | |
4783 | 32'b10xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XOR"; | |
4784 | 32'b10xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XORcc"; | |
4785 | 32'b10xxxxx000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNOR"; | |
4786 | 32'b10xxxxx010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNORcc"; | |
4787 | 32'b10xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDi"; | |
4788 | 32'b10xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDcci"; | |
4789 | 32'b10xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNi"; | |
4790 | 32'b10xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNcci"; | |
4791 | 32'b10xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORi"; | |
4792 | 32'b10xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORcci"; | |
4793 | 32'b10xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNi"; | |
4794 | 32'b10xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNcci"; | |
4795 | 32'b10xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORi"; | |
4796 | 32'b10xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORcci"; | |
4797 | 32'b10xxxxx000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORi"; | |
4798 | 32'b10xxxxx010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORcci"; | |
4799 | 32'b1000000101000011111xxxxxxxxxxxxx : xlate[255:0]="MEMBAR"; | |
4800 | 32'b1000000101000011110xxxxxxxxxxxxx : xlate[255:0]="STBAR"; | |
4801 | 32'b10xxxxx101000000000xxxxxxxxxxxxx : xlate[255:0]="RDY"; | |
4802 | 32'b10xxxxx101000000100xxxxxxxxxxxxx : xlate[255:0]="RDCCR"; | |
4803 | 32'b10xxxxx101000000110xxxxxxxxxxxxx : xlate[255:0]="RDASI"; | |
4804 | 32'b10xxxxx101000001000xxxxxxxxxxxxx : xlate[255:0]="RDTICK"; | |
4805 | 32'b10xxxxx101000001010xxxxxxxxxxxxx : xlate[255:0]="RDPC"; | |
4806 | 32'b10xxxxx101000001100xxxxxxxxxxxxx : xlate[255:0]="RDFPRS"; | |
4807 | 32'b10xxxxx101000100110xxxxxxxxxxxxx : xlate[255:0]="RDGSR"; | |
4808 | 32'b10xxxxx101000100000xxxxxxxxxxxxx : xlate[255:0]="RDPCR"; | |
4809 | 32'b10xxxxx101000100010xxxxxxxxxxxxx : xlate[255:0]="RDPIC"; | |
4810 | 32'b10xxxxx1101010xxxx0xx000001xxxxx : xlate[255:0]="FMOVSfcc"; | |
4811 | 32'b10xxxxx1101010xxxx1xx000001xxxxx : xlate[255:0]="FMOVSxcc"; | |
4812 | 32'b10xxxxx1101010xxxx0xx000010xxxxx : xlate[255:0]="FMOVDfcc"; | |
4813 | 32'b10xxxxx1101010xxxx1xx000010xxxxx : xlate[255:0]="FMOVDxcc"; | |
4814 | 32'b10xxxxx110101xxxxx0xx100101xxxxx : xlate[255:0]="FMOVrS1"; | |
4815 | 32'b10xxxxx110101xxxxx0x1x00101xxxxx : xlate[255:0]="FMOVrS2"; | |
4816 | 32'b10xxxxx110101xxxxx0xx100110xxxxx : xlate[255:0]="FMOVrD1"; | |
4817 | 32'b10xxxxx110101xxxxx0x1x00110xxxxx : xlate[255:0]="FMOVrD2"; | |
4818 | 32'b10xxxxx1011001xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVxcc"; | |
4819 | 32'b10xxxxx1011001xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVxcci"; | |
4820 | 32'b10xxxxx1011000xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVfcc"; | |
4821 | 32'b10xxxxx1011000xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVfcci"; | |
4822 | 32'b10xxxxx101111xxxxx0xx1xxxxxxxxxx : xlate[255:0]="MOVR1"; | |
4823 | 32'b10xxxxx101111xxxxx0x1xxxxxxxxxxx : xlate[255:0]="MOVR2"; | |
4824 | 32'b10xxxxx101111xxxxx1xx1xxxxxxxxxx : xlate[255:0]="MOVRi1"; | |
4825 | 32'b10xxxxx101111xxxxx1x1xxxxxxxxxxx : xlate[255:0]="MOVRi2"; | |
4826 | 32'b10xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULX"; | |
4827 | 32'b10xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVX"; | |
4828 | 32'b10xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVX"; | |
4829 | 32'b10xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULXi"; | |
4830 | 32'b10xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVXi"; | |
4831 | 32'b10xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVXi"; | |
4832 | 32'b10xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMUL"; | |
4833 | 32'b10xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMUL"; | |
4834 | 32'b10xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMULcc"; | |
4835 | 32'b10xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMULcc"; | |
4836 | 32'b10xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULi"; | |
4837 | 32'b10xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULi"; | |
4838 | 32'b10xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULcci"; | |
4839 | 32'b10xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULcci"; | |
4840 | 32'b10xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULScc"; | |
4841 | 32'b10xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULScci"; | |
4842 | 32'b10xxxxx101110000000xxxxxxxxxxxxx : xlate[255:0]="POPC"; | |
4843 | 32'b10xxxxx101110000001xxxxxxxxxxxxx : xlate[255:0]="POPCi"; | |
4844 | 32'b11xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCH"; | |
4845 | 32'b11xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHi"; | |
4846 | 32'b11xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCHA"; | |
4847 | 32'b11xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHAi"; | |
4848 | 32'b10xxxxx101010xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDPR"; | |
4849 | 32'b10xxxxx101001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDHPR"; | |
4850 | 32'b10xxxxx111001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RETURN"; | |
4851 | 32'b10xxxxx111001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RETURNi"; | |
4852 | 32'b10xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SAVE"; | |
4853 | 32'b10xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SAVEi"; | |
4854 | 32'b10xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RESTORE"; | |
4855 | 32'b10xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RESTOREi"; | |
4856 | 32'b1000000110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="SAVED"; | |
4857 | 32'b1000001110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RESTORED"; | |
4858 | 32'b00xxxxx100xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="SETHI"; | |
4859 | 32'b10xxxxx100101xxxxx00xxxxxxxxxxxx : xlate[255:0]="SLL"; | |
4860 | 32'b10xxxxx100110xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRL"; | |
4861 | 32'b10xxxxx100111xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRA"; | |
4862 | 32'b10xxxxx100101xxxxx01xxxxxxxxxxxx : xlate[255:0]="SLLX"; | |
4863 | 32'b10xxxxx100110xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRLX"; | |
4864 | 32'b10xxxxx100111xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRAX"; | |
4865 | 32'b10xxxxx100101xxxxx10xxxxxxxxxxxx : xlate[255:0]="SLLi"; | |
4866 | 32'b10xxxxx100110xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRLi"; | |
4867 | 32'b10xxxxx100111xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRAi"; | |
4868 | 32'b10xxxxx100101xxxxx11xxxxxxxxxxxx : xlate[255:0]="SLLXi"; | |
4869 | 32'b10xxxxx100110xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRLXi"; | |
4870 | 32'b10xxxxx100111xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRAXi"; | |
4871 | 32'b11xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STF"; | |
4872 | 32'b11xxxxx100111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDF"; | |
4873 | 32'b1100000100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFSR"; | |
4874 | 32'b1100001100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXFSR"; | |
4875 | 32'b11xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFi"; | |
4876 | 32'b11xxxxx100111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFi"; | |
4877 | 32'b1100000100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFSRi"; | |
4878 | 32'b1100001100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXFSRi"; | |
4879 | 32'b11xxxxx110100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFA"; | |
4880 | 32'b11xxxxx110111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDFA"; | |
4881 | 32'b11xxxxx110100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFAi"; | |
4882 | 32'b11xxxxx110111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFAi"; | |
4883 | 32'b11xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STB"; | |
4884 | 32'b11xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STH"; | |
4885 | 32'b11xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STW"; | |
4886 | 32'b11xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STX"; | |
4887 | 32'b11xxxx0000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STD"; | |
4888 | 32'b11xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBi"; | |
4889 | 32'b11xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHi"; | |
4890 | 32'b11xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWi"; | |
4891 | 32'b11xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXi"; | |
4892 | 32'b11xxxx0000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDi"; | |
4893 | 32'b11xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STBA"; | |
4894 | 32'b11xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STHA"; | |
4895 | 32'b11xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STWA"; | |
4896 | 32'b11xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXA"; | |
4897 | 32'b11xxxx0010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDA"; | |
4898 | 32'b11xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBAi"; | |
4899 | 32'b11xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHAi"; | |
4900 | 32'b11xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWAi"; | |
4901 | 32'b11xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXAi"; | |
4902 | 32'b11xxxx0010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDAi"; | |
4903 | 32'b10xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUB"; | |
4904 | 32'b10xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBcc"; | |
4905 | 32'b10xxxxx001100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBC"; | |
4906 | 32'b10xxxxx011100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBCcc"; | |
4907 | 32'b10xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBi"; | |
4908 | 32'b10xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBcci"; | |
4909 | 32'b10xxxxx001100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCi"; | |
4910 | 32'b10xxxxx011100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCcci"; | |
4911 | 32'b11xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAP"; | |
4912 | 32'b11xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPi"; | |
4913 | 32'b11xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAPA"; | |
4914 | 32'b11xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPAi"; | |
4915 | 32'b10xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDcc"; | |
4916 | 32'b10xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDccTV"; | |
4917 | 32'b10xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDcci"; | |
4918 | 32'b10xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDccTVi"; | |
4919 | 32'b10xxxxx100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBcc"; | |
4920 | 32'b10xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBccTV"; | |
4921 | 32'b10xxxxx100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBcci"; | |
4922 | 32'b10xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBccTVi"; | |
4923 | 32'b10xxxxx111010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TCC"; | |
4924 | 32'b10xxxxx111010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TCCi"; | |
4925 | 32'b10xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPR"; | |
4926 | 32'b10xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPRi"; | |
4927 | 32'b10xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRHPR"; | |
4928 | 32'b10xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRHPRi"; | |
4929 | 32'b1000000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRY"; | |
4930 | 32'b1000010110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRCCR"; | |
4931 | 32'b1000011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRASI"; | |
4932 | 32'b1000110110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRFPRS"; | |
4933 | 32'b1010011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRGSR"; | |
4934 | 32'b1010000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPCR"; | |
4935 | 32'b1010001110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPIC"; | |
4936 | 32'b1000000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRYi"; | |
4937 | 32'b1000010110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRCCRi"; | |
4938 | 32'b1000011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRASIi"; | |
4939 | 32'b1000110110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRFPRSi"; | |
4940 | 32'b1010011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRGSRi"; | |
4941 | 32'b1010000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPCRi"; | |
4942 | 32'b1010001110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPICi"; | |
4943 | 32'b1001111110000000001xxxxxxxxxxxxx : xlate[255:0]="SIR"; | |
4944 | 32'b10xxxxx110110xxxxx001010000xxxxx : xlate[255:0]="FPADD16"; | |
4945 | 32'b10xxxxx110110xxxxx001010001xxxxx : xlate[255:0]="FPADD16S"; | |
4946 | 32'b10xxxxx110110xxxxx001010010xxxxx : xlate[255:0]="FPADD32"; | |
4947 | 32'b10xxxxx110110xxxxx001010011xxxxx : xlate[255:0]="FPADD32S"; | |
4948 | 32'b10xxxxx110110xxxxx001010100xxxxx : xlate[255:0]="FPSUB16"; | |
4949 | 32'b10xxxxx110110xxxxx001010101xxxxx : xlate[255:0]="FPSUB16S"; | |
4950 | 32'b10xxxxx110110xxxxx001010110xxxxx : xlate[255:0]="FPSUB32"; | |
4951 | 32'b10xxxxx110110xxxxx001010111xxxxx : xlate[255:0]="FPSUB32S"; | |
4952 | 32'b10xxxxx110110xxxxx000111011xxxxx : xlate[255:0]="FPACK16"; | |
4953 | 32'b10xxxxx110110xxxxx000111010xxxxx : xlate[255:0]="FPACK32"; | |
4954 | 32'b10xxxxx110110xxxxx000111101xxxxx : xlate[255:0]="FPACKFIX"; | |
4955 | 32'b10xxxxx110110xxxxx001001101xxxxx : xlate[255:0]="FEXPAND"; | |
4956 | 32'b10xxxxx110110xxxxx001001011xxxxx : xlate[255:0]="FPMERGE"; | |
4957 | 32'b10xxxxx110110xxxxx000110001xxxxx : xlate[255:0]="FMUL8x16"; | |
4958 | 32'b10xxxxx110110xxxxx000110011xxxxx : xlate[255:0]="FMUL8x16AU"; | |
4959 | 32'b10xxxxx110110xxxxx000110101xxxxx : xlate[255:0]="FMUL8x16AL"; | |
4960 | 32'b10xxxxx110110xxxxx000110110xxxxx : xlate[255:0]="FMUL8SUx16"; | |
4961 | 32'b10xxxxx110110xxxxx000110111xxxxx : xlate[255:0]="FMUL8ULx16"; | |
4962 | 32'b10xxxxx110110xxxxx000111000xxxxx : xlate[255:0]="FMULD8SUx16"; | |
4963 | 32'b10xxxxx110110xxxxx000111001xxxxx : xlate[255:0]="FMULD8ULx16"; | |
4964 | 32'b10xxxxx110110xxxxx000011000xxxxx : xlate[255:0]="ALIGNADDRESS"; | |
4965 | 32'b10xxxxx110110xxxxx000011010xxxxx : xlate[255:0]="ALIGNADDRESS_LITTLE"; | |
4966 | 32'b10xxxxx110110xxxxx000011001xxxxx : xlate[255:0]="BMASK"; | |
4967 | 32'b10xxxxx110110xxxxx001001000xxxxx : xlate[255:0]="FALIGNDATA"; | |
4968 | 32'b10xxxxx110110xxxxx001001100xxxxx : xlate[255:0]="BSHUFFLE"; | |
4969 | 32'b10xxxxx110110xxxxx001100000xxxxx : xlate[255:0]="FZERO"; | |
4970 | 32'b10xxxxx110110xxxxx001100001xxxxx : xlate[255:0]="FZEROS"; | |
4971 | 32'b10xxxxx110110xxxxx001111110xxxxx : xlate[255:0]="FONE"; | |
4972 | 32'b10xxxxx110110xxxxx001111111xxxxx : xlate[255:0]="FONES"; | |
4973 | 32'b10xxxxx110110xxxxx001110100xxxxx : xlate[255:0]="FSRC1"; | |
4974 | 32'b10xxxxx110110xxxxx001110101xxxxx : xlate[255:0]="FSRC1S"; | |
4975 | 32'b10xxxxx110110xxxxx001111000xxxxx : xlate[255:0]="FSRC2"; | |
4976 | 32'b10xxxxx110110xxxxx001111001xxxxx : xlate[255:0]="FSRC2S"; | |
4977 | 32'b10xxxxx110110xxxxx001101010xxxxx : xlate[255:0]="FNOT1"; | |
4978 | 32'b10xxxxx110110xxxxx001101011xxxxx : xlate[255:0]="FNOT1S"; | |
4979 | 32'b10xxxxx110110xxxxx001100110xxxxx : xlate[255:0]="FNOT2"; | |
4980 | 32'b10xxxxx110110xxxxx001100111xxxxx : xlate[255:0]="FNOT2S"; | |
4981 | 32'b10xxxxx110110xxxxx001111100xxxxx : xlate[255:0]="FOR"; | |
4982 | 32'b10xxxxx110110xxxxx001111101xxxxx : xlate[255:0]="FORS"; | |
4983 | 32'b10xxxxx110110xxxxx001100010xxxxx : xlate[255:0]="FNOR"; | |
4984 | 32'b10xxxxx110110xxxxx001100011xxxxx : xlate[255:0]="FNORS"; | |
4985 | 32'b10xxxxx110110xxxxx001110000xxxxx : xlate[255:0]="FAND"; | |
4986 | 32'b10xxxxx110110xxxxx001110001xxxxx : xlate[255:0]="FANDS"; | |
4987 | 32'b10xxxxx110110xxxxx001101110xxxxx : xlate[255:0]="FNAND"; | |
4988 | 32'b10xxxxx110110xxxxx001101111xxxxx : xlate[255:0]="FNANDS"; | |
4989 | 32'b10xxxxx110110xxxxx001101100xxxxx : xlate[255:0]="FXOR"; | |
4990 | 32'b10xxxxx110110xxxxx001101101xxxxx : xlate[255:0]="FXORS"; | |
4991 | 32'b10xxxxx110110xxxxx001110010xxxxx : xlate[255:0]="FXNOR"; | |
4992 | 32'b10xxxxx110110xxxxx001110011xxxxx : xlate[255:0]="FXNORS"; | |
4993 | 32'b10xxxxx110110xxxxx001111010xxxxx : xlate[255:0]="FORNOT1"; | |
4994 | 32'b10xxxxx110110xxxxx001111011xxxxx : xlate[255:0]="FORNOT1S"; | |
4995 | 32'b10xxxxx110110xxxxx001110110xxxxx : xlate[255:0]="FORNOT2"; | |
4996 | 32'b10xxxxx110110xxxxx001110111xxxxx : xlate[255:0]="FORNOT2S"; | |
4997 | 32'b10xxxxx110110xxxxx001101000xxxxx : xlate[255:0]="FANDNOT1"; | |
4998 | 32'b10xxxxx110110xxxxx001101001xxxxx : xlate[255:0]="FANDNOT1S"; | |
4999 | 32'b10xxxxx110110xxxxx001100100xxxxx : xlate[255:0]="FANDNOT2"; | |
5000 | 32'b10xxxxx110110xxxxx001100101xxxxx : xlate[255:0]="FANDNOT2S"; | |
5001 | 32'b10xxxxx110110xxxxx000101000xxxxx : xlate[255:0]="FCMPGT16"; | |
5002 | 32'b10xxxxx110110xxxxx000101100xxxxx : xlate[255:0]="FCMPGT32"; | |
5003 | 32'b10xxxxx110110xxxxx000100000xxxxx : xlate[255:0]="FCMPLE16"; | |
5004 | 32'b10xxxxx110110xxxxx000100100xxxxx : xlate[255:0]="FCMPLE32"; | |
5005 | 32'b10xxxxx110110xxxxx000100010xxxxx : xlate[255:0]="FCMPNE16"; | |
5006 | 32'b10xxxxx110110xxxxx000100110xxxxx : xlate[255:0]="FCMPNE32"; | |
5007 | 32'b10xxxxx110110xxxxx000101010xxxxx : xlate[255:0]="FCMPEQ16"; | |
5008 | 32'b10xxxxx110110xxxxx000101110xxxxx : xlate[255:0]="FCMPEQ32"; | |
5009 | 32'b10xxxxx110110xxxxx000111110xxxxx : xlate[255:0]="PDIST"; | |
5010 | 32'b10xxxxx110110xxxxx000000000xxxxx : xlate[255:0]="EDGE8"; | |
5011 | 32'b10xxxxx110110xxxxx000000001xxxxx : xlate[255:0]="EDGE8N"; | |
5012 | 32'b10xxxxx110110xxxxx000000010xxxxx : xlate[255:0]="EDGE8L"; | |
5013 | 32'b10xxxxx110110xxxxx000000011xxxxx : xlate[255:0]="EDGE8LN"; | |
5014 | 32'b10xxxxx110110xxxxx000000100xxxxx : xlate[255:0]="EDGE16"; | |
5015 | 32'b10xxxxx110110xxxxx000000101xxxxx : xlate[255:0]="EDGE16N"; | |
5016 | 32'b10xxxxx110110xxxxx000000110xxxxx : xlate[255:0]="EDGE16L"; | |
5017 | 32'b10xxxxx110110xxxxx000000111xxxxx : xlate[255:0]="EDGE16LN"; | |
5018 | 32'b10xxxxx110110xxxxx000001000xxxxx : xlate[255:0]="EDGE32"; | |
5019 | 32'b10xxxxx110110xxxxx000001001xxxxx : xlate[255:0]="EDGE32N"; | |
5020 | 32'b10xxxxx110110xxxxx000001010xxxxx : xlate[255:0]="EDGE32L"; | |
5021 | 32'b10xxxxx110110xxxxx000001011xxxxx : xlate[255:0]="EDGE32LN"; | |
5022 | 32'b10xxxxx110110xxxxx000010000xxxxx : xlate[255:0]="ARRAY8"; | |
5023 | 32'b10xxxxx110110xxxxx000010010xxxxx : xlate[255:0]="ARRAY16"; | |
5024 | 32'b10xxxxx110110xxxxx000010100xxxxx : xlate[255:0]="ARRAY32"; | |
5025 | 32'b10xxxxx110110xxxxx010000001xxxxx : xlate[255:0]="SIAM"; | |
5026 | default : xlate[255:0]="unknown"; | |
5027 | endcase | |
5028 | end | |
5029 | endfunction // xlate | |
5030 | ||
5031 | ||
5032 | `endif | |
5033 | ||
5034 | endmodule | |
5035 | ||
5036 | `endif | |
5037 | ||
5038 | ||
5039 | `ifdef CORE_2 | |
5040 | ||
5041 | module 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 | ||
5218 | integer i; | |
5219 | integer start_dmiss0; | |
5220 | integer start_dmiss1; | |
5221 | integer start_dmiss2; | |
5222 | integer start_dmiss3; | |
5223 | integer start_dmiss4; | |
5224 | integer start_dmiss5; | |
5225 | integer start_dmiss6; | |
5226 | integer start_dmiss7; | |
5227 | integer number_dmiss; | |
5228 | integer start_imiss0; | |
5229 | integer start_imiss1; | |
5230 | integer start_imiss2; | |
5231 | integer start_imiss3; | |
5232 | integer start_imiss4; | |
5233 | integer start_imiss5; | |
5234 | integer start_imiss6; | |
5235 | integer start_imiss7; | |
5236 | integer active_imiss0; | |
5237 | integer active_imiss1; | |
5238 | integer active_imiss2; | |
5239 | integer active_imiss3; | |
5240 | integer active_imiss4; | |
5241 | integer active_imiss5; | |
5242 | integer active_imiss6; | |
5243 | integer active_imiss7; | |
5244 | integer first_imiss0; | |
5245 | integer first_imiss1; | |
5246 | integer first_imiss2; | |
5247 | integer first_imiss3; | |
5248 | integer first_imiss4; | |
5249 | integer first_imiss5; | |
5250 | integer first_imiss6; | |
5251 | integer first_imiss7; | |
5252 | integer number_imiss; | |
5253 | integer clock; | |
5254 | integer sum_dmiss_latency; | |
5255 | integer sum_imiss_latency; | |
5256 | reg spec_dmiss; | |
5257 | integer dmiss_cnt; | |
5258 | integer imiss_cnt; | |
5259 | reg pcx_req; | |
5260 | integer l15dmiss_cnt; | |
5261 | integer l15imiss_cnt; | |
5262 | ||
5263 | ||
5264 | initial 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 | ||
5320 | end //} | |
5321 | ||
5322 | wire [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 | ||
5331 | wire [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}; | |
5339 | wire [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 | |
5354 | wire [63:0] ctxt_z_tsb_cfg0_reg [7:0]; // 1 per thread | |
5355 | wire [63:0] ctxt_z_tsb_cfg1_reg [7:0]; | |
5356 | wire [63:0] ctxt_z_tsb_cfg2_reg [7:0]; | |
5357 | wire [63:0] ctxt_z_tsb_cfg3_reg [7:0]; | |
5358 | wire [63:0] ctxt_nz_tsb_cfg0_reg [7:0]; | |
5359 | wire [63:0] ctxt_nz_tsb_cfg1_reg [7:0]; | |
5360 | wire [63:0] ctxt_nz_tsb_cfg2_reg [7:0]; | |
5361 | wire [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 | ||
5379 | wire [83:0] mmu_mra0_a0 = `SPC2.mmu.mra0.array.mem[0]; | |
5380 | wire [83:0] mmu_mra0_a8 = `SPC2.mmu.mra0.array.mem[8]; | |
5381 | wire [83:0] mmu_mra0_a16 = `SPC2.mmu.mra0.array.mem[16]; | |
5382 | wire [83:0] mmu_mra0_a24 = `SPC2.mmu.mra0.array.mem[24]; | |
5383 | wire [83:0] mmu_mra0_a1 = `SPC2.mmu.mra0.array.mem[1]; | |
5384 | wire [83:0] mmu_mra0_a9 = `SPC2.mmu.mra0.array.mem[9]; | |
5385 | wire [83:0] mmu_mra0_a17 = `SPC2.mmu.mra0.array.mem[17]; | |
5386 | wire [83:0] mmu_mra0_a25 = `SPC2.mmu.mra0.array.mem[25]; | |
5387 | wire [83:0] mmu_mra0_a2 = `SPC2.mmu.mra0.array.mem[2]; | |
5388 | wire [83:0] mmu_mra0_a10 = `SPC2.mmu.mra0.array.mem[10]; | |
5389 | wire [83:0] mmu_mra0_a18 = `SPC2.mmu.mra0.array.mem[18]; | |
5390 | wire [83:0] mmu_mra0_a26 = `SPC2.mmu.mra0.array.mem[26]; | |
5391 | wire [83:0] mmu_mra0_a3 = `SPC2.mmu.mra0.array.mem[3]; | |
5392 | wire [83:0] mmu_mra0_a11 = `SPC2.mmu.mra0.array.mem[11]; | |
5393 | wire [83:0] mmu_mra0_a19 = `SPC2.mmu.mra0.array.mem[19]; | |
5394 | wire [83:0] mmu_mra0_a27 = `SPC2.mmu.mra0.array.mem[27]; | |
5395 | wire [83:0] mmu_mra1_a0 = `SPC2.mmu.mra1.array.mem[0]; | |
5396 | wire [83:0] mmu_mra1_a8 = `SPC2.mmu.mra1.array.mem[8]; | |
5397 | wire [83:0] mmu_mra1_a16 = `SPC2.mmu.mra1.array.mem[16]; | |
5398 | wire [83:0] mmu_mra1_a24 = `SPC2.mmu.mra1.array.mem[24]; | |
5399 | wire [83:0] mmu_mra1_a1 = `SPC2.mmu.mra1.array.mem[1]; | |
5400 | wire [83:0] mmu_mra1_a9 = `SPC2.mmu.mra1.array.mem[9]; | |
5401 | wire [83:0] mmu_mra1_a17 = `SPC2.mmu.mra1.array.mem[17]; | |
5402 | wire [83:0] mmu_mra1_a25 = `SPC2.mmu.mra1.array.mem[25]; | |
5403 | wire [83:0] mmu_mra1_a2 = `SPC2.mmu.mra1.array.mem[2]; | |
5404 | wire [83:0] mmu_mra1_a10 = `SPC2.mmu.mra1.array.mem[10]; | |
5405 | wire [83:0] mmu_mra1_a18 = `SPC2.mmu.mra1.array.mem[18]; | |
5406 | wire [83:0] mmu_mra1_a26 = `SPC2.mmu.mra1.array.mem[26]; | |
5407 | wire [83:0] mmu_mra1_a3 = `SPC2.mmu.mra1.array.mem[3]; | |
5408 | wire [83:0] mmu_mra1_a11 = `SPC2.mmu.mra1.array.mem[11]; | |
5409 | wire [83:0] mmu_mra1_a19 = `SPC2.mmu.mra1.array.mem[19]; | |
5410 | wire [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. | |
5415 | assign 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 | }; | |
5422 | assign 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 | }; | |
5429 | assign 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 | }; | |
5436 | assign 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 | }; | |
5443 | assign 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 | }; | |
5450 | assign 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 | }; | |
5457 | assign 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 | }; | |
5464 | assign 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. | |
5474 | assign 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 | }; | |
5481 | assign 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 | }; | |
5488 | assign 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 | }; | |
5495 | assign 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 | }; | |
5502 | assign 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 | }; | |
5509 | assign 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 | }; | |
5516 | assign 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 | }; | |
5523 | assign 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. | |
5533 | assign 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 | }; | |
5540 | assign 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 | }; | |
5547 | assign 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 | }; | |
5554 | assign 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 | }; | |
5561 | assign 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 | }; | |
5568 | assign 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 | }; | |
5575 | assign 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 | }; | |
5582 | assign 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. | |
5592 | assign 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 | }; | |
5599 | assign 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 | }; | |
5606 | assign 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 | }; | |
5613 | assign 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 | }; | |
5620 | assign 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 | }; | |
5627 | assign 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 | }; | |
5634 | assign 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 | }; | |
5641 | assign 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. | |
5651 | assign 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 | }; | |
5658 | assign 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 | }; | |
5665 | assign 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 | }; | |
5672 | assign 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 | }; | |
5679 | assign 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 | }; | |
5686 | assign 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 | }; | |
5693 | assign 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 | }; | |
5700 | assign 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. | |
5710 | assign 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 | }; | |
5717 | assign 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 | }; | |
5724 | assign 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 | }; | |
5731 | assign 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 | }; | |
5738 | assign 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 | }; | |
5745 | assign 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 | }; | |
5752 | assign 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 | }; | |
5759 | assign 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. | |
5769 | assign 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 | }; | |
5776 | assign 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 | }; | |
5783 | assign 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 | }; | |
5790 | assign 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 | }; | |
5797 | assign 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 | }; | |
5804 | assign 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 | }; | |
5811 | assign 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 | }; | |
5818 | assign 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. | |
5828 | assign 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 | }; | |
5835 | assign 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 | }; | |
5842 | assign 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 | }; | |
5849 | assign 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 | }; | |
5856 | assign 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 | }; | |
5863 | assign 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 | }; | |
5870 | assign 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 | }; | |
5877 | assign 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 | |
5896 | wire [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) | |
5911 | wire [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 | ||
5924 | wire [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 | ||
5935 | reg tlb_bypass_m; | |
5936 | reg tlb_bypass_b; | |
5937 | reg tlb_rd_vld_m; | |
5938 | reg tlb_rd_vld_b; | |
5939 | reg lsu_tl_gt_0_b; | |
5940 | reg [7:0] dcc_asi_b; | |
5941 | reg asi_internal_w; | |
5942 | ||
5943 | always @ (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; | |
5964 | end // } | |
5965 | ||
5966 | // TL determines whether Nucleus or Primary | |
5967 | wire [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 | ||
5971 | wire [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 | ||
5997 | wire [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 | ||
6023 | wire 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 | ||
6027 | wire [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 | ||
6037 | wire [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 | ||
6049 | reg [71:0] tick_cmpr_0; | |
6050 | reg [71:0] stick_cmpr_0; | |
6051 | reg [71:0] hstick_cmpr_0; | |
6052 | reg [151:0] trap_entry_1_t0; | |
6053 | reg [151:0] trap_entry_2_t0; | |
6054 | reg [151:0] trap_entry_3_t0; | |
6055 | reg [151:0] trap_entry_4_t0; | |
6056 | reg [151:0] trap_entry_5_t0; | |
6057 | reg [151:0] trap_entry_6_t0; | |
6058 | ||
6059 | always @(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 | ||
6072 | end // } | |
6073 | reg [71:0] tick_cmpr_1; | |
6074 | reg [71:0] stick_cmpr_1; | |
6075 | reg [71:0] hstick_cmpr_1; | |
6076 | reg [151:0] trap_entry_1_t1; | |
6077 | reg [151:0] trap_entry_2_t1; | |
6078 | reg [151:0] trap_entry_3_t1; | |
6079 | reg [151:0] trap_entry_4_t1; | |
6080 | reg [151:0] trap_entry_5_t1; | |
6081 | reg [151:0] trap_entry_6_t1; | |
6082 | ||
6083 | always @(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 | ||
6096 | end // } | |
6097 | reg [71:0] tick_cmpr_2; | |
6098 | reg [71:0] stick_cmpr_2; | |
6099 | reg [71:0] hstick_cmpr_2; | |
6100 | reg [151:0] trap_entry_1_t2; | |
6101 | reg [151:0] trap_entry_2_t2; | |
6102 | reg [151:0] trap_entry_3_t2; | |
6103 | reg [151:0] trap_entry_4_t2; | |
6104 | reg [151:0] trap_entry_5_t2; | |
6105 | reg [151:0] trap_entry_6_t2; | |
6106 | ||
6107 | always @(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 | ||
6120 | end // } | |
6121 | reg [71:0] tick_cmpr_3; | |
6122 | reg [71:0] stick_cmpr_3; | |
6123 | reg [71:0] hstick_cmpr_3; | |
6124 | reg [151:0] trap_entry_1_t3; | |
6125 | reg [151:0] trap_entry_2_t3; | |
6126 | reg [151:0] trap_entry_3_t3; | |
6127 | reg [151:0] trap_entry_4_t3; | |
6128 | reg [151:0] trap_entry_5_t3; | |
6129 | reg [151:0] trap_entry_6_t3; | |
6130 | ||
6131 | always @(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 | ||
6144 | end // } | |
6145 | reg [71:0] tick_cmpr_4; | |
6146 | reg [71:0] stick_cmpr_4; | |
6147 | reg [71:0] hstick_cmpr_4; | |
6148 | reg [151:0] trap_entry_1_t4; | |
6149 | reg [151:0] trap_entry_2_t4; | |
6150 | reg [151:0] trap_entry_3_t4; | |
6151 | reg [151:0] trap_entry_4_t4; | |
6152 | reg [151:0] trap_entry_5_t4; | |
6153 | reg [151:0] trap_entry_6_t4; | |
6154 | ||
6155 | always @(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 | ||
6168 | end // } | |
6169 | reg [71:0] tick_cmpr_5; | |
6170 | reg [71:0] stick_cmpr_5; | |
6171 | reg [71:0] hstick_cmpr_5; | |
6172 | reg [151:0] trap_entry_1_t5; | |
6173 | reg [151:0] trap_entry_2_t5; | |
6174 | reg [151:0] trap_entry_3_t5; | |
6175 | reg [151:0] trap_entry_4_t5; | |
6176 | reg [151:0] trap_entry_5_t5; | |
6177 | reg [151:0] trap_entry_6_t5; | |
6178 | ||
6179 | always @(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 | ||
6192 | end // } | |
6193 | reg [71:0] tick_cmpr_6; | |
6194 | reg [71:0] stick_cmpr_6; | |
6195 | reg [71:0] hstick_cmpr_6; | |
6196 | reg [151:0] trap_entry_1_t6; | |
6197 | reg [151:0] trap_entry_2_t6; | |
6198 | reg [151:0] trap_entry_3_t6; | |
6199 | reg [151:0] trap_entry_4_t6; | |
6200 | reg [151:0] trap_entry_5_t6; | |
6201 | reg [151:0] trap_entry_6_t6; | |
6202 | ||
6203 | always @(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 | ||
6216 | end // } | |
6217 | reg [71:0] tick_cmpr_7; | |
6218 | reg [71:0] stick_cmpr_7; | |
6219 | reg [71:0] hstick_cmpr_7; | |
6220 | reg [151:0] trap_entry_1_t7; | |
6221 | reg [151:0] trap_entry_2_t7; | |
6222 | reg [151:0] trap_entry_3_t7; | |
6223 | reg [151:0] trap_entry_4_t7; | |
6224 | reg [151:0] trap_entry_5_t7; | |
6225 | reg [151:0] trap_entry_6_t7; | |
6226 | ||
6227 | always @(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 | ||
6240 | end // } | |
6241 | ||
6242 | //------------------------------------ | |
6243 | // ASI & Trap State machines | |
6244 | always @(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 | ||
6333 | end // } | |
6334 | ||
6335 | ||
6336 | always @(posedge `BENCH_SPC2_GCLK) begin | |
6337 | ||
6338 | // debug code for TPCC analysis | |
6339 | `ifdef TPCC | |
6340 | if (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 | |
6350 | end | |
6351 | ||
6352 | pcx_req <= |`SPC2.spc_pcx_req_pq[8:0]; | |
6353 | ||
6354 | if (`SPC2.ifu_l15_valid==1) begin | |
6355 | imiss_cnt=imiss_cnt+1; | |
6356 | $display("imiss cnt is %0d",imiss_cnt); | |
6357 | end | |
6358 | if (spec_dmiss==1 && `SPC2.lsu_l15_cancel==0) begin | |
6359 | dmiss_cnt=dmiss_cnt+1; | |
6360 | $display("dmiss cnt is %0d",dmiss_cnt); | |
6361 | ||
6362 | end | |
6363 | spec_dmiss <= `SPC2.lsu_l15_valid & `SPC2.lsu_l15_load; | |
6364 | ||
6365 | clock = clock+1; | |
6366 | ||
6367 | // keep track of imiss latencies | |
6368 | if (`SPC2.ftu_agc_thr0_cmiss_c==1) begin | |
6369 | start_imiss0=clock; | |
6370 | active_imiss0=1; | |
6371 | end | |
6372 | if (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; | |
6378 | end | |
6379 | if (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; | |
6381 | end | |
6382 | if (`SPC2.ftu_agc_thr1_cmiss_c==1) begin | |
6383 | start_imiss1=clock; | |
6384 | active_imiss1=1; | |
6385 | end | |
6386 | if (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; | |
6392 | end | |
6393 | if (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; | |
6395 | end | |
6396 | if (`SPC2.ftu_agc_thr2_cmiss_c==1) begin | |
6397 | start_imiss2=clock; | |
6398 | active_imiss2=1; | |
6399 | end | |
6400 | if (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; | |
6406 | end | |
6407 | if (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; | |
6409 | end | |
6410 | if (`SPC2.ftu_agc_thr3_cmiss_c==1) begin | |
6411 | start_imiss3=clock; | |
6412 | active_imiss3=1; | |
6413 | end | |
6414 | if (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; | |
6420 | end | |
6421 | if (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; | |
6423 | end | |
6424 | if (`SPC2.ftu_agc_thr4_cmiss_c==1) begin | |
6425 | start_imiss4=clock; | |
6426 | active_imiss4=1; | |
6427 | end | |
6428 | if (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; | |
6434 | end | |
6435 | if (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; | |
6437 | end | |
6438 | if (`SPC2.ftu_agc_thr5_cmiss_c==1) begin | |
6439 | start_imiss5=clock; | |
6440 | active_imiss5=1; | |
6441 | end | |
6442 | if (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; | |
6448 | end | |
6449 | if (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; | |
6451 | end | |
6452 | if (`SPC2.ftu_agc_thr6_cmiss_c==1) begin | |
6453 | start_imiss6=clock; | |
6454 | active_imiss6=1; | |
6455 | end | |
6456 | if (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; | |
6462 | end | |
6463 | if (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; | |
6465 | end | |
6466 | if (`SPC2.ftu_agc_thr7_cmiss_c==1) begin | |
6467 | start_imiss7=clock; | |
6468 | active_imiss7=1; | |
6469 | end | |
6470 | if (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; | |
6476 | end | |
6477 | if (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; | |
6479 | end | |
6480 | ||
6481 | if (`SPC2.pku.swl0.set_lsu_sync_wait==1) begin | |
6482 | start_dmiss0=clock; | |
6483 | end | |
6484 | if (`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); | |
6488 | end | |
6489 | if (`SPC2.pku.swl1.set_lsu_sync_wait==1) begin | |
6490 | start_dmiss1=clock; | |
6491 | end | |
6492 | if (`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); | |
6496 | end | |
6497 | if (`SPC2.pku.swl2.set_lsu_sync_wait==1) begin | |
6498 | start_dmiss2=clock; | |
6499 | end | |
6500 | if (`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); | |
6504 | end | |
6505 | if (`SPC2.pku.swl3.set_lsu_sync_wait==1) begin | |
6506 | start_dmiss3=clock; | |
6507 | end | |
6508 | if (`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); | |
6512 | end | |
6513 | if (`SPC2.pku.swl4.set_lsu_sync_wait==1) begin | |
6514 | start_dmiss4=clock; | |
6515 | end | |
6516 | if (`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); | |
6520 | end | |
6521 | if (`SPC2.pku.swl5.set_lsu_sync_wait==1) begin | |
6522 | start_dmiss5=clock; | |
6523 | end | |
6524 | if (`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); | |
6528 | end | |
6529 | if (`SPC2.pku.swl6.set_lsu_sync_wait==1) begin | |
6530 | start_dmiss6=clock; | |
6531 | end | |
6532 | if (`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); | |
6536 | end | |
6537 | if (`SPC2.pku.swl7.set_lsu_sync_wait==1) begin | |
6538 | start_dmiss7=clock; | |
6539 | end | |
6540 | if (`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); | |
6544 | end | |
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 | ||
6735 | end // 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 | |
6740 | assign return0 = `SPC2.exu0.rml.return_w & | |
6741 | `SPC2.exu0.rml.inst_vld_w; | |
6742 | assign return1 = `SPC2.exu1.rml.return_w & | |
6743 | `SPC2.exu1.rml.inst_vld_w; | |
6744 | assign 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 | |
6758 | assign ex0_tid_e = `SPC2.exu0.ect_tid_lth_e[1:0]; | |
6759 | assign ex0_valid_e = `SPC2.dec.dec_valid_e[0] & ~fgu0_e & ~load0_e & | |
6760 | ~retry0_e & ~done0_e; | |
6761 | assign ex1_tid_e = `SPC2.exu1.ect_tid_lth_e[1:0]; | |
6762 | assign ex1_valid_e = `SPC2.dec.dec_valid_e[1] & ~fgu1_e & ~load1_e & | |
6763 | ~retry1_e & ~done1_e; | |
6764 | ||
6765 | assign ex_asr_valid = `SPC2.lsu.dcc.asi_store_m & `SPC2.lsu.dcc.asi_sync_m ; | |
6766 | ||
6767 | assign 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 | |
6780 | assign 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 | |
6791 | wire [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... | |
6802 | reg [7:0] block_store_w; | |
6803 | always @(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]; | |
6806 | end | |
6807 | ||
6808 | wire [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 | ||
6820 | assign 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 | ||
6834 | assign 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 | |
6842 | assign 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 | |
6855 | wire 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 | ||
6859 | assign fg_cond_fb = fg_cond_fb_pre_err & ~fgu_err_fb; | |
6860 | ||
6861 | // Idiv/Fdiv signals | |
6862 | ||
6863 | assign fgu_idiv_valid = fg_div_valid & div_idest; | |
6864 | ||
6865 | ||
6866 | assign fgu_fdiv_valid = fg_fdiv_valid_fw & div_fdest; | |
6867 | ||
6868 | ||
6869 | // Lsu signals needed to check lsu results | |
6870 | ||
6871 | assign lsu_valid = lsu_check | lsu_data_w; | |
6872 | ||
6873 | assign fg_div_valid = `SPC2.fgu_divide_completion & ~div_special_cancel_f4; | |
6874 | ||
6875 | // State machine asserts lsu_check for LD hit/miss | |
6876 | always @(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 // } | |
6922 | end | |
6923 | ||
6924 | ||
6925 | assign lsu_tid = `SPC2.lsu.dcc.ld_tid_b[2:0]; | |
6926 | // Don't assert LSU_complete in case of dtlb or irf errors | |
6927 | ||
6928 | assign 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 | ||
6933 | assign 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 | ||
6942 | assign lsu_tid_dec_b[0] = `SPC2.lsu.dcc.ld_tid_b[2:0] == 3'd0; | |
6943 | assign lsu_tid_dec_b[1] = `SPC2.lsu.dcc.ld_tid_b[2:0] == 3'd1; | |
6944 | assign lsu_tid_dec_b[2] = `SPC2.lsu.dcc.ld_tid_b[2:0] == 3'd2; | |
6945 | assign lsu_tid_dec_b[3] = `SPC2.lsu.dcc.ld_tid_b[2:0] == 3'd3; | |
6946 | assign lsu_tid_dec_b[4] = `SPC2.lsu.dcc.ld_tid_b[2:0] == 3'd4; | |
6947 | assign lsu_tid_dec_b[5] = `SPC2.lsu.dcc.ld_tid_b[2:0] == 3'd5; | |
6948 | assign lsu_tid_dec_b[6] = `SPC2.lsu.dcc.ld_tid_b[2:0] == 3'd6; | |
6949 | assign lsu_tid_dec_b[7] = `SPC2.lsu.dcc.ld_tid_b[2:0] == 3'd7; | |
6950 | ||
6951 | assign 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); | |
6953 | assign dec_flush_lb = `SPC2.dec.dec_flush_lb | `SPC2.tlu_flush_lsu_b; | |
6954 | ||
6955 | ||
6956 | // LSU interface to CCX stub | |
6957 | ||
6958 | assign exu_lsu_valid = `SPC2.dec.del.lsu_valid_e; | |
6959 | assign exu_lsu_addr[47:0] = `SPC2.exu_lsu_address_e[47:0]; | |
6960 | assign exu_lsu_tid[2:0] = lsu_tid_e[2:0]; | |
6961 | assign exu_lsu_regid[4:0] = `SPC2.dec.dec_lsu_rd_e[4:0]; | |
6962 | assign exu_lsu_data[63:0] = `SPC2.exu_lsu_store_data_e[63:0]; | |
6963 | assign 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]); | |
6967 | assign 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 | ||
7014 | initial 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; | |
7023 | end | |
7024 | ||
7025 | always @(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 | ||
7075 | end //} | |
7076 | ||
7077 | /////////////////////////////////////////////////////////////////////////////// | |
7078 | // Functions | |
7079 | /////////////////////////////////////////////////////////////////////////////// | |
7080 | function [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 | |
7095 | endfunction | |
7096 | ||
7097 | function [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 | |
7112 | endfunction | |
7113 | ||
7114 | //--------------------- | |
7115 | ||
7116 | function [255:0] xlate; | |
7117 | input [31:0] inst; | |
7118 | ||
7119 | begin | |
7120 | casex(inst[31:0]) | |
7121 | 32'b10xxxxx110100xxxxx001000011xxxxx : xlate[255:0]="FADDq"; | |
7122 | 32'b10xxxxx110100xxxxx001000111xxxxx : xlate[255:0]="FSUBq"; | |
7123 | 32'b10000xx110101xxxxx001010011xxxxx : xlate[255:0]="FCMPq"; | |
7124 | 32'b10000xx110101xxxxx001010111xxxxx : xlate[255:0]="FCMPEq"; | |
7125 | 32'b10xxxxx110100xxxxx011001101xxxxx : xlate[255:0]="FsTOq"; | |
7126 | 32'b10xxxxx110100xxxxx011001110xxxxx : xlate[255:0]="FdTOq"; | |
7127 | 32'b10xxxxx110100xxxxx010001100xxxxx : xlate[255:0]="FxTOq"; | |
7128 | 32'b10xxxxx110100xxxxx011001100xxxxx : xlate[255:0]="FiTOq"; | |
7129 | 32'b10xxxxx110100xxxxx000000011xxxxx : xlate[255:0]="FMOVq"; | |
7130 | 32'b10xxxxx110100xxxxx000000111xxxxx : xlate[255:0]="FNEGq"; | |
7131 | 32'b10xxxxx110100xxxxx000001011xxxxx : xlate[255:0]="FABSq"; | |
7132 | 32'b10xxxxx110100xxxxx001001011xxxxx : xlate[255:0]="FMULq"; | |
7133 | 32'b10xxxxx110100xxxxx001101110xxxxx : xlate[255:0]="FdMULq"; | |
7134 | 32'b10xxxxx110100xxxxx001001111xxxxx : xlate[255:0]="FDIVq"; | |
7135 | 32'b10xxxxx110100xxxxx000101011xxxxx : xlate[255:0]="FSQRTq"; | |
7136 | 32'b10xxxxx1101010xxxx0xx100111xxxxx : xlate[255:0]="FMOVrQa"; | |
7137 | 32'b10xxxxx1101010xxxx0x1x00111xxxxx : xlate[255:0]="FMOVrQb"; | |
7138 | 32'b10xxxxx110100xxxxx011010011xxxxx : xlate[255:0]="FqTOi"; | |
7139 | 32'b10xxxxx110100xxxxx010000011xxxxx : xlate[255:0]="FqTOx"; | |
7140 | 32'b10xxxxx110100xxxxx011000111xxxxx : xlate[255:0]="FqTOs"; | |
7141 | 32'b10xxxxx110100xxxxx011001011xxxxx : xlate[255:0]="FqTOd"; | |
7142 | 32'b11xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQF"; | |
7143 | 32'b11xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFi"; | |
7144 | 32'b11xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQFA"; | |
7145 | 32'b11xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFAi"; | |
7146 | 32'b11xxxxx100110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFi"; | |
7147 | 32'b11xxxxx100110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQF"; | |
7148 | 32'b11xxxxx110110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQFA"; | |
7149 | 32'b11xxxxx110110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFAi"; | |
7150 | 32'b10xxxxx1101010xxxxxxx000011xxxxx : xlate[255:0]="FMOVQcc"; | |
7151 | 32'b10xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADD"; | |
7152 | 32'b10xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDcc"; | |
7153 | 32'b10xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDC"; | |
7154 | 32'b10xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDCcc"; | |
7155 | 32'b10xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDi"; | |
7156 | 32'b10xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDcci"; | |
7157 | 32'b10xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCi"; | |
7158 | 32'b10xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCcci"; | |
7159 | 32'b00x0xx1011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr1"; | |
7160 | 32'b00x0x1x011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr2"; | |
7161 | 32'b00xx000110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfccA"; | |
7162 | 32'b00xx1xx110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc1"; | |
7163 | 32'b00xxx1x110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc2"; | |
7164 | 32'b00xxxx1110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc3"; | |
7165 | 32'b00xx000101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfccA"; | |
7166 | 32'b00xx1xx101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc1"; | |
7167 | 32'b00xxx1x101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc2"; | |
7168 | 32'b00xxxx1101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc3"; | |
7169 | 32'b00xx000010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BiccA"; | |
7170 | 32'b00xx1xx010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc1"; | |
7171 | 32'b00xxx1x010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc2"; | |
7172 | 32'b00xxxx1010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc3"; | |
7173 | 32'b00xx000001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPccA"; | |
7174 | 32'b00xx1xx001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc1"; | |
7175 | 32'b00xxx1x001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc2"; | |
7176 | 32'b00xxxx1001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc3"; | |
7177 | 32'b01xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="CALL"; | |
7178 | 32'b11xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASA"; | |
7179 | 32'b11xxxxx111110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASXA"; | |
7180 | 32'b11xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASAi"; | |
7181 | 32'b11xxxxx111110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASXAi"; | |
7182 | 32'b10xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIV"; | |
7183 | 32'b10xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIV"; | |
7184 | 32'b10xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVcc"; | |
7185 | 32'b10xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVcc"; | |
7186 | 32'b10xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVi"; | |
7187 | 32'b10xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVi"; | |
7188 | 32'b10xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVcci"; | |
7189 | 32'b10xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVcci"; | |
7190 | 32'b1000000111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="DONE"; | |
7191 | 32'b1000001111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RETRY"; | |
7192 | 32'b10xxxxx110100xxxxx001000001xxxxx : xlate[255:0]="FADDs"; | |
7193 | 32'b10xxxxx110100xxxxx001000010xxxxx : xlate[255:0]="FADDd"; | |
7194 | 32'b10xxxxx110100xxxxx001000101xxxxx : xlate[255:0]="FSUBs"; | |
7195 | 32'b10xxxxx110100xxxxx001000110xxxxx : xlate[255:0]="FSUBd"; | |
7196 | 32'b10000xx110101xxxxx001010001xxxxx : xlate[255:0]="FCMPs"; | |
7197 | 32'b10000xx110101xxxxx001010010xxxxx : xlate[255:0]="FCMPd"; | |
7198 | 32'b10000xx110101xxxxx001010101xxxxx : xlate[255:0]="FCMPEs"; | |
7199 | 32'b10000xx110101xxxxx001010110xxxxx : xlate[255:0]="FCMPEd"; | |
7200 | 32'b10xxxxx110100xxxxx010000001xxxxx : xlate[255:0]="FsTOx"; | |
7201 | 32'b10xxxxx110100xxxxx010000010xxxxx : xlate[255:0]="FdTOx"; | |
7202 | 32'b10xxxxx110100xxxxx011010001xxxxx : xlate[255:0]="FsTOi"; | |
7203 | 32'b10xxxxx110100xxxxx011010010xxxxx : xlate[255:0]="FdTOi"; | |
7204 | 32'b10xxxxx110100xxxxx011001001xxxxx : xlate[255:0]="FsTOd"; | |
7205 | 32'b10xxxxx110100xxxxx011000110xxxxx : xlate[255:0]="FdTOs"; | |
7206 | 32'b10xxxxx110100xxxxx010000100xxxxx : xlate[255:0]="FxTOs"; | |
7207 | 32'b10xxxxx110100xxxxx010001000xxxxx : xlate[255:0]="FxTOd"; | |
7208 | 32'b10xxxxx110100xxxxx011000100xxxxx : xlate[255:0]="FiTOs"; | |
7209 | 32'b10xxxxx110100xxxxx011001000xxxxx : xlate[255:0]="FiTOd"; | |
7210 | 32'b10xxxxx110100xxxxx000000001xxxxx : xlate[255:0]="FMOVs"; | |
7211 | 32'b10xxxxx110100xxxxx000000010xxxxx : xlate[255:0]="FMOVd"; | |
7212 | 32'b10xxxxx110100xxxxx000000101xxxxx : xlate[255:0]="FNEGs"; | |
7213 | 32'b10xxxxx110100xxxxx000000110xxxxx : xlate[255:0]="FNEGd"; | |
7214 | 32'b10xxxxx110100xxxxx000001001xxxxx : xlate[255:0]="FABSs"; | |
7215 | 32'b10xxxxx110100xxxxx000001010xxxxx : xlate[255:0]="FABSd"; | |
7216 | 32'b10xxxxx110100xxxxx001001001xxxxx : xlate[255:0]="FMULs"; | |
7217 | 32'b10xxxxx110100xxxxx001001010xxxxx : xlate[255:0]="FMULd"; | |
7218 | 32'b10xxxxx110100xxxxx001101001xxxxx : xlate[255:0]="FsMULd"; | |
7219 | 32'b10xxxxx110100xxxxx001001101xxxxx : xlate[255:0]="FDIVs"; | |
7220 | 32'b10xxxxx110100xxxxx001001110xxxxx : xlate[255:0]="FDIVd"; | |
7221 | 32'b10xxxxx110100xxxxx000101001xxxxx : xlate[255:0]="FSQRTs"; | |
7222 | 32'b10xxxxx110100xxxxx000101010xxxxx : xlate[255:0]="FSQRTd"; | |
7223 | 32'b10xxxxx111011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSH"; | |
7224 | 32'b10xxxxx111011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="FLUSHi"; | |
7225 | 32'b10xxxxx101011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSHw"; | |
7226 | 32'b10xxxxx111000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="JMPL"; | |
7227 | 32'b10xxxxx111000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="JMPLi"; | |
7228 | 32'b11xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDF"; | |
7229 | 32'b11xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDF"; | |
7230 | 32'b1100000100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFSR"; | |
7231 | 32'b1100001100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXFSR"; | |
7232 | 32'b11xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFi"; | |
7233 | 32'b11xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFi"; | |
7234 | 32'b1100000100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFSRi"; | |
7235 | 32'b1100001100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXFSRi"; | |
7236 | 32'b11xxxxx110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFA"; | |
7237 | 32'b11xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDFA"; | |
7238 | 32'b11xxxxx110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFAi"; | |
7239 | 32'b11xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFAi"; | |
7240 | 32'b11xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSB"; | |
7241 | 32'b11xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSH"; | |
7242 | 32'b11xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSW"; | |
7243 | 32'b11xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUB"; | |
7244 | 32'b11xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUH"; | |
7245 | 32'b11xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUW"; | |
7246 | 32'b11xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDX"; | |
7247 | 32'b11xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDD"; | |
7248 | 32'b11xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBi"; | |
7249 | 32'b11xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHi"; | |
7250 | 32'b11xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWi"; | |
7251 | 32'b11xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBi"; | |
7252 | 32'b11xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHi"; | |
7253 | 32'b11xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWi"; | |
7254 | 32'b11xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXi"; | |
7255 | 32'b11xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDi"; | |
7256 | 32'b11xxxxx011001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSBA"; | |
7257 | 32'b11xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSHA"; | |
7258 | 32'b11xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSWA"; | |
7259 | 32'b11xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUBA"; | |
7260 | 32'b11xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUHA"; | |
7261 | 32'b11xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUWA"; | |
7262 | 32'b11xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXA"; | |
7263 | 32'b11xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDA"; | |
7264 | 32'b11xxxxx011001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBAi"; | |
7265 | 32'b11xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHAi"; | |
7266 | 32'b11xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWAi"; | |
7267 | 32'b11xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBAi"; | |
7268 | 32'b11xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHAi"; | |
7269 | 32'b11xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWAi"; | |
7270 | 32'b11xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXAi"; | |
7271 | 32'b11xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDAi"; | |
7272 | 32'b11xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUB"; | |
7273 | 32'b11xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBi"; | |
7274 | 32'b11xxxxx011101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUBA"; | |
7275 | 32'b11xxxxx011101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBAi"; | |
7276 | 32'b10xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="AND"; | |
7277 | 32'b10xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDcc"; | |
7278 | 32'b10xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDN"; | |
7279 | 32'b10xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDNcc"; | |
7280 | 32'b10xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="OR"; | |
7281 | 32'b10xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORcc"; | |
7282 | 32'b10xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORN"; | |
7283 | 32'b10xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORNcc"; | |
7284 | 32'b10xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XOR"; | |
7285 | 32'b10xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XORcc"; | |
7286 | 32'b10xxxxx000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNOR"; | |
7287 | 32'b10xxxxx010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNORcc"; | |
7288 | 32'b10xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDi"; | |
7289 | 32'b10xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDcci"; | |
7290 | 32'b10xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNi"; | |
7291 | 32'b10xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNcci"; | |
7292 | 32'b10xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORi"; | |
7293 | 32'b10xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORcci"; | |
7294 | 32'b10xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNi"; | |
7295 | 32'b10xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNcci"; | |
7296 | 32'b10xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORi"; | |
7297 | 32'b10xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORcci"; | |
7298 | 32'b10xxxxx000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORi"; | |
7299 | 32'b10xxxxx010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORcci"; | |
7300 | 32'b1000000101000011111xxxxxxxxxxxxx : xlate[255:0]="MEMBAR"; | |
7301 | 32'b1000000101000011110xxxxxxxxxxxxx : xlate[255:0]="STBAR"; | |
7302 | 32'b10xxxxx101000000000xxxxxxxxxxxxx : xlate[255:0]="RDY"; | |
7303 | 32'b10xxxxx101000000100xxxxxxxxxxxxx : xlate[255:0]="RDCCR"; | |
7304 | 32'b10xxxxx101000000110xxxxxxxxxxxxx : xlate[255:0]="RDASI"; | |
7305 | 32'b10xxxxx101000001000xxxxxxxxxxxxx : xlate[255:0]="RDTICK"; | |
7306 | 32'b10xxxxx101000001010xxxxxxxxxxxxx : xlate[255:0]="RDPC"; | |
7307 | 32'b10xxxxx101000001100xxxxxxxxxxxxx : xlate[255:0]="RDFPRS"; | |
7308 | 32'b10xxxxx101000100110xxxxxxxxxxxxx : xlate[255:0]="RDGSR"; | |
7309 | 32'b10xxxxx101000100000xxxxxxxxxxxxx : xlate[255:0]="RDPCR"; | |
7310 | 32'b10xxxxx101000100010xxxxxxxxxxxxx : xlate[255:0]="RDPIC"; | |
7311 | 32'b10xxxxx1101010xxxx0xx000001xxxxx : xlate[255:0]="FMOVSfcc"; | |
7312 | 32'b10xxxxx1101010xxxx1xx000001xxxxx : xlate[255:0]="FMOVSxcc"; | |
7313 | 32'b10xxxxx1101010xxxx0xx000010xxxxx : xlate[255:0]="FMOVDfcc"; | |
7314 | 32'b10xxxxx1101010xxxx1xx000010xxxxx : xlate[255:0]="FMOVDxcc"; | |
7315 | 32'b10xxxxx110101xxxxx0xx100101xxxxx : xlate[255:0]="FMOVrS1"; | |
7316 | 32'b10xxxxx110101xxxxx0x1x00101xxxxx : xlate[255:0]="FMOVrS2"; | |
7317 | 32'b10xxxxx110101xxxxx0xx100110xxxxx : xlate[255:0]="FMOVrD1"; | |
7318 | 32'b10xxxxx110101xxxxx0x1x00110xxxxx : xlate[255:0]="FMOVrD2"; | |
7319 | 32'b10xxxxx1011001xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVxcc"; | |
7320 | 32'b10xxxxx1011001xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVxcci"; | |
7321 | 32'b10xxxxx1011000xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVfcc"; | |
7322 | 32'b10xxxxx1011000xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVfcci"; | |
7323 | 32'b10xxxxx101111xxxxx0xx1xxxxxxxxxx : xlate[255:0]="MOVR1"; | |
7324 | 32'b10xxxxx101111xxxxx0x1xxxxxxxxxxx : xlate[255:0]="MOVR2"; | |
7325 | 32'b10xxxxx101111xxxxx1xx1xxxxxxxxxx : xlate[255:0]="MOVRi1"; | |
7326 | 32'b10xxxxx101111xxxxx1x1xxxxxxxxxxx : xlate[255:0]="MOVRi2"; | |
7327 | 32'b10xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULX"; | |
7328 | 32'b10xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVX"; | |
7329 | 32'b10xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVX"; | |
7330 | 32'b10xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULXi"; | |
7331 | 32'b10xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVXi"; | |
7332 | 32'b10xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVXi"; | |
7333 | 32'b10xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMUL"; | |
7334 | 32'b10xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMUL"; | |
7335 | 32'b10xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMULcc"; | |
7336 | 32'b10xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMULcc"; | |
7337 | 32'b10xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULi"; | |
7338 | 32'b10xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULi"; | |
7339 | 32'b10xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULcci"; | |
7340 | 32'b10xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULcci"; | |
7341 | 32'b10xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULScc"; | |
7342 | 32'b10xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULScci"; | |
7343 | 32'b10xxxxx101110000000xxxxxxxxxxxxx : xlate[255:0]="POPC"; | |
7344 | 32'b10xxxxx101110000001xxxxxxxxxxxxx : xlate[255:0]="POPCi"; | |
7345 | 32'b11xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCH"; | |
7346 | 32'b11xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHi"; | |
7347 | 32'b11xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCHA"; | |
7348 | 32'b11xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHAi"; | |
7349 | 32'b10xxxxx101010xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDPR"; | |
7350 | 32'b10xxxxx101001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDHPR"; | |
7351 | 32'b10xxxxx111001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RETURN"; | |
7352 | 32'b10xxxxx111001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RETURNi"; | |
7353 | 32'b10xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SAVE"; | |
7354 | 32'b10xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SAVEi"; | |
7355 | 32'b10xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RESTORE"; | |
7356 | 32'b10xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RESTOREi"; | |
7357 | 32'b1000000110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="SAVED"; | |
7358 | 32'b1000001110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RESTORED"; | |
7359 | 32'b00xxxxx100xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="SETHI"; | |
7360 | 32'b10xxxxx100101xxxxx00xxxxxxxxxxxx : xlate[255:0]="SLL"; | |
7361 | 32'b10xxxxx100110xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRL"; | |
7362 | 32'b10xxxxx100111xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRA"; | |
7363 | 32'b10xxxxx100101xxxxx01xxxxxxxxxxxx : xlate[255:0]="SLLX"; | |
7364 | 32'b10xxxxx100110xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRLX"; | |
7365 | 32'b10xxxxx100111xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRAX"; | |
7366 | 32'b10xxxxx100101xxxxx10xxxxxxxxxxxx : xlate[255:0]="SLLi"; | |
7367 | 32'b10xxxxx100110xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRLi"; | |
7368 | 32'b10xxxxx100111xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRAi"; | |
7369 | 32'b10xxxxx100101xxxxx11xxxxxxxxxxxx : xlate[255:0]="SLLXi"; | |
7370 | 32'b10xxxxx100110xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRLXi"; | |
7371 | 32'b10xxxxx100111xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRAXi"; | |
7372 | 32'b11xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STF"; | |
7373 | 32'b11xxxxx100111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDF"; | |
7374 | 32'b1100000100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFSR"; | |
7375 | 32'b1100001100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXFSR"; | |
7376 | 32'b11xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFi"; | |
7377 | 32'b11xxxxx100111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFi"; | |
7378 | 32'b1100000100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFSRi"; | |
7379 | 32'b1100001100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXFSRi"; | |
7380 | 32'b11xxxxx110100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFA"; | |
7381 | 32'b11xxxxx110111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDFA"; | |
7382 | 32'b11xxxxx110100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFAi"; | |
7383 | 32'b11xxxxx110111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFAi"; | |
7384 | 32'b11xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STB"; | |
7385 | 32'b11xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STH"; | |
7386 | 32'b11xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STW"; | |
7387 | 32'b11xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STX"; | |
7388 | 32'b11xxxx0000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STD"; | |
7389 | 32'b11xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBi"; | |
7390 | 32'b11xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHi"; | |
7391 | 32'b11xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWi"; | |
7392 | 32'b11xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXi"; | |
7393 | 32'b11xxxx0000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDi"; | |
7394 | 32'b11xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STBA"; | |
7395 | 32'b11xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STHA"; | |
7396 | 32'b11xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STWA"; | |
7397 | 32'b11xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXA"; | |
7398 | 32'b11xxxx0010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDA"; | |
7399 | 32'b11xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBAi"; | |
7400 | 32'b11xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHAi"; | |
7401 | 32'b11xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWAi"; | |
7402 | 32'b11xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXAi"; | |
7403 | 32'b11xxxx0010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDAi"; | |
7404 | 32'b10xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUB"; | |
7405 | 32'b10xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBcc"; | |
7406 | 32'b10xxxxx001100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBC"; | |
7407 | 32'b10xxxxx011100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBCcc"; | |
7408 | 32'b10xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBi"; | |
7409 | 32'b10xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBcci"; | |
7410 | 32'b10xxxxx001100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCi"; | |
7411 | 32'b10xxxxx011100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCcci"; | |
7412 | 32'b11xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAP"; | |
7413 | 32'b11xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPi"; | |
7414 | 32'b11xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAPA"; | |
7415 | 32'b11xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPAi"; | |
7416 | 32'b10xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDcc"; | |
7417 | 32'b10xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDccTV"; | |
7418 | 32'b10xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDcci"; | |
7419 | 32'b10xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDccTVi"; | |
7420 | 32'b10xxxxx100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBcc"; | |
7421 | 32'b10xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBccTV"; | |
7422 | 32'b10xxxxx100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBcci"; | |
7423 | 32'b10xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBccTVi"; | |
7424 | 32'b10xxxxx111010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TCC"; | |
7425 | 32'b10xxxxx111010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TCCi"; | |
7426 | 32'b10xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPR"; | |
7427 | 32'b10xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPRi"; | |
7428 | 32'b10xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRHPR"; | |
7429 | 32'b10xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRHPRi"; | |
7430 | 32'b1000000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRY"; | |
7431 | 32'b1000010110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRCCR"; | |
7432 | 32'b1000011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRASI"; | |
7433 | 32'b1000110110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRFPRS"; | |
7434 | 32'b1010011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRGSR"; | |
7435 | 32'b1010000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPCR"; | |
7436 | 32'b1010001110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPIC"; | |
7437 | 32'b1000000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRYi"; | |
7438 | 32'b1000010110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRCCRi"; | |
7439 | 32'b1000011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRASIi"; | |
7440 | 32'b1000110110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRFPRSi"; | |
7441 | 32'b1010011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRGSRi"; | |
7442 | 32'b1010000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPCRi"; | |
7443 | 32'b1010001110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPICi"; | |
7444 | 32'b1001111110000000001xxxxxxxxxxxxx : xlate[255:0]="SIR"; | |
7445 | 32'b10xxxxx110110xxxxx001010000xxxxx : xlate[255:0]="FPADD16"; | |
7446 | 32'b10xxxxx110110xxxxx001010001xxxxx : xlate[255:0]="FPADD16S"; | |
7447 | 32'b10xxxxx110110xxxxx001010010xxxxx : xlate[255:0]="FPADD32"; | |
7448 | 32'b10xxxxx110110xxxxx001010011xxxxx : xlate[255:0]="FPADD32S"; | |
7449 | 32'b10xxxxx110110xxxxx001010100xxxxx : xlate[255:0]="FPSUB16"; | |
7450 | 32'b10xxxxx110110xxxxx001010101xxxxx : xlate[255:0]="FPSUB16S"; | |
7451 | 32'b10xxxxx110110xxxxx001010110xxxxx : xlate[255:0]="FPSUB32"; | |
7452 | 32'b10xxxxx110110xxxxx001010111xxxxx : xlate[255:0]="FPSUB32S"; | |
7453 | 32'b10xxxxx110110xxxxx000111011xxxxx : xlate[255:0]="FPACK16"; | |
7454 | 32'b10xxxxx110110xxxxx000111010xxxxx : xlate[255:0]="FPACK32"; | |
7455 | 32'b10xxxxx110110xxxxx000111101xxxxx : xlate[255:0]="FPACKFIX"; | |
7456 | 32'b10xxxxx110110xxxxx001001101xxxxx : xlate[255:0]="FEXPAND"; | |
7457 | 32'b10xxxxx110110xxxxx001001011xxxxx : xlate[255:0]="FPMERGE"; | |
7458 | 32'b10xxxxx110110xxxxx000110001xxxxx : xlate[255:0]="FMUL8x16"; | |
7459 | 32'b10xxxxx110110xxxxx000110011xxxxx : xlate[255:0]="FMUL8x16AU"; | |
7460 | 32'b10xxxxx110110xxxxx000110101xxxxx : xlate[255:0]="FMUL8x16AL"; | |
7461 | 32'b10xxxxx110110xxxxx000110110xxxxx : xlate[255:0]="FMUL8SUx16"; | |
7462 | 32'b10xxxxx110110xxxxx000110111xxxxx : xlate[255:0]="FMUL8ULx16"; | |
7463 | 32'b10xxxxx110110xxxxx000111000xxxxx : xlate[255:0]="FMULD8SUx16"; | |
7464 | 32'b10xxxxx110110xxxxx000111001xxxxx : xlate[255:0]="FMULD8ULx16"; | |
7465 | 32'b10xxxxx110110xxxxx000011000xxxxx : xlate[255:0]="ALIGNADDRESS"; | |
7466 | 32'b10xxxxx110110xxxxx000011010xxxxx : xlate[255:0]="ALIGNADDRESS_LITTLE"; | |
7467 | 32'b10xxxxx110110xxxxx000011001xxxxx : xlate[255:0]="BMASK"; | |
7468 | 32'b10xxxxx110110xxxxx001001000xxxxx : xlate[255:0]="FALIGNDATA"; | |
7469 | 32'b10xxxxx110110xxxxx001001100xxxxx : xlate[255:0]="BSHUFFLE"; | |
7470 | 32'b10xxxxx110110xxxxx001100000xxxxx : xlate[255:0]="FZERO"; | |
7471 | 32'b10xxxxx110110xxxxx001100001xxxxx : xlate[255:0]="FZEROS"; | |
7472 | 32'b10xxxxx110110xxxxx001111110xxxxx : xlate[255:0]="FONE"; | |
7473 | 32'b10xxxxx110110xxxxx001111111xxxxx : xlate[255:0]="FONES"; | |
7474 | 32'b10xxxxx110110xxxxx001110100xxxxx : xlate[255:0]="FSRC1"; | |
7475 | 32'b10xxxxx110110xxxxx001110101xxxxx : xlate[255:0]="FSRC1S"; | |
7476 | 32'b10xxxxx110110xxxxx001111000xxxxx : xlate[255:0]="FSRC2"; | |
7477 | 32'b10xxxxx110110xxxxx001111001xxxxx : xlate[255:0]="FSRC2S"; | |
7478 | 32'b10xxxxx110110xxxxx001101010xxxxx : xlate[255:0]="FNOT1"; | |
7479 | 32'b10xxxxx110110xxxxx001101011xxxxx : xlate[255:0]="FNOT1S"; | |
7480 | 32'b10xxxxx110110xxxxx001100110xxxxx : xlate[255:0]="FNOT2"; | |
7481 | 32'b10xxxxx110110xxxxx001100111xxxxx : xlate[255:0]="FNOT2S"; | |
7482 | 32'b10xxxxx110110xxxxx001111100xxxxx : xlate[255:0]="FOR"; | |
7483 | 32'b10xxxxx110110xxxxx001111101xxxxx : xlate[255:0]="FORS"; | |
7484 | 32'b10xxxxx110110xxxxx001100010xxxxx : xlate[255:0]="FNOR"; | |
7485 | 32'b10xxxxx110110xxxxx001100011xxxxx : xlate[255:0]="FNORS"; | |
7486 | 32'b10xxxxx110110xxxxx001110000xxxxx : xlate[255:0]="FAND"; | |
7487 | 32'b10xxxxx110110xxxxx001110001xxxxx : xlate[255:0]="FANDS"; | |
7488 | 32'b10xxxxx110110xxxxx001101110xxxxx : xlate[255:0]="FNAND"; | |
7489 | 32'b10xxxxx110110xxxxx001101111xxxxx : xlate[255:0]="FNANDS"; | |
7490 | 32'b10xxxxx110110xxxxx001101100xxxxx : xlate[255:0]="FXOR"; | |
7491 | 32'b10xxxxx110110xxxxx001101101xxxxx : xlate[255:0]="FXORS"; | |
7492 | 32'b10xxxxx110110xxxxx001110010xxxxx : xlate[255:0]="FXNOR"; | |
7493 | 32'b10xxxxx110110xxxxx001110011xxxxx : xlate[255:0]="FXNORS"; | |
7494 | 32'b10xxxxx110110xxxxx001111010xxxxx : xlate[255:0]="FORNOT1"; | |
7495 | 32'b10xxxxx110110xxxxx001111011xxxxx : xlate[255:0]="FORNOT1S"; | |
7496 | 32'b10xxxxx110110xxxxx001110110xxxxx : xlate[255:0]="FORNOT2"; | |
7497 | 32'b10xxxxx110110xxxxx001110111xxxxx : xlate[255:0]="FORNOT2S"; | |
7498 | 32'b10xxxxx110110xxxxx001101000xxxxx : xlate[255:0]="FANDNOT1"; | |
7499 | 32'b10xxxxx110110xxxxx001101001xxxxx : xlate[255:0]="FANDNOT1S"; | |
7500 | 32'b10xxxxx110110xxxxx001100100xxxxx : xlate[255:0]="FANDNOT2"; | |
7501 | 32'b10xxxxx110110xxxxx001100101xxxxx : xlate[255:0]="FANDNOT2S"; | |
7502 | 32'b10xxxxx110110xxxxx000101000xxxxx : xlate[255:0]="FCMPGT16"; | |
7503 | 32'b10xxxxx110110xxxxx000101100xxxxx : xlate[255:0]="FCMPGT32"; | |
7504 | 32'b10xxxxx110110xxxxx000100000xxxxx : xlate[255:0]="FCMPLE16"; | |
7505 | 32'b10xxxxx110110xxxxx000100100xxxxx : xlate[255:0]="FCMPLE32"; | |
7506 | 32'b10xxxxx110110xxxxx000100010xxxxx : xlate[255:0]="FCMPNE16"; | |
7507 | 32'b10xxxxx110110xxxxx000100110xxxxx : xlate[255:0]="FCMPNE32"; | |
7508 | 32'b10xxxxx110110xxxxx000101010xxxxx : xlate[255:0]="FCMPEQ16"; | |
7509 | 32'b10xxxxx110110xxxxx000101110xxxxx : xlate[255:0]="FCMPEQ32"; | |
7510 | 32'b10xxxxx110110xxxxx000111110xxxxx : xlate[255:0]="PDIST"; | |
7511 | 32'b10xxxxx110110xxxxx000000000xxxxx : xlate[255:0]="EDGE8"; | |
7512 | 32'b10xxxxx110110xxxxx000000001xxxxx : xlate[255:0]="EDGE8N"; | |
7513 | 32'b10xxxxx110110xxxxx000000010xxxxx : xlate[255:0]="EDGE8L"; | |
7514 | 32'b10xxxxx110110xxxxx000000011xxxxx : xlate[255:0]="EDGE8LN"; | |
7515 | 32'b10xxxxx110110xxxxx000000100xxxxx : xlate[255:0]="EDGE16"; | |
7516 | 32'b10xxxxx110110xxxxx000000101xxxxx : xlate[255:0]="EDGE16N"; | |
7517 | 32'b10xxxxx110110xxxxx000000110xxxxx : xlate[255:0]="EDGE16L"; | |
7518 | 32'b10xxxxx110110xxxxx000000111xxxxx : xlate[255:0]="EDGE16LN"; | |
7519 | 32'b10xxxxx110110xxxxx000001000xxxxx : xlate[255:0]="EDGE32"; | |
7520 | 32'b10xxxxx110110xxxxx000001001xxxxx : xlate[255:0]="EDGE32N"; | |
7521 | 32'b10xxxxx110110xxxxx000001010xxxxx : xlate[255:0]="EDGE32L"; | |
7522 | 32'b10xxxxx110110xxxxx000001011xxxxx : xlate[255:0]="EDGE32LN"; | |
7523 | 32'b10xxxxx110110xxxxx000010000xxxxx : xlate[255:0]="ARRAY8"; | |
7524 | 32'b10xxxxx110110xxxxx000010010xxxxx : xlate[255:0]="ARRAY16"; | |
7525 | 32'b10xxxxx110110xxxxx000010100xxxxx : xlate[255:0]="ARRAY32"; | |
7526 | 32'b10xxxxx110110xxxxx010000001xxxxx : xlate[255:0]="SIAM"; | |
7527 | default : xlate[255:0]="unknown"; | |
7528 | endcase | |
7529 | end | |
7530 | endfunction // xlate | |
7531 | ||
7532 | ||
7533 | `endif | |
7534 | ||
7535 | endmodule | |
7536 | ||
7537 | `endif | |
7538 | ||
7539 | ||
7540 | `ifdef CORE_3 | |
7541 | ||
7542 | module 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 | ||
7719 | integer i; | |
7720 | integer start_dmiss0; | |
7721 | integer start_dmiss1; | |
7722 | integer start_dmiss2; | |
7723 | integer start_dmiss3; | |
7724 | integer start_dmiss4; | |
7725 | integer start_dmiss5; | |
7726 | integer start_dmiss6; | |
7727 | integer start_dmiss7; | |
7728 | integer number_dmiss; | |
7729 | integer start_imiss0; | |
7730 | integer start_imiss1; | |
7731 | integer start_imiss2; | |
7732 | integer start_imiss3; | |
7733 | integer start_imiss4; | |
7734 | integer start_imiss5; | |
7735 | integer start_imiss6; | |
7736 | integer start_imiss7; | |
7737 | integer active_imiss0; | |
7738 | integer active_imiss1; | |
7739 | integer active_imiss2; | |
7740 | integer active_imiss3; | |
7741 | integer active_imiss4; | |
7742 | integer active_imiss5; | |
7743 | integer active_imiss6; | |
7744 | integer active_imiss7; | |
7745 | integer first_imiss0; | |
7746 | integer first_imiss1; | |
7747 | integer first_imiss2; | |
7748 | integer first_imiss3; | |
7749 | integer first_imiss4; | |
7750 | integer first_imiss5; | |
7751 | integer first_imiss6; | |
7752 | integer first_imiss7; | |
7753 | integer number_imiss; | |
7754 | integer clock; | |
7755 | integer sum_dmiss_latency; | |
7756 | integer sum_imiss_latency; | |
7757 | reg spec_dmiss; | |
7758 | integer dmiss_cnt; | |
7759 | integer imiss_cnt; | |
7760 | reg pcx_req; | |
7761 | integer l15dmiss_cnt; | |
7762 | integer l15imiss_cnt; | |
7763 | ||
7764 | ||
7765 | initial 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 | ||
7821 | end //} | |
7822 | ||
7823 | wire [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 | ||
7832 | wire [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}; | |
7840 | wire [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 | |
7855 | wire [63:0] ctxt_z_tsb_cfg0_reg [7:0]; // 1 per thread | |
7856 | wire [63:0] ctxt_z_tsb_cfg1_reg [7:0]; | |
7857 | wire [63:0] ctxt_z_tsb_cfg2_reg [7:0]; | |
7858 | wire [63:0] ctxt_z_tsb_cfg3_reg [7:0]; | |
7859 | wire [63:0] ctxt_nz_tsb_cfg0_reg [7:0]; | |
7860 | wire [63:0] ctxt_nz_tsb_cfg1_reg [7:0]; | |
7861 | wire [63:0] ctxt_nz_tsb_cfg2_reg [7:0]; | |
7862 | wire [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 | ||
7880 | wire [83:0] mmu_mra0_a0 = `SPC3.mmu.mra0.array.mem[0]; | |
7881 | wire [83:0] mmu_mra0_a8 = `SPC3.mmu.mra0.array.mem[8]; | |
7882 | wire [83:0] mmu_mra0_a16 = `SPC3.mmu.mra0.array.mem[16]; | |
7883 | wire [83:0] mmu_mra0_a24 = `SPC3.mmu.mra0.array.mem[24]; | |
7884 | wire [83:0] mmu_mra0_a1 = `SPC3.mmu.mra0.array.mem[1]; | |
7885 | wire [83:0] mmu_mra0_a9 = `SPC3.mmu.mra0.array.mem[9]; | |
7886 | wire [83:0] mmu_mra0_a17 = `SPC3.mmu.mra0.array.mem[17]; | |
7887 | wire [83:0] mmu_mra0_a25 = `SPC3.mmu.mra0.array.mem[25]; | |
7888 | wire [83:0] mmu_mra0_a2 = `SPC3.mmu.mra0.array.mem[2]; | |
7889 | wire [83:0] mmu_mra0_a10 = `SPC3.mmu.mra0.array.mem[10]; | |
7890 | wire [83:0] mmu_mra0_a18 = `SPC3.mmu.mra0.array.mem[18]; | |
7891 | wire [83:0] mmu_mra0_a26 = `SPC3.mmu.mra0.array.mem[26]; | |
7892 | wire [83:0] mmu_mra0_a3 = `SPC3.mmu.mra0.array.mem[3]; | |
7893 | wire [83:0] mmu_mra0_a11 = `SPC3.mmu.mra0.array.mem[11]; | |
7894 | wire [83:0] mmu_mra0_a19 = `SPC3.mmu.mra0.array.mem[19]; | |
7895 | wire [83:0] mmu_mra0_a27 = `SPC3.mmu.mra0.array.mem[27]; | |
7896 | wire [83:0] mmu_mra1_a0 = `SPC3.mmu.mra1.array.mem[0]; | |
7897 | wire [83:0] mmu_mra1_a8 = `SPC3.mmu.mra1.array.mem[8]; | |
7898 | wire [83:0] mmu_mra1_a16 = `SPC3.mmu.mra1.array.mem[16]; | |
7899 | wire [83:0] mmu_mra1_a24 = `SPC3.mmu.mra1.array.mem[24]; | |
7900 | wire [83:0] mmu_mra1_a1 = `SPC3.mmu.mra1.array.mem[1]; | |
7901 | wire [83:0] mmu_mra1_a9 = `SPC3.mmu.mra1.array.mem[9]; | |
7902 | wire [83:0] mmu_mra1_a17 = `SPC3.mmu.mra1.array.mem[17]; | |
7903 | wire [83:0] mmu_mra1_a25 = `SPC3.mmu.mra1.array.mem[25]; | |
7904 | wire [83:0] mmu_mra1_a2 = `SPC3.mmu.mra1.array.mem[2]; | |
7905 | wire [83:0] mmu_mra1_a10 = `SPC3.mmu.mra1.array.mem[10]; | |
7906 | wire [83:0] mmu_mra1_a18 = `SPC3.mmu.mra1.array.mem[18]; | |
7907 | wire [83:0] mmu_mra1_a26 = `SPC3.mmu.mra1.array.mem[26]; | |
7908 | wire [83:0] mmu_mra1_a3 = `SPC3.mmu.mra1.array.mem[3]; | |
7909 | wire [83:0] mmu_mra1_a11 = `SPC3.mmu.mra1.array.mem[11]; | |
7910 | wire [83:0] mmu_mra1_a19 = `SPC3.mmu.mra1.array.mem[19]; | |
7911 | wire [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. | |
7916 | assign 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 | }; | |
7923 | assign 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 | }; | |
7930 | assign 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 | }; | |
7937 | assign 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 | }; | |
7944 | assign 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 | }; | |
7951 | assign 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 | }; | |
7958 | assign 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 | }; | |
7965 | assign 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. | |
7975 | assign 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 | }; | |
7982 | assign 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 | }; | |
7989 | assign 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 | }; | |
7996 | assign 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 | }; | |
8003 | assign 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 | }; | |
8010 | assign 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 | }; | |
8017 | assign 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 | }; | |
8024 | assign 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. | |
8034 | assign 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 | }; | |
8041 | assign 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 | }; | |
8048 | assign 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 | }; | |
8055 | assign 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 | }; | |
8062 | assign 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 | }; | |
8069 | assign 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 | }; | |
8076 | assign 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 | }; | |
8083 | assign 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. | |
8093 | assign 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 | }; | |
8100 | assign 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 | }; | |
8107 | assign 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 | }; | |
8114 | assign 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 | }; | |
8121 | assign 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 | }; | |
8128 | assign 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 | }; | |
8135 | assign 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 | }; | |
8142 | assign 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. | |
8152 | assign 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 | }; | |
8159 | assign 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 | }; | |
8166 | assign 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 | }; | |
8173 | assign 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 | }; | |
8180 | assign 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 | }; | |
8187 | assign 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 | }; | |
8194 | assign 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 | }; | |
8201 | assign 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. | |
8211 | assign 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 | }; | |
8218 | assign 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 | }; | |
8225 | assign 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 | }; | |
8232 | assign 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 | }; | |
8239 | assign 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 | }; | |
8246 | assign 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 | }; | |
8253 | assign 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 | }; | |
8260 | assign 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. | |
8270 | assign 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 | }; | |
8277 | assign 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 | }; | |
8284 | assign 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 | }; | |
8291 | assign 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 | }; | |
8298 | assign 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 | }; | |
8305 | assign 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 | }; | |
8312 | assign 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 | }; | |
8319 | assign 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. | |
8329 | assign 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 | }; | |
8336 | assign 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 | }; | |
8343 | assign 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 | }; | |
8350 | assign 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 | }; | |
8357 | assign 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 | }; | |
8364 | assign 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 | }; | |
8371 | assign 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 | }; | |
8378 | assign 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 | |
8397 | wire [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) | |
8412 | wire [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 | ||
8425 | wire [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 | ||
8436 | reg tlb_bypass_m; | |
8437 | reg tlb_bypass_b; | |
8438 | reg tlb_rd_vld_m; | |
8439 | reg tlb_rd_vld_b; | |
8440 | reg lsu_tl_gt_0_b; | |
8441 | reg [7:0] dcc_asi_b; | |
8442 | reg asi_internal_w; | |
8443 | ||
8444 | always @ (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; | |
8465 | end // } | |
8466 | ||
8467 | // TL determines whether Nucleus or Primary | |
8468 | wire [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 | ||
8472 | wire [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 | ||
8498 | wire [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 | ||
8524 | wire 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 | ||
8528 | wire [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 | ||
8538 | wire [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 | ||
8550 | reg [71:0] tick_cmpr_0; | |
8551 | reg [71:0] stick_cmpr_0; | |
8552 | reg [71:0] hstick_cmpr_0; | |
8553 | reg [151:0] trap_entry_1_t0; | |
8554 | reg [151:0] trap_entry_2_t0; | |
8555 | reg [151:0] trap_entry_3_t0; | |
8556 | reg [151:0] trap_entry_4_t0; | |
8557 | reg [151:0] trap_entry_5_t0; | |
8558 | reg [151:0] trap_entry_6_t0; | |
8559 | ||
8560 | always @(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 | ||
8573 | end // } | |
8574 | reg [71:0] tick_cmpr_1; | |
8575 | reg [71:0] stick_cmpr_1; | |
8576 | reg [71:0] hstick_cmpr_1; | |
8577 | reg [151:0] trap_entry_1_t1; | |
8578 | reg [151:0] trap_entry_2_t1; | |
8579 | reg [151:0] trap_entry_3_t1; | |
8580 | reg [151:0] trap_entry_4_t1; | |
8581 | reg [151:0] trap_entry_5_t1; | |
8582 | reg [151:0] trap_entry_6_t1; | |
8583 | ||
8584 | always @(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 | ||
8597 | end // } | |
8598 | reg [71:0] tick_cmpr_2; | |
8599 | reg [71:0] stick_cmpr_2; | |
8600 | reg [71:0] hstick_cmpr_2; | |
8601 | reg [151:0] trap_entry_1_t2; | |
8602 | reg [151:0] trap_entry_2_t2; | |
8603 | reg [151:0] trap_entry_3_t2; | |
8604 | reg [151:0] trap_entry_4_t2; | |
8605 | reg [151:0] trap_entry_5_t2; | |
8606 | reg [151:0] trap_entry_6_t2; | |
8607 | ||
8608 | always @(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 | ||
8621 | end // } | |
8622 | reg [71:0] tick_cmpr_3; | |
8623 | reg [71:0] stick_cmpr_3; | |
8624 | reg [71:0] hstick_cmpr_3; | |
8625 | reg [151:0] trap_entry_1_t3; | |
8626 | reg [151:0] trap_entry_2_t3; | |
8627 | reg [151:0] trap_entry_3_t3; | |
8628 | reg [151:0] trap_entry_4_t3; | |
8629 | reg [151:0] trap_entry_5_t3; | |
8630 | reg [151:0] trap_entry_6_t3; | |
8631 | ||
8632 | always @(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 | ||
8645 | end // } | |
8646 | reg [71:0] tick_cmpr_4; | |
8647 | reg [71:0] stick_cmpr_4; | |
8648 | reg [71:0] hstick_cmpr_4; | |
8649 | reg [151:0] trap_entry_1_t4; | |
8650 | reg [151:0] trap_entry_2_t4; | |
8651 | reg [151:0] trap_entry_3_t4; | |
8652 | reg [151:0] trap_entry_4_t4; | |
8653 | reg [151:0] trap_entry_5_t4; | |
8654 | reg [151:0] trap_entry_6_t4; | |
8655 | ||
8656 | always @(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 | ||
8669 | end // } | |
8670 | reg [71:0] tick_cmpr_5; | |
8671 | reg [71:0] stick_cmpr_5; | |
8672 | reg [71:0] hstick_cmpr_5; | |
8673 | reg [151:0] trap_entry_1_t5; | |
8674 | reg [151:0] trap_entry_2_t5; | |
8675 | reg [151:0] trap_entry_3_t5; | |
8676 | reg [151:0] trap_entry_4_t5; | |
8677 | reg [151:0] trap_entry_5_t5; | |
8678 | reg [151:0] trap_entry_6_t5; | |
8679 | ||
8680 | always @(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 | ||
8693 | end // } | |
8694 | reg [71:0] tick_cmpr_6; | |
8695 | reg [71:0] stick_cmpr_6; | |
8696 | reg [71:0] hstick_cmpr_6; | |
8697 | reg [151:0] trap_entry_1_t6; | |
8698 | reg [151:0] trap_entry_2_t6; | |
8699 | reg [151:0] trap_entry_3_t6; | |
8700 | reg [151:0] trap_entry_4_t6; | |
8701 | reg [151:0] trap_entry_5_t6; | |
8702 | reg [151:0] trap_entry_6_t6; | |
8703 | ||
8704 | always @(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 | ||
8717 | end // } | |
8718 | reg [71:0] tick_cmpr_7; | |
8719 | reg [71:0] stick_cmpr_7; | |
8720 | reg [71:0] hstick_cmpr_7; | |
8721 | reg [151:0] trap_entry_1_t7; | |
8722 | reg [151:0] trap_entry_2_t7; | |
8723 | reg [151:0] trap_entry_3_t7; | |
8724 | reg [151:0] trap_entry_4_t7; | |
8725 | reg [151:0] trap_entry_5_t7; | |
8726 | reg [151:0] trap_entry_6_t7; | |
8727 | ||
8728 | always @(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 | ||
8741 | end // } | |
8742 | ||
8743 | //------------------------------------ | |
8744 | // ASI & Trap State machines | |
8745 | always @(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 | ||
8834 | end // } | |
8835 | ||
8836 | ||
8837 | always @(posedge `BENCH_SPC3_GCLK) begin | |
8838 | ||
8839 | // debug code for TPCC analysis | |
8840 | `ifdef TPCC | |
8841 | if (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 | |
8851 | end | |
8852 | ||
8853 | pcx_req <= |`SPC3.spc_pcx_req_pq[8:0]; | |
8854 | ||
8855 | if (`SPC3.ifu_l15_valid==1) begin | |
8856 | imiss_cnt=imiss_cnt+1; | |
8857 | $display("imiss cnt is %0d",imiss_cnt); | |
8858 | end | |
8859 | if (spec_dmiss==1 && `SPC3.lsu_l15_cancel==0) begin | |
8860 | dmiss_cnt=dmiss_cnt+1; | |
8861 | $display("dmiss cnt is %0d",dmiss_cnt); | |
8862 | ||
8863 | end | |
8864 | spec_dmiss <= `SPC3.lsu_l15_valid & `SPC3.lsu_l15_load; | |
8865 | ||
8866 | clock = clock+1; | |
8867 | ||
8868 | // keep track of imiss latencies | |
8869 | if (`SPC3.ftu_agc_thr0_cmiss_c==1) begin | |
8870 | start_imiss0=clock; | |
8871 | active_imiss0=1; | |
8872 | end | |
8873 | if (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; | |
8879 | end | |
8880 | if (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; | |
8882 | end | |
8883 | if (`SPC3.ftu_agc_thr1_cmiss_c==1) begin | |
8884 | start_imiss1=clock; | |
8885 | active_imiss1=1; | |
8886 | end | |
8887 | if (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; | |
8893 | end | |
8894 | if (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; | |
8896 | end | |
8897 | if (`SPC3.ftu_agc_thr2_cmiss_c==1) begin | |
8898 | start_imiss2=clock; | |
8899 | active_imiss2=1; | |
8900 | end | |
8901 | if (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; | |
8907 | end | |
8908 | if (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; | |
8910 | end | |
8911 | if (`SPC3.ftu_agc_thr3_cmiss_c==1) begin | |
8912 | start_imiss3=clock; | |
8913 | active_imiss3=1; | |
8914 | end | |
8915 | if (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; | |
8921 | end | |
8922 | if (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; | |
8924 | end | |
8925 | if (`SPC3.ftu_agc_thr4_cmiss_c==1) begin | |
8926 | start_imiss4=clock; | |
8927 | active_imiss4=1; | |
8928 | end | |
8929 | if (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; | |
8935 | end | |
8936 | if (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; | |
8938 | end | |
8939 | if (`SPC3.ftu_agc_thr5_cmiss_c==1) begin | |
8940 | start_imiss5=clock; | |
8941 | active_imiss5=1; | |
8942 | end | |
8943 | if (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; | |
8949 | end | |
8950 | if (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; | |
8952 | end | |
8953 | if (`SPC3.ftu_agc_thr6_cmiss_c==1) begin | |
8954 | start_imiss6=clock; | |
8955 | active_imiss6=1; | |
8956 | end | |
8957 | if (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; | |
8963 | end | |
8964 | if (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; | |
8966 | end | |
8967 | if (`SPC3.ftu_agc_thr7_cmiss_c==1) begin | |
8968 | start_imiss7=clock; | |
8969 | active_imiss7=1; | |
8970 | end | |
8971 | if (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; | |
8977 | end | |
8978 | if (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; | |
8980 | end | |
8981 | ||
8982 | if (`SPC3.pku.swl0.set_lsu_sync_wait==1) begin | |
8983 | start_dmiss0=clock; | |
8984 | end | |
8985 | if (`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); | |
8989 | end | |
8990 | if (`SPC3.pku.swl1.set_lsu_sync_wait==1) begin | |
8991 | start_dmiss1=clock; | |
8992 | end | |
8993 | if (`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); | |
8997 | end | |
8998 | if (`SPC3.pku.swl2.set_lsu_sync_wait==1) begin | |
8999 | start_dmiss2=clock; | |
9000 | end | |
9001 | if (`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); | |
9005 | end | |
9006 | if (`SPC3.pku.swl3.set_lsu_sync_wait==1) begin | |
9007 | start_dmiss3=clock; | |
9008 | end | |
9009 | if (`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); | |
9013 | end | |
9014 | if (`SPC3.pku.swl4.set_lsu_sync_wait==1) begin | |
9015 | start_dmiss4=clock; | |
9016 | end | |
9017 | if (`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); | |
9021 | end | |
9022 | if (`SPC3.pku.swl5.set_lsu_sync_wait==1) begin | |
9023 | start_dmiss5=clock; | |
9024 | end | |
9025 | if (`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); | |
9029 | end | |
9030 | if (`SPC3.pku.swl6.set_lsu_sync_wait==1) begin | |
9031 | start_dmiss6=clock; | |
9032 | end | |
9033 | if (`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); | |
9037 | end | |
9038 | if (`SPC3.pku.swl7.set_lsu_sync_wait==1) begin | |
9039 | start_dmiss7=clock; | |
9040 | end | |
9041 | if (`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); | |
9045 | end | |
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 | ||
9236 | end // 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 | |
9241 | assign return0 = `SPC3.exu0.rml.return_w & | |
9242 | `SPC3.exu0.rml.inst_vld_w; | |
9243 | assign return1 = `SPC3.exu1.rml.return_w & | |
9244 | `SPC3.exu1.rml.inst_vld_w; | |
9245 | assign 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 | |
9259 | assign ex0_tid_e = `SPC3.exu0.ect_tid_lth_e[1:0]; | |
9260 | assign ex0_valid_e = `SPC3.dec.dec_valid_e[0] & ~fgu0_e & ~load0_e & | |
9261 | ~retry0_e & ~done0_e; | |
9262 | assign ex1_tid_e = `SPC3.exu1.ect_tid_lth_e[1:0]; | |
9263 | assign ex1_valid_e = `SPC3.dec.dec_valid_e[1] & ~fgu1_e & ~load1_e & | |
9264 | ~retry1_e & ~done1_e; | |
9265 | ||
9266 | assign ex_asr_valid = `SPC3.lsu.dcc.asi_store_m & `SPC3.lsu.dcc.asi_sync_m ; | |
9267 | ||
9268 | assign 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 | |
9281 | assign 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 | |
9292 | wire [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... | |
9303 | reg [7:0] block_store_w; | |
9304 | always @(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]; | |
9307 | end | |
9308 | ||
9309 | wire [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 | ||
9321 | assign 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 | ||
9335 | assign 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 | |
9343 | assign 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 | |
9356 | wire 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 | ||
9360 | assign fg_cond_fb = fg_cond_fb_pre_err & ~fgu_err_fb; | |
9361 | ||
9362 | // Idiv/Fdiv signals | |
9363 | ||
9364 | assign fgu_idiv_valid = fg_div_valid & div_idest; | |
9365 | ||
9366 | ||
9367 | assign fgu_fdiv_valid = fg_fdiv_valid_fw & div_fdest; | |
9368 | ||
9369 | ||
9370 | // Lsu signals needed to check lsu results | |
9371 | ||
9372 | assign lsu_valid = lsu_check | lsu_data_w; | |
9373 | ||
9374 | assign fg_div_valid = `SPC3.fgu_divide_completion & ~div_special_cancel_f4; | |
9375 | ||
9376 | // State machine asserts lsu_check for LD hit/miss | |
9377 | always @(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 // } | |
9423 | end | |
9424 | ||
9425 | ||
9426 | assign lsu_tid = `SPC3.lsu.dcc.ld_tid_b[2:0]; | |
9427 | //Don't assert LSU_complete in case of dtlb or irf errors | |
9428 | ||
9429 | assign 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 | ||
9434 | assign 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 | ||
9443 | assign lsu_tid_dec_b[0] = `SPC3.lsu.dcc.ld_tid_b[2:0] == 3'd0; | |
9444 | assign lsu_tid_dec_b[1] = `SPC3.lsu.dcc.ld_tid_b[2:0] == 3'd1; | |
9445 | assign lsu_tid_dec_b[2] = `SPC3.lsu.dcc.ld_tid_b[2:0] == 3'd2; | |
9446 | assign lsu_tid_dec_b[3] = `SPC3.lsu.dcc.ld_tid_b[2:0] == 3'd3; | |
9447 | assign lsu_tid_dec_b[4] = `SPC3.lsu.dcc.ld_tid_b[2:0] == 3'd4; | |
9448 | assign lsu_tid_dec_b[5] = `SPC3.lsu.dcc.ld_tid_b[2:0] == 3'd5; | |
9449 | assign lsu_tid_dec_b[6] = `SPC3.lsu.dcc.ld_tid_b[2:0] == 3'd6; | |
9450 | assign lsu_tid_dec_b[7] = `SPC3.lsu.dcc.ld_tid_b[2:0] == 3'd7; | |
9451 | ||
9452 | assign 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); | |
9454 | assign dec_flush_lb = `SPC3.dec.dec_flush_lb | `SPC3.tlu_flush_lsu_b; | |
9455 | ||
9456 | ||
9457 | // LSU interface to CCX stub | |
9458 | ||
9459 | assign exu_lsu_valid = `SPC3.dec.del.lsu_valid_e; | |
9460 | assign exu_lsu_addr[47:0] = `SPC3.exu_lsu_address_e[47:0]; | |
9461 | assign exu_lsu_tid[2:0] = lsu_tid_e[2:0]; | |
9462 | assign exu_lsu_regid[4:0] = `SPC3.dec.dec_lsu_rd_e[4:0]; | |
9463 | assign exu_lsu_data[63:0] = `SPC3.exu_lsu_store_data_e[63:0]; | |
9464 | assign 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]); | |
9468 | assign 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 | ||
9515 | initial 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; | |
9524 | end | |
9525 | ||
9526 | always @(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 | ||
9576 | end //} | |
9577 | ||
9578 | /////////////////////////////////////////////////////////////////////////////// | |
9579 | // Functions | |
9580 | /////////////////////////////////////////////////////////////////////////////// | |
9581 | function [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 | |
9596 | endfunction | |
9597 | ||
9598 | function [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 | |
9613 | endfunction | |
9614 | ||
9615 | //--------------------- | |
9616 | ||
9617 | function [255:0] xlate; | |
9618 | input [31:0] inst; | |
9619 | ||
9620 | begin | |
9621 | casex(inst[31:0]) | |
9622 | 32'b10xxxxx110100xxxxx001000011xxxxx : xlate[255:0]="FADDq"; | |
9623 | 32'b10xxxxx110100xxxxx001000111xxxxx : xlate[255:0]="FSUBq"; | |
9624 | 32'b10000xx110101xxxxx001010011xxxxx : xlate[255:0]="FCMPq"; | |
9625 | 32'b10000xx110101xxxxx001010111xxxxx : xlate[255:0]="FCMPEq"; | |
9626 | 32'b10xxxxx110100xxxxx011001101xxxxx : xlate[255:0]="FsTOq"; | |
9627 | 32'b10xxxxx110100xxxxx011001110xxxxx : xlate[255:0]="FdTOq"; | |
9628 | 32'b10xxxxx110100xxxxx010001100xxxxx : xlate[255:0]="FxTOq"; | |
9629 | 32'b10xxxxx110100xxxxx011001100xxxxx : xlate[255:0]="FiTOq"; | |
9630 | 32'b10xxxxx110100xxxxx000000011xxxxx : xlate[255:0]="FMOVq"; | |
9631 | 32'b10xxxxx110100xxxxx000000111xxxxx : xlate[255:0]="FNEGq"; | |
9632 | 32'b10xxxxx110100xxxxx000001011xxxxx : xlate[255:0]="FABSq"; | |
9633 | 32'b10xxxxx110100xxxxx001001011xxxxx : xlate[255:0]="FMULq"; | |
9634 | 32'b10xxxxx110100xxxxx001101110xxxxx : xlate[255:0]="FdMULq"; | |
9635 | 32'b10xxxxx110100xxxxx001001111xxxxx : xlate[255:0]="FDIVq"; | |
9636 | 32'b10xxxxx110100xxxxx000101011xxxxx : xlate[255:0]="FSQRTq"; | |
9637 | 32'b10xxxxx1101010xxxx0xx100111xxxxx : xlate[255:0]="FMOVrQa"; | |
9638 | 32'b10xxxxx1101010xxxx0x1x00111xxxxx : xlate[255:0]="FMOVrQb"; | |
9639 | 32'b10xxxxx110100xxxxx011010011xxxxx : xlate[255:0]="FqTOi"; | |
9640 | 32'b10xxxxx110100xxxxx010000011xxxxx : xlate[255:0]="FqTOx"; | |
9641 | 32'b10xxxxx110100xxxxx011000111xxxxx : xlate[255:0]="FqTOs"; | |
9642 | 32'b10xxxxx110100xxxxx011001011xxxxx : xlate[255:0]="FqTOd"; | |
9643 | 32'b11xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQF"; | |
9644 | 32'b11xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFi"; | |
9645 | 32'b11xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQFA"; | |
9646 | 32'b11xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFAi"; | |
9647 | 32'b11xxxxx100110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFi"; | |
9648 | 32'b11xxxxx100110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQF"; | |
9649 | 32'b11xxxxx110110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQFA"; | |
9650 | 32'b11xxxxx110110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFAi"; | |
9651 | 32'b10xxxxx1101010xxxxxxx000011xxxxx : xlate[255:0]="FMOVQcc"; | |
9652 | 32'b10xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADD"; | |
9653 | 32'b10xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDcc"; | |
9654 | 32'b10xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDC"; | |
9655 | 32'b10xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDCcc"; | |
9656 | 32'b10xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDi"; | |
9657 | 32'b10xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDcci"; | |
9658 | 32'b10xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCi"; | |
9659 | 32'b10xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCcci"; | |
9660 | 32'b00x0xx1011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr1"; | |
9661 | 32'b00x0x1x011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr2"; | |
9662 | 32'b00xx000110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfccA"; | |
9663 | 32'b00xx1xx110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc1"; | |
9664 | 32'b00xxx1x110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc2"; | |
9665 | 32'b00xxxx1110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc3"; | |
9666 | 32'b00xx000101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfccA"; | |
9667 | 32'b00xx1xx101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc1"; | |
9668 | 32'b00xxx1x101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc2"; | |
9669 | 32'b00xxxx1101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc3"; | |
9670 | 32'b00xx000010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BiccA"; | |
9671 | 32'b00xx1xx010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc1"; | |
9672 | 32'b00xxx1x010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc2"; | |
9673 | 32'b00xxxx1010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc3"; | |
9674 | 32'b00xx000001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPccA"; | |
9675 | 32'b00xx1xx001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc1"; | |
9676 | 32'b00xxx1x001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc2"; | |
9677 | 32'b00xxxx1001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc3"; | |
9678 | 32'b01xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="CALL"; | |
9679 | 32'b11xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASA"; | |
9680 | 32'b11xxxxx111110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASXA"; | |
9681 | 32'b11xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASAi"; | |
9682 | 32'b11xxxxx111110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASXAi"; | |
9683 | 32'b10xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIV"; | |
9684 | 32'b10xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIV"; | |
9685 | 32'b10xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVcc"; | |
9686 | 32'b10xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVcc"; | |
9687 | 32'b10xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVi"; | |
9688 | 32'b10xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVi"; | |
9689 | 32'b10xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVcci"; | |
9690 | 32'b10xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVcci"; | |
9691 | 32'b1000000111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="DONE"; | |
9692 | 32'b1000001111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RETRY"; | |
9693 | 32'b10xxxxx110100xxxxx001000001xxxxx : xlate[255:0]="FADDs"; | |
9694 | 32'b10xxxxx110100xxxxx001000010xxxxx : xlate[255:0]="FADDd"; | |
9695 | 32'b10xxxxx110100xxxxx001000101xxxxx : xlate[255:0]="FSUBs"; | |
9696 | 32'b10xxxxx110100xxxxx001000110xxxxx : xlate[255:0]="FSUBd"; | |
9697 | 32'b10000xx110101xxxxx001010001xxxxx : xlate[255:0]="FCMPs"; | |
9698 | 32'b10000xx110101xxxxx001010010xxxxx : xlate[255:0]="FCMPd"; | |
9699 | 32'b10000xx110101xxxxx001010101xxxxx : xlate[255:0]="FCMPEs"; | |
9700 | 32'b10000xx110101xxxxx001010110xxxxx : xlate[255:0]="FCMPEd"; | |
9701 | 32'b10xxxxx110100xxxxx010000001xxxxx : xlate[255:0]="FsTOx"; | |
9702 | 32'b10xxxxx110100xxxxx010000010xxxxx : xlate[255:0]="FdTOx"; | |
9703 | 32'b10xxxxx110100xxxxx011010001xxxxx : xlate[255:0]="FsTOi"; | |
9704 | 32'b10xxxxx110100xxxxx011010010xxxxx : xlate[255:0]="FdTOi"; | |
9705 | 32'b10xxxxx110100xxxxx011001001xxxxx : xlate[255:0]="FsTOd"; | |
9706 | 32'b10xxxxx110100xxxxx011000110xxxxx : xlate[255:0]="FdTOs"; | |
9707 | 32'b10xxxxx110100xxxxx010000100xxxxx : xlate[255:0]="FxTOs"; | |
9708 | 32'b10xxxxx110100xxxxx010001000xxxxx : xlate[255:0]="FxTOd"; | |
9709 | 32'b10xxxxx110100xxxxx011000100xxxxx : xlate[255:0]="FiTOs"; | |
9710 | 32'b10xxxxx110100xxxxx011001000xxxxx : xlate[255:0]="FiTOd"; | |
9711 | 32'b10xxxxx110100xxxxx000000001xxxxx : xlate[255:0]="FMOVs"; | |
9712 | 32'b10xxxxx110100xxxxx000000010xxxxx : xlate[255:0]="FMOVd"; | |
9713 | 32'b10xxxxx110100xxxxx000000101xxxxx : xlate[255:0]="FNEGs"; | |
9714 | 32'b10xxxxx110100xxxxx000000110xxxxx : xlate[255:0]="FNEGd"; | |
9715 | 32'b10xxxxx110100xxxxx000001001xxxxx : xlate[255:0]="FABSs"; | |
9716 | 32'b10xxxxx110100xxxxx000001010xxxxx : xlate[255:0]="FABSd"; | |
9717 | 32'b10xxxxx110100xxxxx001001001xxxxx : xlate[255:0]="FMULs"; | |
9718 | 32'b10xxxxx110100xxxxx001001010xxxxx : xlate[255:0]="FMULd"; | |
9719 | 32'b10xxxxx110100xxxxx001101001xxxxx : xlate[255:0]="FsMULd"; | |
9720 | 32'b10xxxxx110100xxxxx001001101xxxxx : xlate[255:0]="FDIVs"; | |
9721 | 32'b10xxxxx110100xxxxx001001110xxxxx : xlate[255:0]="FDIVd"; | |
9722 | 32'b10xxxxx110100xxxxx000101001xxxxx : xlate[255:0]="FSQRTs"; | |
9723 | 32'b10xxxxx110100xxxxx000101010xxxxx : xlate[255:0]="FSQRTd"; | |
9724 | 32'b10xxxxx111011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSH"; | |
9725 | 32'b10xxxxx111011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="FLUSHi"; | |
9726 | 32'b10xxxxx101011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSHw"; | |
9727 | 32'b10xxxxx111000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="JMPL"; | |
9728 | 32'b10xxxxx111000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="JMPLi"; | |
9729 | 32'b11xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDF"; | |
9730 | 32'b11xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDF"; | |
9731 | 32'b1100000100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFSR"; | |
9732 | 32'b1100001100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXFSR"; | |
9733 | 32'b11xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFi"; | |
9734 | 32'b11xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFi"; | |
9735 | 32'b1100000100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFSRi"; | |
9736 | 32'b1100001100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXFSRi"; | |
9737 | 32'b11xxxxx110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFA"; | |
9738 | 32'b11xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDFA"; | |
9739 | 32'b11xxxxx110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFAi"; | |
9740 | 32'b11xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFAi"; | |
9741 | 32'b11xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSB"; | |
9742 | 32'b11xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSH"; | |
9743 | 32'b11xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSW"; | |
9744 | 32'b11xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUB"; | |
9745 | 32'b11xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUH"; | |
9746 | 32'b11xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUW"; | |
9747 | 32'b11xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDX"; | |
9748 | 32'b11xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDD"; | |
9749 | 32'b11xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBi"; | |
9750 | 32'b11xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHi"; | |
9751 | 32'b11xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWi"; | |
9752 | 32'b11xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBi"; | |
9753 | 32'b11xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHi"; | |
9754 | 32'b11xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWi"; | |
9755 | 32'b11xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXi"; | |
9756 | 32'b11xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDi"; | |
9757 | 32'b11xxxxx011001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSBA"; | |
9758 | 32'b11xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSHA"; | |
9759 | 32'b11xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSWA"; | |
9760 | 32'b11xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUBA"; | |
9761 | 32'b11xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUHA"; | |
9762 | 32'b11xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUWA"; | |
9763 | 32'b11xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXA"; | |
9764 | 32'b11xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDA"; | |
9765 | 32'b11xxxxx011001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBAi"; | |
9766 | 32'b11xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHAi"; | |
9767 | 32'b11xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWAi"; | |
9768 | 32'b11xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBAi"; | |
9769 | 32'b11xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHAi"; | |
9770 | 32'b11xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWAi"; | |
9771 | 32'b11xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXAi"; | |
9772 | 32'b11xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDAi"; | |
9773 | 32'b11xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUB"; | |
9774 | 32'b11xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBi"; | |
9775 | 32'b11xxxxx011101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUBA"; | |
9776 | 32'b11xxxxx011101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBAi"; | |
9777 | 32'b10xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="AND"; | |
9778 | 32'b10xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDcc"; | |
9779 | 32'b10xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDN"; | |
9780 | 32'b10xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDNcc"; | |
9781 | 32'b10xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="OR"; | |
9782 | 32'b10xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORcc"; | |
9783 | 32'b10xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORN"; | |
9784 | 32'b10xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORNcc"; | |
9785 | 32'b10xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XOR"; | |
9786 | 32'b10xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XORcc"; | |
9787 | 32'b10xxxxx000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNOR"; | |
9788 | 32'b10xxxxx010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNORcc"; | |
9789 | 32'b10xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDi"; | |
9790 | 32'b10xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDcci"; | |
9791 | 32'b10xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNi"; | |
9792 | 32'b10xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNcci"; | |
9793 | 32'b10xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORi"; | |
9794 | 32'b10xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORcci"; | |
9795 | 32'b10xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNi"; | |
9796 | 32'b10xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNcci"; | |
9797 | 32'b10xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORi"; | |
9798 | 32'b10xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORcci"; | |
9799 | 32'b10xxxxx000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORi"; | |
9800 | 32'b10xxxxx010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORcci"; | |
9801 | 32'b1000000101000011111xxxxxxxxxxxxx : xlate[255:0]="MEMBAR"; | |
9802 | 32'b1000000101000011110xxxxxxxxxxxxx : xlate[255:0]="STBAR"; | |
9803 | 32'b10xxxxx101000000000xxxxxxxxxxxxx : xlate[255:0]="RDY"; | |
9804 | 32'b10xxxxx101000000100xxxxxxxxxxxxx : xlate[255:0]="RDCCR"; | |
9805 | 32'b10xxxxx101000000110xxxxxxxxxxxxx : xlate[255:0]="RDASI"; | |
9806 | 32'b10xxxxx101000001000xxxxxxxxxxxxx : xlate[255:0]="RDTICK"; | |
9807 | 32'b10xxxxx101000001010xxxxxxxxxxxxx : xlate[255:0]="RDPC"; | |
9808 | 32'b10xxxxx101000001100xxxxxxxxxxxxx : xlate[255:0]="RDFPRS"; | |
9809 | 32'b10xxxxx101000100110xxxxxxxxxxxxx : xlate[255:0]="RDGSR"; | |
9810 | 32'b10xxxxx101000100000xxxxxxxxxxxxx : xlate[255:0]="RDPCR"; | |
9811 | 32'b10xxxxx101000100010xxxxxxxxxxxxx : xlate[255:0]="RDPIC"; | |
9812 | 32'b10xxxxx1101010xxxx0xx000001xxxxx : xlate[255:0]="FMOVSfcc"; | |
9813 | 32'b10xxxxx1101010xxxx1xx000001xxxxx : xlate[255:0]="FMOVSxcc"; | |
9814 | 32'b10xxxxx1101010xxxx0xx000010xxxxx : xlate[255:0]="FMOVDfcc"; | |
9815 | 32'b10xxxxx1101010xxxx1xx000010xxxxx : xlate[255:0]="FMOVDxcc"; | |
9816 | 32'b10xxxxx110101xxxxx0xx100101xxxxx : xlate[255:0]="FMOVrS1"; | |
9817 | 32'b10xxxxx110101xxxxx0x1x00101xxxxx : xlate[255:0]="FMOVrS2"; | |
9818 | 32'b10xxxxx110101xxxxx0xx100110xxxxx : xlate[255:0]="FMOVrD1"; | |
9819 | 32'b10xxxxx110101xxxxx0x1x00110xxxxx : xlate[255:0]="FMOVrD2"; | |
9820 | 32'b10xxxxx1011001xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVxcc"; | |
9821 | 32'b10xxxxx1011001xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVxcci"; | |
9822 | 32'b10xxxxx1011000xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVfcc"; | |
9823 | 32'b10xxxxx1011000xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVfcci"; | |
9824 | 32'b10xxxxx101111xxxxx0xx1xxxxxxxxxx : xlate[255:0]="MOVR1"; | |
9825 | 32'b10xxxxx101111xxxxx0x1xxxxxxxxxxx : xlate[255:0]="MOVR2"; | |
9826 | 32'b10xxxxx101111xxxxx1xx1xxxxxxxxxx : xlate[255:0]="MOVRi1"; | |
9827 | 32'b10xxxxx101111xxxxx1x1xxxxxxxxxxx : xlate[255:0]="MOVRi2"; | |
9828 | 32'b10xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULX"; | |
9829 | 32'b10xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVX"; | |
9830 | 32'b10xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVX"; | |
9831 | 32'b10xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULXi"; | |
9832 | 32'b10xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVXi"; | |
9833 | 32'b10xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVXi"; | |
9834 | 32'b10xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMUL"; | |
9835 | 32'b10xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMUL"; | |
9836 | 32'b10xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMULcc"; | |
9837 | 32'b10xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMULcc"; | |
9838 | 32'b10xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULi"; | |
9839 | 32'b10xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULi"; | |
9840 | 32'b10xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULcci"; | |
9841 | 32'b10xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULcci"; | |
9842 | 32'b10xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULScc"; | |
9843 | 32'b10xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULScci"; | |
9844 | 32'b10xxxxx101110000000xxxxxxxxxxxxx : xlate[255:0]="POPC"; | |
9845 | 32'b10xxxxx101110000001xxxxxxxxxxxxx : xlate[255:0]="POPCi"; | |
9846 | 32'b11xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCH"; | |
9847 | 32'b11xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHi"; | |
9848 | 32'b11xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCHA"; | |
9849 | 32'b11xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHAi"; | |
9850 | 32'b10xxxxx101010xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDPR"; | |
9851 | 32'b10xxxxx101001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDHPR"; | |
9852 | 32'b10xxxxx111001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RETURN"; | |
9853 | 32'b10xxxxx111001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RETURNi"; | |
9854 | 32'b10xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SAVE"; | |
9855 | 32'b10xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SAVEi"; | |
9856 | 32'b10xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RESTORE"; | |
9857 | 32'b10xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RESTOREi"; | |
9858 | 32'b1000000110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="SAVED"; | |
9859 | 32'b1000001110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RESTORED"; | |
9860 | 32'b00xxxxx100xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="SETHI"; | |
9861 | 32'b10xxxxx100101xxxxx00xxxxxxxxxxxx : xlate[255:0]="SLL"; | |
9862 | 32'b10xxxxx100110xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRL"; | |
9863 | 32'b10xxxxx100111xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRA"; | |
9864 | 32'b10xxxxx100101xxxxx01xxxxxxxxxxxx : xlate[255:0]="SLLX"; | |
9865 | 32'b10xxxxx100110xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRLX"; | |
9866 | 32'b10xxxxx100111xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRAX"; | |
9867 | 32'b10xxxxx100101xxxxx10xxxxxxxxxxxx : xlate[255:0]="SLLi"; | |
9868 | 32'b10xxxxx100110xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRLi"; | |
9869 | 32'b10xxxxx100111xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRAi"; | |
9870 | 32'b10xxxxx100101xxxxx11xxxxxxxxxxxx : xlate[255:0]="SLLXi"; | |
9871 | 32'b10xxxxx100110xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRLXi"; | |
9872 | 32'b10xxxxx100111xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRAXi"; | |
9873 | 32'b11xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STF"; | |
9874 | 32'b11xxxxx100111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDF"; | |
9875 | 32'b1100000100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFSR"; | |
9876 | 32'b1100001100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXFSR"; | |
9877 | 32'b11xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFi"; | |
9878 | 32'b11xxxxx100111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFi"; | |
9879 | 32'b1100000100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFSRi"; | |
9880 | 32'b1100001100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXFSRi"; | |
9881 | 32'b11xxxxx110100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFA"; | |
9882 | 32'b11xxxxx110111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDFA"; | |
9883 | 32'b11xxxxx110100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFAi"; | |
9884 | 32'b11xxxxx110111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFAi"; | |
9885 | 32'b11xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STB"; | |
9886 | 32'b11xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STH"; | |
9887 | 32'b11xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STW"; | |
9888 | 32'b11xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STX"; | |
9889 | 32'b11xxxx0000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STD"; | |
9890 | 32'b11xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBi"; | |
9891 | 32'b11xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHi"; | |
9892 | 32'b11xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWi"; | |
9893 | 32'b11xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXi"; | |
9894 | 32'b11xxxx0000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDi"; | |
9895 | 32'b11xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STBA"; | |
9896 | 32'b11xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STHA"; | |
9897 | 32'b11xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STWA"; | |
9898 | 32'b11xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXA"; | |
9899 | 32'b11xxxx0010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDA"; | |
9900 | 32'b11xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBAi"; | |
9901 | 32'b11xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHAi"; | |
9902 | 32'b11xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWAi"; | |
9903 | 32'b11xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXAi"; | |
9904 | 32'b11xxxx0010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDAi"; | |
9905 | 32'b10xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUB"; | |
9906 | 32'b10xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBcc"; | |
9907 | 32'b10xxxxx001100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBC"; | |
9908 | 32'b10xxxxx011100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBCcc"; | |
9909 | 32'b10xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBi"; | |
9910 | 32'b10xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBcci"; | |
9911 | 32'b10xxxxx001100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCi"; | |
9912 | 32'b10xxxxx011100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCcci"; | |
9913 | 32'b11xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAP"; | |
9914 | 32'b11xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPi"; | |
9915 | 32'b11xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAPA"; | |
9916 | 32'b11xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPAi"; | |
9917 | 32'b10xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDcc"; | |
9918 | 32'b10xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDccTV"; | |
9919 | 32'b10xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDcci"; | |
9920 | 32'b10xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDccTVi"; | |
9921 | 32'b10xxxxx100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBcc"; | |
9922 | 32'b10xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBccTV"; | |
9923 | 32'b10xxxxx100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBcci"; | |
9924 | 32'b10xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBccTVi"; | |
9925 | 32'b10xxxxx111010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TCC"; | |
9926 | 32'b10xxxxx111010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TCCi"; | |
9927 | 32'b10xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPR"; | |
9928 | 32'b10xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPRi"; | |
9929 | 32'b10xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRHPR"; | |
9930 | 32'b10xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRHPRi"; | |
9931 | 32'b1000000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRY"; | |
9932 | 32'b1000010110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRCCR"; | |
9933 | 32'b1000011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRASI"; | |
9934 | 32'b1000110110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRFPRS"; | |
9935 | 32'b1010011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRGSR"; | |
9936 | 32'b1010000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPCR"; | |
9937 | 32'b1010001110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPIC"; | |
9938 | 32'b1000000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRYi"; | |
9939 | 32'b1000010110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRCCRi"; | |
9940 | 32'b1000011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRASIi"; | |
9941 | 32'b1000110110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRFPRSi"; | |
9942 | 32'b1010011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRGSRi"; | |
9943 | 32'b1010000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPCRi"; | |
9944 | 32'b1010001110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPICi"; | |
9945 | 32'b1001111110000000001xxxxxxxxxxxxx : xlate[255:0]="SIR"; | |
9946 | 32'b10xxxxx110110xxxxx001010000xxxxx : xlate[255:0]="FPADD16"; | |
9947 | 32'b10xxxxx110110xxxxx001010001xxxxx : xlate[255:0]="FPADD16S"; | |
9948 | 32'b10xxxxx110110xxxxx001010010xxxxx : xlate[255:0]="FPADD32"; | |
9949 | 32'b10xxxxx110110xxxxx001010011xxxxx : xlate[255:0]="FPADD32S"; | |
9950 | 32'b10xxxxx110110xxxxx001010100xxxxx : xlate[255:0]="FPSUB16"; | |
9951 | 32'b10xxxxx110110xxxxx001010101xxxxx : xlate[255:0]="FPSUB16S"; | |
9952 | 32'b10xxxxx110110xxxxx001010110xxxxx : xlate[255:0]="FPSUB32"; | |
9953 | 32'b10xxxxx110110xxxxx001010111xxxxx : xlate[255:0]="FPSUB32S"; | |
9954 | 32'b10xxxxx110110xxxxx000111011xxxxx : xlate[255:0]="FPACK16"; | |
9955 | 32'b10xxxxx110110xxxxx000111010xxxxx : xlate[255:0]="FPACK32"; | |
9956 | 32'b10xxxxx110110xxxxx000111101xxxxx : xlate[255:0]="FPACKFIX"; | |
9957 | 32'b10xxxxx110110xxxxx001001101xxxxx : xlate[255:0]="FEXPAND"; | |
9958 | 32'b10xxxxx110110xxxxx001001011xxxxx : xlate[255:0]="FPMERGE"; | |
9959 | 32'b10xxxxx110110xxxxx000110001xxxxx : xlate[255:0]="FMUL8x16"; | |
9960 | 32'b10xxxxx110110xxxxx000110011xxxxx : xlate[255:0]="FMUL8x16AU"; | |
9961 | 32'b10xxxxx110110xxxxx000110101xxxxx : xlate[255:0]="FMUL8x16AL"; | |
9962 | 32'b10xxxxx110110xxxxx000110110xxxxx : xlate[255:0]="FMUL8SUx16"; | |
9963 | 32'b10xxxxx110110xxxxx000110111xxxxx : xlate[255:0]="FMUL8ULx16"; | |
9964 | 32'b10xxxxx110110xxxxx000111000xxxxx : xlate[255:0]="FMULD8SUx16"; | |
9965 | 32'b10xxxxx110110xxxxx000111001xxxxx : xlate[255:0]="FMULD8ULx16"; | |
9966 | 32'b10xxxxx110110xxxxx000011000xxxxx : xlate[255:0]="ALIGNADDRESS"; | |
9967 | 32'b10xxxxx110110xxxxx000011010xxxxx : xlate[255:0]="ALIGNADDRESS_LITTLE"; | |
9968 | 32'b10xxxxx110110xxxxx000011001xxxxx : xlate[255:0]="BMASK"; | |
9969 | 32'b10xxxxx110110xxxxx001001000xxxxx : xlate[255:0]="FALIGNDATA"; | |
9970 | 32'b10xxxxx110110xxxxx001001100xxxxx : xlate[255:0]="BSHUFFLE"; | |
9971 | 32'b10xxxxx110110xxxxx001100000xxxxx : xlate[255:0]="FZERO"; | |
9972 | 32'b10xxxxx110110xxxxx001100001xxxxx : xlate[255:0]="FZEROS"; | |
9973 | 32'b10xxxxx110110xxxxx001111110xxxxx : xlate[255:0]="FONE"; | |
9974 | 32'b10xxxxx110110xxxxx001111111xxxxx : xlate[255:0]="FONES"; | |
9975 | 32'b10xxxxx110110xxxxx001110100xxxxx : xlate[255:0]="FSRC1"; | |
9976 | 32'b10xxxxx110110xxxxx001110101xxxxx : xlate[255:0]="FSRC1S"; | |
9977 | 32'b10xxxxx110110xxxxx001111000xxxxx : xlate[255:0]="FSRC2"; | |
9978 | 32'b10xxxxx110110xxxxx001111001xxxxx : xlate[255:0]="FSRC2S"; | |
9979 | 32'b10xxxxx110110xxxxx001101010xxxxx : xlate[255:0]="FNOT1"; | |
9980 | 32'b10xxxxx110110xxxxx001101011xxxxx : xlate[255:0]="FNOT1S"; | |
9981 | 32'b10xxxxx110110xxxxx001100110xxxxx : xlate[255:0]="FNOT2"; | |
9982 | 32'b10xxxxx110110xxxxx001100111xxxxx : xlate[255:0]="FNOT2S"; | |
9983 | 32'b10xxxxx110110xxxxx001111100xxxxx : xlate[255:0]="FOR"; | |
9984 | 32'b10xxxxx110110xxxxx001111101xxxxx : xlate[255:0]="FORS"; | |
9985 | 32'b10xxxxx110110xxxxx001100010xxxxx : xlate[255:0]="FNOR"; | |
9986 | 32'b10xxxxx110110xxxxx001100011xxxxx : xlate[255:0]="FNORS"; | |
9987 | 32'b10xxxxx110110xxxxx001110000xxxxx : xlate[255:0]="FAND"; | |
9988 | 32'b10xxxxx110110xxxxx001110001xxxxx : xlate[255:0]="FANDS"; | |
9989 | 32'b10xxxxx110110xxxxx001101110xxxxx : xlate[255:0]="FNAND"; | |
9990 | 32'b10xxxxx110110xxxxx001101111xxxxx : xlate[255:0]="FNANDS"; | |
9991 | 32'b10xxxxx110110xxxxx001101100xxxxx : xlate[255:0]="FXOR"; | |
9992 | 32'b10xxxxx110110xxxxx001101101xxxxx : xlate[255:0]="FXORS"; | |
9993 | 32'b10xxxxx110110xxxxx001110010xxxxx : xlate[255:0]="FXNOR"; | |
9994 | 32'b10xxxxx110110xxxxx001110011xxxxx : xlate[255:0]="FXNORS"; | |
9995 | 32'b10xxxxx110110xxxxx001111010xxxxx : xlate[255:0]="FORNOT1"; | |
9996 | 32'b10xxxxx110110xxxxx001111011xxxxx : xlate[255:0]="FORNOT1S"; | |
9997 | 32'b10xxxxx110110xxxxx001110110xxxxx : xlate[255:0]="FORNOT2"; | |
9998 | 32'b10xxxxx110110xxxxx001110111xxxxx : xlate[255:0]="FORNOT2S"; | |
9999 | 32'b10xxxxx110110xxxxx001101000xxxxx : xlate[255:0]="FANDNOT1"; | |
10000 | 32'b10xxxxx110110xxxxx001101001xxxxx : xlate[255:0]="FANDNOT1S"; | |
10001 | 32'b10xxxxx110110xxxxx001100100xxxxx : xlate[255:0]="FANDNOT2"; | |
10002 | 32'b10xxxxx110110xxxxx001100101xxxxx : xlate[255:0]="FANDNOT2S"; | |
10003 | 32'b10xxxxx110110xxxxx000101000xxxxx : xlate[255:0]="FCMPGT16"; | |
10004 | 32'b10xxxxx110110xxxxx000101100xxxxx : xlate[255:0]="FCMPGT32"; | |
10005 | 32'b10xxxxx110110xxxxx000100000xxxxx : xlate[255:0]="FCMPLE16"; | |
10006 | 32'b10xxxxx110110xxxxx000100100xxxxx : xlate[255:0]="FCMPLE32"; | |
10007 | 32'b10xxxxx110110xxxxx000100010xxxxx : xlate[255:0]="FCMPNE16"; | |
10008 | 32'b10xxxxx110110xxxxx000100110xxxxx : xlate[255:0]="FCMPNE32"; | |
10009 | 32'b10xxxxx110110xxxxx000101010xxxxx : xlate[255:0]="FCMPEQ16"; | |
10010 | 32'b10xxxxx110110xxxxx000101110xxxxx : xlate[255:0]="FCMPEQ32"; | |
10011 | 32'b10xxxxx110110xxxxx000111110xxxxx : xlate[255:0]="PDIST"; | |
10012 | 32'b10xxxxx110110xxxxx000000000xxxxx : xlate[255:0]="EDGE8"; | |
10013 | 32'b10xxxxx110110xxxxx000000001xxxxx : xlate[255:0]="EDGE8N"; | |
10014 | 32'b10xxxxx110110xxxxx000000010xxxxx : xlate[255:0]="EDGE8L"; | |
10015 | 32'b10xxxxx110110xxxxx000000011xxxxx : xlate[255:0]="EDGE8LN"; | |
10016 | 32'b10xxxxx110110xxxxx000000100xxxxx : xlate[255:0]="EDGE16"; | |
10017 | 32'b10xxxxx110110xxxxx000000101xxxxx : xlate[255:0]="EDGE16N"; | |
10018 | 32'b10xxxxx110110xxxxx000000110xxxxx : xlate[255:0]="EDGE16L"; | |
10019 | 32'b10xxxxx110110xxxxx000000111xxxxx : xlate[255:0]="EDGE16LN"; | |
10020 | 32'b10xxxxx110110xxxxx000001000xxxxx : xlate[255:0]="EDGE32"; | |
10021 | 32'b10xxxxx110110xxxxx000001001xxxxx : xlate[255:0]="EDGE32N"; | |
10022 | 32'b10xxxxx110110xxxxx000001010xxxxx : xlate[255:0]="EDGE32L"; | |
10023 | 32'b10xxxxx110110xxxxx000001011xxxxx : xlate[255:0]="EDGE32LN"; | |
10024 | 32'b10xxxxx110110xxxxx000010000xxxxx : xlate[255:0]="ARRAY8"; | |
10025 | 32'b10xxxxx110110xxxxx000010010xxxxx : xlate[255:0]="ARRAY16"; | |
10026 | 32'b10xxxxx110110xxxxx000010100xxxxx : xlate[255:0]="ARRAY32"; | |
10027 | 32'b10xxxxx110110xxxxx010000001xxxxx : xlate[255:0]="SIAM"; | |
10028 | default : xlate[255:0]="unknown"; | |
10029 | endcase | |
10030 | end | |
10031 | endfunction // xlate | |
10032 | ||
10033 | ||
10034 | `endif | |
10035 | ||
10036 | endmodule | |
10037 | ||
10038 | `endif | |
10039 | ||
10040 | ||
10041 | `ifdef CORE_4 | |
10042 | ||
10043 | module 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 | ||
10220 | integer i; | |
10221 | integer start_dmiss0; | |
10222 | integer start_dmiss1; | |
10223 | integer start_dmiss2; | |
10224 | integer start_dmiss3; | |
10225 | integer start_dmiss4; | |
10226 | integer start_dmiss5; | |
10227 | integer start_dmiss6; | |
10228 | integer start_dmiss7; | |
10229 | integer number_dmiss; | |
10230 | integer start_imiss0; | |
10231 | integer start_imiss1; | |
10232 | integer start_imiss2; | |
10233 | integer start_imiss3; | |
10234 | integer start_imiss4; | |
10235 | integer start_imiss5; | |
10236 | integer start_imiss6; | |
10237 | integer start_imiss7; | |
10238 | integer active_imiss0; | |
10239 | integer active_imiss1; | |
10240 | integer active_imiss2; | |
10241 | integer active_imiss3; | |
10242 | integer active_imiss4; | |
10243 | integer active_imiss5; | |
10244 | integer active_imiss6; | |
10245 | integer active_imiss7; | |
10246 | integer first_imiss0; | |
10247 | integer first_imiss1; | |
10248 | integer first_imiss2; | |
10249 | integer first_imiss3; | |
10250 | integer first_imiss4; | |
10251 | integer first_imiss5; | |
10252 | integer first_imiss6; | |
10253 | integer first_imiss7; | |
10254 | integer number_imiss; | |
10255 | integer clock; | |
10256 | integer sum_dmiss_latency; | |
10257 | integer sum_imiss_latency; | |
10258 | reg spec_dmiss; | |
10259 | integer dmiss_cnt; | |
10260 | integer imiss_cnt; | |
10261 | reg pcx_req; | |
10262 | integer l15dmiss_cnt; | |
10263 | integer l15imiss_cnt; | |
10264 | ||
10265 | ||
10266 | initial 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 | ||
10322 | end //} | |
10323 | ||
10324 | wire [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 | ||
10333 | wire [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}; | |
10341 | wire [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 | |
10356 | wire [63:0] ctxt_z_tsb_cfg0_reg [7:0]; // 1 per thread | |
10357 | wire [63:0] ctxt_z_tsb_cfg1_reg [7:0]; | |
10358 | wire [63:0] ctxt_z_tsb_cfg2_reg [7:0]; | |
10359 | wire [63:0] ctxt_z_tsb_cfg3_reg [7:0]; | |
10360 | wire [63:0] ctxt_nz_tsb_cfg0_reg [7:0]; | |
10361 | wire [63:0] ctxt_nz_tsb_cfg1_reg [7:0]; | |
10362 | wire [63:0] ctxt_nz_tsb_cfg2_reg [7:0]; | |
10363 | wire [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 | ||
10381 | wire [83:0] mmu_mra0_a0 = `SPC4.mmu.mra0.array.mem[0]; | |
10382 | wire [83:0] mmu_mra0_a8 = `SPC4.mmu.mra0.array.mem[8]; | |
10383 | wire [83:0] mmu_mra0_a16 = `SPC4.mmu.mra0.array.mem[16]; | |
10384 | wire [83:0] mmu_mra0_a24 = `SPC4.mmu.mra0.array.mem[24]; | |
10385 | wire [83:0] mmu_mra0_a1 = `SPC4.mmu.mra0.array.mem[1]; | |
10386 | wire [83:0] mmu_mra0_a9 = `SPC4.mmu.mra0.array.mem[9]; | |
10387 | wire [83:0] mmu_mra0_a17 = `SPC4.mmu.mra0.array.mem[17]; | |
10388 | wire [83:0] mmu_mra0_a25 = `SPC4.mmu.mra0.array.mem[25]; | |
10389 | wire [83:0] mmu_mra0_a2 = `SPC4.mmu.mra0.array.mem[2]; | |
10390 | wire [83:0] mmu_mra0_a10 = `SPC4.mmu.mra0.array.mem[10]; | |
10391 | wire [83:0] mmu_mra0_a18 = `SPC4.mmu.mra0.array.mem[18]; | |
10392 | wire [83:0] mmu_mra0_a26 = `SPC4.mmu.mra0.array.mem[26]; | |
10393 | wire [83:0] mmu_mra0_a3 = `SPC4.mmu.mra0.array.mem[3]; | |
10394 | wire [83:0] mmu_mra0_a11 = `SPC4.mmu.mra0.array.mem[11]; | |
10395 | wire [83:0] mmu_mra0_a19 = `SPC4.mmu.mra0.array.mem[19]; | |
10396 | wire [83:0] mmu_mra0_a27 = `SPC4.mmu.mra0.array.mem[27]; | |
10397 | wire [83:0] mmu_mra1_a0 = `SPC4.mmu.mra1.array.mem[0]; | |
10398 | wire [83:0] mmu_mra1_a8 = `SPC4.mmu.mra1.array.mem[8]; | |
10399 | wire [83:0] mmu_mra1_a16 = `SPC4.mmu.mra1.array.mem[16]; | |
10400 | wire [83:0] mmu_mra1_a24 = `SPC4.mmu.mra1.array.mem[24]; | |
10401 | wire [83:0] mmu_mra1_a1 = `SPC4.mmu.mra1.array.mem[1]; | |
10402 | wire [83:0] mmu_mra1_a9 = `SPC4.mmu.mra1.array.mem[9]; | |
10403 | wire [83:0] mmu_mra1_a17 = `SPC4.mmu.mra1.array.mem[17]; | |
10404 | wire [83:0] mmu_mra1_a25 = `SPC4.mmu.mra1.array.mem[25]; | |
10405 | wire [83:0] mmu_mra1_a2 = `SPC4.mmu.mra1.array.mem[2]; | |
10406 | wire [83:0] mmu_mra1_a10 = `SPC4.mmu.mra1.array.mem[10]; | |
10407 | wire [83:0] mmu_mra1_a18 = `SPC4.mmu.mra1.array.mem[18]; | |
10408 | wire [83:0] mmu_mra1_a26 = `SPC4.mmu.mra1.array.mem[26]; | |
10409 | wire [83:0] mmu_mra1_a3 = `SPC4.mmu.mra1.array.mem[3]; | |
10410 | wire [83:0] mmu_mra1_a11 = `SPC4.mmu.mra1.array.mem[11]; | |
10411 | wire [83:0] mmu_mra1_a19 = `SPC4.mmu.mra1.array.mem[19]; | |
10412 | wire [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. | |
10417 | assign 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 | }; | |
10424 | assign 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 | }; | |
10431 | assign 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 | }; | |
10438 | assign 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 | }; | |
10445 | assign 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 | }; | |
10452 | assign 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 | }; | |
10459 | assign 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 | }; | |
10466 | assign 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. | |
10476 | assign 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 | }; | |
10483 | assign 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 | }; | |
10490 | assign 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 | }; | |
10497 | assign 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 | }; | |
10504 | assign 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 | }; | |
10511 | assign 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 | }; | |
10518 | assign 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 | }; | |
10525 | assign 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. | |
10535 | assign 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 | }; | |
10542 | assign 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 | }; | |
10549 | assign 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 | }; | |
10556 | assign 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 | }; | |
10563 | assign 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 | }; | |
10570 | assign 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 | }; | |
10577 | assign 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 | }; | |
10584 | assign 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. | |
10594 | assign 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 | }; | |
10601 | assign 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 | }; | |
10608 | assign 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 | }; | |
10615 | assign 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 | }; | |
10622 | assign 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 | }; | |
10629 | assign 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 | }; | |
10636 | assign 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 | }; | |
10643 | assign 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. | |
10653 | assign 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 | }; | |
10660 | assign 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 | }; | |
10667 | assign 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 | }; | |
10674 | assign 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 | }; | |
10681 | assign 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 | }; | |
10688 | assign 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 | }; | |
10695 | assign 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 | }; | |
10702 | assign 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. | |
10712 | assign 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 | }; | |
10719 | assign 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 | }; | |
10726 | assign 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 | }; | |
10733 | assign 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 | }; | |
10740 | assign 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 | }; | |
10747 | assign 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 | }; | |
10754 | assign 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 | }; | |
10761 | assign 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. | |
10771 | assign 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 | }; | |
10778 | assign 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 | }; | |
10785 | assign 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 | }; | |
10792 | assign 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 | }; | |
10799 | assign 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 | }; | |
10806 | assign 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 | }; | |
10813 | assign 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 | }; | |
10820 | assign 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. | |
10830 | assign 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 | }; | |
10837 | assign 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 | }; | |
10844 | assign 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 | }; | |
10851 | assign 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 | }; | |
10858 | assign 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 | }; | |
10865 | assign 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 | }; | |
10872 | assign 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 | }; | |
10879 | assign 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 | |
10898 | wire [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) | |
10913 | wire [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 | ||
10926 | wire [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 | ||
10937 | reg tlb_bypass_m; | |
10938 | reg tlb_bypass_b; | |
10939 | reg tlb_rd_vld_m; | |
10940 | reg tlb_rd_vld_b; | |
10941 | reg lsu_tl_gt_0_b; | |
10942 | reg [7:0] dcc_asi_b; | |
10943 | reg asi_internal_w; | |
10944 | ||
10945 | always @ (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; | |
10966 | end // } | |
10967 | ||
10968 | // TL determines whether Nucleus or Primary | |
10969 | wire [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 | ||
10973 | wire [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 | ||
10999 | wire [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 | ||
11025 | wire 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 | ||
11029 | wire [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 | ||
11039 | wire [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 | ||
11051 | reg [71:0] tick_cmpr_0; | |
11052 | reg [71:0] stick_cmpr_0; | |
11053 | reg [71:0] hstick_cmpr_0; | |
11054 | reg [151:0] trap_entry_1_t0; | |
11055 | reg [151:0] trap_entry_2_t0; | |
11056 | reg [151:0] trap_entry_3_t0; | |
11057 | reg [151:0] trap_entry_4_t0; | |
11058 | reg [151:0] trap_entry_5_t0; | |
11059 | reg [151:0] trap_entry_6_t0; | |
11060 | ||
11061 | always @(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 | ||
11074 | end // } | |
11075 | reg [71:0] tick_cmpr_1; | |
11076 | reg [71:0] stick_cmpr_1; | |
11077 | reg [71:0] hstick_cmpr_1; | |
11078 | reg [151:0] trap_entry_1_t1; | |
11079 | reg [151:0] trap_entry_2_t1; | |
11080 | reg [151:0] trap_entry_3_t1; | |
11081 | reg [151:0] trap_entry_4_t1; | |
11082 | reg [151:0] trap_entry_5_t1; | |
11083 | reg [151:0] trap_entry_6_t1; | |
11084 | ||
11085 | always @(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 | ||
11098 | end // } | |
11099 | reg [71:0] tick_cmpr_2; | |
11100 | reg [71:0] stick_cmpr_2; | |
11101 | reg [71:0] hstick_cmpr_2; | |
11102 | reg [151:0] trap_entry_1_t2; | |
11103 | reg [151:0] trap_entry_2_t2; | |
11104 | reg [151:0] trap_entry_3_t2; | |
11105 | reg [151:0] trap_entry_4_t2; | |
11106 | reg [151:0] trap_entry_5_t2; | |
11107 | reg [151:0] trap_entry_6_t2; | |
11108 | ||
11109 | always @(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 | ||
11122 | end // } | |
11123 | reg [71:0] tick_cmpr_3; | |
11124 | reg [71:0] stick_cmpr_3; | |
11125 | reg [71:0] hstick_cmpr_3; | |
11126 | reg [151:0] trap_entry_1_t3; | |
11127 | reg [151:0] trap_entry_2_t3; | |
11128 | reg [151:0] trap_entry_3_t3; | |
11129 | reg [151:0] trap_entry_4_t3; | |
11130 | reg [151:0] trap_entry_5_t3; | |
11131 | reg [151:0] trap_entry_6_t3; | |
11132 | ||
11133 | always @(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 | ||
11146 | end // } | |
11147 | reg [71:0] tick_cmpr_4; | |
11148 | reg [71:0] stick_cmpr_4; | |
11149 | reg [71:0] hstick_cmpr_4; | |
11150 | reg [151:0] trap_entry_1_t4; | |
11151 | reg [151:0] trap_entry_2_t4; | |
11152 | reg [151:0] trap_entry_3_t4; | |
11153 | reg [151:0] trap_entry_4_t4; | |
11154 | reg [151:0] trap_entry_5_t4; | |
11155 | reg [151:0] trap_entry_6_t4; | |
11156 | ||
11157 | always @(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 | ||
11170 | end // } | |
11171 | reg [71:0] tick_cmpr_5; | |
11172 | reg [71:0] stick_cmpr_5; | |
11173 | reg [71:0] hstick_cmpr_5; | |
11174 | reg [151:0] trap_entry_1_t5; | |
11175 | reg [151:0] trap_entry_2_t5; | |
11176 | reg [151:0] trap_entry_3_t5; | |
11177 | reg [151:0] trap_entry_4_t5; | |
11178 | reg [151:0] trap_entry_5_t5; | |
11179 | reg [151:0] trap_entry_6_t5; | |
11180 | ||
11181 | always @(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 | ||
11194 | end // } | |
11195 | reg [71:0] tick_cmpr_6; | |
11196 | reg [71:0] stick_cmpr_6; | |
11197 | reg [71:0] hstick_cmpr_6; | |
11198 | reg [151:0] trap_entry_1_t6; | |
11199 | reg [151:0] trap_entry_2_t6; | |
11200 | reg [151:0] trap_entry_3_t6; | |
11201 | reg [151:0] trap_entry_4_t6; | |
11202 | reg [151:0] trap_entry_5_t6; | |
11203 | reg [151:0] trap_entry_6_t6; | |
11204 | ||
11205 | always @(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 | ||
11218 | end // } | |
11219 | reg [71:0] tick_cmpr_7; | |
11220 | reg [71:0] stick_cmpr_7; | |
11221 | reg [71:0] hstick_cmpr_7; | |
11222 | reg [151:0] trap_entry_1_t7; | |
11223 | reg [151:0] trap_entry_2_t7; | |
11224 | reg [151:0] trap_entry_3_t7; | |
11225 | reg [151:0] trap_entry_4_t7; | |
11226 | reg [151:0] trap_entry_5_t7; | |
11227 | reg [151:0] trap_entry_6_t7; | |
11228 | ||
11229 | always @(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 | ||
11242 | end // } | |
11243 | ||
11244 | //------------------------------------ | |
11245 | // ASI & Trap State machines | |
11246 | always @(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 | ||
11335 | end // } | |
11336 | ||
11337 | ||
11338 | always @(posedge `BENCH_SPC4_GCLK) begin | |
11339 | ||
11340 | // debug code for TPCC analysis | |
11341 | `ifdef TPCC | |
11342 | if (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 | |
11352 | end | |
11353 | ||
11354 | pcx_req <= |`SPC4.spc_pcx_req_pq[8:0]; | |
11355 | ||
11356 | if (`SPC4.ifu_l15_valid==1) begin | |
11357 | imiss_cnt=imiss_cnt+1; | |
11358 | $display("imiss cnt is %0d",imiss_cnt); | |
11359 | end | |
11360 | if (spec_dmiss==1 && `SPC4.lsu_l15_cancel==0) begin | |
11361 | dmiss_cnt=dmiss_cnt+1; | |
11362 | $display("dmiss cnt is %0d",dmiss_cnt); | |
11363 | ||
11364 | end | |
11365 | spec_dmiss <= `SPC4.lsu_l15_valid & `SPC4.lsu_l15_load; | |
11366 | ||
11367 | clock = clock+1; | |
11368 | ||
11369 | // keep track of imiss latencies | |
11370 | if (`SPC4.ftu_agc_thr0_cmiss_c==1) begin | |
11371 | start_imiss0=clock; | |
11372 | active_imiss0=1; | |
11373 | end | |
11374 | if (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; | |
11380 | end | |
11381 | if (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; | |
11383 | end | |
11384 | if (`SPC4.ftu_agc_thr1_cmiss_c==1) begin | |
11385 | start_imiss1=clock; | |
11386 | active_imiss1=1; | |
11387 | end | |
11388 | if (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; | |
11394 | end | |
11395 | if (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; | |
11397 | end | |
11398 | if (`SPC4.ftu_agc_thr2_cmiss_c==1) begin | |
11399 | start_imiss2=clock; | |
11400 | active_imiss2=1; | |
11401 | end | |
11402 | if (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; | |
11408 | end | |
11409 | if (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; | |
11411 | end | |
11412 | if (`SPC4.ftu_agc_thr3_cmiss_c==1) begin | |
11413 | start_imiss3=clock; | |
11414 | active_imiss3=1; | |
11415 | end | |
11416 | if (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; | |
11422 | end | |
11423 | if (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; | |
11425 | end | |
11426 | if (`SPC4.ftu_agc_thr4_cmiss_c==1) begin | |
11427 | start_imiss4=clock; | |
11428 | active_imiss4=1; | |
11429 | end | |
11430 | if (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; | |
11436 | end | |
11437 | if (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; | |
11439 | end | |
11440 | if (`SPC4.ftu_agc_thr5_cmiss_c==1) begin | |
11441 | start_imiss5=clock; | |
11442 | active_imiss5=1; | |
11443 | end | |
11444 | if (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; | |
11450 | end | |
11451 | if (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; | |
11453 | end | |
11454 | if (`SPC4.ftu_agc_thr6_cmiss_c==1) begin | |
11455 | start_imiss6=clock; | |
11456 | active_imiss6=1; | |
11457 | end | |
11458 | if (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; | |
11464 | end | |
11465 | if (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; | |
11467 | end | |
11468 | if (`SPC4.ftu_agc_thr7_cmiss_c==1) begin | |
11469 | start_imiss7=clock; | |
11470 | active_imiss7=1; | |
11471 | end | |
11472 | if (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; | |
11478 | end | |
11479 | if (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; | |
11481 | end | |
11482 | ||
11483 | if (`SPC4.pku.swl0.set_lsu_sync_wait==1) begin | |
11484 | start_dmiss0=clock; | |
11485 | end | |
11486 | if (`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); | |
11490 | end | |
11491 | if (`SPC4.pku.swl1.set_lsu_sync_wait==1) begin | |
11492 | start_dmiss1=clock; | |
11493 | end | |
11494 | if (`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); | |
11498 | end | |
11499 | if (`SPC4.pku.swl2.set_lsu_sync_wait==1) begin | |
11500 | start_dmiss2=clock; | |
11501 | end | |
11502 | if (`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); | |
11506 | end | |
11507 | if (`SPC4.pku.swl3.set_lsu_sync_wait==1) begin | |
11508 | start_dmiss3=clock; | |
11509 | end | |
11510 | if (`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); | |
11514 | end | |
11515 | if (`SPC4.pku.swl4.set_lsu_sync_wait==1) begin | |
11516 | start_dmiss4=clock; | |
11517 | end | |
11518 | if (`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); | |
11522 | end | |
11523 | if (`SPC4.pku.swl5.set_lsu_sync_wait==1) begin | |
11524 | start_dmiss5=clock; | |
11525 | end | |
11526 | if (`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); | |
11530 | end | |
11531 | if (`SPC4.pku.swl6.set_lsu_sync_wait==1) begin | |
11532 | start_dmiss6=clock; | |
11533 | end | |
11534 | if (`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); | |
11538 | end | |
11539 | if (`SPC4.pku.swl7.set_lsu_sync_wait==1) begin | |
11540 | start_dmiss7=clock; | |
11541 | end | |
11542 | if (`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); | |
11546 | end | |
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 | ||
11737 | end // 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 | |
11742 | assign return0 = `SPC4.exu0.rml.return_w & | |
11743 | `SPC4.exu0.rml.inst_vld_w; | |
11744 | assign return1 = `SPC4.exu1.rml.return_w & | |
11745 | `SPC4.exu1.rml.inst_vld_w; | |
11746 | assign 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 | |
11760 | assign ex0_tid_e = `SPC4.exu0.ect_tid_lth_e[1:0]; | |
11761 | assign ex0_valid_e = `SPC4.dec.dec_valid_e[0] & ~fgu0_e & ~load0_e & | |
11762 | ~retry0_e & ~done0_e; | |
11763 | assign ex1_tid_e = `SPC4.exu1.ect_tid_lth_e[1:0]; | |
11764 | assign ex1_valid_e = `SPC4.dec.dec_valid_e[1] & ~fgu1_e & ~load1_e & | |
11765 | ~retry1_e & ~done1_e; | |
11766 | ||
11767 | assign ex_asr_valid = `SPC4.lsu.dcc.asi_store_m & `SPC4.lsu.dcc.asi_sync_m ; | |
11768 | ||
11769 | assign 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 | |
11782 | assign 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 | |
11793 | wire [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... | |
11804 | reg [7:0] block_store_w; | |
11805 | always @(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]; | |
11808 | end | |
11809 | ||
11810 | wire [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 | ||
11822 | assign 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 | ||
11836 | assign 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 | |
11844 | assign 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 | |
11857 | wire 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 | ||
11861 | assign fg_cond_fb = fg_cond_fb_pre_err & ~fgu_err_fb; | |
11862 | ||
11863 | // Idiv/Fdiv signals | |
11864 | ||
11865 | assign fgu_idiv_valid = fg_div_valid & div_idest; | |
11866 | ||
11867 | ||
11868 | assign fgu_fdiv_valid = fg_fdiv_valid_fw & div_fdest; | |
11869 | ||
11870 | ||
11871 | // Lsu signals needed to check lsu results | |
11872 | ||
11873 | assign lsu_valid = lsu_check | lsu_data_w; | |
11874 | ||
11875 | assign fg_div_valid = `SPC4.fgu_divide_completion & ~div_special_cancel_f4; | |
11876 | ||
11877 | // State machine asserts lsu_check for LD hit/miss | |
11878 | always @(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 // } | |
11924 | end | |
11925 | ||
11926 | ||
11927 | assign lsu_tid = `SPC4.lsu.dcc.ld_tid_b[2:0]; | |
11928 | // Don't assert LSU_complete in case of dtlb or irf errors | |
11929 | ||
11930 | assign 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 | ||
11935 | assign 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 | ||
11944 | assign lsu_tid_dec_b[0] = `SPC4.lsu.dcc.ld_tid_b[2:0] == 3'd0; | |
11945 | assign lsu_tid_dec_b[1] = `SPC4.lsu.dcc.ld_tid_b[2:0] == 3'd1; | |
11946 | assign lsu_tid_dec_b[2] = `SPC4.lsu.dcc.ld_tid_b[2:0] == 3'd2; | |
11947 | assign lsu_tid_dec_b[3] = `SPC4.lsu.dcc.ld_tid_b[2:0] == 3'd3; | |
11948 | assign lsu_tid_dec_b[4] = `SPC4.lsu.dcc.ld_tid_b[2:0] == 3'd4; | |
11949 | assign lsu_tid_dec_b[5] = `SPC4.lsu.dcc.ld_tid_b[2:0] == 3'd5; | |
11950 | assign lsu_tid_dec_b[6] = `SPC4.lsu.dcc.ld_tid_b[2:0] == 3'd6; | |
11951 | assign lsu_tid_dec_b[7] = `SPC4.lsu.dcc.ld_tid_b[2:0] == 3'd7; | |
11952 | ||
11953 | assign 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); | |
11955 | assign dec_flush_lb = `SPC4.dec.dec_flush_lb | `SPC4.tlu_flush_lsu_b; | |
11956 | ||
11957 | ||
11958 | // LSU interface to CCX stub | |
11959 | ||
11960 | assign exu_lsu_valid = `SPC4.dec.del.lsu_valid_e; | |
11961 | assign exu_lsu_addr[47:0] = `SPC4.exu_lsu_address_e[47:0]; | |
11962 | assign exu_lsu_tid[2:0] = lsu_tid_e[2:0]; | |
11963 | assign exu_lsu_regid[4:0] = `SPC4.dec.dec_lsu_rd_e[4:0]; | |
11964 | assign exu_lsu_data[63:0] = `SPC4.exu_lsu_store_data_e[63:0]; | |
11965 | assign 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]); | |
11969 | assign 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 | ||
12016 | initial 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; | |
12025 | end | |
12026 | ||
12027 | always @(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 | ||
12077 | end //} | |
12078 | ||
12079 | /////////////////////////////////////////////////////////////////////////////// | |
12080 | // Functions | |
12081 | /////////////////////////////////////////////////////////////////////////////// | |
12082 | function [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 | |
12097 | endfunction | |
12098 | ||
12099 | function [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 | |
12114 | endfunction | |
12115 | ||
12116 | //--------------------- | |
12117 | ||
12118 | function [255:0] xlate; | |
12119 | input [31:0] inst; | |
12120 | ||
12121 | begin | |
12122 | casex(inst[31:0]) | |
12123 | 32'b10xxxxx110100xxxxx001000011xxxxx : xlate[255:0]="FADDq"; | |
12124 | 32'b10xxxxx110100xxxxx001000111xxxxx : xlate[255:0]="FSUBq"; | |
12125 | 32'b10000xx110101xxxxx001010011xxxxx : xlate[255:0]="FCMPq"; | |
12126 | 32'b10000xx110101xxxxx001010111xxxxx : xlate[255:0]="FCMPEq"; | |
12127 | 32'b10xxxxx110100xxxxx011001101xxxxx : xlate[255:0]="FsTOq"; | |
12128 | 32'b10xxxxx110100xxxxx011001110xxxxx : xlate[255:0]="FdTOq"; | |
12129 | 32'b10xxxxx110100xxxxx010001100xxxxx : xlate[255:0]="FxTOq"; | |
12130 | 32'b10xxxxx110100xxxxx011001100xxxxx : xlate[255:0]="FiTOq"; | |
12131 | 32'b10xxxxx110100xxxxx000000011xxxxx : xlate[255:0]="FMOVq"; | |
12132 | 32'b10xxxxx110100xxxxx000000111xxxxx : xlate[255:0]="FNEGq"; | |
12133 | 32'b10xxxxx110100xxxxx000001011xxxxx : xlate[255:0]="FABSq"; | |
12134 | 32'b10xxxxx110100xxxxx001001011xxxxx : xlate[255:0]="FMULq"; | |
12135 | 32'b10xxxxx110100xxxxx001101110xxxxx : xlate[255:0]="FdMULq"; | |
12136 | 32'b10xxxxx110100xxxxx001001111xxxxx : xlate[255:0]="FDIVq"; | |
12137 | 32'b10xxxxx110100xxxxx000101011xxxxx : xlate[255:0]="FSQRTq"; | |
12138 | 32'b10xxxxx1101010xxxx0xx100111xxxxx : xlate[255:0]="FMOVrQa"; | |
12139 | 32'b10xxxxx1101010xxxx0x1x00111xxxxx : xlate[255:0]="FMOVrQb"; | |
12140 | 32'b10xxxxx110100xxxxx011010011xxxxx : xlate[255:0]="FqTOi"; | |
12141 | 32'b10xxxxx110100xxxxx010000011xxxxx : xlate[255:0]="FqTOx"; | |
12142 | 32'b10xxxxx110100xxxxx011000111xxxxx : xlate[255:0]="FqTOs"; | |
12143 | 32'b10xxxxx110100xxxxx011001011xxxxx : xlate[255:0]="FqTOd"; | |
12144 | 32'b11xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQF"; | |
12145 | 32'b11xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFi"; | |
12146 | 32'b11xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQFA"; | |
12147 | 32'b11xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFAi"; | |
12148 | 32'b11xxxxx100110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFi"; | |
12149 | 32'b11xxxxx100110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQF"; | |
12150 | 32'b11xxxxx110110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQFA"; | |
12151 | 32'b11xxxxx110110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFAi"; | |
12152 | 32'b10xxxxx1101010xxxxxxx000011xxxxx : xlate[255:0]="FMOVQcc"; | |
12153 | 32'b10xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADD"; | |
12154 | 32'b10xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDcc"; | |
12155 | 32'b10xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDC"; | |
12156 | 32'b10xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDCcc"; | |
12157 | 32'b10xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDi"; | |
12158 | 32'b10xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDcci"; | |
12159 | 32'b10xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCi"; | |
12160 | 32'b10xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCcci"; | |
12161 | 32'b00x0xx1011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr1"; | |
12162 | 32'b00x0x1x011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr2"; | |
12163 | 32'b00xx000110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfccA"; | |
12164 | 32'b00xx1xx110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc1"; | |
12165 | 32'b00xxx1x110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc2"; | |
12166 | 32'b00xxxx1110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc3"; | |
12167 | 32'b00xx000101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfccA"; | |
12168 | 32'b00xx1xx101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc1"; | |
12169 | 32'b00xxx1x101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc2"; | |
12170 | 32'b00xxxx1101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc3"; | |
12171 | 32'b00xx000010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BiccA"; | |
12172 | 32'b00xx1xx010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc1"; | |
12173 | 32'b00xxx1x010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc2"; | |
12174 | 32'b00xxxx1010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc3"; | |
12175 | 32'b00xx000001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPccA"; | |
12176 | 32'b00xx1xx001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc1"; | |
12177 | 32'b00xxx1x001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc2"; | |
12178 | 32'b00xxxx1001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc3"; | |
12179 | 32'b01xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="CALL"; | |
12180 | 32'b11xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASA"; | |
12181 | 32'b11xxxxx111110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASXA"; | |
12182 | 32'b11xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASAi"; | |
12183 | 32'b11xxxxx111110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASXAi"; | |
12184 | 32'b10xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIV"; | |
12185 | 32'b10xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIV"; | |
12186 | 32'b10xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVcc"; | |
12187 | 32'b10xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVcc"; | |
12188 | 32'b10xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVi"; | |
12189 | 32'b10xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVi"; | |
12190 | 32'b10xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVcci"; | |
12191 | 32'b10xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVcci"; | |
12192 | 32'b1000000111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="DONE"; | |
12193 | 32'b1000001111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RETRY"; | |
12194 | 32'b10xxxxx110100xxxxx001000001xxxxx : xlate[255:0]="FADDs"; | |
12195 | 32'b10xxxxx110100xxxxx001000010xxxxx : xlate[255:0]="FADDd"; | |
12196 | 32'b10xxxxx110100xxxxx001000101xxxxx : xlate[255:0]="FSUBs"; | |
12197 | 32'b10xxxxx110100xxxxx001000110xxxxx : xlate[255:0]="FSUBd"; | |
12198 | 32'b10000xx110101xxxxx001010001xxxxx : xlate[255:0]="FCMPs"; | |
12199 | 32'b10000xx110101xxxxx001010010xxxxx : xlate[255:0]="FCMPd"; | |
12200 | 32'b10000xx110101xxxxx001010101xxxxx : xlate[255:0]="FCMPEs"; | |
12201 | 32'b10000xx110101xxxxx001010110xxxxx : xlate[255:0]="FCMPEd"; | |
12202 | 32'b10xxxxx110100xxxxx010000001xxxxx : xlate[255:0]="FsTOx"; | |
12203 | 32'b10xxxxx110100xxxxx010000010xxxxx : xlate[255:0]="FdTOx"; | |
12204 | 32'b10xxxxx110100xxxxx011010001xxxxx : xlate[255:0]="FsTOi"; | |
12205 | 32'b10xxxxx110100xxxxx011010010xxxxx : xlate[255:0]="FdTOi"; | |
12206 | 32'b10xxxxx110100xxxxx011001001xxxxx : xlate[255:0]="FsTOd"; | |
12207 | 32'b10xxxxx110100xxxxx011000110xxxxx : xlate[255:0]="FdTOs"; | |
12208 | 32'b10xxxxx110100xxxxx010000100xxxxx : xlate[255:0]="FxTOs"; | |
12209 | 32'b10xxxxx110100xxxxx010001000xxxxx : xlate[255:0]="FxTOd"; | |
12210 | 32'b10xxxxx110100xxxxx011000100xxxxx : xlate[255:0]="FiTOs"; | |
12211 | 32'b10xxxxx110100xxxxx011001000xxxxx : xlate[255:0]="FiTOd"; | |
12212 | 32'b10xxxxx110100xxxxx000000001xxxxx : xlate[255:0]="FMOVs"; | |
12213 | 32'b10xxxxx110100xxxxx000000010xxxxx : xlate[255:0]="FMOVd"; | |
12214 | 32'b10xxxxx110100xxxxx000000101xxxxx : xlate[255:0]="FNEGs"; | |
12215 | 32'b10xxxxx110100xxxxx000000110xxxxx : xlate[255:0]="FNEGd"; | |
12216 | 32'b10xxxxx110100xxxxx000001001xxxxx : xlate[255:0]="FABSs"; | |
12217 | 32'b10xxxxx110100xxxxx000001010xxxxx : xlate[255:0]="FABSd"; | |
12218 | 32'b10xxxxx110100xxxxx001001001xxxxx : xlate[255:0]="FMULs"; | |
12219 | 32'b10xxxxx110100xxxxx001001010xxxxx : xlate[255:0]="FMULd"; | |
12220 | 32'b10xxxxx110100xxxxx001101001xxxxx : xlate[255:0]="FsMULd"; | |
12221 | 32'b10xxxxx110100xxxxx001001101xxxxx : xlate[255:0]="FDIVs"; | |
12222 | 32'b10xxxxx110100xxxxx001001110xxxxx : xlate[255:0]="FDIVd"; | |
12223 | 32'b10xxxxx110100xxxxx000101001xxxxx : xlate[255:0]="FSQRTs"; | |
12224 | 32'b10xxxxx110100xxxxx000101010xxxxx : xlate[255:0]="FSQRTd"; | |
12225 | 32'b10xxxxx111011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSH"; | |
12226 | 32'b10xxxxx111011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="FLUSHi"; | |
12227 | 32'b10xxxxx101011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSHw"; | |
12228 | 32'b10xxxxx111000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="JMPL"; | |
12229 | 32'b10xxxxx111000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="JMPLi"; | |
12230 | 32'b11xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDF"; | |
12231 | 32'b11xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDF"; | |
12232 | 32'b1100000100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFSR"; | |
12233 | 32'b1100001100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXFSR"; | |
12234 | 32'b11xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFi"; | |
12235 | 32'b11xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFi"; | |
12236 | 32'b1100000100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFSRi"; | |
12237 | 32'b1100001100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXFSRi"; | |
12238 | 32'b11xxxxx110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFA"; | |
12239 | 32'b11xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDFA"; | |
12240 | 32'b11xxxxx110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFAi"; | |
12241 | 32'b11xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFAi"; | |
12242 | 32'b11xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSB"; | |
12243 | 32'b11xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSH"; | |
12244 | 32'b11xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSW"; | |
12245 | 32'b11xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUB"; | |
12246 | 32'b11xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUH"; | |
12247 | 32'b11xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUW"; | |
12248 | 32'b11xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDX"; | |
12249 | 32'b11xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDD"; | |
12250 | 32'b11xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBi"; | |
12251 | 32'b11xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHi"; | |
12252 | 32'b11xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWi"; | |
12253 | 32'b11xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBi"; | |
12254 | 32'b11xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHi"; | |
12255 | 32'b11xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWi"; | |
12256 | 32'b11xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXi"; | |
12257 | 32'b11xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDi"; | |
12258 | 32'b11xxxxx011001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSBA"; | |
12259 | 32'b11xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSHA"; | |
12260 | 32'b11xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSWA"; | |
12261 | 32'b11xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUBA"; | |
12262 | 32'b11xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUHA"; | |
12263 | 32'b11xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUWA"; | |
12264 | 32'b11xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXA"; | |
12265 | 32'b11xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDA"; | |
12266 | 32'b11xxxxx011001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBAi"; | |
12267 | 32'b11xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHAi"; | |
12268 | 32'b11xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWAi"; | |
12269 | 32'b11xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBAi"; | |
12270 | 32'b11xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHAi"; | |
12271 | 32'b11xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWAi"; | |
12272 | 32'b11xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXAi"; | |
12273 | 32'b11xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDAi"; | |
12274 | 32'b11xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUB"; | |
12275 | 32'b11xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBi"; | |
12276 | 32'b11xxxxx011101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUBA"; | |
12277 | 32'b11xxxxx011101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBAi"; | |
12278 | 32'b10xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="AND"; | |
12279 | 32'b10xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDcc"; | |
12280 | 32'b10xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDN"; | |
12281 | 32'b10xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDNcc"; | |
12282 | 32'b10xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="OR"; | |
12283 | 32'b10xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORcc"; | |
12284 | 32'b10xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORN"; | |
12285 | 32'b10xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORNcc"; | |
12286 | 32'b10xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XOR"; | |
12287 | 32'b10xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XORcc"; | |
12288 | 32'b10xxxxx000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNOR"; | |
12289 | 32'b10xxxxx010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNORcc"; | |
12290 | 32'b10xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDi"; | |
12291 | 32'b10xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDcci"; | |
12292 | 32'b10xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNi"; | |
12293 | 32'b10xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNcci"; | |
12294 | 32'b10xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORi"; | |
12295 | 32'b10xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORcci"; | |
12296 | 32'b10xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNi"; | |
12297 | 32'b10xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNcci"; | |
12298 | 32'b10xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORi"; | |
12299 | 32'b10xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORcci"; | |
12300 | 32'b10xxxxx000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORi"; | |
12301 | 32'b10xxxxx010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORcci"; | |
12302 | 32'b1000000101000011111xxxxxxxxxxxxx : xlate[255:0]="MEMBAR"; | |
12303 | 32'b1000000101000011110xxxxxxxxxxxxx : xlate[255:0]="STBAR"; | |
12304 | 32'b10xxxxx101000000000xxxxxxxxxxxxx : xlate[255:0]="RDY"; | |
12305 | 32'b10xxxxx101000000100xxxxxxxxxxxxx : xlate[255:0]="RDCCR"; | |
12306 | 32'b10xxxxx101000000110xxxxxxxxxxxxx : xlate[255:0]="RDASI"; | |
12307 | 32'b10xxxxx101000001000xxxxxxxxxxxxx : xlate[255:0]="RDTICK"; | |
12308 | 32'b10xxxxx101000001010xxxxxxxxxxxxx : xlate[255:0]="RDPC"; | |
12309 | 32'b10xxxxx101000001100xxxxxxxxxxxxx : xlate[255:0]="RDFPRS"; | |
12310 | 32'b10xxxxx101000100110xxxxxxxxxxxxx : xlate[255:0]="RDGSR"; | |
12311 | 32'b10xxxxx101000100000xxxxxxxxxxxxx : xlate[255:0]="RDPCR"; | |
12312 | 32'b10xxxxx101000100010xxxxxxxxxxxxx : xlate[255:0]="RDPIC"; | |
12313 | 32'b10xxxxx1101010xxxx0xx000001xxxxx : xlate[255:0]="FMOVSfcc"; | |
12314 | 32'b10xxxxx1101010xxxx1xx000001xxxxx : xlate[255:0]="FMOVSxcc"; | |
12315 | 32'b10xxxxx1101010xxxx0xx000010xxxxx : xlate[255:0]="FMOVDfcc"; | |
12316 | 32'b10xxxxx1101010xxxx1xx000010xxxxx : xlate[255:0]="FMOVDxcc"; | |
12317 | 32'b10xxxxx110101xxxxx0xx100101xxxxx : xlate[255:0]="FMOVrS1"; | |
12318 | 32'b10xxxxx110101xxxxx0x1x00101xxxxx : xlate[255:0]="FMOVrS2"; | |
12319 | 32'b10xxxxx110101xxxxx0xx100110xxxxx : xlate[255:0]="FMOVrD1"; | |
12320 | 32'b10xxxxx110101xxxxx0x1x00110xxxxx : xlate[255:0]="FMOVrD2"; | |
12321 | 32'b10xxxxx1011001xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVxcc"; | |
12322 | 32'b10xxxxx1011001xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVxcci"; | |
12323 | 32'b10xxxxx1011000xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVfcc"; | |
12324 | 32'b10xxxxx1011000xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVfcci"; | |
12325 | 32'b10xxxxx101111xxxxx0xx1xxxxxxxxxx : xlate[255:0]="MOVR1"; | |
12326 | 32'b10xxxxx101111xxxxx0x1xxxxxxxxxxx : xlate[255:0]="MOVR2"; | |
12327 | 32'b10xxxxx101111xxxxx1xx1xxxxxxxxxx : xlate[255:0]="MOVRi1"; | |
12328 | 32'b10xxxxx101111xxxxx1x1xxxxxxxxxxx : xlate[255:0]="MOVRi2"; | |
12329 | 32'b10xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULX"; | |
12330 | 32'b10xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVX"; | |
12331 | 32'b10xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVX"; | |
12332 | 32'b10xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULXi"; | |
12333 | 32'b10xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVXi"; | |
12334 | 32'b10xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVXi"; | |
12335 | 32'b10xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMUL"; | |
12336 | 32'b10xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMUL"; | |
12337 | 32'b10xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMULcc"; | |
12338 | 32'b10xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMULcc"; | |
12339 | 32'b10xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULi"; | |
12340 | 32'b10xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULi"; | |
12341 | 32'b10xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULcci"; | |
12342 | 32'b10xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULcci"; | |
12343 | 32'b10xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULScc"; | |
12344 | 32'b10xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULScci"; | |
12345 | 32'b10xxxxx101110000000xxxxxxxxxxxxx : xlate[255:0]="POPC"; | |
12346 | 32'b10xxxxx101110000001xxxxxxxxxxxxx : xlate[255:0]="POPCi"; | |
12347 | 32'b11xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCH"; | |
12348 | 32'b11xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHi"; | |
12349 | 32'b11xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCHA"; | |
12350 | 32'b11xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHAi"; | |
12351 | 32'b10xxxxx101010xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDPR"; | |
12352 | 32'b10xxxxx101001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDHPR"; | |
12353 | 32'b10xxxxx111001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RETURN"; | |
12354 | 32'b10xxxxx111001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RETURNi"; | |
12355 | 32'b10xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SAVE"; | |
12356 | 32'b10xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SAVEi"; | |
12357 | 32'b10xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RESTORE"; | |
12358 | 32'b10xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RESTOREi"; | |
12359 | 32'b1000000110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="SAVED"; | |
12360 | 32'b1000001110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RESTORED"; | |
12361 | 32'b00xxxxx100xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="SETHI"; | |
12362 | 32'b10xxxxx100101xxxxx00xxxxxxxxxxxx : xlate[255:0]="SLL"; | |
12363 | 32'b10xxxxx100110xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRL"; | |
12364 | 32'b10xxxxx100111xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRA"; | |
12365 | 32'b10xxxxx100101xxxxx01xxxxxxxxxxxx : xlate[255:0]="SLLX"; | |
12366 | 32'b10xxxxx100110xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRLX"; | |
12367 | 32'b10xxxxx100111xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRAX"; | |
12368 | 32'b10xxxxx100101xxxxx10xxxxxxxxxxxx : xlate[255:0]="SLLi"; | |
12369 | 32'b10xxxxx100110xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRLi"; | |
12370 | 32'b10xxxxx100111xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRAi"; | |
12371 | 32'b10xxxxx100101xxxxx11xxxxxxxxxxxx : xlate[255:0]="SLLXi"; | |
12372 | 32'b10xxxxx100110xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRLXi"; | |
12373 | 32'b10xxxxx100111xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRAXi"; | |
12374 | 32'b11xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STF"; | |
12375 | 32'b11xxxxx100111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDF"; | |
12376 | 32'b1100000100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFSR"; | |
12377 | 32'b1100001100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXFSR"; | |
12378 | 32'b11xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFi"; | |
12379 | 32'b11xxxxx100111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFi"; | |
12380 | 32'b1100000100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFSRi"; | |
12381 | 32'b1100001100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXFSRi"; | |
12382 | 32'b11xxxxx110100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFA"; | |
12383 | 32'b11xxxxx110111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDFA"; | |
12384 | 32'b11xxxxx110100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFAi"; | |
12385 | 32'b11xxxxx110111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFAi"; | |
12386 | 32'b11xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STB"; | |
12387 | 32'b11xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STH"; | |
12388 | 32'b11xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STW"; | |
12389 | 32'b11xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STX"; | |
12390 | 32'b11xxxx0000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STD"; | |
12391 | 32'b11xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBi"; | |
12392 | 32'b11xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHi"; | |
12393 | 32'b11xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWi"; | |
12394 | 32'b11xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXi"; | |
12395 | 32'b11xxxx0000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDi"; | |
12396 | 32'b11xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STBA"; | |
12397 | 32'b11xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STHA"; | |
12398 | 32'b11xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STWA"; | |
12399 | 32'b11xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXA"; | |
12400 | 32'b11xxxx0010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDA"; | |
12401 | 32'b11xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBAi"; | |
12402 | 32'b11xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHAi"; | |
12403 | 32'b11xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWAi"; | |
12404 | 32'b11xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXAi"; | |
12405 | 32'b11xxxx0010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDAi"; | |
12406 | 32'b10xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUB"; | |
12407 | 32'b10xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBcc"; | |
12408 | 32'b10xxxxx001100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBC"; | |
12409 | 32'b10xxxxx011100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBCcc"; | |
12410 | 32'b10xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBi"; | |
12411 | 32'b10xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBcci"; | |
12412 | 32'b10xxxxx001100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCi"; | |
12413 | 32'b10xxxxx011100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCcci"; | |
12414 | 32'b11xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAP"; | |
12415 | 32'b11xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPi"; | |
12416 | 32'b11xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAPA"; | |
12417 | 32'b11xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPAi"; | |
12418 | 32'b10xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDcc"; | |
12419 | 32'b10xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDccTV"; | |
12420 | 32'b10xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDcci"; | |
12421 | 32'b10xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDccTVi"; | |
12422 | 32'b10xxxxx100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBcc"; | |
12423 | 32'b10xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBccTV"; | |
12424 | 32'b10xxxxx100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBcci"; | |
12425 | 32'b10xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBccTVi"; | |
12426 | 32'b10xxxxx111010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TCC"; | |
12427 | 32'b10xxxxx111010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TCCi"; | |
12428 | 32'b10xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPR"; | |
12429 | 32'b10xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPRi"; | |
12430 | 32'b10xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRHPR"; | |
12431 | 32'b10xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRHPRi"; | |
12432 | 32'b1000000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRY"; | |
12433 | 32'b1000010110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRCCR"; | |
12434 | 32'b1000011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRASI"; | |
12435 | 32'b1000110110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRFPRS"; | |
12436 | 32'b1010011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRGSR"; | |
12437 | 32'b1010000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPCR"; | |
12438 | 32'b1010001110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPIC"; | |
12439 | 32'b1000000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRYi"; | |
12440 | 32'b1000010110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRCCRi"; | |
12441 | 32'b1000011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRASIi"; | |
12442 | 32'b1000110110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRFPRSi"; | |
12443 | 32'b1010011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRGSRi"; | |
12444 | 32'b1010000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPCRi"; | |
12445 | 32'b1010001110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPICi"; | |
12446 | 32'b1001111110000000001xxxxxxxxxxxxx : xlate[255:0]="SIR"; | |
12447 | 32'b10xxxxx110110xxxxx001010000xxxxx : xlate[255:0]="FPADD16"; | |
12448 | 32'b10xxxxx110110xxxxx001010001xxxxx : xlate[255:0]="FPADD16S"; | |
12449 | 32'b10xxxxx110110xxxxx001010010xxxxx : xlate[255:0]="FPADD32"; | |
12450 | 32'b10xxxxx110110xxxxx001010011xxxxx : xlate[255:0]="FPADD32S"; | |
12451 | 32'b10xxxxx110110xxxxx001010100xxxxx : xlate[255:0]="FPSUB16"; | |
12452 | 32'b10xxxxx110110xxxxx001010101xxxxx : xlate[255:0]="FPSUB16S"; | |
12453 | 32'b10xxxxx110110xxxxx001010110xxxxx : xlate[255:0]="FPSUB32"; | |
12454 | 32'b10xxxxx110110xxxxx001010111xxxxx : xlate[255:0]="FPSUB32S"; | |
12455 | 32'b10xxxxx110110xxxxx000111011xxxxx : xlate[255:0]="FPACK16"; | |
12456 | 32'b10xxxxx110110xxxxx000111010xxxxx : xlate[255:0]="FPACK32"; | |
12457 | 32'b10xxxxx110110xxxxx000111101xxxxx : xlate[255:0]="FPACKFIX"; | |
12458 | 32'b10xxxxx110110xxxxx001001101xxxxx : xlate[255:0]="FEXPAND"; | |
12459 | 32'b10xxxxx110110xxxxx001001011xxxxx : xlate[255:0]="FPMERGE"; | |
12460 | 32'b10xxxxx110110xxxxx000110001xxxxx : xlate[255:0]="FMUL8x16"; | |
12461 | 32'b10xxxxx110110xxxxx000110011xxxxx : xlate[255:0]="FMUL8x16AU"; | |
12462 | 32'b10xxxxx110110xxxxx000110101xxxxx : xlate[255:0]="FMUL8x16AL"; | |
12463 | 32'b10xxxxx110110xxxxx000110110xxxxx : xlate[255:0]="FMUL8SUx16"; | |
12464 | 32'b10xxxxx110110xxxxx000110111xxxxx : xlate[255:0]="FMUL8ULx16"; | |
12465 | 32'b10xxxxx110110xxxxx000111000xxxxx : xlate[255:0]="FMULD8SUx16"; | |
12466 | 32'b10xxxxx110110xxxxx000111001xxxxx : xlate[255:0]="FMULD8ULx16"; | |
12467 | 32'b10xxxxx110110xxxxx000011000xxxxx : xlate[255:0]="ALIGNADDRESS"; | |
12468 | 32'b10xxxxx110110xxxxx000011010xxxxx : xlate[255:0]="ALIGNADDRESS_LITTLE"; | |
12469 | 32'b10xxxxx110110xxxxx000011001xxxxx : xlate[255:0]="BMASK"; | |
12470 | 32'b10xxxxx110110xxxxx001001000xxxxx : xlate[255:0]="FALIGNDATA"; | |
12471 | 32'b10xxxxx110110xxxxx001001100xxxxx : xlate[255:0]="BSHUFFLE"; | |
12472 | 32'b10xxxxx110110xxxxx001100000xxxxx : xlate[255:0]="FZERO"; | |
12473 | 32'b10xxxxx110110xxxxx001100001xxxxx : xlate[255:0]="FZEROS"; | |
12474 | 32'b10xxxxx110110xxxxx001111110xxxxx : xlate[255:0]="FONE"; | |
12475 | 32'b10xxxxx110110xxxxx001111111xxxxx : xlate[255:0]="FONES"; | |
12476 | 32'b10xxxxx110110xxxxx001110100xxxxx : xlate[255:0]="FSRC1"; | |
12477 | 32'b10xxxxx110110xxxxx001110101xxxxx : xlate[255:0]="FSRC1S"; | |
12478 | 32'b10xxxxx110110xxxxx001111000xxxxx : xlate[255:0]="FSRC2"; | |
12479 | 32'b10xxxxx110110xxxxx001111001xxxxx : xlate[255:0]="FSRC2S"; | |
12480 | 32'b10xxxxx110110xxxxx001101010xxxxx : xlate[255:0]="FNOT1"; | |
12481 | 32'b10xxxxx110110xxxxx001101011xxxxx : xlate[255:0]="FNOT1S"; | |
12482 | 32'b10xxxxx110110xxxxx001100110xxxxx : xlate[255:0]="FNOT2"; | |
12483 | 32'b10xxxxx110110xxxxx001100111xxxxx : xlate[255:0]="FNOT2S"; | |
12484 | 32'b10xxxxx110110xxxxx001111100xxxxx : xlate[255:0]="FOR"; | |
12485 | 32'b10xxxxx110110xxxxx001111101xxxxx : xlate[255:0]="FORS"; | |
12486 | 32'b10xxxxx110110xxxxx001100010xxxxx : xlate[255:0]="FNOR"; | |
12487 | 32'b10xxxxx110110xxxxx001100011xxxxx : xlate[255:0]="FNORS"; | |
12488 | 32'b10xxxxx110110xxxxx001110000xxxxx : xlate[255:0]="FAND"; | |
12489 | 32'b10xxxxx110110xxxxx001110001xxxxx : xlate[255:0]="FANDS"; | |
12490 | 32'b10xxxxx110110xxxxx001101110xxxxx : xlate[255:0]="FNAND"; | |
12491 | 32'b10xxxxx110110xxxxx001101111xxxxx : xlate[255:0]="FNANDS"; | |
12492 | 32'b10xxxxx110110xxxxx001101100xxxxx : xlate[255:0]="FXOR"; | |
12493 | 32'b10xxxxx110110xxxxx001101101xxxxx : xlate[255:0]="FXORS"; | |
12494 | 32'b10xxxxx110110xxxxx001110010xxxxx : xlate[255:0]="FXNOR"; | |
12495 | 32'b10xxxxx110110xxxxx001110011xxxxx : xlate[255:0]="FXNORS"; | |
12496 | 32'b10xxxxx110110xxxxx001111010xxxxx : xlate[255:0]="FORNOT1"; | |
12497 | 32'b10xxxxx110110xxxxx001111011xxxxx : xlate[255:0]="FORNOT1S"; | |
12498 | 32'b10xxxxx110110xxxxx001110110xxxxx : xlate[255:0]="FORNOT2"; | |
12499 | 32'b10xxxxx110110xxxxx001110111xxxxx : xlate[255:0]="FORNOT2S"; | |
12500 | 32'b10xxxxx110110xxxxx001101000xxxxx : xlate[255:0]="FANDNOT1"; | |
12501 | 32'b10xxxxx110110xxxxx001101001xxxxx : xlate[255:0]="FANDNOT1S"; | |
12502 | 32'b10xxxxx110110xxxxx001100100xxxxx : xlate[255:0]="FANDNOT2"; | |
12503 | 32'b10xxxxx110110xxxxx001100101xxxxx : xlate[255:0]="FANDNOT2S"; | |
12504 | 32'b10xxxxx110110xxxxx000101000xxxxx : xlate[255:0]="FCMPGT16"; | |
12505 | 32'b10xxxxx110110xxxxx000101100xxxxx : xlate[255:0]="FCMPGT32"; | |
12506 | 32'b10xxxxx110110xxxxx000100000xxxxx : xlate[255:0]="FCMPLE16"; | |
12507 | 32'b10xxxxx110110xxxxx000100100xxxxx : xlate[255:0]="FCMPLE32"; | |
12508 | 32'b10xxxxx110110xxxxx000100010xxxxx : xlate[255:0]="FCMPNE16"; | |
12509 | 32'b10xxxxx110110xxxxx000100110xxxxx : xlate[255:0]="FCMPNE32"; | |
12510 | 32'b10xxxxx110110xxxxx000101010xxxxx : xlate[255:0]="FCMPEQ16"; | |
12511 | 32'b10xxxxx110110xxxxx000101110xxxxx : xlate[255:0]="FCMPEQ32"; | |
12512 | 32'b10xxxxx110110xxxxx000111110xxxxx : xlate[255:0]="PDIST"; | |
12513 | 32'b10xxxxx110110xxxxx000000000xxxxx : xlate[255:0]="EDGE8"; | |
12514 | 32'b10xxxxx110110xxxxx000000001xxxxx : xlate[255:0]="EDGE8N"; | |
12515 | 32'b10xxxxx110110xxxxx000000010xxxxx : xlate[255:0]="EDGE8L"; | |
12516 | 32'b10xxxxx110110xxxxx000000011xxxxx : xlate[255:0]="EDGE8LN"; | |
12517 | 32'b10xxxxx110110xxxxx000000100xxxxx : xlate[255:0]="EDGE16"; | |
12518 | 32'b10xxxxx110110xxxxx000000101xxxxx : xlate[255:0]="EDGE16N"; | |
12519 | 32'b10xxxxx110110xxxxx000000110xxxxx : xlate[255:0]="EDGE16L"; | |
12520 | 32'b10xxxxx110110xxxxx000000111xxxxx : xlate[255:0]="EDGE16LN"; | |
12521 | 32'b10xxxxx110110xxxxx000001000xxxxx : xlate[255:0]="EDGE32"; | |
12522 | 32'b10xxxxx110110xxxxx000001001xxxxx : xlate[255:0]="EDGE32N"; | |
12523 | 32'b10xxxxx110110xxxxx000001010xxxxx : xlate[255:0]="EDGE32L"; | |
12524 | 32'b10xxxxx110110xxxxx000001011xxxxx : xlate[255:0]="EDGE32LN"; | |
12525 | 32'b10xxxxx110110xxxxx000010000xxxxx : xlate[255:0]="ARRAY8"; | |
12526 | 32'b10xxxxx110110xxxxx000010010xxxxx : xlate[255:0]="ARRAY16"; | |
12527 | 32'b10xxxxx110110xxxxx000010100xxxxx : xlate[255:0]="ARRAY32"; | |
12528 | 32'b10xxxxx110110xxxxx010000001xxxxx : xlate[255:0]="SIAM"; | |
12529 | default : xlate[255:0]="unknown"; | |
12530 | endcase | |
12531 | end | |
12532 | endfunction // xlate | |
12533 | ||
12534 | ||
12535 | `endif | |
12536 | ||
12537 | endmodule | |
12538 | ||
12539 | `endif | |
12540 | ||
12541 | ||
12542 | `ifdef CORE_5 | |
12543 | ||
12544 | module 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 | ||
12721 | integer i; | |
12722 | integer start_dmiss0; | |
12723 | integer start_dmiss1; | |
12724 | integer start_dmiss2; | |
12725 | integer start_dmiss3; | |
12726 | integer start_dmiss4; | |
12727 | integer start_dmiss5; | |
12728 | integer start_dmiss6; | |
12729 | integer start_dmiss7; | |
12730 | integer number_dmiss; | |
12731 | integer start_imiss0; | |
12732 | integer start_imiss1; | |
12733 | integer start_imiss2; | |
12734 | integer start_imiss3; | |
12735 | integer start_imiss4; | |
12736 | integer start_imiss5; | |
12737 | integer start_imiss6; | |
12738 | integer start_imiss7; | |
12739 | integer active_imiss0; | |
12740 | integer active_imiss1; | |
12741 | integer active_imiss2; | |
12742 | integer active_imiss3; | |
12743 | integer active_imiss4; | |
12744 | integer active_imiss5; | |
12745 | integer active_imiss6; | |
12746 | integer active_imiss7; | |
12747 | integer first_imiss0; | |
12748 | integer first_imiss1; | |
12749 | integer first_imiss2; | |
12750 | integer first_imiss3; | |
12751 | integer first_imiss4; | |
12752 | integer first_imiss5; | |
12753 | integer first_imiss6; | |
12754 | integer first_imiss7; | |
12755 | integer number_imiss; | |
12756 | integer clock; | |
12757 | integer sum_dmiss_latency; | |
12758 | integer sum_imiss_latency; | |
12759 | reg spec_dmiss; | |
12760 | integer dmiss_cnt; | |
12761 | integer imiss_cnt; | |
12762 | reg pcx_req; | |
12763 | integer l15dmiss_cnt; | |
12764 | integer l15imiss_cnt; | |
12765 | ||
12766 | ||
12767 | initial 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 | ||
12823 | end //} | |
12824 | ||
12825 | wire [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 | ||
12834 | wire [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}; | |
12842 | wire [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 | |
12857 | wire [63:0] ctxt_z_tsb_cfg0_reg [7:0]; // 1 per thread | |
12858 | wire [63:0] ctxt_z_tsb_cfg1_reg [7:0]; | |
12859 | wire [63:0] ctxt_z_tsb_cfg2_reg [7:0]; | |
12860 | wire [63:0] ctxt_z_tsb_cfg3_reg [7:0]; | |
12861 | wire [63:0] ctxt_nz_tsb_cfg0_reg [7:0]; | |
12862 | wire [63:0] ctxt_nz_tsb_cfg1_reg [7:0]; | |
12863 | wire [63:0] ctxt_nz_tsb_cfg2_reg [7:0]; | |
12864 | wire [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 | ||
12882 | wire [83:0] mmu_mra0_a0 = `SPC5.mmu.mra0.array.mem[0]; | |
12883 | wire [83:0] mmu_mra0_a8 = `SPC5.mmu.mra0.array.mem[8]; | |
12884 | wire [83:0] mmu_mra0_a16 = `SPC5.mmu.mra0.array.mem[16]; | |
12885 | wire [83:0] mmu_mra0_a24 = `SPC5.mmu.mra0.array.mem[24]; | |
12886 | wire [83:0] mmu_mra0_a1 = `SPC5.mmu.mra0.array.mem[1]; | |
12887 | wire [83:0] mmu_mra0_a9 = `SPC5.mmu.mra0.array.mem[9]; | |
12888 | wire [83:0] mmu_mra0_a17 = `SPC5.mmu.mra0.array.mem[17]; | |
12889 | wire [83:0] mmu_mra0_a25 = `SPC5.mmu.mra0.array.mem[25]; | |
12890 | wire [83:0] mmu_mra0_a2 = `SPC5.mmu.mra0.array.mem[2]; | |
12891 | wire [83:0] mmu_mra0_a10 = `SPC5.mmu.mra0.array.mem[10]; | |
12892 | wire [83:0] mmu_mra0_a18 = `SPC5.mmu.mra0.array.mem[18]; | |
12893 | wire [83:0] mmu_mra0_a26 = `SPC5.mmu.mra0.array.mem[26]; | |
12894 | wire [83:0] mmu_mra0_a3 = `SPC5.mmu.mra0.array.mem[3]; | |
12895 | wire [83:0] mmu_mra0_a11 = `SPC5.mmu.mra0.array.mem[11]; | |
12896 | wire [83:0] mmu_mra0_a19 = `SPC5.mmu.mra0.array.mem[19]; | |
12897 | wire [83:0] mmu_mra0_a27 = `SPC5.mmu.mra0.array.mem[27]; | |
12898 | wire [83:0] mmu_mra1_a0 = `SPC5.mmu.mra1.array.mem[0]; | |
12899 | wire [83:0] mmu_mra1_a8 = `SPC5.mmu.mra1.array.mem[8]; | |
12900 | wire [83:0] mmu_mra1_a16 = `SPC5.mmu.mra1.array.mem[16]; | |
12901 | wire [83:0] mmu_mra1_a24 = `SPC5.mmu.mra1.array.mem[24]; | |
12902 | wire [83:0] mmu_mra1_a1 = `SPC5.mmu.mra1.array.mem[1]; | |
12903 | wire [83:0] mmu_mra1_a9 = `SPC5.mmu.mra1.array.mem[9]; | |
12904 | wire [83:0] mmu_mra1_a17 = `SPC5.mmu.mra1.array.mem[17]; | |
12905 | wire [83:0] mmu_mra1_a25 = `SPC5.mmu.mra1.array.mem[25]; | |
12906 | wire [83:0] mmu_mra1_a2 = `SPC5.mmu.mra1.array.mem[2]; | |
12907 | wire [83:0] mmu_mra1_a10 = `SPC5.mmu.mra1.array.mem[10]; | |
12908 | wire [83:0] mmu_mra1_a18 = `SPC5.mmu.mra1.array.mem[18]; | |
12909 | wire [83:0] mmu_mra1_a26 = `SPC5.mmu.mra1.array.mem[26]; | |
12910 | wire [83:0] mmu_mra1_a3 = `SPC5.mmu.mra1.array.mem[3]; | |
12911 | wire [83:0] mmu_mra1_a11 = `SPC5.mmu.mra1.array.mem[11]; | |
12912 | wire [83:0] mmu_mra1_a19 = `SPC5.mmu.mra1.array.mem[19]; | |
12913 | wire [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. | |
12918 | assign 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 | }; | |
12925 | assign 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 | }; | |
12932 | assign 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 | }; | |
12939 | assign 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 | }; | |
12946 | assign 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 | }; | |
12953 | assign 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 | }; | |
12960 | assign 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 | }; | |
12967 | assign 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. | |
12977 | assign 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 | }; | |
12984 | assign 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 | }; | |
12991 | assign 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 | }; | |
12998 | assign 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 | }; | |
13005 | assign 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 | }; | |
13012 | assign 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 | }; | |
13019 | assign 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 | }; | |
13026 | assign 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. | |
13036 | assign 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 | }; | |
13043 | assign 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 | }; | |
13050 | assign 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 | }; | |
13057 | assign 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 | }; | |
13064 | assign 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 | }; | |
13071 | assign 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 | }; | |
13078 | assign 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 | }; | |
13085 | assign 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. | |
13095 | assign 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 | }; | |
13102 | assign 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 | }; | |
13109 | assign 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 | }; | |
13116 | assign 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 | }; | |
13123 | assign 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 | }; | |
13130 | assign 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 | }; | |
13137 | assign 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 | }; | |
13144 | assign 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. | |
13154 | assign 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 | }; | |
13161 | assign 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 | }; | |
13168 | assign 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 | }; | |
13175 | assign 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 | }; | |
13182 | assign 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 | }; | |
13189 | assign 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 | }; | |
13196 | assign 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 | }; | |
13203 | assign 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. | |
13213 | assign 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 | }; | |
13220 | assign 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 | }; | |
13227 | assign 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 | }; | |
13234 | assign 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 | }; | |
13241 | assign 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 | }; | |
13248 | assign 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 | }; | |
13255 | assign 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 | }; | |
13262 | assign 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. | |
13272 | assign 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 | }; | |
13279 | assign 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 | }; | |
13286 | assign 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 | }; | |
13293 | assign 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 | }; | |
13300 | assign 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 | }; | |
13307 | assign 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 | }; | |
13314 | assign 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 | }; | |
13321 | assign 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. | |
13331 | assign 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 | }; | |
13338 | assign 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 | }; | |
13345 | assign 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 | }; | |
13352 | assign 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 | }; | |
13359 | assign 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 | }; | |
13366 | assign 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 | }; | |
13373 | assign 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 | }; | |
13380 | assign 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 | |
13399 | wire [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) | |
13414 | wire [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 | ||
13427 | wire [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 | ||
13438 | reg tlb_bypass_m; | |
13439 | reg tlb_bypass_b; | |
13440 | reg tlb_rd_vld_m; | |
13441 | reg tlb_rd_vld_b; | |
13442 | reg lsu_tl_gt_0_b; | |
13443 | reg [7:0] dcc_asi_b; | |
13444 | reg asi_internal_w; | |
13445 | ||
13446 | always @ (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; | |
13467 | end // } | |
13468 | ||
13469 | // TL determines whether Nucleus or Primary | |
13470 | wire [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 | ||
13474 | wire [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 | ||
13500 | wire [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 | ||
13526 | wire 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 | ||
13530 | wire [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 | ||
13540 | wire [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 | ||
13552 | reg [71:0] tick_cmpr_0; | |
13553 | reg [71:0] stick_cmpr_0; | |
13554 | reg [71:0] hstick_cmpr_0; | |
13555 | reg [151:0] trap_entry_1_t0; | |
13556 | reg [151:0] trap_entry_2_t0; | |
13557 | reg [151:0] trap_entry_3_t0; | |
13558 | reg [151:0] trap_entry_4_t0; | |
13559 | reg [151:0] trap_entry_5_t0; | |
13560 | reg [151:0] trap_entry_6_t0; | |
13561 | ||
13562 | always @(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 | ||
13575 | end // } | |
13576 | reg [71:0] tick_cmpr_1; | |
13577 | reg [71:0] stick_cmpr_1; | |
13578 | reg [71:0] hstick_cmpr_1; | |
13579 | reg [151:0] trap_entry_1_t1; | |
13580 | reg [151:0] trap_entry_2_t1; | |
13581 | reg [151:0] trap_entry_3_t1; | |
13582 | reg [151:0] trap_entry_4_t1; | |
13583 | reg [151:0] trap_entry_5_t1; | |
13584 | reg [151:0] trap_entry_6_t1; | |
13585 | ||
13586 | always @(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 | ||
13599 | end // } | |
13600 | reg [71:0] tick_cmpr_2; | |
13601 | reg [71:0] stick_cmpr_2; | |
13602 | reg [71:0] hstick_cmpr_2; | |
13603 | reg [151:0] trap_entry_1_t2; | |
13604 | reg [151:0] trap_entry_2_t2; | |
13605 | reg [151:0] trap_entry_3_t2; | |
13606 | reg [151:0] trap_entry_4_t2; | |
13607 | reg [151:0] trap_entry_5_t2; | |
13608 | reg [151:0] trap_entry_6_t2; | |
13609 | ||
13610 | always @(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 | ||
13623 | end // } | |
13624 | reg [71:0] tick_cmpr_3; | |
13625 | reg [71:0] stick_cmpr_3; | |
13626 | reg [71:0] hstick_cmpr_3; | |
13627 | reg [151:0] trap_entry_1_t3; | |
13628 | reg [151:0] trap_entry_2_t3; | |
13629 | reg [151:0] trap_entry_3_t3; | |
13630 | reg [151:0] trap_entry_4_t3; | |
13631 | reg [151:0] trap_entry_5_t3; | |
13632 | reg [151:0] trap_entry_6_t3; | |
13633 | ||
13634 | always @(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 | ||
13647 | end // } | |
13648 | reg [71:0] tick_cmpr_4; | |
13649 | reg [71:0] stick_cmpr_4; | |
13650 | reg [71:0] hstick_cmpr_4; | |
13651 | reg [151:0] trap_entry_1_t4; | |
13652 | reg [151:0] trap_entry_2_t4; | |
13653 | reg [151:0] trap_entry_3_t4; | |
13654 | reg [151:0] trap_entry_4_t4; | |
13655 | reg [151:0] trap_entry_5_t4; | |
13656 | reg [151:0] trap_entry_6_t4; | |
13657 | ||
13658 | always @(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 | ||
13671 | end // } | |
13672 | reg [71:0] tick_cmpr_5; | |
13673 | reg [71:0] stick_cmpr_5; | |
13674 | reg [71:0] hstick_cmpr_5; | |
13675 | reg [151:0] trap_entry_1_t5; | |
13676 | reg [151:0] trap_entry_2_t5; | |
13677 | reg [151:0] trap_entry_3_t5; | |
13678 | reg [151:0] trap_entry_4_t5; | |
13679 | reg [151:0] trap_entry_5_t5; | |
13680 | reg [151:0] trap_entry_6_t5; | |
13681 | ||
13682 | always @(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 | ||
13695 | end // } | |
13696 | reg [71:0] tick_cmpr_6; | |
13697 | reg [71:0] stick_cmpr_6; | |
13698 | reg [71:0] hstick_cmpr_6; | |
13699 | reg [151:0] trap_entry_1_t6; | |
13700 | reg [151:0] trap_entry_2_t6; | |
13701 | reg [151:0] trap_entry_3_t6; | |
13702 | reg [151:0] trap_entry_4_t6; | |
13703 | reg [151:0] trap_entry_5_t6; | |
13704 | reg [151:0] trap_entry_6_t6; | |
13705 | ||
13706 | always @(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 | ||
13719 | end // } | |
13720 | reg [71:0] tick_cmpr_7; | |
13721 | reg [71:0] stick_cmpr_7; | |
13722 | reg [71:0] hstick_cmpr_7; | |
13723 | reg [151:0] trap_entry_1_t7; | |
13724 | reg [151:0] trap_entry_2_t7; | |
13725 | reg [151:0] trap_entry_3_t7; | |
13726 | reg [151:0] trap_entry_4_t7; | |
13727 | reg [151:0] trap_entry_5_t7; | |
13728 | reg [151:0] trap_entry_6_t7; | |
13729 | ||
13730 | always @(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 | ||
13743 | end // } | |
13744 | ||
13745 | //------------------------------------ | |
13746 | // ASI & Trap State machines | |
13747 | always @(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 | ||
13836 | end // } | |
13837 | ||
13838 | ||
13839 | always @(posedge `BENCH_SPC5_GCLK) begin | |
13840 | ||
13841 | // debug code for TPCC analysis | |
13842 | `ifdef TPCC | |
13843 | if (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 | |
13853 | end | |
13854 | ||
13855 | pcx_req <= |`SPC5.spc_pcx_req_pq[8:0]; | |
13856 | ||
13857 | if (`SPC5.ifu_l15_valid==1) begin | |
13858 | imiss_cnt=imiss_cnt+1; | |
13859 | $display("imiss cnt is %0d",imiss_cnt); | |
13860 | end | |
13861 | if (spec_dmiss==1 && `SPC5.lsu_l15_cancel==0) begin | |
13862 | dmiss_cnt=dmiss_cnt+1; | |
13863 | $display("dmiss cnt is %0d",dmiss_cnt); | |
13864 | ||
13865 | end | |
13866 | spec_dmiss <= `SPC5.lsu_l15_valid & `SPC5.lsu_l15_load; | |
13867 | ||
13868 | clock = clock+1; | |
13869 | ||
13870 | // keep track of imiss latencies | |
13871 | if (`SPC5.ftu_agc_thr0_cmiss_c==1) begin | |
13872 | start_imiss0=clock; | |
13873 | active_imiss0=1; | |
13874 | end | |
13875 | if (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; | |
13881 | end | |
13882 | if (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; | |
13884 | end | |
13885 | if (`SPC5.ftu_agc_thr1_cmiss_c==1) begin | |
13886 | start_imiss1=clock; | |
13887 | active_imiss1=1; | |
13888 | end | |
13889 | if (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; | |
13895 | end | |
13896 | if (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; | |
13898 | end | |
13899 | if (`SPC5.ftu_agc_thr2_cmiss_c==1) begin | |
13900 | start_imiss2=clock; | |
13901 | active_imiss2=1; | |
13902 | end | |
13903 | if (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; | |
13909 | end | |
13910 | if (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; | |
13912 | end | |
13913 | if (`SPC5.ftu_agc_thr3_cmiss_c==1) begin | |
13914 | start_imiss3=clock; | |
13915 | active_imiss3=1; | |
13916 | end | |
13917 | if (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; | |
13923 | end | |
13924 | if (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; | |
13926 | end | |
13927 | if (`SPC5.ftu_agc_thr4_cmiss_c==1) begin | |
13928 | start_imiss4=clock; | |
13929 | active_imiss4=1; | |
13930 | end | |
13931 | if (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; | |
13937 | end | |
13938 | if (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; | |
13940 | end | |
13941 | if (`SPC5.ftu_agc_thr5_cmiss_c==1) begin | |
13942 | start_imiss5=clock; | |
13943 | active_imiss5=1; | |
13944 | end | |
13945 | if (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; | |
13951 | end | |
13952 | if (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; | |
13954 | end | |
13955 | if (`SPC5.ftu_agc_thr6_cmiss_c==1) begin | |
13956 | start_imiss6=clock; | |
13957 | active_imiss6=1; | |
13958 | end | |
13959 | if (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; | |
13965 | end | |
13966 | if (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; | |
13968 | end | |
13969 | if (`SPC5.ftu_agc_thr7_cmiss_c==1) begin | |
13970 | start_imiss7=clock; | |
13971 | active_imiss7=1; | |
13972 | end | |
13973 | if (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; | |
13979 | end | |
13980 | if (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; | |
13982 | end | |
13983 | ||
13984 | if (`SPC5.pku.swl0.set_lsu_sync_wait==1) begin | |
13985 | start_dmiss0=clock; | |
13986 | end | |
13987 | if (`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); | |
13991 | end | |
13992 | if (`SPC5.pku.swl1.set_lsu_sync_wait==1) begin | |
13993 | start_dmiss1=clock; | |
13994 | end | |
13995 | if (`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); | |
13999 | end | |
14000 | if (`SPC5.pku.swl2.set_lsu_sync_wait==1) begin | |
14001 | start_dmiss2=clock; | |
14002 | end | |
14003 | if (`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); | |
14007 | end | |
14008 | if (`SPC5.pku.swl3.set_lsu_sync_wait==1) begin | |
14009 | start_dmiss3=clock; | |
14010 | end | |
14011 | if (`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); | |
14015 | end | |
14016 | if (`SPC5.pku.swl4.set_lsu_sync_wait==1) begin | |
14017 | start_dmiss4=clock; | |
14018 | end | |
14019 | if (`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); | |
14023 | end | |
14024 | if (`SPC5.pku.swl5.set_lsu_sync_wait==1) begin | |
14025 | start_dmiss5=clock; | |
14026 | end | |
14027 | if (`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); | |
14031 | end | |
14032 | if (`SPC5.pku.swl6.set_lsu_sync_wait==1) begin | |
14033 | start_dmiss6=clock; | |
14034 | end | |
14035 | if (`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); | |
14039 | end | |
14040 | if (`SPC5.pku.swl7.set_lsu_sync_wait==1) begin | |
14041 | start_dmiss7=clock; | |
14042 | end | |
14043 | if (`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); | |
14047 | end | |
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 | ||
14238 | end // 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 | |
14243 | assign return0 = `SPC5.exu0.rml.return_w & | |
14244 | `SPC5.exu0.rml.inst_vld_w; | |
14245 | assign return1 = `SPC5.exu1.rml.return_w & | |
14246 | `SPC5.exu1.rml.inst_vld_w; | |
14247 | assign 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 | |
14261 | assign ex0_tid_e = `SPC5.exu0.ect_tid_lth_e[1:0]; | |
14262 | assign ex0_valid_e = `SPC5.dec.dec_valid_e[0] & ~fgu0_e & ~load0_e & | |
14263 | ~retry0_e & ~done0_e; | |
14264 | assign ex1_tid_e = `SPC5.exu1.ect_tid_lth_e[1:0]; | |
14265 | assign ex1_valid_e = `SPC5.dec.dec_valid_e[1] & ~fgu1_e & ~load1_e & | |
14266 | ~retry1_e & ~done1_e; | |
14267 | ||
14268 | assign ex_asr_valid = `SPC5.lsu.dcc.asi_store_m & `SPC5.lsu.dcc.asi_sync_m ; | |
14269 | ||
14270 | assign 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 | |
14283 | assign 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 | |
14294 | wire [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... | |
14305 | reg [7:0] block_store_w; | |
14306 | always @(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]; | |
14309 | end | |
14310 | ||
14311 | wire [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 | ||
14323 | assign 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 | ||
14337 | assign 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 | |
14345 | assign 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 | |
14358 | wire 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 | ||
14362 | assign fg_cond_fb = fg_cond_fb_pre_err & ~fgu_err_fb; | |
14363 | ||
14364 | // Idiv/Fdiv signals | |
14365 | ||
14366 | assign fgu_idiv_valid = fg_div_valid & div_idest; | |
14367 | ||
14368 | ||
14369 | assign fgu_fdiv_valid = fg_fdiv_valid_fw & div_fdest; | |
14370 | ||
14371 | ||
14372 | // Lsu signals needed to check lsu results | |
14373 | ||
14374 | assign lsu_valid = lsu_check | lsu_data_w; | |
14375 | ||
14376 | assign fg_div_valid = `SPC5.fgu_divide_completion & ~div_special_cancel_f4; | |
14377 | ||
14378 | // State machine asserts lsu_check for LD hit/miss | |
14379 | always @(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 // } | |
14425 | end | |
14426 | ||
14427 | ||
14428 | assign lsu_tid = `SPC5.lsu.dcc.ld_tid_b[2:0]; | |
14429 | // Don't assert LSU_complete in case of dtlb or irf errors | |
14430 | ||
14431 | assign 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 | ||
14436 | assign 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 | ||
14445 | assign lsu_tid_dec_b[0] = `SPC5.lsu.dcc.ld_tid_b[2:0] == 3'd0; | |
14446 | assign lsu_tid_dec_b[1] = `SPC5.lsu.dcc.ld_tid_b[2:0] == 3'd1; | |
14447 | assign lsu_tid_dec_b[2] = `SPC5.lsu.dcc.ld_tid_b[2:0] == 3'd2; | |
14448 | assign lsu_tid_dec_b[3] = `SPC5.lsu.dcc.ld_tid_b[2:0] == 3'd3; | |
14449 | assign lsu_tid_dec_b[4] = `SPC5.lsu.dcc.ld_tid_b[2:0] == 3'd4; | |
14450 | assign lsu_tid_dec_b[5] = `SPC5.lsu.dcc.ld_tid_b[2:0] == 3'd5; | |
14451 | assign lsu_tid_dec_b[6] = `SPC5.lsu.dcc.ld_tid_b[2:0] == 3'd6; | |
14452 | assign lsu_tid_dec_b[7] = `SPC5.lsu.dcc.ld_tid_b[2:0] == 3'd7; | |
14453 | ||
14454 | assign 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); | |
14456 | assign dec_flush_lb = `SPC5.dec.dec_flush_lb | `SPC5.tlu_flush_lsu_b; | |
14457 | ||
14458 | ||
14459 | // LSU interface to CCX stub | |
14460 | ||
14461 | assign exu_lsu_valid = `SPC5.dec.del.lsu_valid_e; | |
14462 | assign exu_lsu_addr[47:0] = `SPC5.exu_lsu_address_e[47:0]; | |
14463 | assign exu_lsu_tid[2:0] = lsu_tid_e[2:0]; | |
14464 | assign exu_lsu_regid[4:0] = `SPC5.dec.dec_lsu_rd_e[4:0]; | |
14465 | assign exu_lsu_data[63:0] = `SPC5.exu_lsu_store_data_e[63:0]; | |
14466 | assign 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]); | |
14470 | assign 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 | ||
14517 | initial 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; | |
14526 | end | |
14527 | ||
14528 | always @(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 | ||
14578 | end //} | |
14579 | ||
14580 | /////////////////////////////////////////////////////////////////////////////// | |
14581 | // Functions | |
14582 | /////////////////////////////////////////////////////////////////////////////// | |
14583 | function [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 | |
14598 | endfunction | |
14599 | ||
14600 | function [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 | |
14615 | endfunction | |
14616 | ||
14617 | //--------------------- | |
14618 | ||
14619 | function [255:0] xlate; | |
14620 | input [31:0] inst; | |
14621 | ||
14622 | begin | |
14623 | casex(inst[31:0]) | |
14624 | 32'b10xxxxx110100xxxxx001000011xxxxx : xlate[255:0]="FADDq"; | |
14625 | 32'b10xxxxx110100xxxxx001000111xxxxx : xlate[255:0]="FSUBq"; | |
14626 | 32'b10000xx110101xxxxx001010011xxxxx : xlate[255:0]="FCMPq"; | |
14627 | 32'b10000xx110101xxxxx001010111xxxxx : xlate[255:0]="FCMPEq"; | |
14628 | 32'b10xxxxx110100xxxxx011001101xxxxx : xlate[255:0]="FsTOq"; | |
14629 | 32'b10xxxxx110100xxxxx011001110xxxxx : xlate[255:0]="FdTOq"; | |
14630 | 32'b10xxxxx110100xxxxx010001100xxxxx : xlate[255:0]="FxTOq"; | |
14631 | 32'b10xxxxx110100xxxxx011001100xxxxx : xlate[255:0]="FiTOq"; | |
14632 | 32'b10xxxxx110100xxxxx000000011xxxxx : xlate[255:0]="FMOVq"; | |
14633 | 32'b10xxxxx110100xxxxx000000111xxxxx : xlate[255:0]="FNEGq"; | |
14634 | 32'b10xxxxx110100xxxxx000001011xxxxx : xlate[255:0]="FABSq"; | |
14635 | 32'b10xxxxx110100xxxxx001001011xxxxx : xlate[255:0]="FMULq"; | |
14636 | 32'b10xxxxx110100xxxxx001101110xxxxx : xlate[255:0]="FdMULq"; | |
14637 | 32'b10xxxxx110100xxxxx001001111xxxxx : xlate[255:0]="FDIVq"; | |
14638 | 32'b10xxxxx110100xxxxx000101011xxxxx : xlate[255:0]="FSQRTq"; | |
14639 | 32'b10xxxxx1101010xxxx0xx100111xxxxx : xlate[255:0]="FMOVrQa"; | |
14640 | 32'b10xxxxx1101010xxxx0x1x00111xxxxx : xlate[255:0]="FMOVrQb"; | |
14641 | 32'b10xxxxx110100xxxxx011010011xxxxx : xlate[255:0]="FqTOi"; | |
14642 | 32'b10xxxxx110100xxxxx010000011xxxxx : xlate[255:0]="FqTOx"; | |
14643 | 32'b10xxxxx110100xxxxx011000111xxxxx : xlate[255:0]="FqTOs"; | |
14644 | 32'b10xxxxx110100xxxxx011001011xxxxx : xlate[255:0]="FqTOd"; | |
14645 | 32'b11xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQF"; | |
14646 | 32'b11xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFi"; | |
14647 | 32'b11xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQFA"; | |
14648 | 32'b11xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFAi"; | |
14649 | 32'b11xxxxx100110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFi"; | |
14650 | 32'b11xxxxx100110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQF"; | |
14651 | 32'b11xxxxx110110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQFA"; | |
14652 | 32'b11xxxxx110110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFAi"; | |
14653 | 32'b10xxxxx1101010xxxxxxx000011xxxxx : xlate[255:0]="FMOVQcc"; | |
14654 | 32'b10xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADD"; | |
14655 | 32'b10xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDcc"; | |
14656 | 32'b10xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDC"; | |
14657 | 32'b10xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDCcc"; | |
14658 | 32'b10xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDi"; | |
14659 | 32'b10xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDcci"; | |
14660 | 32'b10xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCi"; | |
14661 | 32'b10xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCcci"; | |
14662 | 32'b00x0xx1011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr1"; | |
14663 | 32'b00x0x1x011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr2"; | |
14664 | 32'b00xx000110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfccA"; | |
14665 | 32'b00xx1xx110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc1"; | |
14666 | 32'b00xxx1x110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc2"; | |
14667 | 32'b00xxxx1110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc3"; | |
14668 | 32'b00xx000101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfccA"; | |
14669 | 32'b00xx1xx101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc1"; | |
14670 | 32'b00xxx1x101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc2"; | |
14671 | 32'b00xxxx1101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc3"; | |
14672 | 32'b00xx000010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BiccA"; | |
14673 | 32'b00xx1xx010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc1"; | |
14674 | 32'b00xxx1x010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc2"; | |
14675 | 32'b00xxxx1010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc3"; | |
14676 | 32'b00xx000001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPccA"; | |
14677 | 32'b00xx1xx001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc1"; | |
14678 | 32'b00xxx1x001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc2"; | |
14679 | 32'b00xxxx1001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc3"; | |
14680 | 32'b01xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="CALL"; | |
14681 | 32'b11xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASA"; | |
14682 | 32'b11xxxxx111110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASXA"; | |
14683 | 32'b11xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASAi"; | |
14684 | 32'b11xxxxx111110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASXAi"; | |
14685 | 32'b10xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIV"; | |
14686 | 32'b10xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIV"; | |
14687 | 32'b10xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVcc"; | |
14688 | 32'b10xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVcc"; | |
14689 | 32'b10xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVi"; | |
14690 | 32'b10xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVi"; | |
14691 | 32'b10xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVcci"; | |
14692 | 32'b10xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVcci"; | |
14693 | 32'b1000000111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="DONE"; | |
14694 | 32'b1000001111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RETRY"; | |
14695 | 32'b10xxxxx110100xxxxx001000001xxxxx : xlate[255:0]="FADDs"; | |
14696 | 32'b10xxxxx110100xxxxx001000010xxxxx : xlate[255:0]="FADDd"; | |
14697 | 32'b10xxxxx110100xxxxx001000101xxxxx : xlate[255:0]="FSUBs"; | |
14698 | 32'b10xxxxx110100xxxxx001000110xxxxx : xlate[255:0]="FSUBd"; | |
14699 | 32'b10000xx110101xxxxx001010001xxxxx : xlate[255:0]="FCMPs"; | |
14700 | 32'b10000xx110101xxxxx001010010xxxxx : xlate[255:0]="FCMPd"; | |
14701 | 32'b10000xx110101xxxxx001010101xxxxx : xlate[255:0]="FCMPEs"; | |
14702 | 32'b10000xx110101xxxxx001010110xxxxx : xlate[255:0]="FCMPEd"; | |
14703 | 32'b10xxxxx110100xxxxx010000001xxxxx : xlate[255:0]="FsTOx"; | |
14704 | 32'b10xxxxx110100xxxxx010000010xxxxx : xlate[255:0]="FdTOx"; | |
14705 | 32'b10xxxxx110100xxxxx011010001xxxxx : xlate[255:0]="FsTOi"; | |
14706 | 32'b10xxxxx110100xxxxx011010010xxxxx : xlate[255:0]="FdTOi"; | |
14707 | 32'b10xxxxx110100xxxxx011001001xxxxx : xlate[255:0]="FsTOd"; | |
14708 | 32'b10xxxxx110100xxxxx011000110xxxxx : xlate[255:0]="FdTOs"; | |
14709 | 32'b10xxxxx110100xxxxx010000100xxxxx : xlate[255:0]="FxTOs"; | |
14710 | 32'b10xxxxx110100xxxxx010001000xxxxx : xlate[255:0]="FxTOd"; | |
14711 | 32'b10xxxxx110100xxxxx011000100xxxxx : xlate[255:0]="FiTOs"; | |
14712 | 32'b10xxxxx110100xxxxx011001000xxxxx : xlate[255:0]="FiTOd"; | |
14713 | 32'b10xxxxx110100xxxxx000000001xxxxx : xlate[255:0]="FMOVs"; | |
14714 | 32'b10xxxxx110100xxxxx000000010xxxxx : xlate[255:0]="FMOVd"; | |
14715 | 32'b10xxxxx110100xxxxx000000101xxxxx : xlate[255:0]="FNEGs"; | |
14716 | 32'b10xxxxx110100xxxxx000000110xxxxx : xlate[255:0]="FNEGd"; | |
14717 | 32'b10xxxxx110100xxxxx000001001xxxxx : xlate[255:0]="FABSs"; | |
14718 | 32'b10xxxxx110100xxxxx000001010xxxxx : xlate[255:0]="FABSd"; | |
14719 | 32'b10xxxxx110100xxxxx001001001xxxxx : xlate[255:0]="FMULs"; | |
14720 | 32'b10xxxxx110100xxxxx001001010xxxxx : xlate[255:0]="FMULd"; | |
14721 | 32'b10xxxxx110100xxxxx001101001xxxxx : xlate[255:0]="FsMULd"; | |
14722 | 32'b10xxxxx110100xxxxx001001101xxxxx : xlate[255:0]="FDIVs"; | |
14723 | 32'b10xxxxx110100xxxxx001001110xxxxx : xlate[255:0]="FDIVd"; | |
14724 | 32'b10xxxxx110100xxxxx000101001xxxxx : xlate[255:0]="FSQRTs"; | |
14725 | 32'b10xxxxx110100xxxxx000101010xxxxx : xlate[255:0]="FSQRTd"; | |
14726 | 32'b10xxxxx111011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSH"; | |
14727 | 32'b10xxxxx111011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="FLUSHi"; | |
14728 | 32'b10xxxxx101011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSHw"; | |
14729 | 32'b10xxxxx111000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="JMPL"; | |
14730 | 32'b10xxxxx111000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="JMPLi"; | |
14731 | 32'b11xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDF"; | |
14732 | 32'b11xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDF"; | |
14733 | 32'b1100000100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFSR"; | |
14734 | 32'b1100001100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXFSR"; | |
14735 | 32'b11xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFi"; | |
14736 | 32'b11xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFi"; | |
14737 | 32'b1100000100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFSRi"; | |
14738 | 32'b1100001100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXFSRi"; | |
14739 | 32'b11xxxxx110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFA"; | |
14740 | 32'b11xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDFA"; | |
14741 | 32'b11xxxxx110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFAi"; | |
14742 | 32'b11xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFAi"; | |
14743 | 32'b11xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSB"; | |
14744 | 32'b11xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSH"; | |
14745 | 32'b11xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSW"; | |
14746 | 32'b11xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUB"; | |
14747 | 32'b11xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUH"; | |
14748 | 32'b11xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUW"; | |
14749 | 32'b11xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDX"; | |
14750 | 32'b11xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDD"; | |
14751 | 32'b11xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBi"; | |
14752 | 32'b11xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHi"; | |
14753 | 32'b11xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWi"; | |
14754 | 32'b11xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBi"; | |
14755 | 32'b11xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHi"; | |
14756 | 32'b11xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWi"; | |
14757 | 32'b11xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXi"; | |
14758 | 32'b11xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDi"; | |
14759 | 32'b11xxxxx011001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSBA"; | |
14760 | 32'b11xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSHA"; | |
14761 | 32'b11xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSWA"; | |
14762 | 32'b11xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUBA"; | |
14763 | 32'b11xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUHA"; | |
14764 | 32'b11xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUWA"; | |
14765 | 32'b11xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXA"; | |
14766 | 32'b11xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDA"; | |
14767 | 32'b11xxxxx011001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBAi"; | |
14768 | 32'b11xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHAi"; | |
14769 | 32'b11xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWAi"; | |
14770 | 32'b11xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBAi"; | |
14771 | 32'b11xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHAi"; | |
14772 | 32'b11xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWAi"; | |
14773 | 32'b11xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXAi"; | |
14774 | 32'b11xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDAi"; | |
14775 | 32'b11xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUB"; | |
14776 | 32'b11xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBi"; | |
14777 | 32'b11xxxxx011101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUBA"; | |
14778 | 32'b11xxxxx011101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBAi"; | |
14779 | 32'b10xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="AND"; | |
14780 | 32'b10xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDcc"; | |
14781 | 32'b10xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDN"; | |
14782 | 32'b10xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDNcc"; | |
14783 | 32'b10xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="OR"; | |
14784 | 32'b10xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORcc"; | |
14785 | 32'b10xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORN"; | |
14786 | 32'b10xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORNcc"; | |
14787 | 32'b10xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XOR"; | |
14788 | 32'b10xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XORcc"; | |
14789 | 32'b10xxxxx000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNOR"; | |
14790 | 32'b10xxxxx010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNORcc"; | |
14791 | 32'b10xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDi"; | |
14792 | 32'b10xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDcci"; | |
14793 | 32'b10xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNi"; | |
14794 | 32'b10xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNcci"; | |
14795 | 32'b10xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORi"; | |
14796 | 32'b10xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORcci"; | |
14797 | 32'b10xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNi"; | |
14798 | 32'b10xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNcci"; | |
14799 | 32'b10xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORi"; | |
14800 | 32'b10xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORcci"; | |
14801 | 32'b10xxxxx000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORi"; | |
14802 | 32'b10xxxxx010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORcci"; | |
14803 | 32'b1000000101000011111xxxxxxxxxxxxx : xlate[255:0]="MEMBAR"; | |
14804 | 32'b1000000101000011110xxxxxxxxxxxxx : xlate[255:0]="STBAR"; | |
14805 | 32'b10xxxxx101000000000xxxxxxxxxxxxx : xlate[255:0]="RDY"; | |
14806 | 32'b10xxxxx101000000100xxxxxxxxxxxxx : xlate[255:0]="RDCCR"; | |
14807 | 32'b10xxxxx101000000110xxxxxxxxxxxxx : xlate[255:0]="RDASI"; | |
14808 | 32'b10xxxxx101000001000xxxxxxxxxxxxx : xlate[255:0]="RDTICK"; | |
14809 | 32'b10xxxxx101000001010xxxxxxxxxxxxx : xlate[255:0]="RDPC"; | |
14810 | 32'b10xxxxx101000001100xxxxxxxxxxxxx : xlate[255:0]="RDFPRS"; | |
14811 | 32'b10xxxxx101000100110xxxxxxxxxxxxx : xlate[255:0]="RDGSR"; | |
14812 | 32'b10xxxxx101000100000xxxxxxxxxxxxx : xlate[255:0]="RDPCR"; | |
14813 | 32'b10xxxxx101000100010xxxxxxxxxxxxx : xlate[255:0]="RDPIC"; | |
14814 | 32'b10xxxxx1101010xxxx0xx000001xxxxx : xlate[255:0]="FMOVSfcc"; | |
14815 | 32'b10xxxxx1101010xxxx1xx000001xxxxx : xlate[255:0]="FMOVSxcc"; | |
14816 | 32'b10xxxxx1101010xxxx0xx000010xxxxx : xlate[255:0]="FMOVDfcc"; | |
14817 | 32'b10xxxxx1101010xxxx1xx000010xxxxx : xlate[255:0]="FMOVDxcc"; | |
14818 | 32'b10xxxxx110101xxxxx0xx100101xxxxx : xlate[255:0]="FMOVrS1"; | |
14819 | 32'b10xxxxx110101xxxxx0x1x00101xxxxx : xlate[255:0]="FMOVrS2"; | |
14820 | 32'b10xxxxx110101xxxxx0xx100110xxxxx : xlate[255:0]="FMOVrD1"; | |
14821 | 32'b10xxxxx110101xxxxx0x1x00110xxxxx : xlate[255:0]="FMOVrD2"; | |
14822 | 32'b10xxxxx1011001xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVxcc"; | |
14823 | 32'b10xxxxx1011001xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVxcci"; | |
14824 | 32'b10xxxxx1011000xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVfcc"; | |
14825 | 32'b10xxxxx1011000xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVfcci"; | |
14826 | 32'b10xxxxx101111xxxxx0xx1xxxxxxxxxx : xlate[255:0]="MOVR1"; | |
14827 | 32'b10xxxxx101111xxxxx0x1xxxxxxxxxxx : xlate[255:0]="MOVR2"; | |
14828 | 32'b10xxxxx101111xxxxx1xx1xxxxxxxxxx : xlate[255:0]="MOVRi1"; | |
14829 | 32'b10xxxxx101111xxxxx1x1xxxxxxxxxxx : xlate[255:0]="MOVRi2"; | |
14830 | 32'b10xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULX"; | |
14831 | 32'b10xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVX"; | |
14832 | 32'b10xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVX"; | |
14833 | 32'b10xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULXi"; | |
14834 | 32'b10xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVXi"; | |
14835 | 32'b10xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVXi"; | |
14836 | 32'b10xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMUL"; | |
14837 | 32'b10xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMUL"; | |
14838 | 32'b10xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMULcc"; | |
14839 | 32'b10xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMULcc"; | |
14840 | 32'b10xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULi"; | |
14841 | 32'b10xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULi"; | |
14842 | 32'b10xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULcci"; | |
14843 | 32'b10xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULcci"; | |
14844 | 32'b10xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULScc"; | |
14845 | 32'b10xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULScci"; | |
14846 | 32'b10xxxxx101110000000xxxxxxxxxxxxx : xlate[255:0]="POPC"; | |
14847 | 32'b10xxxxx101110000001xxxxxxxxxxxxx : xlate[255:0]="POPCi"; | |
14848 | 32'b11xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCH"; | |
14849 | 32'b11xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHi"; | |
14850 | 32'b11xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCHA"; | |
14851 | 32'b11xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHAi"; | |
14852 | 32'b10xxxxx101010xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDPR"; | |
14853 | 32'b10xxxxx101001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDHPR"; | |
14854 | 32'b10xxxxx111001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RETURN"; | |
14855 | 32'b10xxxxx111001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RETURNi"; | |
14856 | 32'b10xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SAVE"; | |
14857 | 32'b10xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SAVEi"; | |
14858 | 32'b10xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RESTORE"; | |
14859 | 32'b10xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RESTOREi"; | |
14860 | 32'b1000000110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="SAVED"; | |
14861 | 32'b1000001110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RESTORED"; | |
14862 | 32'b00xxxxx100xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="SETHI"; | |
14863 | 32'b10xxxxx100101xxxxx00xxxxxxxxxxxx : xlate[255:0]="SLL"; | |
14864 | 32'b10xxxxx100110xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRL"; | |
14865 | 32'b10xxxxx100111xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRA"; | |
14866 | 32'b10xxxxx100101xxxxx01xxxxxxxxxxxx : xlate[255:0]="SLLX"; | |
14867 | 32'b10xxxxx100110xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRLX"; | |
14868 | 32'b10xxxxx100111xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRAX"; | |
14869 | 32'b10xxxxx100101xxxxx10xxxxxxxxxxxx : xlate[255:0]="SLLi"; | |
14870 | 32'b10xxxxx100110xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRLi"; | |
14871 | 32'b10xxxxx100111xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRAi"; | |
14872 | 32'b10xxxxx100101xxxxx11xxxxxxxxxxxx : xlate[255:0]="SLLXi"; | |
14873 | 32'b10xxxxx100110xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRLXi"; | |
14874 | 32'b10xxxxx100111xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRAXi"; | |
14875 | 32'b11xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STF"; | |
14876 | 32'b11xxxxx100111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDF"; | |
14877 | 32'b1100000100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFSR"; | |
14878 | 32'b1100001100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXFSR"; | |
14879 | 32'b11xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFi"; | |
14880 | 32'b11xxxxx100111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFi"; | |
14881 | 32'b1100000100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFSRi"; | |
14882 | 32'b1100001100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXFSRi"; | |
14883 | 32'b11xxxxx110100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFA"; | |
14884 | 32'b11xxxxx110111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDFA"; | |
14885 | 32'b11xxxxx110100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFAi"; | |
14886 | 32'b11xxxxx110111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFAi"; | |
14887 | 32'b11xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STB"; | |
14888 | 32'b11xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STH"; | |
14889 | 32'b11xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STW"; | |
14890 | 32'b11xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STX"; | |
14891 | 32'b11xxxx0000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STD"; | |
14892 | 32'b11xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBi"; | |
14893 | 32'b11xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHi"; | |
14894 | 32'b11xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWi"; | |
14895 | 32'b11xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXi"; | |
14896 | 32'b11xxxx0000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDi"; | |
14897 | 32'b11xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STBA"; | |
14898 | 32'b11xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STHA"; | |
14899 | 32'b11xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STWA"; | |
14900 | 32'b11xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXA"; | |
14901 | 32'b11xxxx0010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDA"; | |
14902 | 32'b11xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBAi"; | |
14903 | 32'b11xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHAi"; | |
14904 | 32'b11xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWAi"; | |
14905 | 32'b11xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXAi"; | |
14906 | 32'b11xxxx0010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDAi"; | |
14907 | 32'b10xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUB"; | |
14908 | 32'b10xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBcc"; | |
14909 | 32'b10xxxxx001100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBC"; | |
14910 | 32'b10xxxxx011100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBCcc"; | |
14911 | 32'b10xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBi"; | |
14912 | 32'b10xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBcci"; | |
14913 | 32'b10xxxxx001100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCi"; | |
14914 | 32'b10xxxxx011100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCcci"; | |
14915 | 32'b11xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAP"; | |
14916 | 32'b11xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPi"; | |
14917 | 32'b11xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAPA"; | |
14918 | 32'b11xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPAi"; | |
14919 | 32'b10xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDcc"; | |
14920 | 32'b10xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDccTV"; | |
14921 | 32'b10xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDcci"; | |
14922 | 32'b10xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDccTVi"; | |
14923 | 32'b10xxxxx100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBcc"; | |
14924 | 32'b10xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBccTV"; | |
14925 | 32'b10xxxxx100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBcci"; | |
14926 | 32'b10xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBccTVi"; | |
14927 | 32'b10xxxxx111010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TCC"; | |
14928 | 32'b10xxxxx111010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TCCi"; | |
14929 | 32'b10xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPR"; | |
14930 | 32'b10xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPRi"; | |
14931 | 32'b10xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRHPR"; | |
14932 | 32'b10xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRHPRi"; | |
14933 | 32'b1000000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRY"; | |
14934 | 32'b1000010110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRCCR"; | |
14935 | 32'b1000011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRASI"; | |
14936 | 32'b1000110110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRFPRS"; | |
14937 | 32'b1010011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRGSR"; | |
14938 | 32'b1010000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPCR"; | |
14939 | 32'b1010001110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPIC"; | |
14940 | 32'b1000000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRYi"; | |
14941 | 32'b1000010110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRCCRi"; | |
14942 | 32'b1000011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRASIi"; | |
14943 | 32'b1000110110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRFPRSi"; | |
14944 | 32'b1010011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRGSRi"; | |
14945 | 32'b1010000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPCRi"; | |
14946 | 32'b1010001110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPICi"; | |
14947 | 32'b1001111110000000001xxxxxxxxxxxxx : xlate[255:0]="SIR"; | |
14948 | 32'b10xxxxx110110xxxxx001010000xxxxx : xlate[255:0]="FPADD16"; | |
14949 | 32'b10xxxxx110110xxxxx001010001xxxxx : xlate[255:0]="FPADD16S"; | |
14950 | 32'b10xxxxx110110xxxxx001010010xxxxx : xlate[255:0]="FPADD32"; | |
14951 | 32'b10xxxxx110110xxxxx001010011xxxxx : xlate[255:0]="FPADD32S"; | |
14952 | 32'b10xxxxx110110xxxxx001010100xxxxx : xlate[255:0]="FPSUB16"; | |
14953 | 32'b10xxxxx110110xxxxx001010101xxxxx : xlate[255:0]="FPSUB16S"; | |
14954 | 32'b10xxxxx110110xxxxx001010110xxxxx : xlate[255:0]="FPSUB32"; | |
14955 | 32'b10xxxxx110110xxxxx001010111xxxxx : xlate[255:0]="FPSUB32S"; | |
14956 | 32'b10xxxxx110110xxxxx000111011xxxxx : xlate[255:0]="FPACK16"; | |
14957 | 32'b10xxxxx110110xxxxx000111010xxxxx : xlate[255:0]="FPACK32"; | |
14958 | 32'b10xxxxx110110xxxxx000111101xxxxx : xlate[255:0]="FPACKFIX"; | |
14959 | 32'b10xxxxx110110xxxxx001001101xxxxx : xlate[255:0]="FEXPAND"; | |
14960 | 32'b10xxxxx110110xxxxx001001011xxxxx : xlate[255:0]="FPMERGE"; | |
14961 | 32'b10xxxxx110110xxxxx000110001xxxxx : xlate[255:0]="FMUL8x16"; | |
14962 | 32'b10xxxxx110110xxxxx000110011xxxxx : xlate[255:0]="FMUL8x16AU"; | |
14963 | 32'b10xxxxx110110xxxxx000110101xxxxx : xlate[255:0]="FMUL8x16AL"; | |
14964 | 32'b10xxxxx110110xxxxx000110110xxxxx : xlate[255:0]="FMUL8SUx16"; | |
14965 | 32'b10xxxxx110110xxxxx000110111xxxxx : xlate[255:0]="FMUL8ULx16"; | |
14966 | 32'b10xxxxx110110xxxxx000111000xxxxx : xlate[255:0]="FMULD8SUx16"; | |
14967 | 32'b10xxxxx110110xxxxx000111001xxxxx : xlate[255:0]="FMULD8ULx16"; | |
14968 | 32'b10xxxxx110110xxxxx000011000xxxxx : xlate[255:0]="ALIGNADDRESS"; | |
14969 | 32'b10xxxxx110110xxxxx000011010xxxxx : xlate[255:0]="ALIGNADDRESS_LITTLE"; | |
14970 | 32'b10xxxxx110110xxxxx000011001xxxxx : xlate[255:0]="BMASK"; | |
14971 | 32'b10xxxxx110110xxxxx001001000xxxxx : xlate[255:0]="FALIGNDATA"; | |
14972 | 32'b10xxxxx110110xxxxx001001100xxxxx : xlate[255:0]="BSHUFFLE"; | |
14973 | 32'b10xxxxx110110xxxxx001100000xxxxx : xlate[255:0]="FZERO"; | |
14974 | 32'b10xxxxx110110xxxxx001100001xxxxx : xlate[255:0]="FZEROS"; | |
14975 | 32'b10xxxxx110110xxxxx001111110xxxxx : xlate[255:0]="FONE"; | |
14976 | 32'b10xxxxx110110xxxxx001111111xxxxx : xlate[255:0]="FONES"; | |
14977 | 32'b10xxxxx110110xxxxx001110100xxxxx : xlate[255:0]="FSRC1"; | |
14978 | 32'b10xxxxx110110xxxxx001110101xxxxx : xlate[255:0]="FSRC1S"; | |
14979 | 32'b10xxxxx110110xxxxx001111000xxxxx : xlate[255:0]="FSRC2"; | |
14980 | 32'b10xxxxx110110xxxxx001111001xxxxx : xlate[255:0]="FSRC2S"; | |
14981 | 32'b10xxxxx110110xxxxx001101010xxxxx : xlate[255:0]="FNOT1"; | |
14982 | 32'b10xxxxx110110xxxxx001101011xxxxx : xlate[255:0]="FNOT1S"; | |
14983 | 32'b10xxxxx110110xxxxx001100110xxxxx : xlate[255:0]="FNOT2"; | |
14984 | 32'b10xxxxx110110xxxxx001100111xxxxx : xlate[255:0]="FNOT2S"; | |
14985 | 32'b10xxxxx110110xxxxx001111100xxxxx : xlate[255:0]="FOR"; | |
14986 | 32'b10xxxxx110110xxxxx001111101xxxxx : xlate[255:0]="FORS"; | |
14987 | 32'b10xxxxx110110xxxxx001100010xxxxx : xlate[255:0]="FNOR"; | |
14988 | 32'b10xxxxx110110xxxxx001100011xxxxx : xlate[255:0]="FNORS"; | |
14989 | 32'b10xxxxx110110xxxxx001110000xxxxx : xlate[255:0]="FAND"; | |
14990 | 32'b10xxxxx110110xxxxx001110001xxxxx : xlate[255:0]="FANDS"; | |
14991 | 32'b10xxxxx110110xxxxx001101110xxxxx : xlate[255:0]="FNAND"; | |
14992 | 32'b10xxxxx110110xxxxx001101111xxxxx : xlate[255:0]="FNANDS"; | |
14993 | 32'b10xxxxx110110xxxxx001101100xxxxx : xlate[255:0]="FXOR"; | |
14994 | 32'b10xxxxx110110xxxxx001101101xxxxx : xlate[255:0]="FXORS"; | |
14995 | 32'b10xxxxx110110xxxxx001110010xxxxx : xlate[255:0]="FXNOR"; | |
14996 | 32'b10xxxxx110110xxxxx001110011xxxxx : xlate[255:0]="FXNORS"; | |
14997 | 32'b10xxxxx110110xxxxx001111010xxxxx : xlate[255:0]="FORNOT1"; | |
14998 | 32'b10xxxxx110110xxxxx001111011xxxxx : xlate[255:0]="FORNOT1S"; | |
14999 | 32'b10xxxxx110110xxxxx001110110xxxxx : xlate[255:0]="FORNOT2"; | |
15000 | 32'b10xxxxx110110xxxxx001110111xxxxx : xlate[255:0]="FORNOT2S"; | |
15001 | 32'b10xxxxx110110xxxxx001101000xxxxx : xlate[255:0]="FANDNOT1"; | |
15002 | 32'b10xxxxx110110xxxxx001101001xxxxx : xlate[255:0]="FANDNOT1S"; | |
15003 | 32'b10xxxxx110110xxxxx001100100xxxxx : xlate[255:0]="FANDNOT2"; | |
15004 | 32'b10xxxxx110110xxxxx001100101xxxxx : xlate[255:0]="FANDNOT2S"; | |
15005 | 32'b10xxxxx110110xxxxx000101000xxxxx : xlate[255:0]="FCMPGT16"; | |
15006 | 32'b10xxxxx110110xxxxx000101100xxxxx : xlate[255:0]="FCMPGT32"; | |
15007 | 32'b10xxxxx110110xxxxx000100000xxxxx : xlate[255:0]="FCMPLE16"; | |
15008 | 32'b10xxxxx110110xxxxx000100100xxxxx : xlate[255:0]="FCMPLE32"; | |
15009 | 32'b10xxxxx110110xxxxx000100010xxxxx : xlate[255:0]="FCMPNE16"; | |
15010 | 32'b10xxxxx110110xxxxx000100110xxxxx : xlate[255:0]="FCMPNE32"; | |
15011 | 32'b10xxxxx110110xxxxx000101010xxxxx : xlate[255:0]="FCMPEQ16"; | |
15012 | 32'b10xxxxx110110xxxxx000101110xxxxx : xlate[255:0]="FCMPEQ32"; | |
15013 | 32'b10xxxxx110110xxxxx000111110xxxxx : xlate[255:0]="PDIST"; | |
15014 | 32'b10xxxxx110110xxxxx000000000xxxxx : xlate[255:0]="EDGE8"; | |
15015 | 32'b10xxxxx110110xxxxx000000001xxxxx : xlate[255:0]="EDGE8N"; | |
15016 | 32'b10xxxxx110110xxxxx000000010xxxxx : xlate[255:0]="EDGE8L"; | |
15017 | 32'b10xxxxx110110xxxxx000000011xxxxx : xlate[255:0]="EDGE8LN"; | |
15018 | 32'b10xxxxx110110xxxxx000000100xxxxx : xlate[255:0]="EDGE16"; | |
15019 | 32'b10xxxxx110110xxxxx000000101xxxxx : xlate[255:0]="EDGE16N"; | |
15020 | 32'b10xxxxx110110xxxxx000000110xxxxx : xlate[255:0]="EDGE16L"; | |
15021 | 32'b10xxxxx110110xxxxx000000111xxxxx : xlate[255:0]="EDGE16LN"; | |
15022 | 32'b10xxxxx110110xxxxx000001000xxxxx : xlate[255:0]="EDGE32"; | |
15023 | 32'b10xxxxx110110xxxxx000001001xxxxx : xlate[255:0]="EDGE32N"; | |
15024 | 32'b10xxxxx110110xxxxx000001010xxxxx : xlate[255:0]="EDGE32L"; | |
15025 | 32'b10xxxxx110110xxxxx000001011xxxxx : xlate[255:0]="EDGE32LN"; | |
15026 | 32'b10xxxxx110110xxxxx000010000xxxxx : xlate[255:0]="ARRAY8"; | |
15027 | 32'b10xxxxx110110xxxxx000010010xxxxx : xlate[255:0]="ARRAY16"; | |
15028 | 32'b10xxxxx110110xxxxx000010100xxxxx : xlate[255:0]="ARRAY32"; | |
15029 | 32'b10xxxxx110110xxxxx010000001xxxxx : xlate[255:0]="SIAM"; | |
15030 | default : xlate[255:0]="unknown"; | |
15031 | endcase | |
15032 | end | |
15033 | endfunction // xlate | |
15034 | ||
15035 | ||
15036 | `endif | |
15037 | ||
15038 | endmodule | |
15039 | ||
15040 | `endif | |
15041 | ||
15042 | ||
15043 | `ifdef CORE_6 | |
15044 | ||
15045 | module 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 | ||
15222 | integer i; | |
15223 | integer start_dmiss0; | |
15224 | integer start_dmiss1; | |
15225 | integer start_dmiss2; | |
15226 | integer start_dmiss3; | |
15227 | integer start_dmiss4; | |
15228 | integer start_dmiss5; | |
15229 | integer start_dmiss6; | |
15230 | integer start_dmiss7; | |
15231 | integer number_dmiss; | |
15232 | integer start_imiss0; | |
15233 | integer start_imiss1; | |
15234 | integer start_imiss2; | |
15235 | integer start_imiss3; | |
15236 | integer start_imiss4; | |
15237 | integer start_imiss5; | |
15238 | integer start_imiss6; | |
15239 | integer start_imiss7; | |
15240 | integer active_imiss0; | |
15241 | integer active_imiss1; | |
15242 | integer active_imiss2; | |
15243 | integer active_imiss3; | |
15244 | integer active_imiss4; | |
15245 | integer active_imiss5; | |
15246 | integer active_imiss6; | |
15247 | integer active_imiss7; | |
15248 | integer first_imiss0; | |
15249 | integer first_imiss1; | |
15250 | integer first_imiss2; | |
15251 | integer first_imiss3; | |
15252 | integer first_imiss4; | |
15253 | integer first_imiss5; | |
15254 | integer first_imiss6; | |
15255 | integer first_imiss7; | |
15256 | integer number_imiss; | |
15257 | integer clock; | |
15258 | integer sum_dmiss_latency; | |
15259 | integer sum_imiss_latency; | |
15260 | reg spec_dmiss; | |
15261 | integer dmiss_cnt; | |
15262 | integer imiss_cnt; | |
15263 | reg pcx_req; | |
15264 | integer l15dmiss_cnt; | |
15265 | integer l15imiss_cnt; | |
15266 | ||
15267 | ||
15268 | initial 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 | ||
15324 | end //} | |
15325 | ||
15326 | wire [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 | ||
15335 | wire [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}; | |
15343 | wire [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 | |
15358 | wire [63:0] ctxt_z_tsb_cfg0_reg [7:0]; // 1 per thread | |
15359 | wire [63:0] ctxt_z_tsb_cfg1_reg [7:0]; | |
15360 | wire [63:0] ctxt_z_tsb_cfg2_reg [7:0]; | |
15361 | wire [63:0] ctxt_z_tsb_cfg3_reg [7:0]; | |
15362 | wire [63:0] ctxt_nz_tsb_cfg0_reg [7:0]; | |
15363 | wire [63:0] ctxt_nz_tsb_cfg1_reg [7:0]; | |
15364 | wire [63:0] ctxt_nz_tsb_cfg2_reg [7:0]; | |
15365 | wire [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 | ||
15383 | wire [83:0] mmu_mra0_a0 = `SPC6.mmu.mra0.array.mem[0]; | |
15384 | wire [83:0] mmu_mra0_a8 = `SPC6.mmu.mra0.array.mem[8]; | |
15385 | wire [83:0] mmu_mra0_a16 = `SPC6.mmu.mra0.array.mem[16]; | |
15386 | wire [83:0] mmu_mra0_a24 = `SPC6.mmu.mra0.array.mem[24]; | |
15387 | wire [83:0] mmu_mra0_a1 = `SPC6.mmu.mra0.array.mem[1]; | |
15388 | wire [83:0] mmu_mra0_a9 = `SPC6.mmu.mra0.array.mem[9]; | |
15389 | wire [83:0] mmu_mra0_a17 = `SPC6.mmu.mra0.array.mem[17]; | |
15390 | wire [83:0] mmu_mra0_a25 = `SPC6.mmu.mra0.array.mem[25]; | |
15391 | wire [83:0] mmu_mra0_a2 = `SPC6.mmu.mra0.array.mem[2]; | |
15392 | wire [83:0] mmu_mra0_a10 = `SPC6.mmu.mra0.array.mem[10]; | |
15393 | wire [83:0] mmu_mra0_a18 = `SPC6.mmu.mra0.array.mem[18]; | |
15394 | wire [83:0] mmu_mra0_a26 = `SPC6.mmu.mra0.array.mem[26]; | |
15395 | wire [83:0] mmu_mra0_a3 = `SPC6.mmu.mra0.array.mem[3]; | |
15396 | wire [83:0] mmu_mra0_a11 = `SPC6.mmu.mra0.array.mem[11]; | |
15397 | wire [83:0] mmu_mra0_a19 = `SPC6.mmu.mra0.array.mem[19]; | |
15398 | wire [83:0] mmu_mra0_a27 = `SPC6.mmu.mra0.array.mem[27]; | |
15399 | wire [83:0] mmu_mra1_a0 = `SPC6.mmu.mra1.array.mem[0]; | |
15400 | wire [83:0] mmu_mra1_a8 = `SPC6.mmu.mra1.array.mem[8]; | |
15401 | wire [83:0] mmu_mra1_a16 = `SPC6.mmu.mra1.array.mem[16]; | |
15402 | wire [83:0] mmu_mra1_a24 = `SPC6.mmu.mra1.array.mem[24]; | |
15403 | wire [83:0] mmu_mra1_a1 = `SPC6.mmu.mra1.array.mem[1]; | |
15404 | wire [83:0] mmu_mra1_a9 = `SPC6.mmu.mra1.array.mem[9]; | |
15405 | wire [83:0] mmu_mra1_a17 = `SPC6.mmu.mra1.array.mem[17]; | |
15406 | wire [83:0] mmu_mra1_a25 = `SPC6.mmu.mra1.array.mem[25]; | |
15407 | wire [83:0] mmu_mra1_a2 = `SPC6.mmu.mra1.array.mem[2]; | |
15408 | wire [83:0] mmu_mra1_a10 = `SPC6.mmu.mra1.array.mem[10]; | |
15409 | wire [83:0] mmu_mra1_a18 = `SPC6.mmu.mra1.array.mem[18]; | |
15410 | wire [83:0] mmu_mra1_a26 = `SPC6.mmu.mra1.array.mem[26]; | |
15411 | wire [83:0] mmu_mra1_a3 = `SPC6.mmu.mra1.array.mem[3]; | |
15412 | wire [83:0] mmu_mra1_a11 = `SPC6.mmu.mra1.array.mem[11]; | |
15413 | wire [83:0] mmu_mra1_a19 = `SPC6.mmu.mra1.array.mem[19]; | |
15414 | wire [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. | |
15419 | assign 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 | }; | |
15426 | assign 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 | }; | |
15433 | assign 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 | }; | |
15440 | assign 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 | }; | |
15447 | assign 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 | }; | |
15454 | assign 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 | }; | |
15461 | assign 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 | }; | |
15468 | assign 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. | |
15478 | assign 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 | }; | |
15485 | assign 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 | }; | |
15492 | assign 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 | }; | |
15499 | assign 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 | }; | |
15506 | assign 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 | }; | |
15513 | assign 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 | }; | |
15520 | assign 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 | }; | |
15527 | assign 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. | |
15537 | assign 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 | }; | |
15544 | assign 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 | }; | |
15551 | assign 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 | }; | |
15558 | assign 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 | }; | |
15565 | assign 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 | }; | |
15572 | assign 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 | }; | |
15579 | assign 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 | }; | |
15586 | assign 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. | |
15596 | assign 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 | }; | |
15603 | assign 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 | }; | |
15610 | assign 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 | }; | |
15617 | assign 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 | }; | |
15624 | assign 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 | }; | |
15631 | assign 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 | }; | |
15638 | assign 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 | }; | |
15645 | assign 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. | |
15655 | assign 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 | }; | |
15662 | assign 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 | }; | |
15669 | assign 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 | }; | |
15676 | assign 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 | }; | |
15683 | assign 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 | }; | |
15690 | assign 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 | }; | |
15697 | assign 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 | }; | |
15704 | assign 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. | |
15714 | assign 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 | }; | |
15721 | assign 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 | }; | |
15728 | assign 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 | }; | |
15735 | assign 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 | }; | |
15742 | assign 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 | }; | |
15749 | assign 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 | }; | |
15756 | assign 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 | }; | |
15763 | assign 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. | |
15773 | assign 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 | }; | |
15780 | assign 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 | }; | |
15787 | assign 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 | }; | |
15794 | assign 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 | }; | |
15801 | assign 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 | }; | |
15808 | assign 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 | }; | |
15815 | assign 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 | }; | |
15822 | assign 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. | |
15832 | assign 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 | }; | |
15839 | assign 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 | }; | |
15846 | assign 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 | }; | |
15853 | assign 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 | }; | |
15860 | assign 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 | }; | |
15867 | assign 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 | }; | |
15874 | assign 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 | }; | |
15881 | assign 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 | |
15900 | wire [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) | |
15915 | wire [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 | ||
15928 | wire [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 | ||
15939 | reg tlb_bypass_m; | |
15940 | reg tlb_bypass_b; | |
15941 | reg tlb_rd_vld_m; | |
15942 | reg tlb_rd_vld_b; | |
15943 | reg lsu_tl_gt_0_b; | |
15944 | reg [7:0] dcc_asi_b; | |
15945 | reg asi_internal_w; | |
15946 | ||
15947 | always @ (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; | |
15968 | end // } | |
15969 | ||
15970 | // TL determines whether Nucleus or Primary | |
15971 | wire [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 | ||
15975 | wire [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 | ||
16001 | wire [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 | ||
16027 | wire 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 | ||
16031 | wire [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 | ||
16041 | wire [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 | ||
16053 | reg [71:0] tick_cmpr_0; | |
16054 | reg [71:0] stick_cmpr_0; | |
16055 | reg [71:0] hstick_cmpr_0; | |
16056 | reg [151:0] trap_entry_1_t0; | |
16057 | reg [151:0] trap_entry_2_t0; | |
16058 | reg [151:0] trap_entry_3_t0; | |
16059 | reg [151:0] trap_entry_4_t0; | |
16060 | reg [151:0] trap_entry_5_t0; | |
16061 | reg [151:0] trap_entry_6_t0; | |
16062 | ||
16063 | always @(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 | ||
16076 | end // } | |
16077 | reg [71:0] tick_cmpr_1; | |
16078 | reg [71:0] stick_cmpr_1; | |
16079 | reg [71:0] hstick_cmpr_1; | |
16080 | reg [151:0] trap_entry_1_t1; | |
16081 | reg [151:0] trap_entry_2_t1; | |
16082 | reg [151:0] trap_entry_3_t1; | |
16083 | reg [151:0] trap_entry_4_t1; | |
16084 | reg [151:0] trap_entry_5_t1; | |
16085 | reg [151:0] trap_entry_6_t1; | |
16086 | ||
16087 | always @(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 | ||
16100 | end // } | |
16101 | reg [71:0] tick_cmpr_2; | |
16102 | reg [71:0] stick_cmpr_2; | |
16103 | reg [71:0] hstick_cmpr_2; | |
16104 | reg [151:0] trap_entry_1_t2; | |
16105 | reg [151:0] trap_entry_2_t2; | |
16106 | reg [151:0] trap_entry_3_t2; | |
16107 | reg [151:0] trap_entry_4_t2; | |
16108 | reg [151:0] trap_entry_5_t2; | |
16109 | reg [151:0] trap_entry_6_t2; | |
16110 | ||
16111 | always @(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 | ||
16124 | end // } | |
16125 | reg [71:0] tick_cmpr_3; | |
16126 | reg [71:0] stick_cmpr_3; | |
16127 | reg [71:0] hstick_cmpr_3; | |
16128 | reg [151:0] trap_entry_1_t3; | |
16129 | reg [151:0] trap_entry_2_t3; | |
16130 | reg [151:0] trap_entry_3_t3; | |
16131 | reg [151:0] trap_entry_4_t3; | |
16132 | reg [151:0] trap_entry_5_t3; | |
16133 | reg [151:0] trap_entry_6_t3; | |
16134 | ||
16135 | always @(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 | ||
16148 | end // } | |
16149 | reg [71:0] tick_cmpr_4; | |
16150 | reg [71:0] stick_cmpr_4; | |
16151 | reg [71:0] hstick_cmpr_4; | |
16152 | reg [151:0] trap_entry_1_t4; | |
16153 | reg [151:0] trap_entry_2_t4; | |
16154 | reg [151:0] trap_entry_3_t4; | |
16155 | reg [151:0] trap_entry_4_t4; | |
16156 | reg [151:0] trap_entry_5_t4; | |
16157 | reg [151:0] trap_entry_6_t4; | |
16158 | ||
16159 | always @(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 | ||
16172 | end // } | |
16173 | reg [71:0] tick_cmpr_5; | |
16174 | reg [71:0] stick_cmpr_5; | |
16175 | reg [71:0] hstick_cmpr_5; | |
16176 | reg [151:0] trap_entry_1_t5; | |
16177 | reg [151:0] trap_entry_2_t5; | |
16178 | reg [151:0] trap_entry_3_t5; | |
16179 | reg [151:0] trap_entry_4_t5; | |
16180 | reg [151:0] trap_entry_5_t5; | |
16181 | reg [151:0] trap_entry_6_t5; | |
16182 | ||
16183 | always @(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 | ||
16196 | end // } | |
16197 | reg [71:0] tick_cmpr_6; | |
16198 | reg [71:0] stick_cmpr_6; | |
16199 | reg [71:0] hstick_cmpr_6; | |
16200 | reg [151:0] trap_entry_1_t6; | |
16201 | reg [151:0] trap_entry_2_t6; | |
16202 | reg [151:0] trap_entry_3_t6; | |
16203 | reg [151:0] trap_entry_4_t6; | |
16204 | reg [151:0] trap_entry_5_t6; | |
16205 | reg [151:0] trap_entry_6_t6; | |
16206 | ||
16207 | always @(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 | ||
16220 | end // } | |
16221 | reg [71:0] tick_cmpr_7; | |
16222 | reg [71:0] stick_cmpr_7; | |
16223 | reg [71:0] hstick_cmpr_7; | |
16224 | reg [151:0] trap_entry_1_t7; | |
16225 | reg [151:0] trap_entry_2_t7; | |
16226 | reg [151:0] trap_entry_3_t7; | |
16227 | reg [151:0] trap_entry_4_t7; | |
16228 | reg [151:0] trap_entry_5_t7; | |
16229 | reg [151:0] trap_entry_6_t7; | |
16230 | ||
16231 | always @(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 | ||
16244 | end // } | |
16245 | ||
16246 | //------------------------------------ | |
16247 | // ASI & Trap State machines | |
16248 | always @(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 | ||
16337 | end // } | |
16338 | ||
16339 | ||
16340 | always @(posedge `BENCH_SPC6_GCLK) begin | |
16341 | ||
16342 | // debug code for TPCC analysis | |
16343 | `ifdef TPCC | |
16344 | if (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 | |
16354 | end | |
16355 | ||
16356 | pcx_req <= |`SPC6.spc_pcx_req_pq[8:0]; | |
16357 | ||
16358 | if (`SPC6.ifu_l15_valid==1) begin | |
16359 | imiss_cnt=imiss_cnt+1; | |
16360 | $display("imiss cnt is %0d",imiss_cnt); | |
16361 | end | |
16362 | if (spec_dmiss==1 && `SPC6.lsu_l15_cancel==0) begin | |
16363 | dmiss_cnt=dmiss_cnt+1; | |
16364 | $display("dmiss cnt is %0d",dmiss_cnt); | |
16365 | ||
16366 | end | |
16367 | spec_dmiss <= `SPC6.lsu_l15_valid & `SPC6.lsu_l15_load; | |
16368 | ||
16369 | clock = clock+1; | |
16370 | ||
16371 | // keep track of imiss latencies | |
16372 | if (`SPC6.ftu_agc_thr0_cmiss_c==1) begin | |
16373 | start_imiss0=clock; | |
16374 | active_imiss0=1; | |
16375 | end | |
16376 | if (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; | |
16382 | end | |
16383 | if (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; | |
16385 | end | |
16386 | if (`SPC6.ftu_agc_thr1_cmiss_c==1) begin | |
16387 | start_imiss1=clock; | |
16388 | active_imiss1=1; | |
16389 | end | |
16390 | if (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; | |
16396 | end | |
16397 | if (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; | |
16399 | end | |
16400 | if (`SPC6.ftu_agc_thr2_cmiss_c==1) begin | |
16401 | start_imiss2=clock; | |
16402 | active_imiss2=1; | |
16403 | end | |
16404 | if (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; | |
16410 | end | |
16411 | if (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; | |
16413 | end | |
16414 | if (`SPC6.ftu_agc_thr3_cmiss_c==1) begin | |
16415 | start_imiss3=clock; | |
16416 | active_imiss3=1; | |
16417 | end | |
16418 | if (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; | |
16424 | end | |
16425 | if (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; | |
16427 | end | |
16428 | if (`SPC6.ftu_agc_thr4_cmiss_c==1) begin | |
16429 | start_imiss4=clock; | |
16430 | active_imiss4=1; | |
16431 | end | |
16432 | if (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; | |
16438 | end | |
16439 | if (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; | |
16441 | end | |
16442 | if (`SPC6.ftu_agc_thr5_cmiss_c==1) begin | |
16443 | start_imiss5=clock; | |
16444 | active_imiss5=1; | |
16445 | end | |
16446 | if (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; | |
16452 | end | |
16453 | if (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; | |
16455 | end | |
16456 | if (`SPC6.ftu_agc_thr6_cmiss_c==1) begin | |
16457 | start_imiss6=clock; | |
16458 | active_imiss6=1; | |
16459 | end | |
16460 | if (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; | |
16466 | end | |
16467 | if (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; | |
16469 | end | |
16470 | if (`SPC6.ftu_agc_thr7_cmiss_c==1) begin | |
16471 | start_imiss7=clock; | |
16472 | active_imiss7=1; | |
16473 | end | |
16474 | if (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; | |
16480 | end | |
16481 | if (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; | |
16483 | end | |
16484 | ||
16485 | if (`SPC6.pku.swl0.set_lsu_sync_wait==1) begin | |
16486 | start_dmiss0=clock; | |
16487 | end | |
16488 | if (`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); | |
16492 | end | |
16493 | if (`SPC6.pku.swl1.set_lsu_sync_wait==1) begin | |
16494 | start_dmiss1=clock; | |
16495 | end | |
16496 | if (`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); | |
16500 | end | |
16501 | if (`SPC6.pku.swl2.set_lsu_sync_wait==1) begin | |
16502 | start_dmiss2=clock; | |
16503 | end | |
16504 | if (`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); | |
16508 | end | |
16509 | if (`SPC6.pku.swl3.set_lsu_sync_wait==1) begin | |
16510 | start_dmiss3=clock; | |
16511 | end | |
16512 | if (`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); | |
16516 | end | |
16517 | if (`SPC6.pku.swl4.set_lsu_sync_wait==1) begin | |
16518 | start_dmiss4=clock; | |
16519 | end | |
16520 | if (`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); | |
16524 | end | |
16525 | if (`SPC6.pku.swl5.set_lsu_sync_wait==1) begin | |
16526 | start_dmiss5=clock; | |
16527 | end | |
16528 | if (`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); | |
16532 | end | |
16533 | if (`SPC6.pku.swl6.set_lsu_sync_wait==1) begin | |
16534 | start_dmiss6=clock; | |
16535 | end | |
16536 | if (`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); | |
16540 | end | |
16541 | if (`SPC6.pku.swl7.set_lsu_sync_wait==1) begin | |
16542 | start_dmiss7=clock; | |
16543 | end | |
16544 | if (`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); | |
16548 | end | |
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 | ||
16739 | end // 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 | |
16744 | assign return0 = `SPC6.exu0.rml.return_w & | |
16745 | `SPC6.exu0.rml.inst_vld_w; | |
16746 | assign return1 = `SPC6.exu1.rml.return_w & | |
16747 | `SPC6.exu1.rml.inst_vld_w; | |
16748 | assign 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 | |
16762 | assign ex0_tid_e = `SPC6.exu0.ect_tid_lth_e[1:0]; | |
16763 | assign ex0_valid_e = `SPC6.dec.dec_valid_e[0] & ~fgu0_e & ~load0_e & | |
16764 | ~retry0_e & ~done0_e; | |
16765 | assign ex1_tid_e = `SPC6.exu1.ect_tid_lth_e[1:0]; | |
16766 | assign ex1_valid_e = `SPC6.dec.dec_valid_e[1] & ~fgu1_e & ~load1_e & | |
16767 | ~retry1_e & ~done1_e; | |
16768 | ||
16769 | assign ex_asr_valid = `SPC6.lsu.dcc.asi_store_m & `SPC6.lsu.dcc.asi_sync_m ; | |
16770 | ||
16771 | assign 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 | |
16784 | assign 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 | |
16795 | wire [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... | |
16806 | reg [7:0] block_store_w; | |
16807 | always @(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]; | |
16810 | end | |
16811 | ||
16812 | wire [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 | ||
16824 | assign 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 | ||
16838 | assign 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 | |
16846 | assign 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 | |
16859 | wire 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 | ||
16863 | assign fg_cond_fb = fg_cond_fb_pre_err & ~fgu_err_fb; | |
16864 | ||
16865 | // Idiv/Fdiv signals | |
16866 | ||
16867 | assign fgu_idiv_valid = fg_div_valid & div_idest; | |
16868 | ||
16869 | ||
16870 | assign fgu_fdiv_valid = fg_fdiv_valid_fw & div_fdest; | |
16871 | ||
16872 | ||
16873 | // Lsu signals needed to check lsu results | |
16874 | ||
16875 | assign lsu_valid = lsu_check | lsu_data_w; | |
16876 | ||
16877 | assign fg_div_valid = `SPC6.fgu_divide_completion & ~div_special_cancel_f4; | |
16878 | ||
16879 | // State machine asserts lsu_check for LD hit/miss | |
16880 | always @(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 // } | |
16926 | end | |
16927 | ||
16928 | ||
16929 | assign lsu_tid = `SPC6.lsu.dcc.ld_tid_b[2:0]; | |
16930 | // Don't assert LSU_complete in case of dtlb or irf errors | |
16931 | ||
16932 | assign 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 | ||
16937 | assign 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 | ||
16946 | assign lsu_tid_dec_b[0] = `SPC6.lsu.dcc.ld_tid_b[2:0] == 3'd0; | |
16947 | assign lsu_tid_dec_b[1] = `SPC6.lsu.dcc.ld_tid_b[2:0] == 3'd1; | |
16948 | assign lsu_tid_dec_b[2] = `SPC6.lsu.dcc.ld_tid_b[2:0] == 3'd2; | |
16949 | assign lsu_tid_dec_b[3] = `SPC6.lsu.dcc.ld_tid_b[2:0] == 3'd3; | |
16950 | assign lsu_tid_dec_b[4] = `SPC6.lsu.dcc.ld_tid_b[2:0] == 3'd4; | |
16951 | assign lsu_tid_dec_b[5] = `SPC6.lsu.dcc.ld_tid_b[2:0] == 3'd5; | |
16952 | assign lsu_tid_dec_b[6] = `SPC6.lsu.dcc.ld_tid_b[2:0] == 3'd6; | |
16953 | assign lsu_tid_dec_b[7] = `SPC6.lsu.dcc.ld_tid_b[2:0] == 3'd7; | |
16954 | ||
16955 | assign 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); | |
16957 | assign dec_flush_lb = `SPC6.dec.dec_flush_lb | `SPC6.tlu_flush_lsu_b; | |
16958 | ||
16959 | ||
16960 | // LSU interface to CCX stub | |
16961 | ||
16962 | assign exu_lsu_valid = `SPC6.dec.del.lsu_valid_e; | |
16963 | assign exu_lsu_addr[47:0] = `SPC6.exu_lsu_address_e[47:0]; | |
16964 | assign exu_lsu_tid[2:0] = lsu_tid_e[2:0]; | |
16965 | assign exu_lsu_regid[4:0] = `SPC6.dec.dec_lsu_rd_e[4:0]; | |
16966 | assign exu_lsu_data[63:0] = `SPC6.exu_lsu_store_data_e[63:0]; | |
16967 | assign 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]); | |
16971 | assign 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 | ||
17018 | initial 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; | |
17027 | end | |
17028 | ||
17029 | always @(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 | ||
17079 | end //} | |
17080 | ||
17081 | /////////////////////////////////////////////////////////////////////////////// | |
17082 | // Functions | |
17083 | /////////////////////////////////////////////////////////////////////////////// | |
17084 | function [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 | |
17099 | endfunction | |
17100 | ||
17101 | function [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 | |
17116 | endfunction | |
17117 | ||
17118 | //--------------------- | |
17119 | ||
17120 | function [255:0] xlate; | |
17121 | input [31:0] inst; | |
17122 | ||
17123 | begin | |
17124 | casex(inst[31:0]) | |
17125 | 32'b10xxxxx110100xxxxx001000011xxxxx : xlate[255:0]="FADDq"; | |
17126 | 32'b10xxxxx110100xxxxx001000111xxxxx : xlate[255:0]="FSUBq"; | |
17127 | 32'b10000xx110101xxxxx001010011xxxxx : xlate[255:0]="FCMPq"; | |
17128 | 32'b10000xx110101xxxxx001010111xxxxx : xlate[255:0]="FCMPEq"; | |
17129 | 32'b10xxxxx110100xxxxx011001101xxxxx : xlate[255:0]="FsTOq"; | |
17130 | 32'b10xxxxx110100xxxxx011001110xxxxx : xlate[255:0]="FdTOq"; | |
17131 | 32'b10xxxxx110100xxxxx010001100xxxxx : xlate[255:0]="FxTOq"; | |
17132 | 32'b10xxxxx110100xxxxx011001100xxxxx : xlate[255:0]="FiTOq"; | |
17133 | 32'b10xxxxx110100xxxxx000000011xxxxx : xlate[255:0]="FMOVq"; | |
17134 | 32'b10xxxxx110100xxxxx000000111xxxxx : xlate[255:0]="FNEGq"; | |
17135 | 32'b10xxxxx110100xxxxx000001011xxxxx : xlate[255:0]="FABSq"; | |
17136 | 32'b10xxxxx110100xxxxx001001011xxxxx : xlate[255:0]="FMULq"; | |
17137 | 32'b10xxxxx110100xxxxx001101110xxxxx : xlate[255:0]="FdMULq"; | |
17138 | 32'b10xxxxx110100xxxxx001001111xxxxx : xlate[255:0]="FDIVq"; | |
17139 | 32'b10xxxxx110100xxxxx000101011xxxxx : xlate[255:0]="FSQRTq"; | |
17140 | 32'b10xxxxx1101010xxxx0xx100111xxxxx : xlate[255:0]="FMOVrQa"; | |
17141 | 32'b10xxxxx1101010xxxx0x1x00111xxxxx : xlate[255:0]="FMOVrQb"; | |
17142 | 32'b10xxxxx110100xxxxx011010011xxxxx : xlate[255:0]="FqTOi"; | |
17143 | 32'b10xxxxx110100xxxxx010000011xxxxx : xlate[255:0]="FqTOx"; | |
17144 | 32'b10xxxxx110100xxxxx011000111xxxxx : xlate[255:0]="FqTOs"; | |
17145 | 32'b10xxxxx110100xxxxx011001011xxxxx : xlate[255:0]="FqTOd"; | |
17146 | 32'b11xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQF"; | |
17147 | 32'b11xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFi"; | |
17148 | 32'b11xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQFA"; | |
17149 | 32'b11xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFAi"; | |
17150 | 32'b11xxxxx100110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFi"; | |
17151 | 32'b11xxxxx100110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQF"; | |
17152 | 32'b11xxxxx110110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQFA"; | |
17153 | 32'b11xxxxx110110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFAi"; | |
17154 | 32'b10xxxxx1101010xxxxxxx000011xxxxx : xlate[255:0]="FMOVQcc"; | |
17155 | 32'b10xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADD"; | |
17156 | 32'b10xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDcc"; | |
17157 | 32'b10xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDC"; | |
17158 | 32'b10xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDCcc"; | |
17159 | 32'b10xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDi"; | |
17160 | 32'b10xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDcci"; | |
17161 | 32'b10xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCi"; | |
17162 | 32'b10xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCcci"; | |
17163 | 32'b00x0xx1011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr1"; | |
17164 | 32'b00x0x1x011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr2"; | |
17165 | 32'b00xx000110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfccA"; | |
17166 | 32'b00xx1xx110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc1"; | |
17167 | 32'b00xxx1x110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc2"; | |
17168 | 32'b00xxxx1110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc3"; | |
17169 | 32'b00xx000101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfccA"; | |
17170 | 32'b00xx1xx101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc1"; | |
17171 | 32'b00xxx1x101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc2"; | |
17172 | 32'b00xxxx1101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc3"; | |
17173 | 32'b00xx000010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BiccA"; | |
17174 | 32'b00xx1xx010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc1"; | |
17175 | 32'b00xxx1x010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc2"; | |
17176 | 32'b00xxxx1010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc3"; | |
17177 | 32'b00xx000001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPccA"; | |
17178 | 32'b00xx1xx001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc1"; | |
17179 | 32'b00xxx1x001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc2"; | |
17180 | 32'b00xxxx1001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc3"; | |
17181 | 32'b01xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="CALL"; | |
17182 | 32'b11xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASA"; | |
17183 | 32'b11xxxxx111110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASXA"; | |
17184 | 32'b11xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASAi"; | |
17185 | 32'b11xxxxx111110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASXAi"; | |
17186 | 32'b10xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIV"; | |
17187 | 32'b10xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIV"; | |
17188 | 32'b10xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVcc"; | |
17189 | 32'b10xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVcc"; | |
17190 | 32'b10xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVi"; | |
17191 | 32'b10xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVi"; | |
17192 | 32'b10xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVcci"; | |
17193 | 32'b10xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVcci"; | |
17194 | 32'b1000000111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="DONE"; | |
17195 | 32'b1000001111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RETRY"; | |
17196 | 32'b10xxxxx110100xxxxx001000001xxxxx : xlate[255:0]="FADDs"; | |
17197 | 32'b10xxxxx110100xxxxx001000010xxxxx : xlate[255:0]="FADDd"; | |
17198 | 32'b10xxxxx110100xxxxx001000101xxxxx : xlate[255:0]="FSUBs"; | |
17199 | 32'b10xxxxx110100xxxxx001000110xxxxx : xlate[255:0]="FSUBd"; | |
17200 | 32'b10000xx110101xxxxx001010001xxxxx : xlate[255:0]="FCMPs"; | |
17201 | 32'b10000xx110101xxxxx001010010xxxxx : xlate[255:0]="FCMPd"; | |
17202 | 32'b10000xx110101xxxxx001010101xxxxx : xlate[255:0]="FCMPEs"; | |
17203 | 32'b10000xx110101xxxxx001010110xxxxx : xlate[255:0]="FCMPEd"; | |
17204 | 32'b10xxxxx110100xxxxx010000001xxxxx : xlate[255:0]="FsTOx"; | |
17205 | 32'b10xxxxx110100xxxxx010000010xxxxx : xlate[255:0]="FdTOx"; | |
17206 | 32'b10xxxxx110100xxxxx011010001xxxxx : xlate[255:0]="FsTOi"; | |
17207 | 32'b10xxxxx110100xxxxx011010010xxxxx : xlate[255:0]="FdTOi"; | |
17208 | 32'b10xxxxx110100xxxxx011001001xxxxx : xlate[255:0]="FsTOd"; | |
17209 | 32'b10xxxxx110100xxxxx011000110xxxxx : xlate[255:0]="FdTOs"; | |
17210 | 32'b10xxxxx110100xxxxx010000100xxxxx : xlate[255:0]="FxTOs"; | |
17211 | 32'b10xxxxx110100xxxxx010001000xxxxx : xlate[255:0]="FxTOd"; | |
17212 | 32'b10xxxxx110100xxxxx011000100xxxxx : xlate[255:0]="FiTOs"; | |
17213 | 32'b10xxxxx110100xxxxx011001000xxxxx : xlate[255:0]="FiTOd"; | |
17214 | 32'b10xxxxx110100xxxxx000000001xxxxx : xlate[255:0]="FMOVs"; | |
17215 | 32'b10xxxxx110100xxxxx000000010xxxxx : xlate[255:0]="FMOVd"; | |
17216 | 32'b10xxxxx110100xxxxx000000101xxxxx : xlate[255:0]="FNEGs"; | |
17217 | 32'b10xxxxx110100xxxxx000000110xxxxx : xlate[255:0]="FNEGd"; | |
17218 | 32'b10xxxxx110100xxxxx000001001xxxxx : xlate[255:0]="FABSs"; | |
17219 | 32'b10xxxxx110100xxxxx000001010xxxxx : xlate[255:0]="FABSd"; | |
17220 | 32'b10xxxxx110100xxxxx001001001xxxxx : xlate[255:0]="FMULs"; | |
17221 | 32'b10xxxxx110100xxxxx001001010xxxxx : xlate[255:0]="FMULd"; | |
17222 | 32'b10xxxxx110100xxxxx001101001xxxxx : xlate[255:0]="FsMULd"; | |
17223 | 32'b10xxxxx110100xxxxx001001101xxxxx : xlate[255:0]="FDIVs"; | |
17224 | 32'b10xxxxx110100xxxxx001001110xxxxx : xlate[255:0]="FDIVd"; | |
17225 | 32'b10xxxxx110100xxxxx000101001xxxxx : xlate[255:0]="FSQRTs"; | |
17226 | 32'b10xxxxx110100xxxxx000101010xxxxx : xlate[255:0]="FSQRTd"; | |
17227 | 32'b10xxxxx111011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSH"; | |
17228 | 32'b10xxxxx111011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="FLUSHi"; | |
17229 | 32'b10xxxxx101011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSHw"; | |
17230 | 32'b10xxxxx111000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="JMPL"; | |
17231 | 32'b10xxxxx111000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="JMPLi"; | |
17232 | 32'b11xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDF"; | |
17233 | 32'b11xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDF"; | |
17234 | 32'b1100000100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFSR"; | |
17235 | 32'b1100001100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXFSR"; | |
17236 | 32'b11xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFi"; | |
17237 | 32'b11xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFi"; | |
17238 | 32'b1100000100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFSRi"; | |
17239 | 32'b1100001100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXFSRi"; | |
17240 | 32'b11xxxxx110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFA"; | |
17241 | 32'b11xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDFA"; | |
17242 | 32'b11xxxxx110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFAi"; | |
17243 | 32'b11xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFAi"; | |
17244 | 32'b11xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSB"; | |
17245 | 32'b11xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSH"; | |
17246 | 32'b11xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSW"; | |
17247 | 32'b11xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUB"; | |
17248 | 32'b11xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUH"; | |
17249 | 32'b11xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUW"; | |
17250 | 32'b11xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDX"; | |
17251 | 32'b11xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDD"; | |
17252 | 32'b11xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBi"; | |
17253 | 32'b11xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHi"; | |
17254 | 32'b11xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWi"; | |
17255 | 32'b11xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBi"; | |
17256 | 32'b11xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHi"; | |
17257 | 32'b11xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWi"; | |
17258 | 32'b11xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXi"; | |
17259 | 32'b11xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDi"; | |
17260 | 32'b11xxxxx011001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSBA"; | |
17261 | 32'b11xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSHA"; | |
17262 | 32'b11xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSWA"; | |
17263 | 32'b11xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUBA"; | |
17264 | 32'b11xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUHA"; | |
17265 | 32'b11xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUWA"; | |
17266 | 32'b11xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXA"; | |
17267 | 32'b11xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDA"; | |
17268 | 32'b11xxxxx011001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBAi"; | |
17269 | 32'b11xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHAi"; | |
17270 | 32'b11xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWAi"; | |
17271 | 32'b11xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBAi"; | |
17272 | 32'b11xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHAi"; | |
17273 | 32'b11xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWAi"; | |
17274 | 32'b11xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXAi"; | |
17275 | 32'b11xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDAi"; | |
17276 | 32'b11xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUB"; | |
17277 | 32'b11xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBi"; | |
17278 | 32'b11xxxxx011101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUBA"; | |
17279 | 32'b11xxxxx011101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBAi"; | |
17280 | 32'b10xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="AND"; | |
17281 | 32'b10xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDcc"; | |
17282 | 32'b10xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDN"; | |
17283 | 32'b10xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDNcc"; | |
17284 | 32'b10xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="OR"; | |
17285 | 32'b10xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORcc"; | |
17286 | 32'b10xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORN"; | |
17287 | 32'b10xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORNcc"; | |
17288 | 32'b10xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XOR"; | |
17289 | 32'b10xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XORcc"; | |
17290 | 32'b10xxxxx000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNOR"; | |
17291 | 32'b10xxxxx010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNORcc"; | |
17292 | 32'b10xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDi"; | |
17293 | 32'b10xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDcci"; | |
17294 | 32'b10xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNi"; | |
17295 | 32'b10xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNcci"; | |
17296 | 32'b10xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORi"; | |
17297 | 32'b10xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORcci"; | |
17298 | 32'b10xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNi"; | |
17299 | 32'b10xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNcci"; | |
17300 | 32'b10xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORi"; | |
17301 | 32'b10xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORcci"; | |
17302 | 32'b10xxxxx000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORi"; | |
17303 | 32'b10xxxxx010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORcci"; | |
17304 | 32'b1000000101000011111xxxxxxxxxxxxx : xlate[255:0]="MEMBAR"; | |
17305 | 32'b1000000101000011110xxxxxxxxxxxxx : xlate[255:0]="STBAR"; | |
17306 | 32'b10xxxxx101000000000xxxxxxxxxxxxx : xlate[255:0]="RDY"; | |
17307 | 32'b10xxxxx101000000100xxxxxxxxxxxxx : xlate[255:0]="RDCCR"; | |
17308 | 32'b10xxxxx101000000110xxxxxxxxxxxxx : xlate[255:0]="RDASI"; | |
17309 | 32'b10xxxxx101000001000xxxxxxxxxxxxx : xlate[255:0]="RDTICK"; | |
17310 | 32'b10xxxxx101000001010xxxxxxxxxxxxx : xlate[255:0]="RDPC"; | |
17311 | 32'b10xxxxx101000001100xxxxxxxxxxxxx : xlate[255:0]="RDFPRS"; | |
17312 | 32'b10xxxxx101000100110xxxxxxxxxxxxx : xlate[255:0]="RDGSR"; | |
17313 | 32'b10xxxxx101000100000xxxxxxxxxxxxx : xlate[255:0]="RDPCR"; | |
17314 | 32'b10xxxxx101000100010xxxxxxxxxxxxx : xlate[255:0]="RDPIC"; | |
17315 | 32'b10xxxxx1101010xxxx0xx000001xxxxx : xlate[255:0]="FMOVSfcc"; | |
17316 | 32'b10xxxxx1101010xxxx1xx000001xxxxx : xlate[255:0]="FMOVSxcc"; | |
17317 | 32'b10xxxxx1101010xxxx0xx000010xxxxx : xlate[255:0]="FMOVDfcc"; | |
17318 | 32'b10xxxxx1101010xxxx1xx000010xxxxx : xlate[255:0]="FMOVDxcc"; | |
17319 | 32'b10xxxxx110101xxxxx0xx100101xxxxx : xlate[255:0]="FMOVrS1"; | |
17320 | 32'b10xxxxx110101xxxxx0x1x00101xxxxx : xlate[255:0]="FMOVrS2"; | |
17321 | 32'b10xxxxx110101xxxxx0xx100110xxxxx : xlate[255:0]="FMOVrD1"; | |
17322 | 32'b10xxxxx110101xxxxx0x1x00110xxxxx : xlate[255:0]="FMOVrD2"; | |
17323 | 32'b10xxxxx1011001xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVxcc"; | |
17324 | 32'b10xxxxx1011001xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVxcci"; | |
17325 | 32'b10xxxxx1011000xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVfcc"; | |
17326 | 32'b10xxxxx1011000xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVfcci"; | |
17327 | 32'b10xxxxx101111xxxxx0xx1xxxxxxxxxx : xlate[255:0]="MOVR1"; | |
17328 | 32'b10xxxxx101111xxxxx0x1xxxxxxxxxxx : xlate[255:0]="MOVR2"; | |
17329 | 32'b10xxxxx101111xxxxx1xx1xxxxxxxxxx : xlate[255:0]="MOVRi1"; | |
17330 | 32'b10xxxxx101111xxxxx1x1xxxxxxxxxxx : xlate[255:0]="MOVRi2"; | |
17331 | 32'b10xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULX"; | |
17332 | 32'b10xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVX"; | |
17333 | 32'b10xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVX"; | |
17334 | 32'b10xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULXi"; | |
17335 | 32'b10xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVXi"; | |
17336 | 32'b10xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVXi"; | |
17337 | 32'b10xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMUL"; | |
17338 | 32'b10xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMUL"; | |
17339 | 32'b10xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMULcc"; | |
17340 | 32'b10xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMULcc"; | |
17341 | 32'b10xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULi"; | |
17342 | 32'b10xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULi"; | |
17343 | 32'b10xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULcci"; | |
17344 | 32'b10xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULcci"; | |
17345 | 32'b10xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULScc"; | |
17346 | 32'b10xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULScci"; | |
17347 | 32'b10xxxxx101110000000xxxxxxxxxxxxx : xlate[255:0]="POPC"; | |
17348 | 32'b10xxxxx101110000001xxxxxxxxxxxxx : xlate[255:0]="POPCi"; | |
17349 | 32'b11xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCH"; | |
17350 | 32'b11xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHi"; | |
17351 | 32'b11xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCHA"; | |
17352 | 32'b11xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHAi"; | |
17353 | 32'b10xxxxx101010xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDPR"; | |
17354 | 32'b10xxxxx101001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDHPR"; | |
17355 | 32'b10xxxxx111001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RETURN"; | |
17356 | 32'b10xxxxx111001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RETURNi"; | |
17357 | 32'b10xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SAVE"; | |
17358 | 32'b10xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SAVEi"; | |
17359 | 32'b10xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RESTORE"; | |
17360 | 32'b10xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RESTOREi"; | |
17361 | 32'b1000000110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="SAVED"; | |
17362 | 32'b1000001110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RESTORED"; | |
17363 | 32'b00xxxxx100xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="SETHI"; | |
17364 | 32'b10xxxxx100101xxxxx00xxxxxxxxxxxx : xlate[255:0]="SLL"; | |
17365 | 32'b10xxxxx100110xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRL"; | |
17366 | 32'b10xxxxx100111xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRA"; | |
17367 | 32'b10xxxxx100101xxxxx01xxxxxxxxxxxx : xlate[255:0]="SLLX"; | |
17368 | 32'b10xxxxx100110xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRLX"; | |
17369 | 32'b10xxxxx100111xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRAX"; | |
17370 | 32'b10xxxxx100101xxxxx10xxxxxxxxxxxx : xlate[255:0]="SLLi"; | |
17371 | 32'b10xxxxx100110xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRLi"; | |
17372 | 32'b10xxxxx100111xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRAi"; | |
17373 | 32'b10xxxxx100101xxxxx11xxxxxxxxxxxx : xlate[255:0]="SLLXi"; | |
17374 | 32'b10xxxxx100110xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRLXi"; | |
17375 | 32'b10xxxxx100111xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRAXi"; | |
17376 | 32'b11xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STF"; | |
17377 | 32'b11xxxxx100111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDF"; | |
17378 | 32'b1100000100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFSR"; | |
17379 | 32'b1100001100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXFSR"; | |
17380 | 32'b11xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFi"; | |
17381 | 32'b11xxxxx100111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFi"; | |
17382 | 32'b1100000100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFSRi"; | |
17383 | 32'b1100001100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXFSRi"; | |
17384 | 32'b11xxxxx110100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFA"; | |
17385 | 32'b11xxxxx110111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDFA"; | |
17386 | 32'b11xxxxx110100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFAi"; | |
17387 | 32'b11xxxxx110111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFAi"; | |
17388 | 32'b11xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STB"; | |
17389 | 32'b11xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STH"; | |
17390 | 32'b11xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STW"; | |
17391 | 32'b11xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STX"; | |
17392 | 32'b11xxxx0000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STD"; | |
17393 | 32'b11xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBi"; | |
17394 | 32'b11xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHi"; | |
17395 | 32'b11xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWi"; | |
17396 | 32'b11xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXi"; | |
17397 | 32'b11xxxx0000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDi"; | |
17398 | 32'b11xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STBA"; | |
17399 | 32'b11xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STHA"; | |
17400 | 32'b11xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STWA"; | |
17401 | 32'b11xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXA"; | |
17402 | 32'b11xxxx0010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDA"; | |
17403 | 32'b11xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBAi"; | |
17404 | 32'b11xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHAi"; | |
17405 | 32'b11xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWAi"; | |
17406 | 32'b11xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXAi"; | |
17407 | 32'b11xxxx0010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDAi"; | |
17408 | 32'b10xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUB"; | |
17409 | 32'b10xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBcc"; | |
17410 | 32'b10xxxxx001100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBC"; | |
17411 | 32'b10xxxxx011100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBCcc"; | |
17412 | 32'b10xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBi"; | |
17413 | 32'b10xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBcci"; | |
17414 | 32'b10xxxxx001100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCi"; | |
17415 | 32'b10xxxxx011100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCcci"; | |
17416 | 32'b11xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAP"; | |
17417 | 32'b11xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPi"; | |
17418 | 32'b11xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAPA"; | |
17419 | 32'b11xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPAi"; | |
17420 | 32'b10xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDcc"; | |
17421 | 32'b10xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDccTV"; | |
17422 | 32'b10xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDcci"; | |
17423 | 32'b10xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDccTVi"; | |
17424 | 32'b10xxxxx100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBcc"; | |
17425 | 32'b10xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBccTV"; | |
17426 | 32'b10xxxxx100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBcci"; | |
17427 | 32'b10xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBccTVi"; | |
17428 | 32'b10xxxxx111010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TCC"; | |
17429 | 32'b10xxxxx111010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TCCi"; | |
17430 | 32'b10xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPR"; | |
17431 | 32'b10xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPRi"; | |
17432 | 32'b10xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRHPR"; | |
17433 | 32'b10xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRHPRi"; | |
17434 | 32'b1000000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRY"; | |
17435 | 32'b1000010110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRCCR"; | |
17436 | 32'b1000011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRASI"; | |
17437 | 32'b1000110110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRFPRS"; | |
17438 | 32'b1010011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRGSR"; | |
17439 | 32'b1010000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPCR"; | |
17440 | 32'b1010001110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPIC"; | |
17441 | 32'b1000000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRYi"; | |
17442 | 32'b1000010110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRCCRi"; | |
17443 | 32'b1000011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRASIi"; | |
17444 | 32'b1000110110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRFPRSi"; | |
17445 | 32'b1010011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRGSRi"; | |
17446 | 32'b1010000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPCRi"; | |
17447 | 32'b1010001110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPICi"; | |
17448 | 32'b1001111110000000001xxxxxxxxxxxxx : xlate[255:0]="SIR"; | |
17449 | 32'b10xxxxx110110xxxxx001010000xxxxx : xlate[255:0]="FPADD16"; | |
17450 | 32'b10xxxxx110110xxxxx001010001xxxxx : xlate[255:0]="FPADD16S"; | |
17451 | 32'b10xxxxx110110xxxxx001010010xxxxx : xlate[255:0]="FPADD32"; | |
17452 | 32'b10xxxxx110110xxxxx001010011xxxxx : xlate[255:0]="FPADD32S"; | |
17453 | 32'b10xxxxx110110xxxxx001010100xxxxx : xlate[255:0]="FPSUB16"; | |
17454 | 32'b10xxxxx110110xxxxx001010101xxxxx : xlate[255:0]="FPSUB16S"; | |
17455 | 32'b10xxxxx110110xxxxx001010110xxxxx : xlate[255:0]="FPSUB32"; | |
17456 | 32'b10xxxxx110110xxxxx001010111xxxxx : xlate[255:0]="FPSUB32S"; | |
17457 | 32'b10xxxxx110110xxxxx000111011xxxxx : xlate[255:0]="FPACK16"; | |
17458 | 32'b10xxxxx110110xxxxx000111010xxxxx : xlate[255:0]="FPACK32"; | |
17459 | 32'b10xxxxx110110xxxxx000111101xxxxx : xlate[255:0]="FPACKFIX"; | |
17460 | 32'b10xxxxx110110xxxxx001001101xxxxx : xlate[255:0]="FEXPAND"; | |
17461 | 32'b10xxxxx110110xxxxx001001011xxxxx : xlate[255:0]="FPMERGE"; | |
17462 | 32'b10xxxxx110110xxxxx000110001xxxxx : xlate[255:0]="FMUL8x16"; | |
17463 | 32'b10xxxxx110110xxxxx000110011xxxxx : xlate[255:0]="FMUL8x16AU"; | |
17464 | 32'b10xxxxx110110xxxxx000110101xxxxx : xlate[255:0]="FMUL8x16AL"; | |
17465 | 32'b10xxxxx110110xxxxx000110110xxxxx : xlate[255:0]="FMUL8SUx16"; | |
17466 | 32'b10xxxxx110110xxxxx000110111xxxxx : xlate[255:0]="FMUL8ULx16"; | |
17467 | 32'b10xxxxx110110xxxxx000111000xxxxx : xlate[255:0]="FMULD8SUx16"; | |
17468 | 32'b10xxxxx110110xxxxx000111001xxxxx : xlate[255:0]="FMULD8ULx16"; | |
17469 | 32'b10xxxxx110110xxxxx000011000xxxxx : xlate[255:0]="ALIGNADDRESS"; | |
17470 | 32'b10xxxxx110110xxxxx000011010xxxxx : xlate[255:0]="ALIGNADDRESS_LITTLE"; | |
17471 | 32'b10xxxxx110110xxxxx000011001xxxxx : xlate[255:0]="BMASK"; | |
17472 | 32'b10xxxxx110110xxxxx001001000xxxxx : xlate[255:0]="FALIGNDATA"; | |
17473 | 32'b10xxxxx110110xxxxx001001100xxxxx : xlate[255:0]="BSHUFFLE"; | |
17474 | 32'b10xxxxx110110xxxxx001100000xxxxx : xlate[255:0]="FZERO"; | |
17475 | 32'b10xxxxx110110xxxxx001100001xxxxx : xlate[255:0]="FZEROS"; | |
17476 | 32'b10xxxxx110110xxxxx001111110xxxxx : xlate[255:0]="FONE"; | |
17477 | 32'b10xxxxx110110xxxxx001111111xxxxx : xlate[255:0]="FONES"; | |
17478 | 32'b10xxxxx110110xxxxx001110100xxxxx : xlate[255:0]="FSRC1"; | |
17479 | 32'b10xxxxx110110xxxxx001110101xxxxx : xlate[255:0]="FSRC1S"; | |
17480 | 32'b10xxxxx110110xxxxx001111000xxxxx : xlate[255:0]="FSRC2"; | |
17481 | 32'b10xxxxx110110xxxxx001111001xxxxx : xlate[255:0]="FSRC2S"; | |
17482 | 32'b10xxxxx110110xxxxx001101010xxxxx : xlate[255:0]="FNOT1"; | |
17483 | 32'b10xxxxx110110xxxxx001101011xxxxx : xlate[255:0]="FNOT1S"; | |
17484 | 32'b10xxxxx110110xxxxx001100110xxxxx : xlate[255:0]="FNOT2"; | |
17485 | 32'b10xxxxx110110xxxxx001100111xxxxx : xlate[255:0]="FNOT2S"; | |
17486 | 32'b10xxxxx110110xxxxx001111100xxxxx : xlate[255:0]="FOR"; | |
17487 | 32'b10xxxxx110110xxxxx001111101xxxxx : xlate[255:0]="FORS"; | |
17488 | 32'b10xxxxx110110xxxxx001100010xxxxx : xlate[255:0]="FNOR"; | |
17489 | 32'b10xxxxx110110xxxxx001100011xxxxx : xlate[255:0]="FNORS"; | |
17490 | 32'b10xxxxx110110xxxxx001110000xxxxx : xlate[255:0]="FAND"; | |
17491 | 32'b10xxxxx110110xxxxx001110001xxxxx : xlate[255:0]="FANDS"; | |
17492 | 32'b10xxxxx110110xxxxx001101110xxxxx : xlate[255:0]="FNAND"; | |
17493 | 32'b10xxxxx110110xxxxx001101111xxxxx : xlate[255:0]="FNANDS"; | |
17494 | 32'b10xxxxx110110xxxxx001101100xxxxx : xlate[255:0]="FXOR"; | |
17495 | 32'b10xxxxx110110xxxxx001101101xxxxx : xlate[255:0]="FXORS"; | |
17496 | 32'b10xxxxx110110xxxxx001110010xxxxx : xlate[255:0]="FXNOR"; | |
17497 | 32'b10xxxxx110110xxxxx001110011xxxxx : xlate[255:0]="FXNORS"; | |
17498 | 32'b10xxxxx110110xxxxx001111010xxxxx : xlate[255:0]="FORNOT1"; | |
17499 | 32'b10xxxxx110110xxxxx001111011xxxxx : xlate[255:0]="FORNOT1S"; | |
17500 | 32'b10xxxxx110110xxxxx001110110xxxxx : xlate[255:0]="FORNOT2"; | |
17501 | 32'b10xxxxx110110xxxxx001110111xxxxx : xlate[255:0]="FORNOT2S"; | |
17502 | 32'b10xxxxx110110xxxxx001101000xxxxx : xlate[255:0]="FANDNOT1"; | |
17503 | 32'b10xxxxx110110xxxxx001101001xxxxx : xlate[255:0]="FANDNOT1S"; | |
17504 | 32'b10xxxxx110110xxxxx001100100xxxxx : xlate[255:0]="FANDNOT2"; | |
17505 | 32'b10xxxxx110110xxxxx001100101xxxxx : xlate[255:0]="FANDNOT2S"; | |
17506 | 32'b10xxxxx110110xxxxx000101000xxxxx : xlate[255:0]="FCMPGT16"; | |
17507 | 32'b10xxxxx110110xxxxx000101100xxxxx : xlate[255:0]="FCMPGT32"; | |
17508 | 32'b10xxxxx110110xxxxx000100000xxxxx : xlate[255:0]="FCMPLE16"; | |
17509 | 32'b10xxxxx110110xxxxx000100100xxxxx : xlate[255:0]="FCMPLE32"; | |
17510 | 32'b10xxxxx110110xxxxx000100010xxxxx : xlate[255:0]="FCMPNE16"; | |
17511 | 32'b10xxxxx110110xxxxx000100110xxxxx : xlate[255:0]="FCMPNE32"; | |
17512 | 32'b10xxxxx110110xxxxx000101010xxxxx : xlate[255:0]="FCMPEQ16"; | |
17513 | 32'b10xxxxx110110xxxxx000101110xxxxx : xlate[255:0]="FCMPEQ32"; | |
17514 | 32'b10xxxxx110110xxxxx000111110xxxxx : xlate[255:0]="PDIST"; | |
17515 | 32'b10xxxxx110110xxxxx000000000xxxxx : xlate[255:0]="EDGE8"; | |
17516 | 32'b10xxxxx110110xxxxx000000001xxxxx : xlate[255:0]="EDGE8N"; | |
17517 | 32'b10xxxxx110110xxxxx000000010xxxxx : xlate[255:0]="EDGE8L"; | |
17518 | 32'b10xxxxx110110xxxxx000000011xxxxx : xlate[255:0]="EDGE8LN"; | |
17519 | 32'b10xxxxx110110xxxxx000000100xxxxx : xlate[255:0]="EDGE16"; | |
17520 | 32'b10xxxxx110110xxxxx000000101xxxxx : xlate[255:0]="EDGE16N"; | |
17521 | 32'b10xxxxx110110xxxxx000000110xxxxx : xlate[255:0]="EDGE16L"; | |
17522 | 32'b10xxxxx110110xxxxx000000111xxxxx : xlate[255:0]="EDGE16LN"; | |
17523 | 32'b10xxxxx110110xxxxx000001000xxxxx : xlate[255:0]="EDGE32"; | |
17524 | 32'b10xxxxx110110xxxxx000001001xxxxx : xlate[255:0]="EDGE32N"; | |
17525 | 32'b10xxxxx110110xxxxx000001010xxxxx : xlate[255:0]="EDGE32L"; | |
17526 | 32'b10xxxxx110110xxxxx000001011xxxxx : xlate[255:0]="EDGE32LN"; | |
17527 | 32'b10xxxxx110110xxxxx000010000xxxxx : xlate[255:0]="ARRAY8"; | |
17528 | 32'b10xxxxx110110xxxxx000010010xxxxx : xlate[255:0]="ARRAY16"; | |
17529 | 32'b10xxxxx110110xxxxx000010100xxxxx : xlate[255:0]="ARRAY32"; | |
17530 | 32'b10xxxxx110110xxxxx010000001xxxxx : xlate[255:0]="SIAM"; | |
17531 | default : xlate[255:0]="unknown"; | |
17532 | endcase | |
17533 | end | |
17534 | endfunction // xlate | |
17535 | ||
17536 | ||
17537 | `endif | |
17538 | ||
17539 | endmodule | |
17540 | ||
17541 | `endif | |
17542 | ||
17543 | ||
17544 | `ifdef CORE_7 | |
17545 | ||
17546 | module 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 | ||
17723 | integer i; | |
17724 | integer start_dmiss0; | |
17725 | integer start_dmiss1; | |
17726 | integer start_dmiss2; | |
17727 | integer start_dmiss3; | |
17728 | integer start_dmiss4; | |
17729 | integer start_dmiss5; | |
17730 | integer start_dmiss6; | |
17731 | integer start_dmiss7; | |
17732 | integer number_dmiss; | |
17733 | integer start_imiss0; | |
17734 | integer start_imiss1; | |
17735 | integer start_imiss2; | |
17736 | integer start_imiss3; | |
17737 | integer start_imiss4; | |
17738 | integer start_imiss5; | |
17739 | integer start_imiss6; | |
17740 | integer start_imiss7; | |
17741 | integer active_imiss0; | |
17742 | integer active_imiss1; | |
17743 | integer active_imiss2; | |
17744 | integer active_imiss3; | |
17745 | integer active_imiss4; | |
17746 | integer active_imiss5; | |
17747 | integer active_imiss6; | |
17748 | integer active_imiss7; | |
17749 | integer first_imiss0; | |
17750 | integer first_imiss1; | |
17751 | integer first_imiss2; | |
17752 | integer first_imiss3; | |
17753 | integer first_imiss4; | |
17754 | integer first_imiss5; | |
17755 | integer first_imiss6; | |
17756 | integer first_imiss7; | |
17757 | integer number_imiss; | |
17758 | integer clock; | |
17759 | integer sum_dmiss_latency; | |
17760 | integer sum_imiss_latency; | |
17761 | reg spec_dmiss; | |
17762 | integer dmiss_cnt; | |
17763 | integer imiss_cnt; | |
17764 | reg pcx_req; | |
17765 | integer l15dmiss_cnt; | |
17766 | integer l15imiss_cnt; | |
17767 | ||
17768 | ||
17769 | initial 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 | ||
17825 | end //} | |
17826 | ||
17827 | wire [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 | ||
17836 | wire [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}; | |
17844 | wire [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 | |
17859 | wire [63:0] ctxt_z_tsb_cfg0_reg [7:0]; // 1 per thread | |
17860 | wire [63:0] ctxt_z_tsb_cfg1_reg [7:0]; | |
17861 | wire [63:0] ctxt_z_tsb_cfg2_reg [7:0]; | |
17862 | wire [63:0] ctxt_z_tsb_cfg3_reg [7:0]; | |
17863 | wire [63:0] ctxt_nz_tsb_cfg0_reg [7:0]; | |
17864 | wire [63:0] ctxt_nz_tsb_cfg1_reg [7:0]; | |
17865 | wire [63:0] ctxt_nz_tsb_cfg2_reg [7:0]; | |
17866 | wire [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 | ||
17884 | wire [83:0] mmu_mra0_a0 = `SPC7.mmu.mra0.array.mem[0]; | |
17885 | wire [83:0] mmu_mra0_a8 = `SPC7.mmu.mra0.array.mem[8]; | |
17886 | wire [83:0] mmu_mra0_a16 = `SPC7.mmu.mra0.array.mem[16]; | |
17887 | wire [83:0] mmu_mra0_a24 = `SPC7.mmu.mra0.array.mem[24]; | |
17888 | wire [83:0] mmu_mra0_a1 = `SPC7.mmu.mra0.array.mem[1]; | |
17889 | wire [83:0] mmu_mra0_a9 = `SPC7.mmu.mra0.array.mem[9]; | |
17890 | wire [83:0] mmu_mra0_a17 = `SPC7.mmu.mra0.array.mem[17]; | |
17891 | wire [83:0] mmu_mra0_a25 = `SPC7.mmu.mra0.array.mem[25]; | |
17892 | wire [83:0] mmu_mra0_a2 = `SPC7.mmu.mra0.array.mem[2]; | |
17893 | wire [83:0] mmu_mra0_a10 = `SPC7.mmu.mra0.array.mem[10]; | |
17894 | wire [83:0] mmu_mra0_a18 = `SPC7.mmu.mra0.array.mem[18]; | |
17895 | wire [83:0] mmu_mra0_a26 = `SPC7.mmu.mra0.array.mem[26]; | |
17896 | wire [83:0] mmu_mra0_a3 = `SPC7.mmu.mra0.array.mem[3]; | |
17897 | wire [83:0] mmu_mra0_a11 = `SPC7.mmu.mra0.array.mem[11]; | |
17898 | wire [83:0] mmu_mra0_a19 = `SPC7.mmu.mra0.array.mem[19]; | |
17899 | wire [83:0] mmu_mra0_a27 = `SPC7.mmu.mra0.array.mem[27]; | |
17900 | wire [83:0] mmu_mra1_a0 = `SPC7.mmu.mra1.array.mem[0]; | |
17901 | wire [83:0] mmu_mra1_a8 = `SPC7.mmu.mra1.array.mem[8]; | |
17902 | wire [83:0] mmu_mra1_a16 = `SPC7.mmu.mra1.array.mem[16]; | |
17903 | wire [83:0] mmu_mra1_a24 = `SPC7.mmu.mra1.array.mem[24]; | |
17904 | wire [83:0] mmu_mra1_a1 = `SPC7.mmu.mra1.array.mem[1]; | |
17905 | wire [83:0] mmu_mra1_a9 = `SPC7.mmu.mra1.array.mem[9]; | |
17906 | wire [83:0] mmu_mra1_a17 = `SPC7.mmu.mra1.array.mem[17]; | |
17907 | wire [83:0] mmu_mra1_a25 = `SPC7.mmu.mra1.array.mem[25]; | |
17908 | wire [83:0] mmu_mra1_a2 = `SPC7.mmu.mra1.array.mem[2]; | |
17909 | wire [83:0] mmu_mra1_a10 = `SPC7.mmu.mra1.array.mem[10]; | |
17910 | wire [83:0] mmu_mra1_a18 = `SPC7.mmu.mra1.array.mem[18]; | |
17911 | wire [83:0] mmu_mra1_a26 = `SPC7.mmu.mra1.array.mem[26]; | |
17912 | wire [83:0] mmu_mra1_a3 = `SPC7.mmu.mra1.array.mem[3]; | |
17913 | wire [83:0] mmu_mra1_a11 = `SPC7.mmu.mra1.array.mem[11]; | |
17914 | wire [83:0] mmu_mra1_a19 = `SPC7.mmu.mra1.array.mem[19]; | |
17915 | wire [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. | |
17920 | assign 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 | }; | |
17927 | assign 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 | }; | |
17934 | assign 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 | }; | |
17941 | assign 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 | }; | |
17948 | assign 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 | }; | |
17955 | assign 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 | }; | |
17962 | assign 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 | }; | |
17969 | assign 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. | |
17979 | assign 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 | }; | |
17986 | assign 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 | }; | |
17993 | assign 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 | }; | |
18000 | assign 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 | }; | |
18007 | assign 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 | }; | |
18014 | assign 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 | }; | |
18021 | assign 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 | }; | |
18028 | assign 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. | |
18038 | assign 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 | }; | |
18045 | assign 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 | }; | |
18052 | assign 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 | }; | |
18059 | assign 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 | }; | |
18066 | assign 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 | }; | |
18073 | assign 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 | }; | |
18080 | assign 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 | }; | |
18087 | assign 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. | |
18097 | assign 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 | }; | |
18104 | assign 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 | }; | |
18111 | assign 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 | }; | |
18118 | assign 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 | }; | |
18125 | assign 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 | }; | |
18132 | assign 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 | }; | |
18139 | assign 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 | }; | |
18146 | assign 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. | |
18156 | assign 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 | }; | |
18163 | assign 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 | }; | |
18170 | assign 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 | }; | |
18177 | assign 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 | }; | |
18184 | assign 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 | }; | |
18191 | assign 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 | }; | |
18198 | assign 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 | }; | |
18205 | assign 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. | |
18215 | assign 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 | }; | |
18222 | assign 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 | }; | |
18229 | assign 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 | }; | |
18236 | assign 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 | }; | |
18243 | assign 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 | }; | |
18250 | assign 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 | }; | |
18257 | assign 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 | }; | |
18264 | assign 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. | |
18274 | assign 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 | }; | |
18281 | assign 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 | }; | |
18288 | assign 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 | }; | |
18295 | assign 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 | }; | |
18302 | assign 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 | }; | |
18309 | assign 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 | }; | |
18316 | assign 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 | }; | |
18323 | assign 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. | |
18333 | assign 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 | }; | |
18340 | assign 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 | }; | |
18347 | assign 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 | }; | |
18354 | assign 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 | }; | |
18361 | assign 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 | }; | |
18368 | assign 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 | }; | |
18375 | assign 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 | }; | |
18382 | assign 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 | |
18401 | wire [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) | |
18416 | wire [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 | ||
18429 | wire [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 | ||
18440 | reg tlb_bypass_m; | |
18441 | reg tlb_bypass_b; | |
18442 | reg tlb_rd_vld_m; | |
18443 | reg tlb_rd_vld_b; | |
18444 | reg lsu_tl_gt_0_b; | |
18445 | reg [7:0] dcc_asi_b; | |
18446 | reg asi_internal_w; | |
18447 | ||
18448 | always @ (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; | |
18469 | end // } | |
18470 | ||
18471 | // TL determines whether Nucleus or Primary | |
18472 | wire [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 | ||
18476 | wire [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 | ||
18502 | wire [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 | ||
18528 | wire 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 | ||
18532 | wire [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 | ||
18542 | wire [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 | ||
18554 | reg [71:0] tick_cmpr_0; | |
18555 | reg [71:0] stick_cmpr_0; | |
18556 | reg [71:0] hstick_cmpr_0; | |
18557 | reg [151:0] trap_entry_1_t0; | |
18558 | reg [151:0] trap_entry_2_t0; | |
18559 | reg [151:0] trap_entry_3_t0; | |
18560 | reg [151:0] trap_entry_4_t0; | |
18561 | reg [151:0] trap_entry_5_t0; | |
18562 | reg [151:0] trap_entry_6_t0; | |
18563 | ||
18564 | always @(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 | ||
18577 | end // } | |
18578 | reg [71:0] tick_cmpr_1; | |
18579 | reg [71:0] stick_cmpr_1; | |
18580 | reg [71:0] hstick_cmpr_1; | |
18581 | reg [151:0] trap_entry_1_t1; | |
18582 | reg [151:0] trap_entry_2_t1; | |
18583 | reg [151:0] trap_entry_3_t1; | |
18584 | reg [151:0] trap_entry_4_t1; | |
18585 | reg [151:0] trap_entry_5_t1; | |
18586 | reg [151:0] trap_entry_6_t1; | |
18587 | ||
18588 | always @(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 | ||
18601 | end // } | |
18602 | reg [71:0] tick_cmpr_2; | |
18603 | reg [71:0] stick_cmpr_2; | |
18604 | reg [71:0] hstick_cmpr_2; | |
18605 | reg [151:0] trap_entry_1_t2; | |
18606 | reg [151:0] trap_entry_2_t2; | |
18607 | reg [151:0] trap_entry_3_t2; | |
18608 | reg [151:0] trap_entry_4_t2; | |
18609 | reg [151:0] trap_entry_5_t2; | |
18610 | reg [151:0] trap_entry_6_t2; | |
18611 | ||
18612 | always @(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 | ||
18625 | end // } | |
18626 | reg [71:0] tick_cmpr_3; | |
18627 | reg [71:0] stick_cmpr_3; | |
18628 | reg [71:0] hstick_cmpr_3; | |
18629 | reg [151:0] trap_entry_1_t3; | |
18630 | reg [151:0] trap_entry_2_t3; | |
18631 | reg [151:0] trap_entry_3_t3; | |
18632 | reg [151:0] trap_entry_4_t3; | |
18633 | reg [151:0] trap_entry_5_t3; | |
18634 | reg [151:0] trap_entry_6_t3; | |
18635 | ||
18636 | always @(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 | ||
18649 | end // } | |
18650 | reg [71:0] tick_cmpr_4; | |
18651 | reg [71:0] stick_cmpr_4; | |
18652 | reg [71:0] hstick_cmpr_4; | |
18653 | reg [151:0] trap_entry_1_t4; | |
18654 | reg [151:0] trap_entry_2_t4; | |
18655 | reg [151:0] trap_entry_3_t4; | |
18656 | reg [151:0] trap_entry_4_t4; | |
18657 | reg [151:0] trap_entry_5_t4; | |
18658 | reg [151:0] trap_entry_6_t4; | |
18659 | ||
18660 | always @(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 | ||
18673 | end // } | |
18674 | reg [71:0] tick_cmpr_5; | |
18675 | reg [71:0] stick_cmpr_5; | |
18676 | reg [71:0] hstick_cmpr_5; | |
18677 | reg [151:0] trap_entry_1_t5; | |
18678 | reg [151:0] trap_entry_2_t5; | |
18679 | reg [151:0] trap_entry_3_t5; | |
18680 | reg [151:0] trap_entry_4_t5; | |
18681 | reg [151:0] trap_entry_5_t5; | |
18682 | reg [151:0] trap_entry_6_t5; | |
18683 | ||
18684 | always @(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 | ||
18697 | end // } | |
18698 | reg [71:0] tick_cmpr_6; | |
18699 | reg [71:0] stick_cmpr_6; | |
18700 | reg [71:0] hstick_cmpr_6; | |
18701 | reg [151:0] trap_entry_1_t6; | |
18702 | reg [151:0] trap_entry_2_t6; | |
18703 | reg [151:0] trap_entry_3_t6; | |
18704 | reg [151:0] trap_entry_4_t6; | |
18705 | reg [151:0] trap_entry_5_t6; | |
18706 | reg [151:0] trap_entry_6_t6; | |
18707 | ||
18708 | always @(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 | ||
18721 | end // } | |
18722 | reg [71:0] tick_cmpr_7; | |
18723 | reg [71:0] stick_cmpr_7; | |
18724 | reg [71:0] hstick_cmpr_7; | |
18725 | reg [151:0] trap_entry_1_t7; | |
18726 | reg [151:0] trap_entry_2_t7; | |
18727 | reg [151:0] trap_entry_3_t7; | |
18728 | reg [151:0] trap_entry_4_t7; | |
18729 | reg [151:0] trap_entry_5_t7; | |
18730 | reg [151:0] trap_entry_6_t7; | |
18731 | ||
18732 | always @(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 | ||
18745 | end // } | |
18746 | ||
18747 | //------------------------------------ | |
18748 | // ASI & Trap State machines | |
18749 | always @(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 | ||
18838 | end // } | |
18839 | ||
18840 | ||
18841 | always @(posedge `BENCH_SPC7_GCLK) begin | |
18842 | ||
18843 | // debug code for TPCC analysis | |
18844 | `ifdef TPCC | |
18845 | if (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 | |
18855 | end | |
18856 | ||
18857 | pcx_req <= |`SPC7.spc_pcx_req_pq[8:0]; | |
18858 | ||
18859 | if (`SPC7.ifu_l15_valid==1) begin | |
18860 | imiss_cnt=imiss_cnt+1; | |
18861 | $display("imiss cnt is %0d",imiss_cnt); | |
18862 | end | |
18863 | if (spec_dmiss==1 && `SPC7.lsu_l15_cancel==0) begin | |
18864 | dmiss_cnt=dmiss_cnt+1; | |
18865 | $display("dmiss cnt is %0d",dmiss_cnt); | |
18866 | ||
18867 | end | |
18868 | spec_dmiss <= `SPC7.lsu_l15_valid & `SPC7.lsu_l15_load; | |
18869 | ||
18870 | clock = clock+1; | |
18871 | ||
18872 | // keep track of imiss latencies | |
18873 | if (`SPC7.ftu_agc_thr0_cmiss_c==1) begin | |
18874 | start_imiss0=clock; | |
18875 | active_imiss0=1; | |
18876 | end | |
18877 | if (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; | |
18883 | end | |
18884 | if (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; | |
18886 | end | |
18887 | if (`SPC7.ftu_agc_thr1_cmiss_c==1) begin | |
18888 | start_imiss1=clock; | |
18889 | active_imiss1=1; | |
18890 | end | |
18891 | if (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; | |
18897 | end | |
18898 | if (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; | |
18900 | end | |
18901 | if (`SPC7.ftu_agc_thr2_cmiss_c==1) begin | |
18902 | start_imiss2=clock; | |
18903 | active_imiss2=1; | |
18904 | end | |
18905 | if (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; | |
18911 | end | |
18912 | if (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; | |
18914 | end | |
18915 | if (`SPC7.ftu_agc_thr3_cmiss_c==1) begin | |
18916 | start_imiss3=clock; | |
18917 | active_imiss3=1; | |
18918 | end | |
18919 | if (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; | |
18925 | end | |
18926 | if (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; | |
18928 | end | |
18929 | if (`SPC7.ftu_agc_thr4_cmiss_c==1) begin | |
18930 | start_imiss4=clock; | |
18931 | active_imiss4=1; | |
18932 | end | |
18933 | if (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; | |
18939 | end | |
18940 | if (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; | |
18942 | end | |
18943 | if (`SPC7.ftu_agc_thr5_cmiss_c==1) begin | |
18944 | start_imiss5=clock; | |
18945 | active_imiss5=1; | |
18946 | end | |
18947 | if (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; | |
18953 | end | |
18954 | if (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; | |
18956 | end | |
18957 | if (`SPC7.ftu_agc_thr6_cmiss_c==1) begin | |
18958 | start_imiss6=clock; | |
18959 | active_imiss6=1; | |
18960 | end | |
18961 | if (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; | |
18967 | end | |
18968 | if (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; | |
18970 | end | |
18971 | if (`SPC7.ftu_agc_thr7_cmiss_c==1) begin | |
18972 | start_imiss7=clock; | |
18973 | active_imiss7=1; | |
18974 | end | |
18975 | if (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; | |
18981 | end | |
18982 | if (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; | |
18984 | end | |
18985 | ||
18986 | if (`SPC7.pku.swl0.set_lsu_sync_wait==1) begin | |
18987 | start_dmiss0=clock; | |
18988 | end | |
18989 | if (`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); | |
18993 | end | |
18994 | if (`SPC7.pku.swl1.set_lsu_sync_wait==1) begin | |
18995 | start_dmiss1=clock; | |
18996 | end | |
18997 | if (`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); | |
19001 | end | |
19002 | if (`SPC7.pku.swl2.set_lsu_sync_wait==1) begin | |
19003 | start_dmiss2=clock; | |
19004 | end | |
19005 | if (`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); | |
19009 | end | |
19010 | if (`SPC7.pku.swl3.set_lsu_sync_wait==1) begin | |
19011 | start_dmiss3=clock; | |
19012 | end | |
19013 | if (`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); | |
19017 | end | |
19018 | if (`SPC7.pku.swl4.set_lsu_sync_wait==1) begin | |
19019 | start_dmiss4=clock; | |
19020 | end | |
19021 | if (`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); | |
19025 | end | |
19026 | if (`SPC7.pku.swl5.set_lsu_sync_wait==1) begin | |
19027 | start_dmiss5=clock; | |
19028 | end | |
19029 | if (`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); | |
19033 | end | |
19034 | if (`SPC7.pku.swl6.set_lsu_sync_wait==1) begin | |
19035 | start_dmiss6=clock; | |
19036 | end | |
19037 | if (`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); | |
19041 | end | |
19042 | if (`SPC7.pku.swl7.set_lsu_sync_wait==1) begin | |
19043 | start_dmiss7=clock; | |
19044 | end | |
19045 | if (`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); | |
19049 | end | |
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 | ||
19240 | end // 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 | |
19245 | assign return0 = `SPC7.exu0.rml.return_w & | |
19246 | `SPC7.exu0.rml.inst_vld_w; | |
19247 | assign return1 = `SPC7.exu1.rml.return_w & | |
19248 | `SPC7.exu1.rml.inst_vld_w; | |
19249 | assign 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 | |
19263 | assign ex0_tid_e = `SPC7.exu0.ect_tid_lth_e[1:0]; | |
19264 | assign ex0_valid_e = `SPC7.dec.dec_valid_e[0] & ~fgu0_e & ~load0_e & | |
19265 | ~retry0_e & ~done0_e; | |
19266 | assign ex1_tid_e = `SPC7.exu1.ect_tid_lth_e[1:0]; | |
19267 | assign ex1_valid_e = `SPC7.dec.dec_valid_e[1] & ~fgu1_e & ~load1_e & | |
19268 | ~retry1_e & ~done1_e; | |
19269 | ||
19270 | assign ex_asr_valid = `SPC7.lsu.dcc.asi_store_m & `SPC7.lsu.dcc.asi_sync_m ; | |
19271 | ||
19272 | assign 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 | |
19285 | assign 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 | |
19296 | wire [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... | |
19307 | reg [7:0] block_store_w; | |
19308 | always @(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]; | |
19311 | end | |
19312 | ||
19313 | wire [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 | ||
19325 | assign 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 | ||
19339 | assign 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 | |
19347 | assign 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 | |
19360 | wire 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 | ||
19364 | assign fg_cond_fb = fg_cond_fb_pre_err & ~fgu_err_fb; | |
19365 | ||
19366 | // Idiv/Fdiv signals | |
19367 | ||
19368 | assign fgu_idiv_valid = fg_div_valid & div_idest; | |
19369 | ||
19370 | ||
19371 | assign fgu_fdiv_valid = fg_fdiv_valid_fw & div_fdest; | |
19372 | ||
19373 | ||
19374 | // Lsu signals needed to check lsu results | |
19375 | ||
19376 | assign lsu_valid = lsu_check | lsu_data_w; | |
19377 | ||
19378 | assign fg_div_valid = `SPC7.fgu_divide_completion & ~div_special_cancel_f4; | |
19379 | ||
19380 | // State machine asserts lsu_check for LD hit/miss | |
19381 | always @(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 // } | |
19427 | end | |
19428 | ||
19429 | ||
19430 | assign lsu_tid = `SPC7.lsu.dcc.ld_tid_b[2:0]; | |
19431 | // Don't assert LSU_complete in case of dtlb or irf errors | |
19432 | ||
19433 | assign 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 | ||
19438 | assign 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 | ||
19447 | assign lsu_tid_dec_b[0] = `SPC7.lsu.dcc.ld_tid_b[2:0] == 3'd0; | |
19448 | assign lsu_tid_dec_b[1] = `SPC7.lsu.dcc.ld_tid_b[2:0] == 3'd1; | |
19449 | assign lsu_tid_dec_b[2] = `SPC7.lsu.dcc.ld_tid_b[2:0] == 3'd2; | |
19450 | assign lsu_tid_dec_b[3] = `SPC7.lsu.dcc.ld_tid_b[2:0] == 3'd3; | |
19451 | assign lsu_tid_dec_b[4] = `SPC7.lsu.dcc.ld_tid_b[2:0] == 3'd4; | |
19452 | assign lsu_tid_dec_b[5] = `SPC7.lsu.dcc.ld_tid_b[2:0] == 3'd5; | |
19453 | assign lsu_tid_dec_b[6] = `SPC7.lsu.dcc.ld_tid_b[2:0] == 3'd6; | |
19454 | assign lsu_tid_dec_b[7] = `SPC7.lsu.dcc.ld_tid_b[2:0] == 3'd7; | |
19455 | ||
19456 | assign 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); | |
19458 | assign dec_flush_lb = `SPC7.dec.dec_flush_lb | `SPC7.tlu_flush_lsu_b; | |
19459 | ||
19460 | ||
19461 | // LSU interface to CCX stub | |
19462 | ||
19463 | assign exu_lsu_valid = `SPC7.dec.del.lsu_valid_e; | |
19464 | assign exu_lsu_addr[47:0] = `SPC7.exu_lsu_address_e[47:0]; | |
19465 | assign exu_lsu_tid[2:0] = lsu_tid_e[2:0]; | |
19466 | assign exu_lsu_regid[4:0] = `SPC7.dec.dec_lsu_rd_e[4:0]; | |
19467 | assign exu_lsu_data[63:0] = `SPC7.exu_lsu_store_data_e[63:0]; | |
19468 | assign 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]); | |
19472 | assign 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 | ||
19519 | initial 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; | |
19528 | end | |
19529 | ||
19530 | always @(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 | ||
19580 | end //} | |
19581 | ||
19582 | /////////////////////////////////////////////////////////////////////////////// | |
19583 | // Functions | |
19584 | /////////////////////////////////////////////////////////////////////////////// | |
19585 | function [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 | |
19600 | endfunction | |
19601 | ||
19602 | function [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 | |
19617 | endfunction | |
19618 | ||
19619 | //--------------------- | |
19620 | ||
19621 | function [255:0] xlate; | |
19622 | input [31:0] inst; | |
19623 | ||
19624 | begin | |
19625 | casex(inst[31:0]) | |
19626 | 32'b10xxxxx110100xxxxx001000011xxxxx : xlate[255:0]="FADDq"; | |
19627 | 32'b10xxxxx110100xxxxx001000111xxxxx : xlate[255:0]="FSUBq"; | |
19628 | 32'b10000xx110101xxxxx001010011xxxxx : xlate[255:0]="FCMPq"; | |
19629 | 32'b10000xx110101xxxxx001010111xxxxx : xlate[255:0]="FCMPEq"; | |
19630 | 32'b10xxxxx110100xxxxx011001101xxxxx : xlate[255:0]="FsTOq"; | |
19631 | 32'b10xxxxx110100xxxxx011001110xxxxx : xlate[255:0]="FdTOq"; | |
19632 | 32'b10xxxxx110100xxxxx010001100xxxxx : xlate[255:0]="FxTOq"; | |
19633 | 32'b10xxxxx110100xxxxx011001100xxxxx : xlate[255:0]="FiTOq"; | |
19634 | 32'b10xxxxx110100xxxxx000000011xxxxx : xlate[255:0]="FMOVq"; | |
19635 | 32'b10xxxxx110100xxxxx000000111xxxxx : xlate[255:0]="FNEGq"; | |
19636 | 32'b10xxxxx110100xxxxx000001011xxxxx : xlate[255:0]="FABSq"; | |
19637 | 32'b10xxxxx110100xxxxx001001011xxxxx : xlate[255:0]="FMULq"; | |
19638 | 32'b10xxxxx110100xxxxx001101110xxxxx : xlate[255:0]="FdMULq"; | |
19639 | 32'b10xxxxx110100xxxxx001001111xxxxx : xlate[255:0]="FDIVq"; | |
19640 | 32'b10xxxxx110100xxxxx000101011xxxxx : xlate[255:0]="FSQRTq"; | |
19641 | 32'b10xxxxx1101010xxxx0xx100111xxxxx : xlate[255:0]="FMOVrQa"; | |
19642 | 32'b10xxxxx1101010xxxx0x1x00111xxxxx : xlate[255:0]="FMOVrQb"; | |
19643 | 32'b10xxxxx110100xxxxx011010011xxxxx : xlate[255:0]="FqTOi"; | |
19644 | 32'b10xxxxx110100xxxxx010000011xxxxx : xlate[255:0]="FqTOx"; | |
19645 | 32'b10xxxxx110100xxxxx011000111xxxxx : xlate[255:0]="FqTOs"; | |
19646 | 32'b10xxxxx110100xxxxx011001011xxxxx : xlate[255:0]="FqTOd"; | |
19647 | 32'b11xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQF"; | |
19648 | 32'b11xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFi"; | |
19649 | 32'b11xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDQFA"; | |
19650 | 32'b11xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDQFAi"; | |
19651 | 32'b11xxxxx100110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFi"; | |
19652 | 32'b11xxxxx100110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQF"; | |
19653 | 32'b11xxxxx110110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STQFA"; | |
19654 | 32'b11xxxxx110110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STQFAi"; | |
19655 | 32'b10xxxxx1101010xxxxxxx000011xxxxx : xlate[255:0]="FMOVQcc"; | |
19656 | 32'b10xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADD"; | |
19657 | 32'b10xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDcc"; | |
19658 | 32'b10xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDC"; | |
19659 | 32'b10xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ADDCcc"; | |
19660 | 32'b10xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDi"; | |
19661 | 32'b10xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDcci"; | |
19662 | 32'b10xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCi"; | |
19663 | 32'b10xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ADDCcci"; | |
19664 | 32'b00x0xx1011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr1"; | |
19665 | 32'b00x0x1x011xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPr2"; | |
19666 | 32'b00xx000110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfccA"; | |
19667 | 32'b00xx1xx110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc1"; | |
19668 | 32'b00xxx1x110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc2"; | |
19669 | 32'b00xxxx1110xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBfcc3"; | |
19670 | 32'b00xx000101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfccA"; | |
19671 | 32'b00xx1xx101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc1"; | |
19672 | 32'b00xxx1x101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc2"; | |
19673 | 32'b00xxxx1101xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="FBPfcc3"; | |
19674 | 32'b00xx000010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BiccA"; | |
19675 | 32'b00xx1xx010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc1"; | |
19676 | 32'b00xxx1x010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc2"; | |
19677 | 32'b00xxxx1010xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="Bicc3"; | |
19678 | 32'b00xx000001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPccA"; | |
19679 | 32'b00xx1xx001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc1"; | |
19680 | 32'b00xxx1x001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc2"; | |
19681 | 32'b00xxxx1001xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="BPcc3"; | |
19682 | 32'b01xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="CALL"; | |
19683 | 32'b11xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASA"; | |
19684 | 32'b11xxxxx111110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="CASXA"; | |
19685 | 32'b11xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASAi"; | |
19686 | 32'b11xxxxx111110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="CASXAi"; | |
19687 | 32'b10xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIV"; | |
19688 | 32'b10xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIV"; | |
19689 | 32'b10xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVcc"; | |
19690 | 32'b10xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVcc"; | |
19691 | 32'b10xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVi"; | |
19692 | 32'b10xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVi"; | |
19693 | 32'b10xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVcci"; | |
19694 | 32'b10xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVcci"; | |
19695 | 32'b1000000111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="DONE"; | |
19696 | 32'b1000001111110xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RETRY"; | |
19697 | 32'b10xxxxx110100xxxxx001000001xxxxx : xlate[255:0]="FADDs"; | |
19698 | 32'b10xxxxx110100xxxxx001000010xxxxx : xlate[255:0]="FADDd"; | |
19699 | 32'b10xxxxx110100xxxxx001000101xxxxx : xlate[255:0]="FSUBs"; | |
19700 | 32'b10xxxxx110100xxxxx001000110xxxxx : xlate[255:0]="FSUBd"; | |
19701 | 32'b10000xx110101xxxxx001010001xxxxx : xlate[255:0]="FCMPs"; | |
19702 | 32'b10000xx110101xxxxx001010010xxxxx : xlate[255:0]="FCMPd"; | |
19703 | 32'b10000xx110101xxxxx001010101xxxxx : xlate[255:0]="FCMPEs"; | |
19704 | 32'b10000xx110101xxxxx001010110xxxxx : xlate[255:0]="FCMPEd"; | |
19705 | 32'b10xxxxx110100xxxxx010000001xxxxx : xlate[255:0]="FsTOx"; | |
19706 | 32'b10xxxxx110100xxxxx010000010xxxxx : xlate[255:0]="FdTOx"; | |
19707 | 32'b10xxxxx110100xxxxx011010001xxxxx : xlate[255:0]="FsTOi"; | |
19708 | 32'b10xxxxx110100xxxxx011010010xxxxx : xlate[255:0]="FdTOi"; | |
19709 | 32'b10xxxxx110100xxxxx011001001xxxxx : xlate[255:0]="FsTOd"; | |
19710 | 32'b10xxxxx110100xxxxx011000110xxxxx : xlate[255:0]="FdTOs"; | |
19711 | 32'b10xxxxx110100xxxxx010000100xxxxx : xlate[255:0]="FxTOs"; | |
19712 | 32'b10xxxxx110100xxxxx010001000xxxxx : xlate[255:0]="FxTOd"; | |
19713 | 32'b10xxxxx110100xxxxx011000100xxxxx : xlate[255:0]="FiTOs"; | |
19714 | 32'b10xxxxx110100xxxxx011001000xxxxx : xlate[255:0]="FiTOd"; | |
19715 | 32'b10xxxxx110100xxxxx000000001xxxxx : xlate[255:0]="FMOVs"; | |
19716 | 32'b10xxxxx110100xxxxx000000010xxxxx : xlate[255:0]="FMOVd"; | |
19717 | 32'b10xxxxx110100xxxxx000000101xxxxx : xlate[255:0]="FNEGs"; | |
19718 | 32'b10xxxxx110100xxxxx000000110xxxxx : xlate[255:0]="FNEGd"; | |
19719 | 32'b10xxxxx110100xxxxx000001001xxxxx : xlate[255:0]="FABSs"; | |
19720 | 32'b10xxxxx110100xxxxx000001010xxxxx : xlate[255:0]="FABSd"; | |
19721 | 32'b10xxxxx110100xxxxx001001001xxxxx : xlate[255:0]="FMULs"; | |
19722 | 32'b10xxxxx110100xxxxx001001010xxxxx : xlate[255:0]="FMULd"; | |
19723 | 32'b10xxxxx110100xxxxx001101001xxxxx : xlate[255:0]="FsMULd"; | |
19724 | 32'b10xxxxx110100xxxxx001001101xxxxx : xlate[255:0]="FDIVs"; | |
19725 | 32'b10xxxxx110100xxxxx001001110xxxxx : xlate[255:0]="FDIVd"; | |
19726 | 32'b10xxxxx110100xxxxx000101001xxxxx : xlate[255:0]="FSQRTs"; | |
19727 | 32'b10xxxxx110100xxxxx000101010xxxxx : xlate[255:0]="FSQRTd"; | |
19728 | 32'b10xxxxx111011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSH"; | |
19729 | 32'b10xxxxx111011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="FLUSHi"; | |
19730 | 32'b10xxxxx101011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="FLUSHw"; | |
19731 | 32'b10xxxxx111000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="JMPL"; | |
19732 | 32'b10xxxxx111000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="JMPLi"; | |
19733 | 32'b11xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDF"; | |
19734 | 32'b11xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDF"; | |
19735 | 32'b1100000100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFSR"; | |
19736 | 32'b1100001100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXFSR"; | |
19737 | 32'b11xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFi"; | |
19738 | 32'b11xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFi"; | |
19739 | 32'b1100000100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFSRi"; | |
19740 | 32'b1100001100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXFSRi"; | |
19741 | 32'b11xxxxx110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDFA"; | |
19742 | 32'b11xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDFA"; | |
19743 | 32'b11xxxxx110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDFAi"; | |
19744 | 32'b11xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDFAi"; | |
19745 | 32'b11xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSB"; | |
19746 | 32'b11xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSH"; | |
19747 | 32'b11xxxxx001000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSW"; | |
19748 | 32'b11xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUB"; | |
19749 | 32'b11xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUH"; | |
19750 | 32'b11xxxxx000000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUW"; | |
19751 | 32'b11xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDX"; | |
19752 | 32'b11xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDD"; | |
19753 | 32'b11xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBi"; | |
19754 | 32'b11xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHi"; | |
19755 | 32'b11xxxxx001000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWi"; | |
19756 | 32'b11xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBi"; | |
19757 | 32'b11xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHi"; | |
19758 | 32'b11xxxxx000000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWi"; | |
19759 | 32'b11xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXi"; | |
19760 | 32'b11xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDi"; | |
19761 | 32'b11xxxxx011001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSBA"; | |
19762 | 32'b11xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSHA"; | |
19763 | 32'b11xxxxx011000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSWA"; | |
19764 | 32'b11xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUBA"; | |
19765 | 32'b11xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUHA"; | |
19766 | 32'b11xxxxx010000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDUWA"; | |
19767 | 32'b11xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDXA"; | |
19768 | 32'b11xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDDA"; | |
19769 | 32'b11xxxxx011001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSBAi"; | |
19770 | 32'b11xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSHAi"; | |
19771 | 32'b11xxxxx011000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSWAi"; | |
19772 | 32'b11xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUBAi"; | |
19773 | 32'b11xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUHAi"; | |
19774 | 32'b11xxxxx010000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDUWAi"; | |
19775 | 32'b11xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDXAi"; | |
19776 | 32'b11xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDDAi"; | |
19777 | 32'b11xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUB"; | |
19778 | 32'b11xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBi"; | |
19779 | 32'b11xxxxx011101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="LDSTUBA"; | |
19780 | 32'b11xxxxx011101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="LDSTUBAi"; | |
19781 | 32'b10xxxxx000001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="AND"; | |
19782 | 32'b10xxxxx010001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDcc"; | |
19783 | 32'b10xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDN"; | |
19784 | 32'b10xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ANDNcc"; | |
19785 | 32'b10xxxxx000010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="OR"; | |
19786 | 32'b10xxxxx010010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORcc"; | |
19787 | 32'b10xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORN"; | |
19788 | 32'b10xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="ORNcc"; | |
19789 | 32'b10xxxxx000011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XOR"; | |
19790 | 32'b10xxxxx010011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XORcc"; | |
19791 | 32'b10xxxxx000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNOR"; | |
19792 | 32'b10xxxxx010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="XNORcc"; | |
19793 | 32'b10xxxxx000001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDi"; | |
19794 | 32'b10xxxxx010001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDcci"; | |
19795 | 32'b10xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNi"; | |
19796 | 32'b10xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ANDNcci"; | |
19797 | 32'b10xxxxx000010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORi"; | |
19798 | 32'b10xxxxx010010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORcci"; | |
19799 | 32'b10xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNi"; | |
19800 | 32'b10xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="ORNcci"; | |
19801 | 32'b10xxxxx000011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORi"; | |
19802 | 32'b10xxxxx010011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XORcci"; | |
19803 | 32'b10xxxxx000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORi"; | |
19804 | 32'b10xxxxx010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="XNORcci"; | |
19805 | 32'b1000000101000011111xxxxxxxxxxxxx : xlate[255:0]="MEMBAR"; | |
19806 | 32'b1000000101000011110xxxxxxxxxxxxx : xlate[255:0]="STBAR"; | |
19807 | 32'b10xxxxx101000000000xxxxxxxxxxxxx : xlate[255:0]="RDY"; | |
19808 | 32'b10xxxxx101000000100xxxxxxxxxxxxx : xlate[255:0]="RDCCR"; | |
19809 | 32'b10xxxxx101000000110xxxxxxxxxxxxx : xlate[255:0]="RDASI"; | |
19810 | 32'b10xxxxx101000001000xxxxxxxxxxxxx : xlate[255:0]="RDTICK"; | |
19811 | 32'b10xxxxx101000001010xxxxxxxxxxxxx : xlate[255:0]="RDPC"; | |
19812 | 32'b10xxxxx101000001100xxxxxxxxxxxxx : xlate[255:0]="RDFPRS"; | |
19813 | 32'b10xxxxx101000100110xxxxxxxxxxxxx : xlate[255:0]="RDGSR"; | |
19814 | 32'b10xxxxx101000100000xxxxxxxxxxxxx : xlate[255:0]="RDPCR"; | |
19815 | 32'b10xxxxx101000100010xxxxxxxxxxxxx : xlate[255:0]="RDPIC"; | |
19816 | 32'b10xxxxx1101010xxxx0xx000001xxxxx : xlate[255:0]="FMOVSfcc"; | |
19817 | 32'b10xxxxx1101010xxxx1xx000001xxxxx : xlate[255:0]="FMOVSxcc"; | |
19818 | 32'b10xxxxx1101010xxxx0xx000010xxxxx : xlate[255:0]="FMOVDfcc"; | |
19819 | 32'b10xxxxx1101010xxxx1xx000010xxxxx : xlate[255:0]="FMOVDxcc"; | |
19820 | 32'b10xxxxx110101xxxxx0xx100101xxxxx : xlate[255:0]="FMOVrS1"; | |
19821 | 32'b10xxxxx110101xxxxx0x1x00101xxxxx : xlate[255:0]="FMOVrS2"; | |
19822 | 32'b10xxxxx110101xxxxx0xx100110xxxxx : xlate[255:0]="FMOVrD1"; | |
19823 | 32'b10xxxxx110101xxxxx0x1x00110xxxxx : xlate[255:0]="FMOVrD2"; | |
19824 | 32'b10xxxxx1011001xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVxcc"; | |
19825 | 32'b10xxxxx1011001xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVxcci"; | |
19826 | 32'b10xxxxx1011000xxxx0xxxxxxxxxxxxx : xlate[255:0]="MOVfcc"; | |
19827 | 32'b10xxxxx1011000xxxx1xxxxxxxxxxxxx : xlate[255:0]="MOVfcci"; | |
19828 | 32'b10xxxxx101111xxxxx0xx1xxxxxxxxxx : xlate[255:0]="MOVR1"; | |
19829 | 32'b10xxxxx101111xxxxx0x1xxxxxxxxxxx : xlate[255:0]="MOVR2"; | |
19830 | 32'b10xxxxx101111xxxxx1xx1xxxxxxxxxx : xlate[255:0]="MOVRi1"; | |
19831 | 32'b10xxxxx101111xxxxx1x1xxxxxxxxxxx : xlate[255:0]="MOVRi2"; | |
19832 | 32'b10xxxxx001001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULX"; | |
19833 | 32'b10xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SDIVX"; | |
19834 | 32'b10xxxxx001101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UDIVX"; | |
19835 | 32'b10xxxxx001001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULXi"; | |
19836 | 32'b10xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SDIVXi"; | |
19837 | 32'b10xxxxx001101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UDIVXi"; | |
19838 | 32'b10xxxxx001010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMUL"; | |
19839 | 32'b10xxxxx001011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMUL"; | |
19840 | 32'b10xxxxx011010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="UMULcc"; | |
19841 | 32'b10xxxxx011011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SMULcc"; | |
19842 | 32'b10xxxxx001010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULi"; | |
19843 | 32'b10xxxxx001011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULi"; | |
19844 | 32'b10xxxxx011010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="UMULcci"; | |
19845 | 32'b10xxxxx011011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SMULcci"; | |
19846 | 32'b10xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="MULScc"; | |
19847 | 32'b10xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="MULScci"; | |
19848 | 32'b10xxxxx101110000000xxxxxxxxxxxxx : xlate[255:0]="POPC"; | |
19849 | 32'b10xxxxx101110000001xxxxxxxxxxxxx : xlate[255:0]="POPCi"; | |
19850 | 32'b11xxxxx101101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCH"; | |
19851 | 32'b11xxxxx101101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHi"; | |
19852 | 32'b11xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="PREFETCHA"; | |
19853 | 32'b11xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="PREFETCHAi"; | |
19854 | 32'b10xxxxx101010xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDPR"; | |
19855 | 32'b10xxxxx101001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RDHPR"; | |
19856 | 32'b10xxxxx111001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RETURN"; | |
19857 | 32'b10xxxxx111001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RETURNi"; | |
19858 | 32'b10xxxxx111100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SAVE"; | |
19859 | 32'b10xxxxx111100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SAVEi"; | |
19860 | 32'b10xxxxx111101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="RESTORE"; | |
19861 | 32'b10xxxxx111101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="RESTOREi"; | |
19862 | 32'b1000000110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="SAVED"; | |
19863 | 32'b1000001110001xxxxxxxxxxxxxxxxxxx : xlate[255:0]="RESTORED"; | |
19864 | 32'b00xxxxx100xxxxxxxxxxxxxxxxxxxxxx : xlate[255:0]="SETHI"; | |
19865 | 32'b10xxxxx100101xxxxx00xxxxxxxxxxxx : xlate[255:0]="SLL"; | |
19866 | 32'b10xxxxx100110xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRL"; | |
19867 | 32'b10xxxxx100111xxxxx00xxxxxxxxxxxx : xlate[255:0]="SRA"; | |
19868 | 32'b10xxxxx100101xxxxx01xxxxxxxxxxxx : xlate[255:0]="SLLX"; | |
19869 | 32'b10xxxxx100110xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRLX"; | |
19870 | 32'b10xxxxx100111xxxxx01xxxxxxxxxxxx : xlate[255:0]="SRAX"; | |
19871 | 32'b10xxxxx100101xxxxx10xxxxxxxxxxxx : xlate[255:0]="SLLi"; | |
19872 | 32'b10xxxxx100110xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRLi"; | |
19873 | 32'b10xxxxx100111xxxxx10xxxxxxxxxxxx : xlate[255:0]="SRAi"; | |
19874 | 32'b10xxxxx100101xxxxx11xxxxxxxxxxxx : xlate[255:0]="SLLXi"; | |
19875 | 32'b10xxxxx100110xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRLXi"; | |
19876 | 32'b10xxxxx100111xxxxx11xxxxxxxxxxxx : xlate[255:0]="SRAXi"; | |
19877 | 32'b11xxxxx100100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STF"; | |
19878 | 32'b11xxxxx100111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDF"; | |
19879 | 32'b1100000100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFSR"; | |
19880 | 32'b1100001100101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXFSR"; | |
19881 | 32'b11xxxxx100100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFi"; | |
19882 | 32'b11xxxxx100111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFi"; | |
19883 | 32'b1100000100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFSRi"; | |
19884 | 32'b1100001100101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXFSRi"; | |
19885 | 32'b11xxxxx110100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STFA"; | |
19886 | 32'b11xxxxx110111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDFA"; | |
19887 | 32'b11xxxxx110100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STFAi"; | |
19888 | 32'b11xxxxx110111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDFAi"; | |
19889 | 32'b11xxxxx000101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STB"; | |
19890 | 32'b11xxxxx000110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STH"; | |
19891 | 32'b11xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STW"; | |
19892 | 32'b11xxxxx001110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STX"; | |
19893 | 32'b11xxxx0000111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STD"; | |
19894 | 32'b11xxxxx000101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBi"; | |
19895 | 32'b11xxxxx000110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHi"; | |
19896 | 32'b11xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWi"; | |
19897 | 32'b11xxxxx001110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXi"; | |
19898 | 32'b11xxxx0000111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDi"; | |
19899 | 32'b11xxxxx010101xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STBA"; | |
19900 | 32'b11xxxxx010110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STHA"; | |
19901 | 32'b11xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STWA"; | |
19902 | 32'b11xxxxx011110xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STXA"; | |
19903 | 32'b11xxxx0010111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="STDA"; | |
19904 | 32'b11xxxxx010101xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STBAi"; | |
19905 | 32'b11xxxxx010110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STHAi"; | |
19906 | 32'b11xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STWAi"; | |
19907 | 32'b11xxxxx011110xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STXAi"; | |
19908 | 32'b11xxxx0010111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="STDAi"; | |
19909 | 32'b10xxxxx000100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUB"; | |
19910 | 32'b10xxxxx010100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBcc"; | |
19911 | 32'b10xxxxx001100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBC"; | |
19912 | 32'b10xxxxx011100xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SUBCcc"; | |
19913 | 32'b10xxxxx000100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBi"; | |
19914 | 32'b10xxxxx010100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBcci"; | |
19915 | 32'b10xxxxx001100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCi"; | |
19916 | 32'b10xxxxx011100xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SUBCcci"; | |
19917 | 32'b11xxxxx001111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAP"; | |
19918 | 32'b11xxxxx001111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPi"; | |
19919 | 32'b11xxxxx011111xxxxx0xxxxxxxxxxxxx : xlate[255:0]="SWAPA"; | |
19920 | 32'b11xxxxx011111xxxxx1xxxxxxxxxxxxx : xlate[255:0]="SWAPAi"; | |
19921 | 32'b10xxxxx100000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDcc"; | |
19922 | 32'b10xxxxx100010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TADDccTV"; | |
19923 | 32'b10xxxxx100000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDcci"; | |
19924 | 32'b10xxxxx100010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TADDccTVi"; | |
19925 | 32'b10xxxxx100001xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBcc"; | |
19926 | 32'b10xxxxx100011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TSUBccTV"; | |
19927 | 32'b10xxxxx100001xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBcci"; | |
19928 | 32'b10xxxxx100011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TSUBccTVi"; | |
19929 | 32'b10xxxxx111010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="TCC"; | |
19930 | 32'b10xxxxx111010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="TCCi"; | |
19931 | 32'b10xxxxx110010xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPR"; | |
19932 | 32'b10xxxxx110010xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPRi"; | |
19933 | 32'b10xxxxx110011xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRHPR"; | |
19934 | 32'b10xxxxx110011xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRHPRi"; | |
19935 | 32'b1000000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRY"; | |
19936 | 32'b1000010110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRCCR"; | |
19937 | 32'b1000011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRASI"; | |
19938 | 32'b1000110110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRFPRS"; | |
19939 | 32'b1010011110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRGSR"; | |
19940 | 32'b1010000110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPCR"; | |
19941 | 32'b1010001110000xxxxx0xxxxxxxxxxxxx : xlate[255:0]="WRPIC"; | |
19942 | 32'b1000000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRYi"; | |
19943 | 32'b1000010110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRCCRi"; | |
19944 | 32'b1000011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRASIi"; | |
19945 | 32'b1000110110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRFPRSi"; | |
19946 | 32'b1010011110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRGSRi"; | |
19947 | 32'b1010000110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPCRi"; | |
19948 | 32'b1010001110000xxxxx1xxxxxxxxxxxxx : xlate[255:0]="WRPICi"; | |
19949 | 32'b1001111110000000001xxxxxxxxxxxxx : xlate[255:0]="SIR"; | |
19950 | 32'b10xxxxx110110xxxxx001010000xxxxx : xlate[255:0]="FPADD16"; | |
19951 | 32'b10xxxxx110110xxxxx001010001xxxxx : xlate[255:0]="FPADD16S"; | |
19952 | 32'b10xxxxx110110xxxxx001010010xxxxx : xlate[255:0]="FPADD32"; | |
19953 | 32'b10xxxxx110110xxxxx001010011xxxxx : xlate[255:0]="FPADD32S"; | |
19954 | 32'b10xxxxx110110xxxxx001010100xxxxx : xlate[255:0]="FPSUB16"; | |
19955 | 32'b10xxxxx110110xxxxx001010101xxxxx : xlate[255:0]="FPSUB16S"; | |
19956 | 32'b10xxxxx110110xxxxx001010110xxxxx : xlate[255:0]="FPSUB32"; | |
19957 | 32'b10xxxxx110110xxxxx001010111xxxxx : xlate[255:0]="FPSUB32S"; | |
19958 | 32'b10xxxxx110110xxxxx000111011xxxxx : xlate[255:0]="FPACK16"; | |
19959 | 32'b10xxxxx110110xxxxx000111010xxxxx : xlate[255:0]="FPACK32"; | |
19960 | 32'b10xxxxx110110xxxxx000111101xxxxx : xlate[255:0]="FPACKFIX"; | |
19961 | 32'b10xxxxx110110xxxxx001001101xxxxx : xlate[255:0]="FEXPAND"; | |
19962 | 32'b10xxxxx110110xxxxx001001011xxxxx : xlate[255:0]="FPMERGE"; | |
19963 | 32'b10xxxxx110110xxxxx000110001xxxxx : xlate[255:0]="FMUL8x16"; | |
19964 | 32'b10xxxxx110110xxxxx000110011xxxxx : xlate[255:0]="FMUL8x16AU"; | |
19965 | 32'b10xxxxx110110xxxxx000110101xxxxx : xlate[255:0]="FMUL8x16AL"; | |
19966 | 32'b10xxxxx110110xxxxx000110110xxxxx : xlate[255:0]="FMUL8SUx16"; | |
19967 | 32'b10xxxxx110110xxxxx000110111xxxxx : xlate[255:0]="FMUL8ULx16"; | |
19968 | 32'b10xxxxx110110xxxxx000111000xxxxx : xlate[255:0]="FMULD8SUx16"; | |
19969 | 32'b10xxxxx110110xxxxx000111001xxxxx : xlate[255:0]="FMULD8ULx16"; | |
19970 | 32'b10xxxxx110110xxxxx000011000xxxxx : xlate[255:0]="ALIGNADDRESS"; | |
19971 | 32'b10xxxxx110110xxxxx000011010xxxxx : xlate[255:0]="ALIGNADDRESS_LITTLE"; | |
19972 | 32'b10xxxxx110110xxxxx000011001xxxxx : xlate[255:0]="BMASK"; | |
19973 | 32'b10xxxxx110110xxxxx001001000xxxxx : xlate[255:0]="FALIGNDATA"; | |
19974 | 32'b10xxxxx110110xxxxx001001100xxxxx : xlate[255:0]="BSHUFFLE"; | |
19975 | 32'b10xxxxx110110xxxxx001100000xxxxx : xlate[255:0]="FZERO"; | |
19976 | 32'b10xxxxx110110xxxxx001100001xxxxx : xlate[255:0]="FZEROS"; | |
19977 | 32'b10xxxxx110110xxxxx001111110xxxxx : xlate[255:0]="FONE"; | |
19978 | 32'b10xxxxx110110xxxxx001111111xxxxx : xlate[255:0]="FONES"; | |
19979 | 32'b10xxxxx110110xxxxx001110100xxxxx : xlate[255:0]="FSRC1"; | |
19980 | 32'b10xxxxx110110xxxxx001110101xxxxx : xlate[255:0]="FSRC1S"; | |
19981 | 32'b10xxxxx110110xxxxx001111000xxxxx : xlate[255:0]="FSRC2"; | |
19982 | 32'b10xxxxx110110xxxxx001111001xxxxx : xlate[255:0]="FSRC2S"; | |
19983 | 32'b10xxxxx110110xxxxx001101010xxxxx : xlate[255:0]="FNOT1"; | |
19984 | 32'b10xxxxx110110xxxxx001101011xxxxx : xlate[255:0]="FNOT1S"; | |
19985 | 32'b10xxxxx110110xxxxx001100110xxxxx : xlate[255:0]="FNOT2"; | |
19986 | 32'b10xxxxx110110xxxxx001100111xxxxx : xlate[255:0]="FNOT2S"; | |
19987 | 32'b10xxxxx110110xxxxx001111100xxxxx : xlate[255:0]="FOR"; | |
19988 | 32'b10xxxxx110110xxxxx001111101xxxxx : xlate[255:0]="FORS"; | |
19989 | 32'b10xxxxx110110xxxxx001100010xxxxx : xlate[255:0]="FNOR"; | |
19990 | 32'b10xxxxx110110xxxxx001100011xxxxx : xlate[255:0]="FNORS"; | |
19991 | 32'b10xxxxx110110xxxxx001110000xxxxx : xlate[255:0]="FAND"; | |
19992 | 32'b10xxxxx110110xxxxx001110001xxxxx : xlate[255:0]="FANDS"; | |
19993 | 32'b10xxxxx110110xxxxx001101110xxxxx : xlate[255:0]="FNAND"; | |
19994 | 32'b10xxxxx110110xxxxx001101111xxxxx : xlate[255:0]="FNANDS"; | |
19995 | 32'b10xxxxx110110xxxxx001101100xxxxx : xlate[255:0]="FXOR"; | |
19996 | 32'b10xxxxx110110xxxxx001101101xxxxx : xlate[255:0]="FXORS"; | |
19997 | 32'b10xxxxx110110xxxxx001110010xxxxx : xlate[255:0]="FXNOR"; | |
19998 | 32'b10xxxxx110110xxxxx001110011xxxxx : xlate[255:0]="FXNORS"; | |
19999 | 32'b10xxxxx110110xxxxx001111010xxxxx : xlate[255:0]="FORNOT1"; | |
20000 | 32'b10xxxxx110110xxxxx001111011xxxxx : xlate[255:0]="FORNOT1S"; | |
20001 | 32'b10xxxxx110110xxxxx001110110xxxxx : xlate[255:0]="FORNOT2"; | |
20002 | 32'b10xxxxx110110xxxxx001110111xxxxx : xlate[255:0]="FORNOT2S"; | |
20003 | 32'b10xxxxx110110xxxxx001101000xxxxx : xlate[255:0]="FANDNOT1"; | |
20004 | 32'b10xxxxx110110xxxxx001101001xxxxx : xlate[255:0]="FANDNOT1S"; | |
20005 | 32'b10xxxxx110110xxxxx001100100xxxxx : xlate[255:0]="FANDNOT2"; | |
20006 | 32'b10xxxxx110110xxxxx001100101xxxxx : xlate[255:0]="FANDNOT2S"; | |
20007 | 32'b10xxxxx110110xxxxx000101000xxxxx : xlate[255:0]="FCMPGT16"; | |
20008 | 32'b10xxxxx110110xxxxx000101100xxxxx : xlate[255:0]="FCMPGT32"; | |
20009 | 32'b10xxxxx110110xxxxx000100000xxxxx : xlate[255:0]="FCMPLE16"; | |
20010 | 32'b10xxxxx110110xxxxx000100100xxxxx : xlate[255:0]="FCMPLE32"; | |
20011 | 32'b10xxxxx110110xxxxx000100010xxxxx : xlate[255:0]="FCMPNE16"; | |
20012 | 32'b10xxxxx110110xxxxx000100110xxxxx : xlate[255:0]="FCMPNE32"; | |
20013 | 32'b10xxxxx110110xxxxx000101010xxxxx : xlate[255:0]="FCMPEQ16"; | |
20014 | 32'b10xxxxx110110xxxxx000101110xxxxx : xlate[255:0]="FCMPEQ32"; | |
20015 | 32'b10xxxxx110110xxxxx000111110xxxxx : xlate[255:0]="PDIST"; | |
20016 | 32'b10xxxxx110110xxxxx000000000xxxxx : xlate[255:0]="EDGE8"; | |
20017 | 32'b10xxxxx110110xxxxx000000001xxxxx : xlate[255:0]="EDGE8N"; | |
20018 | 32'b10xxxxx110110xxxxx000000010xxxxx : xlate[255:0]="EDGE8L"; | |
20019 | 32'b10xxxxx110110xxxxx000000011xxxxx : xlate[255:0]="EDGE8LN"; | |
20020 | 32'b10xxxxx110110xxxxx000000100xxxxx : xlate[255:0]="EDGE16"; | |
20021 | 32'b10xxxxx110110xxxxx000000101xxxxx : xlate[255:0]="EDGE16N"; | |
20022 | 32'b10xxxxx110110xxxxx000000110xxxxx : xlate[255:0]="EDGE16L"; | |
20023 | 32'b10xxxxx110110xxxxx000000111xxxxx : xlate[255:0]="EDGE16LN"; | |
20024 | 32'b10xxxxx110110xxxxx000001000xxxxx : xlate[255:0]="EDGE32"; | |
20025 | 32'b10xxxxx110110xxxxx000001001xxxxx : xlate[255:0]="EDGE32N"; | |
20026 | 32'b10xxxxx110110xxxxx000001010xxxxx : xlate[255:0]="EDGE32L"; | |
20027 | 32'b10xxxxx110110xxxxx000001011xxxxx : xlate[255:0]="EDGE32LN"; | |
20028 | 32'b10xxxxx110110xxxxx000010000xxxxx : xlate[255:0]="ARRAY8"; | |
20029 | 32'b10xxxxx110110xxxxx000010010xxxxx : xlate[255:0]="ARRAY16"; | |
20030 | 32'b10xxxxx110110xxxxx000010100xxxxx : xlate[255:0]="ARRAY32"; | |
20031 | 32'b10xxxxx110110xxxxx010000001xxxxx : xlate[255:0]="SIAM"; | |
20032 | default : xlate[255:0]="unknown"; | |
20033 | endcase | |
20034 | end | |
20035 | endfunction // xlate | |
20036 | ||
20037 | ||
20038 | `endif | |
20039 | ||
20040 | endmodule | |
20041 | ||
20042 | `endif | |
20043 | ||
20044 |