Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / env / common / verilog / tlb_sync / tlb_misc.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: tlb_misc.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`ifdef CORE_0
36
37module tlb_misc_c0();
38`ifndef GATESIM
39
40// common defines
41`include "defines.vh"
42`include "tlb_sync.vh"
43
44//---------------------
45// Signals for ASI_I/DTLB_TAG_READ followme
46wire [7:0] select_pc_b;
47wire [7:0] dtag_read_active;
48wire [2:0] dtlb_tid;
49wire [63:0] dtlb_va;
50wire [63:0] dtlb_value;
51
52wire [2:0] fetch_tid_f;
53reg [2:0] fetch_tid_c;
54reg [2:0] fetch_tid;
55wire [7:0] itag_read_active_bf;
56reg [7:0] itag_read_active_f;
57reg [7:0] itag_read_active_c;
58reg [7:0] itag_read_active;
59wire [63:0] itlb_va_bf;
60reg [63:0] itlb_va_f;
61reg [63:0] itlb_va_c;
62reg [63:0] itlb_va;
63wire [63:0] itlb_value;
64
65//---------------------
66// Signals for ASI_I/DTLB_DATA_ACCESS followme
67wire [7:0] d_data_access_active;
68
69wire [7:0] i_data_access_active_bf;
70reg [7:0] i_data_access_active_f;
71reg [7:0] i_data_access_active_c;
72reg [7:0] i_data_access_active;
73
74//---------------------
75// Signals for ASI_ITLB_PROBE followme
76wire probe_active_bf;
77reg probe_active_f;
78reg probe_active_c;
79reg probe_active;
80wire [7:0] probe_tid_bf;
81reg [7:0] probe_tid_f;
82reg [7:0] probe_tid_c;
83reg [7:0] probe_tid;
84wire [63:0] probe_value;
85
86//---------------------
87// Misc
88reg [2:0] mycid;
89reg [2:0] mytid;
90reg [5:0] mytnum;
91reg [7:0] myasi;
92reg [(`TS_WIDTH-1):0] tstamp;
93integer i;
94integer junk;
95
96initial begin // {
97 mycid = 0;
98end //}
99
100//----------------------------------------------------------
101// DUT probes
102
103//---------------------
104// Probes for ASI_DTLB_TAG_READ & ASI_DTLB_DATA_ACCESS followme
105
106assign select_pc_b = `PROBES0.select_pc_b;
107
108assign dtlb_tid = `SPC0.lsu.dcc.tid_b;
109assign dtlb_va = `SPC0.lsu_mmu_va_b;
110assign dtlb_value = `SPC0.lsu.tgd.ldxa_asi_data_b;
111
112assign dtag_read_active = {
113 ({4{`SPC0.lsu.dcc.dcc_tlb_tag_read_b &
114 dtlb_tid[2] &
115 !`SPC0.lsu.lsu_illegal_inst_b &
116 !`SPC0.tlu.fls1.dae_invalid_asi_w_in &
117 (!`SPC0.tlu_flush_lsu_b |`SPC0.tlu.fls1.va_watchpoint_w_in)}} &
118 (select_pc_b[7:4])),
119 ({4{`SPC0.lsu.dcc.dcc_tlb_tag_read_b &
120 !dtlb_tid[2] &
121 !`SPC0.lsu.lsu_illegal_inst_b &
122 !`SPC0.tlu.fls0.dae_invalid_asi_w_in &
123 (!`SPC0.tlu_flush_lsu_b |`SPC0.tlu.fls0.va_watchpoint_w_in)}} &
124 (select_pc_b[3:0]))
125 };
126
127
128assign d_data_access_active = {
129 ({4{`SPC0.lsu.dcc.dcc_tlb_data_read_b &
130 dtlb_tid[2] &
131 !`SPC0.lsu.lsu_illegal_inst_b &
132 (!`SPC0.tlu_flush_lsu_b |`SPC0.tlu.fls1.va_watchpoint_w_in)}} &
133 (select_pc_b[7:4])),
134 ({4{`SPC0.lsu.dcc.dcc_tlb_data_read_b &
135 !dtlb_tid[2] &
136 !`SPC0.lsu.lsu_illegal_inst_b &
137 (!`SPC0.tlu_flush_lsu_b |`SPC0.tlu.fls0.va_watchpoint_w_in)}} &
138 (select_pc_b[3:0]))
139 };
140
141//---------------------
142// Probes for ASI_ITLB_TAG_READ & ASI_ITLB_DATA_ACCESS followme
143
144assign fetch_tid_f = `SPC0.ifu_ftu.ftu_asi_ctl.indet_tid_f;
145
146assign itag_read_active_bf = `SPC0.ifu_ftu.ftu_ftp_ctl.ftp_itt_rd_req_bf;
147assign i_data_access_active_bf = `SPC0.ifu_ftu.ftu_ftp_ctl.ftp_itd_rd_req_bf;
148
149assign itlb_va_bf = {24'b0,`SPC0.ifu_ftu.asi_addr_bf[39:3],3'b0};
150assign itlb_value = `SPC0.ifu_ftu.it_rd_data; // [63:0]
151
152//---------------------
153// Probes for ASI_ITLB_PROBE followme
154
155assign probe_active_bf = `SPC0.ifu_ftu.ftp_ith_det_req_bf;
156assign probe_tid_bf = `SPC0.ifu_ftu.ftu_ftp_ctl.ith_det_thr_id;
157assign probe_value = `SPC0.ifu_ftu.it_rd_data;
158
159//----------------------------------------------------------
160//----------------------------------------------------------
161
162always @ (posedge `SPC0.l2clk) begin // {
163
164 tstamp = `TOP.core_cycle_cnt - 1;
165
166 //---------------------------------
167 // Pipeline signals
168 // Have to pipline these past where the TLB was accessed
169 // to get the parity bits for follow me
170 // Then we need to subtract 2 from the timestamp so get back
171 // get the correct time the tlb was accessed.
172
173 itag_read_active_f <= itag_read_active_bf;
174 itag_read_active_c <= itag_read_active_f;
175 itag_read_active <= itag_read_active_c;
176
177 itlb_va_f <= itlb_va_bf;
178 itlb_va_c <= itlb_va_f;
179 itlb_va <= itlb_va_c;
180
181 fetch_tid_c <= fetch_tid_f;
182 fetch_tid <= fetch_tid_c;
183 i_data_access_active_f <= i_data_access_active_bf;
184 i_data_access_active_c <= i_data_access_active_f;
185 i_data_access_active <= i_data_access_active_c;
186
187 probe_active_f <= probe_active_bf;
188 probe_active_c <= probe_active_f;
189 probe_active <= probe_active_c;
190 probe_tid_f <= probe_tid_bf;
191 probe_tid_c <= probe_tid_f;
192 probe_tid <= probe_tid_c;
193
194
195 //---------------------------------
196 //---------------------------------
197
198 //---------------------------------
199 // DTLB_TAG_READ_REG followme & sync
200 if (dtag_read_active) begin // {
201 myasi = 8'h5e;
202 // Determine which thread is active
203
204 mytid = dtlb_tid;
205 mytnum = (mycid * 8) + mytid;
206
207 // followme
208 `PR_INFO ("pli_int", `INFO,
209 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
210 mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp - 1);
211 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
212 junk = $sim_send(`PLI_ASI_READ,
213 mytnum, myasi, dtlb_va, dtlb_value);
214 end // }
215
216 // tlb_sync
217 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
218 mycid, mytid, mytnum, myasi, tstamp - 1);
219 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
220 junk = $sim_send(`PLI_TLBLOOKUP, mytnum, tstamp - 1, myasi);
221 end //}
222
223 //--------------------
224 if (`PARGS.show_tlb_on) begin // {
225 $display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
226 mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
227 end //}
228
229 end // }
230
231 //---------------------------------
232 // DTLB_DATA_ACCESS_REG followme & sync
233 if (d_data_access_active) begin // {
234 myasi = 8'h5d;
235 mytid = dtlb_tid;
236 mytnum = (mycid * 8) + mytid;
237
238 // followme
239 `PR_INFO ("pli_int", `INFO,
240 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
241 mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp-1);
242 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
243 junk = $sim_send(`PLI_ASI_READ,
244 mytnum,myasi, dtlb_va, dtlb_value);
245 end // }
246
247 // tlb_sync
248 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
249 mycid, mytid, mytnum, myasi, tstamp-1);
250 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
251 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-1, myasi);
252 end //}
253
254 //--------------------
255 if (`PARGS.show_tlb_on) begin // {
256 $display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
257 mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
258 end //}
259 end // }
260
261 //---------------------------------
262 // ITLB_TAG_READ_REG followme & sync
263 if (itag_read_active) begin // {
264 myasi = 8'h56;
265 mytid = fetch_tid;
266 mytnum = (mycid * 8) + mytid;
267
268 // followme
269 `PR_INFO ("pli_int", `INFO,
270 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
271 mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
272 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
273 junk = $sim_send(`PLI_ASI_READ,
274 mytnum, myasi, itlb_va, itlb_value);
275 end // }
276
277 // tlb_sync
278 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
279 mycid, mytid, mytnum, myasi, tstamp - 2);
280 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
281 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
282 end //}
283
284 //--------------------
285 if (`PARGS.show_tlb_on) begin // {
286 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
287 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
288 end //}
289
290 end // }
291
292 //---------------------------------
293 // ITLB_DATA_ACCESS_REG followme & sync
294 if (i_data_access_active) begin // {
295 myasi = 8'h55;
296 mytid = fetch_tid;
297 mytnum = (mycid * 8) + mytid;
298
299 // followme
300 `PR_INFO ("pli_int", `INFO,
301 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
302 mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
303 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
304 junk = $sim_send(`PLI_ASI_READ,
305 mytnum, myasi, itlb_va, itlb_value);
306 end // }
307
308 // tlb_sync
309 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
310 mycid, mytid, mytnum, myasi, tstamp - 2);
311 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
312 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
313 end //}
314
315 //--------------------
316 if (`PARGS.show_tlb_on) begin // {
317 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
318 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
319 end //}
320
321 end // }
322
323 //---------------------------------
324 // ITLB_PROBE - followme & sync
325 if (probe_active) begin // {
326 myasi = 8'h53;
327
328 for (i=0; i<=7; i=i+1) begin // {
329 if (probe_tid[i]==1'b1) begin // {
330 mytid = i;
331 mytnum = (mycid * 8) + mytid;
332 end // }
333 end // }
334
335 // followme
336 `PR_INFO ("pli_int", `INFO,
337 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
338 mycid,mytid,mytnum,myasi, itlb_va, probe_value, tstamp-2);
339 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
340 junk = $sim_send(`PLI_ASI_READ,
341 mytnum, myasi, itlb_va, probe_value);
342 end // }
343
344 // tlb_sync
345 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
346 mycid, mytid, mytnum, myasi, tstamp-2);
347 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
348 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-2, myasi);
349 end //}
350
351 //--------------------
352 if (`PARGS.show_tlb_on) begin // {
353 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
354 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
355 end //}
356
357 end // }
358
359end // always }
360
361
362
363//----------------------------------------------------------
364`endif
365endmodule
366
367`endif
368
369`ifdef CORE_1
370
371module tlb_misc_c1();
372`ifndef GATESIM
373
374// common defines
375`include "defines.vh"
376`include "tlb_sync.vh"
377
378//---------------------
379// Signals for ASI_I/DTLB_TAG_READ followme
380wire [7:0] select_pc_b;
381wire [7:0] dtag_read_active;
382wire [2:0] dtlb_tid;
383wire [63:0] dtlb_va;
384wire [63:0] dtlb_value;
385
386wire [2:0] fetch_tid_f;
387reg [2:0] fetch_tid_c;
388reg [2:0] fetch_tid;
389wire [7:0] itag_read_active_bf;
390reg [7:0] itag_read_active_f;
391reg [7:0] itag_read_active_c;
392reg [7:0] itag_read_active;
393wire [63:0] itlb_va_bf;
394reg [63:0] itlb_va_f;
395reg [63:0] itlb_va_c;
396reg [63:0] itlb_va;
397wire [63:0] itlb_value;
398
399//---------------------
400// Signals for ASI_I/DTLB_DATA_ACCESS followme
401wire [7:0] d_data_access_active;
402
403wire [7:0] i_data_access_active_bf;
404reg [7:0] i_data_access_active_f;
405reg [7:0] i_data_access_active_c;
406reg [7:0] i_data_access_active;
407
408//---------------------
409// Signals for ASI_ITLB_PROBE followme
410wire probe_active_bf;
411reg probe_active_f;
412reg probe_active_c;
413reg probe_active;
414wire [7:0] probe_tid_bf;
415reg [7:0] probe_tid_f;
416reg [7:0] probe_tid_c;
417reg [7:0] probe_tid;
418wire [63:0] probe_value;
419
420//---------------------
421// Misc
422reg [2:0] mycid;
423reg [2:0] mytid;
424reg [5:0] mytnum;
425reg [7:0] myasi;
426reg [(`TS_WIDTH-1):0] tstamp;
427integer i;
428integer junk;
429
430initial begin // {
431 mycid = 1;
432end //}
433
434//----------------------------------------------------------
435// DUT probes
436
437//---------------------
438// Probes for ASI_DTLB_TAG_READ & ASI_DTLB_DATA_ACCESS followme
439
440assign select_pc_b = `PROBES1.select_pc_b;
441
442assign dtlb_tid = `SPC1.lsu.dcc.tid_b;
443assign dtlb_va = `SPC1.lsu_mmu_va_b;
444assign dtlb_value = `SPC1.lsu.tgd.ldxa_asi_data_b;
445
446assign dtag_read_active = {
447 ({4{`SPC1.lsu.dcc.dcc_tlb_tag_read_b &
448 dtlb_tid[2] &
449 !`SPC1.lsu.lsu_illegal_inst_b &
450 !`SPC1.tlu.fls1.dae_invalid_asi_w_in &
451 (!`SPC1.tlu_flush_lsu_b |`SPC1.tlu.fls1.va_watchpoint_w_in)}} &
452 (select_pc_b[7:4])),
453 ({4{`SPC1.lsu.dcc.dcc_tlb_tag_read_b &
454 !dtlb_tid[2] &
455 !`SPC1.lsu.lsu_illegal_inst_b &
456 !`SPC1.tlu.fls0.dae_invalid_asi_w_in &
457 (!`SPC1.tlu_flush_lsu_b |`SPC1.tlu.fls0.va_watchpoint_w_in)}} &
458 (select_pc_b[3:0]))
459 };
460
461
462assign d_data_access_active = {
463 ({4{`SPC1.lsu.dcc.dcc_tlb_data_read_b &
464 dtlb_tid[2] &
465 !`SPC1.lsu.lsu_illegal_inst_b &
466 (!`SPC1.tlu_flush_lsu_b |`SPC1.tlu.fls1.va_watchpoint_w_in)}} &
467 (select_pc_b[7:4])),
468 ({4{`SPC1.lsu.dcc.dcc_tlb_data_read_b &
469 !dtlb_tid[2] &
470 !`SPC1.lsu.lsu_illegal_inst_b &
471 (!`SPC1.tlu_flush_lsu_b |`SPC1.tlu.fls0.va_watchpoint_w_in)}} &
472 (select_pc_b[3:0]))
473 };
474
475//---------------------
476// Probes for ASI_ITLB_TAG_READ & ASI_ITLB_DATA_ACCESS followme
477
478assign fetch_tid_f = `SPC1.ifu_ftu.ftu_asi_ctl.indet_tid_f;
479
480assign itag_read_active_bf = `SPC1.ifu_ftu.ftu_ftp_ctl.ftp_itt_rd_req_bf;
481assign i_data_access_active_bf = `SPC1.ifu_ftu.ftu_ftp_ctl.ftp_itd_rd_req_bf;
482
483assign itlb_va_bf = {24'b0,`SPC1.ifu_ftu.asi_addr_bf[39:3],3'b0};
484assign itlb_value = `SPC1.ifu_ftu.it_rd_data; // [63:0]
485
486//---------------------
487// Probes for ASI_ITLB_PROBE followme
488
489assign probe_active_bf = `SPC1.ifu_ftu.ftp_ith_det_req_bf;
490assign probe_tid_bf = `SPC1.ifu_ftu.ftu_ftp_ctl.ith_det_thr_id;
491assign probe_value = `SPC1.ifu_ftu.it_rd_data;
492
493//----------------------------------------------------------
494//----------------------------------------------------------
495
496always @ (posedge `SPC1.l2clk) begin // {
497
498 tstamp = `TOP.core_cycle_cnt - 1;
499
500 //---------------------------------
501 // Pipeline signals
502 // Have to pipline these past where the TLB was accessed
503 // to get the parity bits for follow me
504 // Then we need to subtract 2 from the timestamp so get back
505 // get the correct time the tlb was accessed.
506
507 itag_read_active_f <= itag_read_active_bf;
508 itag_read_active_c <= itag_read_active_f;
509 itag_read_active <= itag_read_active_c;
510
511 itlb_va_f <= itlb_va_bf;
512 itlb_va_c <= itlb_va_f;
513 itlb_va <= itlb_va_c;
514
515 fetch_tid_c <= fetch_tid_f;
516 fetch_tid <= fetch_tid_c;
517 i_data_access_active_f <= i_data_access_active_bf;
518 i_data_access_active_c <= i_data_access_active_f;
519 i_data_access_active <= i_data_access_active_c;
520
521 probe_active_f <= probe_active_bf;
522 probe_active_c <= probe_active_f;
523 probe_active <= probe_active_c;
524 probe_tid_f <= probe_tid_bf;
525 probe_tid_c <= probe_tid_f;
526 probe_tid <= probe_tid_c;
527
528
529 //---------------------------------
530 //---------------------------------
531
532 //---------------------------------
533 // DTLB_TAG_READ_REG followme & sync
534 if (dtag_read_active) begin // {
535 myasi = 8'h5e;
536 // Determine which thread is active
537
538 mytid = dtlb_tid;
539 mytnum = (mycid * 8) + mytid;
540
541 // followme
542 `PR_INFO ("pli_int", `INFO,
543 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
544 mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp - 1);
545 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
546 junk = $sim_send(`PLI_ASI_READ,
547 mytnum, myasi, dtlb_va, dtlb_value);
548 end // }
549
550 // tlb_sync
551 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
552 mycid, mytid, mytnum, myasi, tstamp - 1);
553 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
554 junk = $sim_send(`PLI_TLBLOOKUP, mytnum, tstamp - 1, myasi);
555 end //}
556
557 //--------------------
558 if (`PARGS.show_tlb_on) begin // {
559 $display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
560 mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
561 end //}
562
563 end // }
564
565 //---------------------------------
566 // DTLB_DATA_ACCESS_REG followme & sync
567 if (d_data_access_active) begin // {
568 myasi = 8'h5d;
569 mytid = dtlb_tid;
570 mytnum = (mycid * 8) + mytid;
571
572 // followme
573 `PR_INFO ("pli_int", `INFO,
574 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
575 mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp-1);
576 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
577 junk = $sim_send(`PLI_ASI_READ,
578 mytnum,myasi, dtlb_va, dtlb_value);
579 end // }
580
581 // tlb_sync
582 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
583 mycid, mytid, mytnum, myasi, tstamp-1);
584 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
585 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-1, myasi);
586 end //}
587
588 //--------------------
589 if (`PARGS.show_tlb_on) begin // {
590 $display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
591 mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
592 end //}
593 end // }
594
595 //---------------------------------
596 // ITLB_TAG_READ_REG followme & sync
597 if (itag_read_active) begin // {
598 myasi = 8'h56;
599 mytid = fetch_tid;
600 mytnum = (mycid * 8) + mytid;
601
602 // followme
603 `PR_INFO ("pli_int", `INFO,
604 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
605 mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
606 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
607 junk = $sim_send(`PLI_ASI_READ,
608 mytnum, myasi, itlb_va, itlb_value);
609 end // }
610
611 // tlb_sync
612 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
613 mycid, mytid, mytnum, myasi, tstamp - 2);
614 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
615 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
616 end //}
617
618 //--------------------
619 if (`PARGS.show_tlb_on) begin // {
620 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
621 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
622 end //}
623
624 end // }
625
626 //---------------------------------
627 // ITLB_DATA_ACCESS_REG followme & sync
628 if (i_data_access_active) begin // {
629 myasi = 8'h55;
630 mytid = fetch_tid;
631 mytnum = (mycid * 8) + mytid;
632
633 // followme
634 `PR_INFO ("pli_int", `INFO,
635 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
636 mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
637 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
638 junk = $sim_send(`PLI_ASI_READ,
639 mytnum, myasi, itlb_va, itlb_value);
640 end // }
641
642 // tlb_sync
643 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
644 mycid, mytid, mytnum, myasi, tstamp - 2);
645 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
646 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
647 end //}
648
649 //--------------------
650 if (`PARGS.show_tlb_on) begin // {
651 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
652 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
653 end //}
654
655 end // }
656
657 //---------------------------------
658 // ITLB_PROBE - followme & sync
659 if (probe_active) begin // {
660 myasi = 8'h53;
661
662 for (i=0; i<=7; i=i+1) begin // {
663 if (probe_tid[i]==1'b1) begin // {
664 mytid = i;
665 mytnum = (mycid * 8) + mytid;
666 end // }
667 end // }
668
669 // followme
670 `PR_INFO ("pli_int", `INFO,
671 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
672 mycid,mytid,mytnum,myasi, itlb_va, probe_value, tstamp-2);
673 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
674 junk = $sim_send(`PLI_ASI_READ,
675 mytnum, myasi, itlb_va, probe_value);
676 end // }
677
678 // tlb_sync
679 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
680 mycid, mytid, mytnum, myasi, tstamp-2);
681 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
682 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-2, myasi);
683 end //}
684
685 //--------------------
686 if (`PARGS.show_tlb_on) begin // {
687 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
688 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
689 end //}
690
691 end // }
692
693end // always }
694
695
696
697//----------------------------------------------------------
698`endif
699endmodule
700
701`endif
702
703`ifdef CORE_2
704
705module tlb_misc_c2();
706`ifndef GATESIM
707
708// common defines
709`include "defines.vh"
710`include "tlb_sync.vh"
711
712//---------------------
713// Signals for ASI_I/DTLB_TAG_READ followme
714wire [7:0] select_pc_b;
715wire [7:0] dtag_read_active;
716wire [2:0] dtlb_tid;
717wire [63:0] dtlb_va;
718wire [63:0] dtlb_value;
719
720wire [2:0] fetch_tid_f;
721reg [2:0] fetch_tid_c;
722reg [2:0] fetch_tid;
723wire [7:0] itag_read_active_bf;
724reg [7:0] itag_read_active_f;
725reg [7:0] itag_read_active_c;
726reg [7:0] itag_read_active;
727wire [63:0] itlb_va_bf;
728reg [63:0] itlb_va_f;
729reg [63:0] itlb_va_c;
730reg [63:0] itlb_va;
731wire [63:0] itlb_value;
732
733//---------------------
734// Signals for ASI_I/DTLB_DATA_ACCESS followme
735wire [7:0] d_data_access_active;
736
737wire [7:0] i_data_access_active_bf;
738reg [7:0] i_data_access_active_f;
739reg [7:0] i_data_access_active_c;
740reg [7:0] i_data_access_active;
741
742//---------------------
743// Signals for ASI_ITLB_PROBE followme
744wire probe_active_bf;
745reg probe_active_f;
746reg probe_active_c;
747reg probe_active;
748wire [7:0] probe_tid_bf;
749reg [7:0] probe_tid_f;
750reg [7:0] probe_tid_c;
751reg [7:0] probe_tid;
752wire [63:0] probe_value;
753
754//---------------------
755// Misc
756reg [2:0] mycid;
757reg [2:0] mytid;
758reg [5:0] mytnum;
759reg [7:0] myasi;
760reg [(`TS_WIDTH-1):0] tstamp;
761integer i;
762integer junk;
763
764initial begin // {
765 mycid = 2;
766end //}
767
768//----------------------------------------------------------
769// DUT probes
770
771//---------------------
772// Probes for ASI_DTLB_TAG_READ & ASI_DTLB_DATA_ACCESS followme
773
774assign select_pc_b = `PROBES2.select_pc_b;
775
776assign dtlb_tid = `SPC2.lsu.dcc.tid_b;
777assign dtlb_va = `SPC2.lsu_mmu_va_b;
778assign dtlb_value = `SPC2.lsu.tgd.ldxa_asi_data_b;
779
780assign dtag_read_active = {
781 ({4{`SPC2.lsu.dcc.dcc_tlb_tag_read_b &
782 dtlb_tid[2] &
783 !`SPC2.lsu.lsu_illegal_inst_b &
784 !`SPC2.tlu.fls1.dae_invalid_asi_w_in &
785 (!`SPC2.tlu_flush_lsu_b |`SPC2.tlu.fls1.va_watchpoint_w_in)}} &
786 (select_pc_b[7:4])),
787 ({4{`SPC2.lsu.dcc.dcc_tlb_tag_read_b &
788 !dtlb_tid[2] &
789 !`SPC2.lsu.lsu_illegal_inst_b &
790 !`SPC2.tlu.fls0.dae_invalid_asi_w_in &
791 (!`SPC2.tlu_flush_lsu_b |`SPC2.tlu.fls0.va_watchpoint_w_in)}} &
792 (select_pc_b[3:0]))
793 };
794
795
796assign d_data_access_active = {
797 ({4{`SPC2.lsu.dcc.dcc_tlb_data_read_b &
798 dtlb_tid[2] &
799 !`SPC2.lsu.lsu_illegal_inst_b &
800 (!`SPC2.tlu_flush_lsu_b |`SPC2.tlu.fls1.va_watchpoint_w_in)}} &
801 (select_pc_b[7:4])),
802 ({4{`SPC2.lsu.dcc.dcc_tlb_data_read_b &
803 !dtlb_tid[2] &
804 !`SPC2.lsu.lsu_illegal_inst_b &
805 (!`SPC2.tlu_flush_lsu_b |`SPC2.tlu.fls0.va_watchpoint_w_in)}} &
806 (select_pc_b[3:0]))
807 };
808
809//---------------------
810// Probes for ASI_ITLB_TAG_READ & ASI_ITLB_DATA_ACCESS followme
811
812assign fetch_tid_f = `SPC2.ifu_ftu.ftu_asi_ctl.indet_tid_f;
813
814assign itag_read_active_bf = `SPC2.ifu_ftu.ftu_ftp_ctl.ftp_itt_rd_req_bf;
815assign i_data_access_active_bf = `SPC2.ifu_ftu.ftu_ftp_ctl.ftp_itd_rd_req_bf;
816
817assign itlb_va_bf = {24'b0,`SPC2.ifu_ftu.asi_addr_bf[39:3],3'b0};
818assign itlb_value = `SPC2.ifu_ftu.it_rd_data; // [63:0]
819
820//---------------------
821// Probes for ASI_ITLB_PROBE followme
822
823assign probe_active_bf = `SPC2.ifu_ftu.ftp_ith_det_req_bf;
824assign probe_tid_bf = `SPC2.ifu_ftu.ftu_ftp_ctl.ith_det_thr_id;
825assign probe_value = `SPC2.ifu_ftu.it_rd_data;
826
827//----------------------------------------------------------
828//----------------------------------------------------------
829
830always @ (posedge `SPC2.l2clk) begin // {
831
832 tstamp = `TOP.core_cycle_cnt - 1;
833
834 //---------------------------------
835 // Pipeline signals
836 // Have to pipline these past where the TLB was accessed
837 // to get the parity bits for follow me
838 // Then we need to subtract 2 from the timestamp so get back
839 // get the correct time the tlb was accessed.
840
841 itag_read_active_f <= itag_read_active_bf;
842 itag_read_active_c <= itag_read_active_f;
843 itag_read_active <= itag_read_active_c;
844
845 itlb_va_f <= itlb_va_bf;
846 itlb_va_c <= itlb_va_f;
847 itlb_va <= itlb_va_c;
848
849 fetch_tid_c <= fetch_tid_f;
850 fetch_tid <= fetch_tid_c;
851 i_data_access_active_f <= i_data_access_active_bf;
852 i_data_access_active_c <= i_data_access_active_f;
853 i_data_access_active <= i_data_access_active_c;
854
855 probe_active_f <= probe_active_bf;
856 probe_active_c <= probe_active_f;
857 probe_active <= probe_active_c;
858 probe_tid_f <= probe_tid_bf;
859 probe_tid_c <= probe_tid_f;
860 probe_tid <= probe_tid_c;
861
862
863 //---------------------------------
864 //---------------------------------
865
866 //---------------------------------
867 // DTLB_TAG_READ_REG followme & sync
868 if (dtag_read_active) begin // {
869 myasi = 8'h5e;
870 // Determine which thread is active
871
872 mytid = dtlb_tid;
873 mytnum = (mycid * 8) + mytid;
874
875 // followme
876 `PR_INFO ("pli_int", `INFO,
877 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
878 mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp - 1);
879 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
880 junk = $sim_send(`PLI_ASI_READ,
881 mytnum, myasi, dtlb_va, dtlb_value);
882 end // }
883
884 // tlb_sync
885 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
886 mycid, mytid, mytnum, myasi, tstamp - 1);
887 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
888 junk = $sim_send(`PLI_TLBLOOKUP, mytnum, tstamp - 1, myasi);
889 end //}
890
891 //--------------------
892 if (`PARGS.show_tlb_on) begin // {
893 $display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
894 mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
895 end //}
896
897 end // }
898
899 //---------------------------------
900 // DTLB_DATA_ACCESS_REG followme & sync
901 if (d_data_access_active) begin // {
902 myasi = 8'h5d;
903 mytid = dtlb_tid;
904 mytnum = (mycid * 8) + mytid;
905
906 // followme
907 `PR_INFO ("pli_int", `INFO,
908 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
909 mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp-1);
910 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
911 junk = $sim_send(`PLI_ASI_READ,
912 mytnum,myasi, dtlb_va, dtlb_value);
913 end // }
914
915 // tlb_sync
916 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
917 mycid, mytid, mytnum, myasi, tstamp-1);
918 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
919 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-1, myasi);
920 end //}
921
922 //--------------------
923 if (`PARGS.show_tlb_on) begin // {
924 $display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
925 mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
926 end //}
927 end // }
928
929 //---------------------------------
930 // ITLB_TAG_READ_REG followme & sync
931 if (itag_read_active) begin // {
932 myasi = 8'h56;
933 mytid = fetch_tid;
934 mytnum = (mycid * 8) + mytid;
935
936 // followme
937 `PR_INFO ("pli_int", `INFO,
938 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
939 mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
940 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
941 junk = $sim_send(`PLI_ASI_READ,
942 mytnum, myasi, itlb_va, itlb_value);
943 end // }
944
945 // tlb_sync
946 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
947 mycid, mytid, mytnum, myasi, tstamp - 2);
948 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
949 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
950 end //}
951
952 //--------------------
953 if (`PARGS.show_tlb_on) begin // {
954 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
955 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
956 end //}
957
958 end // }
959
960 //---------------------------------
961 // ITLB_DATA_ACCESS_REG followme & sync
962 if (i_data_access_active) begin // {
963 myasi = 8'h55;
964 mytid = fetch_tid;
965 mytnum = (mycid * 8) + mytid;
966
967 // followme
968 `PR_INFO ("pli_int", `INFO,
969 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
970 mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
971 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
972 junk = $sim_send(`PLI_ASI_READ,
973 mytnum, myasi, itlb_va, itlb_value);
974 end // }
975
976 // tlb_sync
977 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
978 mycid, mytid, mytnum, myasi, tstamp - 2);
979 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
980 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
981 end //}
982
983 //--------------------
984 if (`PARGS.show_tlb_on) begin // {
985 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
986 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
987 end //}
988
989 end // }
990
991 //---------------------------------
992 // ITLB_PROBE - followme & sync
993 if (probe_active) begin // {
994 myasi = 8'h53;
995
996 for (i=0; i<=7; i=i+1) begin // {
997 if (probe_tid[i]==1'b1) begin // {
998 mytid = i;
999 mytnum = (mycid * 8) + mytid;
1000 end // }
1001 end // }
1002
1003 // followme
1004 `PR_INFO ("pli_int", `INFO,
1005 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
1006 mycid,mytid,mytnum,myasi, itlb_va, probe_value, tstamp-2);
1007 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
1008 junk = $sim_send(`PLI_ASI_READ,
1009 mytnum, myasi, itlb_va, probe_value);
1010 end // }
1011
1012 // tlb_sync
1013 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
1014 mycid, mytid, mytnum, myasi, tstamp-2);
1015 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
1016 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-2, myasi);
1017 end //}
1018
1019 //--------------------
1020 if (`PARGS.show_tlb_on) begin // {
1021 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
1022 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
1023 end //}
1024
1025 end // }
1026
1027end // always }
1028
1029
1030
1031//----------------------------------------------------------
1032`endif
1033endmodule
1034
1035`endif
1036
1037`ifdef CORE_3
1038
1039module tlb_misc_c3();
1040`ifndef GATESIM
1041
1042// common defines
1043`include "defines.vh"
1044`include "tlb_sync.vh"
1045
1046//---------------------
1047// Signals for ASI_I/DTLB_TAG_READ followme
1048wire [7:0] select_pc_b;
1049wire [7:0] dtag_read_active;
1050wire [2:0] dtlb_tid;
1051wire [63:0] dtlb_va;
1052wire [63:0] dtlb_value;
1053
1054wire [2:0] fetch_tid_f;
1055reg [2:0] fetch_tid_c;
1056reg [2:0] fetch_tid;
1057wire [7:0] itag_read_active_bf;
1058reg [7:0] itag_read_active_f;
1059reg [7:0] itag_read_active_c;
1060reg [7:0] itag_read_active;
1061wire [63:0] itlb_va_bf;
1062reg [63:0] itlb_va_f;
1063reg [63:0] itlb_va_c;
1064reg [63:0] itlb_va;
1065wire [63:0] itlb_value;
1066
1067//---------------------
1068// Signals for ASI_I/DTLB_DATA_ACCESS followme
1069wire [7:0] d_data_access_active;
1070
1071wire [7:0] i_data_access_active_bf;
1072reg [7:0] i_data_access_active_f;
1073reg [7:0] i_data_access_active_c;
1074reg [7:0] i_data_access_active;
1075
1076//---------------------
1077// Signals for ASI_ITLB_PROBE followme
1078wire probe_active_bf;
1079reg probe_active_f;
1080reg probe_active_c;
1081reg probe_active;
1082wire [7:0] probe_tid_bf;
1083reg [7:0] probe_tid_f;
1084reg [7:0] probe_tid_c;
1085reg [7:0] probe_tid;
1086wire [63:0] probe_value;
1087
1088//---------------------
1089// Misc
1090reg [2:0] mycid;
1091reg [2:0] mytid;
1092reg [5:0] mytnum;
1093reg [7:0] myasi;
1094reg [(`TS_WIDTH-1):0] tstamp;
1095integer i;
1096integer junk;
1097
1098initial begin // {
1099 mycid = 3;
1100end //}
1101
1102//----------------------------------------------------------
1103// DUT probes
1104
1105//---------------------
1106// Probes for ASI_DTLB_TAG_READ & ASI_DTLB_DATA_ACCESS followme
1107
1108assign select_pc_b = `PROBES3.select_pc_b;
1109
1110assign dtlb_tid = `SPC3.lsu.dcc.tid_b;
1111assign dtlb_va = `SPC3.lsu_mmu_va_b;
1112assign dtlb_value = `SPC3.lsu.tgd.ldxa_asi_data_b;
1113
1114assign dtag_read_active = {
1115 ({4{`SPC3.lsu.dcc.dcc_tlb_tag_read_b &
1116 dtlb_tid[2] &
1117 !`SPC3.lsu.lsu_illegal_inst_b &
1118 !`SPC3.tlu.fls1.dae_invalid_asi_w_in &
1119 (!`SPC3.tlu_flush_lsu_b |`SPC3.tlu.fls1.va_watchpoint_w_in)}} &
1120 (select_pc_b[7:4])),
1121 ({4{`SPC3.lsu.dcc.dcc_tlb_tag_read_b &
1122 !dtlb_tid[2] &
1123 !`SPC3.lsu.lsu_illegal_inst_b &
1124 !`SPC3.tlu.fls0.dae_invalid_asi_w_in &
1125 (!`SPC3.tlu_flush_lsu_b |`SPC3.tlu.fls0.va_watchpoint_w_in)}} &
1126 (select_pc_b[3:0]))
1127 };
1128
1129
1130assign d_data_access_active = {
1131 ({4{`SPC3.lsu.dcc.dcc_tlb_data_read_b &
1132 dtlb_tid[2] &
1133 !`SPC3.lsu.lsu_illegal_inst_b &
1134 (!`SPC3.tlu_flush_lsu_b |`SPC3.tlu.fls1.va_watchpoint_w_in)}} &
1135 (select_pc_b[7:4])),
1136 ({4{`SPC3.lsu.dcc.dcc_tlb_data_read_b &
1137 !dtlb_tid[2] &
1138 !`SPC3.lsu.lsu_illegal_inst_b &
1139 (!`SPC3.tlu_flush_lsu_b |`SPC3.tlu.fls0.va_watchpoint_w_in)}} &
1140 (select_pc_b[3:0]))
1141 };
1142
1143//---------------------
1144// Probes for ASI_ITLB_TAG_READ & ASI_ITLB_DATA_ACCESS followme
1145
1146assign fetch_tid_f = `SPC3.ifu_ftu.ftu_asi_ctl.indet_tid_f;
1147
1148assign itag_read_active_bf = `SPC3.ifu_ftu.ftu_ftp_ctl.ftp_itt_rd_req_bf;
1149assign i_data_access_active_bf = `SPC3.ifu_ftu.ftu_ftp_ctl.ftp_itd_rd_req_bf;
1150
1151assign itlb_va_bf = {24'b0,`SPC3.ifu_ftu.asi_addr_bf[39:3],3'b0};
1152assign itlb_value = `SPC3.ifu_ftu.it_rd_data; // [63:0]
1153
1154//---------------------
1155// Probes for ASI_ITLB_PROBE followme
1156
1157assign probe_active_bf = `SPC3.ifu_ftu.ftp_ith_det_req_bf;
1158assign probe_tid_bf = `SPC3.ifu_ftu.ftu_ftp_ctl.ith_det_thr_id;
1159assign probe_value = `SPC3.ifu_ftu.it_rd_data;
1160
1161//----------------------------------------------------------
1162//----------------------------------------------------------
1163
1164always @ (posedge `SPC3.l2clk) begin // {
1165
1166 tstamp = `TOP.core_cycle_cnt - 1;
1167
1168 //---------------------------------
1169 // Pipeline signals
1170 // Have to pipline these past where the TLB was accessed
1171 // to get the parity bits for follow me
1172 // Then we need to subtract 2 from the timestamp so get back
1173 // get the correct time the tlb was accessed.
1174
1175 itag_read_active_f <= itag_read_active_bf;
1176 itag_read_active_c <= itag_read_active_f;
1177 itag_read_active <= itag_read_active_c;
1178
1179 itlb_va_f <= itlb_va_bf;
1180 itlb_va_c <= itlb_va_f;
1181 itlb_va <= itlb_va_c;
1182
1183 fetch_tid_c <= fetch_tid_f;
1184 fetch_tid <= fetch_tid_c;
1185 i_data_access_active_f <= i_data_access_active_bf;
1186 i_data_access_active_c <= i_data_access_active_f;
1187 i_data_access_active <= i_data_access_active_c;
1188
1189 probe_active_f <= probe_active_bf;
1190 probe_active_c <= probe_active_f;
1191 probe_active <= probe_active_c;
1192 probe_tid_f <= probe_tid_bf;
1193 probe_tid_c <= probe_tid_f;
1194 probe_tid <= probe_tid_c;
1195
1196
1197 //---------------------------------
1198 //---------------------------------
1199
1200 //---------------------------------
1201 // DTLB_TAG_READ_REG followme & sync
1202 if (dtag_read_active) begin // {
1203 myasi = 8'h5e;
1204 // Determine which thread is active
1205
1206 mytid = dtlb_tid;
1207 mytnum = (mycid * 8) + mytid;
1208
1209 // followme
1210 `PR_INFO ("pli_int", `INFO,
1211 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
1212 mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp - 1);
1213 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
1214 junk = $sim_send(`PLI_ASI_READ,
1215 mytnum, myasi, dtlb_va, dtlb_value);
1216 end // }
1217
1218 // tlb_sync
1219 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
1220 mycid, mytid, mytnum, myasi, tstamp - 1);
1221 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
1222 junk = $sim_send(`PLI_TLBLOOKUP, mytnum, tstamp - 1, myasi);
1223 end //}
1224
1225 //--------------------
1226 if (`PARGS.show_tlb_on) begin // {
1227 $display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
1228 mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
1229 end //}
1230
1231 end // }
1232
1233 //---------------------------------
1234 // DTLB_DATA_ACCESS_REG followme & sync
1235 if (d_data_access_active) begin // {
1236 myasi = 8'h5d;
1237 mytid = dtlb_tid;
1238 mytnum = (mycid * 8) + mytid;
1239
1240 // followme
1241 `PR_INFO ("pli_int", `INFO,
1242 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
1243 mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp-1);
1244 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
1245 junk = $sim_send(`PLI_ASI_READ,
1246 mytnum,myasi, dtlb_va, dtlb_value);
1247 end // }
1248
1249 // tlb_sync
1250 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
1251 mycid, mytid, mytnum, myasi, tstamp-1);
1252 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
1253 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-1, myasi);
1254 end //}
1255
1256 //--------------------
1257 if (`PARGS.show_tlb_on) begin // {
1258 $display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
1259 mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
1260 end //}
1261 end // }
1262
1263 //---------------------------------
1264 // ITLB_TAG_READ_REG followme & sync
1265 if (itag_read_active) begin // {
1266 myasi = 8'h56;
1267 mytid = fetch_tid;
1268 mytnum = (mycid * 8) + mytid;
1269
1270 // followme
1271 `PR_INFO ("pli_int", `INFO,
1272 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
1273 mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
1274 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
1275 junk = $sim_send(`PLI_ASI_READ,
1276 mytnum, myasi, itlb_va, itlb_value);
1277 end // }
1278
1279 // tlb_sync
1280 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
1281 mycid, mytid, mytnum, myasi, tstamp - 2);
1282 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
1283 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
1284 end //}
1285
1286 //--------------------
1287 if (`PARGS.show_tlb_on) begin // {
1288 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
1289 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
1290 end //}
1291
1292 end // }
1293
1294 //---------------------------------
1295 // ITLB_DATA_ACCESS_REG followme & sync
1296 if (i_data_access_active) begin // {
1297 myasi = 8'h55;
1298 mytid = fetch_tid;
1299 mytnum = (mycid * 8) + mytid;
1300
1301 // followme
1302 `PR_INFO ("pli_int", `INFO,
1303 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
1304 mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
1305 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
1306 junk = $sim_send(`PLI_ASI_READ,
1307 mytnum, myasi, itlb_va, itlb_value);
1308 end // }
1309
1310 // tlb_sync
1311 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
1312 mycid, mytid, mytnum, myasi, tstamp - 2);
1313 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
1314 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
1315 end //}
1316
1317 //--------------------
1318 if (`PARGS.show_tlb_on) begin // {
1319 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
1320 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
1321 end //}
1322
1323 end // }
1324
1325 //---------------------------------
1326 // ITLB_PROBE - followme & sync
1327 if (probe_active) begin // {
1328 myasi = 8'h53;
1329
1330 for (i=0; i<=7; i=i+1) begin // {
1331 if (probe_tid[i]==1'b1) begin // {
1332 mytid = i;
1333 mytnum = (mycid * 8) + mytid;
1334 end // }
1335 end // }
1336
1337 // followme
1338 `PR_INFO ("pli_int", `INFO,
1339 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
1340 mycid,mytid,mytnum,myasi, itlb_va, probe_value, tstamp-2);
1341 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
1342 junk = $sim_send(`PLI_ASI_READ,
1343 mytnum, myasi, itlb_va, probe_value);
1344 end // }
1345
1346 // tlb_sync
1347 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
1348 mycid, mytid, mytnum, myasi, tstamp-2);
1349 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
1350 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-2, myasi);
1351 end //}
1352
1353 //--------------------
1354 if (`PARGS.show_tlb_on) begin // {
1355 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
1356 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
1357 end //}
1358
1359 end // }
1360
1361end // always }
1362
1363
1364
1365//----------------------------------------------------------
1366`endif
1367endmodule
1368
1369`endif
1370
1371`ifdef CORE_4
1372
1373module tlb_misc_c4();
1374`ifndef GATESIM
1375
1376// common defines
1377`include "defines.vh"
1378`include "tlb_sync.vh"
1379
1380//---------------------
1381// Signals for ASI_I/DTLB_TAG_READ followme
1382wire [7:0] select_pc_b;
1383wire [7:0] dtag_read_active;
1384wire [2:0] dtlb_tid;
1385wire [63:0] dtlb_va;
1386wire [63:0] dtlb_value;
1387
1388wire [2:0] fetch_tid_f;
1389reg [2:0] fetch_tid_c;
1390reg [2:0] fetch_tid;
1391wire [7:0] itag_read_active_bf;
1392reg [7:0] itag_read_active_f;
1393reg [7:0] itag_read_active_c;
1394reg [7:0] itag_read_active;
1395wire [63:0] itlb_va_bf;
1396reg [63:0] itlb_va_f;
1397reg [63:0] itlb_va_c;
1398reg [63:0] itlb_va;
1399wire [63:0] itlb_value;
1400
1401//---------------------
1402// Signals for ASI_I/DTLB_DATA_ACCESS followme
1403wire [7:0] d_data_access_active;
1404
1405wire [7:0] i_data_access_active_bf;
1406reg [7:0] i_data_access_active_f;
1407reg [7:0] i_data_access_active_c;
1408reg [7:0] i_data_access_active;
1409
1410//---------------------
1411// Signals for ASI_ITLB_PROBE followme
1412wire probe_active_bf;
1413reg probe_active_f;
1414reg probe_active_c;
1415reg probe_active;
1416wire [7:0] probe_tid_bf;
1417reg [7:0] probe_tid_f;
1418reg [7:0] probe_tid_c;
1419reg [7:0] probe_tid;
1420wire [63:0] probe_value;
1421
1422//---------------------
1423// Misc
1424reg [2:0] mycid;
1425reg [2:0] mytid;
1426reg [5:0] mytnum;
1427reg [7:0] myasi;
1428reg [(`TS_WIDTH-1):0] tstamp;
1429integer i;
1430integer junk;
1431
1432initial begin // {
1433 mycid = 4;
1434end //}
1435
1436//----------------------------------------------------------
1437// DUT probes
1438
1439//---------------------
1440// Probes for ASI_DTLB_TAG_READ & ASI_DTLB_DATA_ACCESS followme
1441
1442assign select_pc_b = `PROBES4.select_pc_b;
1443
1444assign dtlb_tid = `SPC4.lsu.dcc.tid_b;
1445assign dtlb_va = `SPC4.lsu_mmu_va_b;
1446assign dtlb_value = `SPC4.lsu.tgd.ldxa_asi_data_b;
1447
1448assign dtag_read_active = {
1449 ({4{`SPC4.lsu.dcc.dcc_tlb_tag_read_b &
1450 dtlb_tid[2] &
1451 !`SPC4.lsu.lsu_illegal_inst_b &
1452 !`SPC4.tlu.fls1.dae_invalid_asi_w_in &
1453 (!`SPC4.tlu_flush_lsu_b |`SPC4.tlu.fls1.va_watchpoint_w_in)}} &
1454 (select_pc_b[7:4])),
1455 ({4{`SPC4.lsu.dcc.dcc_tlb_tag_read_b &
1456 !dtlb_tid[2] &
1457 !`SPC4.lsu.lsu_illegal_inst_b &
1458 !`SPC4.tlu.fls0.dae_invalid_asi_w_in &
1459 (!`SPC4.tlu_flush_lsu_b |`SPC4.tlu.fls0.va_watchpoint_w_in)}} &
1460 (select_pc_b[3:0]))
1461 };
1462
1463
1464assign d_data_access_active = {
1465 ({4{`SPC4.lsu.dcc.dcc_tlb_data_read_b &
1466 dtlb_tid[2] &
1467 !`SPC4.lsu.lsu_illegal_inst_b &
1468 (!`SPC4.tlu_flush_lsu_b |`SPC4.tlu.fls1.va_watchpoint_w_in)}} &
1469 (select_pc_b[7:4])),
1470 ({4{`SPC4.lsu.dcc.dcc_tlb_data_read_b &
1471 !dtlb_tid[2] &
1472 !`SPC4.lsu.lsu_illegal_inst_b &
1473 (!`SPC4.tlu_flush_lsu_b |`SPC4.tlu.fls0.va_watchpoint_w_in)}} &
1474 (select_pc_b[3:0]))
1475 };
1476
1477//---------------------
1478// Probes for ASI_ITLB_TAG_READ & ASI_ITLB_DATA_ACCESS followme
1479
1480assign fetch_tid_f = `SPC4.ifu_ftu.ftu_asi_ctl.indet_tid_f;
1481
1482assign itag_read_active_bf = `SPC4.ifu_ftu.ftu_ftp_ctl.ftp_itt_rd_req_bf;
1483assign i_data_access_active_bf = `SPC4.ifu_ftu.ftu_ftp_ctl.ftp_itd_rd_req_bf;
1484
1485assign itlb_va_bf = {24'b0,`SPC4.ifu_ftu.asi_addr_bf[39:3],3'b0};
1486assign itlb_value = `SPC4.ifu_ftu.it_rd_data; // [63:0]
1487
1488//---------------------
1489// Probes for ASI_ITLB_PROBE followme
1490
1491assign probe_active_bf = `SPC4.ifu_ftu.ftp_ith_det_req_bf;
1492assign probe_tid_bf = `SPC4.ifu_ftu.ftu_ftp_ctl.ith_det_thr_id;
1493assign probe_value = `SPC4.ifu_ftu.it_rd_data;
1494
1495//----------------------------------------------------------
1496//----------------------------------------------------------
1497
1498always @ (posedge `SPC4.l2clk) begin // {
1499
1500 tstamp = `TOP.core_cycle_cnt - 1;
1501
1502 //---------------------------------
1503 // Pipeline signals
1504 // Have to pipline these past where the TLB was accessed
1505 // to get the parity bits for follow me
1506 // Then we need to subtract 2 from the timestamp so get back
1507 // get the correct time the tlb was accessed.
1508
1509 itag_read_active_f <= itag_read_active_bf;
1510 itag_read_active_c <= itag_read_active_f;
1511 itag_read_active <= itag_read_active_c;
1512
1513 itlb_va_f <= itlb_va_bf;
1514 itlb_va_c <= itlb_va_f;
1515 itlb_va <= itlb_va_c;
1516
1517 fetch_tid_c <= fetch_tid_f;
1518 fetch_tid <= fetch_tid_c;
1519 i_data_access_active_f <= i_data_access_active_bf;
1520 i_data_access_active_c <= i_data_access_active_f;
1521 i_data_access_active <= i_data_access_active_c;
1522
1523 probe_active_f <= probe_active_bf;
1524 probe_active_c <= probe_active_f;
1525 probe_active <= probe_active_c;
1526 probe_tid_f <= probe_tid_bf;
1527 probe_tid_c <= probe_tid_f;
1528 probe_tid <= probe_tid_c;
1529
1530
1531 //---------------------------------
1532 //---------------------------------
1533
1534 //---------------------------------
1535 // DTLB_TAG_READ_REG followme & sync
1536 if (dtag_read_active) begin // {
1537 myasi = 8'h5e;
1538 // Determine which thread is active
1539
1540 mytid = dtlb_tid;
1541 mytnum = (mycid * 8) + mytid;
1542
1543 // followme
1544 `PR_INFO ("pli_int", `INFO,
1545 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
1546 mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp - 1);
1547 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
1548 junk = $sim_send(`PLI_ASI_READ,
1549 mytnum, myasi, dtlb_va, dtlb_value);
1550 end // }
1551
1552 // tlb_sync
1553 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
1554 mycid, mytid, mytnum, myasi, tstamp - 1);
1555 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
1556 junk = $sim_send(`PLI_TLBLOOKUP, mytnum, tstamp - 1, myasi);
1557 end //}
1558
1559 //--------------------
1560 if (`PARGS.show_tlb_on) begin // {
1561 $display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
1562 mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
1563 end //}
1564
1565 end // }
1566
1567 //---------------------------------
1568 // DTLB_DATA_ACCESS_REG followme & sync
1569 if (d_data_access_active) begin // {
1570 myasi = 8'h5d;
1571 mytid = dtlb_tid;
1572 mytnum = (mycid * 8) + mytid;
1573
1574 // followme
1575 `PR_INFO ("pli_int", `INFO,
1576 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
1577 mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp-1);
1578 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
1579 junk = $sim_send(`PLI_ASI_READ,
1580 mytnum,myasi, dtlb_va, dtlb_value);
1581 end // }
1582
1583 // tlb_sync
1584 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
1585 mycid, mytid, mytnum, myasi, tstamp-1);
1586 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
1587 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-1, myasi);
1588 end //}
1589
1590 //--------------------
1591 if (`PARGS.show_tlb_on) begin // {
1592 $display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
1593 mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
1594 end //}
1595 end // }
1596
1597 //---------------------------------
1598 // ITLB_TAG_READ_REG followme & sync
1599 if (itag_read_active) begin // {
1600 myasi = 8'h56;
1601 mytid = fetch_tid;
1602 mytnum = (mycid * 8) + mytid;
1603
1604 // followme
1605 `PR_INFO ("pli_int", `INFO,
1606 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
1607 mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
1608 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
1609 junk = $sim_send(`PLI_ASI_READ,
1610 mytnum, myasi, itlb_va, itlb_value);
1611 end // }
1612
1613 // tlb_sync
1614 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
1615 mycid, mytid, mytnum, myasi, tstamp - 2);
1616 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
1617 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
1618 end //}
1619
1620 //--------------------
1621 if (`PARGS.show_tlb_on) begin // {
1622 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
1623 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
1624 end //}
1625
1626 end // }
1627
1628 //---------------------------------
1629 // ITLB_DATA_ACCESS_REG followme & sync
1630 if (i_data_access_active) begin // {
1631 myasi = 8'h55;
1632 mytid = fetch_tid;
1633 mytnum = (mycid * 8) + mytid;
1634
1635 // followme
1636 `PR_INFO ("pli_int", `INFO,
1637 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
1638 mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
1639 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
1640 junk = $sim_send(`PLI_ASI_READ,
1641 mytnum, myasi, itlb_va, itlb_value);
1642 end // }
1643
1644 // tlb_sync
1645 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
1646 mycid, mytid, mytnum, myasi, tstamp - 2);
1647 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
1648 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
1649 end //}
1650
1651 //--------------------
1652 if (`PARGS.show_tlb_on) begin // {
1653 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
1654 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
1655 end //}
1656
1657 end // }
1658
1659 //---------------------------------
1660 // ITLB_PROBE - followme & sync
1661 if (probe_active) begin // {
1662 myasi = 8'h53;
1663
1664 for (i=0; i<=7; i=i+1) begin // {
1665 if (probe_tid[i]==1'b1) begin // {
1666 mytid = i;
1667 mytnum = (mycid * 8) + mytid;
1668 end // }
1669 end // }
1670
1671 // followme
1672 `PR_INFO ("pli_int", `INFO,
1673 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
1674 mycid,mytid,mytnum,myasi, itlb_va, probe_value, tstamp-2);
1675 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
1676 junk = $sim_send(`PLI_ASI_READ,
1677 mytnum, myasi, itlb_va, probe_value);
1678 end // }
1679
1680 // tlb_sync
1681 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
1682 mycid, mytid, mytnum, myasi, tstamp-2);
1683 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
1684 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-2, myasi);
1685 end //}
1686
1687 //--------------------
1688 if (`PARGS.show_tlb_on) begin // {
1689 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
1690 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
1691 end //}
1692
1693 end // }
1694
1695end // always }
1696
1697
1698
1699//----------------------------------------------------------
1700`endif
1701endmodule
1702
1703`endif
1704
1705`ifdef CORE_5
1706
1707module tlb_misc_c5();
1708`ifndef GATESIM
1709
1710// common defines
1711`include "defines.vh"
1712`include "tlb_sync.vh"
1713
1714//---------------------
1715// Signals for ASI_I/DTLB_TAG_READ followme
1716wire [7:0] select_pc_b;
1717wire [7:0] dtag_read_active;
1718wire [2:0] dtlb_tid;
1719wire [63:0] dtlb_va;
1720wire [63:0] dtlb_value;
1721
1722wire [2:0] fetch_tid_f;
1723reg [2:0] fetch_tid_c;
1724reg [2:0] fetch_tid;
1725wire [7:0] itag_read_active_bf;
1726reg [7:0] itag_read_active_f;
1727reg [7:0] itag_read_active_c;
1728reg [7:0] itag_read_active;
1729wire [63:0] itlb_va_bf;
1730reg [63:0] itlb_va_f;
1731reg [63:0] itlb_va_c;
1732reg [63:0] itlb_va;
1733wire [63:0] itlb_value;
1734
1735//---------------------
1736// Signals for ASI_I/DTLB_DATA_ACCESS followme
1737wire [7:0] d_data_access_active;
1738
1739wire [7:0] i_data_access_active_bf;
1740reg [7:0] i_data_access_active_f;
1741reg [7:0] i_data_access_active_c;
1742reg [7:0] i_data_access_active;
1743
1744//---------------------
1745// Signals for ASI_ITLB_PROBE followme
1746wire probe_active_bf;
1747reg probe_active_f;
1748reg probe_active_c;
1749reg probe_active;
1750wire [7:0] probe_tid_bf;
1751reg [7:0] probe_tid_f;
1752reg [7:0] probe_tid_c;
1753reg [7:0] probe_tid;
1754wire [63:0] probe_value;
1755
1756//---------------------
1757// Misc
1758reg [2:0] mycid;
1759reg [2:0] mytid;
1760reg [5:0] mytnum;
1761reg [7:0] myasi;
1762reg [(`TS_WIDTH-1):0] tstamp;
1763integer i;
1764integer junk;
1765
1766initial begin // {
1767 mycid = 5;
1768end //}
1769
1770//----------------------------------------------------------
1771// DUT probes
1772
1773//---------------------
1774// Probes for ASI_DTLB_TAG_READ & ASI_DTLB_DATA_ACCESS followme
1775
1776assign select_pc_b = `PROBES5.select_pc_b;
1777
1778assign dtlb_tid = `SPC5.lsu.dcc.tid_b;
1779assign dtlb_va = `SPC5.lsu_mmu_va_b;
1780assign dtlb_value = `SPC5.lsu.tgd.ldxa_asi_data_b;
1781
1782assign dtag_read_active = {
1783 ({4{`SPC5.lsu.dcc.dcc_tlb_tag_read_b &
1784 dtlb_tid[2] &
1785 !`SPC5.lsu.lsu_illegal_inst_b &
1786 !`SPC5.tlu.fls1.dae_invalid_asi_w_in &
1787 (!`SPC5.tlu_flush_lsu_b |`SPC5.tlu.fls1.va_watchpoint_w_in)}} &
1788 (select_pc_b[7:4])),
1789 ({4{`SPC5.lsu.dcc.dcc_tlb_tag_read_b &
1790 !dtlb_tid[2] &
1791 !`SPC5.lsu.lsu_illegal_inst_b &
1792 !`SPC5.tlu.fls0.dae_invalid_asi_w_in &
1793 (!`SPC5.tlu_flush_lsu_b |`SPC5.tlu.fls0.va_watchpoint_w_in)}} &
1794 (select_pc_b[3:0]))
1795 };
1796
1797
1798assign d_data_access_active = {
1799 ({4{`SPC5.lsu.dcc.dcc_tlb_data_read_b &
1800 dtlb_tid[2] &
1801 !`SPC5.lsu.lsu_illegal_inst_b &
1802 (!`SPC5.tlu_flush_lsu_b |`SPC5.tlu.fls1.va_watchpoint_w_in)}} &
1803 (select_pc_b[7:4])),
1804 ({4{`SPC5.lsu.dcc.dcc_tlb_data_read_b &
1805 !dtlb_tid[2] &
1806 !`SPC5.lsu.lsu_illegal_inst_b &
1807 (!`SPC5.tlu_flush_lsu_b |`SPC5.tlu.fls0.va_watchpoint_w_in)}} &
1808 (select_pc_b[3:0]))
1809 };
1810
1811//---------------------
1812// Probes for ASI_ITLB_TAG_READ & ASI_ITLB_DATA_ACCESS followme
1813
1814assign fetch_tid_f = `SPC5.ifu_ftu.ftu_asi_ctl.indet_tid_f;
1815
1816assign itag_read_active_bf = `SPC5.ifu_ftu.ftu_ftp_ctl.ftp_itt_rd_req_bf;
1817assign i_data_access_active_bf = `SPC5.ifu_ftu.ftu_ftp_ctl.ftp_itd_rd_req_bf;
1818
1819assign itlb_va_bf = {24'b0,`SPC5.ifu_ftu.asi_addr_bf[39:3],3'b0};
1820assign itlb_value = `SPC5.ifu_ftu.it_rd_data; // [63:0]
1821
1822//---------------------
1823// Probes for ASI_ITLB_PROBE followme
1824
1825assign probe_active_bf = `SPC5.ifu_ftu.ftp_ith_det_req_bf;
1826assign probe_tid_bf = `SPC5.ifu_ftu.ftu_ftp_ctl.ith_det_thr_id;
1827assign probe_value = `SPC5.ifu_ftu.it_rd_data;
1828
1829//----------------------------------------------------------
1830//----------------------------------------------------------
1831
1832always @ (posedge `SPC5.l2clk) begin // {
1833
1834 tstamp = `TOP.core_cycle_cnt - 1;
1835
1836 //---------------------------------
1837 // Pipeline signals
1838 // Have to pipline these past where the TLB was accessed
1839 // to get the parity bits for follow me
1840 // Then we need to subtract 2 from the timestamp so get back
1841 // get the correct time the tlb was accessed.
1842
1843 itag_read_active_f <= itag_read_active_bf;
1844 itag_read_active_c <= itag_read_active_f;
1845 itag_read_active <= itag_read_active_c;
1846
1847 itlb_va_f <= itlb_va_bf;
1848 itlb_va_c <= itlb_va_f;
1849 itlb_va <= itlb_va_c;
1850
1851 fetch_tid_c <= fetch_tid_f;
1852 fetch_tid <= fetch_tid_c;
1853 i_data_access_active_f <= i_data_access_active_bf;
1854 i_data_access_active_c <= i_data_access_active_f;
1855 i_data_access_active <= i_data_access_active_c;
1856
1857 probe_active_f <= probe_active_bf;
1858 probe_active_c <= probe_active_f;
1859 probe_active <= probe_active_c;
1860 probe_tid_f <= probe_tid_bf;
1861 probe_tid_c <= probe_tid_f;
1862 probe_tid <= probe_tid_c;
1863
1864
1865 //---------------------------------
1866 //---------------------------------
1867
1868 //---------------------------------
1869 // DTLB_TAG_READ_REG followme & sync
1870 if (dtag_read_active) begin // {
1871 myasi = 8'h5e;
1872 // Determine which thread is active
1873
1874 mytid = dtlb_tid;
1875 mytnum = (mycid * 8) + mytid;
1876
1877 // followme
1878 `PR_INFO ("pli_int", `INFO,
1879 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
1880 mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp - 1);
1881 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
1882 junk = $sim_send(`PLI_ASI_READ,
1883 mytnum, myasi, dtlb_va, dtlb_value);
1884 end // }
1885
1886 // tlb_sync
1887 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
1888 mycid, mytid, mytnum, myasi, tstamp - 1);
1889 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
1890 junk = $sim_send(`PLI_TLBLOOKUP, mytnum, tstamp - 1, myasi);
1891 end //}
1892
1893 //--------------------
1894 if (`PARGS.show_tlb_on) begin // {
1895 $display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
1896 mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
1897 end //}
1898
1899 end // }
1900
1901 //---------------------------------
1902 // DTLB_DATA_ACCESS_REG followme & sync
1903 if (d_data_access_active) begin // {
1904 myasi = 8'h5d;
1905 mytid = dtlb_tid;
1906 mytnum = (mycid * 8) + mytid;
1907
1908 // followme
1909 `PR_INFO ("pli_int", `INFO,
1910 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
1911 mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp-1);
1912 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
1913 junk = $sim_send(`PLI_ASI_READ,
1914 mytnum,myasi, dtlb_va, dtlb_value);
1915 end // }
1916
1917 // tlb_sync
1918 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
1919 mycid, mytid, mytnum, myasi, tstamp-1);
1920 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
1921 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-1, myasi);
1922 end //}
1923
1924 //--------------------
1925 if (`PARGS.show_tlb_on) begin // {
1926 $display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
1927 mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
1928 end //}
1929 end // }
1930
1931 //---------------------------------
1932 // ITLB_TAG_READ_REG followme & sync
1933 if (itag_read_active) begin // {
1934 myasi = 8'h56;
1935 mytid = fetch_tid;
1936 mytnum = (mycid * 8) + mytid;
1937
1938 // followme
1939 `PR_INFO ("pli_int", `INFO,
1940 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
1941 mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
1942 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
1943 junk = $sim_send(`PLI_ASI_READ,
1944 mytnum, myasi, itlb_va, itlb_value);
1945 end // }
1946
1947 // tlb_sync
1948 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
1949 mycid, mytid, mytnum, myasi, tstamp - 2);
1950 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
1951 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
1952 end //}
1953
1954 //--------------------
1955 if (`PARGS.show_tlb_on) begin // {
1956 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
1957 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
1958 end //}
1959
1960 end // }
1961
1962 //---------------------------------
1963 // ITLB_DATA_ACCESS_REG followme & sync
1964 if (i_data_access_active) begin // {
1965 myasi = 8'h55;
1966 mytid = fetch_tid;
1967 mytnum = (mycid * 8) + mytid;
1968
1969 // followme
1970 `PR_INFO ("pli_int", `INFO,
1971 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
1972 mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
1973 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
1974 junk = $sim_send(`PLI_ASI_READ,
1975 mytnum, myasi, itlb_va, itlb_value);
1976 end // }
1977
1978 // tlb_sync
1979 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
1980 mycid, mytid, mytnum, myasi, tstamp - 2);
1981 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
1982 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
1983 end //}
1984
1985 //--------------------
1986 if (`PARGS.show_tlb_on) begin // {
1987 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
1988 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
1989 end //}
1990
1991 end // }
1992
1993 //---------------------------------
1994 // ITLB_PROBE - followme & sync
1995 if (probe_active) begin // {
1996 myasi = 8'h53;
1997
1998 for (i=0; i<=7; i=i+1) begin // {
1999 if (probe_tid[i]==1'b1) begin // {
2000 mytid = i;
2001 mytnum = (mycid * 8) + mytid;
2002 end // }
2003 end // }
2004
2005 // followme
2006 `PR_INFO ("pli_int", `INFO,
2007 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
2008 mycid,mytid,mytnum,myasi, itlb_va, probe_value, tstamp-2);
2009 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
2010 junk = $sim_send(`PLI_ASI_READ,
2011 mytnum, myasi, itlb_va, probe_value);
2012 end // }
2013
2014 // tlb_sync
2015 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
2016 mycid, mytid, mytnum, myasi, tstamp-2);
2017 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
2018 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-2, myasi);
2019 end //}
2020
2021 //--------------------
2022 if (`PARGS.show_tlb_on) begin // {
2023 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
2024 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
2025 end //}
2026
2027 end // }
2028
2029end // always }
2030
2031
2032
2033//----------------------------------------------------------
2034`endif
2035endmodule
2036
2037`endif
2038
2039`ifdef CORE_6
2040
2041module tlb_misc_c6();
2042`ifndef GATESIM
2043
2044// common defines
2045`include "defines.vh"
2046`include "tlb_sync.vh"
2047
2048//---------------------
2049// Signals for ASI_I/DTLB_TAG_READ followme
2050wire [7:0] select_pc_b;
2051wire [7:0] dtag_read_active;
2052wire [2:0] dtlb_tid;
2053wire [63:0] dtlb_va;
2054wire [63:0] dtlb_value;
2055
2056wire [2:0] fetch_tid_f;
2057reg [2:0] fetch_tid_c;
2058reg [2:0] fetch_tid;
2059wire [7:0] itag_read_active_bf;
2060reg [7:0] itag_read_active_f;
2061reg [7:0] itag_read_active_c;
2062reg [7:0] itag_read_active;
2063wire [63:0] itlb_va_bf;
2064reg [63:0] itlb_va_f;
2065reg [63:0] itlb_va_c;
2066reg [63:0] itlb_va;
2067wire [63:0] itlb_value;
2068
2069//---------------------
2070// Signals for ASI_I/DTLB_DATA_ACCESS followme
2071wire [7:0] d_data_access_active;
2072
2073wire [7:0] i_data_access_active_bf;
2074reg [7:0] i_data_access_active_f;
2075reg [7:0] i_data_access_active_c;
2076reg [7:0] i_data_access_active;
2077
2078//---------------------
2079// Signals for ASI_ITLB_PROBE followme
2080wire probe_active_bf;
2081reg probe_active_f;
2082reg probe_active_c;
2083reg probe_active;
2084wire [7:0] probe_tid_bf;
2085reg [7:0] probe_tid_f;
2086reg [7:0] probe_tid_c;
2087reg [7:0] probe_tid;
2088wire [63:0] probe_value;
2089
2090//---------------------
2091// Misc
2092reg [2:0] mycid;
2093reg [2:0] mytid;
2094reg [5:0] mytnum;
2095reg [7:0] myasi;
2096reg [(`TS_WIDTH-1):0] tstamp;
2097integer i;
2098integer junk;
2099
2100initial begin // {
2101 mycid = 6;
2102end //}
2103
2104//----------------------------------------------------------
2105// DUT probes
2106
2107//---------------------
2108// Probes for ASI_DTLB_TAG_READ & ASI_DTLB_DATA_ACCESS followme
2109
2110assign select_pc_b = `PROBES6.select_pc_b;
2111
2112assign dtlb_tid = `SPC6.lsu.dcc.tid_b;
2113assign dtlb_va = `SPC6.lsu_mmu_va_b;
2114assign dtlb_value = `SPC6.lsu.tgd.ldxa_asi_data_b;
2115
2116assign dtag_read_active = {
2117 ({4{`SPC6.lsu.dcc.dcc_tlb_tag_read_b &
2118 dtlb_tid[2] &
2119 !`SPC6.lsu.lsu_illegal_inst_b &
2120 !`SPC6.tlu.fls1.dae_invalid_asi_w_in &
2121 (!`SPC6.tlu_flush_lsu_b |`SPC6.tlu.fls1.va_watchpoint_w_in)}} &
2122 (select_pc_b[7:4])),
2123 ({4{`SPC6.lsu.dcc.dcc_tlb_tag_read_b &
2124 !dtlb_tid[2] &
2125 !`SPC6.lsu.lsu_illegal_inst_b &
2126 !`SPC6.tlu.fls0.dae_invalid_asi_w_in &
2127 (!`SPC6.tlu_flush_lsu_b |`SPC6.tlu.fls0.va_watchpoint_w_in)}} &
2128 (select_pc_b[3:0]))
2129 };
2130
2131
2132assign d_data_access_active = {
2133 ({4{`SPC6.lsu.dcc.dcc_tlb_data_read_b &
2134 dtlb_tid[2] &
2135 !`SPC6.lsu.lsu_illegal_inst_b &
2136 (!`SPC6.tlu_flush_lsu_b |`SPC6.tlu.fls1.va_watchpoint_w_in)}} &
2137 (select_pc_b[7:4])),
2138 ({4{`SPC6.lsu.dcc.dcc_tlb_data_read_b &
2139 !dtlb_tid[2] &
2140 !`SPC6.lsu.lsu_illegal_inst_b &
2141 (!`SPC6.tlu_flush_lsu_b |`SPC6.tlu.fls0.va_watchpoint_w_in)}} &
2142 (select_pc_b[3:0]))
2143 };
2144
2145//---------------------
2146// Probes for ASI_ITLB_TAG_READ & ASI_ITLB_DATA_ACCESS followme
2147
2148assign fetch_tid_f = `SPC6.ifu_ftu.ftu_asi_ctl.indet_tid_f;
2149
2150assign itag_read_active_bf = `SPC6.ifu_ftu.ftu_ftp_ctl.ftp_itt_rd_req_bf;
2151assign i_data_access_active_bf = `SPC6.ifu_ftu.ftu_ftp_ctl.ftp_itd_rd_req_bf;
2152
2153assign itlb_va_bf = {24'b0,`SPC6.ifu_ftu.asi_addr_bf[39:3],3'b0};
2154assign itlb_value = `SPC6.ifu_ftu.it_rd_data; // [63:0]
2155
2156//---------------------
2157// Probes for ASI_ITLB_PROBE followme
2158
2159assign probe_active_bf = `SPC6.ifu_ftu.ftp_ith_det_req_bf;
2160assign probe_tid_bf = `SPC6.ifu_ftu.ftu_ftp_ctl.ith_det_thr_id;
2161assign probe_value = `SPC6.ifu_ftu.it_rd_data;
2162
2163//----------------------------------------------------------
2164//----------------------------------------------------------
2165
2166always @ (posedge `SPC6.l2clk) begin // {
2167
2168 tstamp = `TOP.core_cycle_cnt - 1;
2169
2170 //---------------------------------
2171 // Pipeline signals
2172 // Have to pipline these past where the TLB was accessed
2173 // to get the parity bits for follow me
2174 // Then we need to subtract 2 from the timestamp so get back
2175 // get the correct time the tlb was accessed.
2176
2177 itag_read_active_f <= itag_read_active_bf;
2178 itag_read_active_c <= itag_read_active_f;
2179 itag_read_active <= itag_read_active_c;
2180
2181 itlb_va_f <= itlb_va_bf;
2182 itlb_va_c <= itlb_va_f;
2183 itlb_va <= itlb_va_c;
2184
2185 fetch_tid_c <= fetch_tid_f;
2186 fetch_tid <= fetch_tid_c;
2187 i_data_access_active_f <= i_data_access_active_bf;
2188 i_data_access_active_c <= i_data_access_active_f;
2189 i_data_access_active <= i_data_access_active_c;
2190
2191 probe_active_f <= probe_active_bf;
2192 probe_active_c <= probe_active_f;
2193 probe_active <= probe_active_c;
2194 probe_tid_f <= probe_tid_bf;
2195 probe_tid_c <= probe_tid_f;
2196 probe_tid <= probe_tid_c;
2197
2198
2199 //---------------------------------
2200 //---------------------------------
2201
2202 //---------------------------------
2203 // DTLB_TAG_READ_REG followme & sync
2204 if (dtag_read_active) begin // {
2205 myasi = 8'h5e;
2206 // Determine which thread is active
2207
2208 mytid = dtlb_tid;
2209 mytnum = (mycid * 8) + mytid;
2210
2211 // followme
2212 `PR_INFO ("pli_int", `INFO,
2213 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
2214 mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp - 1);
2215 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
2216 junk = $sim_send(`PLI_ASI_READ,
2217 mytnum, myasi, dtlb_va, dtlb_value);
2218 end // }
2219
2220 // tlb_sync
2221 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
2222 mycid, mytid, mytnum, myasi, tstamp - 1);
2223 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
2224 junk = $sim_send(`PLI_TLBLOOKUP, mytnum, tstamp - 1, myasi);
2225 end //}
2226
2227 //--------------------
2228 if (`PARGS.show_tlb_on) begin // {
2229 $display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
2230 mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
2231 end //}
2232
2233 end // }
2234
2235 //---------------------------------
2236 // DTLB_DATA_ACCESS_REG followme & sync
2237 if (d_data_access_active) begin // {
2238 myasi = 8'h5d;
2239 mytid = dtlb_tid;
2240 mytnum = (mycid * 8) + mytid;
2241
2242 // followme
2243 `PR_INFO ("pli_int", `INFO,
2244 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
2245 mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp-1);
2246 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
2247 junk = $sim_send(`PLI_ASI_READ,
2248 mytnum,myasi, dtlb_va, dtlb_value);
2249 end // }
2250
2251 // tlb_sync
2252 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
2253 mycid, mytid, mytnum, myasi, tstamp-1);
2254 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
2255 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-1, myasi);
2256 end //}
2257
2258 //--------------------
2259 if (`PARGS.show_tlb_on) begin // {
2260 $display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
2261 mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
2262 end //}
2263 end // }
2264
2265 //---------------------------------
2266 // ITLB_TAG_READ_REG followme & sync
2267 if (itag_read_active) begin // {
2268 myasi = 8'h56;
2269 mytid = fetch_tid;
2270 mytnum = (mycid * 8) + mytid;
2271
2272 // followme
2273 `PR_INFO ("pli_int", `INFO,
2274 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
2275 mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
2276 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
2277 junk = $sim_send(`PLI_ASI_READ,
2278 mytnum, myasi, itlb_va, itlb_value);
2279 end // }
2280
2281 // tlb_sync
2282 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
2283 mycid, mytid, mytnum, myasi, tstamp - 2);
2284 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
2285 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
2286 end //}
2287
2288 //--------------------
2289 if (`PARGS.show_tlb_on) begin // {
2290 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
2291 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
2292 end //}
2293
2294 end // }
2295
2296 //---------------------------------
2297 // ITLB_DATA_ACCESS_REG followme & sync
2298 if (i_data_access_active) begin // {
2299 myasi = 8'h55;
2300 mytid = fetch_tid;
2301 mytnum = (mycid * 8) + mytid;
2302
2303 // followme
2304 `PR_INFO ("pli_int", `INFO,
2305 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
2306 mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
2307 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
2308 junk = $sim_send(`PLI_ASI_READ,
2309 mytnum, myasi, itlb_va, itlb_value);
2310 end // }
2311
2312 // tlb_sync
2313 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
2314 mycid, mytid, mytnum, myasi, tstamp - 2);
2315 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
2316 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
2317 end //}
2318
2319 //--------------------
2320 if (`PARGS.show_tlb_on) begin // {
2321 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
2322 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
2323 end //}
2324
2325 end // }
2326
2327 //---------------------------------
2328 // ITLB_PROBE - followme & sync
2329 if (probe_active) begin // {
2330 myasi = 8'h53;
2331
2332 for (i=0; i<=7; i=i+1) begin // {
2333 if (probe_tid[i]==1'b1) begin // {
2334 mytid = i;
2335 mytnum = (mycid * 8) + mytid;
2336 end // }
2337 end // }
2338
2339 // followme
2340 `PR_INFO ("pli_int", `INFO,
2341 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
2342 mycid,mytid,mytnum,myasi, itlb_va, probe_value, tstamp-2);
2343 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
2344 junk = $sim_send(`PLI_ASI_READ,
2345 mytnum, myasi, itlb_va, probe_value);
2346 end // }
2347
2348 // tlb_sync
2349 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
2350 mycid, mytid, mytnum, myasi, tstamp-2);
2351 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
2352 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-2, myasi);
2353 end //}
2354
2355 //--------------------
2356 if (`PARGS.show_tlb_on) begin // {
2357 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
2358 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
2359 end //}
2360
2361 end // }
2362
2363end // always }
2364
2365
2366
2367//----------------------------------------------------------
2368`endif
2369endmodule
2370
2371`endif
2372
2373`ifdef CORE_7
2374
2375module tlb_misc_c7();
2376`ifndef GATESIM
2377
2378// common defines
2379`include "defines.vh"
2380`include "tlb_sync.vh"
2381
2382//---------------------
2383// Signals for ASI_I/DTLB_TAG_READ followme
2384wire [7:0] select_pc_b;
2385wire [7:0] dtag_read_active;
2386wire [2:0] dtlb_tid;
2387wire [63:0] dtlb_va;
2388wire [63:0] dtlb_value;
2389
2390wire [2:0] fetch_tid_f;
2391reg [2:0] fetch_tid_c;
2392reg [2:0] fetch_tid;
2393wire [7:0] itag_read_active_bf;
2394reg [7:0] itag_read_active_f;
2395reg [7:0] itag_read_active_c;
2396reg [7:0] itag_read_active;
2397wire [63:0] itlb_va_bf;
2398reg [63:0] itlb_va_f;
2399reg [63:0] itlb_va_c;
2400reg [63:0] itlb_va;
2401wire [63:0] itlb_value;
2402
2403//---------------------
2404// Signals for ASI_I/DTLB_DATA_ACCESS followme
2405wire [7:0] d_data_access_active;
2406
2407wire [7:0] i_data_access_active_bf;
2408reg [7:0] i_data_access_active_f;
2409reg [7:0] i_data_access_active_c;
2410reg [7:0] i_data_access_active;
2411
2412//---------------------
2413// Signals for ASI_ITLB_PROBE followme
2414wire probe_active_bf;
2415reg probe_active_f;
2416reg probe_active_c;
2417reg probe_active;
2418wire [7:0] probe_tid_bf;
2419reg [7:0] probe_tid_f;
2420reg [7:0] probe_tid_c;
2421reg [7:0] probe_tid;
2422wire [63:0] probe_value;
2423
2424//---------------------
2425// Misc
2426reg [2:0] mycid;
2427reg [2:0] mytid;
2428reg [5:0] mytnum;
2429reg [7:0] myasi;
2430reg [(`TS_WIDTH-1):0] tstamp;
2431integer i;
2432integer junk;
2433
2434initial begin // {
2435 mycid = 7;
2436end //}
2437
2438//----------------------------------------------------------
2439// DUT probes
2440
2441//---------------------
2442// Probes for ASI_DTLB_TAG_READ & ASI_DTLB_DATA_ACCESS followme
2443
2444assign select_pc_b = `PROBES7.select_pc_b;
2445
2446assign dtlb_tid = `SPC7.lsu.dcc.tid_b;
2447assign dtlb_va = `SPC7.lsu_mmu_va_b;
2448assign dtlb_value = `SPC7.lsu.tgd.ldxa_asi_data_b;
2449
2450assign dtag_read_active = {
2451 ({4{`SPC7.lsu.dcc.dcc_tlb_tag_read_b &
2452 dtlb_tid[2] &
2453 !`SPC7.lsu.lsu_illegal_inst_b &
2454 !`SPC7.tlu.fls1.dae_invalid_asi_w_in &
2455 (!`SPC7.tlu_flush_lsu_b |`SPC7.tlu.fls1.va_watchpoint_w_in)}} &
2456 (select_pc_b[7:4])),
2457 ({4{`SPC7.lsu.dcc.dcc_tlb_tag_read_b &
2458 !dtlb_tid[2] &
2459 !`SPC7.lsu.lsu_illegal_inst_b &
2460 !`SPC7.tlu.fls0.dae_invalid_asi_w_in &
2461 (!`SPC7.tlu_flush_lsu_b |`SPC7.tlu.fls0.va_watchpoint_w_in)}} &
2462 (select_pc_b[3:0]))
2463 };
2464
2465
2466assign d_data_access_active = {
2467 ({4{`SPC7.lsu.dcc.dcc_tlb_data_read_b &
2468 dtlb_tid[2] &
2469 !`SPC7.lsu.lsu_illegal_inst_b &
2470 (!`SPC7.tlu_flush_lsu_b |`SPC7.tlu.fls1.va_watchpoint_w_in)}} &
2471 (select_pc_b[7:4])),
2472 ({4{`SPC7.lsu.dcc.dcc_tlb_data_read_b &
2473 !dtlb_tid[2] &
2474 !`SPC7.lsu.lsu_illegal_inst_b &
2475 (!`SPC7.tlu_flush_lsu_b |`SPC7.tlu.fls0.va_watchpoint_w_in)}} &
2476 (select_pc_b[3:0]))
2477 };
2478
2479//---------------------
2480// Probes for ASI_ITLB_TAG_READ & ASI_ITLB_DATA_ACCESS followme
2481
2482assign fetch_tid_f = `SPC7.ifu_ftu.ftu_asi_ctl.indet_tid_f;
2483
2484assign itag_read_active_bf = `SPC7.ifu_ftu.ftu_ftp_ctl.ftp_itt_rd_req_bf;
2485assign i_data_access_active_bf = `SPC7.ifu_ftu.ftu_ftp_ctl.ftp_itd_rd_req_bf;
2486
2487assign itlb_va_bf = {24'b0,`SPC7.ifu_ftu.asi_addr_bf[39:3],3'b0};
2488assign itlb_value = `SPC7.ifu_ftu.it_rd_data; // [63:0]
2489
2490//---------------------
2491// Probes for ASI_ITLB_PROBE followme
2492
2493assign probe_active_bf = `SPC7.ifu_ftu.ftp_ith_det_req_bf;
2494assign probe_tid_bf = `SPC7.ifu_ftu.ftu_ftp_ctl.ith_det_thr_id;
2495assign probe_value = `SPC7.ifu_ftu.it_rd_data;
2496
2497//----------------------------------------------------------
2498//----------------------------------------------------------
2499
2500always @ (posedge `SPC7.l2clk) begin // {
2501
2502 tstamp = `TOP.core_cycle_cnt - 1;
2503
2504 //---------------------------------
2505 // Pipeline signals
2506 // Have to pipline these past where the TLB was accessed
2507 // to get the parity bits for follow me
2508 // Then we need to subtract 2 from the timestamp so get back
2509 // get the correct time the tlb was accessed.
2510
2511 itag_read_active_f <= itag_read_active_bf;
2512 itag_read_active_c <= itag_read_active_f;
2513 itag_read_active <= itag_read_active_c;
2514
2515 itlb_va_f <= itlb_va_bf;
2516 itlb_va_c <= itlb_va_f;
2517 itlb_va <= itlb_va_c;
2518
2519 fetch_tid_c <= fetch_tid_f;
2520 fetch_tid <= fetch_tid_c;
2521 i_data_access_active_f <= i_data_access_active_bf;
2522 i_data_access_active_c <= i_data_access_active_f;
2523 i_data_access_active <= i_data_access_active_c;
2524
2525 probe_active_f <= probe_active_bf;
2526 probe_active_c <= probe_active_f;
2527 probe_active <= probe_active_c;
2528 probe_tid_f <= probe_tid_bf;
2529 probe_tid_c <= probe_tid_f;
2530 probe_tid <= probe_tid_c;
2531
2532
2533 //---------------------------------
2534 //---------------------------------
2535
2536 //---------------------------------
2537 // DTLB_TAG_READ_REG followme & sync
2538 if (dtag_read_active) begin // {
2539 myasi = 8'h5e;
2540 // Determine which thread is active
2541
2542 mytid = dtlb_tid;
2543 mytnum = (mycid * 8) + mytid;
2544
2545 // followme
2546 `PR_INFO ("pli_int", `INFO,
2547 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
2548 mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp - 1);
2549 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
2550 junk = $sim_send(`PLI_ASI_READ,
2551 mytnum, myasi, dtlb_va, dtlb_value);
2552 end // }
2553
2554 // tlb_sync
2555 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
2556 mycid, mytid, mytnum, myasi, tstamp - 1);
2557 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
2558 junk = $sim_send(`PLI_TLBLOOKUP, mytnum, tstamp - 1, myasi);
2559 end //}
2560
2561 //--------------------
2562 if (`PARGS.show_tlb_on) begin // {
2563 $display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
2564 mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
2565 end //}
2566
2567 end // }
2568
2569 //---------------------------------
2570 // DTLB_DATA_ACCESS_REG followme & sync
2571 if (d_data_access_active) begin // {
2572 myasi = 8'h5d;
2573 mytid = dtlb_tid;
2574 mytnum = (mycid * 8) + mytid;
2575
2576 // followme
2577 `PR_INFO ("pli_int", `INFO,
2578 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
2579 mycid,mytid,mytnum,myasi, dtlb_va, dtlb_value, tstamp-1);
2580 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
2581 junk = $sim_send(`PLI_ASI_READ,
2582 mytnum,myasi, dtlb_va, dtlb_value);
2583 end // }
2584
2585 // tlb_sync
2586 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
2587 mycid, mytid, mytnum, myasi, tstamp-1);
2588 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
2589 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-1, myasi);
2590 end //}
2591
2592 //--------------------
2593 if (`PARGS.show_tlb_on) begin // {
2594 $display ("SHOW_TLB: DTLB_LOOK C%0d T%0d asi=%h ts=%0d",
2595 mycid,mytid,myasi,(tstamp-1)*`TOP.core_period);
2596 end //}
2597 end // }
2598
2599 //---------------------------------
2600 // ITLB_TAG_READ_REG followme & sync
2601 if (itag_read_active) begin // {
2602 myasi = 8'h56;
2603 mytid = fetch_tid;
2604 mytnum = (mycid * 8) + mytid;
2605
2606 // followme
2607 `PR_INFO ("pli_int", `INFO,
2608 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
2609 mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
2610 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
2611 junk = $sim_send(`PLI_ASI_READ,
2612 mytnum, myasi, itlb_va, itlb_value);
2613 end // }
2614
2615 // tlb_sync
2616 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
2617 mycid, mytid, mytnum, myasi, tstamp - 2);
2618 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
2619 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
2620 end //}
2621
2622 //--------------------
2623 if (`PARGS.show_tlb_on) begin // {
2624 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
2625 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
2626 end //}
2627
2628 end // }
2629
2630 //---------------------------------
2631 // ITLB_DATA_ACCESS_REG followme & sync
2632 if (i_data_access_active) begin // {
2633 myasi = 8'h55;
2634 mytid = fetch_tid;
2635 mytnum = (mycid * 8) + mytid;
2636
2637 // followme
2638 `PR_INFO ("pli_int", `INFO,
2639 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
2640 mycid,mytid,mytnum,myasi, itlb_va, itlb_value, tstamp - 2);
2641 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
2642 junk = $sim_send(`PLI_ASI_READ,
2643 mytnum, myasi, itlb_va, itlb_value);
2644 end // }
2645
2646 // tlb_sync
2647 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
2648 mycid, mytid, mytnum, myasi, tstamp - 2);
2649 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
2650 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp - 2, myasi);
2651 end //}
2652
2653 //--------------------
2654 if (`PARGS.show_tlb_on) begin // {
2655 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
2656 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
2657 end //}
2658
2659 end // }
2660
2661 //---------------------------------
2662 // ITLB_PROBE - followme & sync
2663 if (probe_active) begin // {
2664 myasi = 8'h53;
2665
2666 for (i=0; i<=7; i=i+1) begin // {
2667 if (probe_tid[i]==1'b1) begin // {
2668 mytid = i;
2669 mytnum = (mycid * 8) + mytid;
2670 end // }
2671 end // }
2672
2673 // followme
2674 `PR_INFO ("pli_int", `INFO,
2675 "C%0d T%0d PLI_ASI_READ tid=%d asi=%0h va=%h val=0x%h ts=%0d",
2676 mycid,mytid,mytnum,myasi, itlb_va, probe_value, tstamp-2);
2677 if (`PARGS.nas_check_on && `PARGS.int_sync_on) begin // {
2678 junk = $sim_send(`PLI_ASI_READ,
2679 mytnum, myasi, itlb_va, probe_value);
2680 end // }
2681
2682 // tlb_sync
2683 `PR_INFO ("pli_tlb", `INFO, "C%0d T%0d PLI_TLBLOOKUP tid=%d asi=%h ts=%0d",
2684 mycid, mytid, mytnum, myasi, tstamp-2);
2685 if (`PARGS.nas_check_on && `PARGS.tlb_sync_on) begin // {
2686 junk = $sim_send(`PLI_TLBLOOKUP, mytnum,tstamp-2, myasi);
2687 end //}
2688
2689 //--------------------
2690 if (`PARGS.show_tlb_on) begin // {
2691 $display ("SHOW_TLB: ITLB_LOOK C%0d T%0d asi=%h ts=%0d",
2692 mycid,mytid,myasi,(tstamp-2)*`TOP.core_period);
2693 end //}
2694
2695 end // }
2696
2697end // always }
2698
2699
2700
2701//----------------------------------------------------------
2702`endif
2703endmodule
2704
2705`endif
2706
2707//----------------------------------------------------------
2708//----------------------------------------------------------