Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / env / common / verilog / axis_traps / axis_trap_pipe.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: axis_trap_pipe.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
37
38module axis_trap_pipe0 (
39 mycid,
40 mytid,
41 PC_reg,
42);
43
44//----------------------------------------------------------
45input [2:0] mycid;
46input [2:0] mytid;
47
48input [47:0] PC_reg;
49
50reg [47:0] pc_fx4;
51reg [47:0] pc_fx5;
52reg [47:0] pc_fb;
53reg [47:0] pc_fw;
54reg [47:0] pc_fw1;
55reg [47:0] pc_fw2;
56reg [47:0] last_pc;
57
58`ifndef PALLADIUM
59
60`ifdef AXIS_TL
61
62`ifndef GATESIM
63
64//----------------------------------------------------------
65wire [5:0] mytnum;
66assign mytnum = (mycid*8)+mytid;
67
68//----------------------------------------------------------
69// Pipelined Signals
70always @ (posedge `SPC0.gclk) begin // {
71
72 pc_fx4 <= PC_reg;
73 pc_fx5 <= pc_fx4;
74 pc_fb <= pc_fx5;
75 pc_fw <= pc_fb;
76 pc_fw1 <= pc_fw;
77 pc_fw2 <= pc_fw1;
78
79end // }
80
81//----------------------------------------------------------
82// When instruction completes,
83// Push differences to simics
84
85wire myclk = `SPC0.gclk;
86reg hit_good_trap;
87initial hit_good_trap=1'b0;
88initial last_pc = 0;
89
90always @ (posedge myclk) begin // {
91
92 //----------
93 // End detection for non-sas runs ..
94 if (! `PARGS.nas_check_on) begin
95 if (last_pc[47:0] != pc_fw2[47:0]) begin
96 if (`PARGS.bad_trap_count >= 1) begin
97 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr1 & `PC_MASK) begin // axis tbcall_region
98 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr1);
99 axis_top.task_dump_mem;
100 axis_top.task_rcc_off;
101 end
102 end
103 if (`PARGS.bad_trap_count >= 2) begin
104 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr2 & `PC_MASK) begin // axis tbcall_region
105 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr2);
106 axis_top.task_dump_mem;
107 axis_top.task_rcc_off;
108 //end
109 end
110 end
111 if (`PARGS.bad_trap_count >= 3) begin
112 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr3 & `PC_MASK) begin // axis tbcall_region
113 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr3);
114 axis_top.task_dump_mem;
115 axis_top.task_rcc_off;
116 end
117 end
118 if (`PARGS.bad_trap_count >= 4) begin
119 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr4 & `PC_MASK) begin // axis tbcall_region
120 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr4);
121 axis_top.task_dump_mem;
122 axis_top.task_rcc_off;
123 end
124 end
125 last_pc <= pc_fw2;
126 end
127 if (({16'b0,pc_fw2}&`PC_MASK) ===
128 (`PARGS.good_trap_addr&`PC_MASK) && !hit_good_trap) begin
129 hit_good_trap<=1'b1;
130 end
131 end
132
133end
134`endif
135`endif //AXIS_TL
136
137`endif //PALLADIUM
138endmodule
139//----------------------------------------------------------
140//----------------------------------------------------------
141
142`endif
143
144
145`ifdef CORE_1
146
147
148module axis_trap_pipe1 (
149 mycid,
150 mytid,
151 PC_reg,
152);
153
154//----------------------------------------------------------
155input [2:0] mycid;
156input [2:0] mytid;
157
158input [47:0] PC_reg;
159
160reg [47:0] pc_fx4;
161reg [47:0] pc_fx5;
162reg [47:0] pc_fb;
163reg [47:0] pc_fw;
164reg [47:0] pc_fw1;
165reg [47:0] pc_fw2;
166reg [47:0] last_pc;
167
168`ifndef PALLADIUM
169
170`ifdef AXIS_TL
171
172`ifndef GATESIM
173
174//----------------------------------------------------------
175wire [5:0] mytnum;
176assign mytnum = (mycid*8)+mytid;
177
178//----------------------------------------------------------
179// Pipelined Signals
180always @ (posedge `SPC1.gclk) begin // {
181
182 pc_fx4 <= PC_reg;
183 pc_fx5 <= pc_fx4;
184 pc_fb <= pc_fx5;
185 pc_fw <= pc_fb;
186 pc_fw1 <= pc_fw;
187 pc_fw2 <= pc_fw1;
188
189end // }
190
191//----------------------------------------------------------
192// When instruction completes,
193// Push differences to simics
194
195wire myclk = `SPC1.gclk;
196reg hit_good_trap;
197initial hit_good_trap=1'b0;
198initial last_pc = 0;
199
200always @ (posedge myclk) begin // {
201
202 //----------
203 // End detection for non-sas runs ..
204 if (! `PARGS.nas_check_on) begin
205 if (last_pc[47:0] != pc_fw2[47:0]) begin
206 if (`PARGS.bad_trap_count >= 1) begin
207 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr1 & `PC_MASK) begin // axis tbcall_region
208 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr1);
209 axis_top.task_dump_mem;
210 axis_top.task_rcc_off;
211 end
212 end
213 if (`PARGS.bad_trap_count >= 2) begin
214 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr2 & `PC_MASK) begin // axis tbcall_region
215 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr2);
216 axis_top.task_dump_mem;
217 axis_top.task_rcc_off;
218 //end
219 end
220 end
221 if (`PARGS.bad_trap_count >= 3) begin
222 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr3 & `PC_MASK) begin // axis tbcall_region
223 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr3);
224 axis_top.task_dump_mem;
225 axis_top.task_rcc_off;
226 end
227 end
228 if (`PARGS.bad_trap_count >= 4) begin
229 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr4 & `PC_MASK) begin // axis tbcall_region
230 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr4);
231 axis_top.task_dump_mem;
232 axis_top.task_rcc_off;
233 end
234 end
235 last_pc <= pc_fw2;
236 end
237 if (({16'b0,pc_fw2}&`PC_MASK) ===
238 (`PARGS.good_trap_addr&`PC_MASK) && !hit_good_trap) begin
239 hit_good_trap<=1'b1;
240 end
241 end
242
243end
244`endif
245`endif //AXIS_TL
246
247`endif //PALLADIUM
248endmodule
249//----------------------------------------------------------
250//----------------------------------------------------------
251
252`endif
253
254
255`ifdef CORE_2
256
257
258module axis_trap_pipe2 (
259 mycid,
260 mytid,
261 PC_reg,
262);
263
264//----------------------------------------------------------
265input [2:0] mycid;
266input [2:0] mytid;
267
268input [47:0] PC_reg;
269
270reg [47:0] pc_fx4;
271reg [47:0] pc_fx5;
272reg [47:0] pc_fb;
273reg [47:0] pc_fw;
274reg [47:0] pc_fw1;
275reg [47:0] pc_fw2;
276reg [47:0] last_pc;
277
278`ifndef PALLADIUM
279
280`ifdef AXIS_TL
281
282`ifndef GATESIM
283
284//----------------------------------------------------------
285wire [5:0] mytnum;
286assign mytnum = (mycid*8)+mytid;
287
288//----------------------------------------------------------
289// Pipelined Signals
290always @ (posedge `SPC2.gclk) begin // {
291
292 pc_fx4 <= PC_reg;
293 pc_fx5 <= pc_fx4;
294 pc_fb <= pc_fx5;
295 pc_fw <= pc_fb;
296 pc_fw1 <= pc_fw;
297 pc_fw2 <= pc_fw1;
298
299end // }
300
301//----------------------------------------------------------
302// When instruction completes,
303// Push differences to simics
304
305wire myclk = `SPC2.gclk;
306reg hit_good_trap;
307initial hit_good_trap=1'b0;
308initial last_pc = 0;
309
310always @ (posedge myclk) begin // {
311
312 //----------
313 // End detection for non-sas runs ..
314 if (! `PARGS.nas_check_on) begin
315 if (last_pc[47:0] != pc_fw2[47:0]) begin
316 if (`PARGS.bad_trap_count >= 1) begin
317 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr1 & `PC_MASK) begin // axis tbcall_region
318 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr1);
319 axis_top.task_dump_mem;
320 axis_top.task_rcc_off;
321 end
322 end
323 if (`PARGS.bad_trap_count >= 2) begin
324 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr2 & `PC_MASK) begin // axis tbcall_region
325 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr2);
326 axis_top.task_dump_mem;
327 axis_top.task_rcc_off;
328 //end
329 end
330 end
331 if (`PARGS.bad_trap_count >= 3) begin
332 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr3 & `PC_MASK) begin // axis tbcall_region
333 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr3);
334 axis_top.task_dump_mem;
335 axis_top.task_rcc_off;
336 end
337 end
338 if (`PARGS.bad_trap_count >= 4) begin
339 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr4 & `PC_MASK) begin // axis tbcall_region
340 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr4);
341 axis_top.task_dump_mem;
342 axis_top.task_rcc_off;
343 end
344 end
345 last_pc <= pc_fw2;
346 end
347 if (({16'b0,pc_fw2}&`PC_MASK) ===
348 (`PARGS.good_trap_addr&`PC_MASK) && !hit_good_trap) begin
349 hit_good_trap<=1'b1;
350 end
351 end
352
353end
354`endif
355`endif //AXIS_TL
356
357`endif //PALLADIUM
358endmodule
359//----------------------------------------------------------
360//----------------------------------------------------------
361
362`endif
363
364
365`ifdef CORE_3
366
367
368module axis_trap_pipe3 (
369 mycid,
370 mytid,
371 PC_reg,
372);
373
374//----------------------------------------------------------
375input [2:0] mycid;
376input [2:0] mytid;
377
378input [47:0] PC_reg;
379
380reg [47:0] pc_fx4;
381reg [47:0] pc_fx5;
382reg [47:0] pc_fb;
383reg [47:0] pc_fw;
384reg [47:0] pc_fw1;
385reg [47:0] pc_fw2;
386reg [47:0] last_pc;
387
388`ifndef PALLADIUM
389
390`ifdef AXIS_TL
391
392`ifndef GATESIM
393
394//----------------------------------------------------------
395wire [5:0] mytnum;
396assign mytnum = (mycid*8)+mytid;
397
398//----------------------------------------------------------
399// Pipelined Signals
400always @ (posedge `SPC3.gclk) begin // {
401
402 pc_fx4 <= PC_reg;
403 pc_fx5 <= pc_fx4;
404 pc_fb <= pc_fx5;
405 pc_fw <= pc_fb;
406 pc_fw1 <= pc_fw;
407 pc_fw2 <= pc_fw1;
408
409end // }
410
411//----------------------------------------------------------
412// When instruction completes,
413// Push differences to simics
414
415wire myclk = `SPC3.gclk;
416reg hit_good_trap;
417initial hit_good_trap=1'b0;
418initial last_pc = 0;
419
420always @ (posedge myclk) begin // {
421
422 //----------
423 // End detection for non-sas runs ..
424 if (! `PARGS.nas_check_on) begin
425 if (last_pc[47:0] != pc_fw2[47:0]) begin
426 if (`PARGS.bad_trap_count >= 1) begin
427 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr1 & `PC_MASK) begin // axis tbcall_region
428 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr1);
429 axis_top.task_dump_mem;
430 axis_top.task_rcc_off;
431 end
432 end
433 if (`PARGS.bad_trap_count >= 2) begin
434 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr2 & `PC_MASK) begin // axis tbcall_region
435 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr2);
436 axis_top.task_dump_mem;
437 axis_top.task_rcc_off;
438 //end
439 end
440 end
441 if (`PARGS.bad_trap_count >= 3) begin
442 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr3 & `PC_MASK) begin // axis tbcall_region
443 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr3);
444 axis_top.task_dump_mem;
445 axis_top.task_rcc_off;
446 end
447 end
448 if (`PARGS.bad_trap_count >= 4) begin
449 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr4 & `PC_MASK) begin // axis tbcall_region
450 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr4);
451 axis_top.task_dump_mem;
452 axis_top.task_rcc_off;
453 end
454 end
455 last_pc <= pc_fw2;
456 end
457 if (({16'b0,pc_fw2}&`PC_MASK) ===
458 (`PARGS.good_trap_addr&`PC_MASK) && !hit_good_trap) begin
459 hit_good_trap<=1'b1;
460 end
461 end
462
463end
464`endif
465`endif //AXIS_TL
466
467`endif //PALLADIUM
468endmodule
469//----------------------------------------------------------
470//----------------------------------------------------------
471
472`endif
473
474
475`ifdef CORE_4
476
477
478module axis_trap_pipe4 (
479 mycid,
480 mytid,
481 PC_reg,
482);
483
484//----------------------------------------------------------
485input [2:0] mycid;
486input [2:0] mytid;
487
488input [47:0] PC_reg;
489
490reg [47:0] pc_fx4;
491reg [47:0] pc_fx5;
492reg [47:0] pc_fb;
493reg [47:0] pc_fw;
494reg [47:0] pc_fw1;
495reg [47:0] pc_fw2;
496reg [47:0] last_pc;
497
498`ifndef PALLADIUM
499
500`ifdef AXIS_TL
501
502`ifndef GATESIM
503
504//----------------------------------------------------------
505wire [5:0] mytnum;
506assign mytnum = (mycid*8)+mytid;
507
508//----------------------------------------------------------
509// Pipelined Signals
510always @ (posedge `SPC4.gclk) begin // {
511
512 pc_fx4 <= PC_reg;
513 pc_fx5 <= pc_fx4;
514 pc_fb <= pc_fx5;
515 pc_fw <= pc_fb;
516 pc_fw1 <= pc_fw;
517 pc_fw2 <= pc_fw1;
518
519end // }
520
521//----------------------------------------------------------
522// When instruction completes,
523// Push differences to simics
524
525wire myclk = `SPC4.gclk;
526reg hit_good_trap;
527initial hit_good_trap=1'b0;
528initial last_pc = 0;
529
530always @ (posedge myclk) begin // {
531
532 //----------
533 // End detection for non-sas runs ..
534 if (! `PARGS.nas_check_on) begin
535 if (last_pc[47:0] != pc_fw2[47:0]) begin
536 if (`PARGS.bad_trap_count >= 1) begin
537 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr1 & `PC_MASK) begin // axis tbcall_region
538 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr1);
539 axis_top.task_dump_mem;
540 axis_top.task_rcc_off;
541 end
542 end
543 if (`PARGS.bad_trap_count >= 2) begin
544 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr2 & `PC_MASK) begin // axis tbcall_region
545 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr2);
546 axis_top.task_dump_mem;
547 axis_top.task_rcc_off;
548 //end
549 end
550 end
551 if (`PARGS.bad_trap_count >= 3) begin
552 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr3 & `PC_MASK) begin // axis tbcall_region
553 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr3);
554 axis_top.task_dump_mem;
555 axis_top.task_rcc_off;
556 end
557 end
558 if (`PARGS.bad_trap_count >= 4) begin
559 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr4 & `PC_MASK) begin // axis tbcall_region
560 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr4);
561 axis_top.task_dump_mem;
562 axis_top.task_rcc_off;
563 end
564 end
565 last_pc <= pc_fw2;
566 end
567 if (({16'b0,pc_fw2}&`PC_MASK) ===
568 (`PARGS.good_trap_addr&`PC_MASK) && !hit_good_trap) begin
569 hit_good_trap<=1'b1;
570 end
571 end
572
573end
574`endif
575`endif //AXIS_TL
576
577`endif //PALLADIUM
578endmodule
579//----------------------------------------------------------
580//----------------------------------------------------------
581
582`endif
583
584
585`ifdef CORE_5
586
587
588module axis_trap_pipe5 (
589 mycid,
590 mytid,
591 PC_reg,
592);
593
594//----------------------------------------------------------
595input [2:0] mycid;
596input [2:0] mytid;
597
598input [47:0] PC_reg;
599
600reg [47:0] pc_fx4;
601reg [47:0] pc_fx5;
602reg [47:0] pc_fb;
603reg [47:0] pc_fw;
604reg [47:0] pc_fw1;
605reg [47:0] pc_fw2;
606reg [47:0] last_pc;
607
608`ifndef PALLADIUM
609
610`ifdef AXIS_TL
611
612`ifndef GATESIM
613
614//----------------------------------------------------------
615wire [5:0] mytnum;
616assign mytnum = (mycid*8)+mytid;
617
618//----------------------------------------------------------
619// Pipelined Signals
620always @ (posedge `SPC5.gclk) begin // {
621
622 pc_fx4 <= PC_reg;
623 pc_fx5 <= pc_fx4;
624 pc_fb <= pc_fx5;
625 pc_fw <= pc_fb;
626 pc_fw1 <= pc_fw;
627 pc_fw2 <= pc_fw1;
628
629end // }
630
631//----------------------------------------------------------
632// When instruction completes,
633// Push differences to simics
634
635wire myclk = `SPC5.gclk;
636reg hit_good_trap;
637initial hit_good_trap=1'b0;
638initial last_pc = 0;
639
640always @ (posedge myclk) begin // {
641
642 //----------
643 // End detection for non-sas runs ..
644 if (! `PARGS.nas_check_on) begin
645 if (last_pc[47:0] != pc_fw2[47:0]) begin
646 if (`PARGS.bad_trap_count >= 1) begin
647 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr1 & `PC_MASK) begin // axis tbcall_region
648 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr1);
649 axis_top.task_dump_mem;
650 axis_top.task_rcc_off;
651 end
652 end
653 if (`PARGS.bad_trap_count >= 2) begin
654 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr2 & `PC_MASK) begin // axis tbcall_region
655 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr2);
656 axis_top.task_dump_mem;
657 axis_top.task_rcc_off;
658 //end
659 end
660 end
661 if (`PARGS.bad_trap_count >= 3) begin
662 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr3 & `PC_MASK) begin // axis tbcall_region
663 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr3);
664 axis_top.task_dump_mem;
665 axis_top.task_rcc_off;
666 end
667 end
668 if (`PARGS.bad_trap_count >= 4) begin
669 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr4 & `PC_MASK) begin // axis tbcall_region
670 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr4);
671 axis_top.task_dump_mem;
672 axis_top.task_rcc_off;
673 end
674 end
675 last_pc <= pc_fw2;
676 end
677 if (({16'b0,pc_fw2}&`PC_MASK) ===
678 (`PARGS.good_trap_addr&`PC_MASK) && !hit_good_trap) begin
679 hit_good_trap<=1'b1;
680 end
681 end
682
683end
684`endif
685`endif //AXIS_TL
686
687`endif //PALLADIUM
688endmodule
689//----------------------------------------------------------
690//----------------------------------------------------------
691
692`endif
693
694
695`ifdef CORE_6
696
697
698module axis_trap_pipe6 (
699 mycid,
700 mytid,
701 PC_reg,
702);
703
704//----------------------------------------------------------
705input [2:0] mycid;
706input [2:0] mytid;
707
708input [47:0] PC_reg;
709
710reg [47:0] pc_fx4;
711reg [47:0] pc_fx5;
712reg [47:0] pc_fb;
713reg [47:0] pc_fw;
714reg [47:0] pc_fw1;
715reg [47:0] pc_fw2;
716reg [47:0] last_pc;
717
718`ifndef PALLADIUM
719
720`ifdef AXIS_TL
721
722`ifndef GATESIM
723
724//----------------------------------------------------------
725wire [5:0] mytnum;
726assign mytnum = (mycid*8)+mytid;
727
728//----------------------------------------------------------
729// Pipelined Signals
730always @ (posedge `SPC6.gclk) begin // {
731
732 pc_fx4 <= PC_reg;
733 pc_fx5 <= pc_fx4;
734 pc_fb <= pc_fx5;
735 pc_fw <= pc_fb;
736 pc_fw1 <= pc_fw;
737 pc_fw2 <= pc_fw1;
738
739end // }
740
741//----------------------------------------------------------
742// When instruction completes,
743// Push differences to simics
744
745wire myclk = `SPC6.gclk;
746reg hit_good_trap;
747initial hit_good_trap=1'b0;
748initial last_pc = 0;
749
750always @ (posedge myclk) begin // {
751
752 //----------
753 // End detection for non-sas runs ..
754 if (! `PARGS.nas_check_on) begin
755 if (last_pc[47:0] != pc_fw2[47:0]) begin
756 if (`PARGS.bad_trap_count >= 1) begin
757 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr1 & `PC_MASK) begin // axis tbcall_region
758 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr1);
759 axis_top.task_dump_mem;
760 axis_top.task_rcc_off;
761 end
762 end
763 if (`PARGS.bad_trap_count >= 2) begin
764 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr2 & `PC_MASK) begin // axis tbcall_region
765 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr2);
766 axis_top.task_dump_mem;
767 axis_top.task_rcc_off;
768 //end
769 end
770 end
771 if (`PARGS.bad_trap_count >= 3) begin
772 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr3 & `PC_MASK) begin // axis tbcall_region
773 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr3);
774 axis_top.task_dump_mem;
775 axis_top.task_rcc_off;
776 end
777 end
778 if (`PARGS.bad_trap_count >= 4) begin
779 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr4 & `PC_MASK) begin // axis tbcall_region
780 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr4);
781 axis_top.task_dump_mem;
782 axis_top.task_rcc_off;
783 end
784 end
785 last_pc <= pc_fw2;
786 end
787 if (({16'b0,pc_fw2}&`PC_MASK) ===
788 (`PARGS.good_trap_addr&`PC_MASK) && !hit_good_trap) begin
789 hit_good_trap<=1'b1;
790 end
791 end
792
793end
794`endif
795`endif //AXIS_TL
796
797`endif //PALLADIUM
798endmodule
799//----------------------------------------------------------
800//----------------------------------------------------------
801
802`endif
803
804
805`ifdef CORE_7
806
807
808module axis_trap_pipe7 (
809 mycid,
810 mytid,
811 PC_reg,
812);
813
814//----------------------------------------------------------
815input [2:0] mycid;
816input [2:0] mytid;
817
818input [47:0] PC_reg;
819
820reg [47:0] pc_fx4;
821reg [47:0] pc_fx5;
822reg [47:0] pc_fb;
823reg [47:0] pc_fw;
824reg [47:0] pc_fw1;
825reg [47:0] pc_fw2;
826reg [47:0] last_pc;
827
828`ifndef PALLADIUM
829
830`ifdef AXIS_TL
831
832`ifndef GATESIM
833
834//----------------------------------------------------------
835wire [5:0] mytnum;
836assign mytnum = (mycid*8)+mytid;
837
838//----------------------------------------------------------
839// Pipelined Signals
840always @ (posedge `SPC7.gclk) begin // {
841
842 pc_fx4 <= PC_reg;
843 pc_fx5 <= pc_fx4;
844 pc_fb <= pc_fx5;
845 pc_fw <= pc_fb;
846 pc_fw1 <= pc_fw;
847 pc_fw2 <= pc_fw1;
848
849end // }
850
851//----------------------------------------------------------
852// When instruction completes,
853// Push differences to simics
854
855wire myclk = `SPC7.gclk;
856reg hit_good_trap;
857initial hit_good_trap=1'b0;
858initial last_pc = 0;
859
860always @ (posedge myclk) begin // {
861
862 //----------
863 // End detection for non-sas runs ..
864 if (! `PARGS.nas_check_on) begin
865 if (last_pc[47:0] != pc_fw2[47:0]) begin
866 if (`PARGS.bad_trap_count >= 1) begin
867 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr1 & `PC_MASK) begin // axis tbcall_region
868 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr1);
869 axis_top.task_dump_mem;
870 axis_top.task_rcc_off;
871 end
872 end
873 if (`PARGS.bad_trap_count >= 2) begin
874 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr2 & `PC_MASK) begin // axis tbcall_region
875 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr2);
876 axis_top.task_dump_mem;
877 axis_top.task_rcc_off;
878 //end
879 end
880 end
881 if (`PARGS.bad_trap_count >= 3) begin
882 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr3 & `PC_MASK) begin // axis tbcall_region
883 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr3);
884 axis_top.task_dump_mem;
885 axis_top.task_rcc_off;
886 end
887 end
888 if (`PARGS.bad_trap_count >= 4) begin
889 if (({16'b0,pc_fw2} & `PC_MASK) == `PARGS.bad_trap_addr4 & `PC_MASK) begin // axis tbcall_region
890 $display("T%0d reached Bad Trap = %h", mytnum,`PARGS.bad_trap_addr4);
891 axis_top.task_dump_mem;
892 axis_top.task_rcc_off;
893 end
894 end
895 last_pc <= pc_fw2;
896 end
897 if (({16'b0,pc_fw2}&`PC_MASK) ===
898 (`PARGS.good_trap_addr&`PC_MASK) && !hit_good_trap) begin
899 hit_good_trap<=1'b1;
900 end
901 end
902
903end
904`endif
905`endif //AXIS_TL
906
907`endif //PALLADIUM
908endmodule
909//----------------------------------------------------------
910//----------------------------------------------------------
911
912`endif
913
914