Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / env / common / verilog / nas_car / nas_pipe.v
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: nas_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`timescale 1 ps / 1 ps
36
37`ifdef CORE_0
38
39
40module nas_pipe0 (
41 mycid,
42 mytid,
43
44 opcode,
45 PC_reg,
46 Y_reg,
47 CCR_reg,
48 FPRS_reg,
49 FSR_reg,
50 ASI_reg,
51 GSR_reg,
52 TICK_CMPR_reg,
53 STICK_CMPR_reg,
54 HSTICK_CMPR_reg,
55 PSTATE_reg,
56 TL_reg,
57 PIL_reg,
58 TBA_reg,
59 VER_reg,
60 CWP_reg,
61 CANSAVE_reg,
62 CANRESTORE_reg,
63 OTHERWIN_reg,
64 WSTATE_reg,
65 CLEANWIN_reg,
66 SOFTINT_reg,
67 rd_SOFTINT_reg,
68 INTR_RECEIVE_reg,
69 GL_reg,
70 HPSTATE_reg,
71 HTBA_reg,
72 HINTP_reg,
73
74 CTXT_PRIM_0_reg,
75 CTXT_SEC_0_reg,
76 CTXT_PRIM_1_reg,
77 CTXT_SEC_1_reg,
78 LSU_CONTROL_reg,
79 I_TAG_ACC_reg,
80 D_TAG_ACC_reg,
81 WATCHPOINT_ADDR_reg,
82 DSFAR_reg,
83
84 Trap_Entry_1,
85 Trap_Entry_2,
86 Trap_Entry_3,
87 Trap_Entry_4,
88 Trap_Entry_5,
89 Trap_Entry_6,
90
91 exu_valid,
92
93 imul_valid,
94
95 frf_w2_valid,
96 frf_w1_valid,
97 frf_w1_tid,
98 frf_w2_tid,
99 frf_w1_addr,
100 frf_w2_addr,
101
102 asi_valid,
103 asi_in_progress,
104
105 fp_valid,
106
107 idiv_valid,
108
109 fdiv_valid,
110
111 lsu_valid,
112
113 tlu_valid
114);
115
116//----------------------------------------------------------
117input [2:0] mycid;
118input [2:0] mytid;
119
120input [31:0] opcode;
121input [47:0] PC_reg;
122input [31:0] Y_reg;
123input [7:0] CCR_reg;
124input [2:0] FPRS_reg;
125input [27:0] FSR_reg;
126input [7:0] ASI_reg;
127input [42:0] GSR_reg;
128input [71:0] TICK_CMPR_reg;
129input [71:0] STICK_CMPR_reg;
130input [71:0] HSTICK_CMPR_reg;
131input [12:0] PSTATE_reg;
132input [2:0] TL_reg;
133input [3:0] PIL_reg;
134input [32:0] TBA_reg;
135input [63:0] VER_reg;
136input [2:0] CWP_reg;
137input [2:0] CANSAVE_reg;
138input [2:0] CANRESTORE_reg;
139input [2:0] OTHERWIN_reg;
140input [5:0] WSTATE_reg;
141input [2:0] CLEANWIN_reg;
142input [16:0] SOFTINT_reg;
143input [16:0] rd_SOFTINT_reg;
144input [63:0] INTR_RECEIVE_reg;
145input [1:0] GL_reg;
146input [12:0] HPSTATE_reg;
147input [33:0] HTBA_reg;
148input HINTP_reg;
149
150input [63:0] CTXT_PRIM_0_reg;
151input [63:0] CTXT_SEC_0_reg;
152input [63:0] CTXT_PRIM_1_reg;
153input [63:0] CTXT_SEC_1_reg;
154input [63:0] LSU_CONTROL_reg;
155input [63:0] I_TAG_ACC_reg;
156input [63:0] D_TAG_ACC_reg;
157input [63:0] WATCHPOINT_ADDR_reg;
158input [47:0] DSFAR_reg;
159
160input [151:0] Trap_Entry_1;
161input [151:0] Trap_Entry_2;
162input [151:0] Trap_Entry_3;
163input [151:0] Trap_Entry_4;
164input [151:0] Trap_Entry_5;
165input [151:0] Trap_Entry_6;
166
167input exu_valid;
168
169input imul_valid;
170
171input [1:0] frf_w2_valid;
172input [2:0] frf_w2_tid;
173input [4:0] frf_w2_addr;
174
175input [1:0] frf_w1_valid;
176input [2:0] frf_w1_tid;
177input [4:0] frf_w1_addr;
178
179input asi_valid; // ASI/ASR/PR writes done ..
180input asi_in_progress; // ASI/ASR/PR in progess
181
182input fp_valid;
183
184input idiv_valid;
185
186input fdiv_valid;
187
188input lsu_valid;
189
190input tlu_valid;
191
192`ifndef GATESIM
193
194//----------------------------------------------------------
195// Register assignments
196//----------------------------------------------------------
197`include "nas_regs.v"
198//----------------------------------------------------------
199
200wire exu_complete;
201wire imul_complete;
202wire idiv_complete;
203wire tlu_complete;
204wire fp_complete;
205wire fdiv_complete;
206wire lsu_complete;
207wire asi_complete;
208wire [7:0] complete_w;
209reg [7:0] complete_fx4;
210reg [7:0] complete_fx5;
211reg [7:0] complete_fb;
212reg [7:0] complete_fw;
213reg [7:0] complete_fw1;
214reg [7:0] complete_fw2;
215
216`ifndef EMUL_TL
217// delta_* = {type(2bits),win(3bits),regnum(8bits),value(64bits)}
218reg [`DELTA_WIDTH:0] delta_fx4 [0:(`MAX_INDEX)];
219reg [`DELTA_WIDTH:0] delta_fx5 [0:(`MAX_INDEX)];
220reg [`DELTA_WIDTH:0] delta_fb [0:(`MAX_INDEX)];
221reg [`DELTA_WIDTH:0] delta_fw [0:(`MAX_INDEX)];
222reg [`DELTA_WIDTH:0] delta_fw1 [0:(`MAX_INDEX)];
223reg [`DELTA_WIDTH:0] delta_fw2 [0:(`MAX_INDEX)];
224reg [`DELTA_WIDTH:0] delta_prev [0:(`MAX_INDEX)];
225`endif
226
227reg [2:0] cwp_fx4;
228reg [2:0] cwp_fx5;
229reg [2:0] cwp_fb;
230reg [2:0] cwp_fw;
231reg [2:0] cwp_fw1;
232reg [2:0] cwp_fw2;
233reg [2:0] cwp_last;
234
235
236// need to change in several places in this file
237reg [63:0] prev_reg0; // includes G,W,C,F registers
238reg [63:0] prev_reg1; // includes G,W,C,F registers
239reg [63:0] prev_reg2; // includes G,W,C,F registers
240reg [63:0] prev_reg3; // includes G,W,C,F registers
241reg [63:0] prev_reg4; // includes G,W,C,F registers
242reg [63:0] prev_reg5; // includes G,W,C,F registers
243reg [63:0] prev_reg6; // includes G,W,C,F registers
244reg [63:0] prev_reg7; // includes G,W,C,F registers
245reg [63:0] prev_reg8; // includes G,W,C,F registers
246reg [63:0] prev_reg9; // includes G,W,C,F registers
247reg [63:0] prev_reg10; // includes G,W,C,F registers
248reg [63:0] prev_reg11; // includes G,W,C,F registers
249reg [63:0] prev_reg12; // includes G,W,C,F registers
250reg [63:0] prev_reg13; // includes G,W,C,F registers
251reg [63:0] prev_reg14; // includes G,W,C,F registers
252reg [63:0] prev_reg15; // includes G,W,C,F registers
253reg [63:0] prev_reg16; // includes G,W,C,F registers
254reg [63:0] prev_reg17; // includes G,W,C,F registers
255reg [63:0] prev_reg18; // includes G,W,C,F registers
256reg [63:0] prev_reg19; // includes G,W,C,F registers
257reg [63:0] prev_reg20; // includes G,W,C,F registers
258reg [63:0] prev_reg21; // includes G,W,C,F registers
259reg [63:0] prev_reg22; // includes G,W,C,F registers
260reg [63:0] prev_reg23; // includes G,W,C,F registers
261reg [63:0] prev_reg24; // includes G,W,C,F registers
262reg [63:0] prev_reg25; // includes G,W,C,F registers
263reg [63:0] prev_reg26; // includes G,W,C,F registers
264reg [63:0] prev_reg27; // includes G,W,C,F registers
265reg [63:0] prev_reg28; // includes G,W,C,F registers
266reg [63:0] prev_reg29; // includes G,W,C,F registers
267reg [63:0] prev_reg30; // includes G,W,C,F registers
268reg [63:0] prev_reg31; // includes G,W,C,F registers
269reg [63:0] prev_reg32; // includes G,W,C,F registers
270reg [63:0] prev_reg33; // includes G,W,C,F registers
271reg [63:0] prev_reg34; // includes G,W,C,F registers
272reg [63:0] prev_reg35; // includes G,W,C,F registers
273reg [63:0] prev_reg36; // includes G,W,C,F registers
274reg [63:0] prev_reg37; // includes G,W,C,F registers
275reg [63:0] prev_reg38; // includes G,W,C,F registers
276reg [63:0] prev_reg39; // includes G,W,C,F registers
277reg [63:0] prev_reg40; // includes G,W,C,F registers
278reg [63:0] prev_reg41; // includes G,W,C,F registers
279reg [63:0] prev_reg42; // includes G,W,C,F registers
280reg [63:0] prev_reg43; // includes G,W,C,F registers
281reg [63:0] prev_reg44; // includes G,W,C,F registers
282reg [63:0] prev_reg45; // includes G,W,C,F registers
283reg [63:0] prev_reg46; // includes G,W,C,F registers
284reg [63:0] prev_reg47; // includes G,W,C,F registers
285reg [63:0] prev_reg48; // includes G,W,C,F registers
286reg [63:0] prev_reg49; // includes G,W,C,F registers
287reg [63:0] prev_reg50; // includes G,W,C,F registers
288reg [63:0] prev_reg51; // includes G,W,C,F registers
289reg [63:0] prev_reg52; // includes G,W,C,F registers
290reg [63:0] prev_reg53; // includes G,W,C,F registers
291reg [63:0] prev_reg54; // includes G,W,C,F registers
292reg [63:0] prev_reg55; // includes G,W,C,F registers
293reg [63:0] prev_reg56; // includes G,W,C,F registers
294reg [63:0] prev_reg57; // includes G,W,C,F registers
295reg [63:0] prev_reg58; // includes G,W,C,F registers
296reg [63:0] prev_reg59; // includes G,W,C,F registers
297reg [63:0] prev_reg60; // includes G,W,C,F registers
298reg [63:0] prev_reg61; // includes G,W,C,F registers
299reg [63:0] prev_reg62; // includes G,W,C,F registers
300reg [63:0] prev_reg63; // includes G,W,C,F registers
301reg [63:0] prev_reg64; // includes G,W,C,F registers
302reg [63:0] prev_reg65; // includes G,W,C,F registers
303reg [63:0] prev_reg66; // includes G,W,C,F registers
304reg [63:0] prev_reg67; // includes G,W,C,F registers
305reg [63:0] prev_reg68; // includes G,W,C,F registers
306reg [63:0] prev_reg69; // includes G,W,C,F registers
307reg [63:0] prev_reg70; // includes G,W,C,F registers
308reg [63:0] prev_reg71; // includes G,W,C,F registers
309reg [63:0] prev_reg72; // includes G,W,C,F registers
310reg [63:0] prev_reg73; // includes G,W,C,F registers
311reg [63:0] prev_reg74; // includes G,W,C,F registers
312reg [63:0] prev_reg75; // includes G,W,C,F registers
313reg [63:0] prev_reg76; // includes G,W,C,F registers
314reg [63:0] prev_reg77; // includes G,W,C,F registers
315reg [63:0] prev_reg78; // includes G,W,C,F registers
316reg [63:0] prev_reg79; // includes G,W,C,F registers
317reg [63:0] prev_reg80; // includes G,W,C,F registers
318reg [63:0] prev_reg81; // includes G,W,C,F registers
319reg [63:0] prev_reg82; // includes G,W,C,F registers
320reg [63:0] prev_reg83; // includes G,W,C,F registers
321reg [63:0] prev_reg84; // includes G,W,C,F registers
322reg [63:0] prev_reg85; // includes G,W,C,F registers
323reg [63:0] prev_reg86; // includes G,W,C,F registers
324reg [63:0] prev_reg87; // includes G,W,C,F registers
325reg [63:0] prev_reg88; // includes G,W,C,F registers
326reg [63:0] prev_reg89; // includes G,W,C,F registers
327reg [63:0] prev_reg90; // includes G,W,C,F registers
328reg [63:0] prev_reg91; // includes G,W,C,F registers
329reg [63:0] prev_reg92; // includes G,W,C,F registers
330reg [63:0] prev_reg93; // includes G,W,C,F registers
331reg [63:0] prev_reg94; // includes G,W,C,F registers
332reg [63:0] prev_reg95; // includes G,W,C,F registers
333reg [63:0] prev_reg96; // includes G,W,C,F registers
334reg [63:0] prev_reg97; // includes G,W,C,F registers
335reg [63:0] prev_reg98; // includes G,W,C,F registers
336reg [63:0] prev_reg99; // includes G,W,C,F registers
337reg [63:0] prev_reg100; // includes G,W,C,F registers
338reg [63:0] prev_reg101; // includes G,W,C,F registers
339reg [63:0] prev_reg102; // includes G,W,C,F registers
340reg [63:0] prev_reg103; // includes G,W,C,F registers
341reg [63:0] prev_reg104; // includes G,W,C,F registers
342reg [63:0] prev_reg105; // includes G,W,C,F registers
343reg [63:0] prev_reg106; // includes G,W,C,F registers
344reg [63:0] prev_reg107; // includes G,W,C,F registers
345reg [63:0] prev_reg108; // includes G,W,C,F registers
346reg [63:0] prev_reg109; // includes G,W,C,F registers
347reg [63:0] prev_reg110; // includes G,W,C,F registers
348reg [63:0] prev_reg111; // includes G,W,C,F registers
349reg [63:0] prev_reg112; // includes G,W,C,F registers
350reg [63:0] prev_reg113; // includes G,W,C,F registers
351reg [63:0] prev_reg114; // includes G,W,C,F registers
352reg [63:0] prev_reg115; // includes G,W,C,F registers
353reg [63:0] prev_reg116; // includes G,W,C,F registers
354reg [63:0] prev_reg117; // includes G,W,C,F registers
355reg [63:0] prev_reg118; // includes G,W,C,F registers
356reg [63:0] prev_reg119; // includes G,W,C,F registers
357reg [63:0] prev_reg120; // includes G,W,C,F registers
358reg [63:0] prev_reg121; // includes G,W,C,F registers
359reg [63:0] prev_reg122; // includes G,W,C,F registers
360reg [63:0] prev_reg123; // includes G,W,C,F registers
361reg [63:0] prev_reg124; // includes G,W,C,F registers
362reg [63:0] prev_reg125; // includes G,W,C,F registers
363reg [63:0] prev_reg126; // includes G,W,C,F registers
364reg [63:0] prev_reg127; // includes G,W,C,F registers
365reg [63:0] prev_reg128; // includes G,W,C,F registers
366reg [63:0] prev_reg129; // includes G,W,C,F registers
367reg [63:0] prev_reg130; // includes G,W,C,F registers
368reg [63:0] prev_reg131; // includes G,W,C,F registers
369reg [63:0] prev_reg132; // includes G,W,C,F registers
370reg [63:0] prev_reg133; // includes G,W,C,F registers
371reg [63:0] prev_reg134; // includes G,W,C,F registers
372reg [63:0] prev_reg135; // includes G,W,C,F registers
373reg [63:0] prev_reg136; // includes G,W,C,F registers
374reg [63:0] prev_reg137; // includes G,W,C,F registers
375reg [63:0] prev_reg138; // includes G,W,C,F registers
376reg [63:0] prev_reg139; // includes G,W,C,F registers
377reg [63:0] prev_reg140; // includes G,W,C,F registers
378reg [63:0] prev_reg141; // includes G,W,C,F registers
379reg [63:0] prev_reg142; // includes G,W,C,F registers
380reg [63:0] prev_reg143; // includes G,W,C,F registers
381reg [63:0] prev_reg144; // includes G,W,C,F registers
382reg [63:0] prev_reg145; // includes G,W,C,F registers
383reg [63:0] prev_reg146; // includes G,W,C,F registers
384reg [63:0] prev_reg147; // includes G,W,C,F registers
385reg [63:0] prev_reg148; // includes G,W,C,F registers
386reg [63:0] prev_reg149; // includes G,W,C,F registers
387reg [63:0] prev_reg150; // includes G,W,C,F registers
388reg [63:0] prev_reg151; // includes G,W,C,F registers
389reg [63:0] prev_reg152; // includes G,W,C,F registers
390reg [63:0] prev_reg153; // includes G,W,C,F registers
391reg [63:0] prev_reg154; // includes G,W,C,F registers
392reg [63:0] prev_reg155; // includes G,W,C,F registers
393reg [63:0] prev_reg156; // includes G,W,C,F registers
394reg [63:0] prev_reg157; // includes G,W,C,F registers
395reg [63:0] prev_reg158; // includes G,W,C,F registers
396reg [63:0] prev_reg159; // includes G,W,C,F registers
397reg [63:0] prev_reg160; // includes G,W,C,F registers
398reg [63:0] prev_reg161; // includes G,W,C,F registers
399reg [63:0] prev_reg162; // includes G,W,C,F registers
400reg [63:0] prev_reg163; // includes G,W,C,F registers
401reg [63:0] prev_reg164; // includes G,W,C,F registers
402reg [63:0] prev_reg165; // includes G,W,C,F registers
403reg [63:0] prev_reg166; // includes G,W,C,F registers
404reg [63:0] prev_reg167; // includes G,W,C,F registers
405reg [63:0] prev_reg168; // includes G,W,C,F registers
406reg [63:0] prev_reg169; // includes G,W,C,F registers
407reg [63:0] prev_reg170; // includes G,W,C,F registers
408reg [63:0] prev_reg171; // includes G,W,C,F registers
409reg [63:0] prev_reg172; // includes G,W,C,F registers
410reg [63:0] prev_reg173; // includes G,W,C,F registers
411reg [63:0] prev_reg174; // includes G,W,C,F registers
412reg [63:0] prev_reg175; // includes G,W,C,F registers
413reg [63:0] prev_reg176; // includes G,W,C,F registers
414reg [63:0] prev_reg177; // includes G,W,C,F registers
415reg [63:0] prev_reg178; // includes G,W,C,F registers
416reg [63:0] prev_reg179; // includes G,W,C,F registers
417reg [63:0] prev_reg180; // includes G,W,C,F registers
418reg [63:0] prev_reg181; // includes G,W,C,F registers
419reg [63:0] prev_reg182; // includes G,W,C,F registers
420reg [63:0] prev_reg183; // includes G,W,C,F registers
421reg [63:0] prev_reg184; // includes G,W,C,F registers
422reg [63:0] prev_reg185; // includes G,W,C,F registers
423reg [63:0] prev_reg186; // includes G,W,C,F registers
424reg [63:0] prev_reg187; // includes G,W,C,F registers
425reg [63:0] prev_reg188; // includes G,W,C,F registers
426reg [63:0] prev_reg189; // includes G,W,C,F registers
427reg [63:0] prev_reg190; // includes G,W,C,F registers
428reg [63:0] prev_reg191; // includes G,W,C,F registers
429reg [63:0] prev_reg192; // includes G,W,C,F registers
430reg [63:0] prev_reg193; // includes G,W,C,F registers
431reg [63:0] prev_reg194; // includes G,W,C,F registers
432reg [63:0] prev_reg195; // includes G,W,C,F registers
433reg [63:0] prev_reg196; // includes G,W,C,F registers
434reg [63:0] prev_reg197; // includes G,W,C,F registers
435reg [63:0] prev_reg198; // includes G,W,C,F registers
436reg [63:0] prev_reg199; // includes G,W,C,F registers
437reg [63:0] prev_reg200; // includes G,W,C,F registers
438reg [63:0] prev_reg201; // includes G,W,C,F registers
439reg [63:0] prev_reg202; // includes G,W,C,F registers
440reg [63:0] prev_reg203; // includes G,W,C,F registers
441reg [63:0] prev_reg204; // includes G,W,C,F registers
442reg [63:0] prev_reg205; // includes G,W,C,F registers
443reg [63:0] prev_reg206; // includes G,W,C,F registers
444reg [63:0] prev_reg207; // includes G,W,C,F registers
445reg [63:0] prev_reg208; // includes G,W,C,F registers
446reg [63:0] prev_reg209; // includes G,W,C,F registers
447reg [63:0] prev_reg210; // includes G,W,C,F registers
448reg [63:0] prev_reg211; // includes G,W,C,F registers
449reg [63:0] prev_reg212; // includes G,W,C,F registers
450reg [63:0] prev_reg213; // includes G,W,C,F registers
451reg [63:0] prev_reg214; // includes G,W,C,F registers
452reg [63:0] prev_reg215; // includes G,W,C,F registers
453reg [63:0] prev_reg216; // includes G,W,C,F registers
454reg [63:0] prev_reg217; // includes G,W,C,F registers
455reg [63:0] prev_reg218; // includes G,W,C,F registers
456reg [63:0] prev_reg219; // includes G,W,C,F registers
457reg [63:0] prev_reg220; // includes G,W,C,F registers
458reg [63:0] prev_reg221; // includes G,W,C,F registers
459reg [63:0] prev_reg222; // includes G,W,C,F registers
460reg [63:0] prev_reg223; // includes G,W,C,F registers
461reg [63:0] prev_reg224; // includes G,W,C,F registers
462reg [63:0] prev_reg225; // includes G,W,C,F registers
463reg [63:0] prev_reg226; // includes G,W,C,F registers
464reg [63:0] prev_reg227; // includes G,W,C,F registers
465reg [63:0] prev_reg228; // includes G,W,C,F registers
466reg [63:0] prev_reg229; // includes G,W,C,F registers
467reg [63:0] prev_reg230; // includes G,W,C,F registers
468reg [63:0] prev_reg231; // includes G,W,C,F registers
469reg [63:0] prev_reg232; // includes G,W,C,F registers
470reg [63:0] prev_reg233; // includes G,W,C,F registers
471reg [63:0] prev_reg234; // includes G,W,C,F registers
472reg [63:0] prev_reg235; // includes G,W,C,F registers
473reg [63:0] prev_reg236; // includes G,W,C,F registers
474reg [63:0] prev_reg237; // includes G,W,C,F registers
475reg [63:0] prev_reg238; // includes G,W,C,F registers
476reg [63:0] prev_reg239; // includes G,W,C,F registers
477reg [63:0] prev_reg240; // includes G,W,C,F registers
478reg [63:0] prev_reg241; // includes G,W,C,F registers
479reg [63:0] prev_reg242; // includes G,W,C,F registers
480reg [63:0] prev_reg243; // includes G,W,C,F registers
481reg [63:0] prev_reg244; // includes G,W,C,F registers
482reg [63:0] prev_reg245; // includes G,W,C,F registers
483reg [63:0] prev_reg246; // includes G,W,C,F registers
484reg [63:0] prev_reg247; // includes G,W,C,F registers
485reg [63:0] prev_reg248; // includes G,W,C,F registers
486reg [63:0] prev_reg249; // includes G,W,C,F registers
487reg [63:0] prev_reg250; // includes G,W,C,F registers
488reg [63:0] prev_reg251; // includes G,W,C,F registers
489reg [63:0] prev_reg252; // includes G,W,C,F registers
490reg [63:0] prev_reg253; // includes G,W,C,F registers
491reg [63:0] prev_reg254; // includes G,W,C,F registers
492reg [63:0] prev_reg255; // includes G,W,C,F registers
493
494reg [1:0] th_gl; // copy of GL_reg
495
496reg [63:0] gl0_reg0;
497reg [63:0] gl1_reg0;
498reg [63:0] gl2_reg0;
499reg [63:0] gl3_reg0;
500reg [63:0] gl0_reg1;
501reg [63:0] gl1_reg1;
502reg [63:0] gl2_reg1;
503reg [63:0] gl3_reg1;
504reg [63:0] gl0_reg2;
505reg [63:0] gl1_reg2;
506reg [63:0] gl2_reg2;
507reg [63:0] gl3_reg2;
508reg [63:0] gl0_reg3;
509reg [63:0] gl1_reg3;
510reg [63:0] gl2_reg3;
511reg [63:0] gl3_reg3;
512reg [63:0] gl0_reg4;
513reg [63:0] gl1_reg4;
514reg [63:0] gl2_reg4;
515reg [63:0] gl3_reg4;
516reg [63:0] gl0_reg5;
517reg [63:0] gl1_reg5;
518reg [63:0] gl2_reg5;
519reg [63:0] gl3_reg5;
520reg [63:0] gl0_reg6;
521reg [63:0] gl1_reg6;
522reg [63:0] gl2_reg6;
523reg [63:0] gl3_reg6;
524reg [63:0] gl0_reg7;
525reg [63:0] gl1_reg7;
526reg [63:0] gl2_reg7;
527reg [63:0] gl3_reg7;
528
529reg [63:0] win0_reg8;
530reg [63:0] win1_reg8;
531reg [63:0] win2_reg8;
532reg [63:0] win3_reg8;
533reg [63:0] win4_reg8;
534reg [63:0] win5_reg8;
535reg [63:0] win6_reg8;
536reg [63:0] win7_reg8;
537reg [63:0] win0_reg9;
538reg [63:0] win1_reg9;
539reg [63:0] win2_reg9;
540reg [63:0] win3_reg9;
541reg [63:0] win4_reg9;
542reg [63:0] win5_reg9;
543reg [63:0] win6_reg9;
544reg [63:0] win7_reg9;
545reg [63:0] win0_reg10;
546reg [63:0] win1_reg10;
547reg [63:0] win2_reg10;
548reg [63:0] win3_reg10;
549reg [63:0] win4_reg10;
550reg [63:0] win5_reg10;
551reg [63:0] win6_reg10;
552reg [63:0] win7_reg10;
553reg [63:0] win0_reg11;
554reg [63:0] win1_reg11;
555reg [63:0] win2_reg11;
556reg [63:0] win3_reg11;
557reg [63:0] win4_reg11;
558reg [63:0] win5_reg11;
559reg [63:0] win6_reg11;
560reg [63:0] win7_reg11;
561reg [63:0] win0_reg12;
562reg [63:0] win1_reg12;
563reg [63:0] win2_reg12;
564reg [63:0] win3_reg12;
565reg [63:0] win4_reg12;
566reg [63:0] win5_reg12;
567reg [63:0] win6_reg12;
568reg [63:0] win7_reg12;
569reg [63:0] win0_reg13;
570reg [63:0] win1_reg13;
571reg [63:0] win2_reg13;
572reg [63:0] win3_reg13;
573reg [63:0] win4_reg13;
574reg [63:0] win5_reg13;
575reg [63:0] win6_reg13;
576reg [63:0] win7_reg13;
577reg [63:0] win0_reg14;
578reg [63:0] win1_reg14;
579reg [63:0] win2_reg14;
580reg [63:0] win3_reg14;
581reg [63:0] win4_reg14;
582reg [63:0] win5_reg14;
583reg [63:0] win6_reg14;
584reg [63:0] win7_reg14;
585reg [63:0] win0_reg15;
586reg [63:0] win1_reg15;
587reg [63:0] win2_reg15;
588reg [63:0] win3_reg15;
589reg [63:0] win4_reg15;
590reg [63:0] win5_reg15;
591reg [63:0] win6_reg15;
592reg [63:0] win7_reg15;
593reg [63:0] win0_reg16;
594reg [63:0] win1_reg16;
595reg [63:0] win2_reg16;
596reg [63:0] win3_reg16;
597reg [63:0] win4_reg16;
598reg [63:0] win5_reg16;
599reg [63:0] win6_reg16;
600reg [63:0] win7_reg16;
601reg [63:0] win0_reg17;
602reg [63:0] win1_reg17;
603reg [63:0] win2_reg17;
604reg [63:0] win3_reg17;
605reg [63:0] win4_reg17;
606reg [63:0] win5_reg17;
607reg [63:0] win6_reg17;
608reg [63:0] win7_reg17;
609reg [63:0] win0_reg18;
610reg [63:0] win1_reg18;
611reg [63:0] win2_reg18;
612reg [63:0] win3_reg18;
613reg [63:0] win4_reg18;
614reg [63:0] win5_reg18;
615reg [63:0] win6_reg18;
616reg [63:0] win7_reg18;
617reg [63:0] win0_reg19;
618reg [63:0] win1_reg19;
619reg [63:0] win2_reg19;
620reg [63:0] win3_reg19;
621reg [63:0] win4_reg19;
622reg [63:0] win5_reg19;
623reg [63:0] win6_reg19;
624reg [63:0] win7_reg19;
625reg [63:0] win0_reg20;
626reg [63:0] win1_reg20;
627reg [63:0] win2_reg20;
628reg [63:0] win3_reg20;
629reg [63:0] win4_reg20;
630reg [63:0] win5_reg20;
631reg [63:0] win6_reg20;
632reg [63:0] win7_reg20;
633reg [63:0] win0_reg21;
634reg [63:0] win1_reg21;
635reg [63:0] win2_reg21;
636reg [63:0] win3_reg21;
637reg [63:0] win4_reg21;
638reg [63:0] win5_reg21;
639reg [63:0] win6_reg21;
640reg [63:0] win7_reg21;
641reg [63:0] win0_reg22;
642reg [63:0] win1_reg22;
643reg [63:0] win2_reg22;
644reg [63:0] win3_reg22;
645reg [63:0] win4_reg22;
646reg [63:0] win5_reg22;
647reg [63:0] win6_reg22;
648reg [63:0] win7_reg22;
649reg [63:0] win0_reg23;
650reg [63:0] win1_reg23;
651reg [63:0] win2_reg23;
652reg [63:0] win3_reg23;
653reg [63:0] win4_reg23;
654reg [63:0] win5_reg23;
655reg [63:0] win6_reg23;
656reg [63:0] win7_reg23;
657reg [63:0] win0_reg24;
658reg [63:0] win1_reg24;
659reg [63:0] win2_reg24;
660reg [63:0] win3_reg24;
661reg [63:0] win4_reg24;
662reg [63:0] win5_reg24;
663reg [63:0] win6_reg24;
664reg [63:0] win7_reg24;
665reg [63:0] win0_reg25;
666reg [63:0] win1_reg25;
667reg [63:0] win2_reg25;
668reg [63:0] win3_reg25;
669reg [63:0] win4_reg25;
670reg [63:0] win5_reg25;
671reg [63:0] win6_reg25;
672reg [63:0] win7_reg25;
673reg [63:0] win0_reg26;
674reg [63:0] win1_reg26;
675reg [63:0] win2_reg26;
676reg [63:0] win3_reg26;
677reg [63:0] win4_reg26;
678reg [63:0] win5_reg26;
679reg [63:0] win6_reg26;
680reg [63:0] win7_reg26;
681reg [63:0] win0_reg27;
682reg [63:0] win1_reg27;
683reg [63:0] win2_reg27;
684reg [63:0] win3_reg27;
685reg [63:0] win4_reg27;
686reg [63:0] win5_reg27;
687reg [63:0] win6_reg27;
688reg [63:0] win7_reg27;
689reg [63:0] win0_reg28;
690reg [63:0] win1_reg28;
691reg [63:0] win2_reg28;
692reg [63:0] win3_reg28;
693reg [63:0] win4_reg28;
694reg [63:0] win5_reg28;
695reg [63:0] win6_reg28;
696reg [63:0] win7_reg28;
697reg [63:0] win0_reg29;
698reg [63:0] win1_reg29;
699reg [63:0] win2_reg29;
700reg [63:0] win3_reg29;
701reg [63:0] win4_reg29;
702reg [63:0] win5_reg29;
703reg [63:0] win6_reg29;
704reg [63:0] win7_reg29;
705reg [63:0] win0_reg30;
706reg [63:0] win1_reg30;
707reg [63:0] win2_reg30;
708reg [63:0] win3_reg30;
709reg [63:0] win4_reg30;
710reg [63:0] win5_reg30;
711reg [63:0] win6_reg30;
712reg [63:0] win7_reg30;
713reg [63:0] win0_reg31;
714reg [63:0] win1_reg31;
715reg [63:0] win2_reg31;
716reg [63:0] win3_reg31;
717reg [63:0] win4_reg31;
718reg [63:0] win5_reg31;
719reg [63:0] win6_reg31;
720reg [63:0] win7_reg31;
721
722reg [63:0] itagacc_fx5;
723reg [63:0] itagacc_fb;
724reg [63:0] itagacc_fw;
725reg [63:0] itagacc_fw1;
726reg [63:0] itagacc_fw2;
727
728reg [63:0] dtagacc_fx5;
729reg [63:0] dtagacc_fb;
730reg [63:0] dtagacc_fw;
731reg [63:0] dtagacc_fw1;
732reg [63:0] dtagacc_fw2;
733
734reg [47:0] dsfar_fb;
735reg [47:0] dsfar_fw;
736reg [47:0] dsfar_fw1;
737reg [47:0] dsfar_fw2;
738
739reg [47:0] pc_fx4;
740reg [47:0] pc_fx5;
741reg [47:0] pc_fb;
742reg [47:0] pc_fw;
743reg [47:0] pc_fw1;
744reg [47:0] pc_fw2;
745reg [47:0] pc_last;
746
747reg tlu_complete_1;
748reg tlu_complete_2;
749reg tlu_complete_3;
750
751reg frf_w1_valid_fw1;
752reg frf_w1_valid_fw2;
753
754reg frf_w1_skip_addr4_fw1;
755reg frf_w1_skip_addr4_fw2;
756reg [2:0] fprs_fb;
757reg [2:0] fprs_fw;
758reg [2:0] fprs_fw1;
759reg [2:0] fprs_fw2;
760
761
762reg [1:0] frf_w2_valid_fw;
763reg [1:0] frf_w2_valid_bn;
764reg [2:0] frf_w2_tid_fw;
765reg [4:0] frf_w2_addr_fw;
766
767reg [1:0] frf_w1_valid_fw;
768reg [2:0] frf_w1_tid_fw;
769reg [4:0] frf_w1_addr_fw;
770
771reg thread_running;
772
773reg in_wmr;
774reg wmr; // latched to get edge
775reg por_a; // latched to get edge
776reg por_b; // latched to get edge
777
778reg nas_pipe_enable; // Turns on nas_pipe capture and Riesling SSTEP
779reg first_op;
780reg [63:0] mytime;
781wire [5:0] mytnum;
782wire mytg;
783integer junk;
784integer myindex;
785integer irf_offset;
786wire oddwin;
787wire frf_w1_valid_even;
788wire frf_w1_valid_odd;
789wire frf_w2_valid_even;
790wire frf_w2_valid_odd;
791wire [4:0] frf_w1_skip_addr;
792wire [4:0] frf_w2_skip_addr;
793reg good_trap_detected; // Used for -nosas only.
794
795//----------------------------------------------------------
796`ifdef DEBUG_PIPE
797
798wire [63:0] g0;
799wire [63:0] g1;
800wire [63:0] g2;
801wire [63:0] g3;
802wire [63:0] g4;
803wire [63:0] g5;
804wire [63:0] g6;
805wire [63:0] g7;
806
807wire [63:0] o0;
808wire [63:0] o1;
809wire [63:0] o2;
810wire [63:0] o3;
811wire [63:0] o4;
812wire [63:0] o5;
813wire [63:0] o6;
814wire [63:0] o7;
815
816wire [63:0] l0;
817wire [63:0] l1;
818wire [63:0] l2;
819wire [63:0] l3;
820wire [63:0] l4;
821wire [63:0] l5;
822wire [63:0] l6;
823wire [63:0] l7;
824
825wire [63:0] i0;
826wire [63:0] i1;
827wire [63:0] i2;
828wire [63:0] i3;
829wire [63:0] i4;
830wire [63:0] i5;
831wire [63:0] i6;
832wire [63:0] i7;
833
834wire [31:0] frf_0;
835wire [31:0] frf_1;
836wire [31:0] frf_2;
837wire [31:0] frf_3;
838wire [31:0] frf_4;
839wire [31:0] frf_5;
840wire [31:0] frf_6;
841wire [31:0] frf_7;
842wire [31:0] frf_8;
843wire [31:0] frf_9;
844wire [31:0] frf_10;
845wire [31:0] frf_11;
846wire [31:0] frf_12;
847wire [31:0] frf_13;
848wire [31:0] frf_14;
849wire [31:0] frf_15;
850wire [31:0] frf_16;
851wire [31:0] frf_17;
852wire [31:0] frf_18;
853wire [31:0] frf_19;
854wire [31:0] frf_20;
855wire [31:0] frf_21;
856wire [31:0] frf_22;
857wire [31:0] frf_23;
858wire [31:0] frf_24;
859wire [31:0] frf_25;
860wire [31:0] frf_26;
861wire [31:0] frf_27;
862wire [31:0] frf_28;
863wire [31:0] frf_29;
864wire [31:0] frf_30;
865wire [31:0] frf_31;
866wire [31:0] frf_32;
867wire [31:0] frf_33;
868wire [31:0] frf_34;
869wire [31:0] frf_35;
870wire [31:0] frf_36;
871wire [31:0] frf_37;
872wire [31:0] frf_38;
873wire [31:0] frf_39;
874wire [31:0] frf_40;
875wire [31:0] frf_41;
876wire [31:0] frf_42;
877wire [31:0] frf_43;
878wire [31:0] frf_44;
879wire [31:0] frf_45;
880wire [31:0] frf_46;
881wire [31:0] frf_47;
882wire [31:0] frf_48;
883wire [31:0] frf_49;
884wire [31:0] frf_50;
885wire [31:0] frf_51;
886wire [31:0] frf_52;
887wire [31:0] frf_53;
888wire [31:0] frf_54;
889wire [31:0] frf_55;
890wire [31:0] frf_56;
891wire [31:0] frf_57;
892wire [31:0] frf_58;
893wire [31:0] frf_59;
894wire [31:0] frf_60;
895wire [31:0] frf_61;
896wire [31:0] frf_62;
897wire [31:0] frf_63;
898
899wire [`DELTA_WIDTH:0] delta_fx4_0;
900wire [`DELTA_WIDTH:0] delta_fx4_1;
901wire [`DELTA_WIDTH:0] delta_fx4_2;
902wire [`DELTA_WIDTH:0] delta_fx4_3;
903wire [`DELTA_WIDTH:0] delta_fx4_4;
904wire [`DELTA_WIDTH:0] delta_fx4_5;
905wire [`DELTA_WIDTH:0] delta_fx4_6;
906wire [`DELTA_WIDTH:0] delta_fx4_7;
907
908wire [`DELTA_WIDTH:0] delta_fx5_0;
909wire [`DELTA_WIDTH:0] delta_fx5_1;
910wire [`DELTA_WIDTH:0] delta_fx5_2;
911wire [`DELTA_WIDTH:0] delta_fx5_3;
912wire [`DELTA_WIDTH:0] delta_fx5_4;
913wire [`DELTA_WIDTH:0] delta_fx5_5;
914wire [`DELTA_WIDTH:0] delta_fx5_6;
915wire [`DELTA_WIDTH:0] delta_fx5_7;
916
917wire [`DELTA_WIDTH:0] delta_fb_0;
918wire [`DELTA_WIDTH:0] delta_fb_1;
919wire [`DELTA_WIDTH:0] delta_fb_2;
920wire [`DELTA_WIDTH:0] delta_fb_3;
921wire [`DELTA_WIDTH:0] delta_fb_4;
922wire [`DELTA_WIDTH:0] delta_fb_5;
923wire [`DELTA_WIDTH:0] delta_fb_6;
924wire [`DELTA_WIDTH:0] delta_fb_7;
925
926wire [`DELTA_WIDTH:0] delta_fw_0;
927wire [`DELTA_WIDTH:0] delta_fw_1;
928wire [`DELTA_WIDTH:0] delta_fw_2;
929wire [`DELTA_WIDTH:0] delta_fw_3;
930wire [`DELTA_WIDTH:0] delta_fw_4;
931wire [`DELTA_WIDTH:0] delta_fw_5;
932wire [`DELTA_WIDTH:0] delta_fw_6;
933wire [`DELTA_WIDTH:0] delta_fw_7;
934
935wire [`DELTA_WIDTH:0] delta_fw1_0;
936wire [`DELTA_WIDTH:0] delta_fw1_1;
937wire [`DELTA_WIDTH:0] delta_fw1_2;
938wire [`DELTA_WIDTH:0] delta_fw1_3;
939wire [`DELTA_WIDTH:0] delta_fw1_4;
940wire [`DELTA_WIDTH:0] delta_fw1_5;
941wire [`DELTA_WIDTH:0] delta_fw1_6;
942wire [`DELTA_WIDTH:0] delta_fw1_7;
943
944wire [`DELTA_WIDTH:0] delta_fw2_0;
945wire [`DELTA_WIDTH:0] delta_fw2_1;
946wire [`DELTA_WIDTH:0] delta_fw2_2;
947wire [`DELTA_WIDTH:0] delta_fw2_3;
948wire [`DELTA_WIDTH:0] delta_fw2_4;
949wire [`DELTA_WIDTH:0] delta_fw2_5;
950wire [`DELTA_WIDTH:0] delta_fw2_6;
951wire [`DELTA_WIDTH:0] delta_fw2_7;
952
953wire [`DELTA_WIDTH:0] delta_prev_0;
954wire [`DELTA_WIDTH:0] delta_prev_1;
955wire [`DELTA_WIDTH:0] delta_prev_2;
956wire [`DELTA_WIDTH:0] delta_prev_3;
957wire [`DELTA_WIDTH:0] delta_prev_4;
958wire [`DELTA_WIDTH:0] delta_prev_5;
959wire [`DELTA_WIDTH:0] delta_prev_6;
960wire [`DELTA_WIDTH:0] delta_prev_7;
961
962initial begin
963 #0;
964 `PR_ALWAYS ("arg", `ALWAYS,"T%0d DEBUG_PIPE turned ON",mytnum);
965end
966
967//----------------------------------------------------------
968// Note: no remap of %g,%o,%l,%i regs based on CWP or GL
969assign g0 = (mytid<=3) ? `IRF0_EXU0[( 0+irf_offset)] : `IRF0_EXU1[( 0+irf_offset)];
970assign g1 = (mytid<=3) ? `IRF0_EXU0[( 1+irf_offset)] : `IRF0_EXU1[( 1+irf_offset)];
971assign g2 = (mytid<=3) ? `IRF0_EXU0[( 2+irf_offset)] : `IRF0_EXU1[( 2+irf_offset)];
972assign g3 = (mytid<=3) ? `IRF0_EXU0[( 3+irf_offset)] : `IRF0_EXU1[( 3+irf_offset)];
973assign g4 = (mytid<=3) ? `IRF0_EXU0[( 4+irf_offset)] : `IRF0_EXU1[( 4+irf_offset)];
974assign g5 = (mytid<=3) ? `IRF0_EXU0[( 5+irf_offset)] : `IRF0_EXU1[( 5+irf_offset)];
975assign g6 = (mytid<=3) ? `IRF0_EXU0[( 6+irf_offset)] : `IRF0_EXU1[( 6+irf_offset)];
976assign g7 = (mytid<=3) ? `IRF0_EXU0[( 7+irf_offset)] : `IRF0_EXU1[( 7+irf_offset)];
977
978assign o0 = (mytid<=3) ? `IRF0_EXU0[( 8+irf_offset)] : `IRF0_EXU1[( 8+irf_offset)];
979assign o1 = (mytid<=3) ? `IRF0_EXU0[( 9+irf_offset)] : `IRF0_EXU1[( 9+irf_offset)];
980assign o2 = (mytid<=3) ? `IRF0_EXU0[(10+irf_offset)] : `IRF0_EXU1[(10+irf_offset)];
981assign o3 = (mytid<=3) ? `IRF0_EXU0[(11+irf_offset)] : `IRF0_EXU1[(11+irf_offset)];
982assign o4 = (mytid<=3) ? `IRF0_EXU0[(12+irf_offset)] : `IRF0_EXU1[(12+irf_offset)];
983assign o5 = (mytid<=3) ? `IRF0_EXU0[(13+irf_offset)] : `IRF0_EXU1[(13+irf_offset)];
984assign o6 = (mytid<=3) ? `IRF0_EXU0[(14+irf_offset)] : `IRF0_EXU1[(14+irf_offset)];
985assign o7 = (mytid<=3) ? `IRF0_EXU0[(15+irf_offset)] : `IRF0_EXU1[(15+irf_offset)];
986
987assign l0 = (mytid<=3) ? `IRF0_EXU0[(16+irf_offset)] : `IRF0_EXU1[(16+irf_offset)];
988assign l1 = (mytid<=3) ? `IRF0_EXU0[(17+irf_offset)] : `IRF0_EXU1[(17+irf_offset)];
989assign l2 = (mytid<=3) ? `IRF0_EXU0[(18+irf_offset)] : `IRF0_EXU1[(18+irf_offset)];
990assign l3 = (mytid<=3) ? `IRF0_EXU0[(19+irf_offset)] : `IRF0_EXU1[(19+irf_offset)];
991assign l4 = (mytid<=3) ? `IRF0_EXU0[(20+irf_offset)] : `IRF0_EXU1[(20+irf_offset)];
992assign l5 = (mytid<=3) ? `IRF0_EXU0[(21+irf_offset)] : `IRF0_EXU1[(21+irf_offset)];
993assign l6 = (mytid<=3) ? `IRF0_EXU0[(22+irf_offset)] : `IRF0_EXU1[(22+irf_offset)];
994assign l7 = (mytid<=3) ? `IRF0_EXU0[(23+irf_offset)] : `IRF0_EXU1[(23+irf_offset)];
995
996assign i0 = (mytid<=3) ? `IRF0_EXU0[(24+irf_offset)] : `IRF0_EXU1[(24+irf_offset)];
997assign i1 = (mytid<=3) ? `IRF0_EXU0[(25+irf_offset)] : `IRF0_EXU1[(25+irf_offset)];
998assign i2 = (mytid<=3) ? `IRF0_EXU0[(26+irf_offset)] : `IRF0_EXU1[(26+irf_offset)];
999assign i3 = (mytid<=3) ? `IRF0_EXU0[(27+irf_offset)] : `IRF0_EXU1[(27+irf_offset)];
1000assign i4 = (mytid<=3) ? `IRF0_EXU0[(28+irf_offset)] : `IRF0_EXU1[(28+irf_offset)];
1001assign i5 = (mytid<=3) ? `IRF0_EXU0[(29+irf_offset)] : `IRF0_EXU1[(29+irf_offset)];
1002assign i6 = (mytid<=3) ? `IRF0_EXU0[(30+irf_offset)] : `IRF0_EXU1[(30+irf_offset)];
1003assign i7 = (mytid<=3) ? `IRF0_EXU0[(31+irf_offset)] : `IRF0_EXU1[(31+irf_offset)];
1004
1005//----------------------------------------------------------
1006assign frf_0 = `FRF0_EVEN[(mytid*32)+ 0];
1007assign frf_2 = `FRF0_EVEN[(mytid*32)+ 1];
1008assign frf_4 = `FRF0_EVEN[(mytid*32)+ 2];
1009assign frf_6 = `FRF0_EVEN[(mytid*32)+ 3];
1010assign frf_8 = `FRF0_EVEN[(mytid*32)+ 4];
1011assign frf_10 = `FRF0_EVEN[(mytid*32)+ 5];
1012assign frf_12 = `FRF0_EVEN[(mytid*32)+ 6];
1013assign frf_14 = `FRF0_EVEN[(mytid*32)+ 7];
1014assign frf_16 = `FRF0_EVEN[(mytid*32)+ 8];
1015assign frf_18 = `FRF0_EVEN[(mytid*32)+ 9];
1016assign frf_20 = `FRF0_EVEN[(mytid*32)+ 10];
1017assign frf_22 = `FRF0_EVEN[(mytid*32)+ 11];
1018assign frf_24 = `FRF0_EVEN[(mytid*32)+ 12];
1019assign frf_26 = `FRF0_EVEN[(mytid*32)+ 13];
1020assign frf_28 = `FRF0_EVEN[(mytid*32)+ 14];
1021assign frf_30 = `FRF0_EVEN[(mytid*32)+ 15];
1022assign frf_32 = `FRF0_EVEN[(mytid*32)+ 16];
1023assign frf_34 = `FRF0_EVEN[(mytid*32)+ 17];
1024assign frf_36 = `FRF0_EVEN[(mytid*32)+ 18];
1025assign frf_38 = `FRF0_EVEN[(mytid*32)+ 19];
1026assign frf_40 = `FRF0_EVEN[(mytid*32)+ 20];
1027assign frf_42 = `FRF0_EVEN[(mytid*32)+ 21];
1028assign frf_44 = `FRF0_EVEN[(mytid*32)+ 22];
1029assign frf_46 = `FRF0_EVEN[(mytid*32)+ 23];
1030assign frf_48 = `FRF0_EVEN[(mytid*32)+ 24];
1031assign frf_50 = `FRF0_EVEN[(mytid*32)+ 25];
1032assign frf_52 = `FRF0_EVEN[(mytid*32)+ 26];
1033assign frf_54 = `FRF0_EVEN[(mytid*32)+ 27];
1034assign frf_56 = `FRF0_EVEN[(mytid*32)+ 28];
1035assign frf_58 = `FRF0_EVEN[(mytid*32)+ 29];
1036assign frf_60 = `FRF0_EVEN[(mytid*32)+ 30];
1037assign frf_62 = `FRF0_EVEN[(mytid*32)+ 31];
1038
1039assign frf_1 = `FRF0_ODD[(mytid*32)+ 0];
1040assign frf_3 = `FRF0_ODD[(mytid*32)+ 1];
1041assign frf_5 = `FRF0_ODD[(mytid*32)+ 2];
1042assign frf_7 = `FRF0_ODD[(mytid*32)+ 3];
1043assign frf_9 = `FRF0_ODD[(mytid*32)+ 4];
1044assign frf_11 = `FRF0_ODD[(mytid*32)+ 5];
1045assign frf_13 = `FRF0_ODD[(mytid*32)+ 6];
1046assign frf_15 = `FRF0_ODD[(mytid*32)+ 7];
1047assign frf_17 = `FRF0_ODD[(mytid*32)+ 8];
1048assign frf_19 = `FRF0_ODD[(mytid*32)+ 9];
1049assign frf_21 = `FRF0_ODD[(mytid*32)+ 10];
1050assign frf_23 = `FRF0_ODD[(mytid*32)+ 11];
1051assign frf_25 = `FRF0_ODD[(mytid*32)+ 12];
1052assign frf_27 = `FRF0_ODD[(mytid*32)+ 13];
1053assign frf_29 = `FRF0_ODD[(mytid*32)+ 14];
1054assign frf_31 = `FRF0_ODD[(mytid*32)+ 15];
1055assign frf_33 = `FRF0_ODD[(mytid*32)+ 16];
1056assign frf_35 = `FRF0_ODD[(mytid*32)+ 17];
1057assign frf_37 = `FRF0_ODD[(mytid*32)+ 18];
1058assign frf_39 = `FRF0_ODD[(mytid*32)+ 19];
1059assign frf_41 = `FRF0_ODD[(mytid*32)+ 20];
1060assign frf_43 = `FRF0_ODD[(mytid*32)+ 21];
1061assign frf_45 = `FRF0_ODD[(mytid*32)+ 22];
1062assign frf_47 = `FRF0_ODD[(mytid*32)+ 23];
1063assign frf_49 = `FRF0_ODD[(mytid*32)+ 24];
1064assign frf_51 = `FRF0_ODD[(mytid*32)+ 25];
1065assign frf_53 = `FRF0_ODD[(mytid*32)+ 26];
1066assign frf_55 = `FRF0_ODD[(mytid*32)+ 27];
1067assign frf_57 = `FRF0_ODD[(mytid*32)+ 28];
1068assign frf_59 = `FRF0_ODD[(mytid*32)+ 29];
1069assign frf_61 = `FRF0_ODD[(mytid*32)+ 30];
1070assign frf_63 = `FRF0_ODD[(mytid*32)+ 31];
1071
1072//----------------------------------------------------------
1073assign delta_fx4_0 = delta_fx4[0];
1074assign delta_fx4_1 = delta_fx4[1];
1075assign delta_fx4_2 = delta_fx4[2];
1076assign delta_fx4_3 = delta_fx4[3];
1077assign delta_fx4_4 = delta_fx4[4];
1078assign delta_fx4_5 = delta_fx4[5];
1079assign delta_fx4_6 = delta_fx4[6];
1080assign delta_fx4_7 = delta_fx4[7];
1081
1082assign delta_fx5_0 = delta_fx5[0];
1083assign delta_fx5_1 = delta_fx5[1];
1084assign delta_fx5_2 = delta_fx5[2];
1085assign delta_fx5_3 = delta_fx5[3];
1086assign delta_fx5_4 = delta_fx5[4];
1087assign delta_fx5_5 = delta_fx5[5];
1088assign delta_fx5_6 = delta_fx5[6];
1089assign delta_fx5_7 = delta_fx5[7];
1090
1091assign delta_fb_0 = delta_fb[0];
1092assign delta_fb_1 = delta_fb[1];
1093assign delta_fb_2 = delta_fb[2];
1094assign delta_fb_3 = delta_fb[3];
1095assign delta_fb_4 = delta_fb[4];
1096assign delta_fb_5 = delta_fb[5];
1097assign delta_fb_6 = delta_fb[6];
1098assign delta_fb_7 = delta_fb[7];
1099
1100assign delta_fw_0 = delta_fw[0];
1101assign delta_fw_1 = delta_fw[1];
1102assign delta_fw_2 = delta_fw[2];
1103assign delta_fw_3 = delta_fw[3];
1104assign delta_fw_4 = delta_fw[4];
1105assign delta_fw_5 = delta_fw[5];
1106assign delta_fw_6 = delta_fw[6];
1107assign delta_fw_7 = delta_fw[7];
1108
1109assign delta_fw1_0 = delta_fw1[0];
1110assign delta_fw1_1 = delta_fw1[1];
1111assign delta_fw1_2 = delta_fw1[2];
1112assign delta_fw1_3 = delta_fw1[3];
1113assign delta_fw1_4 = delta_fw1[4];
1114assign delta_fw1_5 = delta_fw1[5];
1115assign delta_fw1_6 = delta_fw1[6];
1116assign delta_fw1_7 = delta_fw1[7];
1117
1118assign delta_fw2_0 = delta_fw2[0];
1119assign delta_fw2_1 = delta_fw2[1];
1120assign delta_fw2_2 = delta_fw2[2];
1121assign delta_fw2_3 = delta_fw2[3];
1122assign delta_fw2_4 = delta_fw2[4];
1123assign delta_fw2_5 = delta_fw2[5];
1124assign delta_fw2_6 = delta_fw2[6];
1125assign delta_fw2_7 = delta_fw2[7];
1126
1127assign delta_prev_0 = delta_prev[0];
1128assign delta_prev_1 = delta_prev[1];
1129assign delta_prev_2 = delta_prev[2];
1130assign delta_prev_3 = delta_prev[3];
1131assign delta_prev_4 = delta_prev[4];
1132assign delta_prev_5 = delta_prev[5];
1133assign delta_prev_6 = delta_prev[6];
1134assign delta_prev_7 = delta_prev[7];
1135
1136`endif // DEBUG_PIPE
1137//----------------------------------------------------------
1138
1139//----------------------------------------------------------
1140assign mytnum = (mycid*8)+mytid;
1141assign mytg = mytid >> 2;
1142
1143assign exu_complete = exu_valid & ~(`PROBES0.clkstop_d5|`TOP.in_reset|`SPC0.tcu_scan_en);
1144assign imul_complete = imul_valid & ~(`TOP.in_reset|`SPC0.tcu_scan_en);
1145assign idiv_complete = idiv_valid & ~(`TOP.in_reset|`SPC0.tcu_scan_en);
1146assign tlu_complete = tlu_complete_3 ;
1147assign fp_complete = fp_valid & ~(`TOP.in_reset|`SPC0.tcu_scan_en);
1148assign fdiv_complete = fdiv_valid & ~(`TOP.in_reset|`SPC0.tcu_scan_en);
1149assign lsu_complete = lsu_valid & ~(`TOP.in_reset|`SPC0.tcu_scan_en);
1150assign asi_complete = asi_valid & ~(`TOP.in_reset|`SPC0.tcu_scan_en);
1151
1152assign complete_w = (exu_complete << `EXU_INDEX) |
1153 (lsu_complete << `LSU_INDEX) |
1154 (tlu_complete << `TLU_INDEX) |
1155 (asi_complete << `ASI_INDEX) ;
1156
1157assign oddwin = CWP_reg % 2;
1158
1159assign frf_w1_valid_even = (frf_w1_tid_fw == mytid) & frf_w1_valid_fw[1];
1160assign frf_w1_valid_odd = (frf_w1_tid_fw == mytid) & frf_w1_valid_fw[0];
1161assign frf_w2_valid_even = (frf_w2_tid_fw == mytid) & frf_w2_valid_fw[1];
1162assign frf_w2_valid_odd = (frf_w2_tid_fw == mytid) & frf_w2_valid_fw[0];
1163
1164assign frf_w1_skip_addr = frf_w1_addr_fw;
1165assign frf_w2_skip_addr = frf_w2_addr_fw;
1166
1167//-----------------
1168// ADD_TSB_CFG
1169// NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
1170`ifdef ADD_TSB_CFG
1171wire [63:0] ctxt_z_tsb_cfg0_reg = `PROBES0.ctxt_z_tsb_cfg0_reg[mytid];
1172wire [63:0] ctxt_z_tsb_cfg1_reg = `PROBES0.ctxt_z_tsb_cfg1_reg[mytid];
1173wire [63:0] ctxt_z_tsb_cfg2_reg = `PROBES0.ctxt_z_tsb_cfg2_reg[mytid];
1174wire [63:0] ctxt_z_tsb_cfg3_reg = `PROBES0.ctxt_z_tsb_cfg3_reg[mytid];
1175wire [63:0] ctxt_nz_tsb_cfg0_reg = `PROBES0.ctxt_nz_tsb_cfg0_reg[mytid];
1176wire [63:0] ctxt_nz_tsb_cfg1_reg = `PROBES0.ctxt_nz_tsb_cfg1_reg[mytid];
1177wire [63:0] ctxt_nz_tsb_cfg2_reg = `PROBES0.ctxt_nz_tsb_cfg2_reg[mytid];
1178wire [63:0] ctxt_nz_tsb_cfg3_reg = `PROBES0.ctxt_nz_tsb_cfg3_reg[mytid];
1179`endif
1180
1181//----------------------------------------------------------
1182// Pipelined Signals
1183always @ (posedge `BENCH_SPC0_GCLK) begin // {
1184
1185 // TLU is async to the execution pipeline
1186 // but needs to be delayed to allow CWP, etc to update and be stable
1187 // before arch state is captured and diff_reg is called.
1188 // Done for FLUSHW
1189
1190 // FDIV was moved from fw1 to fw to allow FPRS to be stable before capture
1191 tlu_complete_1 <= tlu_valid & ~(`TOP.in_reset|`SPC0.tcu_scan_en);
1192 tlu_complete_2 <= tlu_complete_1;
1193 tlu_complete_3 <= tlu_complete_2;
1194
1195 itagacc_fx5 <= I_TAG_ACC_reg; // Signal changes in W so need to pipeline to fw2
1196 itagacc_fb <= itagacc_fx5;
1197 itagacc_fw <= itagacc_fb;
1198 itagacc_fw1 <= itagacc_fw;
1199 itagacc_fw2 <= itagacc_fw1;
1200
1201 dtagacc_fx5 <= D_TAG_ACC_reg; // Signal changes in W so need to pipeline to fw2
1202 dtagacc_fb <= dtagacc_fx5;
1203 dtagacc_fw <= dtagacc_fb;
1204 dtagacc_fw1 <= dtagacc_fw;
1205 dtagacc_fw2 <= dtagacc_fw1;
1206
1207 dsfar_fb <= DSFAR_reg; // Signal changes in W+1 so need to pipeline to fw2
1208 dsfar_fw <= dsfar_fb;
1209 dsfar_fw1 <= dsfar_fw;
1210 dsfar_fw2 <= dsfar_fw1;
1211
1212 pc_fx4 <= PC_reg;
1213 pc_fx5 <= pc_fx4;
1214 pc_fb <= pc_fx5;
1215 pc_fw <= pc_fb;
1216 pc_fw1 <= pc_fw;
1217 pc_fw2 <= pc_fw1;
1218
1219 cwp_fx4 <= CWP_reg;
1220 cwp_fx5 <= cwp_fx4;
1221 cwp_fb <= cwp_fx5;
1222 cwp_fw <= cwp_fb;
1223 cwp_fw1 <= cwp_fw;
1224 cwp_fw2 <= cwp_fw1;
1225
1226 complete_fx4 <= complete_w;
1227 complete_fx5 <= complete_fx4 ;
1228 complete_fb <= complete_fx5 |
1229 (idiv_complete << `IDIV_INDEX);
1230 complete_fw <= complete_fb |
1231 (fdiv_complete << `FDIV_INDEX) |
1232 (imul_complete << `IMUL_INDEX);
1233 complete_fw1 <= complete_fw |
1234 (fp_complete << `FP_INDEX);
1235
1236 complete_fw2 <= complete_fw1;
1237
1238 frf_w1_valid_fw1 <= (frf_w1_valid_odd | frf_w1_valid_even) & fp_complete;
1239 frf_w1_valid_fw2 <= frf_w1_valid_fw1;
1240
1241 frf_w1_skip_addr4_fw1 <= frf_w1_skip_addr[4];
1242 frf_w1_skip_addr4_fw2 <= frf_w1_skip_addr4_fw1;
1243
1244 fprs_fb <= FPRS_reg;
1245 fprs_fw <= fprs_fb;
1246 fprs_fw1 <= fprs_fw;
1247 fprs_fw2 <= fprs_fw1;
1248
1249 frf_w2_valid_fw <= frf_w2_valid_bn;
1250 frf_w2_tid_fw <= frf_w2_tid;
1251 frf_w2_addr_fw <= frf_w2_addr;
1252
1253 frf_w1_valid_fw <= frf_w1_valid;
1254 frf_w1_tid_fw <= frf_w1_tid;
1255 frf_w1_addr_fw <= frf_w1_addr;
1256
1257 // Thread running
1258
1259 if (~thread_running & `SPC0.tcu_core_running[mytid])
1260 `TOP.th_last_act_cycle[mytnum] = `TOP.core_cycle_cnt;
1261
1262 thread_running <= `SPC0.tcu_core_running[mytid];
1263
1264 // Reset some register prev state on wmr negation
1265 if (`SPC0.rst_wmr_protect && ~wmr)
1266 wmr_prev;
1267
1268 if (por_a && ~por_b)
1269 por_prev;
1270
1271 wmr <= `SPC0.rst_wmr_protect;
1272 por_a <= `TOP.in_por;
1273 por_b <= por_a;
1274
1275 if (`SPC0.rst_wmr_protect)
1276 in_wmr <= 1;
1277
1278end // }
1279
1280//----------------------------------------------------------
1281// Holding state for registers that may be updated asynchronously
1282// after synchronous update, but before capture/step. Also for reads,
1283// when register is read and modified before capture/step ..
1284// We capture the value /write time, and use that for sstep,
1285// ignoring any async updates, which are sent in the NEXT sstep ..
1286//
1287reg [63:0] asi_updated_int_rec;
1288reg asi_rdwr_int_rec;
1289reg asi_wr_int_rec_delay;
1290
1291reg asi_updated_hintp;
1292reg asi_rdwr_hintp;
1293reg asi_wr_hintp_delay;
1294
1295reg [16:0] asi_updated_softint;
1296reg asi_rdwr_softint;
1297reg asi_wr_softint_delay;
1298reg [16:0] asi_softint_wrdata;
1299
1300always @(posedge `BENCH_SPC0_GCLK) begin // {
1301
1302 // Corner case : If async and sync wr occur in same clock, then the async
1303 // update takes place. In this case we have to capture the
1304 // value of the write WITHOUT async bit being set, so that
1305 // we can sync with Riesling's sync write ..
1306
1307 asi_wr_int_rec_delay <= ( `SPC0.tlu.cth.asi_wr_int_rec[mytid] |
1308 `SPC0.tlu.asi_rd_inc_vec_2[mytid]);
1309
1310 if (`SPC0.tlu.cth.asi_wr_int_rec[mytid] |
1311 ((`SPC0.tlu.asi.rd_inc_vec) &&
1312 (`SPC0.tlu.asi.rd_tid_dec[mytid])) |
1313 (`SPC0.tlu.asi_rd_int_rec &
1314 `SPC0.tlu.cth.int_rec_mux_sel==mytid))
1315 begin // {
1316
1317 if (`SPC0.tlu.cth.asi_wr_int_rec[mytid])
1318 asi_updated_int_rec <= `SPC0.tlu.cth.int_rec ;
1319 else if ( (`SPC0.tlu.asi.rd_inc_vec) &&
1320 (`SPC0.tlu.asi.rd_tid_dec[mytid]) )
1321 if (`SPC0.tlu.cth.cxi_wr_int_dis[mytid]) begin
1322 asi_updated_int_rec <= INTR_RECEIVE_reg & `SPC0.tlu.cth.int_rec_muxed_;
1323 asi_updated_int_rec[`SPC0.tlu.cth.incoming_vector_in] <= 1'b0 ;
1324 end
1325 else
1326 begin
1327 asi_updated_int_rec <= `SPC0.tlu.cth.int_rec_muxed ;
1328 asi_updated_int_rec[`SPC0.tlu.cth.incoming_vector_in] <= 1'b0 ;
1329 end
1330 else
1331 asi_updated_int_rec <= INTR_RECEIVE_reg;
1332 asi_rdwr_int_rec <= 1'b1;
1333 end //}
1334 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
1335 asi_rdwr_int_rec <= 1'b0;
1336
1337 asi_wr_hintp_delay <= `SPC0.tlu.asi_wr_hintp[mytid];
1338
1339 if (`SPC0.tlu.asi_wr_hintp[mytid] |
1340 `SPC0.tlu.asi_rd_hintp[mytid])
1341 begin // {
1342 if (`SPC0.tlu.asi_wr_hintp[mytid])
1343 asi_updated_hintp <= `SPC0.tlu.asi_wr_data_0[0] ;
1344 else
1345 asi_updated_hintp <= HINTP_reg;
1346 asi_rdwr_hintp <= 1'b1;
1347 end //}
1348 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
1349 asi_rdwr_hintp <= 1'b0;
1350
1351 asi_wr_softint_delay <= (`SPC0.tlu.asi_wr_softint[mytid] |
1352 `SPC0.tlu.asi_wr_clear_softint[mytid] |
1353 `SPC0.tlu.asi_wr_set_softint[mytid]);
1354
1355 if (`SPC0.tlu.asi_wr_clear_softint[mytid])
1356 asi_softint_wrdata <= ~`SPC0.tlu.asi_wr_data_0[16:0] & rd_SOFTINT_reg;
1357 else if (`SPC0.tlu.asi_wr_set_softint[mytid])
1358 asi_softint_wrdata <= `SPC0.tlu.asi_wr_data_0[16:0] | rd_SOFTINT_reg;
1359 else
1360 asi_softint_wrdata <= `SPC0.tlu.asi_wr_data_0[16:0];
1361
1362 if (asi_wr_softint_delay | `SPC0.tlu.asi_rd_softint[mytid])
1363 begin // {
1364 if (asi_wr_softint_delay)
1365 asi_updated_softint <= asi_softint_wrdata ;
1366 else
1367 asi_updated_softint <= rd_SOFTINT_reg ;
1368 asi_rdwr_softint <= 1'b1;
1369 end //}
1370 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
1371 asi_rdwr_softint <= 1'b0;
1372end //}
1373
1374//----------------------------------------------------------
1375// Negedge sampling to avoid race on specific signals ..
1376//
1377always @ (negedge `BENCH_SPC0_GCLK) begin // {
1378 frf_w2_valid_bn <= frf_w2_valid;
1379end //}
1380
1381//----------------------------------------------------------
1382// When instruction completes,
1383// Push differences to simics
1384
1385always @ (posedge `BENCH_SPC0_GCLK) begin // {
1386
1387 if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable && ~`SPC0.tcu_scan_en && ~`TOP.in_por) begin // {
1388
1389
1390 //----------
1391 // Update window registers
1392 if (CWP_reg != `NASTOP.th_cwp[mytnum]) begin // {
1393 copy_win (CWP_reg,`NASTOP.th_cwp[mytnum]);
1394 `NASTOP.th_cwp[mytnum] = CWP_reg;
1395 end // }
1396
1397 //----------
1398 // Update global registers
1399 // Wait for warm-reset flush related toggling to settle
1400 if (GL_reg != th_gl) begin // {
1401 if (`SPC0.spc_core_running_status[mytid] &
1402 ~`SPC0.rst_wmr_protect) begin // {
1403 copy_global (GL_reg,th_gl);
1404 th_gl = GL_reg;
1405 end // }
1406 end // }
1407
1408 //----------
1409 // Check for bad signal values
1410 check_values;
1411
1412 //----------
1413 // Step Simics
1414 //
1415 // if NASTOP.sstep_sent[tid]=1,
1416 // then SSTEP was set by another module (i.e. tlb_sync)
1417
1418 if (`PARGS.nas_check_on) begin // {
1419 mytime = `TOP.core_cycle_cnt-1;
1420 if (complete_fw2 && (`NASTOP.sstep_sent[mytnum]==1'b0)) begin // {
1421 `PR_INFO ("pli_nas", `INFO, " C%0d T%0d PLI_SSTEP tid=%d pc=%h ts=%0d ",
1422 mycid,mytid,mytnum,pc_fw2,mytime);
1423 junk = $sim_send(`PLI_SSTEP, mytnum);
1424 // Always clear sstep_early
1425 // In case tlb_sync asserted it too late for complete_fw2
1426 `NASTOP.sstep_early[mytnum] <= 1'b0;
1427 end //}
1428 else if (complete_fw2) begin // {
1429 `NASTOP.sstep_sent[mytnum] <= 1'b0; // re-arm SSTEP
1430 `NASTOP.sstep_early[mytnum] <= 1'b0;
1431 `PR_INFO ("pli_nas", `INFO, " C%0d T%0d PLI_SSTEP tid=%d pc=%h ts=%0d (nas_pipe: skip sstep. rearm sstep. sstep_sent=0)",
1432 mycid,mytid,mytnum,pc_fw2,mytime);
1433 end //}
1434 end //}
1435
1436 //----------
1437 // Only capture if something completes and not first instruction
1438 if (complete_fw2 && !first_op) begin // {
1439 update_pc;
1440 push_simics; // Use with AXIS to keep from getting timeout
1441 end // }
1442
1443 // Pipeline runs continuously
1444 // Other than when in POR ..
1445 update_fx4;
1446 update_fx5;
1447 update_fb;
1448 update_fw;
1449 update_fw1;
1450 update_fw2;
1451 // Only save to delta_prev when something completes
1452 if (complete_fw2) begin
1453 update_fw2_async;
1454 update_prev;
1455 first_op = 0;
1456 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
1457 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
1458 end
1459
1460
1461`ifndef EMUL_TL
1462 //----------
1463 // If something was captured but no instruction is in the pipeline
1464 if ((delta_fw2[`NEXT_INDEX]!=`FIRST_INDEX) && (complete_fw2 == 0))
1465 begin // {
1466
1467 for (myindex=`FIRST_INDEX; myindex<delta_fw2[`NEXT_INDEX]; myindex=myindex+1)
1468 begin // {
1469 print_entry (delta_fw2[myindex]);
1470 end //}
1471 `PR_ERROR ("nas",`ERROR, "T%0d Unexpected Reg change in DUT. Special case - no instruction retired.", mytnum);
1472
1473 end // }
1474`endif
1475
1476
1477 //----------
1478 // End detection for non-sas runs ..
1479
1480 for (junk=0;junk<`PARGS.bad_trap_count;junk=junk+1)
1481 if (({16'b0,pc_fw2}&`PC_MASK) ===
1482 (`PARGS.bad_trap_addr[junk]&`PC_MASK)) begin // {
1483 // Disable nas_pipe processing (capture & SSTEP)
1484 // to speed up simulation (minimize socket traffic,etc)
1485 nas_pipe_enable=1'b0;
1486 if (! `PARGS.nas_check_on) begin //{
1487 `PR_ERROR ("nas",`ERROR, "T%0d reached Bad Trap", mytnum);
1488 end //}
1489 end //}
1490
1491 for (junk=0;junk<`PARGS.good_trap_count;junk=junk+1)
1492 if ((|complete_fw2) && (({16'b0,pc_fw2}&`PC_MASK) ===
1493 (`PARGS.good_trap_addr[junk]&`PC_MASK))) begin // {
1494 // Disable nas_pipe processing (capture & SSTEP)
1495 // to speed up simulation (minimize socket traffic,etc)
1496 nas_pipe_enable=1'b0;
1497 if (! `PARGS.nas_check_on) begin //{
1498 good_trap_detected = 1'b1;
1499 end //}
1500 end //}
1501
1502 // Check Thread level timeout
1503 if (thread_running &&
1504 (`TOP.core_cycle_cnt - `TOP.th_last_act_cycle[mytnum]) > `PARGS.th_timeout)
1505 begin // {
1506 // Note: Do not change this message because regreport parses it for certain words.
1507 `PR_ALWAYS ("nas",`ALWAYS, "ERROR: Thread T%0d No Activity for %0d Cycles - Thread TIMEOUT!",
1508 mytnum, `PARGS.th_timeout);
1509 junk = incErr(9999); // must exceed users max error setting to force exit.
1510 end //}
1511
1512 end // if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable ...)}
1513
1514 // if -nosas only,
1515 // Need to make sure Store Buffer is empty before turning off th_check_enable.
1516 //global chkr requires to wait for all outstanding pending I
1517 if ((! `PARGS.nas_check_on) &&
1518 (good_trap_detected==1'b1) &&
1519 (`TOP.nas_top.lsu_stb_empty[mytnum]) && `TOP.nas_top.ireq_pending[mytnum]) begin // {
1520 `PARGS.th_check_enable[mytnum] = 1'b0;
1521 `TOP.finished_tids[mytnum] = 1'b1;
1522 good_trap_detected = 1'b0;
1523 `PR_NORMAL ("nas", `NORMAL, "T%0d reached Good Trap. Disabling checking for thread %0d", mytnum,mytnum);
1524 end // }
1525end // always }
1526
1527//----------------------------------------------------------
1528//----------------------------------------------------------
1529// Stage FX4 of delta pipeline
1530task update_fx4;
1531
1532 integer i;
1533 reg [7:0] index;
1534
1535 begin // {
1536
1537 `ifndef EMUL_TL
1538 index = `FIRST_INDEX;
1539
1540 //--------------------
1541 // Init delta_fx4
1542 delta_fx4[`NEXT_INDEX] <= `FIRST_INDEX;
1543 delta_fx4[`TIME_INDEX] <= 0;
1544 delta_fx4[`PC_INDEX] <= {16'b0,PC_reg};
1545 delta_fx4[`GL_INDEX] <= GL_reg;
1546 delta_fx4[`CWP_INDEX] <= CWP_reg;
1547 delta_fx4[`OPCODE_INDEX] <= opcode;
1548 delta_fx4[`FIRST_INDEX] <= 77'hx;
1549 `else
1550 index = 0;
1551 `endif
1552
1553 end // }
1554endtask
1555
1556//----------------------------------------------------------
1557// Stage FX5 of delta pipeline
1558task update_fx5;
1559
1560 integer i;
1561 reg [7:0] index;
1562 reg [38:0] frf_tmp;
1563
1564 begin // {
1565
1566 `ifndef EMUL_TL
1567 index = delta_fx4[`NEXT_INDEX];
1568
1569 //--------------------
1570 // Pipeline previous stage
1571 for (i=0; i<=delta_fx4[`NEXT_INDEX]; i=i+1) begin // {
1572 delta_fx5[i] <= delta_fx4[i];
1573 end
1574 `else
1575 index = 0;
1576 `endif
1577
1578 //-------------------
1579 // Control Registers
1580 if (complete_fx4) begin // LSU | EXU | TLU
1581 push_delta_fx5 (`CCR+`CTL_OFFSET,CCR_reg,index);
1582 end
1583
1584 //-------------------
1585 // Update IRF0
1586`ifndef NAS_NO_IRFFRF
1587 if (complete_fx4[`LSU_INDEX] |
1588 complete_fx4[`EXU_INDEX]) begin
1589 if (mytid <= 3) begin // {
1590 for (i=0; i<=31; i=i+1) begin // {
1591 push_delta_fx5 (i,`IRF0_EXU0[(remap(i,oddwin)+irf_offset)],index);
1592 end // }
1593 end // }
1594 else begin // {
1595 for (i=0; i<=31; i=i+1) begin // {
1596 push_delta_fx5 (i,`IRF0_EXU1[(remap(i,oddwin)+irf_offset)],index);
1597 end // }
1598 end // }
1599 end
1600`endif
1601
1602 //--------------------
1603 // Update FRF0 - Loads use W2 Port.
1604`ifndef NAS_NO_IRFFRF
1605 if (complete_fx4[`LSU_INDEX]) begin // {
1606 // IF W1 port is also being written, ignore that address
1607 for (i=0; i<=31; i=i+1) begin // {
1608 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
1609 frf_tmp = `FRF0_EVEN[(mytid*32)+i];
1610 push_delta_fx5 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
1611 end // }
1612 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
1613 frf_tmp = `FRF0_ODD[(mytid*32)+i];
1614 push_delta_fx5 (`FP_OFFSET + (i*2)+1, frf_tmp[31:0], index);
1615 end // }
1616 end //}
1617 end // }
1618`endif
1619
1620 // Update ASR/ASI registers
1621 if (complete_fx4) begin // {
1622 push_delta_fx5 (`PSTATE + `CTL_OFFSET,PSTATE_reg,index);
1623 push_delta_fx5 (`HPSTATE + `CTL_OFFSET,HPSTATE_reg,index);
1624 push_delta_fx5 (`PIL + `CTL_OFFSET,PIL_reg,index);
1625 push_delta_fx5 (`TBA + `CTL_OFFSET,{TBA_reg,15'b0},index);
1626 push_delta_fx5 (`GL + `CTL_OFFSET,GL_reg,index);
1627 push_delta_fx5 (`HTBA + `CTL_OFFSET,{HTBA_reg,14'b0},index);
1628 push_delta_fx5 (`VER + `CTL_OFFSET,VER_reg,index);
1629 push_delta_fx5 (`Y + `CTL_OFFSET,Y_reg,index);
1630 push_delta_fx5 (`ASI + `CTL_OFFSET,ASI_reg,index);
1631 push_delta_fx5 (`STICK_CMPR + `CTL_OFFSET,STICK_CMPR_wire,index);
1632 push_delta_fx5 (`HSTICK_CMPR + `CTL_OFFSET,HSTICK_CMPR_wire,index);
1633 push_delta_fx5 (`TICK_CMPR + `CTL_OFFSET,TICK_CMPR_wire,index);
1634 push_delta_fx5 (`CWP + `CTL_OFFSET,CWP_reg,index);
1635 push_delta_fx5 (`CANSAVE + `CTL_OFFSET,CANSAVE_reg,index);
1636 push_delta_fx5 (`CANRESTORE + `CTL_OFFSET,CANRESTORE_reg,index);
1637 push_delta_fx5 (`CLEANWIN + `CTL_OFFSET,CLEANWIN_reg,index);
1638 push_delta_fx5 (`OTHERWIN + `CTL_OFFSET,OTHERWIN_reg,index);
1639 push_delta_fx5 (`WSTATE + `CTL_OFFSET,WSTATE_reg,index);
1640
1641 push_delta_fx5 (`CTXT_PRIM_0+`CTL_OFFSET,CTXT_PRIM_0_reg,index);
1642 push_delta_fx5 (`CTXT_SEC_0+`CTL_OFFSET,CTXT_SEC_0_reg,index);
1643 push_delta_fx5 (`CTXT_PRIM_1+`CTL_OFFSET,CTXT_PRIM_1_reg,index);
1644 push_delta_fx5 (`CTXT_SEC_1+`CTL_OFFSET,CTXT_SEC_1_reg,index);
1645 push_delta_fx5 (`LSU_CONTROL+`CTL_OFFSET,LSU_CONTROL_reg,index);
1646 push_delta_fx5 (`WATCHPOINT_ADDR+`CTL_OFFSET,WATCHPOINT_ADDR_reg,index);
1647
1648 // NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
1649 // ADD_TSB_CFG
1650 `ifdef ADD_TSB_CFG
1651 push_delta_fx5 (`CTXT_Z_TSB_CFG0+`CTL_OFFSET,ctxt_z_tsb_cfg0_reg,index);
1652 push_delta_fx5 (`CTXT_Z_TSB_CFG1+`CTL_OFFSET,ctxt_z_tsb_cfg1_reg,index);
1653 push_delta_fx5 (`CTXT_Z_TSB_CFG2+`CTL_OFFSET,ctxt_z_tsb_cfg2_reg,index);
1654 push_delta_fx5 (`CTXT_Z_TSB_CFG3+`CTL_OFFSET,ctxt_z_tsb_cfg3_reg,index);
1655 push_delta_fx5 (`CTXT_NZ_TSB_CFG0+`CTL_OFFSET,ctxt_nz_tsb_cfg0_reg,index);
1656 push_delta_fx5 (`CTXT_NZ_TSB_CFG1+`CTL_OFFSET,ctxt_nz_tsb_cfg1_reg,index);
1657 push_delta_fx5 (`CTXT_NZ_TSB_CFG2+`CTL_OFFSET,ctxt_nz_tsb_cfg2_reg,index);
1658 push_delta_fx5 (`CTXT_NZ_TSB_CFG3+`CTL_OFFSET,ctxt_nz_tsb_cfg3_reg,index);
1659 `endif
1660
1661 end //}
1662
1663 // Update GSR for all except write ASR in progess
1664 if (!asi_in_progress) begin // {
1665 push_delta_fx5 (`GSR + `CTL_OFFSET,GSR_wire, index);
1666 end // }
1667
1668 // If lsu_complete & fp_complete assert at same time,
1669 // then the fp_complete is the one that will modify the FSR
1670 if (complete_fx4[`LSU_INDEX] & !complete_fw1[`FP_INDEX]) begin
1671 push_delta_fx5 (`FSR+`CTL_OFFSET,FSR_wire,index);
1672 end
1673
1674 // Non Trap updates of Trap stack & level
1675 if (complete_fx4 && !complete_fx4[`TLU_INDEX]) begin // {
1676 push_delta_fx5 (`TL + `CTL_OFFSET,TL_reg,index);
1677 push_delta_fx5 (`TPC1 + `CTL_OFFSET, TPC1_wire, index);
1678 push_delta_fx5 (`TPC2 + `CTL_OFFSET, TPC2_wire, index);
1679 push_delta_fx5 (`TPC3 + `CTL_OFFSET, TPC3_wire, index);
1680 push_delta_fx5 (`TPC4 + `CTL_OFFSET, TPC4_wire, index);
1681 push_delta_fx5 (`TPC5 + `CTL_OFFSET, TPC5_wire, index);
1682 push_delta_fx5 (`TPC6 + `CTL_OFFSET, TPC6_wire, index);
1683 push_delta_fx5 (`TNPC1 + `CTL_OFFSET, TNPC1_wire, index);
1684 push_delta_fx5 (`TNPC2 + `CTL_OFFSET, TNPC2_wire, index);
1685 push_delta_fx5 (`TNPC3 + `CTL_OFFSET, TNPC3_wire, index);
1686 push_delta_fx5 (`TNPC4 + `CTL_OFFSET, TNPC4_wire, index);
1687 push_delta_fx5 (`TNPC5 + `CTL_OFFSET, TNPC5_wire, index);
1688 push_delta_fx5 (`TNPC6 + `CTL_OFFSET, TNPC6_wire, index);
1689 push_delta_fx5 (`TSTATE1 + `CTL_OFFSET, TSTATE1_wire, index);
1690 push_delta_fx5 (`TSTATE2 + `CTL_OFFSET, TSTATE2_wire, index);
1691 push_delta_fx5 (`TSTATE3 + `CTL_OFFSET, TSTATE3_wire, index);
1692 push_delta_fx5 (`TSTATE4 + `CTL_OFFSET, TSTATE4_wire, index);
1693 push_delta_fx5 (`TSTATE5 + `CTL_OFFSET, TSTATE5_wire, index);
1694 push_delta_fx5 (`TSTATE6 + `CTL_OFFSET, TSTATE6_wire, index);
1695 push_delta_fx5 (`HTSTATE1 + `CTL_OFFSET, HTSTATE1_wire, index);
1696 push_delta_fx5 (`HTSTATE2 + `CTL_OFFSET, HTSTATE2_wire, index);
1697 push_delta_fx5 (`HTSTATE3 + `CTL_OFFSET, HTSTATE3_wire, index);
1698 push_delta_fx5 (`HTSTATE4 + `CTL_OFFSET, HTSTATE4_wire, index);
1699 push_delta_fx5 (`HTSTATE5 + `CTL_OFFSET, HTSTATE5_wire, index);
1700 push_delta_fx5 (`HTSTATE6 + `CTL_OFFSET, HTSTATE6_wire, index);
1701 push_delta_fx5 (`TT1 + `CTL_OFFSET, TT1_wire, index);
1702 push_delta_fx5 (`TT2 + `CTL_OFFSET, TT2_wire, index);
1703 push_delta_fx5 (`TT3 + `CTL_OFFSET, TT3_wire, index);
1704 push_delta_fx5 (`TT4 + `CTL_OFFSET, TT4_wire, index);
1705 push_delta_fx5 (`TT5 + `CTL_OFFSET, TT5_wire, index);
1706 push_delta_fx5 (`TT6 + `CTL_OFFSET, TT6_wire, index);
1707 end //}
1708
1709 end // }
1710endtask
1711
1712//----------------------------------------------------------
1713// Stage FB of delta pipeline
1714task update_fb;
1715
1716 integer i;
1717 reg [7:0] index;
1718
1719 begin // {
1720
1721 `ifndef EMUL_TL
1722 index = delta_fx5[`NEXT_INDEX];
1723
1724 //--------------------
1725 // Pipeline previous stage
1726 for (i=0; i<=delta_fx5[`NEXT_INDEX]; i=i+1) begin // {
1727 delta_fb[i] <= delta_fx5[i];
1728 end
1729 `else
1730 index = 0;
1731 `endif
1732
1733 // ASI/ASR ONLY updates
1734 if (complete_fx5[`ASI_INDEX]) begin // {
1735 push_delta_fb (`GSR + `CTL_OFFSET,GSR_wire, index);
1736 end //}
1737
1738 end // }
1739endtask
1740
1741//----------------------------------------------------------
1742// Stage FW of delta pipeline
1743task update_fw;
1744
1745 integer i;
1746 reg [7:0] index;
1747 reg [38:0] frf_tmp;
1748
1749 begin // {
1750
1751 `ifndef EMUL_TL
1752 index = delta_fb[`NEXT_INDEX];
1753
1754 //--------------------
1755 // Pipeline previous stage
1756 for (i=0; i<=delta_fb[`NEXT_INDEX]; i=i+1) begin // {
1757 delta_fw[i] <= delta_fb[i];
1758 end
1759
1760 // Capture CWP_reg for SAVE/RESTORE
1761 if (imul_complete) begin
1762 delta_fw[`CWP_INDEX] <= CWP_reg;
1763 end
1764 `else
1765 index = 0;
1766 `endif
1767
1768 //-------------------
1769 // Update IRF0
1770`ifndef NAS_NO_IRFFRF
1771 if (complete_fb[`TLU_INDEX]) begin
1772 if (mytid <= 3) begin // {
1773 for (i=0; i<=31; i=i+1) begin // {
1774 push_delta_fw (i,`IRF0_EXU0[(remap(i,oddwin)+irf_offset)],index);
1775 end // }
1776 end // }
1777 else begin // {
1778 for (i=0; i<=31; i=i+1) begin // {
1779 push_delta_fw (i,`IRF0_EXU1[(remap(i,oddwin)+irf_offset)],index);
1780 end // }
1781 end // }
1782 end
1783`endif
1784
1785 //--------------------
1786 // Update FRF0 - Idivs use W2.
1787`ifndef NAS_NO_IRFFRF
1788 if (complete_fb[`IDIV_INDEX]) begin // {
1789 // IF W1 port is also being written, ignore that address
1790 for (i=0; i<=31; i=i+1) begin // {
1791 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
1792 frf_tmp = `FRF0_EVEN[(mytid*32)+i];
1793 push_delta_fw (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
1794 end // }
1795 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
1796 frf_tmp = `FRF0_ODD[(mytid*32)+i];
1797 push_delta_fw (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
1798 end // }
1799 end //}
1800 end // }
1801`endif
1802
1803 end // }
1804
1805endtask
1806
1807//----------------------------------------------------------
1808// Stage FW1 of delta pipeline
1809task update_fw1;
1810
1811 integer i;
1812 reg [7:0] index;
1813
1814 reg [4:0] rdnum;
1815 reg [38:0] frf_tmp;
1816
1817 begin // {
1818
1819 `ifndef EMUL_TL
1820 index = delta_fw[`NEXT_INDEX];
1821
1822 //--------------------
1823 // Pipeline previous stage
1824 for (i=0; i<=delta_fw[`NEXT_INDEX]; i=i+1) begin // {
1825 delta_fw1[i] <= delta_fw[i];
1826 end
1827 `else
1828 index = 0;
1829 `endif
1830
1831 //--------------------
1832 // Update FRF0 - FPops use W1 port.
1833`ifndef NAS_NO_IRFFRF
1834 if (fp_complete) begin // {
1835 // IF W2 port is also being written, ignore that address
1836 for (i=0; i<=31; i=i+1) begin // {
1837 if (!((i == frf_w2_skip_addr) && frf_w2_valid_even)) begin // {
1838 frf_tmp = `FRF0_EVEN[(mytid*32)+i];
1839 push_delta_fw1 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
1840 end // }
1841 if (!((i == frf_w2_skip_addr) && frf_w2_valid_odd)) begin // {
1842 frf_tmp = `FRF0_ODD[(mytid*32)+i];
1843 push_delta_fw1 (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
1844 end // }
1845 end //}
1846 end // }
1847`endif
1848
1849 //-------------------
1850 // Control Registers
1851 if (complete_fw[`IMUL_INDEX]|complete_fw[`IDIV_INDEX]) begin
1852 push_delta_fw1 (`CCR+`CTL_OFFSET,CCR_reg,index);
1853 push_delta_fw1 (`Y+`CTL_OFFSET,Y_reg,index);
1854 push_delta_fw1 (`CWP+`CTL_OFFSET,CWP_reg,index);
1855 push_delta_fw1 (`CANSAVE+`CTL_OFFSET,CANSAVE_reg,index);
1856 push_delta_fw1 (`CANRESTORE+`CTL_OFFSET,CANRESTORE_reg,index);
1857 push_delta_fw1 (`CLEANWIN+`CTL_OFFSET,CLEANWIN_reg,index);
1858 push_delta_fw1 (`OTHERWIN+`CTL_OFFSET,OTHERWIN_reg,index);
1859 push_delta_fw1 (`WSTATE+`CTL_OFFSET,WSTATE_reg,index);
1860 end
1861
1862 // Update Trap Stack now
1863 if (complete_fw[`TLU_INDEX]) begin // {
1864 push_delta_fw1 (`TL + `CTL_OFFSET,TL_reg,index);
1865 push_delta_fw1 (`TPC1 + `CTL_OFFSET, TPC1_wire, index);
1866 push_delta_fw1 (`TPC2 + `CTL_OFFSET, TPC2_wire, index);
1867 push_delta_fw1 (`TPC3 + `CTL_OFFSET, TPC3_wire, index);
1868 push_delta_fw1 (`TPC4 + `CTL_OFFSET, TPC4_wire, index);
1869 push_delta_fw1 (`TPC5 + `CTL_OFFSET, TPC5_wire, index);
1870 push_delta_fw1 (`TPC6 + `CTL_OFFSET, TPC6_wire, index);
1871 push_delta_fw1 (`TNPC1 + `CTL_OFFSET, TNPC1_wire, index);
1872 push_delta_fw1 (`TNPC2 + `CTL_OFFSET, TNPC2_wire, index);
1873 push_delta_fw1 (`TNPC3 + `CTL_OFFSET, TNPC3_wire, index);
1874 push_delta_fw1 (`TNPC4 + `CTL_OFFSET, TNPC4_wire, index);
1875 push_delta_fw1 (`TNPC5 + `CTL_OFFSET, TNPC5_wire, index);
1876 push_delta_fw1 (`TNPC6 + `CTL_OFFSET, TNPC6_wire, index);
1877 push_delta_fw1 (`TSTATE1 + `CTL_OFFSET, TSTATE1_wire, index);
1878 push_delta_fw1 (`TSTATE2 + `CTL_OFFSET, TSTATE2_wire, index);
1879 push_delta_fw1 (`TSTATE3 + `CTL_OFFSET, TSTATE3_wire, index);
1880 push_delta_fw1 (`TSTATE4 + `CTL_OFFSET, TSTATE4_wire, index);
1881 push_delta_fw1 (`TSTATE5 + `CTL_OFFSET, TSTATE5_wire, index);
1882 push_delta_fw1 (`TSTATE6 + `CTL_OFFSET, TSTATE6_wire, index);
1883 push_delta_fw1 (`HTSTATE1 + `CTL_OFFSET, HTSTATE1_wire, index);
1884 push_delta_fw1 (`HTSTATE2 + `CTL_OFFSET, HTSTATE2_wire, index);
1885 push_delta_fw1 (`HTSTATE3 + `CTL_OFFSET, HTSTATE3_wire, index);
1886 push_delta_fw1 (`HTSTATE4 + `CTL_OFFSET, HTSTATE4_wire, index);
1887 push_delta_fw1 (`HTSTATE5 + `CTL_OFFSET, HTSTATE5_wire, index);
1888 push_delta_fw1 (`HTSTATE6 + `CTL_OFFSET, HTSTATE6_wire, index);
1889 push_delta_fw1 (`TT1 + `CTL_OFFSET, TT1_wire, index);
1890 push_delta_fw1 (`TT2 + `CTL_OFFSET, TT2_wire, index);
1891 push_delta_fw1 (`TT3 + `CTL_OFFSET, TT3_wire, index);
1892 push_delta_fw1 (`TT4 + `CTL_OFFSET, TT4_wire, index);
1893 push_delta_fw1 (`TT5 + `CTL_OFFSET, TT5_wire, index);
1894 push_delta_fw1 (`TT6 + `CTL_OFFSET, TT6_wire, index);
1895 end //}
1896
1897 end // }
1898endtask
1899
1900//----------------------------------------------------------
1901// Stage FW2 of delta pipeline
1902task update_fw2;
1903
1904 integer i;
1905 reg [7:0] index;
1906 reg [38:0] frf_tmp;
1907
1908 begin // {
1909
1910 `ifndef EMUL_TL
1911 index = delta_fw1[`NEXT_INDEX];
1912
1913 //--------------------
1914 // Pipeline previous stage
1915 for (i=0; i<=delta_fw1[`NEXT_INDEX]; i=i+1) begin // {
1916 delta_fw2[i] <= delta_fw1[i];
1917 end
1918
1919 delta_fw2[`TIME_INDEX] <= $time;
1920 `else
1921 index = 0;
1922 `endif
1923
1924 // Update Registers that may change asynchronously
1925 // If sstep was already sent by another module,
1926 // don't capture until the next sstep
1927 if (complete_fw1 && !`NASTOP.sstep_early[mytnum]) begin // {
1928 if ((complete_fw1[`ASI_INDEX]|complete_fw1[`LSU_INDEX]) & asi_rdwr_hintp)
1929 push_delta_fw2 (`HINTP + `CTL_OFFSET,asi_updated_hintp,index);
1930 else
1931 push_delta_fw2 (`HINTP + `CTL_OFFSET,HINTP_reg,index);
1932 if ((complete_fw1[`ASI_INDEX]|complete_fw1[`LSU_INDEX]) & asi_rdwr_softint)
1933 push_delta_fw2 (`SOFTINT + `CTL_OFFSET,asi_updated_softint,index);
1934 else
1935 push_delta_fw2 (`SOFTINT + `CTL_OFFSET,rd_SOFTINT_reg,index);
1936 end // }
1937
1938 //-------------------
1939 // Update IRF0
1940`ifndef NAS_NO_IRFFRF
1941 if (complete_fw1[`IMUL_INDEX] |
1942 complete_fw1[`IDIV_INDEX]) begin // {
1943 if (mytid <= 3) begin // {
1944 for (i=0; i<=31; i=i+1) begin // {
1945 push_delta_fw2 (i,`IRF0_EXU0[(remap(i,oddwin)+irf_offset)],index);
1946 end // }
1947 end // }
1948 else begin // {
1949 for (i=0; i<=31; i=i+1) begin // {
1950 push_delta_fw2 (i,`IRF0_EXU1[(remap(i,oddwin)+irf_offset)],index);
1951 end // }
1952 end // }
1953 end // }
1954`endif
1955
1956 //--------------------
1957 // Update FRF0 - fdivs and Imuls use W2 port
1958`ifndef NAS_NO_IRFFRF
1959 if (complete_fw1[`IMUL_INDEX] |
1960 complete_fw1[`FDIV_INDEX] ) begin // {
1961 // IF W1 port is also being written, ignore that address
1962 for (i=0; i<=31; i=i+1) begin // {
1963 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
1964 frf_tmp = `FRF0_EVEN[(mytid*32)+i];
1965 push_delta_fw2 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
1966 end // }
1967 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
1968 frf_tmp = `FRF0_ODD[(mytid*32)+i];
1969 push_delta_fw2 (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
1970 end // }
1971 end //}
1972 end // }
1973`endif
1974
1975 if (complete_fw1[`FP_INDEX] |
1976 complete_fw1[`TLU_INDEX] |
1977 complete_fw1[`FDIV_INDEX]) begin
1978 push_delta_fw2 (`FSR+`CTL_OFFSET,FSR_wire,index);
1979 end
1980
1981 if (complete_fw1) begin
1982 push_delta_fw2 (`I_TAG_ACC+`CTL_OFFSET,itagacc_fw2,index);
1983 push_delta_fw2 (`D_TAG_ACC+`CTL_OFFSET,dtagacc_fw2,index);
1984 push_delta_fw2 (`DSFAR+`CTL_OFFSET,dsfar_fw2,index);
1985 end
1986
1987 end // }
1988endtask
1989
1990//----------------------------------------------------------
1991// Stage FW2 of delta pipeline - for signals that change FW+2 !!
1992task update_fw2_async;
1993
1994 integer i;
1995 reg [7:0] index;
1996 reg [2:0] dummy_fprs;
1997
1998 begin // {
1999
2000 `ifndef EMUL_TL
2001 index = delta_fw2[`NEXT_INDEX];
2002 `else
2003 index = 0;
2004 `endif
2005
2006 // Since FPRS for FPops may have been corrupted by o-o-o loads:
2007 // If fprs_fw2 is != fprs_reg & there are loads in the pipeline
2008 // then assume loads have already updated fprs.
2009 // In that case, create our own fprs_reg by using the valids and
2010 // skip_addr and copy of fprs for this op..
2011 if (complete_fw2[`FP_INDEX] && frf_w1_valid_fw2) begin // {
2012 // o-o-o load has changed fprs already - use dummy
2013 if ((fprs_fw2 != FPRS_reg) && (complete_fw1[`LSU_INDEX] |
2014 complete_fw[`LSU_INDEX] | complete_fb[`LSU_INDEX] |
2015 complete_fx5[`LSU_INDEX] )) begin // {
2016 dummy_fprs = read_prev(`FPRS + `CTL_OFFSET);
2017 dummy_fprs = dummy_fprs |
2018 {1'b0, frf_w1_skip_addr4_fw2, ~frf_w1_skip_addr4_fw2};
2019 push_delta_fw2_async (`FPRS + `CTL_OFFSET,dummy_fprs,index);
2020 end //}
2021 // o-o-o load has NOT changed fprs already - use it
2022 else begin // {
2023 push_delta_fw2_async (`FPRS + `CTL_OFFSET,FPRS_reg,index);
2024 end //}
2025 end //}
2026 // Load FPRS for loads/reads as prev|fprs_fb ..
2027 // since loads may only 'set' bits, not clear ...
2028 else if (complete_fw2[`LSU_INDEX]) begin // {
2029 dummy_fprs = read_prev(`FPRS + `CTL_OFFSET);
2030 dummy_fprs = dummy_fprs | fprs_fw1;
2031 push_delta_fw2_async (`FPRS +`CTL_OFFSET,dummy_fprs,index);
2032 end // }
2033 // Load FPRS for store ASI or FDIV
2034 // FDIV can update FPRS on w1 or w2,
2035 // but the pipe is stalled behind it so no o-o-o loads.
2036 else if ((complete_fw2[`ASI_INDEX]) ||
2037 (complete_fw2[`FDIV_INDEX])) begin // {
2038 push_delta_fw2_async (`FPRS + `CTL_OFFSET,FPRS_reg,index);
2039 end //}
2040
2041 end // }
2042endtask
2043
2044//----------------------------------------------------------
2045// Store latest values into delta
2046// Capture of next PC
2047task update_pc;
2048 reg [7:0] index;
2049 begin
2050 `ifndef EMUL_TL
2051 index = delta_prev[`NEXT_INDEX];
2052 `else
2053 index = 0;
2054 `endif
2055
2056 if (in_wmr & ~`SPC0.rst_wmr_protect) begin // {
2057 push_delta_prev_async ( `PC+`CTL_OFFSET,{16'b0,pc_fw2|1},index);
2058 in_wmr <= 0;
2059 end // }
2060 else
2061 push_delta_prev_async ( `PC+`CTL_OFFSET,{16'b0,pc_fw2},index);
2062 pc_last <= pc_fw2;
2063 cwp_last <= cwp_fw2;
2064 end
2065endtask
2066
2067//----------------------------------------------------------
2068//----------------------------------------------------------
2069// Compare with current state and capture if different
2070task push_delta_fx4;
2071
2072 input [7:0] id;
2073 input [63:0] act_value;
2074 inout [7:0] next;
2075 reg [2:0] win;
2076 reg [1:0] type;
2077
2078 begin // {
2079 if (act_value != read_prev(id)) begin // { // Diff vs prev
2080 calc_cwp(CWP_reg,id,win,type); // special case for 1st stage
2081 write_prev(id,act_value);
2082
2083 `ifndef EMUL_TL
2084 delta_fx4[next] <= {type,win,id,act_value};
2085 next = next+1;
2086 delta_fx4[next] <= 77'hx;
2087 delta_fx4[`NEXT_INDEX] <= next;
2088 if (`PARGS.axis_debug_on) begin
2089 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
2090 mytnum,PC_reg,id,type,win,act_value,$time);
2091 end
2092 `else
2093 if (`PARGS.axis_debug_on) begin
2094 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
2095 mytnum,PC_reg,id,type,win,act_value,$time);
2096 end
2097 `endif
2098 end //}
2099 end //}
2100
2101endtask
2102
2103//----------------------------------------------------------
2104// Compare with current state and capture if different
2105task push_delta_fx5;
2106
2107 input [7:0] id;
2108 input [63:0] act_value;
2109 inout [7:0] next;
2110 reg [2:0] win;
2111 reg [1:0] type;
2112
2113 begin // {
2114 if (act_value != read_prev(id)) begin // { // Diff vs prev
2115 `ifndef EMUL_TL
2116 calc_cwp(delta_fx4[`CWP_INDEX],id,win,type);
2117 write_prev(id,act_value);
2118 delta_fx5[next] <= {type,win,id,act_value};
2119 next = next+1;
2120 delta_fx5[next] <= 77'hx;
2121 delta_fx5[`NEXT_INDEX] <= next;
2122 if (`PARGS.axis_debug_on) begin
2123 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
2124 mytnum,pc_fx4,id,type,win,act_value,$time);
2125 end
2126 `else
2127 calc_cwp(cwp_fx4,id,win,type);
2128 if (`PARGS.axis_debug_on) begin
2129 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
2130 mytnum,pc_fx4,id,type,win,act_value,$time);
2131 end
2132 `endif
2133 end //}
2134 end //}
2135
2136endtask
2137
2138//----------------------------------------------------------
2139// Compare with current state and capture if different
2140task push_delta_fb;
2141
2142 input [7:0] id;
2143 input [63:0] act_value;
2144 inout [7:0] next;
2145 reg [2:0] win;
2146 reg [1:0] type;
2147
2148 begin // {
2149 if (act_value != read_prev(id)) begin // { // Diff vs prev
2150 `ifndef EMUL_TL
2151 calc_cwp(delta_fx5[`CWP_INDEX],id,win,type);
2152 write_prev(id,act_value);
2153 delta_fb[next] <= {type,win,id,act_value};
2154 next = next+1;
2155 delta_fb[next] <= 77'hx;
2156 delta_fb[`NEXT_INDEX] <= next;
2157 if (`PARGS.axis_debug_on) begin
2158 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
2159 mytnum,pc_fx5,id,type,win,act_value,$time);
2160 end
2161 `else
2162 calc_cwp(cwp_fx5,id,win,type);
2163 if (`PARGS.axis_debug_on) begin
2164 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
2165 mytnum,pc_fx5,id,type,win,act_value,$time);
2166 end
2167 `endif
2168 end //}
2169 end //}
2170
2171endtask
2172
2173//----------------------------------------------------------
2174// Compare with current state and capture if different
2175task push_delta_fw;
2176
2177 input [7:0] id;
2178 input [63:0] act_value;
2179 inout [7:0] next;
2180 reg [2:0] win;
2181 reg [1:0] type;
2182
2183 begin // {
2184 if (act_value != read_prev(id)) begin // { // Diff vs prev
2185
2186 `ifndef EMUL_TL
2187 calc_cwp(delta_fb[`CWP_INDEX],id,win,type);
2188 write_prev(id,act_value);
2189 delta_fw[next] <= {type,win,id,act_value};
2190 next = next+1;
2191 delta_fw[next] <= 77'hx;
2192 delta_fw[`NEXT_INDEX] <= next;
2193 if (`PARGS.axis_debug_on) begin
2194 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
2195 mytnum,pc_fb,id,type,win,act_value,$time);
2196 end
2197 `else
2198 calc_cwp(cwp_fb[`CWP_INDEX],id,win,type);
2199 if (`PARGS.axis_debug_on) begin
2200 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
2201 mytnum,pc_fb,id,type,win,act_value,$time);
2202 end
2203 `endif
2204 end //}
2205 end //}
2206
2207endtask
2208
2209//----------------------------------------------------------
2210// Compare with current state and capture if different
2211task push_delta_fw1;
2212
2213 input [7:0] id;
2214 input [63:0] act_value;
2215 inout [7:0] next;
2216 reg [2:0] win;
2217 reg [1:0] type;
2218
2219 begin // {
2220 if (act_value != read_prev(id)) begin // { // Diff vs prev
2221
2222 `ifndef EMUL_TL
2223 calc_cwp(delta_fw[`CWP_INDEX],id,win,type);
2224 write_prev(id,act_value);
2225 delta_fw1[next] <= {type,win,id,act_value};
2226 next = next+1;
2227 delta_fw1[next] <= 77'hx;
2228 delta_fw1[`NEXT_INDEX] <= next;
2229 if (`PARGS.axis_debug_on) begin
2230 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
2231 mytnum,pc_fw,id,type,win,act_value,$time);
2232 end
2233 `else
2234 calc_cwp(cwp_fw,id,win,type);
2235 if (`PARGS.axis_debug_on) begin
2236 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
2237 mytnum,pc_fw,id,type,win,act_value,$time);
2238 end
2239 `endif
2240 end //}
2241 end //}
2242
2243endtask
2244
2245//----------------------------------------------------------
2246// Compare with current state and capture if different
2247task push_delta_fw2;
2248
2249 input [7:0] id;
2250 input [63:0] act_value;
2251 inout [7:0] next;
2252 reg [2:0] win;
2253 reg [1:0] type;
2254
2255 begin // {
2256 if (act_value != read_prev(id)) begin // { // Diff vs prev
2257
2258 `ifndef EMUL_TL
2259 calc_cwp(delta_fw1[`CWP_INDEX],id,win,type);
2260 write_prev(id,act_value);
2261 delta_fw2[next] <= {type,win,id,act_value};
2262 next = next+1;
2263 delta_fw2[next] <= 77'hx;
2264 delta_fw2[`NEXT_INDEX] <= next;
2265 if (`PARGS.axis_debug_on) begin
2266 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
2267 mytnum,pc_fw1,id,type,win,act_value,$time);
2268 end
2269 `else
2270 calc_cwp(cwp_fw1,id,win,type);
2271 if (`PARGS.axis_debug_on) begin
2272 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
2273 mytnum,pc_fw1,id,type,win,act_value,$time);
2274 end
2275 `endif
2276 end //}
2277 end //}
2278
2279endtask
2280
2281//----------------------------------------------------------
2282// Compare with current state and capture if different
2283// This is for late changing registers
2284// Use blocking assignments.
2285task push_delta_fw2_async;
2286
2287 input [7:0] id;
2288 input [63:0] act_value;
2289 inout [7:0] next;
2290 reg [2:0] win;
2291 reg [1:0] type;
2292
2293 begin // {
2294 if (act_value != read_prev(id)) begin // { // Diff vs prev
2295
2296 `ifndef EMUL_TL
2297 calc_cwp(delta_fw2[`CWP_INDEX],id,win,type);
2298 write_prev_async(id,act_value);
2299 delta_fw2[next] = {type,win,id,act_value};
2300 next = next+1;
2301 delta_fw2[next] = 77'hx;
2302 delta_fw2[`NEXT_INDEX] = next;
2303 if (`PARGS.axis_debug_on) begin
2304 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
2305 mytnum,pc_fw1,id,type,win,act_value,$time);
2306 end
2307 `else
2308 calc_cwp(cwp_fw2,id,win,type);
2309 if (`PARGS.axis_debug_on) begin
2310 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
2311 mytnum,pc_fw1,id,type,win,act_value,$time);
2312 end
2313 `endif
2314 end //}
2315 end //}
2316
2317endtask
2318
2319
2320//----------------------------------------------------------
2321// Compare with current state and capture if different
2322// Use blocking assignments so that push_simics will work
2323task push_delta_prev_async;
2324
2325 input [7:0] id;
2326 input [63:0] act_value;
2327 inout [7:0] next;
2328 reg [2:0] win;
2329 reg [1:0] type;
2330
2331 begin // {
2332
2333 if (act_value != read_prev(id)) begin // { // Diff vs prev
2334
2335 `ifndef EMUL_TL
2336 calc_cwp(delta_prev[`CWP_INDEX],id,win,type);
2337 write_prev_async(id,act_value);
2338 delta_prev[next] = {type,win,id,act_value};
2339 next = next+1;
2340 delta_prev[next] = 77'hx;
2341 delta_prev[`NEXT_INDEX] = next;
2342 if (`PARGS.axis_debug_on) begin
2343 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
2344 mytnum,pc_last,id,type,win,act_value,$time);
2345 end
2346 `else
2347 if (`PARGS.axis_debug_on) begin
2348 calc_cwp(cwp_last,id,win,type);
2349 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
2350 mytnum,pc_last,id,type,win,act_value,$time);
2351 end
2352 `endif
2353 end //}
2354 end //}
2355
2356endtask
2357
2358//----------------------------------------------------------
2359// prev of delta pipeline
2360task update_prev;
2361 integer i;
2362
2363 begin // {
2364 `ifndef EMUL_TL
2365 //--------------------
2366 // Pipeline previous stage
2367 for (i=0; i<=delta_fw2[`NEXT_INDEX]; i=i+1) begin // {
2368 delta_prev[i] <= delta_fw2[i];
2369 end
2370 `endif
2371 end //}
2372
2373endtask
2374
2375//----------------------------------------------------------
2376//----------------------------------------------------------
2377// Sort delta list in register ID order, then push to simics
2378// Or print deltas if sas check disabled ..
2379task push_simics;
2380
2381integer i;
2382reg [7:0] act_type;
2383integer act_level;
2384reg [7:0] regnum;
2385reg [2:0] win;
2386reg [1:0] type;
2387reg [63:0] value;
2388reg [63:0] pc;
2389reg [63:0] time_fw2;
2390
2391 begin // {
2392
2393 `ifndef EMUL_TL
2394 `NASTOP.delta_cnt = 0;
2395 sort_delta;
2396
2397 //--------------------
2398 // Order of registers reported to simics must be:
2399 // Global 0-7 aka prev_reg[0:7]
2400 // Window 8-23 aka prev_reg[8:23]
2401 // Floating 0-63 aka prev_reg[200:263]
2402 // Control 32-143 aka prev_reg[32:143]
2403
2404 act_level = delta_prev[`GL_INDEX]; // GL
2405 time_fw2 = delta_prev[`TIME_INDEX]; // Finish time
2406
2407
2408 //--------------------
2409 for (i=`FIRST_INDEX; i<delta_prev[`NEXT_INDEX]; i=i+1) begin // {
2410 {type,win,regnum,value} = delta_prev[i];
2411
2412 if (regnum<=7) begin // {
2413 act_type = "G";
2414 if (`PARGS.nas_check_on) begin // {
2415 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
2416 act_level, regnum, value);
2417 end // }
2418 else if (`PARGS.show_delta_on) begin // {
2419 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
2420 end //}
2421 end // }
2422 else if (regnum<=23) begin // { %o0-%l7, %l0-%l7
2423 act_type = "W";
2424 if (`PARGS.nas_check_on) begin // {
2425 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
2426 win, regnum, value);
2427 end // }
2428 else if (`PARGS.show_delta_on) begin // {
2429 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
2430 end //}
2431 end // }
2432 else if (regnum<=31) begin // { %i0-%i7
2433 act_type = "W";
2434 if (`PARGS.nas_check_on) begin // {
2435 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
2436 win, (regnum-16), value);
2437 end // }
2438 else if (`PARGS.show_delta_on) begin // {
2439 `NASTOP.print_delta (mytnum,act_type,win,(regnum-16),value);
2440 end //}
2441 end // }
2442 else if (regnum<=(64+`FP_OFFSET)) begin // {
2443 act_type = "F";
2444 if (`PARGS.nas_check_on) begin // {
2445 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
2446 (regnum-`FP_OFFSET), value);
2447 end // }
2448 else if (`PARGS.show_delta_on) begin // {
2449 `NASTOP.print_delta (mytnum,act_type,win,(regnum-`FP_OFFSET),value);
2450 end //}
2451 end // }
2452 else if ((regnum>=(32+`CTL_OFFSET))&(regnum<=(143+`CTL_OFFSET))) begin // {
2453 act_type = "C";
2454 if (`PARGS.nas_check_on) begin // {
2455 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
2456 (regnum-`CTL_OFFSET), value);
2457 end //}
2458 else if (`PARGS.show_delta_on) begin // {
2459 `NASTOP.print_delta (mytnum,act_type,win,(regnum-`CTL_OFFSET),value);
2460 end //}
2461 end // }
2462 else begin // {
2463 `PR_ERROR ("nas", `ERROR, " - T%0d Bench problem. push_simics has bad regnum", mytnum);
2464 end // }
2465 end // }
2466
2467 //--------------------
2468 // Push Opcode
2469 act_type = "C";
2470 regnum = `OPCODE;
2471 value = delta_prev[`OPCODE_INDEX];
2472 if (`PARGS.nas_check_on) begin // {
2473 `ifdef OPCODE_COMPARE
2474 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
2475 regnum, value);
2476 `endif
2477 end //}
2478 else if (`PARGS.show_delta_on) begin // {
2479 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
2480 end //}
2481
2482
2483 //--------------------
2484 // Push End of Instruction Delimiter
2485 // The value field for this PUSH equals the PC for this instruction.
2486 // so that printing to the logfile works correctly.
2487 // prev_reg[`PC] = current instruction PC
2488 // delta_reg[`PC] = PC at end of current instruction
2489 act_type = "X";
2490 pc = delta_prev[`PC_INDEX];
2491 if (`PARGS.nas_check_on) begin // {
2492 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
2493 delta_fw2[`CWP_INDEX], `END_INSTR, pc);
2494 end // }
2495 else if (`PARGS.show_delta_on) begin // {
2496 `NASTOP.print_delta (mytnum,act_type,delta_fw2[`CWP_INDEX],`END_INSTR,0);
2497 end //}
2498 if (! `PARGS.nas_check_on) begin // {
2499 `PR_NORMAL ("nas", `NORMAL, "@%0d T%0d %h (Unchecked..)",
2500 $time, mytnum, {16'b0,pc});
2501 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
2502 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
2503 end //}
2504
2505 `else
2506 if (! `PARGS.nas_check_on) begin // {
2507 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
2508 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
2509 end //}
2510 `endif
2511 end // }
2512endtask
2513
2514
2515//----------------------------------------------------------
2516// Save current window to previous window, then copy new window to current window
2517task copy_win;
2518 input [2:0] new_cwp;
2519 input [2:0] old_cwp;
2520 integer i;
2521
2522 begin // {
2523
2524 // Save current window to Old window
2525 case (old_cwp)
2526 0: begin // {
2527 win0_reg8 = prev_reg8;
2528 win1_reg24 = prev_reg8;
2529 win0_reg9 = prev_reg9;
2530 win1_reg25 = prev_reg9;
2531 win0_reg10 = prev_reg10;
2532 win1_reg26 = prev_reg10;
2533 win0_reg11 = prev_reg11;
2534 win1_reg27 = prev_reg11;
2535 win0_reg12 = prev_reg12;
2536 win1_reg28 = prev_reg12;
2537 win0_reg13 = prev_reg13;
2538 win1_reg29 = prev_reg13;
2539 win0_reg14 = prev_reg14;
2540 win1_reg30 = prev_reg14;
2541 win0_reg15 = prev_reg15;
2542 win1_reg31 = prev_reg15;
2543 win0_reg16 = prev_reg16;
2544 win0_reg17 = prev_reg17;
2545 win0_reg18 = prev_reg18;
2546 win0_reg19 = prev_reg19;
2547 win0_reg20 = prev_reg20;
2548 win0_reg21 = prev_reg21;
2549 win0_reg22 = prev_reg22;
2550 win0_reg23 = prev_reg23;
2551 win0_reg24 = prev_reg24;
2552 win7_reg8 = prev_reg24;
2553 win0_reg25 = prev_reg25;
2554 win7_reg9 = prev_reg25;
2555 win0_reg26 = prev_reg26;
2556 win7_reg10 = prev_reg26;
2557 win0_reg27 = prev_reg27;
2558 win7_reg11 = prev_reg27;
2559 win0_reg28 = prev_reg28;
2560 win7_reg12 = prev_reg28;
2561 win0_reg29 = prev_reg29;
2562 win7_reg13 = prev_reg29;
2563 win0_reg30 = prev_reg30;
2564 win7_reg14 = prev_reg30;
2565 win0_reg31 = prev_reg31;
2566 win7_reg15 = prev_reg31;
2567 end // }
2568 1: begin // {
2569 win1_reg8 = prev_reg8;
2570 win2_reg24 = prev_reg8;
2571 win1_reg9 = prev_reg9;
2572 win2_reg25 = prev_reg9;
2573 win1_reg10 = prev_reg10;
2574 win2_reg26 = prev_reg10;
2575 win1_reg11 = prev_reg11;
2576 win2_reg27 = prev_reg11;
2577 win1_reg12 = prev_reg12;
2578 win2_reg28 = prev_reg12;
2579 win1_reg13 = prev_reg13;
2580 win2_reg29 = prev_reg13;
2581 win1_reg14 = prev_reg14;
2582 win2_reg30 = prev_reg14;
2583 win1_reg15 = prev_reg15;
2584 win2_reg31 = prev_reg15;
2585 win1_reg16 = prev_reg16;
2586 win1_reg17 = prev_reg17;
2587 win1_reg18 = prev_reg18;
2588 win1_reg19 = prev_reg19;
2589 win1_reg20 = prev_reg20;
2590 win1_reg21 = prev_reg21;
2591 win1_reg22 = prev_reg22;
2592 win1_reg23 = prev_reg23;
2593 win1_reg24 = prev_reg24;
2594 win0_reg8 = prev_reg24;
2595 win1_reg25 = prev_reg25;
2596 win0_reg9 = prev_reg25;
2597 win1_reg26 = prev_reg26;
2598 win0_reg10 = prev_reg26;
2599 win1_reg27 = prev_reg27;
2600 win0_reg11 = prev_reg27;
2601 win1_reg28 = prev_reg28;
2602 win0_reg12 = prev_reg28;
2603 win1_reg29 = prev_reg29;
2604 win0_reg13 = prev_reg29;
2605 win1_reg30 = prev_reg30;
2606 win0_reg14 = prev_reg30;
2607 win1_reg31 = prev_reg31;
2608 win0_reg15 = prev_reg31;
2609 end // }
2610 2: begin // {
2611 win2_reg8 = prev_reg8;
2612 win3_reg24 = prev_reg8;
2613 win2_reg9 = prev_reg9;
2614 win3_reg25 = prev_reg9;
2615 win2_reg10 = prev_reg10;
2616 win3_reg26 = prev_reg10;
2617 win2_reg11 = prev_reg11;
2618 win3_reg27 = prev_reg11;
2619 win2_reg12 = prev_reg12;
2620 win3_reg28 = prev_reg12;
2621 win2_reg13 = prev_reg13;
2622 win3_reg29 = prev_reg13;
2623 win2_reg14 = prev_reg14;
2624 win3_reg30 = prev_reg14;
2625 win2_reg15 = prev_reg15;
2626 win3_reg31 = prev_reg15;
2627 win2_reg16 = prev_reg16;
2628 win2_reg17 = prev_reg17;
2629 win2_reg18 = prev_reg18;
2630 win2_reg19 = prev_reg19;
2631 win2_reg20 = prev_reg20;
2632 win2_reg21 = prev_reg21;
2633 win2_reg22 = prev_reg22;
2634 win2_reg23 = prev_reg23;
2635 win2_reg24 = prev_reg24;
2636 win1_reg8 = prev_reg24;
2637 win2_reg25 = prev_reg25;
2638 win1_reg9 = prev_reg25;
2639 win2_reg26 = prev_reg26;
2640 win1_reg10 = prev_reg26;
2641 win2_reg27 = prev_reg27;
2642 win1_reg11 = prev_reg27;
2643 win2_reg28 = prev_reg28;
2644 win1_reg12 = prev_reg28;
2645 win2_reg29 = prev_reg29;
2646 win1_reg13 = prev_reg29;
2647 win2_reg30 = prev_reg30;
2648 win1_reg14 = prev_reg30;
2649 win2_reg31 = prev_reg31;
2650 win1_reg15 = prev_reg31;
2651 end // }
2652 3: begin // {
2653 win3_reg8 = prev_reg8;
2654 win4_reg24 = prev_reg8;
2655 win3_reg9 = prev_reg9;
2656 win4_reg25 = prev_reg9;
2657 win3_reg10 = prev_reg10;
2658 win4_reg26 = prev_reg10;
2659 win3_reg11 = prev_reg11;
2660 win4_reg27 = prev_reg11;
2661 win3_reg12 = prev_reg12;
2662 win4_reg28 = prev_reg12;
2663 win3_reg13 = prev_reg13;
2664 win4_reg29 = prev_reg13;
2665 win3_reg14 = prev_reg14;
2666 win4_reg30 = prev_reg14;
2667 win3_reg15 = prev_reg15;
2668 win4_reg31 = prev_reg15;
2669 win3_reg16 = prev_reg16;
2670 win3_reg17 = prev_reg17;
2671 win3_reg18 = prev_reg18;
2672 win3_reg19 = prev_reg19;
2673 win3_reg20 = prev_reg20;
2674 win3_reg21 = prev_reg21;
2675 win3_reg22 = prev_reg22;
2676 win3_reg23 = prev_reg23;
2677 win3_reg24 = prev_reg24;
2678 win2_reg8 = prev_reg24;
2679 win3_reg25 = prev_reg25;
2680 win2_reg9 = prev_reg25;
2681 win3_reg26 = prev_reg26;
2682 win2_reg10 = prev_reg26;
2683 win3_reg27 = prev_reg27;
2684 win2_reg11 = prev_reg27;
2685 win3_reg28 = prev_reg28;
2686 win2_reg12 = prev_reg28;
2687 win3_reg29 = prev_reg29;
2688 win2_reg13 = prev_reg29;
2689 win3_reg30 = prev_reg30;
2690 win2_reg14 = prev_reg30;
2691 win3_reg31 = prev_reg31;
2692 win2_reg15 = prev_reg31;
2693 end // }
2694 4: begin // {
2695 win4_reg8 = prev_reg8;
2696 win5_reg24 = prev_reg8;
2697 win4_reg9 = prev_reg9;
2698 win5_reg25 = prev_reg9;
2699 win4_reg10 = prev_reg10;
2700 win5_reg26 = prev_reg10;
2701 win4_reg11 = prev_reg11;
2702 win5_reg27 = prev_reg11;
2703 win4_reg12 = prev_reg12;
2704 win5_reg28 = prev_reg12;
2705 win4_reg13 = prev_reg13;
2706 win5_reg29 = prev_reg13;
2707 win4_reg14 = prev_reg14;
2708 win5_reg30 = prev_reg14;
2709 win4_reg15 = prev_reg15;
2710 win5_reg31 = prev_reg15;
2711 win4_reg16 = prev_reg16;
2712 win4_reg17 = prev_reg17;
2713 win4_reg18 = prev_reg18;
2714 win4_reg19 = prev_reg19;
2715 win4_reg20 = prev_reg20;
2716 win4_reg21 = prev_reg21;
2717 win4_reg22 = prev_reg22;
2718 win4_reg23 = prev_reg23;
2719 win4_reg24 = prev_reg24;
2720 win3_reg8 = prev_reg24;
2721 win4_reg25 = prev_reg25;
2722 win3_reg9 = prev_reg25;
2723 win4_reg26 = prev_reg26;
2724 win3_reg10 = prev_reg26;
2725 win4_reg27 = prev_reg27;
2726 win3_reg11 = prev_reg27;
2727 win4_reg28 = prev_reg28;
2728 win3_reg12 = prev_reg28;
2729 win4_reg29 = prev_reg29;
2730 win3_reg13 = prev_reg29;
2731 win4_reg30 = prev_reg30;
2732 win3_reg14 = prev_reg30;
2733 win4_reg31 = prev_reg31;
2734 win3_reg15 = prev_reg31;
2735 end // }
2736 5: begin // {
2737 win5_reg8 = prev_reg8;
2738 win6_reg24 = prev_reg8;
2739 win5_reg9 = prev_reg9;
2740 win6_reg25 = prev_reg9;
2741 win5_reg10 = prev_reg10;
2742 win6_reg26 = prev_reg10;
2743 win5_reg11 = prev_reg11;
2744 win6_reg27 = prev_reg11;
2745 win5_reg12 = prev_reg12;
2746 win6_reg28 = prev_reg12;
2747 win5_reg13 = prev_reg13;
2748 win6_reg29 = prev_reg13;
2749 win5_reg14 = prev_reg14;
2750 win6_reg30 = prev_reg14;
2751 win5_reg15 = prev_reg15;
2752 win6_reg31 = prev_reg15;
2753 win5_reg16 = prev_reg16;
2754 win5_reg17 = prev_reg17;
2755 win5_reg18 = prev_reg18;
2756 win5_reg19 = prev_reg19;
2757 win5_reg20 = prev_reg20;
2758 win5_reg21 = prev_reg21;
2759 win5_reg22 = prev_reg22;
2760 win5_reg23 = prev_reg23;
2761 win5_reg24 = prev_reg24;
2762 win4_reg8 = prev_reg24;
2763 win5_reg25 = prev_reg25;
2764 win4_reg9 = prev_reg25;
2765 win5_reg26 = prev_reg26;
2766 win4_reg10 = prev_reg26;
2767 win5_reg27 = prev_reg27;
2768 win4_reg11 = prev_reg27;
2769 win5_reg28 = prev_reg28;
2770 win4_reg12 = prev_reg28;
2771 win5_reg29 = prev_reg29;
2772 win4_reg13 = prev_reg29;
2773 win5_reg30 = prev_reg30;
2774 win4_reg14 = prev_reg30;
2775 win5_reg31 = prev_reg31;
2776 win4_reg15 = prev_reg31;
2777 end // }
2778 6: begin // {
2779 win6_reg8 = prev_reg8;
2780 win7_reg24 = prev_reg8;
2781 win6_reg9 = prev_reg9;
2782 win7_reg25 = prev_reg9;
2783 win6_reg10 = prev_reg10;
2784 win7_reg26 = prev_reg10;
2785 win6_reg11 = prev_reg11;
2786 win7_reg27 = prev_reg11;
2787 win6_reg12 = prev_reg12;
2788 win7_reg28 = prev_reg12;
2789 win6_reg13 = prev_reg13;
2790 win7_reg29 = prev_reg13;
2791 win6_reg14 = prev_reg14;
2792 win7_reg30 = prev_reg14;
2793 win6_reg15 = prev_reg15;
2794 win7_reg31 = prev_reg15;
2795 win6_reg16 = prev_reg16;
2796 win6_reg17 = prev_reg17;
2797 win6_reg18 = prev_reg18;
2798 win6_reg19 = prev_reg19;
2799 win6_reg20 = prev_reg20;
2800 win6_reg21 = prev_reg21;
2801 win6_reg22 = prev_reg22;
2802 win6_reg23 = prev_reg23;
2803 win6_reg24 = prev_reg24;
2804 win5_reg8 = prev_reg24;
2805 win6_reg25 = prev_reg25;
2806 win5_reg9 = prev_reg25;
2807 win6_reg26 = prev_reg26;
2808 win5_reg10 = prev_reg26;
2809 win6_reg27 = prev_reg27;
2810 win5_reg11 = prev_reg27;
2811 win6_reg28 = prev_reg28;
2812 win5_reg12 = prev_reg28;
2813 win6_reg29 = prev_reg29;
2814 win5_reg13 = prev_reg29;
2815 win6_reg30 = prev_reg30;
2816 win5_reg14 = prev_reg30;
2817 win6_reg31 = prev_reg31;
2818 win5_reg15 = prev_reg31;
2819 end // }
2820 7: begin // {
2821 win7_reg8 = prev_reg8;
2822 win0_reg24 = prev_reg8;
2823 win7_reg9 = prev_reg9;
2824 win0_reg25 = prev_reg9;
2825 win7_reg10 = prev_reg10;
2826 win0_reg26 = prev_reg10;
2827 win7_reg11 = prev_reg11;
2828 win0_reg27 = prev_reg11;
2829 win7_reg12 = prev_reg12;
2830 win0_reg28 = prev_reg12;
2831 win7_reg13 = prev_reg13;
2832 win0_reg29 = prev_reg13;
2833 win7_reg14 = prev_reg14;
2834 win0_reg30 = prev_reg14;
2835 win7_reg15 = prev_reg15;
2836 win0_reg31 = prev_reg15;
2837 win7_reg16 = prev_reg16;
2838 win7_reg17 = prev_reg17;
2839 win7_reg18 = prev_reg18;
2840 win7_reg19 = prev_reg19;
2841 win7_reg20 = prev_reg20;
2842 win7_reg21 = prev_reg21;
2843 win7_reg22 = prev_reg22;
2844 win7_reg23 = prev_reg23;
2845 win7_reg24 = prev_reg24;
2846 win6_reg8 = prev_reg24;
2847 win7_reg25 = prev_reg25;
2848 win6_reg9 = prev_reg25;
2849 win7_reg26 = prev_reg26;
2850 win6_reg10 = prev_reg26;
2851 win7_reg27 = prev_reg27;
2852 win6_reg11 = prev_reg27;
2853 win7_reg28 = prev_reg28;
2854 win6_reg12 = prev_reg28;
2855 win7_reg29 = prev_reg29;
2856 win6_reg13 = prev_reg29;
2857 win7_reg30 = prev_reg30;
2858 win6_reg14 = prev_reg30;
2859 win7_reg31 = prev_reg31;
2860 win6_reg15 = prev_reg31;
2861 end // }
2862
2863 endcase
2864
2865 // Copy New window to current window
2866 case (new_cwp)
2867 0: begin // {
2868 prev_reg8 = win0_reg8;
2869 prev_reg9 = win0_reg9;
2870 prev_reg10 = win0_reg10;
2871 prev_reg11 = win0_reg11;
2872 prev_reg12 = win0_reg12;
2873 prev_reg13 = win0_reg13;
2874 prev_reg14 = win0_reg14;
2875 prev_reg15 = win0_reg15;
2876 prev_reg16 = win0_reg16;
2877 prev_reg17 = win0_reg17;
2878 prev_reg18 = win0_reg18;
2879 prev_reg19 = win0_reg19;
2880 prev_reg20 = win0_reg20;
2881 prev_reg21 = win0_reg21;
2882 prev_reg22 = win0_reg22;
2883 prev_reg23 = win0_reg23;
2884 prev_reg24 = win0_reg24;
2885 prev_reg25 = win0_reg25;
2886 prev_reg26 = win0_reg26;
2887 prev_reg27 = win0_reg27;
2888 prev_reg28 = win0_reg28;
2889 prev_reg29 = win0_reg29;
2890 prev_reg30 = win0_reg30;
2891 prev_reg31 = win0_reg31;
2892 end // }
2893
2894 1: begin // {
2895 prev_reg8 = win1_reg8;
2896 prev_reg9 = win1_reg9;
2897 prev_reg10 = win1_reg10;
2898 prev_reg11 = win1_reg11;
2899 prev_reg12 = win1_reg12;
2900 prev_reg13 = win1_reg13;
2901 prev_reg14 = win1_reg14;
2902 prev_reg15 = win1_reg15;
2903 prev_reg16 = win1_reg16;
2904 prev_reg17 = win1_reg17;
2905 prev_reg18 = win1_reg18;
2906 prev_reg19 = win1_reg19;
2907 prev_reg20 = win1_reg20;
2908 prev_reg21 = win1_reg21;
2909 prev_reg22 = win1_reg22;
2910 prev_reg23 = win1_reg23;
2911 prev_reg24 = win1_reg24;
2912 prev_reg25 = win1_reg25;
2913 prev_reg26 = win1_reg26;
2914 prev_reg27 = win1_reg27;
2915 prev_reg28 = win1_reg28;
2916 prev_reg29 = win1_reg29;
2917 prev_reg30 = win1_reg30;
2918 prev_reg31 = win1_reg31;
2919 end // }
2920
2921 2: begin // {
2922 prev_reg8 = win2_reg8;
2923 prev_reg9 = win2_reg9;
2924 prev_reg10 = win2_reg10;
2925 prev_reg11 = win2_reg11;
2926 prev_reg12 = win2_reg12;
2927 prev_reg13 = win2_reg13;
2928 prev_reg14 = win2_reg14;
2929 prev_reg15 = win2_reg15;
2930 prev_reg16 = win2_reg16;
2931 prev_reg17 = win2_reg17;
2932 prev_reg18 = win2_reg18;
2933 prev_reg19 = win2_reg19;
2934 prev_reg20 = win2_reg20;
2935 prev_reg21 = win2_reg21;
2936 prev_reg22 = win2_reg22;
2937 prev_reg23 = win2_reg23;
2938 prev_reg24 = win2_reg24;
2939 prev_reg25 = win2_reg25;
2940 prev_reg26 = win2_reg26;
2941 prev_reg27 = win2_reg27;
2942 prev_reg28 = win2_reg28;
2943 prev_reg29 = win2_reg29;
2944 prev_reg30 = win2_reg30;
2945 prev_reg31 = win2_reg31;
2946 end // }
2947
2948 3: begin // {
2949 prev_reg8 = win3_reg8;
2950 prev_reg9 = win3_reg9;
2951 prev_reg10 = win3_reg10;
2952 prev_reg11 = win3_reg11;
2953 prev_reg12 = win3_reg12;
2954 prev_reg13 = win3_reg13;
2955 prev_reg14 = win3_reg14;
2956 prev_reg15 = win3_reg15;
2957 prev_reg16 = win3_reg16;
2958 prev_reg17 = win3_reg17;
2959 prev_reg18 = win3_reg18;
2960 prev_reg19 = win3_reg19;
2961 prev_reg20 = win3_reg20;
2962 prev_reg21 = win3_reg21;
2963 prev_reg22 = win3_reg22;
2964 prev_reg23 = win3_reg23;
2965 prev_reg24 = win3_reg24;
2966 prev_reg25 = win3_reg25;
2967 prev_reg26 = win3_reg26;
2968 prev_reg27 = win3_reg27;
2969 prev_reg28 = win3_reg28;
2970 prev_reg29 = win3_reg29;
2971 prev_reg30 = win3_reg30;
2972 prev_reg31 = win3_reg31;
2973 end // }
2974
2975 4: begin // {
2976 prev_reg8 = win4_reg8;
2977 prev_reg9 = win4_reg9;
2978 prev_reg10 = win4_reg10;
2979 prev_reg11 = win4_reg11;
2980 prev_reg12 = win4_reg12;
2981 prev_reg13 = win4_reg13;
2982 prev_reg14 = win4_reg14;
2983 prev_reg15 = win4_reg15;
2984 prev_reg16 = win4_reg16;
2985 prev_reg17 = win4_reg17;
2986 prev_reg18 = win4_reg18;
2987 prev_reg19 = win4_reg19;
2988 prev_reg20 = win4_reg20;
2989 prev_reg21 = win4_reg21;
2990 prev_reg22 = win4_reg22;
2991 prev_reg23 = win4_reg23;
2992 prev_reg24 = win4_reg24;
2993 prev_reg25 = win4_reg25;
2994 prev_reg26 = win4_reg26;
2995 prev_reg27 = win4_reg27;
2996 prev_reg28 = win4_reg28;
2997 prev_reg29 = win4_reg29;
2998 prev_reg30 = win4_reg30;
2999 prev_reg31 = win4_reg31;
3000 end // }
3001
3002 5: begin // {
3003 prev_reg8 = win5_reg8;
3004 prev_reg9 = win5_reg9;
3005 prev_reg10 = win5_reg10;
3006 prev_reg11 = win5_reg11;
3007 prev_reg12 = win5_reg12;
3008 prev_reg13 = win5_reg13;
3009 prev_reg14 = win5_reg14;
3010 prev_reg15 = win5_reg15;
3011 prev_reg16 = win5_reg16;
3012 prev_reg17 = win5_reg17;
3013 prev_reg18 = win5_reg18;
3014 prev_reg19 = win5_reg19;
3015 prev_reg20 = win5_reg20;
3016 prev_reg21 = win5_reg21;
3017 prev_reg22 = win5_reg22;
3018 prev_reg23 = win5_reg23;
3019 prev_reg24 = win5_reg24;
3020 prev_reg25 = win5_reg25;
3021 prev_reg26 = win5_reg26;
3022 prev_reg27 = win5_reg27;
3023 prev_reg28 = win5_reg28;
3024 prev_reg29 = win5_reg29;
3025 prev_reg30 = win5_reg30;
3026 prev_reg31 = win5_reg31;
3027 end // }
3028
3029 6: begin // {
3030 prev_reg8 = win6_reg8;
3031 prev_reg9 = win6_reg9;
3032 prev_reg10 = win6_reg10;
3033 prev_reg11 = win6_reg11;
3034 prev_reg12 = win6_reg12;
3035 prev_reg13 = win6_reg13;
3036 prev_reg14 = win6_reg14;
3037 prev_reg15 = win6_reg15;
3038 prev_reg16 = win6_reg16;
3039 prev_reg17 = win6_reg17;
3040 prev_reg18 = win6_reg18;
3041 prev_reg19 = win6_reg19;
3042 prev_reg20 = win6_reg20;
3043 prev_reg21 = win6_reg21;
3044 prev_reg22 = win6_reg22;
3045 prev_reg23 = win6_reg23;
3046 prev_reg24 = win6_reg24;
3047 prev_reg25 = win6_reg25;
3048 prev_reg26 = win6_reg26;
3049 prev_reg27 = win6_reg27;
3050 prev_reg28 = win6_reg28;
3051 prev_reg29 = win6_reg29;
3052 prev_reg30 = win6_reg30;
3053 prev_reg31 = win6_reg31;
3054 end // }
3055
3056 7: begin // {
3057 prev_reg8 = win7_reg8;
3058 prev_reg9 = win7_reg9;
3059 prev_reg10 = win7_reg10;
3060 prev_reg11 = win7_reg11;
3061 prev_reg12 = win7_reg12;
3062 prev_reg13 = win7_reg13;
3063 prev_reg14 = win7_reg14;
3064 prev_reg15 = win7_reg15;
3065 prev_reg16 = win7_reg16;
3066 prev_reg17 = win7_reg17;
3067 prev_reg18 = win7_reg18;
3068 prev_reg19 = win7_reg19;
3069 prev_reg20 = win7_reg20;
3070 prev_reg21 = win7_reg21;
3071 prev_reg22 = win7_reg22;
3072 prev_reg23 = win7_reg23;
3073 prev_reg24 = win7_reg24;
3074 prev_reg25 = win7_reg25;
3075 prev_reg26 = win7_reg26;
3076 prev_reg27 = win7_reg27;
3077 prev_reg28 = win7_reg28;
3078 prev_reg29 = win7_reg29;
3079 prev_reg30 = win7_reg30;
3080 prev_reg31 = win7_reg31;
3081 end // }
3082
3083 endcase
3084 end // }
3085endtask
3086
3087//----------------------------------------------------------
3088// Save current global to previous global, then copy new global to current global
3089task copy_global;
3090 input [2:0] new_gl;
3091 input [2:0] old_gl;
3092 integer i;
3093
3094 begin // {
3095
3096 // Save current global to Old global
3097 case (old_gl)
3098 0: begin // {
3099 gl0_reg0 = prev_reg0;
3100 gl0_reg1 = prev_reg1;
3101 gl0_reg2 = prev_reg2;
3102 gl0_reg3 = prev_reg3;
3103 gl0_reg4 = prev_reg4;
3104 gl0_reg5 = prev_reg5;
3105 gl0_reg6 = prev_reg6;
3106 gl0_reg7 = prev_reg7;
3107 end // }
3108 1: begin // {
3109 gl1_reg0 = prev_reg0;
3110 gl1_reg1 = prev_reg1;
3111 gl1_reg2 = prev_reg2;
3112 gl1_reg3 = prev_reg3;
3113 gl1_reg4 = prev_reg4;
3114 gl1_reg5 = prev_reg5;
3115 gl1_reg6 = prev_reg6;
3116 gl1_reg7 = prev_reg7;
3117 end // }
3118 2: begin // {
3119 gl2_reg0 = prev_reg0;
3120 gl2_reg1 = prev_reg1;
3121 gl2_reg2 = prev_reg2;
3122 gl2_reg3 = prev_reg3;
3123 gl2_reg4 = prev_reg4;
3124 gl2_reg5 = prev_reg5;
3125 gl2_reg6 = prev_reg6;
3126 gl2_reg7 = prev_reg7;
3127 end // }
3128 3: begin // {
3129 gl3_reg0 = prev_reg0;
3130 gl3_reg1 = prev_reg1;
3131 gl3_reg2 = prev_reg2;
3132 gl3_reg3 = prev_reg3;
3133 gl3_reg4 = prev_reg4;
3134 gl3_reg5 = prev_reg5;
3135 gl3_reg6 = prev_reg6;
3136 gl3_reg7 = prev_reg7;
3137 end // }
3138 endcase
3139
3140 // Copy New global current global
3141 case (new_gl)
3142 0: begin // {
3143 prev_reg0 = gl0_reg0;
3144 prev_reg1 = gl0_reg1;
3145 prev_reg2 = gl0_reg2;
3146 prev_reg3 = gl0_reg3;
3147 prev_reg4 = gl0_reg4;
3148 prev_reg5 = gl0_reg5;
3149 prev_reg6 = gl0_reg6;
3150 prev_reg7 = gl0_reg7;
3151 end // }
3152
3153 1: begin // {
3154 prev_reg0 = gl1_reg0;
3155 prev_reg1 = gl1_reg1;
3156 prev_reg2 = gl1_reg2;
3157 prev_reg3 = gl1_reg3;
3158 prev_reg4 = gl1_reg4;
3159 prev_reg5 = gl1_reg5;
3160 prev_reg6 = gl1_reg6;
3161 prev_reg7 = gl1_reg7;
3162 end // }
3163
3164 2: begin // {
3165 prev_reg0 = gl2_reg0;
3166 prev_reg1 = gl2_reg1;
3167 prev_reg2 = gl2_reg2;
3168 prev_reg3 = gl2_reg3;
3169 prev_reg4 = gl2_reg4;
3170 prev_reg5 = gl2_reg5;
3171 prev_reg6 = gl2_reg6;
3172 prev_reg7 = gl2_reg7;
3173 end // }
3174
3175 3: begin // {
3176 prev_reg0 = gl3_reg0;
3177 prev_reg1 = gl3_reg1;
3178 prev_reg2 = gl3_reg2;
3179 prev_reg3 = gl3_reg3;
3180 prev_reg4 = gl3_reg4;
3181 prev_reg5 = gl3_reg5;
3182 prev_reg6 = gl3_reg6;
3183 prev_reg7 = gl3_reg7;
3184 end // }
3185
3186 endcase
3187 end // }
3188endtask
3189
3190//----------------------------------------------------------
3191// Return window number and register type based on cwp and regnum as input
3192task calc_cwp;
3193 input [2:0] cwp;
3194 input [7:0] id;
3195 output [2:0] win;
3196 output [1:0] type;
3197
3198 begin // {
3199 if (id<=7) begin // {
3200 type = `G_TYPE;
3201 win = cwp;
3202 end // }
3203 else if (id<=23) begin // {
3204 type = `W_TYPE;
3205 win = cwp;
3206 end // }
3207 else if (id<=31) begin // {
3208 type = `W_TYPE;
3209 if (cwp == 0) begin // {
3210 win = 7;
3211 end // }
3212 else begin // {
3213 win = cwp-1;
3214 end // }
3215 end // }
3216 else if (id<=(64+`FP_OFFSET)) begin // {
3217 type = `F_TYPE;
3218 win = cwp;
3219 end // }
3220 else begin // {
3221 type = `C_TYPE;
3222 win = cwp;
3223 end // }
3224 end // }
3225endtask
3226
3227//----------------------------------------------------------
3228// Check for bad signal values
3229task check_values;
3230
3231 begin // {
3232
3233 //--------------------
3234 casex (complete_fw2)
3235 8'b00000000,
3236 8'b00000001,
3237 8'b00000010,
3238 8'b00000100,
3239 8'b00001000,
3240 8'b00010000,
3241 8'b00100000,
3242 8'b01000000,
3243 8'b10000000: ; // good value
3244 default: begin // {
3245 `PR_ERROR ("nas", `ERROR, " - T%0d More than one instruction retired in a single cycle for this thread.",
3246 mytnum);
3247 $write("\t\t\t\t Instructions - ");
3248 if (complete_fw2[`EXU_INDEX]) $write("EXU op, ");
3249 if (complete_fw2[`FP_INDEX]) $write("FP op, ");
3250 if (complete_fw2[`LSU_INDEX]) $write("LSU op, ");
3251 if (complete_fw2[`IMUL_INDEX]) $write("IMUL op, ");
3252 if (complete_fw2[`IDIV_INDEX]) $write("IDIV op, ");
3253 if (complete_fw2[`FDIV_INDEX]) $write("FDIV op, ");
3254 if (complete_fw2[`TLU_INDEX]) $write("TLU op, ");
3255 if (complete_fw2[`ASI_INDEX]) $write("ASI op, ");
3256 $write(" complete_fw2 = %b \n",complete_fw2);
3257 $display("");
3258 end // }
3259 endcase
3260
3261 // This check only works if diags are written properly.
3262 // For example, if a diag writes to one of these registers using wrpr,
3263 // then this check must be disabled using plusarg.
3264 //--------------------
3265 // CANSAVE + CANRESTORE + OTHERWIN = NWINDOWS-2 (per Sparc V9)
3266 if (`PARGS.win_check_on) begin // {
3267 if (complete_fw2 & ((CANSAVE_reg + CANRESTORE_reg + OTHERWIN_reg) != 6)) begin // {
3268 `PR_ERROR ("nas", `ERROR, "ERROR - T%0d Bad Values for window registers.", mytnum);
3269 `PR_ERROR ("nas", `ERROR, "- CANSAVE = %0d CANRESTORE = %0d OTHERWIN = %0d",
3270 CANSAVE_reg, CANRESTORE_reg,OTHERWIN_reg);
3271 end // }
3272 end // }
3273
3274 end // }
3275endtask
3276
3277//----------------------------------------------------------
3278//----------------------------------------------------------
3279`ifndef EMUL_TL
3280task sort_delta;
3281 reg [5:0] i, j, last;
3282 reg [`DELTA_WIDTH:0] temp1, temp2;
3283 begin // {
3284 last = delta_prev[`NEXT_INDEX]-1;
3285 for (i=`FIRST_INDEX; i <= last; i=i+1) begin // {
3286 for (j=`FIRST_INDEX; j < last; j=j+1) begin // {
3287 temp1 = delta_prev[j]; temp2 = delta_prev[j+1];
3288 if (temp1[76:64] > temp2[76:64]) begin // {
3289 delta_prev[j] = temp2; delta_prev [j+1] = temp1;
3290 end //}
3291 end // }
3292 end // }
3293 end // }
3294endtask
3295`endif
3296
3297//----------------------------------------------------------
3298//----------------------------------------------------------
3299// Print one entry in delta_* array
3300`ifndef EMUL_TL
3301task print_entry;
3302
3303 input [`DELTA_WIDTH:0] delta_entry;
3304
3305 reg [1:0] type;
3306 reg [2:0] win;
3307 reg [7:0] id;
3308 reg [63:0] act_value;
3309 reg [(20*8)-1:0] type_str;
3310 reg [(20*8)-1:0] regname;
3311
3312 begin // {
3313 {type,win,id,act_value} = delta_entry;
3314
3315 case (type)
3316 `G_TYPE: begin
3317 type_str="G";
3318 end
3319 `W_TYPE: begin
3320 type_str="W";
3321 end
3322 `F_TYPE: begin
3323 type_str="F";
3324 id = id - `FP_OFFSET;
3325 end
3326 `C_TYPE: begin
3327 type_str="C";
3328 id = id - `CTL_OFFSET;
3329 end
3330 endcase
3331
3332 `NASTOP.get_regname(mytnum,type_str,win,id,regname);
3333 `PR_NORMAL ("nas", `NORMAL, "type=%0s win=%0d RegID=%0d %0s=%h",
3334 type_str,win,id,regname,act_value);
3335 end //}
3336
3337endtask
3338`endif
3339
3340//----------------------------------------------------------
3341// Write Value to prev_reg using id as index (non-blocking)
3342task write_prev;
3343 input [7:0] id;
3344 input [63:0] value;
3345
3346 begin // {
3347
3348 case (id)
3349 8'd0: prev_reg0 <= value;
3350 8'd1: prev_reg1 <= value;
3351 8'd2: prev_reg2 <= value;
3352 8'd3: prev_reg3 <= value;
3353 8'd4: prev_reg4 <= value;
3354 8'd5: prev_reg5 <= value;
3355 8'd6: prev_reg6 <= value;
3356 8'd7: prev_reg7 <= value;
3357 8'd8: prev_reg8 <= value;
3358 8'd9: prev_reg9 <= value;
3359 8'd10: prev_reg10 <= value;
3360 8'd11: prev_reg11 <= value;
3361 8'd12: prev_reg12 <= value;
3362 8'd13: prev_reg13 <= value;
3363 8'd14: prev_reg14 <= value;
3364 8'd15: prev_reg15 <= value;
3365 8'd16: prev_reg16 <= value;
3366 8'd17: prev_reg17 <= value;
3367 8'd18: prev_reg18 <= value;
3368 8'd19: prev_reg19 <= value;
3369 8'd20: prev_reg20 <= value;
3370 8'd21: prev_reg21 <= value;
3371 8'd22: prev_reg22 <= value;
3372 8'd23: prev_reg23 <= value;
3373 8'd24: prev_reg24 <= value;
3374 8'd25: prev_reg25 <= value;
3375 8'd26: prev_reg26 <= value;
3376 8'd27: prev_reg27 <= value;
3377 8'd28: prev_reg28 <= value;
3378 8'd29: prev_reg29 <= value;
3379 8'd30: prev_reg30 <= value;
3380 8'd31: prev_reg31 <= value;
3381 8'd32: prev_reg32 <= value;
3382 8'd33: prev_reg33 <= value;
3383 8'd34: prev_reg34 <= value;
3384 8'd35: prev_reg35 <= value;
3385 8'd36: prev_reg36 <= value;
3386 8'd37: prev_reg37 <= value;
3387 8'd38: prev_reg38 <= value;
3388 8'd39: prev_reg39 <= value;
3389 8'd40: prev_reg40 <= value;
3390 8'd41: prev_reg41 <= value;
3391 8'd42: prev_reg42 <= value;
3392 8'd43: prev_reg43 <= value;
3393 8'd44: prev_reg44 <= value;
3394 8'd45: prev_reg45 <= value;
3395 8'd46: prev_reg46 <= value;
3396 8'd47: prev_reg47 <= value;
3397 8'd48: prev_reg48 <= value;
3398 8'd49: prev_reg49 <= value;
3399 8'd50: prev_reg50 <= value;
3400 8'd51: prev_reg51 <= value;
3401 8'd52: prev_reg52 <= value;
3402 8'd53: prev_reg53 <= value;
3403 8'd54: prev_reg54 <= value;
3404 8'd55: prev_reg55 <= value;
3405 8'd56: prev_reg56 <= value;
3406 8'd57: prev_reg57 <= value;
3407 8'd58: prev_reg58 <= value;
3408 8'd59: prev_reg59 <= value;
3409 8'd60: prev_reg60 <= value;
3410 8'd61: prev_reg61 <= value;
3411 8'd62: prev_reg62 <= value;
3412 8'd63: prev_reg63 <= value;
3413 8'd64: prev_reg64 <= value;
3414 8'd65: prev_reg65 <= value;
3415 8'd66: prev_reg66 <= value;
3416 8'd67: prev_reg67 <= value;
3417 8'd68: prev_reg68 <= value;
3418 8'd69: prev_reg69 <= value;
3419 8'd70: prev_reg70 <= value;
3420 8'd71: prev_reg71 <= value;
3421 8'd72: prev_reg72 <= value;
3422 8'd73: prev_reg73 <= value;
3423 8'd74: prev_reg74 <= value;
3424 8'd75: prev_reg75 <= value;
3425 8'd76: prev_reg76 <= value;
3426 8'd77: prev_reg77 <= value;
3427 8'd78: prev_reg78 <= value;
3428 8'd79: prev_reg79 <= value;
3429 8'd80: prev_reg80 <= value;
3430 8'd81: prev_reg81 <= value;
3431 8'd82: prev_reg82 <= value;
3432 8'd83: prev_reg83 <= value;
3433 8'd84: prev_reg84 <= value;
3434 8'd85: prev_reg85 <= value;
3435 8'd86: prev_reg86 <= value;
3436 8'd87: prev_reg87 <= value;
3437 8'd88: prev_reg88 <= value;
3438 8'd89: prev_reg89 <= value;
3439 8'd90: prev_reg90 <= value;
3440 8'd91: prev_reg91 <= value;
3441 8'd92: prev_reg92 <= value;
3442 8'd93: prev_reg93 <= value;
3443 8'd94: prev_reg94 <= value;
3444 8'd95: prev_reg95 <= value;
3445 8'd96: prev_reg96 <= value;
3446 8'd97: prev_reg97 <= value;
3447 8'd98: prev_reg98 <= value;
3448 8'd99: prev_reg99 <= value;
3449 8'd100: prev_reg100 <= value;
3450 8'd101: prev_reg101 <= value;
3451 8'd102: prev_reg102 <= value;
3452 8'd103: prev_reg103 <= value;
3453 8'd104: prev_reg104 <= value;
3454 8'd105: prev_reg105 <= value;
3455 8'd106: prev_reg106 <= value;
3456 8'd107: prev_reg107 <= value;
3457 8'd108: prev_reg108 <= value;
3458 8'd109: prev_reg109 <= value;
3459 8'd110: prev_reg110 <= value;
3460 8'd111: prev_reg111 <= value;
3461 8'd112: prev_reg112 <= value;
3462 8'd113: prev_reg113 <= value;
3463 8'd114: prev_reg114 <= value;
3464 8'd115: prev_reg115 <= value;
3465 8'd116: prev_reg116 <= value;
3466 8'd117: prev_reg117 <= value;
3467 8'd118: prev_reg118 <= value;
3468 8'd119: prev_reg119 <= value;
3469 8'd120: prev_reg120 <= value;
3470 8'd121: prev_reg121 <= value;
3471 8'd122: prev_reg122 <= value;
3472 8'd123: prev_reg123 <= value;
3473 8'd124: prev_reg124 <= value;
3474 8'd125: prev_reg125 <= value;
3475 8'd126: prev_reg126 <= value;
3476 8'd127: prev_reg127 <= value;
3477 8'd128: prev_reg128 <= value;
3478 8'd129: prev_reg129 <= value;
3479 8'd130: prev_reg130 <= value;
3480 8'd131: prev_reg131 <= value;
3481 8'd132: prev_reg132 <= value;
3482 8'd133: prev_reg133 <= value;
3483 8'd134: prev_reg134 <= value;
3484 8'd135: prev_reg135 <= value;
3485 8'd136: prev_reg136 <= value;
3486 8'd137: prev_reg137 <= value;
3487 8'd138: prev_reg138 <= value;
3488 8'd139: prev_reg139 <= value;
3489 8'd140: prev_reg140 <= value;
3490 8'd141: prev_reg141 <= value;
3491 8'd142: prev_reg142 <= value;
3492 8'd143: prev_reg143 <= value;
3493 8'd144: prev_reg144 <= value;
3494 8'd145: prev_reg145 <= value;
3495 8'd146: prev_reg146 <= value;
3496 8'd147: prev_reg147 <= value;
3497 8'd148: prev_reg148 <= value;
3498 8'd149: prev_reg149 <= value;
3499 8'd150: prev_reg150 <= value;
3500 8'd151: prev_reg151 <= value;
3501 8'd152: prev_reg152 <= value;
3502 8'd153: prev_reg153 <= value;
3503 8'd154: prev_reg154 <= value;
3504 8'd155: prev_reg155 <= value;
3505 8'd156: prev_reg156 <= value;
3506 8'd157: prev_reg157 <= value;
3507 8'd158: prev_reg158 <= value;
3508 8'd159: prev_reg159 <= value;
3509 8'd160: prev_reg160 <= value;
3510 8'd161: prev_reg161 <= value;
3511 8'd162: prev_reg162 <= value;
3512 8'd163: prev_reg163 <= value;
3513 8'd164: prev_reg164 <= value;
3514 8'd165: prev_reg165 <= value;
3515 8'd166: prev_reg166 <= value;
3516 8'd167: prev_reg167 <= value;
3517 8'd168: prev_reg168 <= value;
3518 8'd169: prev_reg169 <= value;
3519 8'd170: prev_reg170 <= value;
3520 8'd171: prev_reg171 <= value;
3521 8'd172: prev_reg172 <= value;
3522 8'd173: prev_reg173 <= value;
3523 8'd174: prev_reg174 <= value;
3524 8'd175: prev_reg175 <= value;
3525 8'd176: prev_reg176 <= value;
3526 8'd177: prev_reg177 <= value;
3527 8'd178: prev_reg178 <= value;
3528 8'd179: prev_reg179 <= value;
3529 8'd180: prev_reg180 <= value;
3530 8'd181: prev_reg181 <= value;
3531 8'd182: prev_reg182 <= value;
3532 8'd183: prev_reg183 <= value;
3533 8'd184: prev_reg184 <= value;
3534 8'd185: prev_reg185 <= value;
3535 8'd186: prev_reg186 <= value;
3536 8'd187: prev_reg187 <= value;
3537 8'd188: prev_reg188 <= value;
3538 8'd189: prev_reg189 <= value;
3539 8'd190: prev_reg190 <= value;
3540 8'd191: prev_reg191 <= value;
3541 8'd192: prev_reg192 <= value;
3542 8'd193: prev_reg193 <= value;
3543 8'd194: prev_reg194 <= value;
3544 8'd195: prev_reg195 <= value;
3545 8'd196: prev_reg196 <= value;
3546 8'd197: prev_reg197 <= value;
3547 8'd198: prev_reg198 <= value;
3548 8'd199: prev_reg199 <= value;
3549 8'd200: prev_reg200 <= value;
3550 8'd201: prev_reg201 <= value;
3551 8'd202: prev_reg202 <= value;
3552 8'd203: prev_reg203 <= value;
3553 8'd204: prev_reg204 <= value;
3554 8'd205: prev_reg205 <= value;
3555 8'd206: prev_reg206 <= value;
3556 8'd207: prev_reg207 <= value;
3557 8'd208: prev_reg208 <= value;
3558 8'd209: prev_reg209 <= value;
3559 8'd210: prev_reg210 <= value;
3560 8'd211: prev_reg211 <= value;
3561 8'd212: prev_reg212 <= value;
3562 8'd213: prev_reg213 <= value;
3563 8'd214: prev_reg214 <= value;
3564 8'd215: prev_reg215 <= value;
3565 8'd216: prev_reg216 <= value;
3566 8'd217: prev_reg217 <= value;
3567 8'd218: prev_reg218 <= value;
3568 8'd219: prev_reg219 <= value;
3569 8'd220: prev_reg220 <= value;
3570 8'd221: prev_reg221 <= value;
3571 8'd222: prev_reg222 <= value;
3572 8'd223: prev_reg223 <= value;
3573 8'd224: prev_reg224 <= value;
3574 8'd225: prev_reg225 <= value;
3575 8'd226: prev_reg226 <= value;
3576 8'd227: prev_reg227 <= value;
3577 8'd228: prev_reg228 <= value;
3578 8'd229: prev_reg229 <= value;
3579 8'd230: prev_reg230 <= value;
3580 8'd231: prev_reg231 <= value;
3581 8'd232: prev_reg232 <= value;
3582 8'd233: prev_reg233 <= value;
3583 8'd234: prev_reg234 <= value;
3584 8'd235: prev_reg235 <= value;
3585 8'd236: prev_reg236 <= value;
3586 8'd237: prev_reg237 <= value;
3587 8'd238: prev_reg238 <= value;
3588 8'd239: prev_reg239 <= value;
3589 8'd240: prev_reg240 <= value;
3590 8'd241: prev_reg241 <= value;
3591 8'd242: prev_reg242 <= value;
3592 8'd243: prev_reg243 <= value;
3593 8'd244: prev_reg244 <= value;
3594 8'd245: prev_reg245 <= value;
3595 8'd246: prev_reg246 <= value;
3596 8'd247: prev_reg247 <= value;
3597 8'd248: prev_reg248 <= value;
3598 8'd249: prev_reg249 <= value;
3599 8'd250: prev_reg250 <= value;
3600 8'd251: prev_reg251 <= value;
3601 8'd252: prev_reg252 <= value;
3602 8'd253: prev_reg253 <= value;
3603 8'd254: prev_reg254 <= value;
3604 8'd255: prev_reg255 <= value;
3605 endcase
3606
3607 end //}
3608
3609endtask
3610
3611//----------------------------------------------------------
3612// Write Value to prev_reg using id as index (blocking)
3613task write_prev_async;
3614 input [7:0] id;
3615 input [63:0] value;
3616
3617 begin // {
3618
3619 case (id)
3620 8'd0: prev_reg0 = value;
3621 8'd1: prev_reg1 = value;
3622 8'd2: prev_reg2 = value;
3623 8'd3: prev_reg3 = value;
3624 8'd4: prev_reg4 = value;
3625 8'd5: prev_reg5 = value;
3626 8'd6: prev_reg6 = value;
3627 8'd7: prev_reg7 = value;
3628 8'd8: prev_reg8 = value;
3629 8'd9: prev_reg9 = value;
3630 8'd10: prev_reg10 = value;
3631 8'd11: prev_reg11 = value;
3632 8'd12: prev_reg12 = value;
3633 8'd13: prev_reg13 = value;
3634 8'd14: prev_reg14 = value;
3635 8'd15: prev_reg15 = value;
3636 8'd16: prev_reg16 = value;
3637 8'd17: prev_reg17 = value;
3638 8'd18: prev_reg18 = value;
3639 8'd19: prev_reg19 = value;
3640 8'd20: prev_reg20 = value;
3641 8'd21: prev_reg21 = value;
3642 8'd22: prev_reg22 = value;
3643 8'd23: prev_reg23 = value;
3644 8'd24: prev_reg24 = value;
3645 8'd25: prev_reg25 = value;
3646 8'd26: prev_reg26 = value;
3647 8'd27: prev_reg27 = value;
3648 8'd28: prev_reg28 = value;
3649 8'd29: prev_reg29 = value;
3650 8'd30: prev_reg30 = value;
3651 8'd31: prev_reg31 = value;
3652 8'd32: prev_reg32 = value;
3653 8'd33: prev_reg33 = value;
3654 8'd34: prev_reg34 = value;
3655 8'd35: prev_reg35 = value;
3656 8'd36: prev_reg36 = value;
3657 8'd37: prev_reg37 = value;
3658 8'd38: prev_reg38 = value;
3659 8'd39: prev_reg39 = value;
3660 8'd40: prev_reg40 = value;
3661 8'd41: prev_reg41 = value;
3662 8'd42: prev_reg42 = value;
3663 8'd43: prev_reg43 = value;
3664 8'd44: prev_reg44 = value;
3665 8'd45: prev_reg45 = value;
3666 8'd46: prev_reg46 = value;
3667 8'd47: prev_reg47 = value;
3668 8'd48: prev_reg48 = value;
3669 8'd49: prev_reg49 = value;
3670 8'd50: prev_reg50 = value;
3671 8'd51: prev_reg51 = value;
3672 8'd52: prev_reg52 = value;
3673 8'd53: prev_reg53 = value;
3674 8'd54: prev_reg54 = value;
3675 8'd55: prev_reg55 = value;
3676 8'd56: prev_reg56 = value;
3677 8'd57: prev_reg57 = value;
3678 8'd58: prev_reg58 = value;
3679 8'd59: prev_reg59 = value;
3680 8'd60: prev_reg60 = value;
3681 8'd61: prev_reg61 = value;
3682 8'd62: prev_reg62 = value;
3683 8'd63: prev_reg63 = value;
3684 8'd64: prev_reg64 = value;
3685 8'd65: prev_reg65 = value;
3686 8'd66: prev_reg66 = value;
3687 8'd67: prev_reg67 = value;
3688 8'd68: prev_reg68 = value;
3689 8'd69: prev_reg69 = value;
3690 8'd70: prev_reg70 = value;
3691 8'd71: prev_reg71 = value;
3692 8'd72: prev_reg72 = value;
3693 8'd73: prev_reg73 = value;
3694 8'd74: prev_reg74 = value;
3695 8'd75: prev_reg75 = value;
3696 8'd76: prev_reg76 = value;
3697 8'd77: prev_reg77 = value;
3698 8'd78: prev_reg78 = value;
3699 8'd79: prev_reg79 = value;
3700 8'd80: prev_reg80 = value;
3701 8'd81: prev_reg81 = value;
3702 8'd82: prev_reg82 = value;
3703 8'd83: prev_reg83 = value;
3704 8'd84: prev_reg84 = value;
3705 8'd85: prev_reg85 = value;
3706 8'd86: prev_reg86 = value;
3707 8'd87: prev_reg87 = value;
3708 8'd88: prev_reg88 = value;
3709 8'd89: prev_reg89 = value;
3710 8'd90: prev_reg90 = value;
3711 8'd91: prev_reg91 = value;
3712 8'd92: prev_reg92 = value;
3713 8'd93: prev_reg93 = value;
3714 8'd94: prev_reg94 = value;
3715 8'd95: prev_reg95 = value;
3716 8'd96: prev_reg96 = value;
3717 8'd97: prev_reg97 = value;
3718 8'd98: prev_reg98 = value;
3719 8'd99: prev_reg99 = value;
3720 8'd100: prev_reg100 = value;
3721 8'd101: prev_reg101 = value;
3722 8'd102: prev_reg102 = value;
3723 8'd103: prev_reg103 = value;
3724 8'd104: prev_reg104 = value;
3725 8'd105: prev_reg105 = value;
3726 8'd106: prev_reg106 = value;
3727 8'd107: prev_reg107 = value;
3728 8'd108: prev_reg108 = value;
3729 8'd109: prev_reg109 = value;
3730 8'd110: prev_reg110 = value;
3731 8'd111: prev_reg111 = value;
3732 8'd112: prev_reg112 = value;
3733 8'd113: prev_reg113 = value;
3734 8'd114: prev_reg114 = value;
3735 8'd115: prev_reg115 = value;
3736 8'd116: prev_reg116 = value;
3737 8'd117: prev_reg117 = value;
3738 8'd118: prev_reg118 = value;
3739 8'd119: prev_reg119 = value;
3740 8'd120: prev_reg120 = value;
3741 8'd121: prev_reg121 = value;
3742 8'd122: prev_reg122 = value;
3743 8'd123: prev_reg123 = value;
3744 8'd124: prev_reg124 = value;
3745 8'd125: prev_reg125 = value;
3746 8'd126: prev_reg126 = value;
3747 8'd127: prev_reg127 = value;
3748 8'd128: prev_reg128 = value;
3749 8'd129: prev_reg129 = value;
3750 8'd130: prev_reg130 = value;
3751 8'd131: prev_reg131 = value;
3752 8'd132: prev_reg132 = value;
3753 8'd133: prev_reg133 = value;
3754 8'd134: prev_reg134 = value;
3755 8'd135: prev_reg135 = value;
3756 8'd136: prev_reg136 = value;
3757 8'd137: prev_reg137 = value;
3758 8'd138: prev_reg138 = value;
3759 8'd139: prev_reg139 = value;
3760 8'd140: prev_reg140 = value;
3761 8'd141: prev_reg141 = value;
3762 8'd142: prev_reg142 = value;
3763 8'd143: prev_reg143 = value;
3764 8'd144: prev_reg144 = value;
3765 8'd145: prev_reg145 = value;
3766 8'd146: prev_reg146 = value;
3767 8'd147: prev_reg147 = value;
3768 8'd148: prev_reg148 = value;
3769 8'd149: prev_reg149 = value;
3770 8'd150: prev_reg150 = value;
3771 8'd151: prev_reg151 = value;
3772 8'd152: prev_reg152 = value;
3773 8'd153: prev_reg153 = value;
3774 8'd154: prev_reg154 = value;
3775 8'd155: prev_reg155 = value;
3776 8'd156: prev_reg156 = value;
3777 8'd157: prev_reg157 = value;
3778 8'd158: prev_reg158 = value;
3779 8'd159: prev_reg159 = value;
3780 8'd160: prev_reg160 = value;
3781 8'd161: prev_reg161 = value;
3782 8'd162: prev_reg162 = value;
3783 8'd163: prev_reg163 = value;
3784 8'd164: prev_reg164 = value;
3785 8'd165: prev_reg165 = value;
3786 8'd166: prev_reg166 = value;
3787 8'd167: prev_reg167 = value;
3788 8'd168: prev_reg168 = value;
3789 8'd169: prev_reg169 = value;
3790 8'd170: prev_reg170 = value;
3791 8'd171: prev_reg171 = value;
3792 8'd172: prev_reg172 = value;
3793 8'd173: prev_reg173 = value;
3794 8'd174: prev_reg174 = value;
3795 8'd175: prev_reg175 = value;
3796 8'd176: prev_reg176 = value;
3797 8'd177: prev_reg177 = value;
3798 8'd178: prev_reg178 = value;
3799 8'd179: prev_reg179 = value;
3800 8'd180: prev_reg180 = value;
3801 8'd181: prev_reg181 = value;
3802 8'd182: prev_reg182 = value;
3803 8'd183: prev_reg183 = value;
3804 8'd184: prev_reg184 = value;
3805 8'd185: prev_reg185 = value;
3806 8'd186: prev_reg186 = value;
3807 8'd187: prev_reg187 = value;
3808 8'd188: prev_reg188 = value;
3809 8'd189: prev_reg189 = value;
3810 8'd190: prev_reg190 = value;
3811 8'd191: prev_reg191 = value;
3812 8'd192: prev_reg192 = value;
3813 8'd193: prev_reg193 = value;
3814 8'd194: prev_reg194 = value;
3815 8'd195: prev_reg195 = value;
3816 8'd196: prev_reg196 = value;
3817 8'd197: prev_reg197 = value;
3818 8'd198: prev_reg198 = value;
3819 8'd199: prev_reg199 = value;
3820 8'd200: prev_reg200 = value;
3821 8'd201: prev_reg201 = value;
3822 8'd202: prev_reg202 = value;
3823 8'd203: prev_reg203 = value;
3824 8'd204: prev_reg204 = value;
3825 8'd205: prev_reg205 = value;
3826 8'd206: prev_reg206 = value;
3827 8'd207: prev_reg207 = value;
3828 8'd208: prev_reg208 = value;
3829 8'd209: prev_reg209 = value;
3830 8'd210: prev_reg210 = value;
3831 8'd211: prev_reg211 = value;
3832 8'd212: prev_reg212 = value;
3833 8'd213: prev_reg213 = value;
3834 8'd214: prev_reg214 = value;
3835 8'd215: prev_reg215 = value;
3836 8'd216: prev_reg216 = value;
3837 8'd217: prev_reg217 = value;
3838 8'd218: prev_reg218 = value;
3839 8'd219: prev_reg219 = value;
3840 8'd220: prev_reg220 = value;
3841 8'd221: prev_reg221 = value;
3842 8'd222: prev_reg222 = value;
3843 8'd223: prev_reg223 = value;
3844 8'd224: prev_reg224 = value;
3845 8'd225: prev_reg225 = value;
3846 8'd226: prev_reg226 = value;
3847 8'd227: prev_reg227 = value;
3848 8'd228: prev_reg228 = value;
3849 8'd229: prev_reg229 = value;
3850 8'd230: prev_reg230 = value;
3851 8'd231: prev_reg231 = value;
3852 8'd232: prev_reg232 = value;
3853 8'd233: prev_reg233 = value;
3854 8'd234: prev_reg234 = value;
3855 8'd235: prev_reg235 = value;
3856 8'd236: prev_reg236 = value;
3857 8'd237: prev_reg237 = value;
3858 8'd238: prev_reg238 = value;
3859 8'd239: prev_reg239 = value;
3860 8'd240: prev_reg240 = value;
3861 8'd241: prev_reg241 = value;
3862 8'd242: prev_reg242 = value;
3863 8'd243: prev_reg243 = value;
3864 8'd244: prev_reg244 = value;
3865 8'd245: prev_reg245 = value;
3866 8'd246: prev_reg246 = value;
3867 8'd247: prev_reg247 = value;
3868 8'd248: prev_reg248 = value;
3869 8'd249: prev_reg249 = value;
3870 8'd250: prev_reg250 = value;
3871 8'd251: prev_reg251 = value;
3872 8'd252: prev_reg252 = value;
3873 8'd253: prev_reg253 = value;
3874 8'd254: prev_reg254 = value;
3875 8'd255: prev_reg255 = value;
3876 endcase
3877
3878 end //}
3879
3880endtask
3881
3882//----------------------------------------------------------
3883// Read value frpm prev_reg using id as index
3884function [63:0] read_prev;
3885 input [7:0] id;
3886
3887 begin // {
3888
3889 case (id)
3890 8'd0: read_prev = prev_reg0;
3891 8'd1: read_prev = prev_reg1;
3892 8'd2: read_prev = prev_reg2;
3893 8'd3: read_prev = prev_reg3;
3894 8'd4: read_prev = prev_reg4;
3895 8'd5: read_prev = prev_reg5;
3896 8'd6: read_prev = prev_reg6;
3897 8'd7: read_prev = prev_reg7;
3898 8'd8: read_prev = prev_reg8;
3899 8'd9: read_prev = prev_reg9;
3900 8'd10: read_prev = prev_reg10;
3901 8'd11: read_prev = prev_reg11;
3902 8'd12: read_prev = prev_reg12;
3903 8'd13: read_prev = prev_reg13;
3904 8'd14: read_prev = prev_reg14;
3905 8'd15: read_prev = prev_reg15;
3906 8'd16: read_prev = prev_reg16;
3907 8'd17: read_prev = prev_reg17;
3908 8'd18: read_prev = prev_reg18;
3909 8'd19: read_prev = prev_reg19;
3910 8'd20: read_prev = prev_reg20;
3911 8'd21: read_prev = prev_reg21;
3912 8'd22: read_prev = prev_reg22;
3913 8'd23: read_prev = prev_reg23;
3914 8'd24: read_prev = prev_reg24;
3915 8'd25: read_prev = prev_reg25;
3916 8'd26: read_prev = prev_reg26;
3917 8'd27: read_prev = prev_reg27;
3918 8'd28: read_prev = prev_reg28;
3919 8'd29: read_prev = prev_reg29;
3920 8'd30: read_prev = prev_reg30;
3921 8'd31: read_prev = prev_reg31;
3922 8'd32: read_prev = prev_reg32;
3923 8'd33: read_prev = prev_reg33;
3924 8'd34: read_prev = prev_reg34;
3925 8'd35: read_prev = prev_reg35;
3926 8'd36: read_prev = prev_reg36;
3927 8'd37: read_prev = prev_reg37;
3928 8'd38: read_prev = prev_reg38;
3929 8'd39: read_prev = prev_reg39;
3930 8'd40: read_prev = prev_reg40;
3931 8'd41: read_prev = prev_reg41;
3932 8'd42: read_prev = prev_reg42;
3933 8'd43: read_prev = prev_reg43;
3934 8'd44: read_prev = prev_reg44;
3935 8'd45: read_prev = prev_reg45;
3936 8'd46: read_prev = prev_reg46;
3937 8'd47: read_prev = prev_reg47;
3938 8'd48: read_prev = prev_reg48;
3939 8'd49: read_prev = prev_reg49;
3940 8'd50: read_prev = prev_reg50;
3941 8'd51: read_prev = prev_reg51;
3942 8'd52: read_prev = prev_reg52;
3943 8'd53: read_prev = prev_reg53;
3944 8'd54: read_prev = prev_reg54;
3945 8'd55: read_prev = prev_reg55;
3946 8'd56: read_prev = prev_reg56;
3947 8'd57: read_prev = prev_reg57;
3948 8'd58: read_prev = prev_reg58;
3949 8'd59: read_prev = prev_reg59;
3950 8'd60: read_prev = prev_reg60;
3951 8'd61: read_prev = prev_reg61;
3952 8'd62: read_prev = prev_reg62;
3953 8'd63: read_prev = prev_reg63;
3954 8'd64: read_prev = prev_reg64;
3955 8'd65: read_prev = prev_reg65;
3956 8'd66: read_prev = prev_reg66;
3957 8'd67: read_prev = prev_reg67;
3958 8'd68: read_prev = prev_reg68;
3959 8'd69: read_prev = prev_reg69;
3960 8'd70: read_prev = prev_reg70;
3961 8'd71: read_prev = prev_reg71;
3962 8'd72: read_prev = prev_reg72;
3963 8'd73: read_prev = prev_reg73;
3964 8'd74: read_prev = prev_reg74;
3965 8'd75: read_prev = prev_reg75;
3966 8'd76: read_prev = prev_reg76;
3967 8'd77: read_prev = prev_reg77;
3968 8'd78: read_prev = prev_reg78;
3969 8'd79: read_prev = prev_reg79;
3970 8'd80: read_prev = prev_reg80;
3971 8'd81: read_prev = prev_reg81;
3972 8'd82: read_prev = prev_reg82;
3973 8'd83: read_prev = prev_reg83;
3974 8'd84: read_prev = prev_reg84;
3975 8'd85: read_prev = prev_reg85;
3976 8'd86: read_prev = prev_reg86;
3977 8'd87: read_prev = prev_reg87;
3978 8'd88: read_prev = prev_reg88;
3979 8'd89: read_prev = prev_reg89;
3980 8'd90: read_prev = prev_reg90;
3981 8'd91: read_prev = prev_reg91;
3982 8'd92: read_prev = prev_reg92;
3983 8'd93: read_prev = prev_reg93;
3984 8'd94: read_prev = prev_reg94;
3985 8'd95: read_prev = prev_reg95;
3986 8'd96: read_prev = prev_reg96;
3987 8'd97: read_prev = prev_reg97;
3988 8'd98: read_prev = prev_reg98;
3989 8'd99: read_prev = prev_reg99;
3990 8'd100: read_prev = prev_reg100;
3991 8'd101: read_prev = prev_reg101;
3992 8'd102: read_prev = prev_reg102;
3993 8'd103: read_prev = prev_reg103;
3994 8'd104: read_prev = prev_reg104;
3995 8'd105: read_prev = prev_reg105;
3996 8'd106: read_prev = prev_reg106;
3997 8'd107: read_prev = prev_reg107;
3998 8'd108: read_prev = prev_reg108;
3999 8'd109: read_prev = prev_reg109;
4000 8'd110: read_prev = prev_reg110;
4001 8'd111: read_prev = prev_reg111;
4002 8'd112: read_prev = prev_reg112;
4003 8'd113: read_prev = prev_reg113;
4004 8'd114: read_prev = prev_reg114;
4005 8'd115: read_prev = prev_reg115;
4006 8'd116: read_prev = prev_reg116;
4007 8'd117: read_prev = prev_reg117;
4008 8'd118: read_prev = prev_reg118;
4009 8'd119: read_prev = prev_reg119;
4010 8'd120: read_prev = prev_reg120;
4011 8'd121: read_prev = prev_reg121;
4012 8'd122: read_prev = prev_reg122;
4013 8'd123: read_prev = prev_reg123;
4014 8'd124: read_prev = prev_reg124;
4015 8'd125: read_prev = prev_reg125;
4016 8'd126: read_prev = prev_reg126;
4017 8'd127: read_prev = prev_reg127;
4018 8'd128: read_prev = prev_reg128;
4019 8'd129: read_prev = prev_reg129;
4020 8'd130: read_prev = prev_reg130;
4021 8'd131: read_prev = prev_reg131;
4022 8'd132: read_prev = prev_reg132;
4023 8'd133: read_prev = prev_reg133;
4024 8'd134: read_prev = prev_reg134;
4025 8'd135: read_prev = prev_reg135;
4026 8'd136: read_prev = prev_reg136;
4027 8'd137: read_prev = prev_reg137;
4028 8'd138: read_prev = prev_reg138;
4029 8'd139: read_prev = prev_reg139;
4030 8'd140: read_prev = prev_reg140;
4031 8'd141: read_prev = prev_reg141;
4032 8'd142: read_prev = prev_reg142;
4033 8'd143: read_prev = prev_reg143;
4034 8'd144: read_prev = prev_reg144;
4035 8'd145: read_prev = prev_reg145;
4036 8'd146: read_prev = prev_reg146;
4037 8'd147: read_prev = prev_reg147;
4038 8'd148: read_prev = prev_reg148;
4039 8'd149: read_prev = prev_reg149;
4040 8'd150: read_prev = prev_reg150;
4041 8'd151: read_prev = prev_reg151;
4042 8'd152: read_prev = prev_reg152;
4043 8'd153: read_prev = prev_reg153;
4044 8'd154: read_prev = prev_reg154;
4045 8'd155: read_prev = prev_reg155;
4046 8'd156: read_prev = prev_reg156;
4047 8'd157: read_prev = prev_reg157;
4048 8'd158: read_prev = prev_reg158;
4049 8'd159: read_prev = prev_reg159;
4050 8'd160: read_prev = prev_reg160;
4051 8'd161: read_prev = prev_reg161;
4052 8'd162: read_prev = prev_reg162;
4053 8'd163: read_prev = prev_reg163;
4054 8'd164: read_prev = prev_reg164;
4055 8'd165: read_prev = prev_reg165;
4056 8'd166: read_prev = prev_reg166;
4057 8'd167: read_prev = prev_reg167;
4058 8'd168: read_prev = prev_reg168;
4059 8'd169: read_prev = prev_reg169;
4060 8'd170: read_prev = prev_reg170;
4061 8'd171: read_prev = prev_reg171;
4062 8'd172: read_prev = prev_reg172;
4063 8'd173: read_prev = prev_reg173;
4064 8'd174: read_prev = prev_reg174;
4065 8'd175: read_prev = prev_reg175;
4066 8'd176: read_prev = prev_reg176;
4067 8'd177: read_prev = prev_reg177;
4068 8'd178: read_prev = prev_reg178;
4069 8'd179: read_prev = prev_reg179;
4070 8'd180: read_prev = prev_reg180;
4071 8'd181: read_prev = prev_reg181;
4072 8'd182: read_prev = prev_reg182;
4073 8'd183: read_prev = prev_reg183;
4074 8'd184: read_prev = prev_reg184;
4075 8'd185: read_prev = prev_reg185;
4076 8'd186: read_prev = prev_reg186;
4077 8'd187: read_prev = prev_reg187;
4078 8'd188: read_prev = prev_reg188;
4079 8'd189: read_prev = prev_reg189;
4080 8'd190: read_prev = prev_reg190;
4081 8'd191: read_prev = prev_reg191;
4082 8'd192: read_prev = prev_reg192;
4083 8'd193: read_prev = prev_reg193;
4084 8'd194: read_prev = prev_reg194;
4085 8'd195: read_prev = prev_reg195;
4086 8'd196: read_prev = prev_reg196;
4087 8'd197: read_prev = prev_reg197;
4088 8'd198: read_prev = prev_reg198;
4089 8'd199: read_prev = prev_reg199;
4090 8'd200: read_prev = prev_reg200;
4091 8'd201: read_prev = prev_reg201;
4092 8'd202: read_prev = prev_reg202;
4093 8'd203: read_prev = prev_reg203;
4094 8'd204: read_prev = prev_reg204;
4095 8'd205: read_prev = prev_reg205;
4096 8'd206: read_prev = prev_reg206;
4097 8'd207: read_prev = prev_reg207;
4098 8'd208: read_prev = prev_reg208;
4099 8'd209: read_prev = prev_reg209;
4100 8'd210: read_prev = prev_reg210;
4101 8'd211: read_prev = prev_reg211;
4102 8'd212: read_prev = prev_reg212;
4103 8'd213: read_prev = prev_reg213;
4104 8'd214: read_prev = prev_reg214;
4105 8'd215: read_prev = prev_reg215;
4106 8'd216: read_prev = prev_reg216;
4107 8'd217: read_prev = prev_reg217;
4108 8'd218: read_prev = prev_reg218;
4109 8'd219: read_prev = prev_reg219;
4110 8'd220: read_prev = prev_reg220;
4111 8'd221: read_prev = prev_reg221;
4112 8'd222: read_prev = prev_reg222;
4113 8'd223: read_prev = prev_reg223;
4114 8'd224: read_prev = prev_reg224;
4115 8'd225: read_prev = prev_reg225;
4116 8'd226: read_prev = prev_reg226;
4117 8'd227: read_prev = prev_reg227;
4118 8'd228: read_prev = prev_reg228;
4119 8'd229: read_prev = prev_reg229;
4120 8'd230: read_prev = prev_reg230;
4121 8'd231: read_prev = prev_reg231;
4122 8'd232: read_prev = prev_reg232;
4123 8'd233: read_prev = prev_reg233;
4124 8'd234: read_prev = prev_reg234;
4125 8'd235: read_prev = prev_reg235;
4126 8'd236: read_prev = prev_reg236;
4127 8'd237: read_prev = prev_reg237;
4128 8'd238: read_prev = prev_reg238;
4129 8'd239: read_prev = prev_reg239;
4130 8'd240: read_prev = prev_reg240;
4131 8'd241: read_prev = prev_reg241;
4132 8'd242: read_prev = prev_reg242;
4133 8'd243: read_prev = prev_reg243;
4134 8'd244: read_prev = prev_reg244;
4135 8'd245: read_prev = prev_reg245;
4136 8'd246: read_prev = prev_reg246;
4137 8'd247: read_prev = prev_reg247;
4138 8'd248: read_prev = prev_reg248;
4139 8'd249: read_prev = prev_reg249;
4140 8'd250: read_prev = prev_reg250;
4141 8'd251: read_prev = prev_reg251;
4142 8'd252: read_prev = prev_reg252;
4143 8'd253: read_prev = prev_reg253;
4144 8'd254: read_prev = prev_reg254;
4145 8'd255: read_prev = prev_reg255;
4146 endcase
4147
4148 end //}
4149
4150endfunction
4151
4152//----------------------------------------------------------
4153function [4:0] remap;
4154 input [4:0] rd;
4155 input oddwin;
4156
4157 begin
4158
4159 remap[4] = rd[4] ^ (rd[3] & oddwin);
4160 remap[3:0] = rd[3:0];
4161
4162 end
4163endfunction
4164
4165//----------------------------------------------------------
4166// Initialize nas_pipe registers
4167initial begin : INIT_BLOCK
4168 integer i;
4169
4170 nas_pipe_enable = 1'b1; // Nas_pipe always enables itself
4171 good_trap_detected = 1'b0;
4172
4173 @ (posedge `BENCH_SPC0_GCLK);
4174 `TOP.th_last_act_cycle[mytnum] = 0;
4175
4176 // Window registers
4177 win0_reg8 = 0;
4178 win1_reg8 = 0;
4179 win2_reg8 = 0;
4180 win3_reg8 = 0;
4181 win4_reg8 = 0;
4182 win5_reg8 = 0;
4183 win6_reg8 = 0;
4184 win7_reg8 = 0;
4185 win0_reg9 = 0;
4186 win1_reg9 = 0;
4187 win2_reg9 = 0;
4188 win3_reg9 = 0;
4189 win4_reg9 = 0;
4190 win5_reg9 = 0;
4191 win6_reg9 = 0;
4192 win7_reg9 = 0;
4193 win0_reg10 = 0;
4194 win1_reg10 = 0;
4195 win2_reg10 = 0;
4196 win3_reg10 = 0;
4197 win4_reg10 = 0;
4198 win5_reg10 = 0;
4199 win6_reg10 = 0;
4200 win7_reg10 = 0;
4201 win0_reg11 = 0;
4202 win1_reg11 = 0;
4203 win2_reg11 = 0;
4204 win3_reg11 = 0;
4205 win4_reg11 = 0;
4206 win5_reg11 = 0;
4207 win6_reg11 = 0;
4208 win7_reg11 = 0;
4209 win0_reg12 = 0;
4210 win1_reg12 = 0;
4211 win2_reg12 = 0;
4212 win3_reg12 = 0;
4213 win4_reg12 = 0;
4214 win5_reg12 = 0;
4215 win6_reg12 = 0;
4216 win7_reg12 = 0;
4217 win0_reg13 = 0;
4218 win1_reg13 = 0;
4219 win2_reg13 = 0;
4220 win3_reg13 = 0;
4221 win4_reg13 = 0;
4222 win5_reg13 = 0;
4223 win6_reg13 = 0;
4224 win7_reg13 = 0;
4225 win0_reg14 = 0;
4226 win1_reg14 = 0;
4227 win2_reg14 = 0;
4228 win3_reg14 = 0;
4229 win4_reg14 = 0;
4230 win5_reg14 = 0;
4231 win6_reg14 = 0;
4232 win7_reg14 = 0;
4233 win0_reg15 = 0;
4234 win1_reg15 = 0;
4235 win2_reg15 = 0;
4236 win3_reg15 = 0;
4237 win4_reg15 = 0;
4238 win5_reg15 = 0;
4239 win6_reg15 = 0;
4240 win7_reg15 = 0;
4241 win0_reg16 = 0;
4242 win1_reg16 = 0;
4243 win2_reg16 = 0;
4244 win3_reg16 = 0;
4245 win4_reg16 = 0;
4246 win5_reg16 = 0;
4247 win6_reg16 = 0;
4248 win7_reg16 = 0;
4249 win0_reg17 = 0;
4250 win1_reg17 = 0;
4251 win2_reg17 = 0;
4252 win3_reg17 = 0;
4253 win4_reg17 = 0;
4254 win5_reg17 = 0;
4255 win6_reg17 = 0;
4256 win7_reg17 = 0;
4257 win0_reg18 = 0;
4258 win1_reg18 = 0;
4259 win2_reg18 = 0;
4260 win3_reg18 = 0;
4261 win4_reg18 = 0;
4262 win5_reg18 = 0;
4263 win6_reg18 = 0;
4264 win7_reg18 = 0;
4265 win0_reg19 = 0;
4266 win1_reg19 = 0;
4267 win2_reg19 = 0;
4268 win3_reg19 = 0;
4269 win4_reg19 = 0;
4270 win5_reg19 = 0;
4271 win6_reg19 = 0;
4272 win7_reg19 = 0;
4273 win0_reg20 = 0;
4274 win1_reg20 = 0;
4275 win2_reg20 = 0;
4276 win3_reg20 = 0;
4277 win4_reg20 = 0;
4278 win5_reg20 = 0;
4279 win6_reg20 = 0;
4280 win7_reg20 = 0;
4281 win0_reg21 = 0;
4282 win1_reg21 = 0;
4283 win2_reg21 = 0;
4284 win3_reg21 = 0;
4285 win4_reg21 = 0;
4286 win5_reg21 = 0;
4287 win6_reg21 = 0;
4288 win7_reg21 = 0;
4289 win0_reg22 = 0;
4290 win1_reg22 = 0;
4291 win2_reg22 = 0;
4292 win3_reg22 = 0;
4293 win4_reg22 = 0;
4294 win5_reg22 = 0;
4295 win6_reg22 = 0;
4296 win7_reg22 = 0;
4297 win0_reg23 = 0;
4298 win1_reg23 = 0;
4299 win2_reg23 = 0;
4300 win3_reg23 = 0;
4301 win4_reg23 = 0;
4302 win5_reg23 = 0;
4303 win6_reg23 = 0;
4304 win7_reg23 = 0;
4305 win0_reg24 = 0;
4306 win1_reg24 = 0;
4307 win2_reg24 = 0;
4308 win3_reg24 = 0;
4309 win4_reg24 = 0;
4310 win5_reg24 = 0;
4311 win6_reg24 = 0;
4312 win7_reg24 = 0;
4313 win0_reg25 = 0;
4314 win1_reg25 = 0;
4315 win2_reg25 = 0;
4316 win3_reg25 = 0;
4317 win4_reg25 = 0;
4318 win5_reg25 = 0;
4319 win6_reg25 = 0;
4320 win7_reg25 = 0;
4321 win0_reg26 = 0;
4322 win1_reg26 = 0;
4323 win2_reg26 = 0;
4324 win3_reg26 = 0;
4325 win4_reg26 = 0;
4326 win5_reg26 = 0;
4327 win6_reg26 = 0;
4328 win7_reg26 = 0;
4329 win0_reg27 = 0;
4330 win1_reg27 = 0;
4331 win2_reg27 = 0;
4332 win3_reg27 = 0;
4333 win4_reg27 = 0;
4334 win5_reg27 = 0;
4335 win6_reg27 = 0;
4336 win7_reg27 = 0;
4337 win0_reg28 = 0;
4338 win1_reg28 = 0;
4339 win2_reg28 = 0;
4340 win3_reg28 = 0;
4341 win4_reg28 = 0;
4342 win5_reg28 = 0;
4343 win6_reg28 = 0;
4344 win7_reg28 = 0;
4345 win0_reg29 = 0;
4346 win1_reg29 = 0;
4347 win2_reg29 = 0;
4348 win3_reg29 = 0;
4349 win4_reg29 = 0;
4350 win5_reg29 = 0;
4351 win6_reg29 = 0;
4352 win7_reg29 = 0;
4353 win0_reg30 = 0;
4354 win1_reg30 = 0;
4355 win2_reg30 = 0;
4356 win3_reg30 = 0;
4357 win4_reg30 = 0;
4358 win5_reg30 = 0;
4359 win6_reg30 = 0;
4360 win7_reg30 = 0;
4361 win0_reg31 = 0;
4362 win1_reg31 = 0;
4363 win2_reg31 = 0;
4364 win3_reg31 = 0;
4365 win4_reg31 = 0;
4366 win5_reg31 = 0;
4367 win6_reg31 = 0;
4368 win7_reg31 = 0;
4369
4370 // Global registers
4371 th_gl = `POR_GL;
4372 gl0_reg0 = 0;
4373 gl1_reg0 = 0;
4374 gl2_reg0 = 0;
4375 gl3_reg0 = 0;
4376 gl0_reg1 = 0;
4377 gl1_reg1 = 0;
4378 gl2_reg1 = 0;
4379 gl3_reg1 = 0;
4380 gl0_reg2 = 0;
4381 gl1_reg2 = 0;
4382 gl2_reg2 = 0;
4383 gl3_reg2 = 0;
4384 gl0_reg3 = 0;
4385 gl1_reg3 = 0;
4386 gl2_reg3 = 0;
4387 gl3_reg3 = 0;
4388 gl0_reg4 = 0;
4389 gl1_reg4 = 0;
4390 gl2_reg4 = 0;
4391 gl3_reg4 = 0;
4392 gl0_reg5 = 0;
4393 gl1_reg5 = 0;
4394 gl2_reg5 = 0;
4395 gl3_reg5 = 0;
4396 gl0_reg6 = 0;
4397 gl1_reg6 = 0;
4398 gl2_reg6 = 0;
4399 gl3_reg6 = 0;
4400 gl0_reg7 = 0;
4401 gl1_reg7 = 0;
4402 gl2_reg7 = 0;
4403 gl3_reg7 = 0;
4404
4405 `PR_INFO ("nas", `INFO, "T%0d Init shadow registers.",mytnum);
4406 prev_reg0 = 0;
4407 prev_reg1 = 0;
4408 prev_reg2 = 0;
4409 prev_reg3 = 0;
4410 prev_reg4 = 0;
4411 prev_reg5 = 0;
4412 prev_reg6 = 0;
4413 prev_reg7 = 0;
4414 prev_reg8 = 0;
4415 prev_reg9 = 0;
4416 prev_reg10 = 0;
4417 prev_reg11 = 0;
4418 prev_reg12 = 0;
4419 prev_reg13 = 0;
4420 prev_reg14 = 0;
4421 prev_reg15 = 0;
4422 prev_reg16 = 0;
4423 prev_reg17 = 0;
4424 prev_reg18 = 0;
4425 prev_reg19 = 0;
4426 prev_reg20 = 0;
4427 prev_reg21 = 0;
4428 prev_reg22 = 0;
4429 prev_reg23 = 0;
4430 prev_reg24 = 0;
4431 prev_reg25 = 0;
4432 prev_reg26 = 0;
4433 prev_reg27 = 0;
4434 prev_reg28 = 0;
4435 prev_reg29 = 0;
4436 prev_reg30 = 0;
4437 prev_reg31 = 0;
4438 prev_reg32 = 0;
4439 prev_reg33 = 0;
4440 prev_reg34 = 0;
4441 prev_reg35 = 0;
4442 prev_reg36 = 0;
4443 prev_reg37 = 0;
4444 prev_reg38 = 0;
4445 prev_reg39 = 0;
4446 prev_reg40 = 0;
4447 prev_reg41 = 0;
4448 prev_reg42 = 0;
4449 prev_reg43 = 0;
4450 prev_reg44 = 0;
4451 prev_reg45 = 0;
4452 prev_reg46 = 0;
4453 prev_reg47 = 0;
4454 prev_reg48 = 0;
4455 prev_reg49 = 0;
4456 prev_reg50 = 0;
4457 prev_reg51 = 0;
4458 prev_reg52 = 0;
4459 prev_reg53 = 0;
4460 prev_reg54 = 0;
4461 prev_reg55 = 0;
4462 prev_reg56 = 0;
4463 prev_reg57 = 0;
4464 prev_reg58 = 0;
4465 prev_reg59 = 0;
4466 prev_reg60 = 0;
4467 prev_reg61 = 0;
4468 prev_reg62 = 0;
4469 prev_reg63 = 0;
4470 prev_reg64 = 0;
4471 prev_reg65 = 0;
4472 prev_reg66 = 0;
4473 prev_reg67 = 0;
4474 prev_reg68 = 0;
4475 prev_reg69 = 0;
4476 prev_reg70 = 0;
4477 prev_reg71 = 0;
4478 prev_reg72 = 0;
4479 prev_reg73 = 0;
4480 prev_reg74 = 0;
4481 prev_reg75 = 0;
4482 prev_reg76 = 0;
4483 prev_reg77 = 0;
4484 prev_reg78 = 0;
4485 prev_reg79 = 0;
4486 prev_reg80 = 0;
4487 prev_reg81 = 0;
4488 prev_reg82 = 0;
4489 prev_reg83 = 0;
4490 prev_reg84 = 0;
4491 prev_reg85 = 0;
4492 prev_reg86 = 0;
4493 prev_reg87 = 0;
4494 prev_reg88 = 0;
4495 prev_reg89 = 0;
4496 prev_reg90 = 0;
4497 prev_reg91 = 0;
4498 prev_reg92 = 0;
4499 prev_reg93 = 0;
4500 prev_reg94 = 0;
4501 prev_reg95 = 0;
4502 prev_reg96 = 0;
4503 prev_reg97 = 0;
4504 prev_reg98 = 0;
4505 prev_reg99 = 0;
4506 prev_reg100 = 0;
4507 prev_reg101 = 0;
4508 prev_reg102 = 0;
4509 prev_reg103 = 0;
4510 prev_reg104 = 0;
4511 prev_reg105 = 0;
4512 prev_reg106 = 0;
4513 prev_reg107 = 0;
4514 prev_reg108 = 0;
4515 prev_reg109 = 0;
4516 prev_reg110 = 0;
4517 prev_reg111 = 0;
4518 prev_reg112 = 0;
4519 prev_reg113 = 0;
4520 prev_reg114 = 0;
4521 prev_reg115 = 0;
4522 prev_reg116 = 0;
4523 prev_reg117 = 0;
4524 prev_reg118 = 0;
4525 prev_reg119 = 0;
4526 prev_reg120 = 0;
4527 prev_reg121 = 0;
4528 prev_reg122 = 0;
4529 prev_reg123 = 0;
4530 prev_reg124 = 0;
4531 prev_reg125 = 0;
4532 prev_reg126 = 0;
4533 prev_reg127 = 0;
4534 prev_reg128 = 0;
4535 prev_reg129 = 0;
4536 prev_reg130 = 0;
4537 prev_reg131 = 0;
4538 prev_reg132 = 0;
4539 prev_reg133 = 0;
4540 prev_reg134 = 0;
4541 prev_reg135 = 0;
4542 prev_reg136 = 0;
4543 prev_reg137 = 0;
4544 prev_reg138 = 0;
4545 prev_reg139 = 0;
4546 prev_reg140 = 0;
4547 prev_reg141 = 0;
4548 prev_reg142 = 0;
4549 prev_reg143 = 0;
4550 prev_reg144 = 0;
4551 prev_reg145 = 0;
4552 prev_reg146 = 0;
4553 prev_reg147 = 0;
4554 prev_reg148 = 0;
4555 prev_reg149 = 0;
4556 prev_reg150 = 0;
4557 prev_reg151 = 0;
4558 prev_reg152 = 0;
4559 prev_reg153 = 0;
4560 prev_reg154 = 0;
4561 prev_reg155 = 0;
4562 prev_reg156 = 0;
4563 prev_reg157 = 0;
4564 prev_reg158 = 0;
4565 prev_reg159 = 0;
4566 prev_reg160 = 0;
4567 prev_reg161 = 0;
4568 prev_reg162 = 0;
4569 prev_reg163 = 0;
4570 prev_reg164 = 0;
4571 prev_reg165 = 0;
4572 prev_reg166 = 0;
4573 prev_reg167 = 0;
4574 prev_reg168 = 0;
4575 prev_reg169 = 0;
4576 prev_reg170 = 0;
4577 prev_reg171 = 0;
4578 prev_reg172 = 0;
4579 prev_reg173 = 0;
4580 prev_reg174 = 0;
4581 prev_reg175 = 0;
4582 prev_reg176 = 0;
4583 prev_reg177 = 0;
4584 prev_reg178 = 0;
4585 prev_reg179 = 0;
4586 prev_reg180 = 0;
4587 prev_reg181 = 0;
4588 prev_reg182 = 0;
4589 prev_reg183 = 0;
4590 prev_reg184 = 0;
4591 prev_reg185 = 0;
4592 prev_reg186 = 0;
4593 prev_reg187 = 0;
4594 prev_reg188 = 0;
4595 prev_reg189 = 0;
4596 prev_reg190 = 0;
4597 prev_reg191 = 0;
4598 prev_reg192 = 0;
4599 prev_reg193 = 0;
4600 prev_reg194 = 0;
4601 prev_reg195 = 0;
4602 prev_reg196 = 0;
4603 prev_reg197 = 0;
4604 prev_reg198 = 0;
4605 prev_reg199 = 0;
4606 prev_reg200 = 0;
4607 prev_reg201 = 0;
4608 prev_reg202 = 0;
4609 prev_reg203 = 0;
4610 prev_reg204 = 0;
4611 prev_reg205 = 0;
4612 prev_reg206 = 0;
4613 prev_reg207 = 0;
4614 prev_reg208 = 0;
4615 prev_reg209 = 0;
4616 prev_reg210 = 0;
4617 prev_reg211 = 0;
4618 prev_reg212 = 0;
4619 prev_reg213 = 0;
4620 prev_reg214 = 0;
4621 prev_reg215 = 0;
4622 prev_reg216 = 0;
4623 prev_reg217 = 0;
4624 prev_reg218 = 0;
4625 prev_reg219 = 0;
4626 prev_reg220 = 0;
4627 prev_reg221 = 0;
4628 prev_reg222 = 0;
4629 prev_reg223 = 0;
4630 prev_reg224 = 0;
4631 prev_reg225 = 0;
4632 prev_reg226 = 0;
4633 prev_reg227 = 0;
4634 prev_reg228 = 0;
4635 prev_reg229 = 0;
4636 prev_reg230 = 0;
4637 prev_reg231 = 0;
4638 prev_reg232 = 0;
4639 prev_reg233 = 0;
4640 prev_reg234 = 0;
4641 prev_reg235 = 0;
4642 prev_reg236 = 0;
4643 prev_reg237 = 0;
4644 prev_reg238 = 0;
4645 prev_reg239 = 0;
4646 prev_reg240 = 0;
4647 prev_reg241 = 0;
4648 prev_reg242 = 0;
4649 prev_reg243 = 0;
4650 prev_reg244 = 0;
4651 prev_reg245 = 0;
4652 prev_reg246 = 0;
4653 prev_reg247 = 0;
4654 prev_reg248 = 0;
4655 prev_reg249 = 0;
4656 prev_reg250 = 0;
4657 prev_reg251 = 0;
4658 prev_reg252 = 0;
4659 prev_reg253 = 0;
4660 prev_reg254 = 0;
4661 prev_reg255 = 0;
4662
4663 // POR for control registers
4664 write_prev(`FPRS +`CTL_OFFSET,3'h4);
4665 write_prev(`CLEANWIN +`CTL_OFFSET,3'h7);
4666 write_prev(`CANSAVE +`CTL_OFFSET,3'h6);
4667
4668 // POR for FPRS = 0x4
4669 write_prev(`FPRS+`CTL_OFFSET,3'h4);
4670
4671 // POR for PSTATE = 0x14 (PEF, PRIV = 1)
4672 write_prev(`PSTATE + `CTL_OFFSET,'h14);
4673
4674 // POR for HPSTATE = 0x4034 (RED, HPRIV = 1)
4675 write_prev(`HPSTATE + `CTL_OFFSET,'h24);
4676
4677 // POR for TL = = 0x6 [MAXTL]
4678 write_prev(`TL + `CTL_OFFSET,'h6);
4679
4680 // POR for TT6 = = 1
4681 write_prev(`TT6 + `CTL_OFFSET,'h1);
4682
4683 // POR for GL = MAXGL = 3
4684 write_prev(`GL + `CTL_OFFSET,`POR_GL);
4685
4686 // POR for VER = {003e, 0024, 01, 0036, 07}
4687 write_prev(`VER + `CTL_OFFSET,{32'h003e0024,VER_reg[31:24],24'h030607});
4688
4689 // POR for *_cmpr registers is INT_DIS = 1
4690 write_prev(`TICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
4691 write_prev(`STICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
4692 write_prev(`HSTICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
4693
4694 // Need to define so that 1st instruction will print correctly
4695 write_prev(`PC+`CTL_OFFSET,`POR_PC);
4696
4697 first_op = 1;
4698 pc_last = `BAD_PC;
4699
4700 `ifndef EMUL_TL
4701 delta_prev[`PC_INDEX] = `BAD_PC;
4702 `endif
4703
4704 irf_offset = (mytid%4)*32;
4705 in_wmr = 0;
4706 wmr <= 0;
4707end
4708
4709//----------------------------------------------------------
4710task wmr_prev;
4711 begin // {
4712
4713 // For WMR, we will set to 0x0, so that initial deltas
4714
4715 //
4716
4717 // WMR for PSTATE = 0x14 (PEF, PRIV = 1)
4718 // write_prev(`PSTATE + `CTL_OFFSET,'h00);
4719
4720 // WMR for HPSTATE = 0x4034 (RED, HPRIV = 1)
4721 // write_prev(`HPSTATE + `CTL_OFFSET,'h00);
4722
4723 // WMR for TL = = 0x6 [MAXTL]
4724 // write_prev(`TL + `CTL_OFFSET,'h0);
4725
4726 // WMR for TT6 = = 1
4727 // write_prev(`TT6 + `CTL_OFFSET,'h1);
4728
4729 // WMR for GL = MAXGL = 3
4730 // write_prev(`GL + `CTL_OFFSET,0);
4731
4732 end // }
4733endtask
4734
4735//----------------------------------------------------------
4736task por_prev;
4737 begin // {
4738
4739 // For POR, we will set to 0x0, so that initial deltas
4740 // and prev state are all consistent with DUT. No values
4741 // are preserved
4742
4743 `PR_ALWAYS ("arg", `ALWAYS,"T%0d Resetting Nas Pipe states for POR ..",mytnum);
4744 delta_fx4[`NEXT_INDEX] <= `FIRST_INDEX;
4745 delta_fx4[`FIRST_INDEX] <= 77'hx;
4746 delta_fx5[`NEXT_INDEX] <= `FIRST_INDEX;
4747 delta_fb[`NEXT_INDEX] <= `FIRST_INDEX;
4748 delta_fw[`NEXT_INDEX] <= `FIRST_INDEX;
4749 delta_fw1[`NEXT_INDEX] <= `FIRST_INDEX;
4750 delta_fw2[`NEXT_INDEX] <= `FIRST_INDEX;
4751 // Window registers
4752 win0_reg8 = 0;
4753 win1_reg8 = 0;
4754 win2_reg8 = 0;
4755 win3_reg8 = 0;
4756 win4_reg8 = 0;
4757 win5_reg8 = 0;
4758 win6_reg8 = 0;
4759 win7_reg8 = 0;
4760 win0_reg9 = 0;
4761 win1_reg9 = 0;
4762 win2_reg9 = 0;
4763 win3_reg9 = 0;
4764 win4_reg9 = 0;
4765 win5_reg9 = 0;
4766 win6_reg9 = 0;
4767 win7_reg9 = 0;
4768 win0_reg10 = 0;
4769 win1_reg10 = 0;
4770 win2_reg10 = 0;
4771 win3_reg10 = 0;
4772 win4_reg10 = 0;
4773 win5_reg10 = 0;
4774 win6_reg10 = 0;
4775 win7_reg10 = 0;
4776 win0_reg11 = 0;
4777 win1_reg11 = 0;
4778 win2_reg11 = 0;
4779 win3_reg11 = 0;
4780 win4_reg11 = 0;
4781 win5_reg11 = 0;
4782 win6_reg11 = 0;
4783 win7_reg11 = 0;
4784 win0_reg12 = 0;
4785 win1_reg12 = 0;
4786 win2_reg12 = 0;
4787 win3_reg12 = 0;
4788 win4_reg12 = 0;
4789 win5_reg12 = 0;
4790 win6_reg12 = 0;
4791 win7_reg12 = 0;
4792 win0_reg13 = 0;
4793 win1_reg13 = 0;
4794 win2_reg13 = 0;
4795 win3_reg13 = 0;
4796 win4_reg13 = 0;
4797 win5_reg13 = 0;
4798 win6_reg13 = 0;
4799 win7_reg13 = 0;
4800 win0_reg14 = 0;
4801 win1_reg14 = 0;
4802 win2_reg14 = 0;
4803 win3_reg14 = 0;
4804 win4_reg14 = 0;
4805 win5_reg14 = 0;
4806 win6_reg14 = 0;
4807 win7_reg14 = 0;
4808 win0_reg15 = 0;
4809 win1_reg15 = 0;
4810 win2_reg15 = 0;
4811 win3_reg15 = 0;
4812 win4_reg15 = 0;
4813 win5_reg15 = 0;
4814 win6_reg15 = 0;
4815 win7_reg15 = 0;
4816 win0_reg16 = 0;
4817 win1_reg16 = 0;
4818 win2_reg16 = 0;
4819 win3_reg16 = 0;
4820 win4_reg16 = 0;
4821 win5_reg16 = 0;
4822 win6_reg16 = 0;
4823 win7_reg16 = 0;
4824 win0_reg17 = 0;
4825 win1_reg17 = 0;
4826 win2_reg17 = 0;
4827 win3_reg17 = 0;
4828 win4_reg17 = 0;
4829 win5_reg17 = 0;
4830 win6_reg17 = 0;
4831 win7_reg17 = 0;
4832 win0_reg18 = 0;
4833 win1_reg18 = 0;
4834 win2_reg18 = 0;
4835 win3_reg18 = 0;
4836 win4_reg18 = 0;
4837 win5_reg18 = 0;
4838 win6_reg18 = 0;
4839 win7_reg18 = 0;
4840 win0_reg19 = 0;
4841 win1_reg19 = 0;
4842 win2_reg19 = 0;
4843 win3_reg19 = 0;
4844 win4_reg19 = 0;
4845 win5_reg19 = 0;
4846 win6_reg19 = 0;
4847 win7_reg19 = 0;
4848 win0_reg20 = 0;
4849 win1_reg20 = 0;
4850 win2_reg20 = 0;
4851 win3_reg20 = 0;
4852 win4_reg20 = 0;
4853 win5_reg20 = 0;
4854 win6_reg20 = 0;
4855 win7_reg20 = 0;
4856 win0_reg21 = 0;
4857 win1_reg21 = 0;
4858 win2_reg21 = 0;
4859 win3_reg21 = 0;
4860 win4_reg21 = 0;
4861 win5_reg21 = 0;
4862 win6_reg21 = 0;
4863 win7_reg21 = 0;
4864 win0_reg22 = 0;
4865 win1_reg22 = 0;
4866 win2_reg22 = 0;
4867 win3_reg22 = 0;
4868 win4_reg22 = 0;
4869 win5_reg22 = 0;
4870 win6_reg22 = 0;
4871 win7_reg22 = 0;
4872 win0_reg23 = 0;
4873 win1_reg23 = 0;
4874 win2_reg23 = 0;
4875 win3_reg23 = 0;
4876 win4_reg23 = 0;
4877 win5_reg23 = 0;
4878 win6_reg23 = 0;
4879 win7_reg23 = 0;
4880 win0_reg24 = 0;
4881 win1_reg24 = 0;
4882 win2_reg24 = 0;
4883 win3_reg24 = 0;
4884 win4_reg24 = 0;
4885 win5_reg24 = 0;
4886 win6_reg24 = 0;
4887 win7_reg24 = 0;
4888 win0_reg25 = 0;
4889 win1_reg25 = 0;
4890 win2_reg25 = 0;
4891 win3_reg25 = 0;
4892 win4_reg25 = 0;
4893 win5_reg25 = 0;
4894 win6_reg25 = 0;
4895 win7_reg25 = 0;
4896 win0_reg26 = 0;
4897 win1_reg26 = 0;
4898 win2_reg26 = 0;
4899 win3_reg26 = 0;
4900 win4_reg26 = 0;
4901 win5_reg26 = 0;
4902 win6_reg26 = 0;
4903 win7_reg26 = 0;
4904 win0_reg27 = 0;
4905 win1_reg27 = 0;
4906 win2_reg27 = 0;
4907 win3_reg27 = 0;
4908 win4_reg27 = 0;
4909 win5_reg27 = 0;
4910 win6_reg27 = 0;
4911 win7_reg27 = 0;
4912 win0_reg28 = 0;
4913 win1_reg28 = 0;
4914 win2_reg28 = 0;
4915 win3_reg28 = 0;
4916 win4_reg28 = 0;
4917 win5_reg28 = 0;
4918 win6_reg28 = 0;
4919 win7_reg28 = 0;
4920 win0_reg29 = 0;
4921 win1_reg29 = 0;
4922 win2_reg29 = 0;
4923 win3_reg29 = 0;
4924 win4_reg29 = 0;
4925 win5_reg29 = 0;
4926 win6_reg29 = 0;
4927 win7_reg29 = 0;
4928 win0_reg30 = 0;
4929 win1_reg30 = 0;
4930 win2_reg30 = 0;
4931 win3_reg30 = 0;
4932 win4_reg30 = 0;
4933 win5_reg30 = 0;
4934 win6_reg30 = 0;
4935 win7_reg30 = 0;
4936 win0_reg31 = 0;
4937 win1_reg31 = 0;
4938 win2_reg31 = 0;
4939 win3_reg31 = 0;
4940 win4_reg31 = 0;
4941 win5_reg31 = 0;
4942 win6_reg31 = 0;
4943 win7_reg31 = 0;
4944
4945 // Global registers
4946 th_gl = `POR_GL;
4947 gl0_reg0 = 0;
4948 gl1_reg0 = 0;
4949 gl2_reg0 = 0;
4950 gl3_reg0 = 0;
4951 gl0_reg1 = 0;
4952 gl1_reg1 = 0;
4953 gl2_reg1 = 0;
4954 gl3_reg1 = 0;
4955 gl0_reg2 = 0;
4956 gl1_reg2 = 0;
4957 gl2_reg2 = 0;
4958 gl3_reg2 = 0;
4959 gl0_reg3 = 0;
4960 gl1_reg3 = 0;
4961 gl2_reg3 = 0;
4962 gl3_reg3 = 0;
4963 gl0_reg4 = 0;
4964 gl1_reg4 = 0;
4965 gl2_reg4 = 0;
4966 gl3_reg4 = 0;
4967 gl0_reg5 = 0;
4968 gl1_reg5 = 0;
4969 gl2_reg5 = 0;
4970 gl3_reg5 = 0;
4971 gl0_reg6 = 0;
4972 gl1_reg6 = 0;
4973 gl2_reg6 = 0;
4974 gl3_reg6 = 0;
4975 gl0_reg7 = 0;
4976 gl1_reg7 = 0;
4977 gl2_reg7 = 0;
4978 gl3_reg7 = 0;
4979
4980 `PR_INFO ("nas", `INFO, "T%0d Init shadow registers.",mytnum);
4981 prev_reg0 = 0;
4982 prev_reg1 = 0;
4983 prev_reg2 = 0;
4984 prev_reg3 = 0;
4985 prev_reg4 = 0;
4986 prev_reg5 = 0;
4987 prev_reg6 = 0;
4988 prev_reg7 = 0;
4989 prev_reg8 = 0;
4990 prev_reg9 = 0;
4991 prev_reg10 = 0;
4992 prev_reg11 = 0;
4993 prev_reg12 = 0;
4994 prev_reg13 = 0;
4995 prev_reg14 = 0;
4996 prev_reg15 = 0;
4997 prev_reg16 = 0;
4998 prev_reg17 = 0;
4999 prev_reg18 = 0;
5000 prev_reg19 = 0;
5001 prev_reg20 = 0;
5002 prev_reg21 = 0;
5003 prev_reg22 = 0;
5004 prev_reg23 = 0;
5005 prev_reg24 = 0;
5006 prev_reg25 = 0;
5007 prev_reg26 = 0;
5008 prev_reg27 = 0;
5009 prev_reg28 = 0;
5010 prev_reg29 = 0;
5011 prev_reg30 = 0;
5012 prev_reg31 = 0;
5013 prev_reg32 = 0;
5014 prev_reg33 = 0;
5015 prev_reg34 = 0;
5016 prev_reg35 = 0;
5017 prev_reg36 = 0;
5018 prev_reg37 = 0;
5019 prev_reg38 = 0;
5020 prev_reg39 = 0;
5021 prev_reg40 = 0;
5022 prev_reg41 = 0;
5023 prev_reg42 = 0;
5024 prev_reg43 = 0;
5025 prev_reg44 = 0;
5026 prev_reg45 = 0;
5027 prev_reg46 = 0;
5028 prev_reg47 = 0;
5029 prev_reg48 = 0;
5030 prev_reg49 = 0;
5031 prev_reg50 = 0;
5032 prev_reg51 = 0;
5033 prev_reg52 = 0;
5034 prev_reg53 = 0;
5035 prev_reg54 = 0;
5036 prev_reg55 = 0;
5037 prev_reg56 = 0;
5038 prev_reg57 = 0;
5039 prev_reg58 = 0;
5040 prev_reg59 = 0;
5041 prev_reg60 = 0;
5042 prev_reg61 = 0;
5043 prev_reg62 = 0;
5044 prev_reg63 = 0;
5045 prev_reg64 = 0;
5046 prev_reg65 = 0;
5047 prev_reg66 = 0;
5048 prev_reg67 = 0;
5049 prev_reg68 = 0;
5050 prev_reg69 = 0;
5051 prev_reg70 = 0;
5052 prev_reg71 = 0;
5053 prev_reg72 = 0;
5054 prev_reg73 = 0;
5055 prev_reg74 = 0;
5056 prev_reg75 = 0;
5057 prev_reg76 = 0;
5058 prev_reg77 = 0;
5059 prev_reg78 = 0;
5060 prev_reg79 = 0;
5061 prev_reg80 = 0;
5062 prev_reg81 = 0;
5063 prev_reg82 = 0;
5064 prev_reg83 = 0;
5065 prev_reg84 = 0;
5066 prev_reg85 = 0;
5067 prev_reg86 = 0;
5068 prev_reg87 = 0;
5069 prev_reg88 = 0;
5070 prev_reg89 = 0;
5071 prev_reg90 = 0;
5072 prev_reg91 = 0;
5073 prev_reg92 = 0;
5074 prev_reg93 = 0;
5075 prev_reg94 = 0;
5076 prev_reg95 = 0;
5077 prev_reg96 = 0;
5078 prev_reg97 = 0;
5079 prev_reg98 = 0;
5080 prev_reg99 = 0;
5081 prev_reg100 = 0;
5082 prev_reg101 = 0;
5083 prev_reg102 = 0;
5084 prev_reg103 = 0;
5085 prev_reg104 = 0;
5086 prev_reg105 = 0;
5087 prev_reg106 = 0;
5088 prev_reg107 = 0;
5089 prev_reg108 = 0;
5090 prev_reg109 = 0;
5091 prev_reg110 = 0;
5092 prev_reg111 = 0;
5093 prev_reg112 = 0;
5094 prev_reg113 = 0;
5095 prev_reg114 = 0;
5096 prev_reg115 = 0;
5097 prev_reg116 = 0;
5098 prev_reg117 = 0;
5099 prev_reg118 = 0;
5100 prev_reg119 = 0;
5101 prev_reg120 = 0;
5102 prev_reg121 = 0;
5103 prev_reg122 = 0;
5104 prev_reg123 = 0;
5105 prev_reg124 = 0;
5106 prev_reg125 = 0;
5107 prev_reg126 = 0;
5108 prev_reg127 = 0;
5109 prev_reg128 = 0;
5110 prev_reg129 = 0;
5111 prev_reg130 = 0;
5112 prev_reg131 = 0;
5113 prev_reg132 = 0;
5114 prev_reg133 = 0;
5115 prev_reg134 = 0;
5116 prev_reg135 = 0;
5117 prev_reg136 = 0;
5118 prev_reg137 = 0;
5119 prev_reg138 = 0;
5120 prev_reg139 = 0;
5121 prev_reg140 = 0;
5122 prev_reg141 = 0;
5123 prev_reg142 = 0;
5124 prev_reg143 = 0;
5125 prev_reg144 = 0;
5126 prev_reg145 = 0;
5127 prev_reg146 = 0;
5128 prev_reg147 = 0;
5129 prev_reg148 = 0;
5130 prev_reg149 = 0;
5131 prev_reg150 = 0;
5132 prev_reg151 = 0;
5133 prev_reg152 = 0;
5134 prev_reg153 = 0;
5135 prev_reg154 = 0;
5136 prev_reg155 = 0;
5137 prev_reg156 = 0;
5138 prev_reg157 = 0;
5139 prev_reg158 = 0;
5140 prev_reg159 = 0;
5141 prev_reg160 = 0;
5142 prev_reg161 = 0;
5143 prev_reg162 = 0;
5144 prev_reg163 = 0;
5145 prev_reg164 = 0;
5146 prev_reg165 = 0;
5147 prev_reg166 = 0;
5148 prev_reg167 = 0;
5149 prev_reg168 = 0;
5150 prev_reg169 = 0;
5151 prev_reg170 = 0;
5152 prev_reg171 = 0;
5153 prev_reg172 = 0;
5154 prev_reg173 = 0;
5155 prev_reg174 = 0;
5156 prev_reg175 = 0;
5157 prev_reg176 = 0;
5158 prev_reg177 = 0;
5159 prev_reg178 = 0;
5160 prev_reg179 = 0;
5161 prev_reg180 = 0;
5162 prev_reg181 = 0;
5163 prev_reg182 = 0;
5164 prev_reg183 = 0;
5165 prev_reg184 = 0;
5166 prev_reg185 = 0;
5167 prev_reg186 = 0;
5168 prev_reg187 = 0;
5169 prev_reg188 = 0;
5170 prev_reg189 = 0;
5171 prev_reg190 = 0;
5172 prev_reg191 = 0;
5173 prev_reg192 = 0;
5174 prev_reg193 = 0;
5175 prev_reg194 = 0;
5176 prev_reg195 = 0;
5177 prev_reg196 = 0;
5178 prev_reg197 = 0;
5179 prev_reg198 = 0;
5180 prev_reg199 = 0;
5181 prev_reg200 = 0;
5182 prev_reg201 = 0;
5183 prev_reg202 = 0;
5184 prev_reg203 = 0;
5185 prev_reg204 = 0;
5186 prev_reg205 = 0;
5187 prev_reg206 = 0;
5188 prev_reg207 = 0;
5189 prev_reg208 = 0;
5190 prev_reg209 = 0;
5191 prev_reg210 = 0;
5192 prev_reg211 = 0;
5193 prev_reg212 = 0;
5194 prev_reg213 = 0;
5195 prev_reg214 = 0;
5196 prev_reg215 = 0;
5197 prev_reg216 = 0;
5198 prev_reg217 = 0;
5199 prev_reg218 = 0;
5200 prev_reg219 = 0;
5201 prev_reg220 = 0;
5202 prev_reg221 = 0;
5203 prev_reg222 = 0;
5204 prev_reg223 = 0;
5205 prev_reg224 = 0;
5206 prev_reg225 = 0;
5207 prev_reg226 = 0;
5208 prev_reg227 = 0;
5209 prev_reg228 = 0;
5210 prev_reg229 = 0;
5211 prev_reg230 = 0;
5212 prev_reg231 = 0;
5213 prev_reg232 = 0;
5214 prev_reg233 = 0;
5215 prev_reg234 = 0;
5216 prev_reg235 = 0;
5217 prev_reg236 = 0;
5218 prev_reg237 = 0;
5219 prev_reg238 = 0;
5220 prev_reg239 = 0;
5221 prev_reg240 = 0;
5222 prev_reg241 = 0;
5223 prev_reg242 = 0;
5224 prev_reg243 = 0;
5225 prev_reg244 = 0;
5226 prev_reg245 = 0;
5227 prev_reg246 = 0;
5228 prev_reg247 = 0;
5229 prev_reg248 = 0;
5230 prev_reg249 = 0;
5231 prev_reg250 = 0;
5232 prev_reg251 = 0;
5233 prev_reg252 = 0;
5234 prev_reg253 = 0;
5235 prev_reg254 = 0;
5236 prev_reg255 = 0;
5237
5238 // POR for control registers
5239 write_prev(`FPRS +`CTL_OFFSET,3'h4);
5240 write_prev(`CLEANWIN +`CTL_OFFSET,3'h7);
5241 write_prev(`CANSAVE +`CTL_OFFSET,3'h6);
5242
5243 // POR for FPRS = 0x4
5244 write_prev(`FPRS+`CTL_OFFSET,3'h4);
5245
5246 // POR for PSTATE = 0x14 (PEF, PRIV = 1)
5247 write_prev(`PSTATE + `CTL_OFFSET,'h14);
5248
5249 // POR for HPSTATE = 0x4034 (RED, HPRIV = 1)
5250 write_prev(`HPSTATE + `CTL_OFFSET,'h24);
5251
5252 // POR for TL = = 0x6 [MAXTL]
5253 write_prev(`TL + `CTL_OFFSET,'h6);
5254
5255 // POR for TT6 = = 1
5256 write_prev(`TT6 + `CTL_OFFSET,'h1);
5257
5258 // POR for GL = MAXGL = 3
5259 write_prev(`GL + `CTL_OFFSET,`POR_GL);
5260
5261 // POR for VER = {003e, 0024, 01, 0036, 07}
5262 write_prev(`VER + `CTL_OFFSET,64'h003e002410030607);
5263
5264 // POR for *_cmpr registers is INT_DIS = 1
5265 write_prev(`TICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
5266 write_prev(`STICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
5267 write_prev(`HSTICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
5268
5269 // Need to define so that 1st instruction will print correctly
5270 write_prev(`PC+`CTL_OFFSET,`POR_PC);
5271
5272 first_op = 1;
5273 pc_last = `BAD_PC;
5274
5275 end // }
5276endtask
5277
5278//----------------------------------------------------------
5279//----------------------------------------------------------
5280 `else // GATESIM
5281
5282// Watch for Good/Bad trap
5283
5284wire [5:0] mytnum = (mycid*8)+mytid;
5285wire mytg = mytid >> 2;
5286integer junk;
5287reg nas_pipe_enable;
5288
5289integer inst_count;
5290
5291 // Delimiter changes whether flat or hierarchical netlist
5292 `ifdef GATES_FLAT
5293 wire myclk = tb_top.cpu.spc0.gclk;
5294 wire dec_inst_valid_m = mytg ? tb_top.cpu.spc0.dec_inst_valid_m[1] : tb_top.cpu.spc0.dec_inst_valid_m[0];
5295 wire [1:0] dec_tid_m = mytg ? tb_top.cpu.spc0.dec_tid1_m : tb_top.cpu.spc0.dec_tid0_m;
5296 wire dec_flush_b = mytg ? tb_top.cpu.spc0.dec_flush_b[1] : tb_top.cpu.spc0.dec_flush_b[0];
5297 wire tlu_flush_ifu = tb_top.cpu.spc0.tlu_flush_ifu[mytid];
5298 wire [47:0] pc_d = mytg ? {tb_top.cpu.spc0.tlu_pc_1_d[47:2],2'b0} : {tb_top.cpu.spc0.tlu_pc_0_d[47:2],2'b0};
5299 wire [31:0] op_d = mytg ? tb_top.cpu.spc0.dec_inst1_d[31:0] : tb_top.cpu.spc0.dec_inst0_d[31:0];
5300 `else
5301 wire myclk = tb_top.cpu.spc0.gclk;
5302 wire dec_inst_valid_m = mytg ? tb_top.cpu.spc0.dec_inst_valid_m[1] : tb_top.cpu.spc0.dec_inst_valid_m[0];
5303 wire [1:0] dec_tid_m = mytg ? tb_top.cpu.spc0.dec_tid1_m : tb_top.cpu.spc0.dec_tid0_m;
5304 wire dec_flush_b = mytg ? tb_top.cpu.spc0.dec_flush_b[1] : tb_top.cpu.spc0.dec_flush_b[0];
5305 wire tlu_flush_ifu = tb_top.cpu.spc0.tlu_flush_ifu[mytid];
5306 wire [47:0] pc_d = mytg ? {tb_top.cpu.spc0.tlu_pc_1_d[47:2],2'b0} : {tb_top.cpu.spc0.tlu_pc_0_d[47:2],2'b0};
5307 wire [31:0] op_d = mytg ? tb_top.cpu.spc0.dec_inst1_d[31:0] : tb_top.cpu.spc0.dec_inst0_d[31:0];
5308 `endif
5309
5310 reg dec_inst_valid_b;
5311 reg [1:0] dec_tid_b;
5312
5313 reg inst_valid_w;
5314 reg inst_valid_fx4;
5315 reg inst_valid_fx5;
5316 reg inst_valid_fb;
5317 reg inst_valid_fw;
5318 reg inst_valid_fw1;
5319 reg inst_valid_fw2;
5320 reg [47:0] pc_e;
5321 reg [47:0] pc_m;
5322 reg [47:0] pc_b;
5323 reg [47:0] pc_w;
5324 reg [47:0] pc_fx4;
5325 reg [47:0] pc_fx5;
5326 reg [47:0] pc_fb;
5327 reg [47:0] pc_fw;
5328 reg [47:0] pc_fw1;
5329 reg [47:0] pc_fw2;
5330 reg [31:0] op_e;
5331 reg [31:0] op_m;
5332 reg [31:0] op_b;
5333 reg [31:0] op_w;
5334 reg [31:0] op_fx4;
5335 reg [31:0] op_fx5;
5336 reg [31:0] op_fb;
5337 reg [31:0] op_fw;
5338 reg [31:0] op_fw1;
5339 reg [31:0] op_fw2;
5340
5341 wire inst_valid_b = dec_inst_valid_b && (dec_tid_b==mytid[1:0]) && !(dec_flush_b || tlu_flush_ifu);
5342
5343initial begin // {
5344 inst_count = 1;
5345 nas_pipe_enable = 1;
5346end // }
5347
5348
5349always @ (posedge myclk) begin // {
5350
5351 dec_inst_valid_b <= dec_inst_valid_m;
5352 dec_tid_b <= dec_tid_m;
5353 op_e <= op_d;
5354 op_m <= op_e;
5355 op_b <= op_m;
5356 op_w <= op_b;
5357 op_fx4 <= op_w;
5358 op_fx5 <= op_fx4;
5359 op_fb <= op_fx5;
5360 op_fw <= op_fb;
5361 op_fw1 <= op_fw;
5362 op_fw2 <= op_fw1;
5363 pc_e <= pc_d;
5364 pc_m <= pc_e;
5365 pc_b <= pc_m;
5366 pc_w <= pc_b;
5367 pc_fx4 <= pc_w;
5368 pc_fx5 <= pc_fx4;
5369 pc_fb <= pc_fx5;
5370 pc_fw <= pc_fb;
5371 pc_fw1 <= pc_fw;
5372 pc_fw2 <= pc_fw1;
5373 inst_valid_w <= inst_valid_b;
5374 inst_valid_fx4 <= inst_valid_w;
5375 inst_valid_fx5 <= inst_valid_fx4;
5376 inst_valid_fb <= inst_valid_fx5;
5377 inst_valid_fw <= inst_valid_fb;
5378 inst_valid_fw1 <= inst_valid_fw;
5379 inst_valid_fw2 <= inst_valid_fw1;
5380
5381 if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable) begin // {
5382
5383 if (inst_valid_fw2) begin // {
5384
5385 // Print PC/opcode for debugging
5386 `PR_NORMAL ("nas", `NORMAL, "@%0d #%0d T%0d %h [%h]", $time, inst_count, mytnum, pc_fw2, op_fw2);
5387 inst_count = inst_count + 1;
5388
5389 //----------
5390 // End detection for GateSim runs
5391 for (junk=0;junk<`PARGS.bad_trap_count;junk=junk+1) begin // {
5392 if (({16'b0,pc_fw2}&`PC_MASK)===(`PARGS.bad_trap_addr[junk]&`PC_MASK)) begin // {
5393 `PR_ERROR ("nas",`ERROR, "T%0d reached Bad Trap [GATESIM]", mytnum);
5394 nas_pipe_enable = 1'b0;
5395 end //}
5396 end //}
5397 for (junk=0;junk<`PARGS.good_trap_count;junk=junk+1) begin // {
5398 if (({16'b0,pc_fw2}&`PC_MASK)===(`PARGS.good_trap_addr[junk]&`PC_MASK)) begin // {
5399 `TOP.finished_tids[mytnum] = 1'b1;
5400 `PARGS.th_check_enable[mytnum] = 1'b0;
5401 nas_pipe_enable = 1'b0;
5402 `PR_NORMAL ("nas", `NORMAL, "T%0d reached Good Trap. Disabling checking for thread %0d [GATESIM]", mytnum,mytnum);
5403 end //}
5404 end //}
5405
5406 end // }
5407 end // }
5408
5409end //}
5410
5411
5412`endif
5413
5414endmodule
5415//----------------------------------------------------------
5416//----------------------------------------------------------
5417
5418`endif
5419
5420
5421`ifdef CORE_1
5422
5423
5424module nas_pipe1 (
5425 mycid,
5426 mytid,
5427
5428 opcode,
5429 PC_reg,
5430 Y_reg,
5431 CCR_reg,
5432 FPRS_reg,
5433 FSR_reg,
5434 ASI_reg,
5435 GSR_reg,
5436 TICK_CMPR_reg,
5437 STICK_CMPR_reg,
5438 HSTICK_CMPR_reg,
5439 PSTATE_reg,
5440 TL_reg,
5441 PIL_reg,
5442 TBA_reg,
5443 VER_reg,
5444 CWP_reg,
5445 CANSAVE_reg,
5446 CANRESTORE_reg,
5447 OTHERWIN_reg,
5448 WSTATE_reg,
5449 CLEANWIN_reg,
5450 SOFTINT_reg,
5451 rd_SOFTINT_reg,
5452 INTR_RECEIVE_reg,
5453 GL_reg,
5454 HPSTATE_reg,
5455 HTBA_reg,
5456 HINTP_reg,
5457
5458 CTXT_PRIM_0_reg,
5459 CTXT_SEC_0_reg,
5460 CTXT_PRIM_1_reg,
5461 CTXT_SEC_1_reg,
5462 LSU_CONTROL_reg,
5463 I_TAG_ACC_reg,
5464 D_TAG_ACC_reg,
5465 WATCHPOINT_ADDR_reg,
5466 DSFAR_reg,
5467
5468 Trap_Entry_1,
5469 Trap_Entry_2,
5470 Trap_Entry_3,
5471 Trap_Entry_4,
5472 Trap_Entry_5,
5473 Trap_Entry_6,
5474
5475 exu_valid,
5476
5477 imul_valid,
5478
5479 frf_w2_valid,
5480 frf_w1_valid,
5481 frf_w1_tid,
5482 frf_w2_tid,
5483 frf_w1_addr,
5484 frf_w2_addr,
5485
5486 asi_valid,
5487 asi_in_progress,
5488
5489 fp_valid,
5490
5491 idiv_valid,
5492
5493 fdiv_valid,
5494
5495 lsu_valid,
5496
5497 tlu_valid
5498);
5499
5500//----------------------------------------------------------
5501input [2:0] mycid;
5502input [2:0] mytid;
5503
5504input [31:0] opcode;
5505input [47:0] PC_reg;
5506input [31:0] Y_reg;
5507input [7:0] CCR_reg;
5508input [2:0] FPRS_reg;
5509input [27:0] FSR_reg;
5510input [7:0] ASI_reg;
5511input [42:0] GSR_reg;
5512input [71:0] TICK_CMPR_reg;
5513input [71:0] STICK_CMPR_reg;
5514input [71:0] HSTICK_CMPR_reg;
5515input [12:0] PSTATE_reg;
5516input [2:0] TL_reg;
5517input [3:0] PIL_reg;
5518input [32:0] TBA_reg;
5519input [63:0] VER_reg;
5520input [2:0] CWP_reg;
5521input [2:0] CANSAVE_reg;
5522input [2:0] CANRESTORE_reg;
5523input [2:0] OTHERWIN_reg;
5524input [5:0] WSTATE_reg;
5525input [2:0] CLEANWIN_reg;
5526input [16:0] SOFTINT_reg;
5527input [16:0] rd_SOFTINT_reg;
5528input [63:0] INTR_RECEIVE_reg;
5529input [1:0] GL_reg;
5530input [12:0] HPSTATE_reg;
5531input [33:0] HTBA_reg;
5532input HINTP_reg;
5533
5534input [63:0] CTXT_PRIM_0_reg;
5535input [63:0] CTXT_SEC_0_reg;
5536input [63:0] CTXT_PRIM_1_reg;
5537input [63:0] CTXT_SEC_1_reg;
5538input [63:0] LSU_CONTROL_reg;
5539input [63:0] I_TAG_ACC_reg;
5540input [63:0] D_TAG_ACC_reg;
5541input [63:0] WATCHPOINT_ADDR_reg;
5542input [47:0] DSFAR_reg;
5543
5544input [151:0] Trap_Entry_1;
5545input [151:0] Trap_Entry_2;
5546input [151:0] Trap_Entry_3;
5547input [151:0] Trap_Entry_4;
5548input [151:0] Trap_Entry_5;
5549input [151:0] Trap_Entry_6;
5550
5551input exu_valid;
5552
5553input imul_valid;
5554
5555input [1:0] frf_w2_valid;
5556input [2:0] frf_w2_tid;
5557input [4:0] frf_w2_addr;
5558
5559input [1:0] frf_w1_valid;
5560input [2:0] frf_w1_tid;
5561input [4:0] frf_w1_addr;
5562
5563input asi_valid; // ASI/ASR/PR writes done ..
5564input asi_in_progress; // ASI/ASR/PR in progess
5565
5566input fp_valid;
5567
5568input idiv_valid;
5569
5570input fdiv_valid;
5571
5572input lsu_valid;
5573
5574input tlu_valid;
5575
5576`ifndef GATESIM
5577
5578//----------------------------------------------------------
5579// Register assignments
5580//----------------------------------------------------------
5581`include "nas_regs.v"
5582//----------------------------------------------------------
5583
5584wire exu_complete;
5585wire imul_complete;
5586wire idiv_complete;
5587wire tlu_complete;
5588wire fp_complete;
5589wire fdiv_complete;
5590wire lsu_complete;
5591wire asi_complete;
5592wire [7:0] complete_w;
5593reg [7:0] complete_fx4;
5594reg [7:0] complete_fx5;
5595reg [7:0] complete_fb;
5596reg [7:0] complete_fw;
5597reg [7:0] complete_fw1;
5598reg [7:0] complete_fw2;
5599
5600`ifndef EMUL_TL
5601// delta_* = {type(2bits),win(3bits),regnum(8bits),value(64bits)}
5602reg [`DELTA_WIDTH:0] delta_fx4 [0:(`MAX_INDEX)];
5603reg [`DELTA_WIDTH:0] delta_fx5 [0:(`MAX_INDEX)];
5604reg [`DELTA_WIDTH:0] delta_fb [0:(`MAX_INDEX)];
5605reg [`DELTA_WIDTH:0] delta_fw [0:(`MAX_INDEX)];
5606reg [`DELTA_WIDTH:0] delta_fw1 [0:(`MAX_INDEX)];
5607reg [`DELTA_WIDTH:0] delta_fw2 [0:(`MAX_INDEX)];
5608reg [`DELTA_WIDTH:0] delta_prev [0:(`MAX_INDEX)];
5609`endif
5610
5611reg [2:0] cwp_fx4;
5612reg [2:0] cwp_fx5;
5613reg [2:0] cwp_fb;
5614reg [2:0] cwp_fw;
5615reg [2:0] cwp_fw1;
5616reg [2:0] cwp_fw2;
5617reg [2:0] cwp_last;
5618
5619
5620// need to change in several places in this file
5621reg [63:0] prev_reg0; // includes G,W,C,F registers
5622reg [63:0] prev_reg1; // includes G,W,C,F registers
5623reg [63:0] prev_reg2; // includes G,W,C,F registers
5624reg [63:0] prev_reg3; // includes G,W,C,F registers
5625reg [63:0] prev_reg4; // includes G,W,C,F registers
5626reg [63:0] prev_reg5; // includes G,W,C,F registers
5627reg [63:0] prev_reg6; // includes G,W,C,F registers
5628reg [63:0] prev_reg7; // includes G,W,C,F registers
5629reg [63:0] prev_reg8; // includes G,W,C,F registers
5630reg [63:0] prev_reg9; // includes G,W,C,F registers
5631reg [63:0] prev_reg10; // includes G,W,C,F registers
5632reg [63:0] prev_reg11; // includes G,W,C,F registers
5633reg [63:0] prev_reg12; // includes G,W,C,F registers
5634reg [63:0] prev_reg13; // includes G,W,C,F registers
5635reg [63:0] prev_reg14; // includes G,W,C,F registers
5636reg [63:0] prev_reg15; // includes G,W,C,F registers
5637reg [63:0] prev_reg16; // includes G,W,C,F registers
5638reg [63:0] prev_reg17; // includes G,W,C,F registers
5639reg [63:0] prev_reg18; // includes G,W,C,F registers
5640reg [63:0] prev_reg19; // includes G,W,C,F registers
5641reg [63:0] prev_reg20; // includes G,W,C,F registers
5642reg [63:0] prev_reg21; // includes G,W,C,F registers
5643reg [63:0] prev_reg22; // includes G,W,C,F registers
5644reg [63:0] prev_reg23; // includes G,W,C,F registers
5645reg [63:0] prev_reg24; // includes G,W,C,F registers
5646reg [63:0] prev_reg25; // includes G,W,C,F registers
5647reg [63:0] prev_reg26; // includes G,W,C,F registers
5648reg [63:0] prev_reg27; // includes G,W,C,F registers
5649reg [63:0] prev_reg28; // includes G,W,C,F registers
5650reg [63:0] prev_reg29; // includes G,W,C,F registers
5651reg [63:0] prev_reg30; // includes G,W,C,F registers
5652reg [63:0] prev_reg31; // includes G,W,C,F registers
5653reg [63:0] prev_reg32; // includes G,W,C,F registers
5654reg [63:0] prev_reg33; // includes G,W,C,F registers
5655reg [63:0] prev_reg34; // includes G,W,C,F registers
5656reg [63:0] prev_reg35; // includes G,W,C,F registers
5657reg [63:0] prev_reg36; // includes G,W,C,F registers
5658reg [63:0] prev_reg37; // includes G,W,C,F registers
5659reg [63:0] prev_reg38; // includes G,W,C,F registers
5660reg [63:0] prev_reg39; // includes G,W,C,F registers
5661reg [63:0] prev_reg40; // includes G,W,C,F registers
5662reg [63:0] prev_reg41; // includes G,W,C,F registers
5663reg [63:0] prev_reg42; // includes G,W,C,F registers
5664reg [63:0] prev_reg43; // includes G,W,C,F registers
5665reg [63:0] prev_reg44; // includes G,W,C,F registers
5666reg [63:0] prev_reg45; // includes G,W,C,F registers
5667reg [63:0] prev_reg46; // includes G,W,C,F registers
5668reg [63:0] prev_reg47; // includes G,W,C,F registers
5669reg [63:0] prev_reg48; // includes G,W,C,F registers
5670reg [63:0] prev_reg49; // includes G,W,C,F registers
5671reg [63:0] prev_reg50; // includes G,W,C,F registers
5672reg [63:0] prev_reg51; // includes G,W,C,F registers
5673reg [63:0] prev_reg52; // includes G,W,C,F registers
5674reg [63:0] prev_reg53; // includes G,W,C,F registers
5675reg [63:0] prev_reg54; // includes G,W,C,F registers
5676reg [63:0] prev_reg55; // includes G,W,C,F registers
5677reg [63:0] prev_reg56; // includes G,W,C,F registers
5678reg [63:0] prev_reg57; // includes G,W,C,F registers
5679reg [63:0] prev_reg58; // includes G,W,C,F registers
5680reg [63:0] prev_reg59; // includes G,W,C,F registers
5681reg [63:0] prev_reg60; // includes G,W,C,F registers
5682reg [63:0] prev_reg61; // includes G,W,C,F registers
5683reg [63:0] prev_reg62; // includes G,W,C,F registers
5684reg [63:0] prev_reg63; // includes G,W,C,F registers
5685reg [63:0] prev_reg64; // includes G,W,C,F registers
5686reg [63:0] prev_reg65; // includes G,W,C,F registers
5687reg [63:0] prev_reg66; // includes G,W,C,F registers
5688reg [63:0] prev_reg67; // includes G,W,C,F registers
5689reg [63:0] prev_reg68; // includes G,W,C,F registers
5690reg [63:0] prev_reg69; // includes G,W,C,F registers
5691reg [63:0] prev_reg70; // includes G,W,C,F registers
5692reg [63:0] prev_reg71; // includes G,W,C,F registers
5693reg [63:0] prev_reg72; // includes G,W,C,F registers
5694reg [63:0] prev_reg73; // includes G,W,C,F registers
5695reg [63:0] prev_reg74; // includes G,W,C,F registers
5696reg [63:0] prev_reg75; // includes G,W,C,F registers
5697reg [63:0] prev_reg76; // includes G,W,C,F registers
5698reg [63:0] prev_reg77; // includes G,W,C,F registers
5699reg [63:0] prev_reg78; // includes G,W,C,F registers
5700reg [63:0] prev_reg79; // includes G,W,C,F registers
5701reg [63:0] prev_reg80; // includes G,W,C,F registers
5702reg [63:0] prev_reg81; // includes G,W,C,F registers
5703reg [63:0] prev_reg82; // includes G,W,C,F registers
5704reg [63:0] prev_reg83; // includes G,W,C,F registers
5705reg [63:0] prev_reg84; // includes G,W,C,F registers
5706reg [63:0] prev_reg85; // includes G,W,C,F registers
5707reg [63:0] prev_reg86; // includes G,W,C,F registers
5708reg [63:0] prev_reg87; // includes G,W,C,F registers
5709reg [63:0] prev_reg88; // includes G,W,C,F registers
5710reg [63:0] prev_reg89; // includes G,W,C,F registers
5711reg [63:0] prev_reg90; // includes G,W,C,F registers
5712reg [63:0] prev_reg91; // includes G,W,C,F registers
5713reg [63:0] prev_reg92; // includes G,W,C,F registers
5714reg [63:0] prev_reg93; // includes G,W,C,F registers
5715reg [63:0] prev_reg94; // includes G,W,C,F registers
5716reg [63:0] prev_reg95; // includes G,W,C,F registers
5717reg [63:0] prev_reg96; // includes G,W,C,F registers
5718reg [63:0] prev_reg97; // includes G,W,C,F registers
5719reg [63:0] prev_reg98; // includes G,W,C,F registers
5720reg [63:0] prev_reg99; // includes G,W,C,F registers
5721reg [63:0] prev_reg100; // includes G,W,C,F registers
5722reg [63:0] prev_reg101; // includes G,W,C,F registers
5723reg [63:0] prev_reg102; // includes G,W,C,F registers
5724reg [63:0] prev_reg103; // includes G,W,C,F registers
5725reg [63:0] prev_reg104; // includes G,W,C,F registers
5726reg [63:0] prev_reg105; // includes G,W,C,F registers
5727reg [63:0] prev_reg106; // includes G,W,C,F registers
5728reg [63:0] prev_reg107; // includes G,W,C,F registers
5729reg [63:0] prev_reg108; // includes G,W,C,F registers
5730reg [63:0] prev_reg109; // includes G,W,C,F registers
5731reg [63:0] prev_reg110; // includes G,W,C,F registers
5732reg [63:0] prev_reg111; // includes G,W,C,F registers
5733reg [63:0] prev_reg112; // includes G,W,C,F registers
5734reg [63:0] prev_reg113; // includes G,W,C,F registers
5735reg [63:0] prev_reg114; // includes G,W,C,F registers
5736reg [63:0] prev_reg115; // includes G,W,C,F registers
5737reg [63:0] prev_reg116; // includes G,W,C,F registers
5738reg [63:0] prev_reg117; // includes G,W,C,F registers
5739reg [63:0] prev_reg118; // includes G,W,C,F registers
5740reg [63:0] prev_reg119; // includes G,W,C,F registers
5741reg [63:0] prev_reg120; // includes G,W,C,F registers
5742reg [63:0] prev_reg121; // includes G,W,C,F registers
5743reg [63:0] prev_reg122; // includes G,W,C,F registers
5744reg [63:0] prev_reg123; // includes G,W,C,F registers
5745reg [63:0] prev_reg124; // includes G,W,C,F registers
5746reg [63:0] prev_reg125; // includes G,W,C,F registers
5747reg [63:0] prev_reg126; // includes G,W,C,F registers
5748reg [63:0] prev_reg127; // includes G,W,C,F registers
5749reg [63:0] prev_reg128; // includes G,W,C,F registers
5750reg [63:0] prev_reg129; // includes G,W,C,F registers
5751reg [63:0] prev_reg130; // includes G,W,C,F registers
5752reg [63:0] prev_reg131; // includes G,W,C,F registers
5753reg [63:0] prev_reg132; // includes G,W,C,F registers
5754reg [63:0] prev_reg133; // includes G,W,C,F registers
5755reg [63:0] prev_reg134; // includes G,W,C,F registers
5756reg [63:0] prev_reg135; // includes G,W,C,F registers
5757reg [63:0] prev_reg136; // includes G,W,C,F registers
5758reg [63:0] prev_reg137; // includes G,W,C,F registers
5759reg [63:0] prev_reg138; // includes G,W,C,F registers
5760reg [63:0] prev_reg139; // includes G,W,C,F registers
5761reg [63:0] prev_reg140; // includes G,W,C,F registers
5762reg [63:0] prev_reg141; // includes G,W,C,F registers
5763reg [63:0] prev_reg142; // includes G,W,C,F registers
5764reg [63:0] prev_reg143; // includes G,W,C,F registers
5765reg [63:0] prev_reg144; // includes G,W,C,F registers
5766reg [63:0] prev_reg145; // includes G,W,C,F registers
5767reg [63:0] prev_reg146; // includes G,W,C,F registers
5768reg [63:0] prev_reg147; // includes G,W,C,F registers
5769reg [63:0] prev_reg148; // includes G,W,C,F registers
5770reg [63:0] prev_reg149; // includes G,W,C,F registers
5771reg [63:0] prev_reg150; // includes G,W,C,F registers
5772reg [63:0] prev_reg151; // includes G,W,C,F registers
5773reg [63:0] prev_reg152; // includes G,W,C,F registers
5774reg [63:0] prev_reg153; // includes G,W,C,F registers
5775reg [63:0] prev_reg154; // includes G,W,C,F registers
5776reg [63:0] prev_reg155; // includes G,W,C,F registers
5777reg [63:0] prev_reg156; // includes G,W,C,F registers
5778reg [63:0] prev_reg157; // includes G,W,C,F registers
5779reg [63:0] prev_reg158; // includes G,W,C,F registers
5780reg [63:0] prev_reg159; // includes G,W,C,F registers
5781reg [63:0] prev_reg160; // includes G,W,C,F registers
5782reg [63:0] prev_reg161; // includes G,W,C,F registers
5783reg [63:0] prev_reg162; // includes G,W,C,F registers
5784reg [63:0] prev_reg163; // includes G,W,C,F registers
5785reg [63:0] prev_reg164; // includes G,W,C,F registers
5786reg [63:0] prev_reg165; // includes G,W,C,F registers
5787reg [63:0] prev_reg166; // includes G,W,C,F registers
5788reg [63:0] prev_reg167; // includes G,W,C,F registers
5789reg [63:0] prev_reg168; // includes G,W,C,F registers
5790reg [63:0] prev_reg169; // includes G,W,C,F registers
5791reg [63:0] prev_reg170; // includes G,W,C,F registers
5792reg [63:0] prev_reg171; // includes G,W,C,F registers
5793reg [63:0] prev_reg172; // includes G,W,C,F registers
5794reg [63:0] prev_reg173; // includes G,W,C,F registers
5795reg [63:0] prev_reg174; // includes G,W,C,F registers
5796reg [63:0] prev_reg175; // includes G,W,C,F registers
5797reg [63:0] prev_reg176; // includes G,W,C,F registers
5798reg [63:0] prev_reg177; // includes G,W,C,F registers
5799reg [63:0] prev_reg178; // includes G,W,C,F registers
5800reg [63:0] prev_reg179; // includes G,W,C,F registers
5801reg [63:0] prev_reg180; // includes G,W,C,F registers
5802reg [63:0] prev_reg181; // includes G,W,C,F registers
5803reg [63:0] prev_reg182; // includes G,W,C,F registers
5804reg [63:0] prev_reg183; // includes G,W,C,F registers
5805reg [63:0] prev_reg184; // includes G,W,C,F registers
5806reg [63:0] prev_reg185; // includes G,W,C,F registers
5807reg [63:0] prev_reg186; // includes G,W,C,F registers
5808reg [63:0] prev_reg187; // includes G,W,C,F registers
5809reg [63:0] prev_reg188; // includes G,W,C,F registers
5810reg [63:0] prev_reg189; // includes G,W,C,F registers
5811reg [63:0] prev_reg190; // includes G,W,C,F registers
5812reg [63:0] prev_reg191; // includes G,W,C,F registers
5813reg [63:0] prev_reg192; // includes G,W,C,F registers
5814reg [63:0] prev_reg193; // includes G,W,C,F registers
5815reg [63:0] prev_reg194; // includes G,W,C,F registers
5816reg [63:0] prev_reg195; // includes G,W,C,F registers
5817reg [63:0] prev_reg196; // includes G,W,C,F registers
5818reg [63:0] prev_reg197; // includes G,W,C,F registers
5819reg [63:0] prev_reg198; // includes G,W,C,F registers
5820reg [63:0] prev_reg199; // includes G,W,C,F registers
5821reg [63:0] prev_reg200; // includes G,W,C,F registers
5822reg [63:0] prev_reg201; // includes G,W,C,F registers
5823reg [63:0] prev_reg202; // includes G,W,C,F registers
5824reg [63:0] prev_reg203; // includes G,W,C,F registers
5825reg [63:0] prev_reg204; // includes G,W,C,F registers
5826reg [63:0] prev_reg205; // includes G,W,C,F registers
5827reg [63:0] prev_reg206; // includes G,W,C,F registers
5828reg [63:0] prev_reg207; // includes G,W,C,F registers
5829reg [63:0] prev_reg208; // includes G,W,C,F registers
5830reg [63:0] prev_reg209; // includes G,W,C,F registers
5831reg [63:0] prev_reg210; // includes G,W,C,F registers
5832reg [63:0] prev_reg211; // includes G,W,C,F registers
5833reg [63:0] prev_reg212; // includes G,W,C,F registers
5834reg [63:0] prev_reg213; // includes G,W,C,F registers
5835reg [63:0] prev_reg214; // includes G,W,C,F registers
5836reg [63:0] prev_reg215; // includes G,W,C,F registers
5837reg [63:0] prev_reg216; // includes G,W,C,F registers
5838reg [63:0] prev_reg217; // includes G,W,C,F registers
5839reg [63:0] prev_reg218; // includes G,W,C,F registers
5840reg [63:0] prev_reg219; // includes G,W,C,F registers
5841reg [63:0] prev_reg220; // includes G,W,C,F registers
5842reg [63:0] prev_reg221; // includes G,W,C,F registers
5843reg [63:0] prev_reg222; // includes G,W,C,F registers
5844reg [63:0] prev_reg223; // includes G,W,C,F registers
5845reg [63:0] prev_reg224; // includes G,W,C,F registers
5846reg [63:0] prev_reg225; // includes G,W,C,F registers
5847reg [63:0] prev_reg226; // includes G,W,C,F registers
5848reg [63:0] prev_reg227; // includes G,W,C,F registers
5849reg [63:0] prev_reg228; // includes G,W,C,F registers
5850reg [63:0] prev_reg229; // includes G,W,C,F registers
5851reg [63:0] prev_reg230; // includes G,W,C,F registers
5852reg [63:0] prev_reg231; // includes G,W,C,F registers
5853reg [63:0] prev_reg232; // includes G,W,C,F registers
5854reg [63:0] prev_reg233; // includes G,W,C,F registers
5855reg [63:0] prev_reg234; // includes G,W,C,F registers
5856reg [63:0] prev_reg235; // includes G,W,C,F registers
5857reg [63:0] prev_reg236; // includes G,W,C,F registers
5858reg [63:0] prev_reg237; // includes G,W,C,F registers
5859reg [63:0] prev_reg238; // includes G,W,C,F registers
5860reg [63:0] prev_reg239; // includes G,W,C,F registers
5861reg [63:0] prev_reg240; // includes G,W,C,F registers
5862reg [63:0] prev_reg241; // includes G,W,C,F registers
5863reg [63:0] prev_reg242; // includes G,W,C,F registers
5864reg [63:0] prev_reg243; // includes G,W,C,F registers
5865reg [63:0] prev_reg244; // includes G,W,C,F registers
5866reg [63:0] prev_reg245; // includes G,W,C,F registers
5867reg [63:0] prev_reg246; // includes G,W,C,F registers
5868reg [63:0] prev_reg247; // includes G,W,C,F registers
5869reg [63:0] prev_reg248; // includes G,W,C,F registers
5870reg [63:0] prev_reg249; // includes G,W,C,F registers
5871reg [63:0] prev_reg250; // includes G,W,C,F registers
5872reg [63:0] prev_reg251; // includes G,W,C,F registers
5873reg [63:0] prev_reg252; // includes G,W,C,F registers
5874reg [63:0] prev_reg253; // includes G,W,C,F registers
5875reg [63:0] prev_reg254; // includes G,W,C,F registers
5876reg [63:0] prev_reg255; // includes G,W,C,F registers
5877
5878reg [1:0] th_gl; // copy of GL_reg
5879
5880reg [63:0] gl0_reg0;
5881reg [63:0] gl1_reg0;
5882reg [63:0] gl2_reg0;
5883reg [63:0] gl3_reg0;
5884reg [63:0] gl0_reg1;
5885reg [63:0] gl1_reg1;
5886reg [63:0] gl2_reg1;
5887reg [63:0] gl3_reg1;
5888reg [63:0] gl0_reg2;
5889reg [63:0] gl1_reg2;
5890reg [63:0] gl2_reg2;
5891reg [63:0] gl3_reg2;
5892reg [63:0] gl0_reg3;
5893reg [63:0] gl1_reg3;
5894reg [63:0] gl2_reg3;
5895reg [63:0] gl3_reg3;
5896reg [63:0] gl0_reg4;
5897reg [63:0] gl1_reg4;
5898reg [63:0] gl2_reg4;
5899reg [63:0] gl3_reg4;
5900reg [63:0] gl0_reg5;
5901reg [63:0] gl1_reg5;
5902reg [63:0] gl2_reg5;
5903reg [63:0] gl3_reg5;
5904reg [63:0] gl0_reg6;
5905reg [63:0] gl1_reg6;
5906reg [63:0] gl2_reg6;
5907reg [63:0] gl3_reg6;
5908reg [63:0] gl0_reg7;
5909reg [63:0] gl1_reg7;
5910reg [63:0] gl2_reg7;
5911reg [63:0] gl3_reg7;
5912
5913reg [63:0] win0_reg8;
5914reg [63:0] win1_reg8;
5915reg [63:0] win2_reg8;
5916reg [63:0] win3_reg8;
5917reg [63:0] win4_reg8;
5918reg [63:0] win5_reg8;
5919reg [63:0] win6_reg8;
5920reg [63:0] win7_reg8;
5921reg [63:0] win0_reg9;
5922reg [63:0] win1_reg9;
5923reg [63:0] win2_reg9;
5924reg [63:0] win3_reg9;
5925reg [63:0] win4_reg9;
5926reg [63:0] win5_reg9;
5927reg [63:0] win6_reg9;
5928reg [63:0] win7_reg9;
5929reg [63:0] win0_reg10;
5930reg [63:0] win1_reg10;
5931reg [63:0] win2_reg10;
5932reg [63:0] win3_reg10;
5933reg [63:0] win4_reg10;
5934reg [63:0] win5_reg10;
5935reg [63:0] win6_reg10;
5936reg [63:0] win7_reg10;
5937reg [63:0] win0_reg11;
5938reg [63:0] win1_reg11;
5939reg [63:0] win2_reg11;
5940reg [63:0] win3_reg11;
5941reg [63:0] win4_reg11;
5942reg [63:0] win5_reg11;
5943reg [63:0] win6_reg11;
5944reg [63:0] win7_reg11;
5945reg [63:0] win0_reg12;
5946reg [63:0] win1_reg12;
5947reg [63:0] win2_reg12;
5948reg [63:0] win3_reg12;
5949reg [63:0] win4_reg12;
5950reg [63:0] win5_reg12;
5951reg [63:0] win6_reg12;
5952reg [63:0] win7_reg12;
5953reg [63:0] win0_reg13;
5954reg [63:0] win1_reg13;
5955reg [63:0] win2_reg13;
5956reg [63:0] win3_reg13;
5957reg [63:0] win4_reg13;
5958reg [63:0] win5_reg13;
5959reg [63:0] win6_reg13;
5960reg [63:0] win7_reg13;
5961reg [63:0] win0_reg14;
5962reg [63:0] win1_reg14;
5963reg [63:0] win2_reg14;
5964reg [63:0] win3_reg14;
5965reg [63:0] win4_reg14;
5966reg [63:0] win5_reg14;
5967reg [63:0] win6_reg14;
5968reg [63:0] win7_reg14;
5969reg [63:0] win0_reg15;
5970reg [63:0] win1_reg15;
5971reg [63:0] win2_reg15;
5972reg [63:0] win3_reg15;
5973reg [63:0] win4_reg15;
5974reg [63:0] win5_reg15;
5975reg [63:0] win6_reg15;
5976reg [63:0] win7_reg15;
5977reg [63:0] win0_reg16;
5978reg [63:0] win1_reg16;
5979reg [63:0] win2_reg16;
5980reg [63:0] win3_reg16;
5981reg [63:0] win4_reg16;
5982reg [63:0] win5_reg16;
5983reg [63:0] win6_reg16;
5984reg [63:0] win7_reg16;
5985reg [63:0] win0_reg17;
5986reg [63:0] win1_reg17;
5987reg [63:0] win2_reg17;
5988reg [63:0] win3_reg17;
5989reg [63:0] win4_reg17;
5990reg [63:0] win5_reg17;
5991reg [63:0] win6_reg17;
5992reg [63:0] win7_reg17;
5993reg [63:0] win0_reg18;
5994reg [63:0] win1_reg18;
5995reg [63:0] win2_reg18;
5996reg [63:0] win3_reg18;
5997reg [63:0] win4_reg18;
5998reg [63:0] win5_reg18;
5999reg [63:0] win6_reg18;
6000reg [63:0] win7_reg18;
6001reg [63:0] win0_reg19;
6002reg [63:0] win1_reg19;
6003reg [63:0] win2_reg19;
6004reg [63:0] win3_reg19;
6005reg [63:0] win4_reg19;
6006reg [63:0] win5_reg19;
6007reg [63:0] win6_reg19;
6008reg [63:0] win7_reg19;
6009reg [63:0] win0_reg20;
6010reg [63:0] win1_reg20;
6011reg [63:0] win2_reg20;
6012reg [63:0] win3_reg20;
6013reg [63:0] win4_reg20;
6014reg [63:0] win5_reg20;
6015reg [63:0] win6_reg20;
6016reg [63:0] win7_reg20;
6017reg [63:0] win0_reg21;
6018reg [63:0] win1_reg21;
6019reg [63:0] win2_reg21;
6020reg [63:0] win3_reg21;
6021reg [63:0] win4_reg21;
6022reg [63:0] win5_reg21;
6023reg [63:0] win6_reg21;
6024reg [63:0] win7_reg21;
6025reg [63:0] win0_reg22;
6026reg [63:0] win1_reg22;
6027reg [63:0] win2_reg22;
6028reg [63:0] win3_reg22;
6029reg [63:0] win4_reg22;
6030reg [63:0] win5_reg22;
6031reg [63:0] win6_reg22;
6032reg [63:0] win7_reg22;
6033reg [63:0] win0_reg23;
6034reg [63:0] win1_reg23;
6035reg [63:0] win2_reg23;
6036reg [63:0] win3_reg23;
6037reg [63:0] win4_reg23;
6038reg [63:0] win5_reg23;
6039reg [63:0] win6_reg23;
6040reg [63:0] win7_reg23;
6041reg [63:0] win0_reg24;
6042reg [63:0] win1_reg24;
6043reg [63:0] win2_reg24;
6044reg [63:0] win3_reg24;
6045reg [63:0] win4_reg24;
6046reg [63:0] win5_reg24;
6047reg [63:0] win6_reg24;
6048reg [63:0] win7_reg24;
6049reg [63:0] win0_reg25;
6050reg [63:0] win1_reg25;
6051reg [63:0] win2_reg25;
6052reg [63:0] win3_reg25;
6053reg [63:0] win4_reg25;
6054reg [63:0] win5_reg25;
6055reg [63:0] win6_reg25;
6056reg [63:0] win7_reg25;
6057reg [63:0] win0_reg26;
6058reg [63:0] win1_reg26;
6059reg [63:0] win2_reg26;
6060reg [63:0] win3_reg26;
6061reg [63:0] win4_reg26;
6062reg [63:0] win5_reg26;
6063reg [63:0] win6_reg26;
6064reg [63:0] win7_reg26;
6065reg [63:0] win0_reg27;
6066reg [63:0] win1_reg27;
6067reg [63:0] win2_reg27;
6068reg [63:0] win3_reg27;
6069reg [63:0] win4_reg27;
6070reg [63:0] win5_reg27;
6071reg [63:0] win6_reg27;
6072reg [63:0] win7_reg27;
6073reg [63:0] win0_reg28;
6074reg [63:0] win1_reg28;
6075reg [63:0] win2_reg28;
6076reg [63:0] win3_reg28;
6077reg [63:0] win4_reg28;
6078reg [63:0] win5_reg28;
6079reg [63:0] win6_reg28;
6080reg [63:0] win7_reg28;
6081reg [63:0] win0_reg29;
6082reg [63:0] win1_reg29;
6083reg [63:0] win2_reg29;
6084reg [63:0] win3_reg29;
6085reg [63:0] win4_reg29;
6086reg [63:0] win5_reg29;
6087reg [63:0] win6_reg29;
6088reg [63:0] win7_reg29;
6089reg [63:0] win0_reg30;
6090reg [63:0] win1_reg30;
6091reg [63:0] win2_reg30;
6092reg [63:0] win3_reg30;
6093reg [63:0] win4_reg30;
6094reg [63:0] win5_reg30;
6095reg [63:0] win6_reg30;
6096reg [63:0] win7_reg30;
6097reg [63:0] win0_reg31;
6098reg [63:0] win1_reg31;
6099reg [63:0] win2_reg31;
6100reg [63:0] win3_reg31;
6101reg [63:0] win4_reg31;
6102reg [63:0] win5_reg31;
6103reg [63:0] win6_reg31;
6104reg [63:0] win7_reg31;
6105
6106reg [63:0] itagacc_fx5;
6107reg [63:0] itagacc_fb;
6108reg [63:0] itagacc_fw;
6109reg [63:0] itagacc_fw1;
6110reg [63:0] itagacc_fw2;
6111
6112reg [63:0] dtagacc_fx5;
6113reg [63:0] dtagacc_fb;
6114reg [63:0] dtagacc_fw;
6115reg [63:0] dtagacc_fw1;
6116reg [63:0] dtagacc_fw2;
6117
6118reg [47:0] dsfar_fb;
6119reg [47:0] dsfar_fw;
6120reg [47:0] dsfar_fw1;
6121reg [47:0] dsfar_fw2;
6122
6123reg [47:0] pc_fx4;
6124reg [47:0] pc_fx5;
6125reg [47:0] pc_fb;
6126reg [47:0] pc_fw;
6127reg [47:0] pc_fw1;
6128reg [47:0] pc_fw2;
6129reg [47:0] pc_last;
6130
6131reg tlu_complete_1;
6132reg tlu_complete_2;
6133reg tlu_complete_3;
6134
6135reg frf_w1_valid_fw1;
6136reg frf_w1_valid_fw2;
6137
6138reg frf_w1_skip_addr4_fw1;
6139reg frf_w1_skip_addr4_fw2;
6140reg [2:0] fprs_fb;
6141reg [2:0] fprs_fw;
6142reg [2:0] fprs_fw1;
6143reg [2:0] fprs_fw2;
6144
6145
6146reg [1:0] frf_w2_valid_fw;
6147reg [1:0] frf_w2_valid_bn;
6148reg [2:0] frf_w2_tid_fw;
6149reg [4:0] frf_w2_addr_fw;
6150
6151reg [1:0] frf_w1_valid_fw;
6152reg [2:0] frf_w1_tid_fw;
6153reg [4:0] frf_w1_addr_fw;
6154
6155reg thread_running;
6156
6157reg in_wmr;
6158reg wmr; // latched to get edge
6159reg por_a; // latched to get edge
6160reg por_b; // latched to get edge
6161
6162reg nas_pipe_enable; // Turns on nas_pipe capture and Riesling SSTEP
6163reg first_op;
6164reg [63:0] mytime;
6165wire [5:0] mytnum;
6166wire mytg;
6167integer junk;
6168integer myindex;
6169integer irf_offset;
6170wire oddwin;
6171wire frf_w1_valid_even;
6172wire frf_w1_valid_odd;
6173wire frf_w2_valid_even;
6174wire frf_w2_valid_odd;
6175wire [4:0] frf_w1_skip_addr;
6176wire [4:0] frf_w2_skip_addr;
6177reg good_trap_detected; // Used for -nosas only.
6178
6179//----------------------------------------------------------
6180`ifdef DEBUG_PIPE
6181
6182wire [63:0] g0;
6183wire [63:0] g1;
6184wire [63:0] g2;
6185wire [63:0] g3;
6186wire [63:0] g4;
6187wire [63:0] g5;
6188wire [63:0] g6;
6189wire [63:0] g7;
6190
6191wire [63:0] o0;
6192wire [63:0] o1;
6193wire [63:0] o2;
6194wire [63:0] o3;
6195wire [63:0] o4;
6196wire [63:0] o5;
6197wire [63:0] o6;
6198wire [63:0] o7;
6199
6200wire [63:0] l0;
6201wire [63:0] l1;
6202wire [63:0] l2;
6203wire [63:0] l3;
6204wire [63:0] l4;
6205wire [63:0] l5;
6206wire [63:0] l6;
6207wire [63:0] l7;
6208
6209wire [63:0] i0;
6210wire [63:0] i1;
6211wire [63:0] i2;
6212wire [63:0] i3;
6213wire [63:0] i4;
6214wire [63:0] i5;
6215wire [63:0] i6;
6216wire [63:0] i7;
6217
6218wire [31:0] frf_0;
6219wire [31:0] frf_1;
6220wire [31:0] frf_2;
6221wire [31:0] frf_3;
6222wire [31:0] frf_4;
6223wire [31:0] frf_5;
6224wire [31:0] frf_6;
6225wire [31:0] frf_7;
6226wire [31:0] frf_8;
6227wire [31:0] frf_9;
6228wire [31:0] frf_10;
6229wire [31:0] frf_11;
6230wire [31:0] frf_12;
6231wire [31:0] frf_13;
6232wire [31:0] frf_14;
6233wire [31:0] frf_15;
6234wire [31:0] frf_16;
6235wire [31:0] frf_17;
6236wire [31:0] frf_18;
6237wire [31:0] frf_19;
6238wire [31:0] frf_20;
6239wire [31:0] frf_21;
6240wire [31:0] frf_22;
6241wire [31:0] frf_23;
6242wire [31:0] frf_24;
6243wire [31:0] frf_25;
6244wire [31:0] frf_26;
6245wire [31:0] frf_27;
6246wire [31:0] frf_28;
6247wire [31:0] frf_29;
6248wire [31:0] frf_30;
6249wire [31:0] frf_31;
6250wire [31:0] frf_32;
6251wire [31:0] frf_33;
6252wire [31:0] frf_34;
6253wire [31:0] frf_35;
6254wire [31:0] frf_36;
6255wire [31:0] frf_37;
6256wire [31:0] frf_38;
6257wire [31:0] frf_39;
6258wire [31:0] frf_40;
6259wire [31:0] frf_41;
6260wire [31:0] frf_42;
6261wire [31:0] frf_43;
6262wire [31:0] frf_44;
6263wire [31:0] frf_45;
6264wire [31:0] frf_46;
6265wire [31:0] frf_47;
6266wire [31:0] frf_48;
6267wire [31:0] frf_49;
6268wire [31:0] frf_50;
6269wire [31:0] frf_51;
6270wire [31:0] frf_52;
6271wire [31:0] frf_53;
6272wire [31:0] frf_54;
6273wire [31:0] frf_55;
6274wire [31:0] frf_56;
6275wire [31:0] frf_57;
6276wire [31:0] frf_58;
6277wire [31:0] frf_59;
6278wire [31:0] frf_60;
6279wire [31:0] frf_61;
6280wire [31:0] frf_62;
6281wire [31:0] frf_63;
6282
6283wire [`DELTA_WIDTH:0] delta_fx4_0;
6284wire [`DELTA_WIDTH:0] delta_fx4_1;
6285wire [`DELTA_WIDTH:0] delta_fx4_2;
6286wire [`DELTA_WIDTH:0] delta_fx4_3;
6287wire [`DELTA_WIDTH:0] delta_fx4_4;
6288wire [`DELTA_WIDTH:0] delta_fx4_5;
6289wire [`DELTA_WIDTH:0] delta_fx4_6;
6290wire [`DELTA_WIDTH:0] delta_fx4_7;
6291
6292wire [`DELTA_WIDTH:0] delta_fx5_0;
6293wire [`DELTA_WIDTH:0] delta_fx5_1;
6294wire [`DELTA_WIDTH:0] delta_fx5_2;
6295wire [`DELTA_WIDTH:0] delta_fx5_3;
6296wire [`DELTA_WIDTH:0] delta_fx5_4;
6297wire [`DELTA_WIDTH:0] delta_fx5_5;
6298wire [`DELTA_WIDTH:0] delta_fx5_6;
6299wire [`DELTA_WIDTH:0] delta_fx5_7;
6300
6301wire [`DELTA_WIDTH:0] delta_fb_0;
6302wire [`DELTA_WIDTH:0] delta_fb_1;
6303wire [`DELTA_WIDTH:0] delta_fb_2;
6304wire [`DELTA_WIDTH:0] delta_fb_3;
6305wire [`DELTA_WIDTH:0] delta_fb_4;
6306wire [`DELTA_WIDTH:0] delta_fb_5;
6307wire [`DELTA_WIDTH:0] delta_fb_6;
6308wire [`DELTA_WIDTH:0] delta_fb_7;
6309
6310wire [`DELTA_WIDTH:0] delta_fw_0;
6311wire [`DELTA_WIDTH:0] delta_fw_1;
6312wire [`DELTA_WIDTH:0] delta_fw_2;
6313wire [`DELTA_WIDTH:0] delta_fw_3;
6314wire [`DELTA_WIDTH:0] delta_fw_4;
6315wire [`DELTA_WIDTH:0] delta_fw_5;
6316wire [`DELTA_WIDTH:0] delta_fw_6;
6317wire [`DELTA_WIDTH:0] delta_fw_7;
6318
6319wire [`DELTA_WIDTH:0] delta_fw1_0;
6320wire [`DELTA_WIDTH:0] delta_fw1_1;
6321wire [`DELTA_WIDTH:0] delta_fw1_2;
6322wire [`DELTA_WIDTH:0] delta_fw1_3;
6323wire [`DELTA_WIDTH:0] delta_fw1_4;
6324wire [`DELTA_WIDTH:0] delta_fw1_5;
6325wire [`DELTA_WIDTH:0] delta_fw1_6;
6326wire [`DELTA_WIDTH:0] delta_fw1_7;
6327
6328wire [`DELTA_WIDTH:0] delta_fw2_0;
6329wire [`DELTA_WIDTH:0] delta_fw2_1;
6330wire [`DELTA_WIDTH:0] delta_fw2_2;
6331wire [`DELTA_WIDTH:0] delta_fw2_3;
6332wire [`DELTA_WIDTH:0] delta_fw2_4;
6333wire [`DELTA_WIDTH:0] delta_fw2_5;
6334wire [`DELTA_WIDTH:0] delta_fw2_6;
6335wire [`DELTA_WIDTH:0] delta_fw2_7;
6336
6337wire [`DELTA_WIDTH:0] delta_prev_0;
6338wire [`DELTA_WIDTH:0] delta_prev_1;
6339wire [`DELTA_WIDTH:0] delta_prev_2;
6340wire [`DELTA_WIDTH:0] delta_prev_3;
6341wire [`DELTA_WIDTH:0] delta_prev_4;
6342wire [`DELTA_WIDTH:0] delta_prev_5;
6343wire [`DELTA_WIDTH:0] delta_prev_6;
6344wire [`DELTA_WIDTH:0] delta_prev_7;
6345
6346initial begin
6347 #0;
6348 `PR_ALWAYS ("arg", `ALWAYS,"T%0d DEBUG_PIPE turned ON",mytnum);
6349end
6350
6351//----------------------------------------------------------
6352// Note: no remap of %g,%o,%l,%i regs based on CWP or GL
6353assign g0 = (mytid<=3) ? `IRF1_EXU0[( 0+irf_offset)] : `IRF1_EXU1[( 0+irf_offset)];
6354assign g1 = (mytid<=3) ? `IRF1_EXU0[( 1+irf_offset)] : `IRF1_EXU1[( 1+irf_offset)];
6355assign g2 = (mytid<=3) ? `IRF1_EXU0[( 2+irf_offset)] : `IRF1_EXU1[( 2+irf_offset)];
6356assign g3 = (mytid<=3) ? `IRF1_EXU0[( 3+irf_offset)] : `IRF1_EXU1[( 3+irf_offset)];
6357assign g4 = (mytid<=3) ? `IRF1_EXU0[( 4+irf_offset)] : `IRF1_EXU1[( 4+irf_offset)];
6358assign g5 = (mytid<=3) ? `IRF1_EXU0[( 5+irf_offset)] : `IRF1_EXU1[( 5+irf_offset)];
6359assign g6 = (mytid<=3) ? `IRF1_EXU0[( 6+irf_offset)] : `IRF1_EXU1[( 6+irf_offset)];
6360assign g7 = (mytid<=3) ? `IRF1_EXU0[( 7+irf_offset)] : `IRF1_EXU1[( 7+irf_offset)];
6361
6362assign o0 = (mytid<=3) ? `IRF1_EXU0[( 8+irf_offset)] : `IRF1_EXU1[( 8+irf_offset)];
6363assign o1 = (mytid<=3) ? `IRF1_EXU0[( 9+irf_offset)] : `IRF1_EXU1[( 9+irf_offset)];
6364assign o2 = (mytid<=3) ? `IRF1_EXU0[(10+irf_offset)] : `IRF1_EXU1[(10+irf_offset)];
6365assign o3 = (mytid<=3) ? `IRF1_EXU0[(11+irf_offset)] : `IRF1_EXU1[(11+irf_offset)];
6366assign o4 = (mytid<=3) ? `IRF1_EXU0[(12+irf_offset)] : `IRF1_EXU1[(12+irf_offset)];
6367assign o5 = (mytid<=3) ? `IRF1_EXU0[(13+irf_offset)] : `IRF1_EXU1[(13+irf_offset)];
6368assign o6 = (mytid<=3) ? `IRF1_EXU0[(14+irf_offset)] : `IRF1_EXU1[(14+irf_offset)];
6369assign o7 = (mytid<=3) ? `IRF1_EXU0[(15+irf_offset)] : `IRF1_EXU1[(15+irf_offset)];
6370
6371assign l0 = (mytid<=3) ? `IRF1_EXU0[(16+irf_offset)] : `IRF1_EXU1[(16+irf_offset)];
6372assign l1 = (mytid<=3) ? `IRF1_EXU0[(17+irf_offset)] : `IRF1_EXU1[(17+irf_offset)];
6373assign l2 = (mytid<=3) ? `IRF1_EXU0[(18+irf_offset)] : `IRF1_EXU1[(18+irf_offset)];
6374assign l3 = (mytid<=3) ? `IRF1_EXU0[(19+irf_offset)] : `IRF1_EXU1[(19+irf_offset)];
6375assign l4 = (mytid<=3) ? `IRF1_EXU0[(20+irf_offset)] : `IRF1_EXU1[(20+irf_offset)];
6376assign l5 = (mytid<=3) ? `IRF1_EXU0[(21+irf_offset)] : `IRF1_EXU1[(21+irf_offset)];
6377assign l6 = (mytid<=3) ? `IRF1_EXU0[(22+irf_offset)] : `IRF1_EXU1[(22+irf_offset)];
6378assign l7 = (mytid<=3) ? `IRF1_EXU0[(23+irf_offset)] : `IRF1_EXU1[(23+irf_offset)];
6379
6380assign i0 = (mytid<=3) ? `IRF1_EXU0[(24+irf_offset)] : `IRF1_EXU1[(24+irf_offset)];
6381assign i1 = (mytid<=3) ? `IRF1_EXU0[(25+irf_offset)] : `IRF1_EXU1[(25+irf_offset)];
6382assign i2 = (mytid<=3) ? `IRF1_EXU0[(26+irf_offset)] : `IRF1_EXU1[(26+irf_offset)];
6383assign i3 = (mytid<=3) ? `IRF1_EXU0[(27+irf_offset)] : `IRF1_EXU1[(27+irf_offset)];
6384assign i4 = (mytid<=3) ? `IRF1_EXU0[(28+irf_offset)] : `IRF1_EXU1[(28+irf_offset)];
6385assign i5 = (mytid<=3) ? `IRF1_EXU0[(29+irf_offset)] : `IRF1_EXU1[(29+irf_offset)];
6386assign i6 = (mytid<=3) ? `IRF1_EXU0[(30+irf_offset)] : `IRF1_EXU1[(30+irf_offset)];
6387assign i7 = (mytid<=3) ? `IRF1_EXU0[(31+irf_offset)] : `IRF1_EXU1[(31+irf_offset)];
6388
6389//----------------------------------------------------------
6390assign frf_0 = `FRF1_EVEN[(mytid*32)+ 0];
6391assign frf_2 = `FRF1_EVEN[(mytid*32)+ 1];
6392assign frf_4 = `FRF1_EVEN[(mytid*32)+ 2];
6393assign frf_6 = `FRF1_EVEN[(mytid*32)+ 3];
6394assign frf_8 = `FRF1_EVEN[(mytid*32)+ 4];
6395assign frf_10 = `FRF1_EVEN[(mytid*32)+ 5];
6396assign frf_12 = `FRF1_EVEN[(mytid*32)+ 6];
6397assign frf_14 = `FRF1_EVEN[(mytid*32)+ 7];
6398assign frf_16 = `FRF1_EVEN[(mytid*32)+ 8];
6399assign frf_18 = `FRF1_EVEN[(mytid*32)+ 9];
6400assign frf_20 = `FRF1_EVEN[(mytid*32)+ 10];
6401assign frf_22 = `FRF1_EVEN[(mytid*32)+ 11];
6402assign frf_24 = `FRF1_EVEN[(mytid*32)+ 12];
6403assign frf_26 = `FRF1_EVEN[(mytid*32)+ 13];
6404assign frf_28 = `FRF1_EVEN[(mytid*32)+ 14];
6405assign frf_30 = `FRF1_EVEN[(mytid*32)+ 15];
6406assign frf_32 = `FRF1_EVEN[(mytid*32)+ 16];
6407assign frf_34 = `FRF1_EVEN[(mytid*32)+ 17];
6408assign frf_36 = `FRF1_EVEN[(mytid*32)+ 18];
6409assign frf_38 = `FRF1_EVEN[(mytid*32)+ 19];
6410assign frf_40 = `FRF1_EVEN[(mytid*32)+ 20];
6411assign frf_42 = `FRF1_EVEN[(mytid*32)+ 21];
6412assign frf_44 = `FRF1_EVEN[(mytid*32)+ 22];
6413assign frf_46 = `FRF1_EVEN[(mytid*32)+ 23];
6414assign frf_48 = `FRF1_EVEN[(mytid*32)+ 24];
6415assign frf_50 = `FRF1_EVEN[(mytid*32)+ 25];
6416assign frf_52 = `FRF1_EVEN[(mytid*32)+ 26];
6417assign frf_54 = `FRF1_EVEN[(mytid*32)+ 27];
6418assign frf_56 = `FRF1_EVEN[(mytid*32)+ 28];
6419assign frf_58 = `FRF1_EVEN[(mytid*32)+ 29];
6420assign frf_60 = `FRF1_EVEN[(mytid*32)+ 30];
6421assign frf_62 = `FRF1_EVEN[(mytid*32)+ 31];
6422
6423assign frf_1 = `FRF1_ODD[(mytid*32)+ 0];
6424assign frf_3 = `FRF1_ODD[(mytid*32)+ 1];
6425assign frf_5 = `FRF1_ODD[(mytid*32)+ 2];
6426assign frf_7 = `FRF1_ODD[(mytid*32)+ 3];
6427assign frf_9 = `FRF1_ODD[(mytid*32)+ 4];
6428assign frf_11 = `FRF1_ODD[(mytid*32)+ 5];
6429assign frf_13 = `FRF1_ODD[(mytid*32)+ 6];
6430assign frf_15 = `FRF1_ODD[(mytid*32)+ 7];
6431assign frf_17 = `FRF1_ODD[(mytid*32)+ 8];
6432assign frf_19 = `FRF1_ODD[(mytid*32)+ 9];
6433assign frf_21 = `FRF1_ODD[(mytid*32)+ 10];
6434assign frf_23 = `FRF1_ODD[(mytid*32)+ 11];
6435assign frf_25 = `FRF1_ODD[(mytid*32)+ 12];
6436assign frf_27 = `FRF1_ODD[(mytid*32)+ 13];
6437assign frf_29 = `FRF1_ODD[(mytid*32)+ 14];
6438assign frf_31 = `FRF1_ODD[(mytid*32)+ 15];
6439assign frf_33 = `FRF1_ODD[(mytid*32)+ 16];
6440assign frf_35 = `FRF1_ODD[(mytid*32)+ 17];
6441assign frf_37 = `FRF1_ODD[(mytid*32)+ 18];
6442assign frf_39 = `FRF1_ODD[(mytid*32)+ 19];
6443assign frf_41 = `FRF1_ODD[(mytid*32)+ 20];
6444assign frf_43 = `FRF1_ODD[(mytid*32)+ 21];
6445assign frf_45 = `FRF1_ODD[(mytid*32)+ 22];
6446assign frf_47 = `FRF1_ODD[(mytid*32)+ 23];
6447assign frf_49 = `FRF1_ODD[(mytid*32)+ 24];
6448assign frf_51 = `FRF1_ODD[(mytid*32)+ 25];
6449assign frf_53 = `FRF1_ODD[(mytid*32)+ 26];
6450assign frf_55 = `FRF1_ODD[(mytid*32)+ 27];
6451assign frf_57 = `FRF1_ODD[(mytid*32)+ 28];
6452assign frf_59 = `FRF1_ODD[(mytid*32)+ 29];
6453assign frf_61 = `FRF1_ODD[(mytid*32)+ 30];
6454assign frf_63 = `FRF1_ODD[(mytid*32)+ 31];
6455
6456//----------------------------------------------------------
6457assign delta_fx4_0 = delta_fx4[0];
6458assign delta_fx4_1 = delta_fx4[1];
6459assign delta_fx4_2 = delta_fx4[2];
6460assign delta_fx4_3 = delta_fx4[3];
6461assign delta_fx4_4 = delta_fx4[4];
6462assign delta_fx4_5 = delta_fx4[5];
6463assign delta_fx4_6 = delta_fx4[6];
6464assign delta_fx4_7 = delta_fx4[7];
6465
6466assign delta_fx5_0 = delta_fx5[0];
6467assign delta_fx5_1 = delta_fx5[1];
6468assign delta_fx5_2 = delta_fx5[2];
6469assign delta_fx5_3 = delta_fx5[3];
6470assign delta_fx5_4 = delta_fx5[4];
6471assign delta_fx5_5 = delta_fx5[5];
6472assign delta_fx5_6 = delta_fx5[6];
6473assign delta_fx5_7 = delta_fx5[7];
6474
6475assign delta_fb_0 = delta_fb[0];
6476assign delta_fb_1 = delta_fb[1];
6477assign delta_fb_2 = delta_fb[2];
6478assign delta_fb_3 = delta_fb[3];
6479assign delta_fb_4 = delta_fb[4];
6480assign delta_fb_5 = delta_fb[5];
6481assign delta_fb_6 = delta_fb[6];
6482assign delta_fb_7 = delta_fb[7];
6483
6484assign delta_fw_0 = delta_fw[0];
6485assign delta_fw_1 = delta_fw[1];
6486assign delta_fw_2 = delta_fw[2];
6487assign delta_fw_3 = delta_fw[3];
6488assign delta_fw_4 = delta_fw[4];
6489assign delta_fw_5 = delta_fw[5];
6490assign delta_fw_6 = delta_fw[6];
6491assign delta_fw_7 = delta_fw[7];
6492
6493assign delta_fw1_0 = delta_fw1[0];
6494assign delta_fw1_1 = delta_fw1[1];
6495assign delta_fw1_2 = delta_fw1[2];
6496assign delta_fw1_3 = delta_fw1[3];
6497assign delta_fw1_4 = delta_fw1[4];
6498assign delta_fw1_5 = delta_fw1[5];
6499assign delta_fw1_6 = delta_fw1[6];
6500assign delta_fw1_7 = delta_fw1[7];
6501
6502assign delta_fw2_0 = delta_fw2[0];
6503assign delta_fw2_1 = delta_fw2[1];
6504assign delta_fw2_2 = delta_fw2[2];
6505assign delta_fw2_3 = delta_fw2[3];
6506assign delta_fw2_4 = delta_fw2[4];
6507assign delta_fw2_5 = delta_fw2[5];
6508assign delta_fw2_6 = delta_fw2[6];
6509assign delta_fw2_7 = delta_fw2[7];
6510
6511assign delta_prev_0 = delta_prev[0];
6512assign delta_prev_1 = delta_prev[1];
6513assign delta_prev_2 = delta_prev[2];
6514assign delta_prev_3 = delta_prev[3];
6515assign delta_prev_4 = delta_prev[4];
6516assign delta_prev_5 = delta_prev[5];
6517assign delta_prev_6 = delta_prev[6];
6518assign delta_prev_7 = delta_prev[7];
6519
6520`endif // DEBUG_PIPE
6521//----------------------------------------------------------
6522
6523//----------------------------------------------------------
6524assign mytnum = (mycid*8)+mytid;
6525assign mytg = mytid >> 2;
6526
6527assign exu_complete = exu_valid & ~(`PROBES1.clkstop_d5|`TOP.in_reset|`SPC1.tcu_scan_en);
6528assign imul_complete = imul_valid & ~(`TOP.in_reset|`SPC1.tcu_scan_en);
6529assign idiv_complete = idiv_valid & ~(`TOP.in_reset|`SPC1.tcu_scan_en);
6530assign tlu_complete = tlu_complete_3 ;
6531assign fp_complete = fp_valid & ~(`TOP.in_reset|`SPC1.tcu_scan_en);
6532assign fdiv_complete = fdiv_valid & ~(`TOP.in_reset|`SPC1.tcu_scan_en);
6533assign lsu_complete = lsu_valid & ~(`TOP.in_reset|`SPC1.tcu_scan_en);
6534assign asi_complete = asi_valid & ~(`TOP.in_reset|`SPC1.tcu_scan_en);
6535
6536assign complete_w = (exu_complete << `EXU_INDEX) |
6537 (lsu_complete << `LSU_INDEX) |
6538 (tlu_complete << `TLU_INDEX) |
6539 (asi_complete << `ASI_INDEX) ;
6540
6541assign oddwin = CWP_reg % 2;
6542
6543assign frf_w1_valid_even = (frf_w1_tid_fw == mytid) & frf_w1_valid_fw[1];
6544assign frf_w1_valid_odd = (frf_w1_tid_fw == mytid) & frf_w1_valid_fw[0];
6545assign frf_w2_valid_even = (frf_w2_tid_fw == mytid) & frf_w2_valid_fw[1];
6546assign frf_w2_valid_odd = (frf_w2_tid_fw == mytid) & frf_w2_valid_fw[0];
6547
6548assign frf_w1_skip_addr = frf_w1_addr_fw;
6549assign frf_w2_skip_addr = frf_w2_addr_fw;
6550
6551//-----------------
6552// ADD_TSB_CFG
6553// NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
6554`ifdef ADD_TSB_CFG
6555wire [63:0] ctxt_z_tsb_cfg0_reg = `PROBES1.ctxt_z_tsb_cfg0_reg[mytid];
6556wire [63:0] ctxt_z_tsb_cfg1_reg = `PROBES1.ctxt_z_tsb_cfg1_reg[mytid];
6557wire [63:0] ctxt_z_tsb_cfg2_reg = `PROBES1.ctxt_z_tsb_cfg2_reg[mytid];
6558wire [63:0] ctxt_z_tsb_cfg3_reg = `PROBES1.ctxt_z_tsb_cfg3_reg[mytid];
6559wire [63:0] ctxt_nz_tsb_cfg0_reg = `PROBES1.ctxt_nz_tsb_cfg0_reg[mytid];
6560wire [63:0] ctxt_nz_tsb_cfg1_reg = `PROBES1.ctxt_nz_tsb_cfg1_reg[mytid];
6561wire [63:0] ctxt_nz_tsb_cfg2_reg = `PROBES1.ctxt_nz_tsb_cfg2_reg[mytid];
6562wire [63:0] ctxt_nz_tsb_cfg3_reg = `PROBES1.ctxt_nz_tsb_cfg3_reg[mytid];
6563`endif
6564
6565//----------------------------------------------------------
6566// Pipelined Signals
6567always @ (posedge `BENCH_SPC1_GCLK) begin // {
6568
6569 // TLU is async to the execution pipeline
6570 // but needs to be delayed to allow CWP, etc to update and be stable
6571 // before arch state is captured and diff_reg is called.
6572 // Done for FLUSHW
6573
6574 // FDIV was moved from fw1 to fw to allow FPRS to be stable before capture
6575 tlu_complete_1 <= tlu_valid & ~(`TOP.in_reset|`SPC1.tcu_scan_en);
6576 tlu_complete_2 <= tlu_complete_1;
6577 tlu_complete_3 <= tlu_complete_2;
6578
6579 itagacc_fx5 <= I_TAG_ACC_reg; // Signal changes in W so need to pipeline to fw2
6580 itagacc_fb <= itagacc_fx5;
6581 itagacc_fw <= itagacc_fb;
6582 itagacc_fw1 <= itagacc_fw;
6583 itagacc_fw2 <= itagacc_fw1;
6584
6585 dtagacc_fx5 <= D_TAG_ACC_reg; // Signal changes in W so need to pipeline to fw2
6586 dtagacc_fb <= dtagacc_fx5;
6587 dtagacc_fw <= dtagacc_fb;
6588 dtagacc_fw1 <= dtagacc_fw;
6589 dtagacc_fw2 <= dtagacc_fw1;
6590
6591 dsfar_fb <= DSFAR_reg; // Signal changes in W+1 so need to pipeline to fw2
6592 dsfar_fw <= dsfar_fb;
6593 dsfar_fw1 <= dsfar_fw;
6594 dsfar_fw2 <= dsfar_fw1;
6595
6596 pc_fx4 <= PC_reg;
6597 pc_fx5 <= pc_fx4;
6598 pc_fb <= pc_fx5;
6599 pc_fw <= pc_fb;
6600 pc_fw1 <= pc_fw;
6601 pc_fw2 <= pc_fw1;
6602
6603 cwp_fx4 <= CWP_reg;
6604 cwp_fx5 <= cwp_fx4;
6605 cwp_fb <= cwp_fx5;
6606 cwp_fw <= cwp_fb;
6607 cwp_fw1 <= cwp_fw;
6608 cwp_fw2 <= cwp_fw1;
6609
6610 complete_fx4 <= complete_w;
6611 complete_fx5 <= complete_fx4 ;
6612 complete_fb <= complete_fx5 |
6613 (idiv_complete << `IDIV_INDEX);
6614 complete_fw <= complete_fb |
6615 (fdiv_complete << `FDIV_INDEX) |
6616 (imul_complete << `IMUL_INDEX);
6617 complete_fw1 <= complete_fw |
6618 (fp_complete << `FP_INDEX);
6619
6620 complete_fw2 <= complete_fw1;
6621
6622 frf_w1_valid_fw1 <= (frf_w1_valid_odd | frf_w1_valid_even) & fp_complete;
6623 frf_w1_valid_fw2 <= frf_w1_valid_fw1;
6624
6625 frf_w1_skip_addr4_fw1 <= frf_w1_skip_addr[4];
6626 frf_w1_skip_addr4_fw2 <= frf_w1_skip_addr4_fw1;
6627
6628 fprs_fb <= FPRS_reg;
6629 fprs_fw <= fprs_fb;
6630 fprs_fw1 <= fprs_fw;
6631 fprs_fw2 <= fprs_fw1;
6632
6633 frf_w2_valid_fw <= frf_w2_valid_bn;
6634 frf_w2_tid_fw <= frf_w2_tid;
6635 frf_w2_addr_fw <= frf_w2_addr;
6636
6637 frf_w1_valid_fw <= frf_w1_valid;
6638 frf_w1_tid_fw <= frf_w1_tid;
6639 frf_w1_addr_fw <= frf_w1_addr;
6640
6641 // Thread running
6642
6643 if (~thread_running & `SPC1.tcu_core_running[mytid])
6644 `TOP.th_last_act_cycle[mytnum] = `TOP.core_cycle_cnt;
6645
6646 thread_running <= `SPC1.tcu_core_running[mytid];
6647
6648 // Reset some register prev state on wmr negation
6649 if (`SPC1.rst_wmr_protect && ~wmr)
6650 wmr_prev;
6651
6652 if (por_a && ~por_b)
6653 por_prev;
6654
6655 wmr <= `SPC1.rst_wmr_protect;
6656 por_a <= `TOP.in_por;
6657 por_b <= por_a;
6658
6659 if (`SPC1.rst_wmr_protect)
6660 in_wmr <= 1;
6661
6662end // }
6663
6664//----------------------------------------------------------
6665// Holding state for registers that may be updated asynchronously
6666// after synchronous update, but before capture/step. Also for reads,
6667// when register is read and modified before capture/step ..
6668// We capture the value /write time, and use that for sstep,
6669// ignoring any async updates, which are sent in the NEXT sstep ..
6670//
6671reg [63:0] asi_updated_int_rec;
6672reg asi_rdwr_int_rec;
6673reg asi_wr_int_rec_delay;
6674
6675reg asi_updated_hintp;
6676reg asi_rdwr_hintp;
6677reg asi_wr_hintp_delay;
6678
6679reg [16:0] asi_updated_softint;
6680reg asi_rdwr_softint;
6681reg asi_wr_softint_delay;
6682reg [16:0] asi_softint_wrdata;
6683
6684always @(posedge `BENCH_SPC1_GCLK) begin // {
6685
6686 // Corner case : If async and sync wr occur in same clock, then the async
6687 // update takes place. In this case we have to capture the
6688 // value of the write WITHOUT async bit being set, so that
6689 // we can sync with Riesling's sync write ..
6690
6691 asi_wr_int_rec_delay <= ( `SPC1.tlu.cth.asi_wr_int_rec[mytid] |
6692 `SPC1.tlu.asi_rd_inc_vec_2[mytid]);
6693
6694 if (`SPC1.tlu.cth.asi_wr_int_rec[mytid] |
6695 ((`SPC1.tlu.asi.rd_inc_vec) &&
6696 (`SPC1.tlu.asi.rd_tid_dec[mytid])) |
6697 (`SPC1.tlu.asi_rd_int_rec &
6698 `SPC1.tlu.cth.int_rec_mux_sel==mytid))
6699 begin // {
6700
6701 if (`SPC1.tlu.cth.asi_wr_int_rec[mytid])
6702 asi_updated_int_rec <= `SPC1.tlu.cth.int_rec ;
6703 else if ( (`SPC1.tlu.asi.rd_inc_vec) &&
6704 (`SPC1.tlu.asi.rd_tid_dec[mytid]) )
6705 if (`SPC1.tlu.cth.cxi_wr_int_dis[mytid]) begin
6706 asi_updated_int_rec <= INTR_RECEIVE_reg & `SPC1.tlu.cth.int_rec_muxed_;
6707 asi_updated_int_rec[`SPC1.tlu.cth.incoming_vector_in] <= 1'b0 ;
6708 end
6709 else
6710 begin
6711 asi_updated_int_rec <= `SPC1.tlu.cth.int_rec_muxed ;
6712 asi_updated_int_rec[`SPC1.tlu.cth.incoming_vector_in] <= 1'b0 ;
6713 end
6714 else
6715 asi_updated_int_rec <= INTR_RECEIVE_reg;
6716 asi_rdwr_int_rec <= 1'b1;
6717 end //}
6718 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
6719 asi_rdwr_int_rec <= 1'b0;
6720
6721 asi_wr_hintp_delay <= `SPC1.tlu.asi_wr_hintp[mytid];
6722
6723 if (`SPC1.tlu.asi_wr_hintp[mytid] |
6724 `SPC1.tlu.asi_rd_hintp[mytid])
6725 begin // {
6726 if (`SPC1.tlu.asi_wr_hintp[mytid])
6727 asi_updated_hintp <= `SPC1.tlu.asi_wr_data_0[0] ;
6728 else
6729 asi_updated_hintp <= HINTP_reg;
6730 asi_rdwr_hintp <= 1'b1;
6731 end //}
6732 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
6733 asi_rdwr_hintp <= 1'b0;
6734
6735 asi_wr_softint_delay <= (`SPC1.tlu.asi_wr_softint[mytid] |
6736 `SPC1.tlu.asi_wr_clear_softint[mytid] |
6737 `SPC1.tlu.asi_wr_set_softint[mytid]);
6738
6739 if (`SPC1.tlu.asi_wr_clear_softint[mytid])
6740 asi_softint_wrdata <= ~`SPC1.tlu.asi_wr_data_0[16:0] & rd_SOFTINT_reg;
6741 else if (`SPC1.tlu.asi_wr_set_softint[mytid])
6742 asi_softint_wrdata <= `SPC1.tlu.asi_wr_data_0[16:0] | rd_SOFTINT_reg;
6743 else
6744 asi_softint_wrdata <= `SPC1.tlu.asi_wr_data_0[16:0];
6745
6746 if (asi_wr_softint_delay | `SPC1.tlu.asi_rd_softint[mytid])
6747 begin // {
6748 if (asi_wr_softint_delay)
6749 asi_updated_softint <= asi_softint_wrdata ;
6750 else
6751 asi_updated_softint <= rd_SOFTINT_reg ;
6752 asi_rdwr_softint <= 1'b1;
6753 end //}
6754 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
6755 asi_rdwr_softint <= 1'b0;
6756end //}
6757
6758//----------------------------------------------------------
6759// Negedge sampling to avoid race on specific signals ..
6760//
6761always @ (negedge `BENCH_SPC1_GCLK) begin // {
6762 frf_w2_valid_bn <= frf_w2_valid;
6763end //}
6764
6765//----------------------------------------------------------
6766// When instruction completes,
6767// Push differences to simics
6768
6769always @ (posedge `BENCH_SPC1_GCLK) begin // {
6770
6771 if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable && ~`SPC1.tcu_scan_en && ~`TOP.in_por) begin // {
6772
6773
6774 //----------
6775 // Update window registers
6776 if (CWP_reg != `NASTOP.th_cwp[mytnum]) begin // {
6777 copy_win (CWP_reg,`NASTOP.th_cwp[mytnum]);
6778 `NASTOP.th_cwp[mytnum] = CWP_reg;
6779 end // }
6780
6781 //----------
6782 // Update global registers
6783 // Wait for warm-reset flush related toggling to settle
6784 if (GL_reg != th_gl) begin // {
6785 if (`SPC1.spc_core_running_status[mytid] &
6786 ~`SPC1.rst_wmr_protect) begin // {
6787 copy_global (GL_reg,th_gl);
6788 th_gl = GL_reg;
6789 end // }
6790 end // }
6791
6792 //----------
6793 // Check for bad signal values
6794 check_values;
6795
6796 //----------
6797 // Step Simics
6798 //
6799 // if NASTOP.sstep_sent[tid]=1,
6800 // then SSTEP was set by another module (i.e. tlb_sync)
6801
6802 if (`PARGS.nas_check_on) begin // {
6803 mytime = `TOP.core_cycle_cnt-1;
6804 if (complete_fw2 && (`NASTOP.sstep_sent[mytnum]==1'b0)) begin // {
6805 `PR_INFO ("pli_nas", `INFO, " C%0d T%0d PLI_SSTEP tid=%d pc=%h ts=%0d ",
6806 mycid,mytid,mytnum,pc_fw2,mytime);
6807 junk = $sim_send(`PLI_SSTEP, mytnum);
6808 // Always clear sstep_early
6809 // In case tlb_sync asserted it too late for complete_fw2
6810 `NASTOP.sstep_early[mytnum] <= 1'b0;
6811 end //}
6812 else if (complete_fw2) begin // {
6813 `NASTOP.sstep_sent[mytnum] <= 1'b0; // re-arm SSTEP
6814 `NASTOP.sstep_early[mytnum] <= 1'b0;
6815 `PR_INFO ("pli_nas", `INFO, " C%0d T%0d PLI_SSTEP tid=%d pc=%h ts=%0d (nas_pipe: skip sstep. rearm sstep. sstep_sent=0)",
6816 mycid,mytid,mytnum,pc_fw2,mytime);
6817 end //}
6818 end //}
6819
6820 //----------
6821 // Only capture if something completes and not first instruction
6822 if (complete_fw2 && !first_op) begin // {
6823 update_pc;
6824 push_simics; // Use with AXIS to keep from getting timeout
6825 end // }
6826
6827 // Pipeline runs continuously
6828 // Other than when in POR ..
6829 update_fx4;
6830 update_fx5;
6831 update_fb;
6832 update_fw;
6833 update_fw1;
6834 update_fw2;
6835 // Only save to delta_prev when something completes
6836 if (complete_fw2) begin
6837 update_fw2_async;
6838 update_prev;
6839 first_op = 0;
6840 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
6841 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
6842 end
6843
6844
6845`ifndef EMUL_TL
6846 //----------
6847 // If something was captured but no instruction is in the pipeline
6848 if ((delta_fw2[`NEXT_INDEX]!=`FIRST_INDEX) && (complete_fw2 == 0))
6849 begin // {
6850
6851 for (myindex=`FIRST_INDEX; myindex<delta_fw2[`NEXT_INDEX]; myindex=myindex+1)
6852 begin // {
6853 print_entry (delta_fw2[myindex]);
6854 end //}
6855 `PR_ERROR ("nas",`ERROR, "T%0d Unexpected Reg change in DUT. Special case - no instruction retired.", mytnum);
6856
6857 end // }
6858`endif
6859
6860
6861 //----------
6862 // End detection for non-sas runs ..
6863
6864 for (junk=0;junk<`PARGS.bad_trap_count;junk=junk+1)
6865 if (({16'b0,pc_fw2}&`PC_MASK) ===
6866 (`PARGS.bad_trap_addr[junk]&`PC_MASK)) begin // {
6867 // Disable nas_pipe processing (capture & SSTEP)
6868 // to speed up simulation (minimize socket traffic,etc)
6869 nas_pipe_enable=1'b0;
6870 if (! `PARGS.nas_check_on) begin //{
6871 `PR_ERROR ("nas",`ERROR, "T%0d reached Bad Trap", mytnum);
6872 end //}
6873 end //}
6874
6875 for (junk=0;junk<`PARGS.good_trap_count;junk=junk+1)
6876 if ((|complete_fw2) && (({16'b0,pc_fw2}&`PC_MASK) ===
6877 (`PARGS.good_trap_addr[junk]&`PC_MASK))) begin // {
6878 // Disable nas_pipe processing (capture & SSTEP)
6879 // to speed up simulation (minimize socket traffic,etc)
6880 nas_pipe_enable=1'b0;
6881 if (! `PARGS.nas_check_on) begin //{
6882 good_trap_detected = 1'b1;
6883 end //}
6884 end //}
6885
6886 // Check Thread level timeout
6887 if (thread_running &&
6888 (`TOP.core_cycle_cnt - `TOP.th_last_act_cycle[mytnum]) > `PARGS.th_timeout)
6889 begin // {
6890 // Note: Do not change this message because regreport parses it for certain words.
6891 `PR_ALWAYS ("nas",`ALWAYS, "ERROR: Thread T%0d No Activity for %0d Cycles - Thread TIMEOUT!",
6892 mytnum, `PARGS.th_timeout);
6893 junk = incErr(9999); // must exceed users max error setting to force exit.
6894 end //}
6895
6896 end // if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable ...)}
6897
6898 // if -nosas only,
6899 // Need to make sure Store Buffer is empty before turning off th_check_enable.
6900 //global chkr requires to wait for all outstanding pending I
6901 if ((! `PARGS.nas_check_on) &&
6902 (good_trap_detected==1'b1) &&
6903 (`TOP.nas_top.lsu_stb_empty[mytnum]) && `TOP.nas_top.ireq_pending[mytnum]) begin // {
6904 `PARGS.th_check_enable[mytnum] = 1'b0;
6905 `TOP.finished_tids[mytnum] = 1'b1;
6906 good_trap_detected = 1'b0;
6907 `PR_NORMAL ("nas", `NORMAL, "T%0d reached Good Trap. Disabling checking for thread %0d", mytnum,mytnum);
6908 end // }
6909end // always }
6910
6911//----------------------------------------------------------
6912//----------------------------------------------------------
6913// Stage FX4 of delta pipeline
6914task update_fx4;
6915
6916 integer i;
6917 reg [7:0] index;
6918
6919 begin // {
6920
6921 `ifndef EMUL_TL
6922 index = `FIRST_INDEX;
6923
6924 //--------------------
6925 // Init delta_fx4
6926 delta_fx4[`NEXT_INDEX] <= `FIRST_INDEX;
6927 delta_fx4[`TIME_INDEX] <= 0;
6928 delta_fx4[`PC_INDEX] <= {16'b0,PC_reg};
6929 delta_fx4[`GL_INDEX] <= GL_reg;
6930 delta_fx4[`CWP_INDEX] <= CWP_reg;
6931 delta_fx4[`OPCODE_INDEX] <= opcode;
6932 delta_fx4[`FIRST_INDEX] <= 77'hx;
6933 `else
6934 index = 0;
6935 `endif
6936
6937 end // }
6938endtask
6939
6940//----------------------------------------------------------
6941// Stage FX5 of delta pipeline
6942task update_fx5;
6943
6944 integer i;
6945 reg [7:0] index;
6946 reg [38:0] frf_tmp;
6947
6948 begin // {
6949
6950 `ifndef EMUL_TL
6951 index = delta_fx4[`NEXT_INDEX];
6952
6953 //--------------------
6954 // Pipeline previous stage
6955 for (i=0; i<=delta_fx4[`NEXT_INDEX]; i=i+1) begin // {
6956 delta_fx5[i] <= delta_fx4[i];
6957 end
6958 `else
6959 index = 0;
6960 `endif
6961
6962 //-------------------
6963 // Control Registers
6964 if (complete_fx4) begin // LSU | EXU | TLU
6965 push_delta_fx5 (`CCR+`CTL_OFFSET,CCR_reg,index);
6966 end
6967
6968 //-------------------
6969 // Update IRF1
6970`ifndef NAS_NO_IRFFRF
6971 if (complete_fx4[`LSU_INDEX] |
6972 complete_fx4[`EXU_INDEX]) begin
6973 if (mytid <= 3) begin // {
6974 for (i=0; i<=31; i=i+1) begin // {
6975 push_delta_fx5 (i,`IRF1_EXU0[(remap(i,oddwin)+irf_offset)],index);
6976 end // }
6977 end // }
6978 else begin // {
6979 for (i=0; i<=31; i=i+1) begin // {
6980 push_delta_fx5 (i,`IRF1_EXU1[(remap(i,oddwin)+irf_offset)],index);
6981 end // }
6982 end // }
6983 end
6984`endif
6985
6986 //--------------------
6987 // Update FRF1 - Loads use W2 Port.
6988`ifndef NAS_NO_IRFFRF
6989 if (complete_fx4[`LSU_INDEX]) begin // {
6990 // IF W1 port is also being written, ignore that address
6991 for (i=0; i<=31; i=i+1) begin // {
6992 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
6993 frf_tmp = `FRF1_EVEN[(mytid*32)+i];
6994 push_delta_fx5 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
6995 end // }
6996 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
6997 frf_tmp = `FRF1_ODD[(mytid*32)+i];
6998 push_delta_fx5 (`FP_OFFSET + (i*2)+1, frf_tmp[31:0], index);
6999 end // }
7000 end //}
7001 end // }
7002`endif
7003
7004 // Update ASR/ASI registers
7005 if (complete_fx4) begin // {
7006 push_delta_fx5 (`PSTATE + `CTL_OFFSET,PSTATE_reg,index);
7007 push_delta_fx5 (`HPSTATE + `CTL_OFFSET,HPSTATE_reg,index);
7008 push_delta_fx5 (`PIL + `CTL_OFFSET,PIL_reg,index);
7009 push_delta_fx5 (`TBA + `CTL_OFFSET,{TBA_reg,15'b0},index);
7010 push_delta_fx5 (`GL + `CTL_OFFSET,GL_reg,index);
7011 push_delta_fx5 (`HTBA + `CTL_OFFSET,{HTBA_reg,14'b0},index);
7012 push_delta_fx5 (`VER + `CTL_OFFSET,VER_reg,index);
7013 push_delta_fx5 (`Y + `CTL_OFFSET,Y_reg,index);
7014 push_delta_fx5 (`ASI + `CTL_OFFSET,ASI_reg,index);
7015 push_delta_fx5 (`STICK_CMPR + `CTL_OFFSET,STICK_CMPR_wire,index);
7016 push_delta_fx5 (`HSTICK_CMPR + `CTL_OFFSET,HSTICK_CMPR_wire,index);
7017 push_delta_fx5 (`TICK_CMPR + `CTL_OFFSET,TICK_CMPR_wire,index);
7018 push_delta_fx5 (`CWP + `CTL_OFFSET,CWP_reg,index);
7019 push_delta_fx5 (`CANSAVE + `CTL_OFFSET,CANSAVE_reg,index);
7020 push_delta_fx5 (`CANRESTORE + `CTL_OFFSET,CANRESTORE_reg,index);
7021 push_delta_fx5 (`CLEANWIN + `CTL_OFFSET,CLEANWIN_reg,index);
7022 push_delta_fx5 (`OTHERWIN + `CTL_OFFSET,OTHERWIN_reg,index);
7023 push_delta_fx5 (`WSTATE + `CTL_OFFSET,WSTATE_reg,index);
7024
7025 push_delta_fx5 (`CTXT_PRIM_0+`CTL_OFFSET,CTXT_PRIM_0_reg,index);
7026 push_delta_fx5 (`CTXT_SEC_0+`CTL_OFFSET,CTXT_SEC_0_reg,index);
7027 push_delta_fx5 (`CTXT_PRIM_1+`CTL_OFFSET,CTXT_PRIM_1_reg,index);
7028 push_delta_fx5 (`CTXT_SEC_1+`CTL_OFFSET,CTXT_SEC_1_reg,index);
7029 push_delta_fx5 (`LSU_CONTROL+`CTL_OFFSET,LSU_CONTROL_reg,index);
7030 push_delta_fx5 (`WATCHPOINT_ADDR+`CTL_OFFSET,WATCHPOINT_ADDR_reg,index);
7031
7032 // NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
7033 // ADD_TSB_CFG
7034 `ifdef ADD_TSB_CFG
7035 push_delta_fx5 (`CTXT_Z_TSB_CFG0+`CTL_OFFSET,ctxt_z_tsb_cfg0_reg,index);
7036 push_delta_fx5 (`CTXT_Z_TSB_CFG1+`CTL_OFFSET,ctxt_z_tsb_cfg1_reg,index);
7037 push_delta_fx5 (`CTXT_Z_TSB_CFG2+`CTL_OFFSET,ctxt_z_tsb_cfg2_reg,index);
7038 push_delta_fx5 (`CTXT_Z_TSB_CFG3+`CTL_OFFSET,ctxt_z_tsb_cfg3_reg,index);
7039 push_delta_fx5 (`CTXT_NZ_TSB_CFG0+`CTL_OFFSET,ctxt_nz_tsb_cfg0_reg,index);
7040 push_delta_fx5 (`CTXT_NZ_TSB_CFG1+`CTL_OFFSET,ctxt_nz_tsb_cfg1_reg,index);
7041 push_delta_fx5 (`CTXT_NZ_TSB_CFG2+`CTL_OFFSET,ctxt_nz_tsb_cfg2_reg,index);
7042 push_delta_fx5 (`CTXT_NZ_TSB_CFG3+`CTL_OFFSET,ctxt_nz_tsb_cfg3_reg,index);
7043 `endif
7044
7045 end //}
7046
7047 // Update GSR for all except write ASR in progess
7048 if (!asi_in_progress) begin // {
7049 push_delta_fx5 (`GSR + `CTL_OFFSET,GSR_wire, index);
7050 end // }
7051
7052 // If lsu_complete & fp_complete assert at same time,
7053 // then the fp_complete is the one that will modify the FSR
7054 if (complete_fx4[`LSU_INDEX] & !complete_fw1[`FP_INDEX]) begin
7055 push_delta_fx5 (`FSR+`CTL_OFFSET,FSR_wire,index);
7056 end
7057
7058 // Non Trap updates of Trap stack & level
7059 if (complete_fx4 && !complete_fx4[`TLU_INDEX]) begin // {
7060 push_delta_fx5 (`TL + `CTL_OFFSET,TL_reg,index);
7061 push_delta_fx5 (`TPC1 + `CTL_OFFSET, TPC1_wire, index);
7062 push_delta_fx5 (`TPC2 + `CTL_OFFSET, TPC2_wire, index);
7063 push_delta_fx5 (`TPC3 + `CTL_OFFSET, TPC3_wire, index);
7064 push_delta_fx5 (`TPC4 + `CTL_OFFSET, TPC4_wire, index);
7065 push_delta_fx5 (`TPC5 + `CTL_OFFSET, TPC5_wire, index);
7066 push_delta_fx5 (`TPC6 + `CTL_OFFSET, TPC6_wire, index);
7067 push_delta_fx5 (`TNPC1 + `CTL_OFFSET, TNPC1_wire, index);
7068 push_delta_fx5 (`TNPC2 + `CTL_OFFSET, TNPC2_wire, index);
7069 push_delta_fx5 (`TNPC3 + `CTL_OFFSET, TNPC3_wire, index);
7070 push_delta_fx5 (`TNPC4 + `CTL_OFFSET, TNPC4_wire, index);
7071 push_delta_fx5 (`TNPC5 + `CTL_OFFSET, TNPC5_wire, index);
7072 push_delta_fx5 (`TNPC6 + `CTL_OFFSET, TNPC6_wire, index);
7073 push_delta_fx5 (`TSTATE1 + `CTL_OFFSET, TSTATE1_wire, index);
7074 push_delta_fx5 (`TSTATE2 + `CTL_OFFSET, TSTATE2_wire, index);
7075 push_delta_fx5 (`TSTATE3 + `CTL_OFFSET, TSTATE3_wire, index);
7076 push_delta_fx5 (`TSTATE4 + `CTL_OFFSET, TSTATE4_wire, index);
7077 push_delta_fx5 (`TSTATE5 + `CTL_OFFSET, TSTATE5_wire, index);
7078 push_delta_fx5 (`TSTATE6 + `CTL_OFFSET, TSTATE6_wire, index);
7079 push_delta_fx5 (`HTSTATE1 + `CTL_OFFSET, HTSTATE1_wire, index);
7080 push_delta_fx5 (`HTSTATE2 + `CTL_OFFSET, HTSTATE2_wire, index);
7081 push_delta_fx5 (`HTSTATE3 + `CTL_OFFSET, HTSTATE3_wire, index);
7082 push_delta_fx5 (`HTSTATE4 + `CTL_OFFSET, HTSTATE4_wire, index);
7083 push_delta_fx5 (`HTSTATE5 + `CTL_OFFSET, HTSTATE5_wire, index);
7084 push_delta_fx5 (`HTSTATE6 + `CTL_OFFSET, HTSTATE6_wire, index);
7085 push_delta_fx5 (`TT1 + `CTL_OFFSET, TT1_wire, index);
7086 push_delta_fx5 (`TT2 + `CTL_OFFSET, TT2_wire, index);
7087 push_delta_fx5 (`TT3 + `CTL_OFFSET, TT3_wire, index);
7088 push_delta_fx5 (`TT4 + `CTL_OFFSET, TT4_wire, index);
7089 push_delta_fx5 (`TT5 + `CTL_OFFSET, TT5_wire, index);
7090 push_delta_fx5 (`TT6 + `CTL_OFFSET, TT6_wire, index);
7091 end //}
7092
7093 end // }
7094endtask
7095
7096//----------------------------------------------------------
7097// Stage FB of delta pipeline
7098task update_fb;
7099
7100 integer i;
7101 reg [7:0] index;
7102
7103 begin // {
7104
7105 `ifndef EMUL_TL
7106 index = delta_fx5[`NEXT_INDEX];
7107
7108 //--------------------
7109 // Pipeline previous stage
7110 for (i=0; i<=delta_fx5[`NEXT_INDEX]; i=i+1) begin // {
7111 delta_fb[i] <= delta_fx5[i];
7112 end
7113 `else
7114 index = 0;
7115 `endif
7116
7117 // ASI/ASR ONLY updates
7118 if (complete_fx5[`ASI_INDEX]) begin // {
7119 push_delta_fb (`GSR + `CTL_OFFSET,GSR_wire, index);
7120 end //}
7121
7122 end // }
7123endtask
7124
7125//----------------------------------------------------------
7126// Stage FW of delta pipeline
7127task update_fw;
7128
7129 integer i;
7130 reg [7:0] index;
7131 reg [38:0] frf_tmp;
7132
7133 begin // {
7134
7135 `ifndef EMUL_TL
7136 index = delta_fb[`NEXT_INDEX];
7137
7138 //--------------------
7139 // Pipeline previous stage
7140 for (i=0; i<=delta_fb[`NEXT_INDEX]; i=i+1) begin // {
7141 delta_fw[i] <= delta_fb[i];
7142 end
7143
7144 // Capture CWP_reg for SAVE/RESTORE
7145 if (imul_complete) begin
7146 delta_fw[`CWP_INDEX] <= CWP_reg;
7147 end
7148 `else
7149 index = 0;
7150 `endif
7151
7152 //-------------------
7153 // Update IRF1
7154`ifndef NAS_NO_IRFFRF
7155 if (complete_fb[`TLU_INDEX]) begin
7156 if (mytid <= 3) begin // {
7157 for (i=0; i<=31; i=i+1) begin // {
7158 push_delta_fw (i,`IRF1_EXU0[(remap(i,oddwin)+irf_offset)],index);
7159 end // }
7160 end // }
7161 else begin // {
7162 for (i=0; i<=31; i=i+1) begin // {
7163 push_delta_fw (i,`IRF1_EXU1[(remap(i,oddwin)+irf_offset)],index);
7164 end // }
7165 end // }
7166 end
7167`endif
7168
7169 //--------------------
7170 // Update FRF1 - Idivs use W2.
7171`ifndef NAS_NO_IRFFRF
7172 if (complete_fb[`IDIV_INDEX]) begin // {
7173 // IF W1 port is also being written, ignore that address
7174 for (i=0; i<=31; i=i+1) begin // {
7175 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
7176 frf_tmp = `FRF1_EVEN[(mytid*32)+i];
7177 push_delta_fw (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
7178 end // }
7179 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
7180 frf_tmp = `FRF1_ODD[(mytid*32)+i];
7181 push_delta_fw (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
7182 end // }
7183 end //}
7184 end // }
7185`endif
7186
7187 end // }
7188
7189endtask
7190
7191//----------------------------------------------------------
7192// Stage FW1 of delta pipeline
7193task update_fw1;
7194
7195 integer i;
7196 reg [7:0] index;
7197
7198 reg [4:0] rdnum;
7199 reg [38:0] frf_tmp;
7200
7201 begin // {
7202
7203 `ifndef EMUL_TL
7204 index = delta_fw[`NEXT_INDEX];
7205
7206 //--------------------
7207 // Pipeline previous stage
7208 for (i=0; i<=delta_fw[`NEXT_INDEX]; i=i+1) begin // {
7209 delta_fw1[i] <= delta_fw[i];
7210 end
7211 `else
7212 index = 0;
7213 `endif
7214
7215 //--------------------
7216 // Update FRF1 - FPops use W1 port.
7217`ifndef NAS_NO_IRFFRF
7218 if (fp_complete) begin // {
7219 // IF W2 port is also being written, ignore that address
7220 for (i=0; i<=31; i=i+1) begin // {
7221 if (!((i == frf_w2_skip_addr) && frf_w2_valid_even)) begin // {
7222 frf_tmp = `FRF1_EVEN[(mytid*32)+i];
7223 push_delta_fw1 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
7224 end // }
7225 if (!((i == frf_w2_skip_addr) && frf_w2_valid_odd)) begin // {
7226 frf_tmp = `FRF1_ODD[(mytid*32)+i];
7227 push_delta_fw1 (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
7228 end // }
7229 end //}
7230 end // }
7231`endif
7232
7233 //-------------------
7234 // Control Registers
7235 if (complete_fw[`IMUL_INDEX]|complete_fw[`IDIV_INDEX]) begin
7236 push_delta_fw1 (`CCR+`CTL_OFFSET,CCR_reg,index);
7237 push_delta_fw1 (`Y+`CTL_OFFSET,Y_reg,index);
7238 push_delta_fw1 (`CWP+`CTL_OFFSET,CWP_reg,index);
7239 push_delta_fw1 (`CANSAVE+`CTL_OFFSET,CANSAVE_reg,index);
7240 push_delta_fw1 (`CANRESTORE+`CTL_OFFSET,CANRESTORE_reg,index);
7241 push_delta_fw1 (`CLEANWIN+`CTL_OFFSET,CLEANWIN_reg,index);
7242 push_delta_fw1 (`OTHERWIN+`CTL_OFFSET,OTHERWIN_reg,index);
7243 push_delta_fw1 (`WSTATE+`CTL_OFFSET,WSTATE_reg,index);
7244 end
7245
7246 // Update Trap Stack now
7247 if (complete_fw[`TLU_INDEX]) begin // {
7248 push_delta_fw1 (`TL + `CTL_OFFSET,TL_reg,index);
7249 push_delta_fw1 (`TPC1 + `CTL_OFFSET, TPC1_wire, index);
7250 push_delta_fw1 (`TPC2 + `CTL_OFFSET, TPC2_wire, index);
7251 push_delta_fw1 (`TPC3 + `CTL_OFFSET, TPC3_wire, index);
7252 push_delta_fw1 (`TPC4 + `CTL_OFFSET, TPC4_wire, index);
7253 push_delta_fw1 (`TPC5 + `CTL_OFFSET, TPC5_wire, index);
7254 push_delta_fw1 (`TPC6 + `CTL_OFFSET, TPC6_wire, index);
7255 push_delta_fw1 (`TNPC1 + `CTL_OFFSET, TNPC1_wire, index);
7256 push_delta_fw1 (`TNPC2 + `CTL_OFFSET, TNPC2_wire, index);
7257 push_delta_fw1 (`TNPC3 + `CTL_OFFSET, TNPC3_wire, index);
7258 push_delta_fw1 (`TNPC4 + `CTL_OFFSET, TNPC4_wire, index);
7259 push_delta_fw1 (`TNPC5 + `CTL_OFFSET, TNPC5_wire, index);
7260 push_delta_fw1 (`TNPC6 + `CTL_OFFSET, TNPC6_wire, index);
7261 push_delta_fw1 (`TSTATE1 + `CTL_OFFSET, TSTATE1_wire, index);
7262 push_delta_fw1 (`TSTATE2 + `CTL_OFFSET, TSTATE2_wire, index);
7263 push_delta_fw1 (`TSTATE3 + `CTL_OFFSET, TSTATE3_wire, index);
7264 push_delta_fw1 (`TSTATE4 + `CTL_OFFSET, TSTATE4_wire, index);
7265 push_delta_fw1 (`TSTATE5 + `CTL_OFFSET, TSTATE5_wire, index);
7266 push_delta_fw1 (`TSTATE6 + `CTL_OFFSET, TSTATE6_wire, index);
7267 push_delta_fw1 (`HTSTATE1 + `CTL_OFFSET, HTSTATE1_wire, index);
7268 push_delta_fw1 (`HTSTATE2 + `CTL_OFFSET, HTSTATE2_wire, index);
7269 push_delta_fw1 (`HTSTATE3 + `CTL_OFFSET, HTSTATE3_wire, index);
7270 push_delta_fw1 (`HTSTATE4 + `CTL_OFFSET, HTSTATE4_wire, index);
7271 push_delta_fw1 (`HTSTATE5 + `CTL_OFFSET, HTSTATE5_wire, index);
7272 push_delta_fw1 (`HTSTATE6 + `CTL_OFFSET, HTSTATE6_wire, index);
7273 push_delta_fw1 (`TT1 + `CTL_OFFSET, TT1_wire, index);
7274 push_delta_fw1 (`TT2 + `CTL_OFFSET, TT2_wire, index);
7275 push_delta_fw1 (`TT3 + `CTL_OFFSET, TT3_wire, index);
7276 push_delta_fw1 (`TT4 + `CTL_OFFSET, TT4_wire, index);
7277 push_delta_fw1 (`TT5 + `CTL_OFFSET, TT5_wire, index);
7278 push_delta_fw1 (`TT6 + `CTL_OFFSET, TT6_wire, index);
7279 end //}
7280
7281 end // }
7282endtask
7283
7284//----------------------------------------------------------
7285// Stage FW2 of delta pipeline
7286task update_fw2;
7287
7288 integer i;
7289 reg [7:0] index;
7290 reg [38:0] frf_tmp;
7291
7292 begin // {
7293
7294 `ifndef EMUL_TL
7295 index = delta_fw1[`NEXT_INDEX];
7296
7297 //--------------------
7298 // Pipeline previous stage
7299 for (i=0; i<=delta_fw1[`NEXT_INDEX]; i=i+1) begin // {
7300 delta_fw2[i] <= delta_fw1[i];
7301 end
7302
7303 delta_fw2[`TIME_INDEX] <= $time;
7304 `else
7305 index = 0;
7306 `endif
7307
7308 // Update Registers that may change asynchronously
7309 // If sstep was already sent by another module,
7310 // don't capture until the next sstep
7311 if (complete_fw1 && !`NASTOP.sstep_early[mytnum]) begin // {
7312 if ((complete_fw1[`ASI_INDEX]|complete_fw1[`LSU_INDEX]) & asi_rdwr_hintp)
7313 push_delta_fw2 (`HINTP + `CTL_OFFSET,asi_updated_hintp,index);
7314 else
7315 push_delta_fw2 (`HINTP + `CTL_OFFSET,HINTP_reg,index);
7316 if ((complete_fw1[`ASI_INDEX]|complete_fw1[`LSU_INDEX]) & asi_rdwr_softint)
7317 push_delta_fw2 (`SOFTINT + `CTL_OFFSET,asi_updated_softint,index);
7318 else
7319 push_delta_fw2 (`SOFTINT + `CTL_OFFSET,rd_SOFTINT_reg,index);
7320 end // }
7321
7322 //-------------------
7323 // Update IRF1
7324`ifndef NAS_NO_IRFFRF
7325 if (complete_fw1[`IMUL_INDEX] |
7326 complete_fw1[`IDIV_INDEX]) begin // {
7327 if (mytid <= 3) begin // {
7328 for (i=0; i<=31; i=i+1) begin // {
7329 push_delta_fw2 (i,`IRF1_EXU0[(remap(i,oddwin)+irf_offset)],index);
7330 end // }
7331 end // }
7332 else begin // {
7333 for (i=0; i<=31; i=i+1) begin // {
7334 push_delta_fw2 (i,`IRF1_EXU1[(remap(i,oddwin)+irf_offset)],index);
7335 end // }
7336 end // }
7337 end // }
7338`endif
7339
7340 //--------------------
7341 // Update FRF1 - fdivs and Imuls use W2 port
7342`ifndef NAS_NO_IRFFRF
7343 if (complete_fw1[`IMUL_INDEX] |
7344 complete_fw1[`FDIV_INDEX] ) begin // {
7345 // IF W1 port is also being written, ignore that address
7346 for (i=0; i<=31; i=i+1) begin // {
7347 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
7348 frf_tmp = `FRF1_EVEN[(mytid*32)+i];
7349 push_delta_fw2 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
7350 end // }
7351 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
7352 frf_tmp = `FRF1_ODD[(mytid*32)+i];
7353 push_delta_fw2 (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
7354 end // }
7355 end //}
7356 end // }
7357`endif
7358
7359 if (complete_fw1[`FP_INDEX] |
7360 complete_fw1[`TLU_INDEX] |
7361 complete_fw1[`FDIV_INDEX]) begin
7362 push_delta_fw2 (`FSR+`CTL_OFFSET,FSR_wire,index);
7363 end
7364
7365 if (complete_fw1) begin
7366 push_delta_fw2 (`I_TAG_ACC+`CTL_OFFSET,itagacc_fw2,index);
7367 push_delta_fw2 (`D_TAG_ACC+`CTL_OFFSET,dtagacc_fw2,index);
7368 push_delta_fw2 (`DSFAR+`CTL_OFFSET,dsfar_fw2,index);
7369 end
7370
7371 end // }
7372endtask
7373
7374//----------------------------------------------------------
7375// Stage FW2 of delta pipeline - for signals that change FW+2 !!
7376task update_fw2_async;
7377
7378 integer i;
7379 reg [7:0] index;
7380 reg [2:0] dummy_fprs;
7381
7382 begin // {
7383
7384 `ifndef EMUL_TL
7385 index = delta_fw2[`NEXT_INDEX];
7386 `else
7387 index = 0;
7388 `endif
7389
7390 // Since FPRS for FPops may have been corrupted by o-o-o loads:
7391 // If fprs_fw2 is != fprs_reg & there are loads in the pipeline
7392 // then assume loads have already updated fprs.
7393 // In that case, create our own fprs_reg by using the valids and
7394 // skip_addr and copy of fprs for this op..
7395 if (complete_fw2[`FP_INDEX] && frf_w1_valid_fw2) begin // {
7396 // o-o-o load has changed fprs already - use dummy
7397 if ((fprs_fw2 != FPRS_reg) && (complete_fw1[`LSU_INDEX] |
7398 complete_fw[`LSU_INDEX] | complete_fb[`LSU_INDEX] |
7399 complete_fx5[`LSU_INDEX] )) begin // {
7400 dummy_fprs = read_prev(`FPRS + `CTL_OFFSET);
7401 dummy_fprs = dummy_fprs |
7402 {1'b0, frf_w1_skip_addr4_fw2, ~frf_w1_skip_addr4_fw2};
7403 push_delta_fw2_async (`FPRS + `CTL_OFFSET,dummy_fprs,index);
7404 end //}
7405 // o-o-o load has NOT changed fprs already - use it
7406 else begin // {
7407 push_delta_fw2_async (`FPRS + `CTL_OFFSET,FPRS_reg,index);
7408 end //}
7409 end //}
7410 // Load FPRS for loads/reads as prev|fprs_fb ..
7411 // since loads may only 'set' bits, not clear ...
7412 else if (complete_fw2[`LSU_INDEX]) begin // {
7413 dummy_fprs = read_prev(`FPRS + `CTL_OFFSET);
7414 dummy_fprs = dummy_fprs | fprs_fw1;
7415 push_delta_fw2_async (`FPRS +`CTL_OFFSET,dummy_fprs,index);
7416 end // }
7417 // Load FPRS for store ASI or FDIV
7418 // FDIV can update FPRS on w1 or w2,
7419 // but the pipe is stalled behind it so no o-o-o loads.
7420 else if ((complete_fw2[`ASI_INDEX]) ||
7421 (complete_fw2[`FDIV_INDEX])) begin // {
7422 push_delta_fw2_async (`FPRS + `CTL_OFFSET,FPRS_reg,index);
7423 end //}
7424
7425 end // }
7426endtask
7427
7428//----------------------------------------------------------
7429// Store latest values into delta
7430// Capture of next PC
7431task update_pc;
7432 reg [7:0] index;
7433 begin
7434 `ifndef EMUL_TL
7435 index = delta_prev[`NEXT_INDEX];
7436 `else
7437 index = 0;
7438 `endif
7439
7440 if (in_wmr & ~`SPC1.rst_wmr_protect) begin // {
7441 push_delta_prev_async ( `PC+`CTL_OFFSET,{16'b0,pc_fw2|1},index);
7442 in_wmr <= 0;
7443 end // }
7444 else
7445 push_delta_prev_async ( `PC+`CTL_OFFSET,{16'b0,pc_fw2},index);
7446 pc_last <= pc_fw2;
7447 cwp_last <= cwp_fw2;
7448 end
7449endtask
7450
7451//----------------------------------------------------------
7452//----------------------------------------------------------
7453// Compare with current state and capture if different
7454task push_delta_fx4;
7455
7456 input [7:0] id;
7457 input [63:0] act_value;
7458 inout [7:0] next;
7459 reg [2:0] win;
7460 reg [1:0] type;
7461
7462 begin // {
7463 if (act_value != read_prev(id)) begin // { // Diff vs prev
7464 calc_cwp(CWP_reg,id,win,type); // special case for 1st stage
7465 write_prev(id,act_value);
7466
7467 `ifndef EMUL_TL
7468 delta_fx4[next] <= {type,win,id,act_value};
7469 next = next+1;
7470 delta_fx4[next] <= 77'hx;
7471 delta_fx4[`NEXT_INDEX] <= next;
7472 if (`PARGS.axis_debug_on) begin
7473 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
7474 mytnum,PC_reg,id,type,win,act_value,$time);
7475 end
7476 `else
7477 if (`PARGS.axis_debug_on) begin
7478 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
7479 mytnum,PC_reg,id,type,win,act_value,$time);
7480 end
7481 `endif
7482 end //}
7483 end //}
7484
7485endtask
7486
7487//----------------------------------------------------------
7488// Compare with current state and capture if different
7489task push_delta_fx5;
7490
7491 input [7:0] id;
7492 input [63:0] act_value;
7493 inout [7:0] next;
7494 reg [2:0] win;
7495 reg [1:0] type;
7496
7497 begin // {
7498 if (act_value != read_prev(id)) begin // { // Diff vs prev
7499 `ifndef EMUL_TL
7500 calc_cwp(delta_fx4[`CWP_INDEX],id,win,type);
7501 write_prev(id,act_value);
7502 delta_fx5[next] <= {type,win,id,act_value};
7503 next = next+1;
7504 delta_fx5[next] <= 77'hx;
7505 delta_fx5[`NEXT_INDEX] <= next;
7506 if (`PARGS.axis_debug_on) begin
7507 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
7508 mytnum,pc_fx4,id,type,win,act_value,$time);
7509 end
7510 `else
7511 calc_cwp(cwp_fx4,id,win,type);
7512 if (`PARGS.axis_debug_on) begin
7513 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
7514 mytnum,pc_fx4,id,type,win,act_value,$time);
7515 end
7516 `endif
7517 end //}
7518 end //}
7519
7520endtask
7521
7522//----------------------------------------------------------
7523// Compare with current state and capture if different
7524task push_delta_fb;
7525
7526 input [7:0] id;
7527 input [63:0] act_value;
7528 inout [7:0] next;
7529 reg [2:0] win;
7530 reg [1:0] type;
7531
7532 begin // {
7533 if (act_value != read_prev(id)) begin // { // Diff vs prev
7534 `ifndef EMUL_TL
7535 calc_cwp(delta_fx5[`CWP_INDEX],id,win,type);
7536 write_prev(id,act_value);
7537 delta_fb[next] <= {type,win,id,act_value};
7538 next = next+1;
7539 delta_fb[next] <= 77'hx;
7540 delta_fb[`NEXT_INDEX] <= next;
7541 if (`PARGS.axis_debug_on) begin
7542 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
7543 mytnum,pc_fx5,id,type,win,act_value,$time);
7544 end
7545 `else
7546 calc_cwp(cwp_fx5,id,win,type);
7547 if (`PARGS.axis_debug_on) begin
7548 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
7549 mytnum,pc_fx5,id,type,win,act_value,$time);
7550 end
7551 `endif
7552 end //}
7553 end //}
7554
7555endtask
7556
7557//----------------------------------------------------------
7558// Compare with current state and capture if different
7559task push_delta_fw;
7560
7561 input [7:0] id;
7562 input [63:0] act_value;
7563 inout [7:0] next;
7564 reg [2:0] win;
7565 reg [1:0] type;
7566
7567 begin // {
7568 if (act_value != read_prev(id)) begin // { // Diff vs prev
7569
7570 `ifndef EMUL_TL
7571 calc_cwp(delta_fb[`CWP_INDEX],id,win,type);
7572 write_prev(id,act_value);
7573 delta_fw[next] <= {type,win,id,act_value};
7574 next = next+1;
7575 delta_fw[next] <= 77'hx;
7576 delta_fw[`NEXT_INDEX] <= next;
7577 if (`PARGS.axis_debug_on) begin
7578 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
7579 mytnum,pc_fb,id,type,win,act_value,$time);
7580 end
7581 `else
7582 calc_cwp(cwp_fb[`CWP_INDEX],id,win,type);
7583 if (`PARGS.axis_debug_on) begin
7584 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
7585 mytnum,pc_fb,id,type,win,act_value,$time);
7586 end
7587 `endif
7588 end //}
7589 end //}
7590
7591endtask
7592
7593//----------------------------------------------------------
7594// Compare with current state and capture if different
7595task push_delta_fw1;
7596
7597 input [7:0] id;
7598 input [63:0] act_value;
7599 inout [7:0] next;
7600 reg [2:0] win;
7601 reg [1:0] type;
7602
7603 begin // {
7604 if (act_value != read_prev(id)) begin // { // Diff vs prev
7605
7606 `ifndef EMUL_TL
7607 calc_cwp(delta_fw[`CWP_INDEX],id,win,type);
7608 write_prev(id,act_value);
7609 delta_fw1[next] <= {type,win,id,act_value};
7610 next = next+1;
7611 delta_fw1[next] <= 77'hx;
7612 delta_fw1[`NEXT_INDEX] <= next;
7613 if (`PARGS.axis_debug_on) begin
7614 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
7615 mytnum,pc_fw,id,type,win,act_value,$time);
7616 end
7617 `else
7618 calc_cwp(cwp_fw,id,win,type);
7619 if (`PARGS.axis_debug_on) begin
7620 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
7621 mytnum,pc_fw,id,type,win,act_value,$time);
7622 end
7623 `endif
7624 end //}
7625 end //}
7626
7627endtask
7628
7629//----------------------------------------------------------
7630// Compare with current state and capture if different
7631task push_delta_fw2;
7632
7633 input [7:0] id;
7634 input [63:0] act_value;
7635 inout [7:0] next;
7636 reg [2:0] win;
7637 reg [1:0] type;
7638
7639 begin // {
7640 if (act_value != read_prev(id)) begin // { // Diff vs prev
7641
7642 `ifndef EMUL_TL
7643 calc_cwp(delta_fw1[`CWP_INDEX],id,win,type);
7644 write_prev(id,act_value);
7645 delta_fw2[next] <= {type,win,id,act_value};
7646 next = next+1;
7647 delta_fw2[next] <= 77'hx;
7648 delta_fw2[`NEXT_INDEX] <= next;
7649 if (`PARGS.axis_debug_on) begin
7650 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
7651 mytnum,pc_fw1,id,type,win,act_value,$time);
7652 end
7653 `else
7654 calc_cwp(cwp_fw1,id,win,type);
7655 if (`PARGS.axis_debug_on) begin
7656 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
7657 mytnum,pc_fw1,id,type,win,act_value,$time);
7658 end
7659 `endif
7660 end //}
7661 end //}
7662
7663endtask
7664
7665//----------------------------------------------------------
7666// Compare with current state and capture if different
7667// This is for late changing registers
7668// Use blocking assignments.
7669task push_delta_fw2_async;
7670
7671 input [7:0] id;
7672 input [63:0] act_value;
7673 inout [7:0] next;
7674 reg [2:0] win;
7675 reg [1:0] type;
7676
7677 begin // {
7678 if (act_value != read_prev(id)) begin // { // Diff vs prev
7679
7680 `ifndef EMUL_TL
7681 calc_cwp(delta_fw2[`CWP_INDEX],id,win,type);
7682 write_prev_async(id,act_value);
7683 delta_fw2[next] = {type,win,id,act_value};
7684 next = next+1;
7685 delta_fw2[next] = 77'hx;
7686 delta_fw2[`NEXT_INDEX] = next;
7687 if (`PARGS.axis_debug_on) begin
7688 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
7689 mytnum,pc_fw1,id,type,win,act_value,$time);
7690 end
7691 `else
7692 calc_cwp(cwp_fw2,id,win,type);
7693 if (`PARGS.axis_debug_on) begin
7694 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
7695 mytnum,pc_fw1,id,type,win,act_value,$time);
7696 end
7697 `endif
7698 end //}
7699 end //}
7700
7701endtask
7702
7703
7704//----------------------------------------------------------
7705// Compare with current state and capture if different
7706// Use blocking assignments so that push_simics will work
7707task push_delta_prev_async;
7708
7709 input [7:0] id;
7710 input [63:0] act_value;
7711 inout [7:0] next;
7712 reg [2:0] win;
7713 reg [1:0] type;
7714
7715 begin // {
7716
7717 if (act_value != read_prev(id)) begin // { // Diff vs prev
7718
7719 `ifndef EMUL_TL
7720 calc_cwp(delta_prev[`CWP_INDEX],id,win,type);
7721 write_prev_async(id,act_value);
7722 delta_prev[next] = {type,win,id,act_value};
7723 next = next+1;
7724 delta_prev[next] = 77'hx;
7725 delta_prev[`NEXT_INDEX] = next;
7726 if (`PARGS.axis_debug_on) begin
7727 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
7728 mytnum,pc_last,id,type,win,act_value,$time);
7729 end
7730 `else
7731 if (`PARGS.axis_debug_on) begin
7732 calc_cwp(cwp_last,id,win,type);
7733 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
7734 mytnum,pc_last,id,type,win,act_value,$time);
7735 end
7736 `endif
7737 end //}
7738 end //}
7739
7740endtask
7741
7742//----------------------------------------------------------
7743// prev of delta pipeline
7744task update_prev;
7745 integer i;
7746
7747 begin // {
7748 `ifndef EMUL_TL
7749 //--------------------
7750 // Pipeline previous stage
7751 for (i=0; i<=delta_fw2[`NEXT_INDEX]; i=i+1) begin // {
7752 delta_prev[i] <= delta_fw2[i];
7753 end
7754 `endif
7755 end //}
7756
7757endtask
7758
7759//----------------------------------------------------------
7760//----------------------------------------------------------
7761// Sort delta list in register ID order, then push to simics
7762// Or print deltas if sas check disabled ..
7763task push_simics;
7764
7765integer i;
7766reg [7:0] act_type;
7767integer act_level;
7768reg [7:0] regnum;
7769reg [2:0] win;
7770reg [1:0] type;
7771reg [63:0] value;
7772reg [63:0] pc;
7773reg [63:0] time_fw2;
7774
7775 begin // {
7776
7777 `ifndef EMUL_TL
7778 `NASTOP.delta_cnt = 0;
7779 sort_delta;
7780
7781 //--------------------
7782 // Order of registers reported to simics must be:
7783 // Global 0-7 aka prev_reg[0:7]
7784 // Window 8-23 aka prev_reg[8:23]
7785 // Floating 0-63 aka prev_reg[200:263]
7786 // Control 32-143 aka prev_reg[32:143]
7787
7788 act_level = delta_prev[`GL_INDEX]; // GL
7789 time_fw2 = delta_prev[`TIME_INDEX]; // Finish time
7790
7791
7792 //--------------------
7793 for (i=`FIRST_INDEX; i<delta_prev[`NEXT_INDEX]; i=i+1) begin // {
7794 {type,win,regnum,value} = delta_prev[i];
7795
7796 if (regnum<=7) begin // {
7797 act_type = "G";
7798 if (`PARGS.nas_check_on) begin // {
7799 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
7800 act_level, regnum, value);
7801 end // }
7802 else if (`PARGS.show_delta_on) begin // {
7803 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
7804 end //}
7805 end // }
7806 else if (regnum<=23) begin // { %o0-%l7, %l0-%l7
7807 act_type = "W";
7808 if (`PARGS.nas_check_on) begin // {
7809 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
7810 win, regnum, value);
7811 end // }
7812 else if (`PARGS.show_delta_on) begin // {
7813 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
7814 end //}
7815 end // }
7816 else if (regnum<=31) begin // { %i0-%i7
7817 act_type = "W";
7818 if (`PARGS.nas_check_on) begin // {
7819 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
7820 win, (regnum-16), value);
7821 end // }
7822 else if (`PARGS.show_delta_on) begin // {
7823 `NASTOP.print_delta (mytnum,act_type,win,(regnum-16),value);
7824 end //}
7825 end // }
7826 else if (regnum<=(64+`FP_OFFSET)) begin // {
7827 act_type = "F";
7828 if (`PARGS.nas_check_on) begin // {
7829 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
7830 (regnum-`FP_OFFSET), value);
7831 end // }
7832 else if (`PARGS.show_delta_on) begin // {
7833 `NASTOP.print_delta (mytnum,act_type,win,(regnum-`FP_OFFSET),value);
7834 end //}
7835 end // }
7836 else if ((regnum>=(32+`CTL_OFFSET))&(regnum<=(143+`CTL_OFFSET))) begin // {
7837 act_type = "C";
7838 if (`PARGS.nas_check_on) begin // {
7839 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
7840 (regnum-`CTL_OFFSET), value);
7841 end //}
7842 else if (`PARGS.show_delta_on) begin // {
7843 `NASTOP.print_delta (mytnum,act_type,win,(regnum-`CTL_OFFSET),value);
7844 end //}
7845 end // }
7846 else begin // {
7847 `PR_ERROR ("nas", `ERROR, " - T%0d Bench problem. push_simics has bad regnum", mytnum);
7848 end // }
7849 end // }
7850
7851 //--------------------
7852 // Push Opcode
7853 act_type = "C";
7854 regnum = `OPCODE;
7855 value = delta_prev[`OPCODE_INDEX];
7856 if (`PARGS.nas_check_on) begin // {
7857 `ifdef OPCODE_COMPARE
7858 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
7859 regnum, value);
7860 `endif
7861 end //}
7862 else if (`PARGS.show_delta_on) begin // {
7863 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
7864 end //}
7865
7866
7867 //--------------------
7868 // Push End of Instruction Delimiter
7869 // The value field for this PUSH equals the PC for this instruction.
7870 // so that printing to the logfile works correctly.
7871 // prev_reg[`PC] = current instruction PC
7872 // delta_reg[`PC] = PC at end of current instruction
7873 act_type = "X";
7874 pc = delta_prev[`PC_INDEX];
7875 if (`PARGS.nas_check_on) begin // {
7876 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
7877 delta_fw2[`CWP_INDEX], `END_INSTR, pc);
7878 end // }
7879 else if (`PARGS.show_delta_on) begin // {
7880 `NASTOP.print_delta (mytnum,act_type,delta_fw2[`CWP_INDEX],`END_INSTR,0);
7881 end //}
7882 if (! `PARGS.nas_check_on) begin // {
7883 `PR_NORMAL ("nas", `NORMAL, "@%0d T%0d %h (Unchecked..)",
7884 $time, mytnum, {16'b0,pc});
7885 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
7886 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
7887 end //}
7888
7889 `else
7890 if (! `PARGS.nas_check_on) begin // {
7891 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
7892 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
7893 end //}
7894 `endif
7895 end // }
7896endtask
7897
7898
7899//----------------------------------------------------------
7900// Save current window to previous window, then copy new window to current window
7901task copy_win;
7902 input [2:0] new_cwp;
7903 input [2:0] old_cwp;
7904 integer i;
7905
7906 begin // {
7907
7908 // Save current window to Old window
7909 case (old_cwp)
7910 0: begin // {
7911 win0_reg8 = prev_reg8;
7912 win1_reg24 = prev_reg8;
7913 win0_reg9 = prev_reg9;
7914 win1_reg25 = prev_reg9;
7915 win0_reg10 = prev_reg10;
7916 win1_reg26 = prev_reg10;
7917 win0_reg11 = prev_reg11;
7918 win1_reg27 = prev_reg11;
7919 win0_reg12 = prev_reg12;
7920 win1_reg28 = prev_reg12;
7921 win0_reg13 = prev_reg13;
7922 win1_reg29 = prev_reg13;
7923 win0_reg14 = prev_reg14;
7924 win1_reg30 = prev_reg14;
7925 win0_reg15 = prev_reg15;
7926 win1_reg31 = prev_reg15;
7927 win0_reg16 = prev_reg16;
7928 win0_reg17 = prev_reg17;
7929 win0_reg18 = prev_reg18;
7930 win0_reg19 = prev_reg19;
7931 win0_reg20 = prev_reg20;
7932 win0_reg21 = prev_reg21;
7933 win0_reg22 = prev_reg22;
7934 win0_reg23 = prev_reg23;
7935 win0_reg24 = prev_reg24;
7936 win7_reg8 = prev_reg24;
7937 win0_reg25 = prev_reg25;
7938 win7_reg9 = prev_reg25;
7939 win0_reg26 = prev_reg26;
7940 win7_reg10 = prev_reg26;
7941 win0_reg27 = prev_reg27;
7942 win7_reg11 = prev_reg27;
7943 win0_reg28 = prev_reg28;
7944 win7_reg12 = prev_reg28;
7945 win0_reg29 = prev_reg29;
7946 win7_reg13 = prev_reg29;
7947 win0_reg30 = prev_reg30;
7948 win7_reg14 = prev_reg30;
7949 win0_reg31 = prev_reg31;
7950 win7_reg15 = prev_reg31;
7951 end // }
7952 1: begin // {
7953 win1_reg8 = prev_reg8;
7954 win2_reg24 = prev_reg8;
7955 win1_reg9 = prev_reg9;
7956 win2_reg25 = prev_reg9;
7957 win1_reg10 = prev_reg10;
7958 win2_reg26 = prev_reg10;
7959 win1_reg11 = prev_reg11;
7960 win2_reg27 = prev_reg11;
7961 win1_reg12 = prev_reg12;
7962 win2_reg28 = prev_reg12;
7963 win1_reg13 = prev_reg13;
7964 win2_reg29 = prev_reg13;
7965 win1_reg14 = prev_reg14;
7966 win2_reg30 = prev_reg14;
7967 win1_reg15 = prev_reg15;
7968 win2_reg31 = prev_reg15;
7969 win1_reg16 = prev_reg16;
7970 win1_reg17 = prev_reg17;
7971 win1_reg18 = prev_reg18;
7972 win1_reg19 = prev_reg19;
7973 win1_reg20 = prev_reg20;
7974 win1_reg21 = prev_reg21;
7975 win1_reg22 = prev_reg22;
7976 win1_reg23 = prev_reg23;
7977 win1_reg24 = prev_reg24;
7978 win0_reg8 = prev_reg24;
7979 win1_reg25 = prev_reg25;
7980 win0_reg9 = prev_reg25;
7981 win1_reg26 = prev_reg26;
7982 win0_reg10 = prev_reg26;
7983 win1_reg27 = prev_reg27;
7984 win0_reg11 = prev_reg27;
7985 win1_reg28 = prev_reg28;
7986 win0_reg12 = prev_reg28;
7987 win1_reg29 = prev_reg29;
7988 win0_reg13 = prev_reg29;
7989 win1_reg30 = prev_reg30;
7990 win0_reg14 = prev_reg30;
7991 win1_reg31 = prev_reg31;
7992 win0_reg15 = prev_reg31;
7993 end // }
7994 2: begin // {
7995 win2_reg8 = prev_reg8;
7996 win3_reg24 = prev_reg8;
7997 win2_reg9 = prev_reg9;
7998 win3_reg25 = prev_reg9;
7999 win2_reg10 = prev_reg10;
8000 win3_reg26 = prev_reg10;
8001 win2_reg11 = prev_reg11;
8002 win3_reg27 = prev_reg11;
8003 win2_reg12 = prev_reg12;
8004 win3_reg28 = prev_reg12;
8005 win2_reg13 = prev_reg13;
8006 win3_reg29 = prev_reg13;
8007 win2_reg14 = prev_reg14;
8008 win3_reg30 = prev_reg14;
8009 win2_reg15 = prev_reg15;
8010 win3_reg31 = prev_reg15;
8011 win2_reg16 = prev_reg16;
8012 win2_reg17 = prev_reg17;
8013 win2_reg18 = prev_reg18;
8014 win2_reg19 = prev_reg19;
8015 win2_reg20 = prev_reg20;
8016 win2_reg21 = prev_reg21;
8017 win2_reg22 = prev_reg22;
8018 win2_reg23 = prev_reg23;
8019 win2_reg24 = prev_reg24;
8020 win1_reg8 = prev_reg24;
8021 win2_reg25 = prev_reg25;
8022 win1_reg9 = prev_reg25;
8023 win2_reg26 = prev_reg26;
8024 win1_reg10 = prev_reg26;
8025 win2_reg27 = prev_reg27;
8026 win1_reg11 = prev_reg27;
8027 win2_reg28 = prev_reg28;
8028 win1_reg12 = prev_reg28;
8029 win2_reg29 = prev_reg29;
8030 win1_reg13 = prev_reg29;
8031 win2_reg30 = prev_reg30;
8032 win1_reg14 = prev_reg30;
8033 win2_reg31 = prev_reg31;
8034 win1_reg15 = prev_reg31;
8035 end // }
8036 3: begin // {
8037 win3_reg8 = prev_reg8;
8038 win4_reg24 = prev_reg8;
8039 win3_reg9 = prev_reg9;
8040 win4_reg25 = prev_reg9;
8041 win3_reg10 = prev_reg10;
8042 win4_reg26 = prev_reg10;
8043 win3_reg11 = prev_reg11;
8044 win4_reg27 = prev_reg11;
8045 win3_reg12 = prev_reg12;
8046 win4_reg28 = prev_reg12;
8047 win3_reg13 = prev_reg13;
8048 win4_reg29 = prev_reg13;
8049 win3_reg14 = prev_reg14;
8050 win4_reg30 = prev_reg14;
8051 win3_reg15 = prev_reg15;
8052 win4_reg31 = prev_reg15;
8053 win3_reg16 = prev_reg16;
8054 win3_reg17 = prev_reg17;
8055 win3_reg18 = prev_reg18;
8056 win3_reg19 = prev_reg19;
8057 win3_reg20 = prev_reg20;
8058 win3_reg21 = prev_reg21;
8059 win3_reg22 = prev_reg22;
8060 win3_reg23 = prev_reg23;
8061 win3_reg24 = prev_reg24;
8062 win2_reg8 = prev_reg24;
8063 win3_reg25 = prev_reg25;
8064 win2_reg9 = prev_reg25;
8065 win3_reg26 = prev_reg26;
8066 win2_reg10 = prev_reg26;
8067 win3_reg27 = prev_reg27;
8068 win2_reg11 = prev_reg27;
8069 win3_reg28 = prev_reg28;
8070 win2_reg12 = prev_reg28;
8071 win3_reg29 = prev_reg29;
8072 win2_reg13 = prev_reg29;
8073 win3_reg30 = prev_reg30;
8074 win2_reg14 = prev_reg30;
8075 win3_reg31 = prev_reg31;
8076 win2_reg15 = prev_reg31;
8077 end // }
8078 4: begin // {
8079 win4_reg8 = prev_reg8;
8080 win5_reg24 = prev_reg8;
8081 win4_reg9 = prev_reg9;
8082 win5_reg25 = prev_reg9;
8083 win4_reg10 = prev_reg10;
8084 win5_reg26 = prev_reg10;
8085 win4_reg11 = prev_reg11;
8086 win5_reg27 = prev_reg11;
8087 win4_reg12 = prev_reg12;
8088 win5_reg28 = prev_reg12;
8089 win4_reg13 = prev_reg13;
8090 win5_reg29 = prev_reg13;
8091 win4_reg14 = prev_reg14;
8092 win5_reg30 = prev_reg14;
8093 win4_reg15 = prev_reg15;
8094 win5_reg31 = prev_reg15;
8095 win4_reg16 = prev_reg16;
8096 win4_reg17 = prev_reg17;
8097 win4_reg18 = prev_reg18;
8098 win4_reg19 = prev_reg19;
8099 win4_reg20 = prev_reg20;
8100 win4_reg21 = prev_reg21;
8101 win4_reg22 = prev_reg22;
8102 win4_reg23 = prev_reg23;
8103 win4_reg24 = prev_reg24;
8104 win3_reg8 = prev_reg24;
8105 win4_reg25 = prev_reg25;
8106 win3_reg9 = prev_reg25;
8107 win4_reg26 = prev_reg26;
8108 win3_reg10 = prev_reg26;
8109 win4_reg27 = prev_reg27;
8110 win3_reg11 = prev_reg27;
8111 win4_reg28 = prev_reg28;
8112 win3_reg12 = prev_reg28;
8113 win4_reg29 = prev_reg29;
8114 win3_reg13 = prev_reg29;
8115 win4_reg30 = prev_reg30;
8116 win3_reg14 = prev_reg30;
8117 win4_reg31 = prev_reg31;
8118 win3_reg15 = prev_reg31;
8119 end // }
8120 5: begin // {
8121 win5_reg8 = prev_reg8;
8122 win6_reg24 = prev_reg8;
8123 win5_reg9 = prev_reg9;
8124 win6_reg25 = prev_reg9;
8125 win5_reg10 = prev_reg10;
8126 win6_reg26 = prev_reg10;
8127 win5_reg11 = prev_reg11;
8128 win6_reg27 = prev_reg11;
8129 win5_reg12 = prev_reg12;
8130 win6_reg28 = prev_reg12;
8131 win5_reg13 = prev_reg13;
8132 win6_reg29 = prev_reg13;
8133 win5_reg14 = prev_reg14;
8134 win6_reg30 = prev_reg14;
8135 win5_reg15 = prev_reg15;
8136 win6_reg31 = prev_reg15;
8137 win5_reg16 = prev_reg16;
8138 win5_reg17 = prev_reg17;
8139 win5_reg18 = prev_reg18;
8140 win5_reg19 = prev_reg19;
8141 win5_reg20 = prev_reg20;
8142 win5_reg21 = prev_reg21;
8143 win5_reg22 = prev_reg22;
8144 win5_reg23 = prev_reg23;
8145 win5_reg24 = prev_reg24;
8146 win4_reg8 = prev_reg24;
8147 win5_reg25 = prev_reg25;
8148 win4_reg9 = prev_reg25;
8149 win5_reg26 = prev_reg26;
8150 win4_reg10 = prev_reg26;
8151 win5_reg27 = prev_reg27;
8152 win4_reg11 = prev_reg27;
8153 win5_reg28 = prev_reg28;
8154 win4_reg12 = prev_reg28;
8155 win5_reg29 = prev_reg29;
8156 win4_reg13 = prev_reg29;
8157 win5_reg30 = prev_reg30;
8158 win4_reg14 = prev_reg30;
8159 win5_reg31 = prev_reg31;
8160 win4_reg15 = prev_reg31;
8161 end // }
8162 6: begin // {
8163 win6_reg8 = prev_reg8;
8164 win7_reg24 = prev_reg8;
8165 win6_reg9 = prev_reg9;
8166 win7_reg25 = prev_reg9;
8167 win6_reg10 = prev_reg10;
8168 win7_reg26 = prev_reg10;
8169 win6_reg11 = prev_reg11;
8170 win7_reg27 = prev_reg11;
8171 win6_reg12 = prev_reg12;
8172 win7_reg28 = prev_reg12;
8173 win6_reg13 = prev_reg13;
8174 win7_reg29 = prev_reg13;
8175 win6_reg14 = prev_reg14;
8176 win7_reg30 = prev_reg14;
8177 win6_reg15 = prev_reg15;
8178 win7_reg31 = prev_reg15;
8179 win6_reg16 = prev_reg16;
8180 win6_reg17 = prev_reg17;
8181 win6_reg18 = prev_reg18;
8182 win6_reg19 = prev_reg19;
8183 win6_reg20 = prev_reg20;
8184 win6_reg21 = prev_reg21;
8185 win6_reg22 = prev_reg22;
8186 win6_reg23 = prev_reg23;
8187 win6_reg24 = prev_reg24;
8188 win5_reg8 = prev_reg24;
8189 win6_reg25 = prev_reg25;
8190 win5_reg9 = prev_reg25;
8191 win6_reg26 = prev_reg26;
8192 win5_reg10 = prev_reg26;
8193 win6_reg27 = prev_reg27;
8194 win5_reg11 = prev_reg27;
8195 win6_reg28 = prev_reg28;
8196 win5_reg12 = prev_reg28;
8197 win6_reg29 = prev_reg29;
8198 win5_reg13 = prev_reg29;
8199 win6_reg30 = prev_reg30;
8200 win5_reg14 = prev_reg30;
8201 win6_reg31 = prev_reg31;
8202 win5_reg15 = prev_reg31;
8203 end // }
8204 7: begin // {
8205 win7_reg8 = prev_reg8;
8206 win0_reg24 = prev_reg8;
8207 win7_reg9 = prev_reg9;
8208 win0_reg25 = prev_reg9;
8209 win7_reg10 = prev_reg10;
8210 win0_reg26 = prev_reg10;
8211 win7_reg11 = prev_reg11;
8212 win0_reg27 = prev_reg11;
8213 win7_reg12 = prev_reg12;
8214 win0_reg28 = prev_reg12;
8215 win7_reg13 = prev_reg13;
8216 win0_reg29 = prev_reg13;
8217 win7_reg14 = prev_reg14;
8218 win0_reg30 = prev_reg14;
8219 win7_reg15 = prev_reg15;
8220 win0_reg31 = prev_reg15;
8221 win7_reg16 = prev_reg16;
8222 win7_reg17 = prev_reg17;
8223 win7_reg18 = prev_reg18;
8224 win7_reg19 = prev_reg19;
8225 win7_reg20 = prev_reg20;
8226 win7_reg21 = prev_reg21;
8227 win7_reg22 = prev_reg22;
8228 win7_reg23 = prev_reg23;
8229 win7_reg24 = prev_reg24;
8230 win6_reg8 = prev_reg24;
8231 win7_reg25 = prev_reg25;
8232 win6_reg9 = prev_reg25;
8233 win7_reg26 = prev_reg26;
8234 win6_reg10 = prev_reg26;
8235 win7_reg27 = prev_reg27;
8236 win6_reg11 = prev_reg27;
8237 win7_reg28 = prev_reg28;
8238 win6_reg12 = prev_reg28;
8239 win7_reg29 = prev_reg29;
8240 win6_reg13 = prev_reg29;
8241 win7_reg30 = prev_reg30;
8242 win6_reg14 = prev_reg30;
8243 win7_reg31 = prev_reg31;
8244 win6_reg15 = prev_reg31;
8245 end // }
8246
8247 endcase
8248
8249 // Copy New window to current window
8250 case (new_cwp)
8251 0: begin // {
8252 prev_reg8 = win0_reg8;
8253 prev_reg9 = win0_reg9;
8254 prev_reg10 = win0_reg10;
8255 prev_reg11 = win0_reg11;
8256 prev_reg12 = win0_reg12;
8257 prev_reg13 = win0_reg13;
8258 prev_reg14 = win0_reg14;
8259 prev_reg15 = win0_reg15;
8260 prev_reg16 = win0_reg16;
8261 prev_reg17 = win0_reg17;
8262 prev_reg18 = win0_reg18;
8263 prev_reg19 = win0_reg19;
8264 prev_reg20 = win0_reg20;
8265 prev_reg21 = win0_reg21;
8266 prev_reg22 = win0_reg22;
8267 prev_reg23 = win0_reg23;
8268 prev_reg24 = win0_reg24;
8269 prev_reg25 = win0_reg25;
8270 prev_reg26 = win0_reg26;
8271 prev_reg27 = win0_reg27;
8272 prev_reg28 = win0_reg28;
8273 prev_reg29 = win0_reg29;
8274 prev_reg30 = win0_reg30;
8275 prev_reg31 = win0_reg31;
8276 end // }
8277
8278 1: begin // {
8279 prev_reg8 = win1_reg8;
8280 prev_reg9 = win1_reg9;
8281 prev_reg10 = win1_reg10;
8282 prev_reg11 = win1_reg11;
8283 prev_reg12 = win1_reg12;
8284 prev_reg13 = win1_reg13;
8285 prev_reg14 = win1_reg14;
8286 prev_reg15 = win1_reg15;
8287 prev_reg16 = win1_reg16;
8288 prev_reg17 = win1_reg17;
8289 prev_reg18 = win1_reg18;
8290 prev_reg19 = win1_reg19;
8291 prev_reg20 = win1_reg20;
8292 prev_reg21 = win1_reg21;
8293 prev_reg22 = win1_reg22;
8294 prev_reg23 = win1_reg23;
8295 prev_reg24 = win1_reg24;
8296 prev_reg25 = win1_reg25;
8297 prev_reg26 = win1_reg26;
8298 prev_reg27 = win1_reg27;
8299 prev_reg28 = win1_reg28;
8300 prev_reg29 = win1_reg29;
8301 prev_reg30 = win1_reg30;
8302 prev_reg31 = win1_reg31;
8303 end // }
8304
8305 2: begin // {
8306 prev_reg8 = win2_reg8;
8307 prev_reg9 = win2_reg9;
8308 prev_reg10 = win2_reg10;
8309 prev_reg11 = win2_reg11;
8310 prev_reg12 = win2_reg12;
8311 prev_reg13 = win2_reg13;
8312 prev_reg14 = win2_reg14;
8313 prev_reg15 = win2_reg15;
8314 prev_reg16 = win2_reg16;
8315 prev_reg17 = win2_reg17;
8316 prev_reg18 = win2_reg18;
8317 prev_reg19 = win2_reg19;
8318 prev_reg20 = win2_reg20;
8319 prev_reg21 = win2_reg21;
8320 prev_reg22 = win2_reg22;
8321 prev_reg23 = win2_reg23;
8322 prev_reg24 = win2_reg24;
8323 prev_reg25 = win2_reg25;
8324 prev_reg26 = win2_reg26;
8325 prev_reg27 = win2_reg27;
8326 prev_reg28 = win2_reg28;
8327 prev_reg29 = win2_reg29;
8328 prev_reg30 = win2_reg30;
8329 prev_reg31 = win2_reg31;
8330 end // }
8331
8332 3: begin // {
8333 prev_reg8 = win3_reg8;
8334 prev_reg9 = win3_reg9;
8335 prev_reg10 = win3_reg10;
8336 prev_reg11 = win3_reg11;
8337 prev_reg12 = win3_reg12;
8338 prev_reg13 = win3_reg13;
8339 prev_reg14 = win3_reg14;
8340 prev_reg15 = win3_reg15;
8341 prev_reg16 = win3_reg16;
8342 prev_reg17 = win3_reg17;
8343 prev_reg18 = win3_reg18;
8344 prev_reg19 = win3_reg19;
8345 prev_reg20 = win3_reg20;
8346 prev_reg21 = win3_reg21;
8347 prev_reg22 = win3_reg22;
8348 prev_reg23 = win3_reg23;
8349 prev_reg24 = win3_reg24;
8350 prev_reg25 = win3_reg25;
8351 prev_reg26 = win3_reg26;
8352 prev_reg27 = win3_reg27;
8353 prev_reg28 = win3_reg28;
8354 prev_reg29 = win3_reg29;
8355 prev_reg30 = win3_reg30;
8356 prev_reg31 = win3_reg31;
8357 end // }
8358
8359 4: begin // {
8360 prev_reg8 = win4_reg8;
8361 prev_reg9 = win4_reg9;
8362 prev_reg10 = win4_reg10;
8363 prev_reg11 = win4_reg11;
8364 prev_reg12 = win4_reg12;
8365 prev_reg13 = win4_reg13;
8366 prev_reg14 = win4_reg14;
8367 prev_reg15 = win4_reg15;
8368 prev_reg16 = win4_reg16;
8369 prev_reg17 = win4_reg17;
8370 prev_reg18 = win4_reg18;
8371 prev_reg19 = win4_reg19;
8372 prev_reg20 = win4_reg20;
8373 prev_reg21 = win4_reg21;
8374 prev_reg22 = win4_reg22;
8375 prev_reg23 = win4_reg23;
8376 prev_reg24 = win4_reg24;
8377 prev_reg25 = win4_reg25;
8378 prev_reg26 = win4_reg26;
8379 prev_reg27 = win4_reg27;
8380 prev_reg28 = win4_reg28;
8381 prev_reg29 = win4_reg29;
8382 prev_reg30 = win4_reg30;
8383 prev_reg31 = win4_reg31;
8384 end // }
8385
8386 5: begin // {
8387 prev_reg8 = win5_reg8;
8388 prev_reg9 = win5_reg9;
8389 prev_reg10 = win5_reg10;
8390 prev_reg11 = win5_reg11;
8391 prev_reg12 = win5_reg12;
8392 prev_reg13 = win5_reg13;
8393 prev_reg14 = win5_reg14;
8394 prev_reg15 = win5_reg15;
8395 prev_reg16 = win5_reg16;
8396 prev_reg17 = win5_reg17;
8397 prev_reg18 = win5_reg18;
8398 prev_reg19 = win5_reg19;
8399 prev_reg20 = win5_reg20;
8400 prev_reg21 = win5_reg21;
8401 prev_reg22 = win5_reg22;
8402 prev_reg23 = win5_reg23;
8403 prev_reg24 = win5_reg24;
8404 prev_reg25 = win5_reg25;
8405 prev_reg26 = win5_reg26;
8406 prev_reg27 = win5_reg27;
8407 prev_reg28 = win5_reg28;
8408 prev_reg29 = win5_reg29;
8409 prev_reg30 = win5_reg30;
8410 prev_reg31 = win5_reg31;
8411 end // }
8412
8413 6: begin // {
8414 prev_reg8 = win6_reg8;
8415 prev_reg9 = win6_reg9;
8416 prev_reg10 = win6_reg10;
8417 prev_reg11 = win6_reg11;
8418 prev_reg12 = win6_reg12;
8419 prev_reg13 = win6_reg13;
8420 prev_reg14 = win6_reg14;
8421 prev_reg15 = win6_reg15;
8422 prev_reg16 = win6_reg16;
8423 prev_reg17 = win6_reg17;
8424 prev_reg18 = win6_reg18;
8425 prev_reg19 = win6_reg19;
8426 prev_reg20 = win6_reg20;
8427 prev_reg21 = win6_reg21;
8428 prev_reg22 = win6_reg22;
8429 prev_reg23 = win6_reg23;
8430 prev_reg24 = win6_reg24;
8431 prev_reg25 = win6_reg25;
8432 prev_reg26 = win6_reg26;
8433 prev_reg27 = win6_reg27;
8434 prev_reg28 = win6_reg28;
8435 prev_reg29 = win6_reg29;
8436 prev_reg30 = win6_reg30;
8437 prev_reg31 = win6_reg31;
8438 end // }
8439
8440 7: begin // {
8441 prev_reg8 = win7_reg8;
8442 prev_reg9 = win7_reg9;
8443 prev_reg10 = win7_reg10;
8444 prev_reg11 = win7_reg11;
8445 prev_reg12 = win7_reg12;
8446 prev_reg13 = win7_reg13;
8447 prev_reg14 = win7_reg14;
8448 prev_reg15 = win7_reg15;
8449 prev_reg16 = win7_reg16;
8450 prev_reg17 = win7_reg17;
8451 prev_reg18 = win7_reg18;
8452 prev_reg19 = win7_reg19;
8453 prev_reg20 = win7_reg20;
8454 prev_reg21 = win7_reg21;
8455 prev_reg22 = win7_reg22;
8456 prev_reg23 = win7_reg23;
8457 prev_reg24 = win7_reg24;
8458 prev_reg25 = win7_reg25;
8459 prev_reg26 = win7_reg26;
8460 prev_reg27 = win7_reg27;
8461 prev_reg28 = win7_reg28;
8462 prev_reg29 = win7_reg29;
8463 prev_reg30 = win7_reg30;
8464 prev_reg31 = win7_reg31;
8465 end // }
8466
8467 endcase
8468 end // }
8469endtask
8470
8471//----------------------------------------------------------
8472// Save current global to previous global, then copy new global to current global
8473task copy_global;
8474 input [2:0] new_gl;
8475 input [2:0] old_gl;
8476 integer i;
8477
8478 begin // {
8479
8480 // Save current global to Old global
8481 case (old_gl)
8482 0: begin // {
8483 gl0_reg0 = prev_reg0;
8484 gl0_reg1 = prev_reg1;
8485 gl0_reg2 = prev_reg2;
8486 gl0_reg3 = prev_reg3;
8487 gl0_reg4 = prev_reg4;
8488 gl0_reg5 = prev_reg5;
8489 gl0_reg6 = prev_reg6;
8490 gl0_reg7 = prev_reg7;
8491 end // }
8492 1: begin // {
8493 gl1_reg0 = prev_reg0;
8494 gl1_reg1 = prev_reg1;
8495 gl1_reg2 = prev_reg2;
8496 gl1_reg3 = prev_reg3;
8497 gl1_reg4 = prev_reg4;
8498 gl1_reg5 = prev_reg5;
8499 gl1_reg6 = prev_reg6;
8500 gl1_reg7 = prev_reg7;
8501 end // }
8502 2: begin // {
8503 gl2_reg0 = prev_reg0;
8504 gl2_reg1 = prev_reg1;
8505 gl2_reg2 = prev_reg2;
8506 gl2_reg3 = prev_reg3;
8507 gl2_reg4 = prev_reg4;
8508 gl2_reg5 = prev_reg5;
8509 gl2_reg6 = prev_reg6;
8510 gl2_reg7 = prev_reg7;
8511 end // }
8512 3: begin // {
8513 gl3_reg0 = prev_reg0;
8514 gl3_reg1 = prev_reg1;
8515 gl3_reg2 = prev_reg2;
8516 gl3_reg3 = prev_reg3;
8517 gl3_reg4 = prev_reg4;
8518 gl3_reg5 = prev_reg5;
8519 gl3_reg6 = prev_reg6;
8520 gl3_reg7 = prev_reg7;
8521 end // }
8522 endcase
8523
8524 // Copy New global current global
8525 case (new_gl)
8526 0: begin // {
8527 prev_reg0 = gl0_reg0;
8528 prev_reg1 = gl0_reg1;
8529 prev_reg2 = gl0_reg2;
8530 prev_reg3 = gl0_reg3;
8531 prev_reg4 = gl0_reg4;
8532 prev_reg5 = gl0_reg5;
8533 prev_reg6 = gl0_reg6;
8534 prev_reg7 = gl0_reg7;
8535 end // }
8536
8537 1: begin // {
8538 prev_reg0 = gl1_reg0;
8539 prev_reg1 = gl1_reg1;
8540 prev_reg2 = gl1_reg2;
8541 prev_reg3 = gl1_reg3;
8542 prev_reg4 = gl1_reg4;
8543 prev_reg5 = gl1_reg5;
8544 prev_reg6 = gl1_reg6;
8545 prev_reg7 = gl1_reg7;
8546 end // }
8547
8548 2: begin // {
8549 prev_reg0 = gl2_reg0;
8550 prev_reg1 = gl2_reg1;
8551 prev_reg2 = gl2_reg2;
8552 prev_reg3 = gl2_reg3;
8553 prev_reg4 = gl2_reg4;
8554 prev_reg5 = gl2_reg5;
8555 prev_reg6 = gl2_reg6;
8556 prev_reg7 = gl2_reg7;
8557 end // }
8558
8559 3: begin // {
8560 prev_reg0 = gl3_reg0;
8561 prev_reg1 = gl3_reg1;
8562 prev_reg2 = gl3_reg2;
8563 prev_reg3 = gl3_reg3;
8564 prev_reg4 = gl3_reg4;
8565 prev_reg5 = gl3_reg5;
8566 prev_reg6 = gl3_reg6;
8567 prev_reg7 = gl3_reg7;
8568 end // }
8569
8570 endcase
8571 end // }
8572endtask
8573
8574//----------------------------------------------------------
8575// Return window number and register type based on cwp and regnum as input
8576task calc_cwp;
8577 input [2:0] cwp;
8578 input [7:0] id;
8579 output [2:0] win;
8580 output [1:0] type;
8581
8582 begin // {
8583 if (id<=7) begin // {
8584 type = `G_TYPE;
8585 win = cwp;
8586 end // }
8587 else if (id<=23) begin // {
8588 type = `W_TYPE;
8589 win = cwp;
8590 end // }
8591 else if (id<=31) begin // {
8592 type = `W_TYPE;
8593 if (cwp == 0) begin // {
8594 win = 7;
8595 end // }
8596 else begin // {
8597 win = cwp-1;
8598 end // }
8599 end // }
8600 else if (id<=(64+`FP_OFFSET)) begin // {
8601 type = `F_TYPE;
8602 win = cwp;
8603 end // }
8604 else begin // {
8605 type = `C_TYPE;
8606 win = cwp;
8607 end // }
8608 end // }
8609endtask
8610
8611//----------------------------------------------------------
8612// Check for bad signal values
8613task check_values;
8614
8615 begin // {
8616
8617 //--------------------
8618 casex (complete_fw2)
8619 8'b00000000,
8620 8'b00000001,
8621 8'b00000010,
8622 8'b00000100,
8623 8'b00001000,
8624 8'b00010000,
8625 8'b00100000,
8626 8'b01000000,
8627 8'b10000000: ; // good value
8628 default: begin // {
8629 `PR_ERROR ("nas", `ERROR, " - T%0d More than one instruction retired in a single cycle for this thread.",
8630 mytnum);
8631 $write("\t\t\t\t Instructions - ");
8632 if (complete_fw2[`EXU_INDEX]) $write("EXU op, ");
8633 if (complete_fw2[`FP_INDEX]) $write("FP op, ");
8634 if (complete_fw2[`LSU_INDEX]) $write("LSU op, ");
8635 if (complete_fw2[`IMUL_INDEX]) $write("IMUL op, ");
8636 if (complete_fw2[`IDIV_INDEX]) $write("IDIV op, ");
8637 if (complete_fw2[`FDIV_INDEX]) $write("FDIV op, ");
8638 if (complete_fw2[`TLU_INDEX]) $write("TLU op, ");
8639 if (complete_fw2[`ASI_INDEX]) $write("ASI op, ");
8640 $write(" complete_fw2 = %b \n",complete_fw2);
8641 $display("");
8642 end // }
8643 endcase
8644
8645 // This check only works if diags are written properly.
8646 // For example, if a diag writes to one of these registers using wrpr,
8647 // then this check must be disabled using plusarg.
8648 //--------------------
8649 // CANSAVE + CANRESTORE + OTHERWIN = NWINDOWS-2 (per Sparc V9)
8650 if (`PARGS.win_check_on) begin // {
8651 if (complete_fw2 & ((CANSAVE_reg + CANRESTORE_reg + OTHERWIN_reg) != 6)) begin // {
8652 `PR_ERROR ("nas", `ERROR, "ERROR - T%0d Bad Values for window registers.", mytnum);
8653 `PR_ERROR ("nas", `ERROR, "- CANSAVE = %0d CANRESTORE = %0d OTHERWIN = %0d",
8654 CANSAVE_reg, CANRESTORE_reg,OTHERWIN_reg);
8655 end // }
8656 end // }
8657
8658 end // }
8659endtask
8660
8661//----------------------------------------------------------
8662//----------------------------------------------------------
8663`ifndef EMUL_TL
8664task sort_delta;
8665 reg [5:0] i, j, last;
8666 reg [`DELTA_WIDTH:0] temp1, temp2;
8667 begin // {
8668 last = delta_prev[`NEXT_INDEX]-1;
8669 for (i=`FIRST_INDEX; i <= last; i=i+1) begin // {
8670 for (j=`FIRST_INDEX; j < last; j=j+1) begin // {
8671 temp1 = delta_prev[j]; temp2 = delta_prev[j+1];
8672 if (temp1[76:64] > temp2[76:64]) begin // {
8673 delta_prev[j] = temp2; delta_prev [j+1] = temp1;
8674 end //}
8675 end // }
8676 end // }
8677 end // }
8678endtask
8679`endif
8680
8681//----------------------------------------------------------
8682//----------------------------------------------------------
8683// Print one entry in delta_* array
8684`ifndef EMUL_TL
8685task print_entry;
8686
8687 input [`DELTA_WIDTH:0] delta_entry;
8688
8689 reg [1:0] type;
8690 reg [2:0] win;
8691 reg [7:0] id;
8692 reg [63:0] act_value;
8693 reg [(20*8)-1:0] type_str;
8694 reg [(20*8)-1:0] regname;
8695
8696 begin // {
8697 {type,win,id,act_value} = delta_entry;
8698
8699 case (type)
8700 `G_TYPE: begin
8701 type_str="G";
8702 end
8703 `W_TYPE: begin
8704 type_str="W";
8705 end
8706 `F_TYPE: begin
8707 type_str="F";
8708 id = id - `FP_OFFSET;
8709 end
8710 `C_TYPE: begin
8711 type_str="C";
8712 id = id - `CTL_OFFSET;
8713 end
8714 endcase
8715
8716 `NASTOP.get_regname(mytnum,type_str,win,id,regname);
8717 `PR_NORMAL ("nas", `NORMAL, "type=%0s win=%0d RegID=%0d %0s=%h",
8718 type_str,win,id,regname,act_value);
8719 end //}
8720
8721endtask
8722`endif
8723
8724//----------------------------------------------------------
8725// Write Value to prev_reg using id as index (non-blocking)
8726task write_prev;
8727 input [7:0] id;
8728 input [63:0] value;
8729
8730 begin // {
8731
8732 case (id)
8733 8'd0: prev_reg0 <= value;
8734 8'd1: prev_reg1 <= value;
8735 8'd2: prev_reg2 <= value;
8736 8'd3: prev_reg3 <= value;
8737 8'd4: prev_reg4 <= value;
8738 8'd5: prev_reg5 <= value;
8739 8'd6: prev_reg6 <= value;
8740 8'd7: prev_reg7 <= value;
8741 8'd8: prev_reg8 <= value;
8742 8'd9: prev_reg9 <= value;
8743 8'd10: prev_reg10 <= value;
8744 8'd11: prev_reg11 <= value;
8745 8'd12: prev_reg12 <= value;
8746 8'd13: prev_reg13 <= value;
8747 8'd14: prev_reg14 <= value;
8748 8'd15: prev_reg15 <= value;
8749 8'd16: prev_reg16 <= value;
8750 8'd17: prev_reg17 <= value;
8751 8'd18: prev_reg18 <= value;
8752 8'd19: prev_reg19 <= value;
8753 8'd20: prev_reg20 <= value;
8754 8'd21: prev_reg21 <= value;
8755 8'd22: prev_reg22 <= value;
8756 8'd23: prev_reg23 <= value;
8757 8'd24: prev_reg24 <= value;
8758 8'd25: prev_reg25 <= value;
8759 8'd26: prev_reg26 <= value;
8760 8'd27: prev_reg27 <= value;
8761 8'd28: prev_reg28 <= value;
8762 8'd29: prev_reg29 <= value;
8763 8'd30: prev_reg30 <= value;
8764 8'd31: prev_reg31 <= value;
8765 8'd32: prev_reg32 <= value;
8766 8'd33: prev_reg33 <= value;
8767 8'd34: prev_reg34 <= value;
8768 8'd35: prev_reg35 <= value;
8769 8'd36: prev_reg36 <= value;
8770 8'd37: prev_reg37 <= value;
8771 8'd38: prev_reg38 <= value;
8772 8'd39: prev_reg39 <= value;
8773 8'd40: prev_reg40 <= value;
8774 8'd41: prev_reg41 <= value;
8775 8'd42: prev_reg42 <= value;
8776 8'd43: prev_reg43 <= value;
8777 8'd44: prev_reg44 <= value;
8778 8'd45: prev_reg45 <= value;
8779 8'd46: prev_reg46 <= value;
8780 8'd47: prev_reg47 <= value;
8781 8'd48: prev_reg48 <= value;
8782 8'd49: prev_reg49 <= value;
8783 8'd50: prev_reg50 <= value;
8784 8'd51: prev_reg51 <= value;
8785 8'd52: prev_reg52 <= value;
8786 8'd53: prev_reg53 <= value;
8787 8'd54: prev_reg54 <= value;
8788 8'd55: prev_reg55 <= value;
8789 8'd56: prev_reg56 <= value;
8790 8'd57: prev_reg57 <= value;
8791 8'd58: prev_reg58 <= value;
8792 8'd59: prev_reg59 <= value;
8793 8'd60: prev_reg60 <= value;
8794 8'd61: prev_reg61 <= value;
8795 8'd62: prev_reg62 <= value;
8796 8'd63: prev_reg63 <= value;
8797 8'd64: prev_reg64 <= value;
8798 8'd65: prev_reg65 <= value;
8799 8'd66: prev_reg66 <= value;
8800 8'd67: prev_reg67 <= value;
8801 8'd68: prev_reg68 <= value;
8802 8'd69: prev_reg69 <= value;
8803 8'd70: prev_reg70 <= value;
8804 8'd71: prev_reg71 <= value;
8805 8'd72: prev_reg72 <= value;
8806 8'd73: prev_reg73 <= value;
8807 8'd74: prev_reg74 <= value;
8808 8'd75: prev_reg75 <= value;
8809 8'd76: prev_reg76 <= value;
8810 8'd77: prev_reg77 <= value;
8811 8'd78: prev_reg78 <= value;
8812 8'd79: prev_reg79 <= value;
8813 8'd80: prev_reg80 <= value;
8814 8'd81: prev_reg81 <= value;
8815 8'd82: prev_reg82 <= value;
8816 8'd83: prev_reg83 <= value;
8817 8'd84: prev_reg84 <= value;
8818 8'd85: prev_reg85 <= value;
8819 8'd86: prev_reg86 <= value;
8820 8'd87: prev_reg87 <= value;
8821 8'd88: prev_reg88 <= value;
8822 8'd89: prev_reg89 <= value;
8823 8'd90: prev_reg90 <= value;
8824 8'd91: prev_reg91 <= value;
8825 8'd92: prev_reg92 <= value;
8826 8'd93: prev_reg93 <= value;
8827 8'd94: prev_reg94 <= value;
8828 8'd95: prev_reg95 <= value;
8829 8'd96: prev_reg96 <= value;
8830 8'd97: prev_reg97 <= value;
8831 8'd98: prev_reg98 <= value;
8832 8'd99: prev_reg99 <= value;
8833 8'd100: prev_reg100 <= value;
8834 8'd101: prev_reg101 <= value;
8835 8'd102: prev_reg102 <= value;
8836 8'd103: prev_reg103 <= value;
8837 8'd104: prev_reg104 <= value;
8838 8'd105: prev_reg105 <= value;
8839 8'd106: prev_reg106 <= value;
8840 8'd107: prev_reg107 <= value;
8841 8'd108: prev_reg108 <= value;
8842 8'd109: prev_reg109 <= value;
8843 8'd110: prev_reg110 <= value;
8844 8'd111: prev_reg111 <= value;
8845 8'd112: prev_reg112 <= value;
8846 8'd113: prev_reg113 <= value;
8847 8'd114: prev_reg114 <= value;
8848 8'd115: prev_reg115 <= value;
8849 8'd116: prev_reg116 <= value;
8850 8'd117: prev_reg117 <= value;
8851 8'd118: prev_reg118 <= value;
8852 8'd119: prev_reg119 <= value;
8853 8'd120: prev_reg120 <= value;
8854 8'd121: prev_reg121 <= value;
8855 8'd122: prev_reg122 <= value;
8856 8'd123: prev_reg123 <= value;
8857 8'd124: prev_reg124 <= value;
8858 8'd125: prev_reg125 <= value;
8859 8'd126: prev_reg126 <= value;
8860 8'd127: prev_reg127 <= value;
8861 8'd128: prev_reg128 <= value;
8862 8'd129: prev_reg129 <= value;
8863 8'd130: prev_reg130 <= value;
8864 8'd131: prev_reg131 <= value;
8865 8'd132: prev_reg132 <= value;
8866 8'd133: prev_reg133 <= value;
8867 8'd134: prev_reg134 <= value;
8868 8'd135: prev_reg135 <= value;
8869 8'd136: prev_reg136 <= value;
8870 8'd137: prev_reg137 <= value;
8871 8'd138: prev_reg138 <= value;
8872 8'd139: prev_reg139 <= value;
8873 8'd140: prev_reg140 <= value;
8874 8'd141: prev_reg141 <= value;
8875 8'd142: prev_reg142 <= value;
8876 8'd143: prev_reg143 <= value;
8877 8'd144: prev_reg144 <= value;
8878 8'd145: prev_reg145 <= value;
8879 8'd146: prev_reg146 <= value;
8880 8'd147: prev_reg147 <= value;
8881 8'd148: prev_reg148 <= value;
8882 8'd149: prev_reg149 <= value;
8883 8'd150: prev_reg150 <= value;
8884 8'd151: prev_reg151 <= value;
8885 8'd152: prev_reg152 <= value;
8886 8'd153: prev_reg153 <= value;
8887 8'd154: prev_reg154 <= value;
8888 8'd155: prev_reg155 <= value;
8889 8'd156: prev_reg156 <= value;
8890 8'd157: prev_reg157 <= value;
8891 8'd158: prev_reg158 <= value;
8892 8'd159: prev_reg159 <= value;
8893 8'd160: prev_reg160 <= value;
8894 8'd161: prev_reg161 <= value;
8895 8'd162: prev_reg162 <= value;
8896 8'd163: prev_reg163 <= value;
8897 8'd164: prev_reg164 <= value;
8898 8'd165: prev_reg165 <= value;
8899 8'd166: prev_reg166 <= value;
8900 8'd167: prev_reg167 <= value;
8901 8'd168: prev_reg168 <= value;
8902 8'd169: prev_reg169 <= value;
8903 8'd170: prev_reg170 <= value;
8904 8'd171: prev_reg171 <= value;
8905 8'd172: prev_reg172 <= value;
8906 8'd173: prev_reg173 <= value;
8907 8'd174: prev_reg174 <= value;
8908 8'd175: prev_reg175 <= value;
8909 8'd176: prev_reg176 <= value;
8910 8'd177: prev_reg177 <= value;
8911 8'd178: prev_reg178 <= value;
8912 8'd179: prev_reg179 <= value;
8913 8'd180: prev_reg180 <= value;
8914 8'd181: prev_reg181 <= value;
8915 8'd182: prev_reg182 <= value;
8916 8'd183: prev_reg183 <= value;
8917 8'd184: prev_reg184 <= value;
8918 8'd185: prev_reg185 <= value;
8919 8'd186: prev_reg186 <= value;
8920 8'd187: prev_reg187 <= value;
8921 8'd188: prev_reg188 <= value;
8922 8'd189: prev_reg189 <= value;
8923 8'd190: prev_reg190 <= value;
8924 8'd191: prev_reg191 <= value;
8925 8'd192: prev_reg192 <= value;
8926 8'd193: prev_reg193 <= value;
8927 8'd194: prev_reg194 <= value;
8928 8'd195: prev_reg195 <= value;
8929 8'd196: prev_reg196 <= value;
8930 8'd197: prev_reg197 <= value;
8931 8'd198: prev_reg198 <= value;
8932 8'd199: prev_reg199 <= value;
8933 8'd200: prev_reg200 <= value;
8934 8'd201: prev_reg201 <= value;
8935 8'd202: prev_reg202 <= value;
8936 8'd203: prev_reg203 <= value;
8937 8'd204: prev_reg204 <= value;
8938 8'd205: prev_reg205 <= value;
8939 8'd206: prev_reg206 <= value;
8940 8'd207: prev_reg207 <= value;
8941 8'd208: prev_reg208 <= value;
8942 8'd209: prev_reg209 <= value;
8943 8'd210: prev_reg210 <= value;
8944 8'd211: prev_reg211 <= value;
8945 8'd212: prev_reg212 <= value;
8946 8'd213: prev_reg213 <= value;
8947 8'd214: prev_reg214 <= value;
8948 8'd215: prev_reg215 <= value;
8949 8'd216: prev_reg216 <= value;
8950 8'd217: prev_reg217 <= value;
8951 8'd218: prev_reg218 <= value;
8952 8'd219: prev_reg219 <= value;
8953 8'd220: prev_reg220 <= value;
8954 8'd221: prev_reg221 <= value;
8955 8'd222: prev_reg222 <= value;
8956 8'd223: prev_reg223 <= value;
8957 8'd224: prev_reg224 <= value;
8958 8'd225: prev_reg225 <= value;
8959 8'd226: prev_reg226 <= value;
8960 8'd227: prev_reg227 <= value;
8961 8'd228: prev_reg228 <= value;
8962 8'd229: prev_reg229 <= value;
8963 8'd230: prev_reg230 <= value;
8964 8'd231: prev_reg231 <= value;
8965 8'd232: prev_reg232 <= value;
8966 8'd233: prev_reg233 <= value;
8967 8'd234: prev_reg234 <= value;
8968 8'd235: prev_reg235 <= value;
8969 8'd236: prev_reg236 <= value;
8970 8'd237: prev_reg237 <= value;
8971 8'd238: prev_reg238 <= value;
8972 8'd239: prev_reg239 <= value;
8973 8'd240: prev_reg240 <= value;
8974 8'd241: prev_reg241 <= value;
8975 8'd242: prev_reg242 <= value;
8976 8'd243: prev_reg243 <= value;
8977 8'd244: prev_reg244 <= value;
8978 8'd245: prev_reg245 <= value;
8979 8'd246: prev_reg246 <= value;
8980 8'd247: prev_reg247 <= value;
8981 8'd248: prev_reg248 <= value;
8982 8'd249: prev_reg249 <= value;
8983 8'd250: prev_reg250 <= value;
8984 8'd251: prev_reg251 <= value;
8985 8'd252: prev_reg252 <= value;
8986 8'd253: prev_reg253 <= value;
8987 8'd254: prev_reg254 <= value;
8988 8'd255: prev_reg255 <= value;
8989 endcase
8990
8991 end //}
8992
8993endtask
8994
8995//----------------------------------------------------------
8996// Write Value to prev_reg using id as index (blocking)
8997task write_prev_async;
8998 input [7:0] id;
8999 input [63:0] value;
9000
9001 begin // {
9002
9003 case (id)
9004 8'd0: prev_reg0 = value;
9005 8'd1: prev_reg1 = value;
9006 8'd2: prev_reg2 = value;
9007 8'd3: prev_reg3 = value;
9008 8'd4: prev_reg4 = value;
9009 8'd5: prev_reg5 = value;
9010 8'd6: prev_reg6 = value;
9011 8'd7: prev_reg7 = value;
9012 8'd8: prev_reg8 = value;
9013 8'd9: prev_reg9 = value;
9014 8'd10: prev_reg10 = value;
9015 8'd11: prev_reg11 = value;
9016 8'd12: prev_reg12 = value;
9017 8'd13: prev_reg13 = value;
9018 8'd14: prev_reg14 = value;
9019 8'd15: prev_reg15 = value;
9020 8'd16: prev_reg16 = value;
9021 8'd17: prev_reg17 = value;
9022 8'd18: prev_reg18 = value;
9023 8'd19: prev_reg19 = value;
9024 8'd20: prev_reg20 = value;
9025 8'd21: prev_reg21 = value;
9026 8'd22: prev_reg22 = value;
9027 8'd23: prev_reg23 = value;
9028 8'd24: prev_reg24 = value;
9029 8'd25: prev_reg25 = value;
9030 8'd26: prev_reg26 = value;
9031 8'd27: prev_reg27 = value;
9032 8'd28: prev_reg28 = value;
9033 8'd29: prev_reg29 = value;
9034 8'd30: prev_reg30 = value;
9035 8'd31: prev_reg31 = value;
9036 8'd32: prev_reg32 = value;
9037 8'd33: prev_reg33 = value;
9038 8'd34: prev_reg34 = value;
9039 8'd35: prev_reg35 = value;
9040 8'd36: prev_reg36 = value;
9041 8'd37: prev_reg37 = value;
9042 8'd38: prev_reg38 = value;
9043 8'd39: prev_reg39 = value;
9044 8'd40: prev_reg40 = value;
9045 8'd41: prev_reg41 = value;
9046 8'd42: prev_reg42 = value;
9047 8'd43: prev_reg43 = value;
9048 8'd44: prev_reg44 = value;
9049 8'd45: prev_reg45 = value;
9050 8'd46: prev_reg46 = value;
9051 8'd47: prev_reg47 = value;
9052 8'd48: prev_reg48 = value;
9053 8'd49: prev_reg49 = value;
9054 8'd50: prev_reg50 = value;
9055 8'd51: prev_reg51 = value;
9056 8'd52: prev_reg52 = value;
9057 8'd53: prev_reg53 = value;
9058 8'd54: prev_reg54 = value;
9059 8'd55: prev_reg55 = value;
9060 8'd56: prev_reg56 = value;
9061 8'd57: prev_reg57 = value;
9062 8'd58: prev_reg58 = value;
9063 8'd59: prev_reg59 = value;
9064 8'd60: prev_reg60 = value;
9065 8'd61: prev_reg61 = value;
9066 8'd62: prev_reg62 = value;
9067 8'd63: prev_reg63 = value;
9068 8'd64: prev_reg64 = value;
9069 8'd65: prev_reg65 = value;
9070 8'd66: prev_reg66 = value;
9071 8'd67: prev_reg67 = value;
9072 8'd68: prev_reg68 = value;
9073 8'd69: prev_reg69 = value;
9074 8'd70: prev_reg70 = value;
9075 8'd71: prev_reg71 = value;
9076 8'd72: prev_reg72 = value;
9077 8'd73: prev_reg73 = value;
9078 8'd74: prev_reg74 = value;
9079 8'd75: prev_reg75 = value;
9080 8'd76: prev_reg76 = value;
9081 8'd77: prev_reg77 = value;
9082 8'd78: prev_reg78 = value;
9083 8'd79: prev_reg79 = value;
9084 8'd80: prev_reg80 = value;
9085 8'd81: prev_reg81 = value;
9086 8'd82: prev_reg82 = value;
9087 8'd83: prev_reg83 = value;
9088 8'd84: prev_reg84 = value;
9089 8'd85: prev_reg85 = value;
9090 8'd86: prev_reg86 = value;
9091 8'd87: prev_reg87 = value;
9092 8'd88: prev_reg88 = value;
9093 8'd89: prev_reg89 = value;
9094 8'd90: prev_reg90 = value;
9095 8'd91: prev_reg91 = value;
9096 8'd92: prev_reg92 = value;
9097 8'd93: prev_reg93 = value;
9098 8'd94: prev_reg94 = value;
9099 8'd95: prev_reg95 = value;
9100 8'd96: prev_reg96 = value;
9101 8'd97: prev_reg97 = value;
9102 8'd98: prev_reg98 = value;
9103 8'd99: prev_reg99 = value;
9104 8'd100: prev_reg100 = value;
9105 8'd101: prev_reg101 = value;
9106 8'd102: prev_reg102 = value;
9107 8'd103: prev_reg103 = value;
9108 8'd104: prev_reg104 = value;
9109 8'd105: prev_reg105 = value;
9110 8'd106: prev_reg106 = value;
9111 8'd107: prev_reg107 = value;
9112 8'd108: prev_reg108 = value;
9113 8'd109: prev_reg109 = value;
9114 8'd110: prev_reg110 = value;
9115 8'd111: prev_reg111 = value;
9116 8'd112: prev_reg112 = value;
9117 8'd113: prev_reg113 = value;
9118 8'd114: prev_reg114 = value;
9119 8'd115: prev_reg115 = value;
9120 8'd116: prev_reg116 = value;
9121 8'd117: prev_reg117 = value;
9122 8'd118: prev_reg118 = value;
9123 8'd119: prev_reg119 = value;
9124 8'd120: prev_reg120 = value;
9125 8'd121: prev_reg121 = value;
9126 8'd122: prev_reg122 = value;
9127 8'd123: prev_reg123 = value;
9128 8'd124: prev_reg124 = value;
9129 8'd125: prev_reg125 = value;
9130 8'd126: prev_reg126 = value;
9131 8'd127: prev_reg127 = value;
9132 8'd128: prev_reg128 = value;
9133 8'd129: prev_reg129 = value;
9134 8'd130: prev_reg130 = value;
9135 8'd131: prev_reg131 = value;
9136 8'd132: prev_reg132 = value;
9137 8'd133: prev_reg133 = value;
9138 8'd134: prev_reg134 = value;
9139 8'd135: prev_reg135 = value;
9140 8'd136: prev_reg136 = value;
9141 8'd137: prev_reg137 = value;
9142 8'd138: prev_reg138 = value;
9143 8'd139: prev_reg139 = value;
9144 8'd140: prev_reg140 = value;
9145 8'd141: prev_reg141 = value;
9146 8'd142: prev_reg142 = value;
9147 8'd143: prev_reg143 = value;
9148 8'd144: prev_reg144 = value;
9149 8'd145: prev_reg145 = value;
9150 8'd146: prev_reg146 = value;
9151 8'd147: prev_reg147 = value;
9152 8'd148: prev_reg148 = value;
9153 8'd149: prev_reg149 = value;
9154 8'd150: prev_reg150 = value;
9155 8'd151: prev_reg151 = value;
9156 8'd152: prev_reg152 = value;
9157 8'd153: prev_reg153 = value;
9158 8'd154: prev_reg154 = value;
9159 8'd155: prev_reg155 = value;
9160 8'd156: prev_reg156 = value;
9161 8'd157: prev_reg157 = value;
9162 8'd158: prev_reg158 = value;
9163 8'd159: prev_reg159 = value;
9164 8'd160: prev_reg160 = value;
9165 8'd161: prev_reg161 = value;
9166 8'd162: prev_reg162 = value;
9167 8'd163: prev_reg163 = value;
9168 8'd164: prev_reg164 = value;
9169 8'd165: prev_reg165 = value;
9170 8'd166: prev_reg166 = value;
9171 8'd167: prev_reg167 = value;
9172 8'd168: prev_reg168 = value;
9173 8'd169: prev_reg169 = value;
9174 8'd170: prev_reg170 = value;
9175 8'd171: prev_reg171 = value;
9176 8'd172: prev_reg172 = value;
9177 8'd173: prev_reg173 = value;
9178 8'd174: prev_reg174 = value;
9179 8'd175: prev_reg175 = value;
9180 8'd176: prev_reg176 = value;
9181 8'd177: prev_reg177 = value;
9182 8'd178: prev_reg178 = value;
9183 8'd179: prev_reg179 = value;
9184 8'd180: prev_reg180 = value;
9185 8'd181: prev_reg181 = value;
9186 8'd182: prev_reg182 = value;
9187 8'd183: prev_reg183 = value;
9188 8'd184: prev_reg184 = value;
9189 8'd185: prev_reg185 = value;
9190 8'd186: prev_reg186 = value;
9191 8'd187: prev_reg187 = value;
9192 8'd188: prev_reg188 = value;
9193 8'd189: prev_reg189 = value;
9194 8'd190: prev_reg190 = value;
9195 8'd191: prev_reg191 = value;
9196 8'd192: prev_reg192 = value;
9197 8'd193: prev_reg193 = value;
9198 8'd194: prev_reg194 = value;
9199 8'd195: prev_reg195 = value;
9200 8'd196: prev_reg196 = value;
9201 8'd197: prev_reg197 = value;
9202 8'd198: prev_reg198 = value;
9203 8'd199: prev_reg199 = value;
9204 8'd200: prev_reg200 = value;
9205 8'd201: prev_reg201 = value;
9206 8'd202: prev_reg202 = value;
9207 8'd203: prev_reg203 = value;
9208 8'd204: prev_reg204 = value;
9209 8'd205: prev_reg205 = value;
9210 8'd206: prev_reg206 = value;
9211 8'd207: prev_reg207 = value;
9212 8'd208: prev_reg208 = value;
9213 8'd209: prev_reg209 = value;
9214 8'd210: prev_reg210 = value;
9215 8'd211: prev_reg211 = value;
9216 8'd212: prev_reg212 = value;
9217 8'd213: prev_reg213 = value;
9218 8'd214: prev_reg214 = value;
9219 8'd215: prev_reg215 = value;
9220 8'd216: prev_reg216 = value;
9221 8'd217: prev_reg217 = value;
9222 8'd218: prev_reg218 = value;
9223 8'd219: prev_reg219 = value;
9224 8'd220: prev_reg220 = value;
9225 8'd221: prev_reg221 = value;
9226 8'd222: prev_reg222 = value;
9227 8'd223: prev_reg223 = value;
9228 8'd224: prev_reg224 = value;
9229 8'd225: prev_reg225 = value;
9230 8'd226: prev_reg226 = value;
9231 8'd227: prev_reg227 = value;
9232 8'd228: prev_reg228 = value;
9233 8'd229: prev_reg229 = value;
9234 8'd230: prev_reg230 = value;
9235 8'd231: prev_reg231 = value;
9236 8'd232: prev_reg232 = value;
9237 8'd233: prev_reg233 = value;
9238 8'd234: prev_reg234 = value;
9239 8'd235: prev_reg235 = value;
9240 8'd236: prev_reg236 = value;
9241 8'd237: prev_reg237 = value;
9242 8'd238: prev_reg238 = value;
9243 8'd239: prev_reg239 = value;
9244 8'd240: prev_reg240 = value;
9245 8'd241: prev_reg241 = value;
9246 8'd242: prev_reg242 = value;
9247 8'd243: prev_reg243 = value;
9248 8'd244: prev_reg244 = value;
9249 8'd245: prev_reg245 = value;
9250 8'd246: prev_reg246 = value;
9251 8'd247: prev_reg247 = value;
9252 8'd248: prev_reg248 = value;
9253 8'd249: prev_reg249 = value;
9254 8'd250: prev_reg250 = value;
9255 8'd251: prev_reg251 = value;
9256 8'd252: prev_reg252 = value;
9257 8'd253: prev_reg253 = value;
9258 8'd254: prev_reg254 = value;
9259 8'd255: prev_reg255 = value;
9260 endcase
9261
9262 end //}
9263
9264endtask
9265
9266//----------------------------------------------------------
9267// Read value frpm prev_reg using id as index
9268function [63:0] read_prev;
9269 input [7:0] id;
9270
9271 begin // {
9272
9273 case (id)
9274 8'd0: read_prev = prev_reg0;
9275 8'd1: read_prev = prev_reg1;
9276 8'd2: read_prev = prev_reg2;
9277 8'd3: read_prev = prev_reg3;
9278 8'd4: read_prev = prev_reg4;
9279 8'd5: read_prev = prev_reg5;
9280 8'd6: read_prev = prev_reg6;
9281 8'd7: read_prev = prev_reg7;
9282 8'd8: read_prev = prev_reg8;
9283 8'd9: read_prev = prev_reg9;
9284 8'd10: read_prev = prev_reg10;
9285 8'd11: read_prev = prev_reg11;
9286 8'd12: read_prev = prev_reg12;
9287 8'd13: read_prev = prev_reg13;
9288 8'd14: read_prev = prev_reg14;
9289 8'd15: read_prev = prev_reg15;
9290 8'd16: read_prev = prev_reg16;
9291 8'd17: read_prev = prev_reg17;
9292 8'd18: read_prev = prev_reg18;
9293 8'd19: read_prev = prev_reg19;
9294 8'd20: read_prev = prev_reg20;
9295 8'd21: read_prev = prev_reg21;
9296 8'd22: read_prev = prev_reg22;
9297 8'd23: read_prev = prev_reg23;
9298 8'd24: read_prev = prev_reg24;
9299 8'd25: read_prev = prev_reg25;
9300 8'd26: read_prev = prev_reg26;
9301 8'd27: read_prev = prev_reg27;
9302 8'd28: read_prev = prev_reg28;
9303 8'd29: read_prev = prev_reg29;
9304 8'd30: read_prev = prev_reg30;
9305 8'd31: read_prev = prev_reg31;
9306 8'd32: read_prev = prev_reg32;
9307 8'd33: read_prev = prev_reg33;
9308 8'd34: read_prev = prev_reg34;
9309 8'd35: read_prev = prev_reg35;
9310 8'd36: read_prev = prev_reg36;
9311 8'd37: read_prev = prev_reg37;
9312 8'd38: read_prev = prev_reg38;
9313 8'd39: read_prev = prev_reg39;
9314 8'd40: read_prev = prev_reg40;
9315 8'd41: read_prev = prev_reg41;
9316 8'd42: read_prev = prev_reg42;
9317 8'd43: read_prev = prev_reg43;
9318 8'd44: read_prev = prev_reg44;
9319 8'd45: read_prev = prev_reg45;
9320 8'd46: read_prev = prev_reg46;
9321 8'd47: read_prev = prev_reg47;
9322 8'd48: read_prev = prev_reg48;
9323 8'd49: read_prev = prev_reg49;
9324 8'd50: read_prev = prev_reg50;
9325 8'd51: read_prev = prev_reg51;
9326 8'd52: read_prev = prev_reg52;
9327 8'd53: read_prev = prev_reg53;
9328 8'd54: read_prev = prev_reg54;
9329 8'd55: read_prev = prev_reg55;
9330 8'd56: read_prev = prev_reg56;
9331 8'd57: read_prev = prev_reg57;
9332 8'd58: read_prev = prev_reg58;
9333 8'd59: read_prev = prev_reg59;
9334 8'd60: read_prev = prev_reg60;
9335 8'd61: read_prev = prev_reg61;
9336 8'd62: read_prev = prev_reg62;
9337 8'd63: read_prev = prev_reg63;
9338 8'd64: read_prev = prev_reg64;
9339 8'd65: read_prev = prev_reg65;
9340 8'd66: read_prev = prev_reg66;
9341 8'd67: read_prev = prev_reg67;
9342 8'd68: read_prev = prev_reg68;
9343 8'd69: read_prev = prev_reg69;
9344 8'd70: read_prev = prev_reg70;
9345 8'd71: read_prev = prev_reg71;
9346 8'd72: read_prev = prev_reg72;
9347 8'd73: read_prev = prev_reg73;
9348 8'd74: read_prev = prev_reg74;
9349 8'd75: read_prev = prev_reg75;
9350 8'd76: read_prev = prev_reg76;
9351 8'd77: read_prev = prev_reg77;
9352 8'd78: read_prev = prev_reg78;
9353 8'd79: read_prev = prev_reg79;
9354 8'd80: read_prev = prev_reg80;
9355 8'd81: read_prev = prev_reg81;
9356 8'd82: read_prev = prev_reg82;
9357 8'd83: read_prev = prev_reg83;
9358 8'd84: read_prev = prev_reg84;
9359 8'd85: read_prev = prev_reg85;
9360 8'd86: read_prev = prev_reg86;
9361 8'd87: read_prev = prev_reg87;
9362 8'd88: read_prev = prev_reg88;
9363 8'd89: read_prev = prev_reg89;
9364 8'd90: read_prev = prev_reg90;
9365 8'd91: read_prev = prev_reg91;
9366 8'd92: read_prev = prev_reg92;
9367 8'd93: read_prev = prev_reg93;
9368 8'd94: read_prev = prev_reg94;
9369 8'd95: read_prev = prev_reg95;
9370 8'd96: read_prev = prev_reg96;
9371 8'd97: read_prev = prev_reg97;
9372 8'd98: read_prev = prev_reg98;
9373 8'd99: read_prev = prev_reg99;
9374 8'd100: read_prev = prev_reg100;
9375 8'd101: read_prev = prev_reg101;
9376 8'd102: read_prev = prev_reg102;
9377 8'd103: read_prev = prev_reg103;
9378 8'd104: read_prev = prev_reg104;
9379 8'd105: read_prev = prev_reg105;
9380 8'd106: read_prev = prev_reg106;
9381 8'd107: read_prev = prev_reg107;
9382 8'd108: read_prev = prev_reg108;
9383 8'd109: read_prev = prev_reg109;
9384 8'd110: read_prev = prev_reg110;
9385 8'd111: read_prev = prev_reg111;
9386 8'd112: read_prev = prev_reg112;
9387 8'd113: read_prev = prev_reg113;
9388 8'd114: read_prev = prev_reg114;
9389 8'd115: read_prev = prev_reg115;
9390 8'd116: read_prev = prev_reg116;
9391 8'd117: read_prev = prev_reg117;
9392 8'd118: read_prev = prev_reg118;
9393 8'd119: read_prev = prev_reg119;
9394 8'd120: read_prev = prev_reg120;
9395 8'd121: read_prev = prev_reg121;
9396 8'd122: read_prev = prev_reg122;
9397 8'd123: read_prev = prev_reg123;
9398 8'd124: read_prev = prev_reg124;
9399 8'd125: read_prev = prev_reg125;
9400 8'd126: read_prev = prev_reg126;
9401 8'd127: read_prev = prev_reg127;
9402 8'd128: read_prev = prev_reg128;
9403 8'd129: read_prev = prev_reg129;
9404 8'd130: read_prev = prev_reg130;
9405 8'd131: read_prev = prev_reg131;
9406 8'd132: read_prev = prev_reg132;
9407 8'd133: read_prev = prev_reg133;
9408 8'd134: read_prev = prev_reg134;
9409 8'd135: read_prev = prev_reg135;
9410 8'd136: read_prev = prev_reg136;
9411 8'd137: read_prev = prev_reg137;
9412 8'd138: read_prev = prev_reg138;
9413 8'd139: read_prev = prev_reg139;
9414 8'd140: read_prev = prev_reg140;
9415 8'd141: read_prev = prev_reg141;
9416 8'd142: read_prev = prev_reg142;
9417 8'd143: read_prev = prev_reg143;
9418 8'd144: read_prev = prev_reg144;
9419 8'd145: read_prev = prev_reg145;
9420 8'd146: read_prev = prev_reg146;
9421 8'd147: read_prev = prev_reg147;
9422 8'd148: read_prev = prev_reg148;
9423 8'd149: read_prev = prev_reg149;
9424 8'd150: read_prev = prev_reg150;
9425 8'd151: read_prev = prev_reg151;
9426 8'd152: read_prev = prev_reg152;
9427 8'd153: read_prev = prev_reg153;
9428 8'd154: read_prev = prev_reg154;
9429 8'd155: read_prev = prev_reg155;
9430 8'd156: read_prev = prev_reg156;
9431 8'd157: read_prev = prev_reg157;
9432 8'd158: read_prev = prev_reg158;
9433 8'd159: read_prev = prev_reg159;
9434 8'd160: read_prev = prev_reg160;
9435 8'd161: read_prev = prev_reg161;
9436 8'd162: read_prev = prev_reg162;
9437 8'd163: read_prev = prev_reg163;
9438 8'd164: read_prev = prev_reg164;
9439 8'd165: read_prev = prev_reg165;
9440 8'd166: read_prev = prev_reg166;
9441 8'd167: read_prev = prev_reg167;
9442 8'd168: read_prev = prev_reg168;
9443 8'd169: read_prev = prev_reg169;
9444 8'd170: read_prev = prev_reg170;
9445 8'd171: read_prev = prev_reg171;
9446 8'd172: read_prev = prev_reg172;
9447 8'd173: read_prev = prev_reg173;
9448 8'd174: read_prev = prev_reg174;
9449 8'd175: read_prev = prev_reg175;
9450 8'd176: read_prev = prev_reg176;
9451 8'd177: read_prev = prev_reg177;
9452 8'd178: read_prev = prev_reg178;
9453 8'd179: read_prev = prev_reg179;
9454 8'd180: read_prev = prev_reg180;
9455 8'd181: read_prev = prev_reg181;
9456 8'd182: read_prev = prev_reg182;
9457 8'd183: read_prev = prev_reg183;
9458 8'd184: read_prev = prev_reg184;
9459 8'd185: read_prev = prev_reg185;
9460 8'd186: read_prev = prev_reg186;
9461 8'd187: read_prev = prev_reg187;
9462 8'd188: read_prev = prev_reg188;
9463 8'd189: read_prev = prev_reg189;
9464 8'd190: read_prev = prev_reg190;
9465 8'd191: read_prev = prev_reg191;
9466 8'd192: read_prev = prev_reg192;
9467 8'd193: read_prev = prev_reg193;
9468 8'd194: read_prev = prev_reg194;
9469 8'd195: read_prev = prev_reg195;
9470 8'd196: read_prev = prev_reg196;
9471 8'd197: read_prev = prev_reg197;
9472 8'd198: read_prev = prev_reg198;
9473 8'd199: read_prev = prev_reg199;
9474 8'd200: read_prev = prev_reg200;
9475 8'd201: read_prev = prev_reg201;
9476 8'd202: read_prev = prev_reg202;
9477 8'd203: read_prev = prev_reg203;
9478 8'd204: read_prev = prev_reg204;
9479 8'd205: read_prev = prev_reg205;
9480 8'd206: read_prev = prev_reg206;
9481 8'd207: read_prev = prev_reg207;
9482 8'd208: read_prev = prev_reg208;
9483 8'd209: read_prev = prev_reg209;
9484 8'd210: read_prev = prev_reg210;
9485 8'd211: read_prev = prev_reg211;
9486 8'd212: read_prev = prev_reg212;
9487 8'd213: read_prev = prev_reg213;
9488 8'd214: read_prev = prev_reg214;
9489 8'd215: read_prev = prev_reg215;
9490 8'd216: read_prev = prev_reg216;
9491 8'd217: read_prev = prev_reg217;
9492 8'd218: read_prev = prev_reg218;
9493 8'd219: read_prev = prev_reg219;
9494 8'd220: read_prev = prev_reg220;
9495 8'd221: read_prev = prev_reg221;
9496 8'd222: read_prev = prev_reg222;
9497 8'd223: read_prev = prev_reg223;
9498 8'd224: read_prev = prev_reg224;
9499 8'd225: read_prev = prev_reg225;
9500 8'd226: read_prev = prev_reg226;
9501 8'd227: read_prev = prev_reg227;
9502 8'd228: read_prev = prev_reg228;
9503 8'd229: read_prev = prev_reg229;
9504 8'd230: read_prev = prev_reg230;
9505 8'd231: read_prev = prev_reg231;
9506 8'd232: read_prev = prev_reg232;
9507 8'd233: read_prev = prev_reg233;
9508 8'd234: read_prev = prev_reg234;
9509 8'd235: read_prev = prev_reg235;
9510 8'd236: read_prev = prev_reg236;
9511 8'd237: read_prev = prev_reg237;
9512 8'd238: read_prev = prev_reg238;
9513 8'd239: read_prev = prev_reg239;
9514 8'd240: read_prev = prev_reg240;
9515 8'd241: read_prev = prev_reg241;
9516 8'd242: read_prev = prev_reg242;
9517 8'd243: read_prev = prev_reg243;
9518 8'd244: read_prev = prev_reg244;
9519 8'd245: read_prev = prev_reg245;
9520 8'd246: read_prev = prev_reg246;
9521 8'd247: read_prev = prev_reg247;
9522 8'd248: read_prev = prev_reg248;
9523 8'd249: read_prev = prev_reg249;
9524 8'd250: read_prev = prev_reg250;
9525 8'd251: read_prev = prev_reg251;
9526 8'd252: read_prev = prev_reg252;
9527 8'd253: read_prev = prev_reg253;
9528 8'd254: read_prev = prev_reg254;
9529 8'd255: read_prev = prev_reg255;
9530 endcase
9531
9532 end //}
9533
9534endfunction
9535
9536//----------------------------------------------------------
9537function [4:0] remap;
9538 input [4:0] rd;
9539 input oddwin;
9540
9541 begin
9542
9543 remap[4] = rd[4] ^ (rd[3] & oddwin);
9544 remap[3:0] = rd[3:0];
9545
9546 end
9547endfunction
9548
9549//----------------------------------------------------------
9550// Initialize nas_pipe registers
9551initial begin : INIT_BLOCK
9552 integer i;
9553
9554 nas_pipe_enable = 1'b1; // Nas_pipe always enables itself
9555 good_trap_detected = 1'b0;
9556
9557 @ (posedge `BENCH_SPC1_GCLK);
9558 `TOP.th_last_act_cycle[mytnum] = 0;
9559
9560 // Window registers
9561 win0_reg8 = 0;
9562 win1_reg8 = 0;
9563 win2_reg8 = 0;
9564 win3_reg8 = 0;
9565 win4_reg8 = 0;
9566 win5_reg8 = 0;
9567 win6_reg8 = 0;
9568 win7_reg8 = 0;
9569 win0_reg9 = 0;
9570 win1_reg9 = 0;
9571 win2_reg9 = 0;
9572 win3_reg9 = 0;
9573 win4_reg9 = 0;
9574 win5_reg9 = 0;
9575 win6_reg9 = 0;
9576 win7_reg9 = 0;
9577 win0_reg10 = 0;
9578 win1_reg10 = 0;
9579 win2_reg10 = 0;
9580 win3_reg10 = 0;
9581 win4_reg10 = 0;
9582 win5_reg10 = 0;
9583 win6_reg10 = 0;
9584 win7_reg10 = 0;
9585 win0_reg11 = 0;
9586 win1_reg11 = 0;
9587 win2_reg11 = 0;
9588 win3_reg11 = 0;
9589 win4_reg11 = 0;
9590 win5_reg11 = 0;
9591 win6_reg11 = 0;
9592 win7_reg11 = 0;
9593 win0_reg12 = 0;
9594 win1_reg12 = 0;
9595 win2_reg12 = 0;
9596 win3_reg12 = 0;
9597 win4_reg12 = 0;
9598 win5_reg12 = 0;
9599 win6_reg12 = 0;
9600 win7_reg12 = 0;
9601 win0_reg13 = 0;
9602 win1_reg13 = 0;
9603 win2_reg13 = 0;
9604 win3_reg13 = 0;
9605 win4_reg13 = 0;
9606 win5_reg13 = 0;
9607 win6_reg13 = 0;
9608 win7_reg13 = 0;
9609 win0_reg14 = 0;
9610 win1_reg14 = 0;
9611 win2_reg14 = 0;
9612 win3_reg14 = 0;
9613 win4_reg14 = 0;
9614 win5_reg14 = 0;
9615 win6_reg14 = 0;
9616 win7_reg14 = 0;
9617 win0_reg15 = 0;
9618 win1_reg15 = 0;
9619 win2_reg15 = 0;
9620 win3_reg15 = 0;
9621 win4_reg15 = 0;
9622 win5_reg15 = 0;
9623 win6_reg15 = 0;
9624 win7_reg15 = 0;
9625 win0_reg16 = 0;
9626 win1_reg16 = 0;
9627 win2_reg16 = 0;
9628 win3_reg16 = 0;
9629 win4_reg16 = 0;
9630 win5_reg16 = 0;
9631 win6_reg16 = 0;
9632 win7_reg16 = 0;
9633 win0_reg17 = 0;
9634 win1_reg17 = 0;
9635 win2_reg17 = 0;
9636 win3_reg17 = 0;
9637 win4_reg17 = 0;
9638 win5_reg17 = 0;
9639 win6_reg17 = 0;
9640 win7_reg17 = 0;
9641 win0_reg18 = 0;
9642 win1_reg18 = 0;
9643 win2_reg18 = 0;
9644 win3_reg18 = 0;
9645 win4_reg18 = 0;
9646 win5_reg18 = 0;
9647 win6_reg18 = 0;
9648 win7_reg18 = 0;
9649 win0_reg19 = 0;
9650 win1_reg19 = 0;
9651 win2_reg19 = 0;
9652 win3_reg19 = 0;
9653 win4_reg19 = 0;
9654 win5_reg19 = 0;
9655 win6_reg19 = 0;
9656 win7_reg19 = 0;
9657 win0_reg20 = 0;
9658 win1_reg20 = 0;
9659 win2_reg20 = 0;
9660 win3_reg20 = 0;
9661 win4_reg20 = 0;
9662 win5_reg20 = 0;
9663 win6_reg20 = 0;
9664 win7_reg20 = 0;
9665 win0_reg21 = 0;
9666 win1_reg21 = 0;
9667 win2_reg21 = 0;
9668 win3_reg21 = 0;
9669 win4_reg21 = 0;
9670 win5_reg21 = 0;
9671 win6_reg21 = 0;
9672 win7_reg21 = 0;
9673 win0_reg22 = 0;
9674 win1_reg22 = 0;
9675 win2_reg22 = 0;
9676 win3_reg22 = 0;
9677 win4_reg22 = 0;
9678 win5_reg22 = 0;
9679 win6_reg22 = 0;
9680 win7_reg22 = 0;
9681 win0_reg23 = 0;
9682 win1_reg23 = 0;
9683 win2_reg23 = 0;
9684 win3_reg23 = 0;
9685 win4_reg23 = 0;
9686 win5_reg23 = 0;
9687 win6_reg23 = 0;
9688 win7_reg23 = 0;
9689 win0_reg24 = 0;
9690 win1_reg24 = 0;
9691 win2_reg24 = 0;
9692 win3_reg24 = 0;
9693 win4_reg24 = 0;
9694 win5_reg24 = 0;
9695 win6_reg24 = 0;
9696 win7_reg24 = 0;
9697 win0_reg25 = 0;
9698 win1_reg25 = 0;
9699 win2_reg25 = 0;
9700 win3_reg25 = 0;
9701 win4_reg25 = 0;
9702 win5_reg25 = 0;
9703 win6_reg25 = 0;
9704 win7_reg25 = 0;
9705 win0_reg26 = 0;
9706 win1_reg26 = 0;
9707 win2_reg26 = 0;
9708 win3_reg26 = 0;
9709 win4_reg26 = 0;
9710 win5_reg26 = 0;
9711 win6_reg26 = 0;
9712 win7_reg26 = 0;
9713 win0_reg27 = 0;
9714 win1_reg27 = 0;
9715 win2_reg27 = 0;
9716 win3_reg27 = 0;
9717 win4_reg27 = 0;
9718 win5_reg27 = 0;
9719 win6_reg27 = 0;
9720 win7_reg27 = 0;
9721 win0_reg28 = 0;
9722 win1_reg28 = 0;
9723 win2_reg28 = 0;
9724 win3_reg28 = 0;
9725 win4_reg28 = 0;
9726 win5_reg28 = 0;
9727 win6_reg28 = 0;
9728 win7_reg28 = 0;
9729 win0_reg29 = 0;
9730 win1_reg29 = 0;
9731 win2_reg29 = 0;
9732 win3_reg29 = 0;
9733 win4_reg29 = 0;
9734 win5_reg29 = 0;
9735 win6_reg29 = 0;
9736 win7_reg29 = 0;
9737 win0_reg30 = 0;
9738 win1_reg30 = 0;
9739 win2_reg30 = 0;
9740 win3_reg30 = 0;
9741 win4_reg30 = 0;
9742 win5_reg30 = 0;
9743 win6_reg30 = 0;
9744 win7_reg30 = 0;
9745 win0_reg31 = 0;
9746 win1_reg31 = 0;
9747 win2_reg31 = 0;
9748 win3_reg31 = 0;
9749 win4_reg31 = 0;
9750 win5_reg31 = 0;
9751 win6_reg31 = 0;
9752 win7_reg31 = 0;
9753
9754 // Global registers
9755 th_gl = `POR_GL;
9756 gl0_reg0 = 0;
9757 gl1_reg0 = 0;
9758 gl2_reg0 = 0;
9759 gl3_reg0 = 0;
9760 gl0_reg1 = 0;
9761 gl1_reg1 = 0;
9762 gl2_reg1 = 0;
9763 gl3_reg1 = 0;
9764 gl0_reg2 = 0;
9765 gl1_reg2 = 0;
9766 gl2_reg2 = 0;
9767 gl3_reg2 = 0;
9768 gl0_reg3 = 0;
9769 gl1_reg3 = 0;
9770 gl2_reg3 = 0;
9771 gl3_reg3 = 0;
9772 gl0_reg4 = 0;
9773 gl1_reg4 = 0;
9774 gl2_reg4 = 0;
9775 gl3_reg4 = 0;
9776 gl0_reg5 = 0;
9777 gl1_reg5 = 0;
9778 gl2_reg5 = 0;
9779 gl3_reg5 = 0;
9780 gl0_reg6 = 0;
9781 gl1_reg6 = 0;
9782 gl2_reg6 = 0;
9783 gl3_reg6 = 0;
9784 gl0_reg7 = 0;
9785 gl1_reg7 = 0;
9786 gl2_reg7 = 0;
9787 gl3_reg7 = 0;
9788
9789 `PR_INFO ("nas", `INFO, "T%0d Init shadow registers.",mytnum);
9790 prev_reg0 = 0;
9791 prev_reg1 = 0;
9792 prev_reg2 = 0;
9793 prev_reg3 = 0;
9794 prev_reg4 = 0;
9795 prev_reg5 = 0;
9796 prev_reg6 = 0;
9797 prev_reg7 = 0;
9798 prev_reg8 = 0;
9799 prev_reg9 = 0;
9800 prev_reg10 = 0;
9801 prev_reg11 = 0;
9802 prev_reg12 = 0;
9803 prev_reg13 = 0;
9804 prev_reg14 = 0;
9805 prev_reg15 = 0;
9806 prev_reg16 = 0;
9807 prev_reg17 = 0;
9808 prev_reg18 = 0;
9809 prev_reg19 = 0;
9810 prev_reg20 = 0;
9811 prev_reg21 = 0;
9812 prev_reg22 = 0;
9813 prev_reg23 = 0;
9814 prev_reg24 = 0;
9815 prev_reg25 = 0;
9816 prev_reg26 = 0;
9817 prev_reg27 = 0;
9818 prev_reg28 = 0;
9819 prev_reg29 = 0;
9820 prev_reg30 = 0;
9821 prev_reg31 = 0;
9822 prev_reg32 = 0;
9823 prev_reg33 = 0;
9824 prev_reg34 = 0;
9825 prev_reg35 = 0;
9826 prev_reg36 = 0;
9827 prev_reg37 = 0;
9828 prev_reg38 = 0;
9829 prev_reg39 = 0;
9830 prev_reg40 = 0;
9831 prev_reg41 = 0;
9832 prev_reg42 = 0;
9833 prev_reg43 = 0;
9834 prev_reg44 = 0;
9835 prev_reg45 = 0;
9836 prev_reg46 = 0;
9837 prev_reg47 = 0;
9838 prev_reg48 = 0;
9839 prev_reg49 = 0;
9840 prev_reg50 = 0;
9841 prev_reg51 = 0;
9842 prev_reg52 = 0;
9843 prev_reg53 = 0;
9844 prev_reg54 = 0;
9845 prev_reg55 = 0;
9846 prev_reg56 = 0;
9847 prev_reg57 = 0;
9848 prev_reg58 = 0;
9849 prev_reg59 = 0;
9850 prev_reg60 = 0;
9851 prev_reg61 = 0;
9852 prev_reg62 = 0;
9853 prev_reg63 = 0;
9854 prev_reg64 = 0;
9855 prev_reg65 = 0;
9856 prev_reg66 = 0;
9857 prev_reg67 = 0;
9858 prev_reg68 = 0;
9859 prev_reg69 = 0;
9860 prev_reg70 = 0;
9861 prev_reg71 = 0;
9862 prev_reg72 = 0;
9863 prev_reg73 = 0;
9864 prev_reg74 = 0;
9865 prev_reg75 = 0;
9866 prev_reg76 = 0;
9867 prev_reg77 = 0;
9868 prev_reg78 = 0;
9869 prev_reg79 = 0;
9870 prev_reg80 = 0;
9871 prev_reg81 = 0;
9872 prev_reg82 = 0;
9873 prev_reg83 = 0;
9874 prev_reg84 = 0;
9875 prev_reg85 = 0;
9876 prev_reg86 = 0;
9877 prev_reg87 = 0;
9878 prev_reg88 = 0;
9879 prev_reg89 = 0;
9880 prev_reg90 = 0;
9881 prev_reg91 = 0;
9882 prev_reg92 = 0;
9883 prev_reg93 = 0;
9884 prev_reg94 = 0;
9885 prev_reg95 = 0;
9886 prev_reg96 = 0;
9887 prev_reg97 = 0;
9888 prev_reg98 = 0;
9889 prev_reg99 = 0;
9890 prev_reg100 = 0;
9891 prev_reg101 = 0;
9892 prev_reg102 = 0;
9893 prev_reg103 = 0;
9894 prev_reg104 = 0;
9895 prev_reg105 = 0;
9896 prev_reg106 = 0;
9897 prev_reg107 = 0;
9898 prev_reg108 = 0;
9899 prev_reg109 = 0;
9900 prev_reg110 = 0;
9901 prev_reg111 = 0;
9902 prev_reg112 = 0;
9903 prev_reg113 = 0;
9904 prev_reg114 = 0;
9905 prev_reg115 = 0;
9906 prev_reg116 = 0;
9907 prev_reg117 = 0;
9908 prev_reg118 = 0;
9909 prev_reg119 = 0;
9910 prev_reg120 = 0;
9911 prev_reg121 = 0;
9912 prev_reg122 = 0;
9913 prev_reg123 = 0;
9914 prev_reg124 = 0;
9915 prev_reg125 = 0;
9916 prev_reg126 = 0;
9917 prev_reg127 = 0;
9918 prev_reg128 = 0;
9919 prev_reg129 = 0;
9920 prev_reg130 = 0;
9921 prev_reg131 = 0;
9922 prev_reg132 = 0;
9923 prev_reg133 = 0;
9924 prev_reg134 = 0;
9925 prev_reg135 = 0;
9926 prev_reg136 = 0;
9927 prev_reg137 = 0;
9928 prev_reg138 = 0;
9929 prev_reg139 = 0;
9930 prev_reg140 = 0;
9931 prev_reg141 = 0;
9932 prev_reg142 = 0;
9933 prev_reg143 = 0;
9934 prev_reg144 = 0;
9935 prev_reg145 = 0;
9936 prev_reg146 = 0;
9937 prev_reg147 = 0;
9938 prev_reg148 = 0;
9939 prev_reg149 = 0;
9940 prev_reg150 = 0;
9941 prev_reg151 = 0;
9942 prev_reg152 = 0;
9943 prev_reg153 = 0;
9944 prev_reg154 = 0;
9945 prev_reg155 = 0;
9946 prev_reg156 = 0;
9947 prev_reg157 = 0;
9948 prev_reg158 = 0;
9949 prev_reg159 = 0;
9950 prev_reg160 = 0;
9951 prev_reg161 = 0;
9952 prev_reg162 = 0;
9953 prev_reg163 = 0;
9954 prev_reg164 = 0;
9955 prev_reg165 = 0;
9956 prev_reg166 = 0;
9957 prev_reg167 = 0;
9958 prev_reg168 = 0;
9959 prev_reg169 = 0;
9960 prev_reg170 = 0;
9961 prev_reg171 = 0;
9962 prev_reg172 = 0;
9963 prev_reg173 = 0;
9964 prev_reg174 = 0;
9965 prev_reg175 = 0;
9966 prev_reg176 = 0;
9967 prev_reg177 = 0;
9968 prev_reg178 = 0;
9969 prev_reg179 = 0;
9970 prev_reg180 = 0;
9971 prev_reg181 = 0;
9972 prev_reg182 = 0;
9973 prev_reg183 = 0;
9974 prev_reg184 = 0;
9975 prev_reg185 = 0;
9976 prev_reg186 = 0;
9977 prev_reg187 = 0;
9978 prev_reg188 = 0;
9979 prev_reg189 = 0;
9980 prev_reg190 = 0;
9981 prev_reg191 = 0;
9982 prev_reg192 = 0;
9983 prev_reg193 = 0;
9984 prev_reg194 = 0;
9985 prev_reg195 = 0;
9986 prev_reg196 = 0;
9987 prev_reg197 = 0;
9988 prev_reg198 = 0;
9989 prev_reg199 = 0;
9990 prev_reg200 = 0;
9991 prev_reg201 = 0;
9992 prev_reg202 = 0;
9993 prev_reg203 = 0;
9994 prev_reg204 = 0;
9995 prev_reg205 = 0;
9996 prev_reg206 = 0;
9997 prev_reg207 = 0;
9998 prev_reg208 = 0;
9999 prev_reg209 = 0;
10000 prev_reg210 = 0;
10001 prev_reg211 = 0;
10002 prev_reg212 = 0;
10003 prev_reg213 = 0;
10004 prev_reg214 = 0;
10005 prev_reg215 = 0;
10006 prev_reg216 = 0;
10007 prev_reg217 = 0;
10008 prev_reg218 = 0;
10009 prev_reg219 = 0;
10010 prev_reg220 = 0;
10011 prev_reg221 = 0;
10012 prev_reg222 = 0;
10013 prev_reg223 = 0;
10014 prev_reg224 = 0;
10015 prev_reg225 = 0;
10016 prev_reg226 = 0;
10017 prev_reg227 = 0;
10018 prev_reg228 = 0;
10019 prev_reg229 = 0;
10020 prev_reg230 = 0;
10021 prev_reg231 = 0;
10022 prev_reg232 = 0;
10023 prev_reg233 = 0;
10024 prev_reg234 = 0;
10025 prev_reg235 = 0;
10026 prev_reg236 = 0;
10027 prev_reg237 = 0;
10028 prev_reg238 = 0;
10029 prev_reg239 = 0;
10030 prev_reg240 = 0;
10031 prev_reg241 = 0;
10032 prev_reg242 = 0;
10033 prev_reg243 = 0;
10034 prev_reg244 = 0;
10035 prev_reg245 = 0;
10036 prev_reg246 = 0;
10037 prev_reg247 = 0;
10038 prev_reg248 = 0;
10039 prev_reg249 = 0;
10040 prev_reg250 = 0;
10041 prev_reg251 = 0;
10042 prev_reg252 = 0;
10043 prev_reg253 = 0;
10044 prev_reg254 = 0;
10045 prev_reg255 = 0;
10046
10047 // POR for control registers
10048 write_prev(`FPRS +`CTL_OFFSET,3'h4);
10049 write_prev(`CLEANWIN +`CTL_OFFSET,3'h7);
10050 write_prev(`CANSAVE +`CTL_OFFSET,3'h6);
10051
10052 // POR for FPRS = 0x4
10053 write_prev(`FPRS+`CTL_OFFSET,3'h4);
10054
10055 // POR for PSTATE = 0x14 (PEF, PRIV = 1)
10056 write_prev(`PSTATE + `CTL_OFFSET,'h14);
10057
10058 // POR for HPSTATE = 0x4034 (RED, HPRIV = 1)
10059 write_prev(`HPSTATE + `CTL_OFFSET,'h24);
10060
10061 // POR for TL = = 0x6 [MAXTL]
10062 write_prev(`TL + `CTL_OFFSET,'h6);
10063
10064 // POR for TT6 = = 1
10065 write_prev(`TT6 + `CTL_OFFSET,'h1);
10066
10067 // POR for GL = MAXGL = 3
10068 write_prev(`GL + `CTL_OFFSET,`POR_GL);
10069
10070 // POR for VER = {003e, 0024, 01, 0036, 07}
10071 write_prev(`VER + `CTL_OFFSET,{32'h003e0024,VER_reg[31:24],24'h030607});
10072
10073 // POR for *_cmpr registers is INT_DIS = 1
10074 write_prev(`TICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
10075 write_prev(`STICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
10076 write_prev(`HSTICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
10077
10078 // Need to define so that 1st instruction will print correctly
10079 write_prev(`PC+`CTL_OFFSET,`POR_PC);
10080
10081 first_op = 1;
10082 pc_last = `BAD_PC;
10083
10084 `ifndef EMUL_TL
10085 delta_prev[`PC_INDEX] = `BAD_PC;
10086 `endif
10087
10088 irf_offset = (mytid%4)*32;
10089 in_wmr = 0;
10090 wmr <= 0;
10091end
10092
10093//----------------------------------------------------------
10094task wmr_prev;
10095 begin // {
10096
10097 // For WMR, we will set to 0x0, so that initial deltas
10098
10099 //
10100
10101 // WMR for PSTATE = 0x14 (PEF, PRIV = 1)
10102 // write_prev(`PSTATE + `CTL_OFFSET,'h00);
10103
10104 // WMR for HPSTATE = 0x4034 (RED, HPRIV = 1)
10105 // write_prev(`HPSTATE + `CTL_OFFSET,'h00);
10106
10107 // WMR for TL = = 0x6 [MAXTL]
10108 // write_prev(`TL + `CTL_OFFSET,'h0);
10109
10110 // WMR for TT6 = = 1
10111 // write_prev(`TT6 + `CTL_OFFSET,'h1);
10112
10113 // WMR for GL = MAXGL = 3
10114 // write_prev(`GL + `CTL_OFFSET,0);
10115
10116 end // }
10117endtask
10118
10119//----------------------------------------------------------
10120task por_prev;
10121 begin // {
10122
10123 // For POR, we will set to 0x0, so that initial deltas
10124 // and prev state are all consistent with DUT. No values
10125 // are preserved
10126
10127 `PR_ALWAYS ("arg", `ALWAYS,"T%0d Resetting Nas Pipe states for POR ..",mytnum);
10128 delta_fx4[`NEXT_INDEX] <= `FIRST_INDEX;
10129 delta_fx4[`FIRST_INDEX] <= 77'hx;
10130 delta_fx5[`NEXT_INDEX] <= `FIRST_INDEX;
10131 delta_fb[`NEXT_INDEX] <= `FIRST_INDEX;
10132 delta_fw[`NEXT_INDEX] <= `FIRST_INDEX;
10133 delta_fw1[`NEXT_INDEX] <= `FIRST_INDEX;
10134 delta_fw2[`NEXT_INDEX] <= `FIRST_INDEX;
10135 // Window registers
10136 win0_reg8 = 0;
10137 win1_reg8 = 0;
10138 win2_reg8 = 0;
10139 win3_reg8 = 0;
10140 win4_reg8 = 0;
10141 win5_reg8 = 0;
10142 win6_reg8 = 0;
10143 win7_reg8 = 0;
10144 win0_reg9 = 0;
10145 win1_reg9 = 0;
10146 win2_reg9 = 0;
10147 win3_reg9 = 0;
10148 win4_reg9 = 0;
10149 win5_reg9 = 0;
10150 win6_reg9 = 0;
10151 win7_reg9 = 0;
10152 win0_reg10 = 0;
10153 win1_reg10 = 0;
10154 win2_reg10 = 0;
10155 win3_reg10 = 0;
10156 win4_reg10 = 0;
10157 win5_reg10 = 0;
10158 win6_reg10 = 0;
10159 win7_reg10 = 0;
10160 win0_reg11 = 0;
10161 win1_reg11 = 0;
10162 win2_reg11 = 0;
10163 win3_reg11 = 0;
10164 win4_reg11 = 0;
10165 win5_reg11 = 0;
10166 win6_reg11 = 0;
10167 win7_reg11 = 0;
10168 win0_reg12 = 0;
10169 win1_reg12 = 0;
10170 win2_reg12 = 0;
10171 win3_reg12 = 0;
10172 win4_reg12 = 0;
10173 win5_reg12 = 0;
10174 win6_reg12 = 0;
10175 win7_reg12 = 0;
10176 win0_reg13 = 0;
10177 win1_reg13 = 0;
10178 win2_reg13 = 0;
10179 win3_reg13 = 0;
10180 win4_reg13 = 0;
10181 win5_reg13 = 0;
10182 win6_reg13 = 0;
10183 win7_reg13 = 0;
10184 win0_reg14 = 0;
10185 win1_reg14 = 0;
10186 win2_reg14 = 0;
10187 win3_reg14 = 0;
10188 win4_reg14 = 0;
10189 win5_reg14 = 0;
10190 win6_reg14 = 0;
10191 win7_reg14 = 0;
10192 win0_reg15 = 0;
10193 win1_reg15 = 0;
10194 win2_reg15 = 0;
10195 win3_reg15 = 0;
10196 win4_reg15 = 0;
10197 win5_reg15 = 0;
10198 win6_reg15 = 0;
10199 win7_reg15 = 0;
10200 win0_reg16 = 0;
10201 win1_reg16 = 0;
10202 win2_reg16 = 0;
10203 win3_reg16 = 0;
10204 win4_reg16 = 0;
10205 win5_reg16 = 0;
10206 win6_reg16 = 0;
10207 win7_reg16 = 0;
10208 win0_reg17 = 0;
10209 win1_reg17 = 0;
10210 win2_reg17 = 0;
10211 win3_reg17 = 0;
10212 win4_reg17 = 0;
10213 win5_reg17 = 0;
10214 win6_reg17 = 0;
10215 win7_reg17 = 0;
10216 win0_reg18 = 0;
10217 win1_reg18 = 0;
10218 win2_reg18 = 0;
10219 win3_reg18 = 0;
10220 win4_reg18 = 0;
10221 win5_reg18 = 0;
10222 win6_reg18 = 0;
10223 win7_reg18 = 0;
10224 win0_reg19 = 0;
10225 win1_reg19 = 0;
10226 win2_reg19 = 0;
10227 win3_reg19 = 0;
10228 win4_reg19 = 0;
10229 win5_reg19 = 0;
10230 win6_reg19 = 0;
10231 win7_reg19 = 0;
10232 win0_reg20 = 0;
10233 win1_reg20 = 0;
10234 win2_reg20 = 0;
10235 win3_reg20 = 0;
10236 win4_reg20 = 0;
10237 win5_reg20 = 0;
10238 win6_reg20 = 0;
10239 win7_reg20 = 0;
10240 win0_reg21 = 0;
10241 win1_reg21 = 0;
10242 win2_reg21 = 0;
10243 win3_reg21 = 0;
10244 win4_reg21 = 0;
10245 win5_reg21 = 0;
10246 win6_reg21 = 0;
10247 win7_reg21 = 0;
10248 win0_reg22 = 0;
10249 win1_reg22 = 0;
10250 win2_reg22 = 0;
10251 win3_reg22 = 0;
10252 win4_reg22 = 0;
10253 win5_reg22 = 0;
10254 win6_reg22 = 0;
10255 win7_reg22 = 0;
10256 win0_reg23 = 0;
10257 win1_reg23 = 0;
10258 win2_reg23 = 0;
10259 win3_reg23 = 0;
10260 win4_reg23 = 0;
10261 win5_reg23 = 0;
10262 win6_reg23 = 0;
10263 win7_reg23 = 0;
10264 win0_reg24 = 0;
10265 win1_reg24 = 0;
10266 win2_reg24 = 0;
10267 win3_reg24 = 0;
10268 win4_reg24 = 0;
10269 win5_reg24 = 0;
10270 win6_reg24 = 0;
10271 win7_reg24 = 0;
10272 win0_reg25 = 0;
10273 win1_reg25 = 0;
10274 win2_reg25 = 0;
10275 win3_reg25 = 0;
10276 win4_reg25 = 0;
10277 win5_reg25 = 0;
10278 win6_reg25 = 0;
10279 win7_reg25 = 0;
10280 win0_reg26 = 0;
10281 win1_reg26 = 0;
10282 win2_reg26 = 0;
10283 win3_reg26 = 0;
10284 win4_reg26 = 0;
10285 win5_reg26 = 0;
10286 win6_reg26 = 0;
10287 win7_reg26 = 0;
10288 win0_reg27 = 0;
10289 win1_reg27 = 0;
10290 win2_reg27 = 0;
10291 win3_reg27 = 0;
10292 win4_reg27 = 0;
10293 win5_reg27 = 0;
10294 win6_reg27 = 0;
10295 win7_reg27 = 0;
10296 win0_reg28 = 0;
10297 win1_reg28 = 0;
10298 win2_reg28 = 0;
10299 win3_reg28 = 0;
10300 win4_reg28 = 0;
10301 win5_reg28 = 0;
10302 win6_reg28 = 0;
10303 win7_reg28 = 0;
10304 win0_reg29 = 0;
10305 win1_reg29 = 0;
10306 win2_reg29 = 0;
10307 win3_reg29 = 0;
10308 win4_reg29 = 0;
10309 win5_reg29 = 0;
10310 win6_reg29 = 0;
10311 win7_reg29 = 0;
10312 win0_reg30 = 0;
10313 win1_reg30 = 0;
10314 win2_reg30 = 0;
10315 win3_reg30 = 0;
10316 win4_reg30 = 0;
10317 win5_reg30 = 0;
10318 win6_reg30 = 0;
10319 win7_reg30 = 0;
10320 win0_reg31 = 0;
10321 win1_reg31 = 0;
10322 win2_reg31 = 0;
10323 win3_reg31 = 0;
10324 win4_reg31 = 0;
10325 win5_reg31 = 0;
10326 win6_reg31 = 0;
10327 win7_reg31 = 0;
10328
10329 // Global registers
10330 th_gl = `POR_GL;
10331 gl0_reg0 = 0;
10332 gl1_reg0 = 0;
10333 gl2_reg0 = 0;
10334 gl3_reg0 = 0;
10335 gl0_reg1 = 0;
10336 gl1_reg1 = 0;
10337 gl2_reg1 = 0;
10338 gl3_reg1 = 0;
10339 gl0_reg2 = 0;
10340 gl1_reg2 = 0;
10341 gl2_reg2 = 0;
10342 gl3_reg2 = 0;
10343 gl0_reg3 = 0;
10344 gl1_reg3 = 0;
10345 gl2_reg3 = 0;
10346 gl3_reg3 = 0;
10347 gl0_reg4 = 0;
10348 gl1_reg4 = 0;
10349 gl2_reg4 = 0;
10350 gl3_reg4 = 0;
10351 gl0_reg5 = 0;
10352 gl1_reg5 = 0;
10353 gl2_reg5 = 0;
10354 gl3_reg5 = 0;
10355 gl0_reg6 = 0;
10356 gl1_reg6 = 0;
10357 gl2_reg6 = 0;
10358 gl3_reg6 = 0;
10359 gl0_reg7 = 0;
10360 gl1_reg7 = 0;
10361 gl2_reg7 = 0;
10362 gl3_reg7 = 0;
10363
10364 `PR_INFO ("nas", `INFO, "T%0d Init shadow registers.",mytnum);
10365 prev_reg0 = 0;
10366 prev_reg1 = 0;
10367 prev_reg2 = 0;
10368 prev_reg3 = 0;
10369 prev_reg4 = 0;
10370 prev_reg5 = 0;
10371 prev_reg6 = 0;
10372 prev_reg7 = 0;
10373 prev_reg8 = 0;
10374 prev_reg9 = 0;
10375 prev_reg10 = 0;
10376 prev_reg11 = 0;
10377 prev_reg12 = 0;
10378 prev_reg13 = 0;
10379 prev_reg14 = 0;
10380 prev_reg15 = 0;
10381 prev_reg16 = 0;
10382 prev_reg17 = 0;
10383 prev_reg18 = 0;
10384 prev_reg19 = 0;
10385 prev_reg20 = 0;
10386 prev_reg21 = 0;
10387 prev_reg22 = 0;
10388 prev_reg23 = 0;
10389 prev_reg24 = 0;
10390 prev_reg25 = 0;
10391 prev_reg26 = 0;
10392 prev_reg27 = 0;
10393 prev_reg28 = 0;
10394 prev_reg29 = 0;
10395 prev_reg30 = 0;
10396 prev_reg31 = 0;
10397 prev_reg32 = 0;
10398 prev_reg33 = 0;
10399 prev_reg34 = 0;
10400 prev_reg35 = 0;
10401 prev_reg36 = 0;
10402 prev_reg37 = 0;
10403 prev_reg38 = 0;
10404 prev_reg39 = 0;
10405 prev_reg40 = 0;
10406 prev_reg41 = 0;
10407 prev_reg42 = 0;
10408 prev_reg43 = 0;
10409 prev_reg44 = 0;
10410 prev_reg45 = 0;
10411 prev_reg46 = 0;
10412 prev_reg47 = 0;
10413 prev_reg48 = 0;
10414 prev_reg49 = 0;
10415 prev_reg50 = 0;
10416 prev_reg51 = 0;
10417 prev_reg52 = 0;
10418 prev_reg53 = 0;
10419 prev_reg54 = 0;
10420 prev_reg55 = 0;
10421 prev_reg56 = 0;
10422 prev_reg57 = 0;
10423 prev_reg58 = 0;
10424 prev_reg59 = 0;
10425 prev_reg60 = 0;
10426 prev_reg61 = 0;
10427 prev_reg62 = 0;
10428 prev_reg63 = 0;
10429 prev_reg64 = 0;
10430 prev_reg65 = 0;
10431 prev_reg66 = 0;
10432 prev_reg67 = 0;
10433 prev_reg68 = 0;
10434 prev_reg69 = 0;
10435 prev_reg70 = 0;
10436 prev_reg71 = 0;
10437 prev_reg72 = 0;
10438 prev_reg73 = 0;
10439 prev_reg74 = 0;
10440 prev_reg75 = 0;
10441 prev_reg76 = 0;
10442 prev_reg77 = 0;
10443 prev_reg78 = 0;
10444 prev_reg79 = 0;
10445 prev_reg80 = 0;
10446 prev_reg81 = 0;
10447 prev_reg82 = 0;
10448 prev_reg83 = 0;
10449 prev_reg84 = 0;
10450 prev_reg85 = 0;
10451 prev_reg86 = 0;
10452 prev_reg87 = 0;
10453 prev_reg88 = 0;
10454 prev_reg89 = 0;
10455 prev_reg90 = 0;
10456 prev_reg91 = 0;
10457 prev_reg92 = 0;
10458 prev_reg93 = 0;
10459 prev_reg94 = 0;
10460 prev_reg95 = 0;
10461 prev_reg96 = 0;
10462 prev_reg97 = 0;
10463 prev_reg98 = 0;
10464 prev_reg99 = 0;
10465 prev_reg100 = 0;
10466 prev_reg101 = 0;
10467 prev_reg102 = 0;
10468 prev_reg103 = 0;
10469 prev_reg104 = 0;
10470 prev_reg105 = 0;
10471 prev_reg106 = 0;
10472 prev_reg107 = 0;
10473 prev_reg108 = 0;
10474 prev_reg109 = 0;
10475 prev_reg110 = 0;
10476 prev_reg111 = 0;
10477 prev_reg112 = 0;
10478 prev_reg113 = 0;
10479 prev_reg114 = 0;
10480 prev_reg115 = 0;
10481 prev_reg116 = 0;
10482 prev_reg117 = 0;
10483 prev_reg118 = 0;
10484 prev_reg119 = 0;
10485 prev_reg120 = 0;
10486 prev_reg121 = 0;
10487 prev_reg122 = 0;
10488 prev_reg123 = 0;
10489 prev_reg124 = 0;
10490 prev_reg125 = 0;
10491 prev_reg126 = 0;
10492 prev_reg127 = 0;
10493 prev_reg128 = 0;
10494 prev_reg129 = 0;
10495 prev_reg130 = 0;
10496 prev_reg131 = 0;
10497 prev_reg132 = 0;
10498 prev_reg133 = 0;
10499 prev_reg134 = 0;
10500 prev_reg135 = 0;
10501 prev_reg136 = 0;
10502 prev_reg137 = 0;
10503 prev_reg138 = 0;
10504 prev_reg139 = 0;
10505 prev_reg140 = 0;
10506 prev_reg141 = 0;
10507 prev_reg142 = 0;
10508 prev_reg143 = 0;
10509 prev_reg144 = 0;
10510 prev_reg145 = 0;
10511 prev_reg146 = 0;
10512 prev_reg147 = 0;
10513 prev_reg148 = 0;
10514 prev_reg149 = 0;
10515 prev_reg150 = 0;
10516 prev_reg151 = 0;
10517 prev_reg152 = 0;
10518 prev_reg153 = 0;
10519 prev_reg154 = 0;
10520 prev_reg155 = 0;
10521 prev_reg156 = 0;
10522 prev_reg157 = 0;
10523 prev_reg158 = 0;
10524 prev_reg159 = 0;
10525 prev_reg160 = 0;
10526 prev_reg161 = 0;
10527 prev_reg162 = 0;
10528 prev_reg163 = 0;
10529 prev_reg164 = 0;
10530 prev_reg165 = 0;
10531 prev_reg166 = 0;
10532 prev_reg167 = 0;
10533 prev_reg168 = 0;
10534 prev_reg169 = 0;
10535 prev_reg170 = 0;
10536 prev_reg171 = 0;
10537 prev_reg172 = 0;
10538 prev_reg173 = 0;
10539 prev_reg174 = 0;
10540 prev_reg175 = 0;
10541 prev_reg176 = 0;
10542 prev_reg177 = 0;
10543 prev_reg178 = 0;
10544 prev_reg179 = 0;
10545 prev_reg180 = 0;
10546 prev_reg181 = 0;
10547 prev_reg182 = 0;
10548 prev_reg183 = 0;
10549 prev_reg184 = 0;
10550 prev_reg185 = 0;
10551 prev_reg186 = 0;
10552 prev_reg187 = 0;
10553 prev_reg188 = 0;
10554 prev_reg189 = 0;
10555 prev_reg190 = 0;
10556 prev_reg191 = 0;
10557 prev_reg192 = 0;
10558 prev_reg193 = 0;
10559 prev_reg194 = 0;
10560 prev_reg195 = 0;
10561 prev_reg196 = 0;
10562 prev_reg197 = 0;
10563 prev_reg198 = 0;
10564 prev_reg199 = 0;
10565 prev_reg200 = 0;
10566 prev_reg201 = 0;
10567 prev_reg202 = 0;
10568 prev_reg203 = 0;
10569 prev_reg204 = 0;
10570 prev_reg205 = 0;
10571 prev_reg206 = 0;
10572 prev_reg207 = 0;
10573 prev_reg208 = 0;
10574 prev_reg209 = 0;
10575 prev_reg210 = 0;
10576 prev_reg211 = 0;
10577 prev_reg212 = 0;
10578 prev_reg213 = 0;
10579 prev_reg214 = 0;
10580 prev_reg215 = 0;
10581 prev_reg216 = 0;
10582 prev_reg217 = 0;
10583 prev_reg218 = 0;
10584 prev_reg219 = 0;
10585 prev_reg220 = 0;
10586 prev_reg221 = 0;
10587 prev_reg222 = 0;
10588 prev_reg223 = 0;
10589 prev_reg224 = 0;
10590 prev_reg225 = 0;
10591 prev_reg226 = 0;
10592 prev_reg227 = 0;
10593 prev_reg228 = 0;
10594 prev_reg229 = 0;
10595 prev_reg230 = 0;
10596 prev_reg231 = 0;
10597 prev_reg232 = 0;
10598 prev_reg233 = 0;
10599 prev_reg234 = 0;
10600 prev_reg235 = 0;
10601 prev_reg236 = 0;
10602 prev_reg237 = 0;
10603 prev_reg238 = 0;
10604 prev_reg239 = 0;
10605 prev_reg240 = 0;
10606 prev_reg241 = 0;
10607 prev_reg242 = 0;
10608 prev_reg243 = 0;
10609 prev_reg244 = 0;
10610 prev_reg245 = 0;
10611 prev_reg246 = 0;
10612 prev_reg247 = 0;
10613 prev_reg248 = 0;
10614 prev_reg249 = 0;
10615 prev_reg250 = 0;
10616 prev_reg251 = 0;
10617 prev_reg252 = 0;
10618 prev_reg253 = 0;
10619 prev_reg254 = 0;
10620 prev_reg255 = 0;
10621
10622 // POR for control registers
10623 write_prev(`FPRS +`CTL_OFFSET,3'h4);
10624 write_prev(`CLEANWIN +`CTL_OFFSET,3'h7);
10625 write_prev(`CANSAVE +`CTL_OFFSET,3'h6);
10626
10627 // POR for FPRS = 0x4
10628 write_prev(`FPRS+`CTL_OFFSET,3'h4);
10629
10630 // POR for PSTATE = 0x14 (PEF, PRIV = 1)
10631 write_prev(`PSTATE + `CTL_OFFSET,'h14);
10632
10633 // POR for HPSTATE = 0x4034 (RED, HPRIV = 1)
10634 write_prev(`HPSTATE + `CTL_OFFSET,'h24);
10635
10636 // POR for TL = = 0x6 [MAXTL]
10637 write_prev(`TL + `CTL_OFFSET,'h6);
10638
10639 // POR for TT6 = = 1
10640 write_prev(`TT6 + `CTL_OFFSET,'h1);
10641
10642 // POR for GL = MAXGL = 3
10643 write_prev(`GL + `CTL_OFFSET,`POR_GL);
10644
10645 // POR for VER = {003e, 0024, 01, 0036, 07}
10646 write_prev(`VER + `CTL_OFFSET,64'h003e002410030607);
10647
10648 // POR for *_cmpr registers is INT_DIS = 1
10649 write_prev(`TICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
10650 write_prev(`STICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
10651 write_prev(`HSTICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
10652
10653 // Need to define so that 1st instruction will print correctly
10654 write_prev(`PC+`CTL_OFFSET,`POR_PC);
10655
10656 first_op = 1;
10657 pc_last = `BAD_PC;
10658
10659 end // }
10660endtask
10661
10662//----------------------------------------------------------
10663//----------------------------------------------------------
10664 `else // GATESIM
10665
10666// Watch for Good/Bad trap
10667
10668wire [5:0] mytnum = (mycid*8)+mytid;
10669wire mytg = mytid >> 2;
10670integer junk;
10671reg nas_pipe_enable;
10672
10673integer inst_count;
10674
10675 // Delimiter changes whether flat or hierarchical netlist
10676 `ifdef GATES_FLAT
10677 wire myclk = tb_top.cpu.spc1.gclk;
10678 wire dec_inst_valid_m = mytg ? tb_top.cpu.spc1.dec_inst_valid_m[1] : tb_top.cpu.spc1.dec_inst_valid_m[0];
10679 wire [1:0] dec_tid_m = mytg ? tb_top.cpu.spc1.dec_tid1_m : tb_top.cpu.spc1.dec_tid0_m;
10680 wire dec_flush_b = mytg ? tb_top.cpu.spc1.dec_flush_b[1] : tb_top.cpu.spc1.dec_flush_b[0];
10681 wire tlu_flush_ifu = tb_top.cpu.spc1.tlu_flush_ifu[mytid];
10682 wire [47:0] pc_d = mytg ? {tb_top.cpu.spc1.tlu_pc_1_d[47:2],2'b0} : {tb_top.cpu.spc1.tlu_pc_0_d[47:2],2'b0};
10683 wire [31:0] op_d = mytg ? tb_top.cpu.spc1.dec_inst1_d[31:0] : tb_top.cpu.spc1.dec_inst0_d[31:0];
10684 `else
10685 wire myclk = tb_top.cpu.spc1.gclk;
10686 wire dec_inst_valid_m = mytg ? tb_top.cpu.spc1.dec_inst_valid_m[1] : tb_top.cpu.spc1.dec_inst_valid_m[0];
10687 wire [1:0] dec_tid_m = mytg ? tb_top.cpu.spc1.dec_tid1_m : tb_top.cpu.spc1.dec_tid0_m;
10688 wire dec_flush_b = mytg ? tb_top.cpu.spc1.dec_flush_b[1] : tb_top.cpu.spc1.dec_flush_b[0];
10689 wire tlu_flush_ifu = tb_top.cpu.spc1.tlu_flush_ifu[mytid];
10690 wire [47:0] pc_d = mytg ? {tb_top.cpu.spc1.tlu_pc_1_d[47:2],2'b0} : {tb_top.cpu.spc1.tlu_pc_0_d[47:2],2'b0};
10691 wire [31:0] op_d = mytg ? tb_top.cpu.spc1.dec_inst1_d[31:0] : tb_top.cpu.spc1.dec_inst0_d[31:0];
10692 `endif
10693
10694 reg dec_inst_valid_b;
10695 reg [1:0] dec_tid_b;
10696
10697 reg inst_valid_w;
10698 reg inst_valid_fx4;
10699 reg inst_valid_fx5;
10700 reg inst_valid_fb;
10701 reg inst_valid_fw;
10702 reg inst_valid_fw1;
10703 reg inst_valid_fw2;
10704 reg [47:0] pc_e;
10705 reg [47:0] pc_m;
10706 reg [47:0] pc_b;
10707 reg [47:0] pc_w;
10708 reg [47:0] pc_fx4;
10709 reg [47:0] pc_fx5;
10710 reg [47:0] pc_fb;
10711 reg [47:0] pc_fw;
10712 reg [47:0] pc_fw1;
10713 reg [47:0] pc_fw2;
10714 reg [31:0] op_e;
10715 reg [31:0] op_m;
10716 reg [31:0] op_b;
10717 reg [31:0] op_w;
10718 reg [31:0] op_fx4;
10719 reg [31:0] op_fx5;
10720 reg [31:0] op_fb;
10721 reg [31:0] op_fw;
10722 reg [31:0] op_fw1;
10723 reg [31:0] op_fw2;
10724
10725 wire inst_valid_b = dec_inst_valid_b && (dec_tid_b==mytid[1:0]) && !(dec_flush_b || tlu_flush_ifu);
10726
10727initial begin // {
10728 inst_count = 1;
10729 nas_pipe_enable = 1;
10730end // }
10731
10732
10733always @ (posedge myclk) begin // {
10734
10735 dec_inst_valid_b <= dec_inst_valid_m;
10736 dec_tid_b <= dec_tid_m;
10737 op_e <= op_d;
10738 op_m <= op_e;
10739 op_b <= op_m;
10740 op_w <= op_b;
10741 op_fx4 <= op_w;
10742 op_fx5 <= op_fx4;
10743 op_fb <= op_fx5;
10744 op_fw <= op_fb;
10745 op_fw1 <= op_fw;
10746 op_fw2 <= op_fw1;
10747 pc_e <= pc_d;
10748 pc_m <= pc_e;
10749 pc_b <= pc_m;
10750 pc_w <= pc_b;
10751 pc_fx4 <= pc_w;
10752 pc_fx5 <= pc_fx4;
10753 pc_fb <= pc_fx5;
10754 pc_fw <= pc_fb;
10755 pc_fw1 <= pc_fw;
10756 pc_fw2 <= pc_fw1;
10757 inst_valid_w <= inst_valid_b;
10758 inst_valid_fx4 <= inst_valid_w;
10759 inst_valid_fx5 <= inst_valid_fx4;
10760 inst_valid_fb <= inst_valid_fx5;
10761 inst_valid_fw <= inst_valid_fb;
10762 inst_valid_fw1 <= inst_valid_fw;
10763 inst_valid_fw2 <= inst_valid_fw1;
10764
10765 if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable) begin // {
10766
10767 if (inst_valid_fw2) begin // {
10768
10769 // Print PC/opcode for debugging
10770 `PR_NORMAL ("nas", `NORMAL, "@%0d #%0d T%0d %h [%h]", $time, inst_count, mytnum, pc_fw2, op_fw2);
10771 inst_count = inst_count + 1;
10772
10773 //----------
10774 // End detection for GateSim runs
10775 for (junk=0;junk<`PARGS.bad_trap_count;junk=junk+1) begin // {
10776 if (({16'b0,pc_fw2}&`PC_MASK)===(`PARGS.bad_trap_addr[junk]&`PC_MASK)) begin // {
10777 `PR_ERROR ("nas",`ERROR, "T%0d reached Bad Trap [GATESIM]", mytnum);
10778 nas_pipe_enable = 1'b0;
10779 end //}
10780 end //}
10781 for (junk=0;junk<`PARGS.good_trap_count;junk=junk+1) begin // {
10782 if (({16'b0,pc_fw2}&`PC_MASK)===(`PARGS.good_trap_addr[junk]&`PC_MASK)) begin // {
10783 `TOP.finished_tids[mytnum] = 1'b1;
10784 `PARGS.th_check_enable[mytnum] = 1'b0;
10785 nas_pipe_enable = 1'b0;
10786 `PR_NORMAL ("nas", `NORMAL, "T%0d reached Good Trap. Disabling checking for thread %0d [GATESIM]", mytnum,mytnum);
10787 end //}
10788 end //}
10789
10790 end // }
10791 end // }
10792
10793end //}
10794
10795
10796`endif
10797
10798endmodule
10799//----------------------------------------------------------
10800//----------------------------------------------------------
10801
10802`endif
10803
10804
10805`ifdef CORE_2
10806
10807
10808module nas_pipe2 (
10809 mycid,
10810 mytid,
10811
10812 opcode,
10813 PC_reg,
10814 Y_reg,
10815 CCR_reg,
10816 FPRS_reg,
10817 FSR_reg,
10818 ASI_reg,
10819 GSR_reg,
10820 TICK_CMPR_reg,
10821 STICK_CMPR_reg,
10822 HSTICK_CMPR_reg,
10823 PSTATE_reg,
10824 TL_reg,
10825 PIL_reg,
10826 TBA_reg,
10827 VER_reg,
10828 CWP_reg,
10829 CANSAVE_reg,
10830 CANRESTORE_reg,
10831 OTHERWIN_reg,
10832 WSTATE_reg,
10833 CLEANWIN_reg,
10834 SOFTINT_reg,
10835 rd_SOFTINT_reg,
10836 INTR_RECEIVE_reg,
10837 GL_reg,
10838 HPSTATE_reg,
10839 HTBA_reg,
10840 HINTP_reg,
10841
10842 CTXT_PRIM_0_reg,
10843 CTXT_SEC_0_reg,
10844 CTXT_PRIM_1_reg,
10845 CTXT_SEC_1_reg,
10846 LSU_CONTROL_reg,
10847 I_TAG_ACC_reg,
10848 D_TAG_ACC_reg,
10849 WATCHPOINT_ADDR_reg,
10850 DSFAR_reg,
10851
10852 Trap_Entry_1,
10853 Trap_Entry_2,
10854 Trap_Entry_3,
10855 Trap_Entry_4,
10856 Trap_Entry_5,
10857 Trap_Entry_6,
10858
10859 exu_valid,
10860
10861 imul_valid,
10862
10863 frf_w2_valid,
10864 frf_w1_valid,
10865 frf_w1_tid,
10866 frf_w2_tid,
10867 frf_w1_addr,
10868 frf_w2_addr,
10869
10870 asi_valid,
10871 asi_in_progress,
10872
10873 fp_valid,
10874
10875 idiv_valid,
10876
10877 fdiv_valid,
10878
10879 lsu_valid,
10880
10881 tlu_valid
10882);
10883
10884//----------------------------------------------------------
10885input [2:0] mycid;
10886input [2:0] mytid;
10887
10888input [31:0] opcode;
10889input [47:0] PC_reg;
10890input [31:0] Y_reg;
10891input [7:0] CCR_reg;
10892input [2:0] FPRS_reg;
10893input [27:0] FSR_reg;
10894input [7:0] ASI_reg;
10895input [42:0] GSR_reg;
10896input [71:0] TICK_CMPR_reg;
10897input [71:0] STICK_CMPR_reg;
10898input [71:0] HSTICK_CMPR_reg;
10899input [12:0] PSTATE_reg;
10900input [2:0] TL_reg;
10901input [3:0] PIL_reg;
10902input [32:0] TBA_reg;
10903input [63:0] VER_reg;
10904input [2:0] CWP_reg;
10905input [2:0] CANSAVE_reg;
10906input [2:0] CANRESTORE_reg;
10907input [2:0] OTHERWIN_reg;
10908input [5:0] WSTATE_reg;
10909input [2:0] CLEANWIN_reg;
10910input [16:0] SOFTINT_reg;
10911input [16:0] rd_SOFTINT_reg;
10912input [63:0] INTR_RECEIVE_reg;
10913input [1:0] GL_reg;
10914input [12:0] HPSTATE_reg;
10915input [33:0] HTBA_reg;
10916input HINTP_reg;
10917
10918input [63:0] CTXT_PRIM_0_reg;
10919input [63:0] CTXT_SEC_0_reg;
10920input [63:0] CTXT_PRIM_1_reg;
10921input [63:0] CTXT_SEC_1_reg;
10922input [63:0] LSU_CONTROL_reg;
10923input [63:0] I_TAG_ACC_reg;
10924input [63:0] D_TAG_ACC_reg;
10925input [63:0] WATCHPOINT_ADDR_reg;
10926input [47:0] DSFAR_reg;
10927
10928input [151:0] Trap_Entry_1;
10929input [151:0] Trap_Entry_2;
10930input [151:0] Trap_Entry_3;
10931input [151:0] Trap_Entry_4;
10932input [151:0] Trap_Entry_5;
10933input [151:0] Trap_Entry_6;
10934
10935input exu_valid;
10936
10937input imul_valid;
10938
10939input [1:0] frf_w2_valid;
10940input [2:0] frf_w2_tid;
10941input [4:0] frf_w2_addr;
10942
10943input [1:0] frf_w1_valid;
10944input [2:0] frf_w1_tid;
10945input [4:0] frf_w1_addr;
10946
10947input asi_valid; // ASI/ASR/PR writes done ..
10948input asi_in_progress; // ASI/ASR/PR in progess
10949
10950input fp_valid;
10951
10952input idiv_valid;
10953
10954input fdiv_valid;
10955
10956input lsu_valid;
10957
10958input tlu_valid;
10959
10960`ifndef GATESIM
10961
10962//----------------------------------------------------------
10963// Register assignments
10964//----------------------------------------------------------
10965`include "nas_regs.v"
10966//----------------------------------------------------------
10967
10968wire exu_complete;
10969wire imul_complete;
10970wire idiv_complete;
10971wire tlu_complete;
10972wire fp_complete;
10973wire fdiv_complete;
10974wire lsu_complete;
10975wire asi_complete;
10976wire [7:0] complete_w;
10977reg [7:0] complete_fx4;
10978reg [7:0] complete_fx5;
10979reg [7:0] complete_fb;
10980reg [7:0] complete_fw;
10981reg [7:0] complete_fw1;
10982reg [7:0] complete_fw2;
10983
10984`ifndef EMUL_TL
10985// delta_* = {type(2bits),win(3bits),regnum(8bits),value(64bits)}
10986reg [`DELTA_WIDTH:0] delta_fx4 [0:(`MAX_INDEX)];
10987reg [`DELTA_WIDTH:0] delta_fx5 [0:(`MAX_INDEX)];
10988reg [`DELTA_WIDTH:0] delta_fb [0:(`MAX_INDEX)];
10989reg [`DELTA_WIDTH:0] delta_fw [0:(`MAX_INDEX)];
10990reg [`DELTA_WIDTH:0] delta_fw1 [0:(`MAX_INDEX)];
10991reg [`DELTA_WIDTH:0] delta_fw2 [0:(`MAX_INDEX)];
10992reg [`DELTA_WIDTH:0] delta_prev [0:(`MAX_INDEX)];
10993`endif
10994
10995reg [2:0] cwp_fx4;
10996reg [2:0] cwp_fx5;
10997reg [2:0] cwp_fb;
10998reg [2:0] cwp_fw;
10999reg [2:0] cwp_fw1;
11000reg [2:0] cwp_fw2;
11001reg [2:0] cwp_last;
11002
11003
11004// need to change in several places in this file
11005reg [63:0] prev_reg0; // includes G,W,C,F registers
11006reg [63:0] prev_reg1; // includes G,W,C,F registers
11007reg [63:0] prev_reg2; // includes G,W,C,F registers
11008reg [63:0] prev_reg3; // includes G,W,C,F registers
11009reg [63:0] prev_reg4; // includes G,W,C,F registers
11010reg [63:0] prev_reg5; // includes G,W,C,F registers
11011reg [63:0] prev_reg6; // includes G,W,C,F registers
11012reg [63:0] prev_reg7; // includes G,W,C,F registers
11013reg [63:0] prev_reg8; // includes G,W,C,F registers
11014reg [63:0] prev_reg9; // includes G,W,C,F registers
11015reg [63:0] prev_reg10; // includes G,W,C,F registers
11016reg [63:0] prev_reg11; // includes G,W,C,F registers
11017reg [63:0] prev_reg12; // includes G,W,C,F registers
11018reg [63:0] prev_reg13; // includes G,W,C,F registers
11019reg [63:0] prev_reg14; // includes G,W,C,F registers
11020reg [63:0] prev_reg15; // includes G,W,C,F registers
11021reg [63:0] prev_reg16; // includes G,W,C,F registers
11022reg [63:0] prev_reg17; // includes G,W,C,F registers
11023reg [63:0] prev_reg18; // includes G,W,C,F registers
11024reg [63:0] prev_reg19; // includes G,W,C,F registers
11025reg [63:0] prev_reg20; // includes G,W,C,F registers
11026reg [63:0] prev_reg21; // includes G,W,C,F registers
11027reg [63:0] prev_reg22; // includes G,W,C,F registers
11028reg [63:0] prev_reg23; // includes G,W,C,F registers
11029reg [63:0] prev_reg24; // includes G,W,C,F registers
11030reg [63:0] prev_reg25; // includes G,W,C,F registers
11031reg [63:0] prev_reg26; // includes G,W,C,F registers
11032reg [63:0] prev_reg27; // includes G,W,C,F registers
11033reg [63:0] prev_reg28; // includes G,W,C,F registers
11034reg [63:0] prev_reg29; // includes G,W,C,F registers
11035reg [63:0] prev_reg30; // includes G,W,C,F registers
11036reg [63:0] prev_reg31; // includes G,W,C,F registers
11037reg [63:0] prev_reg32; // includes G,W,C,F registers
11038reg [63:0] prev_reg33; // includes G,W,C,F registers
11039reg [63:0] prev_reg34; // includes G,W,C,F registers
11040reg [63:0] prev_reg35; // includes G,W,C,F registers
11041reg [63:0] prev_reg36; // includes G,W,C,F registers
11042reg [63:0] prev_reg37; // includes G,W,C,F registers
11043reg [63:0] prev_reg38; // includes G,W,C,F registers
11044reg [63:0] prev_reg39; // includes G,W,C,F registers
11045reg [63:0] prev_reg40; // includes G,W,C,F registers
11046reg [63:0] prev_reg41; // includes G,W,C,F registers
11047reg [63:0] prev_reg42; // includes G,W,C,F registers
11048reg [63:0] prev_reg43; // includes G,W,C,F registers
11049reg [63:0] prev_reg44; // includes G,W,C,F registers
11050reg [63:0] prev_reg45; // includes G,W,C,F registers
11051reg [63:0] prev_reg46; // includes G,W,C,F registers
11052reg [63:0] prev_reg47; // includes G,W,C,F registers
11053reg [63:0] prev_reg48; // includes G,W,C,F registers
11054reg [63:0] prev_reg49; // includes G,W,C,F registers
11055reg [63:0] prev_reg50; // includes G,W,C,F registers
11056reg [63:0] prev_reg51; // includes G,W,C,F registers
11057reg [63:0] prev_reg52; // includes G,W,C,F registers
11058reg [63:0] prev_reg53; // includes G,W,C,F registers
11059reg [63:0] prev_reg54; // includes G,W,C,F registers
11060reg [63:0] prev_reg55; // includes G,W,C,F registers
11061reg [63:0] prev_reg56; // includes G,W,C,F registers
11062reg [63:0] prev_reg57; // includes G,W,C,F registers
11063reg [63:0] prev_reg58; // includes G,W,C,F registers
11064reg [63:0] prev_reg59; // includes G,W,C,F registers
11065reg [63:0] prev_reg60; // includes G,W,C,F registers
11066reg [63:0] prev_reg61; // includes G,W,C,F registers
11067reg [63:0] prev_reg62; // includes G,W,C,F registers
11068reg [63:0] prev_reg63; // includes G,W,C,F registers
11069reg [63:0] prev_reg64; // includes G,W,C,F registers
11070reg [63:0] prev_reg65; // includes G,W,C,F registers
11071reg [63:0] prev_reg66; // includes G,W,C,F registers
11072reg [63:0] prev_reg67; // includes G,W,C,F registers
11073reg [63:0] prev_reg68; // includes G,W,C,F registers
11074reg [63:0] prev_reg69; // includes G,W,C,F registers
11075reg [63:0] prev_reg70; // includes G,W,C,F registers
11076reg [63:0] prev_reg71; // includes G,W,C,F registers
11077reg [63:0] prev_reg72; // includes G,W,C,F registers
11078reg [63:0] prev_reg73; // includes G,W,C,F registers
11079reg [63:0] prev_reg74; // includes G,W,C,F registers
11080reg [63:0] prev_reg75; // includes G,W,C,F registers
11081reg [63:0] prev_reg76; // includes G,W,C,F registers
11082reg [63:0] prev_reg77; // includes G,W,C,F registers
11083reg [63:0] prev_reg78; // includes G,W,C,F registers
11084reg [63:0] prev_reg79; // includes G,W,C,F registers
11085reg [63:0] prev_reg80; // includes G,W,C,F registers
11086reg [63:0] prev_reg81; // includes G,W,C,F registers
11087reg [63:0] prev_reg82; // includes G,W,C,F registers
11088reg [63:0] prev_reg83; // includes G,W,C,F registers
11089reg [63:0] prev_reg84; // includes G,W,C,F registers
11090reg [63:0] prev_reg85; // includes G,W,C,F registers
11091reg [63:0] prev_reg86; // includes G,W,C,F registers
11092reg [63:0] prev_reg87; // includes G,W,C,F registers
11093reg [63:0] prev_reg88; // includes G,W,C,F registers
11094reg [63:0] prev_reg89; // includes G,W,C,F registers
11095reg [63:0] prev_reg90; // includes G,W,C,F registers
11096reg [63:0] prev_reg91; // includes G,W,C,F registers
11097reg [63:0] prev_reg92; // includes G,W,C,F registers
11098reg [63:0] prev_reg93; // includes G,W,C,F registers
11099reg [63:0] prev_reg94; // includes G,W,C,F registers
11100reg [63:0] prev_reg95; // includes G,W,C,F registers
11101reg [63:0] prev_reg96; // includes G,W,C,F registers
11102reg [63:0] prev_reg97; // includes G,W,C,F registers
11103reg [63:0] prev_reg98; // includes G,W,C,F registers
11104reg [63:0] prev_reg99; // includes G,W,C,F registers
11105reg [63:0] prev_reg100; // includes G,W,C,F registers
11106reg [63:0] prev_reg101; // includes G,W,C,F registers
11107reg [63:0] prev_reg102; // includes G,W,C,F registers
11108reg [63:0] prev_reg103; // includes G,W,C,F registers
11109reg [63:0] prev_reg104; // includes G,W,C,F registers
11110reg [63:0] prev_reg105; // includes G,W,C,F registers
11111reg [63:0] prev_reg106; // includes G,W,C,F registers
11112reg [63:0] prev_reg107; // includes G,W,C,F registers
11113reg [63:0] prev_reg108; // includes G,W,C,F registers
11114reg [63:0] prev_reg109; // includes G,W,C,F registers
11115reg [63:0] prev_reg110; // includes G,W,C,F registers
11116reg [63:0] prev_reg111; // includes G,W,C,F registers
11117reg [63:0] prev_reg112; // includes G,W,C,F registers
11118reg [63:0] prev_reg113; // includes G,W,C,F registers
11119reg [63:0] prev_reg114; // includes G,W,C,F registers
11120reg [63:0] prev_reg115; // includes G,W,C,F registers
11121reg [63:0] prev_reg116; // includes G,W,C,F registers
11122reg [63:0] prev_reg117; // includes G,W,C,F registers
11123reg [63:0] prev_reg118; // includes G,W,C,F registers
11124reg [63:0] prev_reg119; // includes G,W,C,F registers
11125reg [63:0] prev_reg120; // includes G,W,C,F registers
11126reg [63:0] prev_reg121; // includes G,W,C,F registers
11127reg [63:0] prev_reg122; // includes G,W,C,F registers
11128reg [63:0] prev_reg123; // includes G,W,C,F registers
11129reg [63:0] prev_reg124; // includes G,W,C,F registers
11130reg [63:0] prev_reg125; // includes G,W,C,F registers
11131reg [63:0] prev_reg126; // includes G,W,C,F registers
11132reg [63:0] prev_reg127; // includes G,W,C,F registers
11133reg [63:0] prev_reg128; // includes G,W,C,F registers
11134reg [63:0] prev_reg129; // includes G,W,C,F registers
11135reg [63:0] prev_reg130; // includes G,W,C,F registers
11136reg [63:0] prev_reg131; // includes G,W,C,F registers
11137reg [63:0] prev_reg132; // includes G,W,C,F registers
11138reg [63:0] prev_reg133; // includes G,W,C,F registers
11139reg [63:0] prev_reg134; // includes G,W,C,F registers
11140reg [63:0] prev_reg135; // includes G,W,C,F registers
11141reg [63:0] prev_reg136; // includes G,W,C,F registers
11142reg [63:0] prev_reg137; // includes G,W,C,F registers
11143reg [63:0] prev_reg138; // includes G,W,C,F registers
11144reg [63:0] prev_reg139; // includes G,W,C,F registers
11145reg [63:0] prev_reg140; // includes G,W,C,F registers
11146reg [63:0] prev_reg141; // includes G,W,C,F registers
11147reg [63:0] prev_reg142; // includes G,W,C,F registers
11148reg [63:0] prev_reg143; // includes G,W,C,F registers
11149reg [63:0] prev_reg144; // includes G,W,C,F registers
11150reg [63:0] prev_reg145; // includes G,W,C,F registers
11151reg [63:0] prev_reg146; // includes G,W,C,F registers
11152reg [63:0] prev_reg147; // includes G,W,C,F registers
11153reg [63:0] prev_reg148; // includes G,W,C,F registers
11154reg [63:0] prev_reg149; // includes G,W,C,F registers
11155reg [63:0] prev_reg150; // includes G,W,C,F registers
11156reg [63:0] prev_reg151; // includes G,W,C,F registers
11157reg [63:0] prev_reg152; // includes G,W,C,F registers
11158reg [63:0] prev_reg153; // includes G,W,C,F registers
11159reg [63:0] prev_reg154; // includes G,W,C,F registers
11160reg [63:0] prev_reg155; // includes G,W,C,F registers
11161reg [63:0] prev_reg156; // includes G,W,C,F registers
11162reg [63:0] prev_reg157; // includes G,W,C,F registers
11163reg [63:0] prev_reg158; // includes G,W,C,F registers
11164reg [63:0] prev_reg159; // includes G,W,C,F registers
11165reg [63:0] prev_reg160; // includes G,W,C,F registers
11166reg [63:0] prev_reg161; // includes G,W,C,F registers
11167reg [63:0] prev_reg162; // includes G,W,C,F registers
11168reg [63:0] prev_reg163; // includes G,W,C,F registers
11169reg [63:0] prev_reg164; // includes G,W,C,F registers
11170reg [63:0] prev_reg165; // includes G,W,C,F registers
11171reg [63:0] prev_reg166; // includes G,W,C,F registers
11172reg [63:0] prev_reg167; // includes G,W,C,F registers
11173reg [63:0] prev_reg168; // includes G,W,C,F registers
11174reg [63:0] prev_reg169; // includes G,W,C,F registers
11175reg [63:0] prev_reg170; // includes G,W,C,F registers
11176reg [63:0] prev_reg171; // includes G,W,C,F registers
11177reg [63:0] prev_reg172; // includes G,W,C,F registers
11178reg [63:0] prev_reg173; // includes G,W,C,F registers
11179reg [63:0] prev_reg174; // includes G,W,C,F registers
11180reg [63:0] prev_reg175; // includes G,W,C,F registers
11181reg [63:0] prev_reg176; // includes G,W,C,F registers
11182reg [63:0] prev_reg177; // includes G,W,C,F registers
11183reg [63:0] prev_reg178; // includes G,W,C,F registers
11184reg [63:0] prev_reg179; // includes G,W,C,F registers
11185reg [63:0] prev_reg180; // includes G,W,C,F registers
11186reg [63:0] prev_reg181; // includes G,W,C,F registers
11187reg [63:0] prev_reg182; // includes G,W,C,F registers
11188reg [63:0] prev_reg183; // includes G,W,C,F registers
11189reg [63:0] prev_reg184; // includes G,W,C,F registers
11190reg [63:0] prev_reg185; // includes G,W,C,F registers
11191reg [63:0] prev_reg186; // includes G,W,C,F registers
11192reg [63:0] prev_reg187; // includes G,W,C,F registers
11193reg [63:0] prev_reg188; // includes G,W,C,F registers
11194reg [63:0] prev_reg189; // includes G,W,C,F registers
11195reg [63:0] prev_reg190; // includes G,W,C,F registers
11196reg [63:0] prev_reg191; // includes G,W,C,F registers
11197reg [63:0] prev_reg192; // includes G,W,C,F registers
11198reg [63:0] prev_reg193; // includes G,W,C,F registers
11199reg [63:0] prev_reg194; // includes G,W,C,F registers
11200reg [63:0] prev_reg195; // includes G,W,C,F registers
11201reg [63:0] prev_reg196; // includes G,W,C,F registers
11202reg [63:0] prev_reg197; // includes G,W,C,F registers
11203reg [63:0] prev_reg198; // includes G,W,C,F registers
11204reg [63:0] prev_reg199; // includes G,W,C,F registers
11205reg [63:0] prev_reg200; // includes G,W,C,F registers
11206reg [63:0] prev_reg201; // includes G,W,C,F registers
11207reg [63:0] prev_reg202; // includes G,W,C,F registers
11208reg [63:0] prev_reg203; // includes G,W,C,F registers
11209reg [63:0] prev_reg204; // includes G,W,C,F registers
11210reg [63:0] prev_reg205; // includes G,W,C,F registers
11211reg [63:0] prev_reg206; // includes G,W,C,F registers
11212reg [63:0] prev_reg207; // includes G,W,C,F registers
11213reg [63:0] prev_reg208; // includes G,W,C,F registers
11214reg [63:0] prev_reg209; // includes G,W,C,F registers
11215reg [63:0] prev_reg210; // includes G,W,C,F registers
11216reg [63:0] prev_reg211; // includes G,W,C,F registers
11217reg [63:0] prev_reg212; // includes G,W,C,F registers
11218reg [63:0] prev_reg213; // includes G,W,C,F registers
11219reg [63:0] prev_reg214; // includes G,W,C,F registers
11220reg [63:0] prev_reg215; // includes G,W,C,F registers
11221reg [63:0] prev_reg216; // includes G,W,C,F registers
11222reg [63:0] prev_reg217; // includes G,W,C,F registers
11223reg [63:0] prev_reg218; // includes G,W,C,F registers
11224reg [63:0] prev_reg219; // includes G,W,C,F registers
11225reg [63:0] prev_reg220; // includes G,W,C,F registers
11226reg [63:0] prev_reg221; // includes G,W,C,F registers
11227reg [63:0] prev_reg222; // includes G,W,C,F registers
11228reg [63:0] prev_reg223; // includes G,W,C,F registers
11229reg [63:0] prev_reg224; // includes G,W,C,F registers
11230reg [63:0] prev_reg225; // includes G,W,C,F registers
11231reg [63:0] prev_reg226; // includes G,W,C,F registers
11232reg [63:0] prev_reg227; // includes G,W,C,F registers
11233reg [63:0] prev_reg228; // includes G,W,C,F registers
11234reg [63:0] prev_reg229; // includes G,W,C,F registers
11235reg [63:0] prev_reg230; // includes G,W,C,F registers
11236reg [63:0] prev_reg231; // includes G,W,C,F registers
11237reg [63:0] prev_reg232; // includes G,W,C,F registers
11238reg [63:0] prev_reg233; // includes G,W,C,F registers
11239reg [63:0] prev_reg234; // includes G,W,C,F registers
11240reg [63:0] prev_reg235; // includes G,W,C,F registers
11241reg [63:0] prev_reg236; // includes G,W,C,F registers
11242reg [63:0] prev_reg237; // includes G,W,C,F registers
11243reg [63:0] prev_reg238; // includes G,W,C,F registers
11244reg [63:0] prev_reg239; // includes G,W,C,F registers
11245reg [63:0] prev_reg240; // includes G,W,C,F registers
11246reg [63:0] prev_reg241; // includes G,W,C,F registers
11247reg [63:0] prev_reg242; // includes G,W,C,F registers
11248reg [63:0] prev_reg243; // includes G,W,C,F registers
11249reg [63:0] prev_reg244; // includes G,W,C,F registers
11250reg [63:0] prev_reg245; // includes G,W,C,F registers
11251reg [63:0] prev_reg246; // includes G,W,C,F registers
11252reg [63:0] prev_reg247; // includes G,W,C,F registers
11253reg [63:0] prev_reg248; // includes G,W,C,F registers
11254reg [63:0] prev_reg249; // includes G,W,C,F registers
11255reg [63:0] prev_reg250; // includes G,W,C,F registers
11256reg [63:0] prev_reg251; // includes G,W,C,F registers
11257reg [63:0] prev_reg252; // includes G,W,C,F registers
11258reg [63:0] prev_reg253; // includes G,W,C,F registers
11259reg [63:0] prev_reg254; // includes G,W,C,F registers
11260reg [63:0] prev_reg255; // includes G,W,C,F registers
11261
11262reg [1:0] th_gl; // copy of GL_reg
11263
11264reg [63:0] gl0_reg0;
11265reg [63:0] gl1_reg0;
11266reg [63:0] gl2_reg0;
11267reg [63:0] gl3_reg0;
11268reg [63:0] gl0_reg1;
11269reg [63:0] gl1_reg1;
11270reg [63:0] gl2_reg1;
11271reg [63:0] gl3_reg1;
11272reg [63:0] gl0_reg2;
11273reg [63:0] gl1_reg2;
11274reg [63:0] gl2_reg2;
11275reg [63:0] gl3_reg2;
11276reg [63:0] gl0_reg3;
11277reg [63:0] gl1_reg3;
11278reg [63:0] gl2_reg3;
11279reg [63:0] gl3_reg3;
11280reg [63:0] gl0_reg4;
11281reg [63:0] gl1_reg4;
11282reg [63:0] gl2_reg4;
11283reg [63:0] gl3_reg4;
11284reg [63:0] gl0_reg5;
11285reg [63:0] gl1_reg5;
11286reg [63:0] gl2_reg5;
11287reg [63:0] gl3_reg5;
11288reg [63:0] gl0_reg6;
11289reg [63:0] gl1_reg6;
11290reg [63:0] gl2_reg6;
11291reg [63:0] gl3_reg6;
11292reg [63:0] gl0_reg7;
11293reg [63:0] gl1_reg7;
11294reg [63:0] gl2_reg7;
11295reg [63:0] gl3_reg7;
11296
11297reg [63:0] win0_reg8;
11298reg [63:0] win1_reg8;
11299reg [63:0] win2_reg8;
11300reg [63:0] win3_reg8;
11301reg [63:0] win4_reg8;
11302reg [63:0] win5_reg8;
11303reg [63:0] win6_reg8;
11304reg [63:0] win7_reg8;
11305reg [63:0] win0_reg9;
11306reg [63:0] win1_reg9;
11307reg [63:0] win2_reg9;
11308reg [63:0] win3_reg9;
11309reg [63:0] win4_reg9;
11310reg [63:0] win5_reg9;
11311reg [63:0] win6_reg9;
11312reg [63:0] win7_reg9;
11313reg [63:0] win0_reg10;
11314reg [63:0] win1_reg10;
11315reg [63:0] win2_reg10;
11316reg [63:0] win3_reg10;
11317reg [63:0] win4_reg10;
11318reg [63:0] win5_reg10;
11319reg [63:0] win6_reg10;
11320reg [63:0] win7_reg10;
11321reg [63:0] win0_reg11;
11322reg [63:0] win1_reg11;
11323reg [63:0] win2_reg11;
11324reg [63:0] win3_reg11;
11325reg [63:0] win4_reg11;
11326reg [63:0] win5_reg11;
11327reg [63:0] win6_reg11;
11328reg [63:0] win7_reg11;
11329reg [63:0] win0_reg12;
11330reg [63:0] win1_reg12;
11331reg [63:0] win2_reg12;
11332reg [63:0] win3_reg12;
11333reg [63:0] win4_reg12;
11334reg [63:0] win5_reg12;
11335reg [63:0] win6_reg12;
11336reg [63:0] win7_reg12;
11337reg [63:0] win0_reg13;
11338reg [63:0] win1_reg13;
11339reg [63:0] win2_reg13;
11340reg [63:0] win3_reg13;
11341reg [63:0] win4_reg13;
11342reg [63:0] win5_reg13;
11343reg [63:0] win6_reg13;
11344reg [63:0] win7_reg13;
11345reg [63:0] win0_reg14;
11346reg [63:0] win1_reg14;
11347reg [63:0] win2_reg14;
11348reg [63:0] win3_reg14;
11349reg [63:0] win4_reg14;
11350reg [63:0] win5_reg14;
11351reg [63:0] win6_reg14;
11352reg [63:0] win7_reg14;
11353reg [63:0] win0_reg15;
11354reg [63:0] win1_reg15;
11355reg [63:0] win2_reg15;
11356reg [63:0] win3_reg15;
11357reg [63:0] win4_reg15;
11358reg [63:0] win5_reg15;
11359reg [63:0] win6_reg15;
11360reg [63:0] win7_reg15;
11361reg [63:0] win0_reg16;
11362reg [63:0] win1_reg16;
11363reg [63:0] win2_reg16;
11364reg [63:0] win3_reg16;
11365reg [63:0] win4_reg16;
11366reg [63:0] win5_reg16;
11367reg [63:0] win6_reg16;
11368reg [63:0] win7_reg16;
11369reg [63:0] win0_reg17;
11370reg [63:0] win1_reg17;
11371reg [63:0] win2_reg17;
11372reg [63:0] win3_reg17;
11373reg [63:0] win4_reg17;
11374reg [63:0] win5_reg17;
11375reg [63:0] win6_reg17;
11376reg [63:0] win7_reg17;
11377reg [63:0] win0_reg18;
11378reg [63:0] win1_reg18;
11379reg [63:0] win2_reg18;
11380reg [63:0] win3_reg18;
11381reg [63:0] win4_reg18;
11382reg [63:0] win5_reg18;
11383reg [63:0] win6_reg18;
11384reg [63:0] win7_reg18;
11385reg [63:0] win0_reg19;
11386reg [63:0] win1_reg19;
11387reg [63:0] win2_reg19;
11388reg [63:0] win3_reg19;
11389reg [63:0] win4_reg19;
11390reg [63:0] win5_reg19;
11391reg [63:0] win6_reg19;
11392reg [63:0] win7_reg19;
11393reg [63:0] win0_reg20;
11394reg [63:0] win1_reg20;
11395reg [63:0] win2_reg20;
11396reg [63:0] win3_reg20;
11397reg [63:0] win4_reg20;
11398reg [63:0] win5_reg20;
11399reg [63:0] win6_reg20;
11400reg [63:0] win7_reg20;
11401reg [63:0] win0_reg21;
11402reg [63:0] win1_reg21;
11403reg [63:0] win2_reg21;
11404reg [63:0] win3_reg21;
11405reg [63:0] win4_reg21;
11406reg [63:0] win5_reg21;
11407reg [63:0] win6_reg21;
11408reg [63:0] win7_reg21;
11409reg [63:0] win0_reg22;
11410reg [63:0] win1_reg22;
11411reg [63:0] win2_reg22;
11412reg [63:0] win3_reg22;
11413reg [63:0] win4_reg22;
11414reg [63:0] win5_reg22;
11415reg [63:0] win6_reg22;
11416reg [63:0] win7_reg22;
11417reg [63:0] win0_reg23;
11418reg [63:0] win1_reg23;
11419reg [63:0] win2_reg23;
11420reg [63:0] win3_reg23;
11421reg [63:0] win4_reg23;
11422reg [63:0] win5_reg23;
11423reg [63:0] win6_reg23;
11424reg [63:0] win7_reg23;
11425reg [63:0] win0_reg24;
11426reg [63:0] win1_reg24;
11427reg [63:0] win2_reg24;
11428reg [63:0] win3_reg24;
11429reg [63:0] win4_reg24;
11430reg [63:0] win5_reg24;
11431reg [63:0] win6_reg24;
11432reg [63:0] win7_reg24;
11433reg [63:0] win0_reg25;
11434reg [63:0] win1_reg25;
11435reg [63:0] win2_reg25;
11436reg [63:0] win3_reg25;
11437reg [63:0] win4_reg25;
11438reg [63:0] win5_reg25;
11439reg [63:0] win6_reg25;
11440reg [63:0] win7_reg25;
11441reg [63:0] win0_reg26;
11442reg [63:0] win1_reg26;
11443reg [63:0] win2_reg26;
11444reg [63:0] win3_reg26;
11445reg [63:0] win4_reg26;
11446reg [63:0] win5_reg26;
11447reg [63:0] win6_reg26;
11448reg [63:0] win7_reg26;
11449reg [63:0] win0_reg27;
11450reg [63:0] win1_reg27;
11451reg [63:0] win2_reg27;
11452reg [63:0] win3_reg27;
11453reg [63:0] win4_reg27;
11454reg [63:0] win5_reg27;
11455reg [63:0] win6_reg27;
11456reg [63:0] win7_reg27;
11457reg [63:0] win0_reg28;
11458reg [63:0] win1_reg28;
11459reg [63:0] win2_reg28;
11460reg [63:0] win3_reg28;
11461reg [63:0] win4_reg28;
11462reg [63:0] win5_reg28;
11463reg [63:0] win6_reg28;
11464reg [63:0] win7_reg28;
11465reg [63:0] win0_reg29;
11466reg [63:0] win1_reg29;
11467reg [63:0] win2_reg29;
11468reg [63:0] win3_reg29;
11469reg [63:0] win4_reg29;
11470reg [63:0] win5_reg29;
11471reg [63:0] win6_reg29;
11472reg [63:0] win7_reg29;
11473reg [63:0] win0_reg30;
11474reg [63:0] win1_reg30;
11475reg [63:0] win2_reg30;
11476reg [63:0] win3_reg30;
11477reg [63:0] win4_reg30;
11478reg [63:0] win5_reg30;
11479reg [63:0] win6_reg30;
11480reg [63:0] win7_reg30;
11481reg [63:0] win0_reg31;
11482reg [63:0] win1_reg31;
11483reg [63:0] win2_reg31;
11484reg [63:0] win3_reg31;
11485reg [63:0] win4_reg31;
11486reg [63:0] win5_reg31;
11487reg [63:0] win6_reg31;
11488reg [63:0] win7_reg31;
11489
11490reg [63:0] itagacc_fx5;
11491reg [63:0] itagacc_fb;
11492reg [63:0] itagacc_fw;
11493reg [63:0] itagacc_fw1;
11494reg [63:0] itagacc_fw2;
11495
11496reg [63:0] dtagacc_fx5;
11497reg [63:0] dtagacc_fb;
11498reg [63:0] dtagacc_fw;
11499reg [63:0] dtagacc_fw1;
11500reg [63:0] dtagacc_fw2;
11501
11502reg [47:0] dsfar_fb;
11503reg [47:0] dsfar_fw;
11504reg [47:0] dsfar_fw1;
11505reg [47:0] dsfar_fw2;
11506
11507reg [47:0] pc_fx4;
11508reg [47:0] pc_fx5;
11509reg [47:0] pc_fb;
11510reg [47:0] pc_fw;
11511reg [47:0] pc_fw1;
11512reg [47:0] pc_fw2;
11513reg [47:0] pc_last;
11514
11515reg tlu_complete_1;
11516reg tlu_complete_2;
11517reg tlu_complete_3;
11518
11519reg frf_w1_valid_fw1;
11520reg frf_w1_valid_fw2;
11521
11522reg frf_w1_skip_addr4_fw1;
11523reg frf_w1_skip_addr4_fw2;
11524reg [2:0] fprs_fb;
11525reg [2:0] fprs_fw;
11526reg [2:0] fprs_fw1;
11527reg [2:0] fprs_fw2;
11528
11529
11530reg [1:0] frf_w2_valid_fw;
11531reg [1:0] frf_w2_valid_bn;
11532reg [2:0] frf_w2_tid_fw;
11533reg [4:0] frf_w2_addr_fw;
11534
11535reg [1:0] frf_w1_valid_fw;
11536reg [2:0] frf_w1_tid_fw;
11537reg [4:0] frf_w1_addr_fw;
11538
11539reg thread_running;
11540
11541reg in_wmr;
11542reg wmr; // latched to get edge
11543reg por_a; // latched to get edge
11544reg por_b; // latched to get edge
11545
11546reg nas_pipe_enable; // Turns on nas_pipe capture and Riesling SSTEP
11547reg first_op;
11548reg [63:0] mytime;
11549wire [5:0] mytnum;
11550wire mytg;
11551integer junk;
11552integer myindex;
11553integer irf_offset;
11554wire oddwin;
11555wire frf_w1_valid_even;
11556wire frf_w1_valid_odd;
11557wire frf_w2_valid_even;
11558wire frf_w2_valid_odd;
11559wire [4:0] frf_w1_skip_addr;
11560wire [4:0] frf_w2_skip_addr;
11561reg good_trap_detected; // Used for -nosas only.
11562
11563//----------------------------------------------------------
11564`ifdef DEBUG_PIPE
11565
11566wire [63:0] g0;
11567wire [63:0] g1;
11568wire [63:0] g2;
11569wire [63:0] g3;
11570wire [63:0] g4;
11571wire [63:0] g5;
11572wire [63:0] g6;
11573wire [63:0] g7;
11574
11575wire [63:0] o0;
11576wire [63:0] o1;
11577wire [63:0] o2;
11578wire [63:0] o3;
11579wire [63:0] o4;
11580wire [63:0] o5;
11581wire [63:0] o6;
11582wire [63:0] o7;
11583
11584wire [63:0] l0;
11585wire [63:0] l1;
11586wire [63:0] l2;
11587wire [63:0] l3;
11588wire [63:0] l4;
11589wire [63:0] l5;
11590wire [63:0] l6;
11591wire [63:0] l7;
11592
11593wire [63:0] i0;
11594wire [63:0] i1;
11595wire [63:0] i2;
11596wire [63:0] i3;
11597wire [63:0] i4;
11598wire [63:0] i5;
11599wire [63:0] i6;
11600wire [63:0] i7;
11601
11602wire [31:0] frf_0;
11603wire [31:0] frf_1;
11604wire [31:0] frf_2;
11605wire [31:0] frf_3;
11606wire [31:0] frf_4;
11607wire [31:0] frf_5;
11608wire [31:0] frf_6;
11609wire [31:0] frf_7;
11610wire [31:0] frf_8;
11611wire [31:0] frf_9;
11612wire [31:0] frf_10;
11613wire [31:0] frf_11;
11614wire [31:0] frf_12;
11615wire [31:0] frf_13;
11616wire [31:0] frf_14;
11617wire [31:0] frf_15;
11618wire [31:0] frf_16;
11619wire [31:0] frf_17;
11620wire [31:0] frf_18;
11621wire [31:0] frf_19;
11622wire [31:0] frf_20;
11623wire [31:0] frf_21;
11624wire [31:0] frf_22;
11625wire [31:0] frf_23;
11626wire [31:0] frf_24;
11627wire [31:0] frf_25;
11628wire [31:0] frf_26;
11629wire [31:0] frf_27;
11630wire [31:0] frf_28;
11631wire [31:0] frf_29;
11632wire [31:0] frf_30;
11633wire [31:0] frf_31;
11634wire [31:0] frf_32;
11635wire [31:0] frf_33;
11636wire [31:0] frf_34;
11637wire [31:0] frf_35;
11638wire [31:0] frf_36;
11639wire [31:0] frf_37;
11640wire [31:0] frf_38;
11641wire [31:0] frf_39;
11642wire [31:0] frf_40;
11643wire [31:0] frf_41;
11644wire [31:0] frf_42;
11645wire [31:0] frf_43;
11646wire [31:0] frf_44;
11647wire [31:0] frf_45;
11648wire [31:0] frf_46;
11649wire [31:0] frf_47;
11650wire [31:0] frf_48;
11651wire [31:0] frf_49;
11652wire [31:0] frf_50;
11653wire [31:0] frf_51;
11654wire [31:0] frf_52;
11655wire [31:0] frf_53;
11656wire [31:0] frf_54;
11657wire [31:0] frf_55;
11658wire [31:0] frf_56;
11659wire [31:0] frf_57;
11660wire [31:0] frf_58;
11661wire [31:0] frf_59;
11662wire [31:0] frf_60;
11663wire [31:0] frf_61;
11664wire [31:0] frf_62;
11665wire [31:0] frf_63;
11666
11667wire [`DELTA_WIDTH:0] delta_fx4_0;
11668wire [`DELTA_WIDTH:0] delta_fx4_1;
11669wire [`DELTA_WIDTH:0] delta_fx4_2;
11670wire [`DELTA_WIDTH:0] delta_fx4_3;
11671wire [`DELTA_WIDTH:0] delta_fx4_4;
11672wire [`DELTA_WIDTH:0] delta_fx4_5;
11673wire [`DELTA_WIDTH:0] delta_fx4_6;
11674wire [`DELTA_WIDTH:0] delta_fx4_7;
11675
11676wire [`DELTA_WIDTH:0] delta_fx5_0;
11677wire [`DELTA_WIDTH:0] delta_fx5_1;
11678wire [`DELTA_WIDTH:0] delta_fx5_2;
11679wire [`DELTA_WIDTH:0] delta_fx5_3;
11680wire [`DELTA_WIDTH:0] delta_fx5_4;
11681wire [`DELTA_WIDTH:0] delta_fx5_5;
11682wire [`DELTA_WIDTH:0] delta_fx5_6;
11683wire [`DELTA_WIDTH:0] delta_fx5_7;
11684
11685wire [`DELTA_WIDTH:0] delta_fb_0;
11686wire [`DELTA_WIDTH:0] delta_fb_1;
11687wire [`DELTA_WIDTH:0] delta_fb_2;
11688wire [`DELTA_WIDTH:0] delta_fb_3;
11689wire [`DELTA_WIDTH:0] delta_fb_4;
11690wire [`DELTA_WIDTH:0] delta_fb_5;
11691wire [`DELTA_WIDTH:0] delta_fb_6;
11692wire [`DELTA_WIDTH:0] delta_fb_7;
11693
11694wire [`DELTA_WIDTH:0] delta_fw_0;
11695wire [`DELTA_WIDTH:0] delta_fw_1;
11696wire [`DELTA_WIDTH:0] delta_fw_2;
11697wire [`DELTA_WIDTH:0] delta_fw_3;
11698wire [`DELTA_WIDTH:0] delta_fw_4;
11699wire [`DELTA_WIDTH:0] delta_fw_5;
11700wire [`DELTA_WIDTH:0] delta_fw_6;
11701wire [`DELTA_WIDTH:0] delta_fw_7;
11702
11703wire [`DELTA_WIDTH:0] delta_fw1_0;
11704wire [`DELTA_WIDTH:0] delta_fw1_1;
11705wire [`DELTA_WIDTH:0] delta_fw1_2;
11706wire [`DELTA_WIDTH:0] delta_fw1_3;
11707wire [`DELTA_WIDTH:0] delta_fw1_4;
11708wire [`DELTA_WIDTH:0] delta_fw1_5;
11709wire [`DELTA_WIDTH:0] delta_fw1_6;
11710wire [`DELTA_WIDTH:0] delta_fw1_7;
11711
11712wire [`DELTA_WIDTH:0] delta_fw2_0;
11713wire [`DELTA_WIDTH:0] delta_fw2_1;
11714wire [`DELTA_WIDTH:0] delta_fw2_2;
11715wire [`DELTA_WIDTH:0] delta_fw2_3;
11716wire [`DELTA_WIDTH:0] delta_fw2_4;
11717wire [`DELTA_WIDTH:0] delta_fw2_5;
11718wire [`DELTA_WIDTH:0] delta_fw2_6;
11719wire [`DELTA_WIDTH:0] delta_fw2_7;
11720
11721wire [`DELTA_WIDTH:0] delta_prev_0;
11722wire [`DELTA_WIDTH:0] delta_prev_1;
11723wire [`DELTA_WIDTH:0] delta_prev_2;
11724wire [`DELTA_WIDTH:0] delta_prev_3;
11725wire [`DELTA_WIDTH:0] delta_prev_4;
11726wire [`DELTA_WIDTH:0] delta_prev_5;
11727wire [`DELTA_WIDTH:0] delta_prev_6;
11728wire [`DELTA_WIDTH:0] delta_prev_7;
11729
11730initial begin
11731 #0;
11732 `PR_ALWAYS ("arg", `ALWAYS,"T%0d DEBUG_PIPE turned ON",mytnum);
11733end
11734
11735//----------------------------------------------------------
11736// Note: no remap of %g,%o,%l,%i regs based on CWP or GL
11737assign g0 = (mytid<=3) ? `IRF2_EXU0[( 0+irf_offset)] : `IRF2_EXU1[( 0+irf_offset)];
11738assign g1 = (mytid<=3) ? `IRF2_EXU0[( 1+irf_offset)] : `IRF2_EXU1[( 1+irf_offset)];
11739assign g2 = (mytid<=3) ? `IRF2_EXU0[( 2+irf_offset)] : `IRF2_EXU1[( 2+irf_offset)];
11740assign g3 = (mytid<=3) ? `IRF2_EXU0[( 3+irf_offset)] : `IRF2_EXU1[( 3+irf_offset)];
11741assign g4 = (mytid<=3) ? `IRF2_EXU0[( 4+irf_offset)] : `IRF2_EXU1[( 4+irf_offset)];
11742assign g5 = (mytid<=3) ? `IRF2_EXU0[( 5+irf_offset)] : `IRF2_EXU1[( 5+irf_offset)];
11743assign g6 = (mytid<=3) ? `IRF2_EXU0[( 6+irf_offset)] : `IRF2_EXU1[( 6+irf_offset)];
11744assign g7 = (mytid<=3) ? `IRF2_EXU0[( 7+irf_offset)] : `IRF2_EXU1[( 7+irf_offset)];
11745
11746assign o0 = (mytid<=3) ? `IRF2_EXU0[( 8+irf_offset)] : `IRF2_EXU1[( 8+irf_offset)];
11747assign o1 = (mytid<=3) ? `IRF2_EXU0[( 9+irf_offset)] : `IRF2_EXU1[( 9+irf_offset)];
11748assign o2 = (mytid<=3) ? `IRF2_EXU0[(10+irf_offset)] : `IRF2_EXU1[(10+irf_offset)];
11749assign o3 = (mytid<=3) ? `IRF2_EXU0[(11+irf_offset)] : `IRF2_EXU1[(11+irf_offset)];
11750assign o4 = (mytid<=3) ? `IRF2_EXU0[(12+irf_offset)] : `IRF2_EXU1[(12+irf_offset)];
11751assign o5 = (mytid<=3) ? `IRF2_EXU0[(13+irf_offset)] : `IRF2_EXU1[(13+irf_offset)];
11752assign o6 = (mytid<=3) ? `IRF2_EXU0[(14+irf_offset)] : `IRF2_EXU1[(14+irf_offset)];
11753assign o7 = (mytid<=3) ? `IRF2_EXU0[(15+irf_offset)] : `IRF2_EXU1[(15+irf_offset)];
11754
11755assign l0 = (mytid<=3) ? `IRF2_EXU0[(16+irf_offset)] : `IRF2_EXU1[(16+irf_offset)];
11756assign l1 = (mytid<=3) ? `IRF2_EXU0[(17+irf_offset)] : `IRF2_EXU1[(17+irf_offset)];
11757assign l2 = (mytid<=3) ? `IRF2_EXU0[(18+irf_offset)] : `IRF2_EXU1[(18+irf_offset)];
11758assign l3 = (mytid<=3) ? `IRF2_EXU0[(19+irf_offset)] : `IRF2_EXU1[(19+irf_offset)];
11759assign l4 = (mytid<=3) ? `IRF2_EXU0[(20+irf_offset)] : `IRF2_EXU1[(20+irf_offset)];
11760assign l5 = (mytid<=3) ? `IRF2_EXU0[(21+irf_offset)] : `IRF2_EXU1[(21+irf_offset)];
11761assign l6 = (mytid<=3) ? `IRF2_EXU0[(22+irf_offset)] : `IRF2_EXU1[(22+irf_offset)];
11762assign l7 = (mytid<=3) ? `IRF2_EXU0[(23+irf_offset)] : `IRF2_EXU1[(23+irf_offset)];
11763
11764assign i0 = (mytid<=3) ? `IRF2_EXU0[(24+irf_offset)] : `IRF2_EXU1[(24+irf_offset)];
11765assign i1 = (mytid<=3) ? `IRF2_EXU0[(25+irf_offset)] : `IRF2_EXU1[(25+irf_offset)];
11766assign i2 = (mytid<=3) ? `IRF2_EXU0[(26+irf_offset)] : `IRF2_EXU1[(26+irf_offset)];
11767assign i3 = (mytid<=3) ? `IRF2_EXU0[(27+irf_offset)] : `IRF2_EXU1[(27+irf_offset)];
11768assign i4 = (mytid<=3) ? `IRF2_EXU0[(28+irf_offset)] : `IRF2_EXU1[(28+irf_offset)];
11769assign i5 = (mytid<=3) ? `IRF2_EXU0[(29+irf_offset)] : `IRF2_EXU1[(29+irf_offset)];
11770assign i6 = (mytid<=3) ? `IRF2_EXU0[(30+irf_offset)] : `IRF2_EXU1[(30+irf_offset)];
11771assign i7 = (mytid<=3) ? `IRF2_EXU0[(31+irf_offset)] : `IRF2_EXU1[(31+irf_offset)];
11772
11773//----------------------------------------------------------
11774assign frf_0 = `FRF2_EVEN[(mytid*32)+ 0];
11775assign frf_2 = `FRF2_EVEN[(mytid*32)+ 1];
11776assign frf_4 = `FRF2_EVEN[(mytid*32)+ 2];
11777assign frf_6 = `FRF2_EVEN[(mytid*32)+ 3];
11778assign frf_8 = `FRF2_EVEN[(mytid*32)+ 4];
11779assign frf_10 = `FRF2_EVEN[(mytid*32)+ 5];
11780assign frf_12 = `FRF2_EVEN[(mytid*32)+ 6];
11781assign frf_14 = `FRF2_EVEN[(mytid*32)+ 7];
11782assign frf_16 = `FRF2_EVEN[(mytid*32)+ 8];
11783assign frf_18 = `FRF2_EVEN[(mytid*32)+ 9];
11784assign frf_20 = `FRF2_EVEN[(mytid*32)+ 10];
11785assign frf_22 = `FRF2_EVEN[(mytid*32)+ 11];
11786assign frf_24 = `FRF2_EVEN[(mytid*32)+ 12];
11787assign frf_26 = `FRF2_EVEN[(mytid*32)+ 13];
11788assign frf_28 = `FRF2_EVEN[(mytid*32)+ 14];
11789assign frf_30 = `FRF2_EVEN[(mytid*32)+ 15];
11790assign frf_32 = `FRF2_EVEN[(mytid*32)+ 16];
11791assign frf_34 = `FRF2_EVEN[(mytid*32)+ 17];
11792assign frf_36 = `FRF2_EVEN[(mytid*32)+ 18];
11793assign frf_38 = `FRF2_EVEN[(mytid*32)+ 19];
11794assign frf_40 = `FRF2_EVEN[(mytid*32)+ 20];
11795assign frf_42 = `FRF2_EVEN[(mytid*32)+ 21];
11796assign frf_44 = `FRF2_EVEN[(mytid*32)+ 22];
11797assign frf_46 = `FRF2_EVEN[(mytid*32)+ 23];
11798assign frf_48 = `FRF2_EVEN[(mytid*32)+ 24];
11799assign frf_50 = `FRF2_EVEN[(mytid*32)+ 25];
11800assign frf_52 = `FRF2_EVEN[(mytid*32)+ 26];
11801assign frf_54 = `FRF2_EVEN[(mytid*32)+ 27];
11802assign frf_56 = `FRF2_EVEN[(mytid*32)+ 28];
11803assign frf_58 = `FRF2_EVEN[(mytid*32)+ 29];
11804assign frf_60 = `FRF2_EVEN[(mytid*32)+ 30];
11805assign frf_62 = `FRF2_EVEN[(mytid*32)+ 31];
11806
11807assign frf_1 = `FRF2_ODD[(mytid*32)+ 0];
11808assign frf_3 = `FRF2_ODD[(mytid*32)+ 1];
11809assign frf_5 = `FRF2_ODD[(mytid*32)+ 2];
11810assign frf_7 = `FRF2_ODD[(mytid*32)+ 3];
11811assign frf_9 = `FRF2_ODD[(mytid*32)+ 4];
11812assign frf_11 = `FRF2_ODD[(mytid*32)+ 5];
11813assign frf_13 = `FRF2_ODD[(mytid*32)+ 6];
11814assign frf_15 = `FRF2_ODD[(mytid*32)+ 7];
11815assign frf_17 = `FRF2_ODD[(mytid*32)+ 8];
11816assign frf_19 = `FRF2_ODD[(mytid*32)+ 9];
11817assign frf_21 = `FRF2_ODD[(mytid*32)+ 10];
11818assign frf_23 = `FRF2_ODD[(mytid*32)+ 11];
11819assign frf_25 = `FRF2_ODD[(mytid*32)+ 12];
11820assign frf_27 = `FRF2_ODD[(mytid*32)+ 13];
11821assign frf_29 = `FRF2_ODD[(mytid*32)+ 14];
11822assign frf_31 = `FRF2_ODD[(mytid*32)+ 15];
11823assign frf_33 = `FRF2_ODD[(mytid*32)+ 16];
11824assign frf_35 = `FRF2_ODD[(mytid*32)+ 17];
11825assign frf_37 = `FRF2_ODD[(mytid*32)+ 18];
11826assign frf_39 = `FRF2_ODD[(mytid*32)+ 19];
11827assign frf_41 = `FRF2_ODD[(mytid*32)+ 20];
11828assign frf_43 = `FRF2_ODD[(mytid*32)+ 21];
11829assign frf_45 = `FRF2_ODD[(mytid*32)+ 22];
11830assign frf_47 = `FRF2_ODD[(mytid*32)+ 23];
11831assign frf_49 = `FRF2_ODD[(mytid*32)+ 24];
11832assign frf_51 = `FRF2_ODD[(mytid*32)+ 25];
11833assign frf_53 = `FRF2_ODD[(mytid*32)+ 26];
11834assign frf_55 = `FRF2_ODD[(mytid*32)+ 27];
11835assign frf_57 = `FRF2_ODD[(mytid*32)+ 28];
11836assign frf_59 = `FRF2_ODD[(mytid*32)+ 29];
11837assign frf_61 = `FRF2_ODD[(mytid*32)+ 30];
11838assign frf_63 = `FRF2_ODD[(mytid*32)+ 31];
11839
11840//----------------------------------------------------------
11841assign delta_fx4_0 = delta_fx4[0];
11842assign delta_fx4_1 = delta_fx4[1];
11843assign delta_fx4_2 = delta_fx4[2];
11844assign delta_fx4_3 = delta_fx4[3];
11845assign delta_fx4_4 = delta_fx4[4];
11846assign delta_fx4_5 = delta_fx4[5];
11847assign delta_fx4_6 = delta_fx4[6];
11848assign delta_fx4_7 = delta_fx4[7];
11849
11850assign delta_fx5_0 = delta_fx5[0];
11851assign delta_fx5_1 = delta_fx5[1];
11852assign delta_fx5_2 = delta_fx5[2];
11853assign delta_fx5_3 = delta_fx5[3];
11854assign delta_fx5_4 = delta_fx5[4];
11855assign delta_fx5_5 = delta_fx5[5];
11856assign delta_fx5_6 = delta_fx5[6];
11857assign delta_fx5_7 = delta_fx5[7];
11858
11859assign delta_fb_0 = delta_fb[0];
11860assign delta_fb_1 = delta_fb[1];
11861assign delta_fb_2 = delta_fb[2];
11862assign delta_fb_3 = delta_fb[3];
11863assign delta_fb_4 = delta_fb[4];
11864assign delta_fb_5 = delta_fb[5];
11865assign delta_fb_6 = delta_fb[6];
11866assign delta_fb_7 = delta_fb[7];
11867
11868assign delta_fw_0 = delta_fw[0];
11869assign delta_fw_1 = delta_fw[1];
11870assign delta_fw_2 = delta_fw[2];
11871assign delta_fw_3 = delta_fw[3];
11872assign delta_fw_4 = delta_fw[4];
11873assign delta_fw_5 = delta_fw[5];
11874assign delta_fw_6 = delta_fw[6];
11875assign delta_fw_7 = delta_fw[7];
11876
11877assign delta_fw1_0 = delta_fw1[0];
11878assign delta_fw1_1 = delta_fw1[1];
11879assign delta_fw1_2 = delta_fw1[2];
11880assign delta_fw1_3 = delta_fw1[3];
11881assign delta_fw1_4 = delta_fw1[4];
11882assign delta_fw1_5 = delta_fw1[5];
11883assign delta_fw1_6 = delta_fw1[6];
11884assign delta_fw1_7 = delta_fw1[7];
11885
11886assign delta_fw2_0 = delta_fw2[0];
11887assign delta_fw2_1 = delta_fw2[1];
11888assign delta_fw2_2 = delta_fw2[2];
11889assign delta_fw2_3 = delta_fw2[3];
11890assign delta_fw2_4 = delta_fw2[4];
11891assign delta_fw2_5 = delta_fw2[5];
11892assign delta_fw2_6 = delta_fw2[6];
11893assign delta_fw2_7 = delta_fw2[7];
11894
11895assign delta_prev_0 = delta_prev[0];
11896assign delta_prev_1 = delta_prev[1];
11897assign delta_prev_2 = delta_prev[2];
11898assign delta_prev_3 = delta_prev[3];
11899assign delta_prev_4 = delta_prev[4];
11900assign delta_prev_5 = delta_prev[5];
11901assign delta_prev_6 = delta_prev[6];
11902assign delta_prev_7 = delta_prev[7];
11903
11904`endif // DEBUG_PIPE
11905//----------------------------------------------------------
11906
11907//----------------------------------------------------------
11908assign mytnum = (mycid*8)+mytid;
11909assign mytg = mytid >> 2;
11910
11911assign exu_complete = exu_valid & ~(`PROBES2.clkstop_d5|`TOP.in_reset|`SPC2.tcu_scan_en);
11912assign imul_complete = imul_valid & ~(`TOP.in_reset|`SPC2.tcu_scan_en);
11913assign idiv_complete = idiv_valid & ~(`TOP.in_reset|`SPC2.tcu_scan_en);
11914assign tlu_complete = tlu_complete_3 ;
11915assign fp_complete = fp_valid & ~(`TOP.in_reset|`SPC2.tcu_scan_en);
11916assign fdiv_complete = fdiv_valid & ~(`TOP.in_reset|`SPC2.tcu_scan_en);
11917assign lsu_complete = lsu_valid & ~(`TOP.in_reset|`SPC2.tcu_scan_en);
11918assign asi_complete = asi_valid & ~(`TOP.in_reset|`SPC2.tcu_scan_en);
11919
11920assign complete_w = (exu_complete << `EXU_INDEX) |
11921 (lsu_complete << `LSU_INDEX) |
11922 (tlu_complete << `TLU_INDEX) |
11923 (asi_complete << `ASI_INDEX) ;
11924
11925assign oddwin = CWP_reg % 2;
11926
11927assign frf_w1_valid_even = (frf_w1_tid_fw == mytid) & frf_w1_valid_fw[1];
11928assign frf_w1_valid_odd = (frf_w1_tid_fw == mytid) & frf_w1_valid_fw[0];
11929assign frf_w2_valid_even = (frf_w2_tid_fw == mytid) & frf_w2_valid_fw[1];
11930assign frf_w2_valid_odd = (frf_w2_tid_fw == mytid) & frf_w2_valid_fw[0];
11931
11932assign frf_w1_skip_addr = frf_w1_addr_fw;
11933assign frf_w2_skip_addr = frf_w2_addr_fw;
11934
11935//-----------------
11936// ADD_TSB_CFG
11937// NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
11938`ifdef ADD_TSB_CFG
11939wire [63:0] ctxt_z_tsb_cfg0_reg = `PROBES2.ctxt_z_tsb_cfg0_reg[mytid];
11940wire [63:0] ctxt_z_tsb_cfg1_reg = `PROBES2.ctxt_z_tsb_cfg1_reg[mytid];
11941wire [63:0] ctxt_z_tsb_cfg2_reg = `PROBES2.ctxt_z_tsb_cfg2_reg[mytid];
11942wire [63:0] ctxt_z_tsb_cfg3_reg = `PROBES2.ctxt_z_tsb_cfg3_reg[mytid];
11943wire [63:0] ctxt_nz_tsb_cfg0_reg = `PROBES2.ctxt_nz_tsb_cfg0_reg[mytid];
11944wire [63:0] ctxt_nz_tsb_cfg1_reg = `PROBES2.ctxt_nz_tsb_cfg1_reg[mytid];
11945wire [63:0] ctxt_nz_tsb_cfg2_reg = `PROBES2.ctxt_nz_tsb_cfg2_reg[mytid];
11946wire [63:0] ctxt_nz_tsb_cfg3_reg = `PROBES2.ctxt_nz_tsb_cfg3_reg[mytid];
11947`endif
11948
11949//----------------------------------------------------------
11950// Pipelined Signals
11951always @ (posedge `BENCH_SPC2_GCLK) begin // {
11952
11953 // TLU is async to the execution pipeline
11954 // but needs to be delayed to allow CWP, etc to update and be stable
11955 // before arch state is captured and diff_reg is called.
11956 // Done for FLUSHW
11957
11958 // FDIV was moved from fw1 to fw to allow FPRS to be stable before capture
11959 tlu_complete_1 <= tlu_valid & ~(`TOP.in_reset|`SPC2.tcu_scan_en);
11960 tlu_complete_2 <= tlu_complete_1;
11961 tlu_complete_3 <= tlu_complete_2;
11962
11963 itagacc_fx5 <= I_TAG_ACC_reg; // Signal changes in W so need to pipeline to fw2
11964 itagacc_fb <= itagacc_fx5;
11965 itagacc_fw <= itagacc_fb;
11966 itagacc_fw1 <= itagacc_fw;
11967 itagacc_fw2 <= itagacc_fw1;
11968
11969 dtagacc_fx5 <= D_TAG_ACC_reg; // Signal changes in W so need to pipeline to fw2
11970 dtagacc_fb <= dtagacc_fx5;
11971 dtagacc_fw <= dtagacc_fb;
11972 dtagacc_fw1 <= dtagacc_fw;
11973 dtagacc_fw2 <= dtagacc_fw1;
11974
11975 dsfar_fb <= DSFAR_reg; // Signal changes in W+1 so need to pipeline to fw2
11976 dsfar_fw <= dsfar_fb;
11977 dsfar_fw1 <= dsfar_fw;
11978 dsfar_fw2 <= dsfar_fw1;
11979
11980 pc_fx4 <= PC_reg;
11981 pc_fx5 <= pc_fx4;
11982 pc_fb <= pc_fx5;
11983 pc_fw <= pc_fb;
11984 pc_fw1 <= pc_fw;
11985 pc_fw2 <= pc_fw1;
11986
11987 cwp_fx4 <= CWP_reg;
11988 cwp_fx5 <= cwp_fx4;
11989 cwp_fb <= cwp_fx5;
11990 cwp_fw <= cwp_fb;
11991 cwp_fw1 <= cwp_fw;
11992 cwp_fw2 <= cwp_fw1;
11993
11994 complete_fx4 <= complete_w;
11995 complete_fx5 <= complete_fx4 ;
11996 complete_fb <= complete_fx5 |
11997 (idiv_complete << `IDIV_INDEX);
11998 complete_fw <= complete_fb |
11999 (fdiv_complete << `FDIV_INDEX) |
12000 (imul_complete << `IMUL_INDEX);
12001 complete_fw1 <= complete_fw |
12002 (fp_complete << `FP_INDEX);
12003
12004 complete_fw2 <= complete_fw1;
12005
12006 frf_w1_valid_fw1 <= (frf_w1_valid_odd | frf_w1_valid_even) & fp_complete;
12007 frf_w1_valid_fw2 <= frf_w1_valid_fw1;
12008
12009 frf_w1_skip_addr4_fw1 <= frf_w1_skip_addr[4];
12010 frf_w1_skip_addr4_fw2 <= frf_w1_skip_addr4_fw1;
12011
12012 fprs_fb <= FPRS_reg;
12013 fprs_fw <= fprs_fb;
12014 fprs_fw1 <= fprs_fw;
12015 fprs_fw2 <= fprs_fw1;
12016
12017 frf_w2_valid_fw <= frf_w2_valid_bn;
12018 frf_w2_tid_fw <= frf_w2_tid;
12019 frf_w2_addr_fw <= frf_w2_addr;
12020
12021 frf_w1_valid_fw <= frf_w1_valid;
12022 frf_w1_tid_fw <= frf_w1_tid;
12023 frf_w1_addr_fw <= frf_w1_addr;
12024
12025 // Thread running
12026
12027 if (~thread_running & `SPC2.tcu_core_running[mytid])
12028 `TOP.th_last_act_cycle[mytnum] = `TOP.core_cycle_cnt;
12029
12030 thread_running <= `SPC2.tcu_core_running[mytid];
12031
12032 // Reset some register prev state on wmr negation
12033 if (`SPC2.rst_wmr_protect && ~wmr)
12034 wmr_prev;
12035
12036 if (por_a && ~por_b)
12037 por_prev;
12038
12039 wmr <= `SPC2.rst_wmr_protect;
12040 por_a <= `TOP.in_por;
12041 por_b <= por_a;
12042
12043 if (`SPC2.rst_wmr_protect)
12044 in_wmr <= 1;
12045
12046end // }
12047
12048//----------------------------------------------------------
12049// Holding state for registers that may be updated asynchronously
12050// after synchronous update, but before capture/step. Also for reads,
12051// when register is read and modified before capture/step ..
12052// We capture the value /write time, and use that for sstep,
12053// ignoring any async updates, which are sent in the NEXT sstep ..
12054//
12055reg [63:0] asi_updated_int_rec;
12056reg asi_rdwr_int_rec;
12057reg asi_wr_int_rec_delay;
12058
12059reg asi_updated_hintp;
12060reg asi_rdwr_hintp;
12061reg asi_wr_hintp_delay;
12062
12063reg [16:0] asi_updated_softint;
12064reg asi_rdwr_softint;
12065reg asi_wr_softint_delay;
12066reg [16:0] asi_softint_wrdata;
12067
12068always @(posedge `BENCH_SPC2_GCLK) begin // {
12069
12070 // Corner case : If async and sync wr occur in same clock, then the async
12071 // update takes place. In this case we have to capture the
12072 // value of the write WITHOUT async bit being set, so that
12073 // we can sync with Riesling's sync write ..
12074
12075 asi_wr_int_rec_delay <= ( `SPC2.tlu.cth.asi_wr_int_rec[mytid] |
12076 `SPC2.tlu.asi_rd_inc_vec_2[mytid]);
12077
12078 if (`SPC2.tlu.cth.asi_wr_int_rec[mytid] |
12079 ((`SPC2.tlu.asi.rd_inc_vec) &&
12080 (`SPC2.tlu.asi.rd_tid_dec[mytid])) |
12081 (`SPC2.tlu.asi_rd_int_rec &
12082 `SPC2.tlu.cth.int_rec_mux_sel==mytid))
12083 begin // {
12084
12085 if (`SPC2.tlu.cth.asi_wr_int_rec[mytid])
12086 asi_updated_int_rec <= `SPC2.tlu.cth.int_rec ;
12087 else if ( (`SPC2.tlu.asi.rd_inc_vec) &&
12088 (`SPC2.tlu.asi.rd_tid_dec[mytid]) )
12089 if (`SPC2.tlu.cth.cxi_wr_int_dis[mytid]) begin
12090 asi_updated_int_rec <= INTR_RECEIVE_reg & `SPC2.tlu.cth.int_rec_muxed_;
12091 asi_updated_int_rec[`SPC2.tlu.cth.incoming_vector_in] <= 1'b0 ;
12092 end
12093 else
12094 begin
12095 asi_updated_int_rec <= `SPC2.tlu.cth.int_rec_muxed ;
12096 asi_updated_int_rec[`SPC2.tlu.cth.incoming_vector_in] <= 1'b0 ;
12097 end
12098 else
12099 asi_updated_int_rec <= INTR_RECEIVE_reg;
12100 asi_rdwr_int_rec <= 1'b1;
12101 end //}
12102 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
12103 asi_rdwr_int_rec <= 1'b0;
12104
12105 asi_wr_hintp_delay <= `SPC2.tlu.asi_wr_hintp[mytid];
12106
12107 if (`SPC2.tlu.asi_wr_hintp[mytid] |
12108 `SPC2.tlu.asi_rd_hintp[mytid])
12109 begin // {
12110 if (`SPC2.tlu.asi_wr_hintp[mytid])
12111 asi_updated_hintp <= `SPC2.tlu.asi_wr_data_0[0] ;
12112 else
12113 asi_updated_hintp <= HINTP_reg;
12114 asi_rdwr_hintp <= 1'b1;
12115 end //}
12116 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
12117 asi_rdwr_hintp <= 1'b0;
12118
12119 asi_wr_softint_delay <= (`SPC2.tlu.asi_wr_softint[mytid] |
12120 `SPC2.tlu.asi_wr_clear_softint[mytid] |
12121 `SPC2.tlu.asi_wr_set_softint[mytid]);
12122
12123 if (`SPC2.tlu.asi_wr_clear_softint[mytid])
12124 asi_softint_wrdata <= ~`SPC2.tlu.asi_wr_data_0[16:0] & rd_SOFTINT_reg;
12125 else if (`SPC2.tlu.asi_wr_set_softint[mytid])
12126 asi_softint_wrdata <= `SPC2.tlu.asi_wr_data_0[16:0] | rd_SOFTINT_reg;
12127 else
12128 asi_softint_wrdata <= `SPC2.tlu.asi_wr_data_0[16:0];
12129
12130 if (asi_wr_softint_delay | `SPC2.tlu.asi_rd_softint[mytid])
12131 begin // {
12132 if (asi_wr_softint_delay)
12133 asi_updated_softint <= asi_softint_wrdata ;
12134 else
12135 asi_updated_softint <= rd_SOFTINT_reg ;
12136 asi_rdwr_softint <= 1'b1;
12137 end //}
12138 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
12139 asi_rdwr_softint <= 1'b0;
12140end //}
12141
12142//----------------------------------------------------------
12143// Negedge sampling to avoid race on specific signals ..
12144//
12145always @ (negedge `BENCH_SPC2_GCLK) begin // {
12146 frf_w2_valid_bn <= frf_w2_valid;
12147end //}
12148
12149//----------------------------------------------------------
12150// When instruction completes,
12151// Push differences to simics
12152
12153always @ (posedge `BENCH_SPC2_GCLK) begin // {
12154
12155 if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable && ~`SPC2.tcu_scan_en && ~`TOP.in_por) begin // {
12156
12157
12158 //----------
12159 // Update window registers
12160 if (CWP_reg != `NASTOP.th_cwp[mytnum]) begin // {
12161 copy_win (CWP_reg,`NASTOP.th_cwp[mytnum]);
12162 `NASTOP.th_cwp[mytnum] = CWP_reg;
12163 end // }
12164
12165 //----------
12166 // Update global registers
12167 // Wait for warm-reset flush related toggling to settle
12168 if (GL_reg != th_gl) begin // {
12169 if (`SPC2.spc_core_running_status[mytid] &
12170 ~`SPC2.rst_wmr_protect) begin // {
12171 copy_global (GL_reg,th_gl);
12172 th_gl = GL_reg;
12173 end // }
12174 end // }
12175
12176 //----------
12177 // Check for bad signal values
12178 check_values;
12179
12180 //----------
12181 // Step Simics
12182 //
12183 // if NASTOP.sstep_sent[tid]=1,
12184 // then SSTEP was set by another module (i.e. tlb_sync)
12185
12186 if (`PARGS.nas_check_on) begin // {
12187 mytime = `TOP.core_cycle_cnt-1;
12188 if (complete_fw2 && (`NASTOP.sstep_sent[mytnum]==1'b0)) begin // {
12189 `PR_INFO ("pli_nas", `INFO, " C%0d T%0d PLI_SSTEP tid=%d pc=%h ts=%0d ",
12190 mycid,mytid,mytnum,pc_fw2,mytime);
12191 junk = $sim_send(`PLI_SSTEP, mytnum);
12192 // Always clear sstep_early
12193 // In case tlb_sync asserted it too late for complete_fw2
12194 `NASTOP.sstep_early[mytnum] <= 1'b0;
12195 end //}
12196 else if (complete_fw2) begin // {
12197 `NASTOP.sstep_sent[mytnum] <= 1'b0; // re-arm SSTEP
12198 `NASTOP.sstep_early[mytnum] <= 1'b0;
12199 `PR_INFO ("pli_nas", `INFO, " C%0d T%0d PLI_SSTEP tid=%d pc=%h ts=%0d (nas_pipe: skip sstep. rearm sstep. sstep_sent=0)",
12200 mycid,mytid,mytnum,pc_fw2,mytime);
12201 end //}
12202 end //}
12203
12204 //----------
12205 // Only capture if something completes and not first instruction
12206 if (complete_fw2 && !first_op) begin // {
12207 update_pc;
12208 push_simics; // Use with AXIS to keep from getting timeout
12209 end // }
12210
12211 // Pipeline runs continuously
12212 // Other than when in POR ..
12213 update_fx4;
12214 update_fx5;
12215 update_fb;
12216 update_fw;
12217 update_fw1;
12218 update_fw2;
12219 // Only save to delta_prev when something completes
12220 if (complete_fw2) begin
12221 update_fw2_async;
12222 update_prev;
12223 first_op = 0;
12224 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
12225 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
12226 end
12227
12228
12229`ifndef EMUL_TL
12230 //----------
12231 // If something was captured but no instruction is in the pipeline
12232 if ((delta_fw2[`NEXT_INDEX]!=`FIRST_INDEX) && (complete_fw2 == 0))
12233 begin // {
12234
12235 for (myindex=`FIRST_INDEX; myindex<delta_fw2[`NEXT_INDEX]; myindex=myindex+1)
12236 begin // {
12237 print_entry (delta_fw2[myindex]);
12238 end //}
12239 `PR_ERROR ("nas",`ERROR, "T%0d Unexpected Reg change in DUT. Special case - no instruction retired.", mytnum);
12240
12241 end // }
12242`endif
12243
12244
12245 //----------
12246 // End detection for non-sas runs ..
12247
12248 for (junk=0;junk<`PARGS.bad_trap_count;junk=junk+1)
12249 if (({16'b0,pc_fw2}&`PC_MASK) ===
12250 (`PARGS.bad_trap_addr[junk]&`PC_MASK)) begin // {
12251 // Disable nas_pipe processing (capture & SSTEP)
12252 // to speed up simulation (minimize socket traffic,etc)
12253 nas_pipe_enable=1'b0;
12254 if (! `PARGS.nas_check_on) begin //{
12255 `PR_ERROR ("nas",`ERROR, "T%0d reached Bad Trap", mytnum);
12256 end //}
12257 end //}
12258
12259 for (junk=0;junk<`PARGS.good_trap_count;junk=junk+1)
12260 if ((|complete_fw2) && (({16'b0,pc_fw2}&`PC_MASK) ===
12261 (`PARGS.good_trap_addr[junk]&`PC_MASK))) begin // {
12262 // Disable nas_pipe processing (capture & SSTEP)
12263 // to speed up simulation (minimize socket traffic,etc)
12264 nas_pipe_enable=1'b0;
12265 if (! `PARGS.nas_check_on) begin //{
12266 good_trap_detected = 1'b1;
12267 end //}
12268 end //}
12269
12270 // Check Thread level timeout
12271 if (thread_running &&
12272 (`TOP.core_cycle_cnt - `TOP.th_last_act_cycle[mytnum]) > `PARGS.th_timeout)
12273 begin // {
12274 // Note: Do not change this message because regreport parses it for certain words.
12275 `PR_ALWAYS ("nas",`ALWAYS, "ERROR: Thread T%0d No Activity for %0d Cycles - Thread TIMEOUT!",
12276 mytnum, `PARGS.th_timeout);
12277 junk = incErr(9999); // must exceed users max error setting to force exit.
12278 end //}
12279
12280 end // if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable ...)}
12281
12282 // if -nosas only,
12283 // Need to make sure Store Buffer is empty before turning off th_check_enable.
12284 //global chkr requires to wait for all outstanding pending I
12285 if ((! `PARGS.nas_check_on) &&
12286 (good_trap_detected==1'b1) &&
12287 (`TOP.nas_top.lsu_stb_empty[mytnum]) && `TOP.nas_top.ireq_pending[mytnum]) begin // {
12288 `PARGS.th_check_enable[mytnum] = 1'b0;
12289 `TOP.finished_tids[mytnum] = 1'b1;
12290 good_trap_detected = 1'b0;
12291 `PR_NORMAL ("nas", `NORMAL, "T%0d reached Good Trap. Disabling checking for thread %0d", mytnum,mytnum);
12292 end // }
12293end // always }
12294
12295//----------------------------------------------------------
12296//----------------------------------------------------------
12297// Stage FX4 of delta pipeline
12298task update_fx4;
12299
12300 integer i;
12301 reg [7:0] index;
12302
12303 begin // {
12304
12305 `ifndef EMUL_TL
12306 index = `FIRST_INDEX;
12307
12308 //--------------------
12309 // Init delta_fx4
12310 delta_fx4[`NEXT_INDEX] <= `FIRST_INDEX;
12311 delta_fx4[`TIME_INDEX] <= 0;
12312 delta_fx4[`PC_INDEX] <= {16'b0,PC_reg};
12313 delta_fx4[`GL_INDEX] <= GL_reg;
12314 delta_fx4[`CWP_INDEX] <= CWP_reg;
12315 delta_fx4[`OPCODE_INDEX] <= opcode;
12316 delta_fx4[`FIRST_INDEX] <= 77'hx;
12317 `else
12318 index = 0;
12319 `endif
12320
12321 end // }
12322endtask
12323
12324//----------------------------------------------------------
12325// Stage FX5 of delta pipeline
12326task update_fx5;
12327
12328 integer i;
12329 reg [7:0] index;
12330 reg [38:0] frf_tmp;
12331
12332 begin // {
12333
12334 `ifndef EMUL_TL
12335 index = delta_fx4[`NEXT_INDEX];
12336
12337 //--------------------
12338 // Pipeline previous stage
12339 for (i=0; i<=delta_fx4[`NEXT_INDEX]; i=i+1) begin // {
12340 delta_fx5[i] <= delta_fx4[i];
12341 end
12342 `else
12343 index = 0;
12344 `endif
12345
12346 //-------------------
12347 // Control Registers
12348 if (complete_fx4) begin // LSU | EXU | TLU
12349 push_delta_fx5 (`CCR+`CTL_OFFSET,CCR_reg,index);
12350 end
12351
12352 //-------------------
12353 // Update IRF2
12354`ifndef NAS_NO_IRFFRF
12355 if (complete_fx4[`LSU_INDEX] |
12356 complete_fx4[`EXU_INDEX]) begin
12357 if (mytid <= 3) begin // {
12358 for (i=0; i<=31; i=i+1) begin // {
12359 push_delta_fx5 (i,`IRF2_EXU0[(remap(i,oddwin)+irf_offset)],index);
12360 end // }
12361 end // }
12362 else begin // {
12363 for (i=0; i<=31; i=i+1) begin // {
12364 push_delta_fx5 (i,`IRF2_EXU1[(remap(i,oddwin)+irf_offset)],index);
12365 end // }
12366 end // }
12367 end
12368`endif
12369
12370 //--------------------
12371 // Update FRF2 - Loads use W2 Port.
12372`ifndef NAS_NO_IRFFRF
12373 if (complete_fx4[`LSU_INDEX]) begin // {
12374 // IF W1 port is also being written, ignore that address
12375 for (i=0; i<=31; i=i+1) begin // {
12376 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
12377 frf_tmp = `FRF2_EVEN[(mytid*32)+i];
12378 push_delta_fx5 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
12379 end // }
12380 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
12381 frf_tmp = `FRF2_ODD[(mytid*32)+i];
12382 push_delta_fx5 (`FP_OFFSET + (i*2)+1, frf_tmp[31:0], index);
12383 end // }
12384 end //}
12385 end // }
12386`endif
12387
12388 // Update ASR/ASI registers
12389 if (complete_fx4) begin // {
12390 push_delta_fx5 (`PSTATE + `CTL_OFFSET,PSTATE_reg,index);
12391 push_delta_fx5 (`HPSTATE + `CTL_OFFSET,HPSTATE_reg,index);
12392 push_delta_fx5 (`PIL + `CTL_OFFSET,PIL_reg,index);
12393 push_delta_fx5 (`TBA + `CTL_OFFSET,{TBA_reg,15'b0},index);
12394 push_delta_fx5 (`GL + `CTL_OFFSET,GL_reg,index);
12395 push_delta_fx5 (`HTBA + `CTL_OFFSET,{HTBA_reg,14'b0},index);
12396 push_delta_fx5 (`VER + `CTL_OFFSET,VER_reg,index);
12397 push_delta_fx5 (`Y + `CTL_OFFSET,Y_reg,index);
12398 push_delta_fx5 (`ASI + `CTL_OFFSET,ASI_reg,index);
12399 push_delta_fx5 (`STICK_CMPR + `CTL_OFFSET,STICK_CMPR_wire,index);
12400 push_delta_fx5 (`HSTICK_CMPR + `CTL_OFFSET,HSTICK_CMPR_wire,index);
12401 push_delta_fx5 (`TICK_CMPR + `CTL_OFFSET,TICK_CMPR_wire,index);
12402 push_delta_fx5 (`CWP + `CTL_OFFSET,CWP_reg,index);
12403 push_delta_fx5 (`CANSAVE + `CTL_OFFSET,CANSAVE_reg,index);
12404 push_delta_fx5 (`CANRESTORE + `CTL_OFFSET,CANRESTORE_reg,index);
12405 push_delta_fx5 (`CLEANWIN + `CTL_OFFSET,CLEANWIN_reg,index);
12406 push_delta_fx5 (`OTHERWIN + `CTL_OFFSET,OTHERWIN_reg,index);
12407 push_delta_fx5 (`WSTATE + `CTL_OFFSET,WSTATE_reg,index);
12408
12409 push_delta_fx5 (`CTXT_PRIM_0+`CTL_OFFSET,CTXT_PRIM_0_reg,index);
12410 push_delta_fx5 (`CTXT_SEC_0+`CTL_OFFSET,CTXT_SEC_0_reg,index);
12411 push_delta_fx5 (`CTXT_PRIM_1+`CTL_OFFSET,CTXT_PRIM_1_reg,index);
12412 push_delta_fx5 (`CTXT_SEC_1+`CTL_OFFSET,CTXT_SEC_1_reg,index);
12413 push_delta_fx5 (`LSU_CONTROL+`CTL_OFFSET,LSU_CONTROL_reg,index);
12414 push_delta_fx5 (`WATCHPOINT_ADDR+`CTL_OFFSET,WATCHPOINT_ADDR_reg,index);
12415
12416 // NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
12417 // ADD_TSB_CFG
12418 `ifdef ADD_TSB_CFG
12419 push_delta_fx5 (`CTXT_Z_TSB_CFG0+`CTL_OFFSET,ctxt_z_tsb_cfg0_reg,index);
12420 push_delta_fx5 (`CTXT_Z_TSB_CFG1+`CTL_OFFSET,ctxt_z_tsb_cfg1_reg,index);
12421 push_delta_fx5 (`CTXT_Z_TSB_CFG2+`CTL_OFFSET,ctxt_z_tsb_cfg2_reg,index);
12422 push_delta_fx5 (`CTXT_Z_TSB_CFG3+`CTL_OFFSET,ctxt_z_tsb_cfg3_reg,index);
12423 push_delta_fx5 (`CTXT_NZ_TSB_CFG0+`CTL_OFFSET,ctxt_nz_tsb_cfg0_reg,index);
12424 push_delta_fx5 (`CTXT_NZ_TSB_CFG1+`CTL_OFFSET,ctxt_nz_tsb_cfg1_reg,index);
12425 push_delta_fx5 (`CTXT_NZ_TSB_CFG2+`CTL_OFFSET,ctxt_nz_tsb_cfg2_reg,index);
12426 push_delta_fx5 (`CTXT_NZ_TSB_CFG3+`CTL_OFFSET,ctxt_nz_tsb_cfg3_reg,index);
12427 `endif
12428
12429 end //}
12430
12431 // Update GSR for all except write ASR in progess
12432 if (!asi_in_progress) begin // {
12433 push_delta_fx5 (`GSR + `CTL_OFFSET,GSR_wire, index);
12434 end // }
12435
12436 // If lsu_complete & fp_complete assert at same time,
12437 // then the fp_complete is the one that will modify the FSR
12438 if (complete_fx4[`LSU_INDEX] & !complete_fw1[`FP_INDEX]) begin
12439 push_delta_fx5 (`FSR+`CTL_OFFSET,FSR_wire,index);
12440 end
12441
12442 // Non Trap updates of Trap stack & level
12443 if (complete_fx4 && !complete_fx4[`TLU_INDEX]) begin // {
12444 push_delta_fx5 (`TL + `CTL_OFFSET,TL_reg,index);
12445 push_delta_fx5 (`TPC1 + `CTL_OFFSET, TPC1_wire, index);
12446 push_delta_fx5 (`TPC2 + `CTL_OFFSET, TPC2_wire, index);
12447 push_delta_fx5 (`TPC3 + `CTL_OFFSET, TPC3_wire, index);
12448 push_delta_fx5 (`TPC4 + `CTL_OFFSET, TPC4_wire, index);
12449 push_delta_fx5 (`TPC5 + `CTL_OFFSET, TPC5_wire, index);
12450 push_delta_fx5 (`TPC6 + `CTL_OFFSET, TPC6_wire, index);
12451 push_delta_fx5 (`TNPC1 + `CTL_OFFSET, TNPC1_wire, index);
12452 push_delta_fx5 (`TNPC2 + `CTL_OFFSET, TNPC2_wire, index);
12453 push_delta_fx5 (`TNPC3 + `CTL_OFFSET, TNPC3_wire, index);
12454 push_delta_fx5 (`TNPC4 + `CTL_OFFSET, TNPC4_wire, index);
12455 push_delta_fx5 (`TNPC5 + `CTL_OFFSET, TNPC5_wire, index);
12456 push_delta_fx5 (`TNPC6 + `CTL_OFFSET, TNPC6_wire, index);
12457 push_delta_fx5 (`TSTATE1 + `CTL_OFFSET, TSTATE1_wire, index);
12458 push_delta_fx5 (`TSTATE2 + `CTL_OFFSET, TSTATE2_wire, index);
12459 push_delta_fx5 (`TSTATE3 + `CTL_OFFSET, TSTATE3_wire, index);
12460 push_delta_fx5 (`TSTATE4 + `CTL_OFFSET, TSTATE4_wire, index);
12461 push_delta_fx5 (`TSTATE5 + `CTL_OFFSET, TSTATE5_wire, index);
12462 push_delta_fx5 (`TSTATE6 + `CTL_OFFSET, TSTATE6_wire, index);
12463 push_delta_fx5 (`HTSTATE1 + `CTL_OFFSET, HTSTATE1_wire, index);
12464 push_delta_fx5 (`HTSTATE2 + `CTL_OFFSET, HTSTATE2_wire, index);
12465 push_delta_fx5 (`HTSTATE3 + `CTL_OFFSET, HTSTATE3_wire, index);
12466 push_delta_fx5 (`HTSTATE4 + `CTL_OFFSET, HTSTATE4_wire, index);
12467 push_delta_fx5 (`HTSTATE5 + `CTL_OFFSET, HTSTATE5_wire, index);
12468 push_delta_fx5 (`HTSTATE6 + `CTL_OFFSET, HTSTATE6_wire, index);
12469 push_delta_fx5 (`TT1 + `CTL_OFFSET, TT1_wire, index);
12470 push_delta_fx5 (`TT2 + `CTL_OFFSET, TT2_wire, index);
12471 push_delta_fx5 (`TT3 + `CTL_OFFSET, TT3_wire, index);
12472 push_delta_fx5 (`TT4 + `CTL_OFFSET, TT4_wire, index);
12473 push_delta_fx5 (`TT5 + `CTL_OFFSET, TT5_wire, index);
12474 push_delta_fx5 (`TT6 + `CTL_OFFSET, TT6_wire, index);
12475 end //}
12476
12477 end // }
12478endtask
12479
12480//----------------------------------------------------------
12481// Stage FB of delta pipeline
12482task update_fb;
12483
12484 integer i;
12485 reg [7:0] index;
12486
12487 begin // {
12488
12489 `ifndef EMUL_TL
12490 index = delta_fx5[`NEXT_INDEX];
12491
12492 //--------------------
12493 // Pipeline previous stage
12494 for (i=0; i<=delta_fx5[`NEXT_INDEX]; i=i+1) begin // {
12495 delta_fb[i] <= delta_fx5[i];
12496 end
12497 `else
12498 index = 0;
12499 `endif
12500
12501 // ASI/ASR ONLY updates
12502 if (complete_fx5[`ASI_INDEX]) begin // {
12503 push_delta_fb (`GSR + `CTL_OFFSET,GSR_wire, index);
12504 end //}
12505
12506 end // }
12507endtask
12508
12509//----------------------------------------------------------
12510// Stage FW of delta pipeline
12511task update_fw;
12512
12513 integer i;
12514 reg [7:0] index;
12515 reg [38:0] frf_tmp;
12516
12517 begin // {
12518
12519 `ifndef EMUL_TL
12520 index = delta_fb[`NEXT_INDEX];
12521
12522 //--------------------
12523 // Pipeline previous stage
12524 for (i=0; i<=delta_fb[`NEXT_INDEX]; i=i+1) begin // {
12525 delta_fw[i] <= delta_fb[i];
12526 end
12527
12528 // Capture CWP_reg for SAVE/RESTORE
12529 if (imul_complete) begin
12530 delta_fw[`CWP_INDEX] <= CWP_reg;
12531 end
12532 `else
12533 index = 0;
12534 `endif
12535
12536 //-------------------
12537 // Update IRF2
12538`ifndef NAS_NO_IRFFRF
12539 if (complete_fb[`TLU_INDEX]) begin
12540 if (mytid <= 3) begin // {
12541 for (i=0; i<=31; i=i+1) begin // {
12542 push_delta_fw (i,`IRF2_EXU0[(remap(i,oddwin)+irf_offset)],index);
12543 end // }
12544 end // }
12545 else begin // {
12546 for (i=0; i<=31; i=i+1) begin // {
12547 push_delta_fw (i,`IRF2_EXU1[(remap(i,oddwin)+irf_offset)],index);
12548 end // }
12549 end // }
12550 end
12551`endif
12552
12553 //--------------------
12554 // Update FRF2 - Idivs use W2.
12555`ifndef NAS_NO_IRFFRF
12556 if (complete_fb[`IDIV_INDEX]) begin // {
12557 // IF W1 port is also being written, ignore that address
12558 for (i=0; i<=31; i=i+1) begin // {
12559 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
12560 frf_tmp = `FRF2_EVEN[(mytid*32)+i];
12561 push_delta_fw (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
12562 end // }
12563 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
12564 frf_tmp = `FRF2_ODD[(mytid*32)+i];
12565 push_delta_fw (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
12566 end // }
12567 end //}
12568 end // }
12569`endif
12570
12571 end // }
12572
12573endtask
12574
12575//----------------------------------------------------------
12576// Stage FW1 of delta pipeline
12577task update_fw1;
12578
12579 integer i;
12580 reg [7:0] index;
12581
12582 reg [4:0] rdnum;
12583 reg [38:0] frf_tmp;
12584
12585 begin // {
12586
12587 `ifndef EMUL_TL
12588 index = delta_fw[`NEXT_INDEX];
12589
12590 //--------------------
12591 // Pipeline previous stage
12592 for (i=0; i<=delta_fw[`NEXT_INDEX]; i=i+1) begin // {
12593 delta_fw1[i] <= delta_fw[i];
12594 end
12595 `else
12596 index = 0;
12597 `endif
12598
12599 //--------------------
12600 // Update FRF2 - FPops use W1 port.
12601`ifndef NAS_NO_IRFFRF
12602 if (fp_complete) begin // {
12603 // IF W2 port is also being written, ignore that address
12604 for (i=0; i<=31; i=i+1) begin // {
12605 if (!((i == frf_w2_skip_addr) && frf_w2_valid_even)) begin // {
12606 frf_tmp = `FRF2_EVEN[(mytid*32)+i];
12607 push_delta_fw1 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
12608 end // }
12609 if (!((i == frf_w2_skip_addr) && frf_w2_valid_odd)) begin // {
12610 frf_tmp = `FRF2_ODD[(mytid*32)+i];
12611 push_delta_fw1 (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
12612 end // }
12613 end //}
12614 end // }
12615`endif
12616
12617 //-------------------
12618 // Control Registers
12619 if (complete_fw[`IMUL_INDEX]|complete_fw[`IDIV_INDEX]) begin
12620 push_delta_fw1 (`CCR+`CTL_OFFSET,CCR_reg,index);
12621 push_delta_fw1 (`Y+`CTL_OFFSET,Y_reg,index);
12622 push_delta_fw1 (`CWP+`CTL_OFFSET,CWP_reg,index);
12623 push_delta_fw1 (`CANSAVE+`CTL_OFFSET,CANSAVE_reg,index);
12624 push_delta_fw1 (`CANRESTORE+`CTL_OFFSET,CANRESTORE_reg,index);
12625 push_delta_fw1 (`CLEANWIN+`CTL_OFFSET,CLEANWIN_reg,index);
12626 push_delta_fw1 (`OTHERWIN+`CTL_OFFSET,OTHERWIN_reg,index);
12627 push_delta_fw1 (`WSTATE+`CTL_OFFSET,WSTATE_reg,index);
12628 end
12629
12630 // Update Trap Stack now
12631 if (complete_fw[`TLU_INDEX]) begin // {
12632 push_delta_fw1 (`TL + `CTL_OFFSET,TL_reg,index);
12633 push_delta_fw1 (`TPC1 + `CTL_OFFSET, TPC1_wire, index);
12634 push_delta_fw1 (`TPC2 + `CTL_OFFSET, TPC2_wire, index);
12635 push_delta_fw1 (`TPC3 + `CTL_OFFSET, TPC3_wire, index);
12636 push_delta_fw1 (`TPC4 + `CTL_OFFSET, TPC4_wire, index);
12637 push_delta_fw1 (`TPC5 + `CTL_OFFSET, TPC5_wire, index);
12638 push_delta_fw1 (`TPC6 + `CTL_OFFSET, TPC6_wire, index);
12639 push_delta_fw1 (`TNPC1 + `CTL_OFFSET, TNPC1_wire, index);
12640 push_delta_fw1 (`TNPC2 + `CTL_OFFSET, TNPC2_wire, index);
12641 push_delta_fw1 (`TNPC3 + `CTL_OFFSET, TNPC3_wire, index);
12642 push_delta_fw1 (`TNPC4 + `CTL_OFFSET, TNPC4_wire, index);
12643 push_delta_fw1 (`TNPC5 + `CTL_OFFSET, TNPC5_wire, index);
12644 push_delta_fw1 (`TNPC6 + `CTL_OFFSET, TNPC6_wire, index);
12645 push_delta_fw1 (`TSTATE1 + `CTL_OFFSET, TSTATE1_wire, index);
12646 push_delta_fw1 (`TSTATE2 + `CTL_OFFSET, TSTATE2_wire, index);
12647 push_delta_fw1 (`TSTATE3 + `CTL_OFFSET, TSTATE3_wire, index);
12648 push_delta_fw1 (`TSTATE4 + `CTL_OFFSET, TSTATE4_wire, index);
12649 push_delta_fw1 (`TSTATE5 + `CTL_OFFSET, TSTATE5_wire, index);
12650 push_delta_fw1 (`TSTATE6 + `CTL_OFFSET, TSTATE6_wire, index);
12651 push_delta_fw1 (`HTSTATE1 + `CTL_OFFSET, HTSTATE1_wire, index);
12652 push_delta_fw1 (`HTSTATE2 + `CTL_OFFSET, HTSTATE2_wire, index);
12653 push_delta_fw1 (`HTSTATE3 + `CTL_OFFSET, HTSTATE3_wire, index);
12654 push_delta_fw1 (`HTSTATE4 + `CTL_OFFSET, HTSTATE4_wire, index);
12655 push_delta_fw1 (`HTSTATE5 + `CTL_OFFSET, HTSTATE5_wire, index);
12656 push_delta_fw1 (`HTSTATE6 + `CTL_OFFSET, HTSTATE6_wire, index);
12657 push_delta_fw1 (`TT1 + `CTL_OFFSET, TT1_wire, index);
12658 push_delta_fw1 (`TT2 + `CTL_OFFSET, TT2_wire, index);
12659 push_delta_fw1 (`TT3 + `CTL_OFFSET, TT3_wire, index);
12660 push_delta_fw1 (`TT4 + `CTL_OFFSET, TT4_wire, index);
12661 push_delta_fw1 (`TT5 + `CTL_OFFSET, TT5_wire, index);
12662 push_delta_fw1 (`TT6 + `CTL_OFFSET, TT6_wire, index);
12663 end //}
12664
12665 end // }
12666endtask
12667
12668//----------------------------------------------------------
12669// Stage FW2 of delta pipeline
12670task update_fw2;
12671
12672 integer i;
12673 reg [7:0] index;
12674 reg [38:0] frf_tmp;
12675
12676 begin // {
12677
12678 `ifndef EMUL_TL
12679 index = delta_fw1[`NEXT_INDEX];
12680
12681 //--------------------
12682 // Pipeline previous stage
12683 for (i=0; i<=delta_fw1[`NEXT_INDEX]; i=i+1) begin // {
12684 delta_fw2[i] <= delta_fw1[i];
12685 end
12686
12687 delta_fw2[`TIME_INDEX] <= $time;
12688 `else
12689 index = 0;
12690 `endif
12691
12692 // Update Registers that may change asynchronously
12693 // If sstep was already sent by another module,
12694 // don't capture until the next sstep
12695 if (complete_fw1 && !`NASTOP.sstep_early[mytnum]) begin // {
12696 if ((complete_fw1[`ASI_INDEX]|complete_fw1[`LSU_INDEX]) & asi_rdwr_hintp)
12697 push_delta_fw2 (`HINTP + `CTL_OFFSET,asi_updated_hintp,index);
12698 else
12699 push_delta_fw2 (`HINTP + `CTL_OFFSET,HINTP_reg,index);
12700 if ((complete_fw1[`ASI_INDEX]|complete_fw1[`LSU_INDEX]) & asi_rdwr_softint)
12701 push_delta_fw2 (`SOFTINT + `CTL_OFFSET,asi_updated_softint,index);
12702 else
12703 push_delta_fw2 (`SOFTINT + `CTL_OFFSET,rd_SOFTINT_reg,index);
12704 end // }
12705
12706 //-------------------
12707 // Update IRF2
12708`ifndef NAS_NO_IRFFRF
12709 if (complete_fw1[`IMUL_INDEX] |
12710 complete_fw1[`IDIV_INDEX]) begin // {
12711 if (mytid <= 3) begin // {
12712 for (i=0; i<=31; i=i+1) begin // {
12713 push_delta_fw2 (i,`IRF2_EXU0[(remap(i,oddwin)+irf_offset)],index);
12714 end // }
12715 end // }
12716 else begin // {
12717 for (i=0; i<=31; i=i+1) begin // {
12718 push_delta_fw2 (i,`IRF2_EXU1[(remap(i,oddwin)+irf_offset)],index);
12719 end // }
12720 end // }
12721 end // }
12722`endif
12723
12724 //--------------------
12725 // Update FRF2 - fdivs and Imuls use W2 port
12726`ifndef NAS_NO_IRFFRF
12727 if (complete_fw1[`IMUL_INDEX] |
12728 complete_fw1[`FDIV_INDEX] ) begin // {
12729 // IF W1 port is also being written, ignore that address
12730 for (i=0; i<=31; i=i+1) begin // {
12731 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
12732 frf_tmp = `FRF2_EVEN[(mytid*32)+i];
12733 push_delta_fw2 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
12734 end // }
12735 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
12736 frf_tmp = `FRF2_ODD[(mytid*32)+i];
12737 push_delta_fw2 (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
12738 end // }
12739 end //}
12740 end // }
12741`endif
12742
12743 if (complete_fw1[`FP_INDEX] |
12744 complete_fw1[`TLU_INDEX] |
12745 complete_fw1[`FDIV_INDEX]) begin
12746 push_delta_fw2 (`FSR+`CTL_OFFSET,FSR_wire,index);
12747 end
12748
12749 if (complete_fw1) begin
12750 push_delta_fw2 (`I_TAG_ACC+`CTL_OFFSET,itagacc_fw2,index);
12751 push_delta_fw2 (`D_TAG_ACC+`CTL_OFFSET,dtagacc_fw2,index);
12752 push_delta_fw2 (`DSFAR+`CTL_OFFSET,dsfar_fw2,index);
12753 end
12754
12755 end // }
12756endtask
12757
12758//----------------------------------------------------------
12759// Stage FW2 of delta pipeline - for signals that change FW+2 !!
12760task update_fw2_async;
12761
12762 integer i;
12763 reg [7:0] index;
12764 reg [2:0] dummy_fprs;
12765
12766 begin // {
12767
12768 `ifndef EMUL_TL
12769 index = delta_fw2[`NEXT_INDEX];
12770 `else
12771 index = 0;
12772 `endif
12773
12774 // Since FPRS for FPops may have been corrupted by o-o-o loads:
12775 // If fprs_fw2 is != fprs_reg & there are loads in the pipeline
12776 // then assume loads have already updated fprs.
12777 // In that case, create our own fprs_reg by using the valids and
12778 // skip_addr and copy of fprs for this op..
12779 if (complete_fw2[`FP_INDEX] && frf_w1_valid_fw2) begin // {
12780 // o-o-o load has changed fprs already - use dummy
12781 if ((fprs_fw2 != FPRS_reg) && (complete_fw1[`LSU_INDEX] |
12782 complete_fw[`LSU_INDEX] | complete_fb[`LSU_INDEX] |
12783 complete_fx5[`LSU_INDEX] )) begin // {
12784 dummy_fprs = read_prev(`FPRS + `CTL_OFFSET);
12785 dummy_fprs = dummy_fprs |
12786 {1'b0, frf_w1_skip_addr4_fw2, ~frf_w1_skip_addr4_fw2};
12787 push_delta_fw2_async (`FPRS + `CTL_OFFSET,dummy_fprs,index);
12788 end //}
12789 // o-o-o load has NOT changed fprs already - use it
12790 else begin // {
12791 push_delta_fw2_async (`FPRS + `CTL_OFFSET,FPRS_reg,index);
12792 end //}
12793 end //}
12794 // Load FPRS for loads/reads as prev|fprs_fb ..
12795 // since loads may only 'set' bits, not clear ...
12796 else if (complete_fw2[`LSU_INDEX]) begin // {
12797 dummy_fprs = read_prev(`FPRS + `CTL_OFFSET);
12798 dummy_fprs = dummy_fprs | fprs_fw1;
12799 push_delta_fw2_async (`FPRS +`CTL_OFFSET,dummy_fprs,index);
12800 end // }
12801 // Load FPRS for store ASI or FDIV
12802 // FDIV can update FPRS on w1 or w2,
12803 // but the pipe is stalled behind it so no o-o-o loads.
12804 else if ((complete_fw2[`ASI_INDEX]) ||
12805 (complete_fw2[`FDIV_INDEX])) begin // {
12806 push_delta_fw2_async (`FPRS + `CTL_OFFSET,FPRS_reg,index);
12807 end //}
12808
12809 end // }
12810endtask
12811
12812//----------------------------------------------------------
12813// Store latest values into delta
12814// Capture of next PC
12815task update_pc;
12816 reg [7:0] index;
12817 begin
12818 `ifndef EMUL_TL
12819 index = delta_prev[`NEXT_INDEX];
12820 `else
12821 index = 0;
12822 `endif
12823
12824 if (in_wmr & ~`SPC2.rst_wmr_protect) begin // {
12825 push_delta_prev_async ( `PC+`CTL_OFFSET,{16'b0,pc_fw2|1},index);
12826 in_wmr <= 0;
12827 end // }
12828 else
12829 push_delta_prev_async ( `PC+`CTL_OFFSET,{16'b0,pc_fw2},index);
12830 pc_last <= pc_fw2;
12831 cwp_last <= cwp_fw2;
12832 end
12833endtask
12834
12835//----------------------------------------------------------
12836//----------------------------------------------------------
12837// Compare with current state and capture if different
12838task push_delta_fx4;
12839
12840 input [7:0] id;
12841 input [63:0] act_value;
12842 inout [7:0] next;
12843 reg [2:0] win;
12844 reg [1:0] type;
12845
12846 begin // {
12847 if (act_value != read_prev(id)) begin // { // Diff vs prev
12848 calc_cwp(CWP_reg,id,win,type); // special case for 1st stage
12849 write_prev(id,act_value);
12850
12851 `ifndef EMUL_TL
12852 delta_fx4[next] <= {type,win,id,act_value};
12853 next = next+1;
12854 delta_fx4[next] <= 77'hx;
12855 delta_fx4[`NEXT_INDEX] <= next;
12856 if (`PARGS.axis_debug_on) begin
12857 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
12858 mytnum,PC_reg,id,type,win,act_value,$time);
12859 end
12860 `else
12861 if (`PARGS.axis_debug_on) begin
12862 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
12863 mytnum,PC_reg,id,type,win,act_value,$time);
12864 end
12865 `endif
12866 end //}
12867 end //}
12868
12869endtask
12870
12871//----------------------------------------------------------
12872// Compare with current state and capture if different
12873task push_delta_fx5;
12874
12875 input [7:0] id;
12876 input [63:0] act_value;
12877 inout [7:0] next;
12878 reg [2:0] win;
12879 reg [1:0] type;
12880
12881 begin // {
12882 if (act_value != read_prev(id)) begin // { // Diff vs prev
12883 `ifndef EMUL_TL
12884 calc_cwp(delta_fx4[`CWP_INDEX],id,win,type);
12885 write_prev(id,act_value);
12886 delta_fx5[next] <= {type,win,id,act_value};
12887 next = next+1;
12888 delta_fx5[next] <= 77'hx;
12889 delta_fx5[`NEXT_INDEX] <= next;
12890 if (`PARGS.axis_debug_on) begin
12891 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
12892 mytnum,pc_fx4,id,type,win,act_value,$time);
12893 end
12894 `else
12895 calc_cwp(cwp_fx4,id,win,type);
12896 if (`PARGS.axis_debug_on) begin
12897 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
12898 mytnum,pc_fx4,id,type,win,act_value,$time);
12899 end
12900 `endif
12901 end //}
12902 end //}
12903
12904endtask
12905
12906//----------------------------------------------------------
12907// Compare with current state and capture if different
12908task push_delta_fb;
12909
12910 input [7:0] id;
12911 input [63:0] act_value;
12912 inout [7:0] next;
12913 reg [2:0] win;
12914 reg [1:0] type;
12915
12916 begin // {
12917 if (act_value != read_prev(id)) begin // { // Diff vs prev
12918 `ifndef EMUL_TL
12919 calc_cwp(delta_fx5[`CWP_INDEX],id,win,type);
12920 write_prev(id,act_value);
12921 delta_fb[next] <= {type,win,id,act_value};
12922 next = next+1;
12923 delta_fb[next] <= 77'hx;
12924 delta_fb[`NEXT_INDEX] <= next;
12925 if (`PARGS.axis_debug_on) begin
12926 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
12927 mytnum,pc_fx5,id,type,win,act_value,$time);
12928 end
12929 `else
12930 calc_cwp(cwp_fx5,id,win,type);
12931 if (`PARGS.axis_debug_on) begin
12932 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
12933 mytnum,pc_fx5,id,type,win,act_value,$time);
12934 end
12935 `endif
12936 end //}
12937 end //}
12938
12939endtask
12940
12941//----------------------------------------------------------
12942// Compare with current state and capture if different
12943task push_delta_fw;
12944
12945 input [7:0] id;
12946 input [63:0] act_value;
12947 inout [7:0] next;
12948 reg [2:0] win;
12949 reg [1:0] type;
12950
12951 begin // {
12952 if (act_value != read_prev(id)) begin // { // Diff vs prev
12953
12954 `ifndef EMUL_TL
12955 calc_cwp(delta_fb[`CWP_INDEX],id,win,type);
12956 write_prev(id,act_value);
12957 delta_fw[next] <= {type,win,id,act_value};
12958 next = next+1;
12959 delta_fw[next] <= 77'hx;
12960 delta_fw[`NEXT_INDEX] <= next;
12961 if (`PARGS.axis_debug_on) begin
12962 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
12963 mytnum,pc_fb,id,type,win,act_value,$time);
12964 end
12965 `else
12966 calc_cwp(cwp_fb[`CWP_INDEX],id,win,type);
12967 if (`PARGS.axis_debug_on) begin
12968 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
12969 mytnum,pc_fb,id,type,win,act_value,$time);
12970 end
12971 `endif
12972 end //}
12973 end //}
12974
12975endtask
12976
12977//----------------------------------------------------------
12978// Compare with current state and capture if different
12979task push_delta_fw1;
12980
12981 input [7:0] id;
12982 input [63:0] act_value;
12983 inout [7:0] next;
12984 reg [2:0] win;
12985 reg [1:0] type;
12986
12987 begin // {
12988 if (act_value != read_prev(id)) begin // { // Diff vs prev
12989
12990 `ifndef EMUL_TL
12991 calc_cwp(delta_fw[`CWP_INDEX],id,win,type);
12992 write_prev(id,act_value);
12993 delta_fw1[next] <= {type,win,id,act_value};
12994 next = next+1;
12995 delta_fw1[next] <= 77'hx;
12996 delta_fw1[`NEXT_INDEX] <= next;
12997 if (`PARGS.axis_debug_on) begin
12998 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
12999 mytnum,pc_fw,id,type,win,act_value,$time);
13000 end
13001 `else
13002 calc_cwp(cwp_fw,id,win,type);
13003 if (`PARGS.axis_debug_on) begin
13004 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
13005 mytnum,pc_fw,id,type,win,act_value,$time);
13006 end
13007 `endif
13008 end //}
13009 end //}
13010
13011endtask
13012
13013//----------------------------------------------------------
13014// Compare with current state and capture if different
13015task push_delta_fw2;
13016
13017 input [7:0] id;
13018 input [63:0] act_value;
13019 inout [7:0] next;
13020 reg [2:0] win;
13021 reg [1:0] type;
13022
13023 begin // {
13024 if (act_value != read_prev(id)) begin // { // Diff vs prev
13025
13026 `ifndef EMUL_TL
13027 calc_cwp(delta_fw1[`CWP_INDEX],id,win,type);
13028 write_prev(id,act_value);
13029 delta_fw2[next] <= {type,win,id,act_value};
13030 next = next+1;
13031 delta_fw2[next] <= 77'hx;
13032 delta_fw2[`NEXT_INDEX] <= next;
13033 if (`PARGS.axis_debug_on) begin
13034 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
13035 mytnum,pc_fw1,id,type,win,act_value,$time);
13036 end
13037 `else
13038 calc_cwp(cwp_fw1,id,win,type);
13039 if (`PARGS.axis_debug_on) begin
13040 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
13041 mytnum,pc_fw1,id,type,win,act_value,$time);
13042 end
13043 `endif
13044 end //}
13045 end //}
13046
13047endtask
13048
13049//----------------------------------------------------------
13050// Compare with current state and capture if different
13051// This is for late changing registers
13052// Use blocking assignments.
13053task push_delta_fw2_async;
13054
13055 input [7:0] id;
13056 input [63:0] act_value;
13057 inout [7:0] next;
13058 reg [2:0] win;
13059 reg [1:0] type;
13060
13061 begin // {
13062 if (act_value != read_prev(id)) begin // { // Diff vs prev
13063
13064 `ifndef EMUL_TL
13065 calc_cwp(delta_fw2[`CWP_INDEX],id,win,type);
13066 write_prev_async(id,act_value);
13067 delta_fw2[next] = {type,win,id,act_value};
13068 next = next+1;
13069 delta_fw2[next] = 77'hx;
13070 delta_fw2[`NEXT_INDEX] = next;
13071 if (`PARGS.axis_debug_on) begin
13072 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
13073 mytnum,pc_fw1,id,type,win,act_value,$time);
13074 end
13075 `else
13076 calc_cwp(cwp_fw2,id,win,type);
13077 if (`PARGS.axis_debug_on) begin
13078 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
13079 mytnum,pc_fw1,id,type,win,act_value,$time);
13080 end
13081 `endif
13082 end //}
13083 end //}
13084
13085endtask
13086
13087
13088//----------------------------------------------------------
13089// Compare with current state and capture if different
13090// Use blocking assignments so that push_simics will work
13091task push_delta_prev_async;
13092
13093 input [7:0] id;
13094 input [63:0] act_value;
13095 inout [7:0] next;
13096 reg [2:0] win;
13097 reg [1:0] type;
13098
13099 begin // {
13100
13101 if (act_value != read_prev(id)) begin // { // Diff vs prev
13102
13103 `ifndef EMUL_TL
13104 calc_cwp(delta_prev[`CWP_INDEX],id,win,type);
13105 write_prev_async(id,act_value);
13106 delta_prev[next] = {type,win,id,act_value};
13107 next = next+1;
13108 delta_prev[next] = 77'hx;
13109 delta_prev[`NEXT_INDEX] = next;
13110 if (`PARGS.axis_debug_on) begin
13111 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
13112 mytnum,pc_last,id,type,win,act_value,$time);
13113 end
13114 `else
13115 if (`PARGS.axis_debug_on) begin
13116 calc_cwp(cwp_last,id,win,type);
13117 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
13118 mytnum,pc_last,id,type,win,act_value,$time);
13119 end
13120 `endif
13121 end //}
13122 end //}
13123
13124endtask
13125
13126//----------------------------------------------------------
13127// prev of delta pipeline
13128task update_prev;
13129 integer i;
13130
13131 begin // {
13132 `ifndef EMUL_TL
13133 //--------------------
13134 // Pipeline previous stage
13135 for (i=0; i<=delta_fw2[`NEXT_INDEX]; i=i+1) begin // {
13136 delta_prev[i] <= delta_fw2[i];
13137 end
13138 `endif
13139 end //}
13140
13141endtask
13142
13143//----------------------------------------------------------
13144//----------------------------------------------------------
13145// Sort delta list in register ID order, then push to simics
13146// Or print deltas if sas check disabled ..
13147task push_simics;
13148
13149integer i;
13150reg [7:0] act_type;
13151integer act_level;
13152reg [7:0] regnum;
13153reg [2:0] win;
13154reg [1:0] type;
13155reg [63:0] value;
13156reg [63:0] pc;
13157reg [63:0] time_fw2;
13158
13159 begin // {
13160
13161 `ifndef EMUL_TL
13162 `NASTOP.delta_cnt = 0;
13163 sort_delta;
13164
13165 //--------------------
13166 // Order of registers reported to simics must be:
13167 // Global 0-7 aka prev_reg[0:7]
13168 // Window 8-23 aka prev_reg[8:23]
13169 // Floating 0-63 aka prev_reg[200:263]
13170 // Control 32-143 aka prev_reg[32:143]
13171
13172 act_level = delta_prev[`GL_INDEX]; // GL
13173 time_fw2 = delta_prev[`TIME_INDEX]; // Finish time
13174
13175
13176 //--------------------
13177 for (i=`FIRST_INDEX; i<delta_prev[`NEXT_INDEX]; i=i+1) begin // {
13178 {type,win,regnum,value} = delta_prev[i];
13179
13180 if (regnum<=7) begin // {
13181 act_type = "G";
13182 if (`PARGS.nas_check_on) begin // {
13183 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
13184 act_level, regnum, value);
13185 end // }
13186 else if (`PARGS.show_delta_on) begin // {
13187 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
13188 end //}
13189 end // }
13190 else if (regnum<=23) begin // { %o0-%l7, %l0-%l7
13191 act_type = "W";
13192 if (`PARGS.nas_check_on) begin // {
13193 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
13194 win, regnum, value);
13195 end // }
13196 else if (`PARGS.show_delta_on) begin // {
13197 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
13198 end //}
13199 end // }
13200 else if (regnum<=31) begin // { %i0-%i7
13201 act_type = "W";
13202 if (`PARGS.nas_check_on) begin // {
13203 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
13204 win, (regnum-16), value);
13205 end // }
13206 else if (`PARGS.show_delta_on) begin // {
13207 `NASTOP.print_delta (mytnum,act_type,win,(regnum-16),value);
13208 end //}
13209 end // }
13210 else if (regnum<=(64+`FP_OFFSET)) begin // {
13211 act_type = "F";
13212 if (`PARGS.nas_check_on) begin // {
13213 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
13214 (regnum-`FP_OFFSET), value);
13215 end // }
13216 else if (`PARGS.show_delta_on) begin // {
13217 `NASTOP.print_delta (mytnum,act_type,win,(regnum-`FP_OFFSET),value);
13218 end //}
13219 end // }
13220 else if ((regnum>=(32+`CTL_OFFSET))&(regnum<=(143+`CTL_OFFSET))) begin // {
13221 act_type = "C";
13222 if (`PARGS.nas_check_on) begin // {
13223 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
13224 (regnum-`CTL_OFFSET), value);
13225 end //}
13226 else if (`PARGS.show_delta_on) begin // {
13227 `NASTOP.print_delta (mytnum,act_type,win,(regnum-`CTL_OFFSET),value);
13228 end //}
13229 end // }
13230 else begin // {
13231 `PR_ERROR ("nas", `ERROR, " - T%0d Bench problem. push_simics has bad regnum", mytnum);
13232 end // }
13233 end // }
13234
13235 //--------------------
13236 // Push Opcode
13237 act_type = "C";
13238 regnum = `OPCODE;
13239 value = delta_prev[`OPCODE_INDEX];
13240 if (`PARGS.nas_check_on) begin // {
13241 `ifdef OPCODE_COMPARE
13242 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
13243 regnum, value);
13244 `endif
13245 end //}
13246 else if (`PARGS.show_delta_on) begin // {
13247 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
13248 end //}
13249
13250
13251 //--------------------
13252 // Push End of Instruction Delimiter
13253 // The value field for this PUSH equals the PC for this instruction.
13254 // so that printing to the logfile works correctly.
13255 // prev_reg[`PC] = current instruction PC
13256 // delta_reg[`PC] = PC at end of current instruction
13257 act_type = "X";
13258 pc = delta_prev[`PC_INDEX];
13259 if (`PARGS.nas_check_on) begin // {
13260 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
13261 delta_fw2[`CWP_INDEX], `END_INSTR, pc);
13262 end // }
13263 else if (`PARGS.show_delta_on) begin // {
13264 `NASTOP.print_delta (mytnum,act_type,delta_fw2[`CWP_INDEX],`END_INSTR,0);
13265 end //}
13266 if (! `PARGS.nas_check_on) begin // {
13267 `PR_NORMAL ("nas", `NORMAL, "@%0d T%0d %h (Unchecked..)",
13268 $time, mytnum, {16'b0,pc});
13269 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
13270 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
13271 end //}
13272
13273 `else
13274 if (! `PARGS.nas_check_on) begin // {
13275 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
13276 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
13277 end //}
13278 `endif
13279 end // }
13280endtask
13281
13282
13283//----------------------------------------------------------
13284// Save current window to previous window, then copy new window to current window
13285task copy_win;
13286 input [2:0] new_cwp;
13287 input [2:0] old_cwp;
13288 integer i;
13289
13290 begin // {
13291
13292 // Save current window to Old window
13293 case (old_cwp)
13294 0: begin // {
13295 win0_reg8 = prev_reg8;
13296 win1_reg24 = prev_reg8;
13297 win0_reg9 = prev_reg9;
13298 win1_reg25 = prev_reg9;
13299 win0_reg10 = prev_reg10;
13300 win1_reg26 = prev_reg10;
13301 win0_reg11 = prev_reg11;
13302 win1_reg27 = prev_reg11;
13303 win0_reg12 = prev_reg12;
13304 win1_reg28 = prev_reg12;
13305 win0_reg13 = prev_reg13;
13306 win1_reg29 = prev_reg13;
13307 win0_reg14 = prev_reg14;
13308 win1_reg30 = prev_reg14;
13309 win0_reg15 = prev_reg15;
13310 win1_reg31 = prev_reg15;
13311 win0_reg16 = prev_reg16;
13312 win0_reg17 = prev_reg17;
13313 win0_reg18 = prev_reg18;
13314 win0_reg19 = prev_reg19;
13315 win0_reg20 = prev_reg20;
13316 win0_reg21 = prev_reg21;
13317 win0_reg22 = prev_reg22;
13318 win0_reg23 = prev_reg23;
13319 win0_reg24 = prev_reg24;
13320 win7_reg8 = prev_reg24;
13321 win0_reg25 = prev_reg25;
13322 win7_reg9 = prev_reg25;
13323 win0_reg26 = prev_reg26;
13324 win7_reg10 = prev_reg26;
13325 win0_reg27 = prev_reg27;
13326 win7_reg11 = prev_reg27;
13327 win0_reg28 = prev_reg28;
13328 win7_reg12 = prev_reg28;
13329 win0_reg29 = prev_reg29;
13330 win7_reg13 = prev_reg29;
13331 win0_reg30 = prev_reg30;
13332 win7_reg14 = prev_reg30;
13333 win0_reg31 = prev_reg31;
13334 win7_reg15 = prev_reg31;
13335 end // }
13336 1: begin // {
13337 win1_reg8 = prev_reg8;
13338 win2_reg24 = prev_reg8;
13339 win1_reg9 = prev_reg9;
13340 win2_reg25 = prev_reg9;
13341 win1_reg10 = prev_reg10;
13342 win2_reg26 = prev_reg10;
13343 win1_reg11 = prev_reg11;
13344 win2_reg27 = prev_reg11;
13345 win1_reg12 = prev_reg12;
13346 win2_reg28 = prev_reg12;
13347 win1_reg13 = prev_reg13;
13348 win2_reg29 = prev_reg13;
13349 win1_reg14 = prev_reg14;
13350 win2_reg30 = prev_reg14;
13351 win1_reg15 = prev_reg15;
13352 win2_reg31 = prev_reg15;
13353 win1_reg16 = prev_reg16;
13354 win1_reg17 = prev_reg17;
13355 win1_reg18 = prev_reg18;
13356 win1_reg19 = prev_reg19;
13357 win1_reg20 = prev_reg20;
13358 win1_reg21 = prev_reg21;
13359 win1_reg22 = prev_reg22;
13360 win1_reg23 = prev_reg23;
13361 win1_reg24 = prev_reg24;
13362 win0_reg8 = prev_reg24;
13363 win1_reg25 = prev_reg25;
13364 win0_reg9 = prev_reg25;
13365 win1_reg26 = prev_reg26;
13366 win0_reg10 = prev_reg26;
13367 win1_reg27 = prev_reg27;
13368 win0_reg11 = prev_reg27;
13369 win1_reg28 = prev_reg28;
13370 win0_reg12 = prev_reg28;
13371 win1_reg29 = prev_reg29;
13372 win0_reg13 = prev_reg29;
13373 win1_reg30 = prev_reg30;
13374 win0_reg14 = prev_reg30;
13375 win1_reg31 = prev_reg31;
13376 win0_reg15 = prev_reg31;
13377 end // }
13378 2: begin // {
13379 win2_reg8 = prev_reg8;
13380 win3_reg24 = prev_reg8;
13381 win2_reg9 = prev_reg9;
13382 win3_reg25 = prev_reg9;
13383 win2_reg10 = prev_reg10;
13384 win3_reg26 = prev_reg10;
13385 win2_reg11 = prev_reg11;
13386 win3_reg27 = prev_reg11;
13387 win2_reg12 = prev_reg12;
13388 win3_reg28 = prev_reg12;
13389 win2_reg13 = prev_reg13;
13390 win3_reg29 = prev_reg13;
13391 win2_reg14 = prev_reg14;
13392 win3_reg30 = prev_reg14;
13393 win2_reg15 = prev_reg15;
13394 win3_reg31 = prev_reg15;
13395 win2_reg16 = prev_reg16;
13396 win2_reg17 = prev_reg17;
13397 win2_reg18 = prev_reg18;
13398 win2_reg19 = prev_reg19;
13399 win2_reg20 = prev_reg20;
13400 win2_reg21 = prev_reg21;
13401 win2_reg22 = prev_reg22;
13402 win2_reg23 = prev_reg23;
13403 win2_reg24 = prev_reg24;
13404 win1_reg8 = prev_reg24;
13405 win2_reg25 = prev_reg25;
13406 win1_reg9 = prev_reg25;
13407 win2_reg26 = prev_reg26;
13408 win1_reg10 = prev_reg26;
13409 win2_reg27 = prev_reg27;
13410 win1_reg11 = prev_reg27;
13411 win2_reg28 = prev_reg28;
13412 win1_reg12 = prev_reg28;
13413 win2_reg29 = prev_reg29;
13414 win1_reg13 = prev_reg29;
13415 win2_reg30 = prev_reg30;
13416 win1_reg14 = prev_reg30;
13417 win2_reg31 = prev_reg31;
13418 win1_reg15 = prev_reg31;
13419 end // }
13420 3: begin // {
13421 win3_reg8 = prev_reg8;
13422 win4_reg24 = prev_reg8;
13423 win3_reg9 = prev_reg9;
13424 win4_reg25 = prev_reg9;
13425 win3_reg10 = prev_reg10;
13426 win4_reg26 = prev_reg10;
13427 win3_reg11 = prev_reg11;
13428 win4_reg27 = prev_reg11;
13429 win3_reg12 = prev_reg12;
13430 win4_reg28 = prev_reg12;
13431 win3_reg13 = prev_reg13;
13432 win4_reg29 = prev_reg13;
13433 win3_reg14 = prev_reg14;
13434 win4_reg30 = prev_reg14;
13435 win3_reg15 = prev_reg15;
13436 win4_reg31 = prev_reg15;
13437 win3_reg16 = prev_reg16;
13438 win3_reg17 = prev_reg17;
13439 win3_reg18 = prev_reg18;
13440 win3_reg19 = prev_reg19;
13441 win3_reg20 = prev_reg20;
13442 win3_reg21 = prev_reg21;
13443 win3_reg22 = prev_reg22;
13444 win3_reg23 = prev_reg23;
13445 win3_reg24 = prev_reg24;
13446 win2_reg8 = prev_reg24;
13447 win3_reg25 = prev_reg25;
13448 win2_reg9 = prev_reg25;
13449 win3_reg26 = prev_reg26;
13450 win2_reg10 = prev_reg26;
13451 win3_reg27 = prev_reg27;
13452 win2_reg11 = prev_reg27;
13453 win3_reg28 = prev_reg28;
13454 win2_reg12 = prev_reg28;
13455 win3_reg29 = prev_reg29;
13456 win2_reg13 = prev_reg29;
13457 win3_reg30 = prev_reg30;
13458 win2_reg14 = prev_reg30;
13459 win3_reg31 = prev_reg31;
13460 win2_reg15 = prev_reg31;
13461 end // }
13462 4: begin // {
13463 win4_reg8 = prev_reg8;
13464 win5_reg24 = prev_reg8;
13465 win4_reg9 = prev_reg9;
13466 win5_reg25 = prev_reg9;
13467 win4_reg10 = prev_reg10;
13468 win5_reg26 = prev_reg10;
13469 win4_reg11 = prev_reg11;
13470 win5_reg27 = prev_reg11;
13471 win4_reg12 = prev_reg12;
13472 win5_reg28 = prev_reg12;
13473 win4_reg13 = prev_reg13;
13474 win5_reg29 = prev_reg13;
13475 win4_reg14 = prev_reg14;
13476 win5_reg30 = prev_reg14;
13477 win4_reg15 = prev_reg15;
13478 win5_reg31 = prev_reg15;
13479 win4_reg16 = prev_reg16;
13480 win4_reg17 = prev_reg17;
13481 win4_reg18 = prev_reg18;
13482 win4_reg19 = prev_reg19;
13483 win4_reg20 = prev_reg20;
13484 win4_reg21 = prev_reg21;
13485 win4_reg22 = prev_reg22;
13486 win4_reg23 = prev_reg23;
13487 win4_reg24 = prev_reg24;
13488 win3_reg8 = prev_reg24;
13489 win4_reg25 = prev_reg25;
13490 win3_reg9 = prev_reg25;
13491 win4_reg26 = prev_reg26;
13492 win3_reg10 = prev_reg26;
13493 win4_reg27 = prev_reg27;
13494 win3_reg11 = prev_reg27;
13495 win4_reg28 = prev_reg28;
13496 win3_reg12 = prev_reg28;
13497 win4_reg29 = prev_reg29;
13498 win3_reg13 = prev_reg29;
13499 win4_reg30 = prev_reg30;
13500 win3_reg14 = prev_reg30;
13501 win4_reg31 = prev_reg31;
13502 win3_reg15 = prev_reg31;
13503 end // }
13504 5: begin // {
13505 win5_reg8 = prev_reg8;
13506 win6_reg24 = prev_reg8;
13507 win5_reg9 = prev_reg9;
13508 win6_reg25 = prev_reg9;
13509 win5_reg10 = prev_reg10;
13510 win6_reg26 = prev_reg10;
13511 win5_reg11 = prev_reg11;
13512 win6_reg27 = prev_reg11;
13513 win5_reg12 = prev_reg12;
13514 win6_reg28 = prev_reg12;
13515 win5_reg13 = prev_reg13;
13516 win6_reg29 = prev_reg13;
13517 win5_reg14 = prev_reg14;
13518 win6_reg30 = prev_reg14;
13519 win5_reg15 = prev_reg15;
13520 win6_reg31 = prev_reg15;
13521 win5_reg16 = prev_reg16;
13522 win5_reg17 = prev_reg17;
13523 win5_reg18 = prev_reg18;
13524 win5_reg19 = prev_reg19;
13525 win5_reg20 = prev_reg20;
13526 win5_reg21 = prev_reg21;
13527 win5_reg22 = prev_reg22;
13528 win5_reg23 = prev_reg23;
13529 win5_reg24 = prev_reg24;
13530 win4_reg8 = prev_reg24;
13531 win5_reg25 = prev_reg25;
13532 win4_reg9 = prev_reg25;
13533 win5_reg26 = prev_reg26;
13534 win4_reg10 = prev_reg26;
13535 win5_reg27 = prev_reg27;
13536 win4_reg11 = prev_reg27;
13537 win5_reg28 = prev_reg28;
13538 win4_reg12 = prev_reg28;
13539 win5_reg29 = prev_reg29;
13540 win4_reg13 = prev_reg29;
13541 win5_reg30 = prev_reg30;
13542 win4_reg14 = prev_reg30;
13543 win5_reg31 = prev_reg31;
13544 win4_reg15 = prev_reg31;
13545 end // }
13546 6: begin // {
13547 win6_reg8 = prev_reg8;
13548 win7_reg24 = prev_reg8;
13549 win6_reg9 = prev_reg9;
13550 win7_reg25 = prev_reg9;
13551 win6_reg10 = prev_reg10;
13552 win7_reg26 = prev_reg10;
13553 win6_reg11 = prev_reg11;
13554 win7_reg27 = prev_reg11;
13555 win6_reg12 = prev_reg12;
13556 win7_reg28 = prev_reg12;
13557 win6_reg13 = prev_reg13;
13558 win7_reg29 = prev_reg13;
13559 win6_reg14 = prev_reg14;
13560 win7_reg30 = prev_reg14;
13561 win6_reg15 = prev_reg15;
13562 win7_reg31 = prev_reg15;
13563 win6_reg16 = prev_reg16;
13564 win6_reg17 = prev_reg17;
13565 win6_reg18 = prev_reg18;
13566 win6_reg19 = prev_reg19;
13567 win6_reg20 = prev_reg20;
13568 win6_reg21 = prev_reg21;
13569 win6_reg22 = prev_reg22;
13570 win6_reg23 = prev_reg23;
13571 win6_reg24 = prev_reg24;
13572 win5_reg8 = prev_reg24;
13573 win6_reg25 = prev_reg25;
13574 win5_reg9 = prev_reg25;
13575 win6_reg26 = prev_reg26;
13576 win5_reg10 = prev_reg26;
13577 win6_reg27 = prev_reg27;
13578 win5_reg11 = prev_reg27;
13579 win6_reg28 = prev_reg28;
13580 win5_reg12 = prev_reg28;
13581 win6_reg29 = prev_reg29;
13582 win5_reg13 = prev_reg29;
13583 win6_reg30 = prev_reg30;
13584 win5_reg14 = prev_reg30;
13585 win6_reg31 = prev_reg31;
13586 win5_reg15 = prev_reg31;
13587 end // }
13588 7: begin // {
13589 win7_reg8 = prev_reg8;
13590 win0_reg24 = prev_reg8;
13591 win7_reg9 = prev_reg9;
13592 win0_reg25 = prev_reg9;
13593 win7_reg10 = prev_reg10;
13594 win0_reg26 = prev_reg10;
13595 win7_reg11 = prev_reg11;
13596 win0_reg27 = prev_reg11;
13597 win7_reg12 = prev_reg12;
13598 win0_reg28 = prev_reg12;
13599 win7_reg13 = prev_reg13;
13600 win0_reg29 = prev_reg13;
13601 win7_reg14 = prev_reg14;
13602 win0_reg30 = prev_reg14;
13603 win7_reg15 = prev_reg15;
13604 win0_reg31 = prev_reg15;
13605 win7_reg16 = prev_reg16;
13606 win7_reg17 = prev_reg17;
13607 win7_reg18 = prev_reg18;
13608 win7_reg19 = prev_reg19;
13609 win7_reg20 = prev_reg20;
13610 win7_reg21 = prev_reg21;
13611 win7_reg22 = prev_reg22;
13612 win7_reg23 = prev_reg23;
13613 win7_reg24 = prev_reg24;
13614 win6_reg8 = prev_reg24;
13615 win7_reg25 = prev_reg25;
13616 win6_reg9 = prev_reg25;
13617 win7_reg26 = prev_reg26;
13618 win6_reg10 = prev_reg26;
13619 win7_reg27 = prev_reg27;
13620 win6_reg11 = prev_reg27;
13621 win7_reg28 = prev_reg28;
13622 win6_reg12 = prev_reg28;
13623 win7_reg29 = prev_reg29;
13624 win6_reg13 = prev_reg29;
13625 win7_reg30 = prev_reg30;
13626 win6_reg14 = prev_reg30;
13627 win7_reg31 = prev_reg31;
13628 win6_reg15 = prev_reg31;
13629 end // }
13630
13631 endcase
13632
13633 // Copy New window to current window
13634 case (new_cwp)
13635 0: begin // {
13636 prev_reg8 = win0_reg8;
13637 prev_reg9 = win0_reg9;
13638 prev_reg10 = win0_reg10;
13639 prev_reg11 = win0_reg11;
13640 prev_reg12 = win0_reg12;
13641 prev_reg13 = win0_reg13;
13642 prev_reg14 = win0_reg14;
13643 prev_reg15 = win0_reg15;
13644 prev_reg16 = win0_reg16;
13645 prev_reg17 = win0_reg17;
13646 prev_reg18 = win0_reg18;
13647 prev_reg19 = win0_reg19;
13648 prev_reg20 = win0_reg20;
13649 prev_reg21 = win0_reg21;
13650 prev_reg22 = win0_reg22;
13651 prev_reg23 = win0_reg23;
13652 prev_reg24 = win0_reg24;
13653 prev_reg25 = win0_reg25;
13654 prev_reg26 = win0_reg26;
13655 prev_reg27 = win0_reg27;
13656 prev_reg28 = win0_reg28;
13657 prev_reg29 = win0_reg29;
13658 prev_reg30 = win0_reg30;
13659 prev_reg31 = win0_reg31;
13660 end // }
13661
13662 1: begin // {
13663 prev_reg8 = win1_reg8;
13664 prev_reg9 = win1_reg9;
13665 prev_reg10 = win1_reg10;
13666 prev_reg11 = win1_reg11;
13667 prev_reg12 = win1_reg12;
13668 prev_reg13 = win1_reg13;
13669 prev_reg14 = win1_reg14;
13670 prev_reg15 = win1_reg15;
13671 prev_reg16 = win1_reg16;
13672 prev_reg17 = win1_reg17;
13673 prev_reg18 = win1_reg18;
13674 prev_reg19 = win1_reg19;
13675 prev_reg20 = win1_reg20;
13676 prev_reg21 = win1_reg21;
13677 prev_reg22 = win1_reg22;
13678 prev_reg23 = win1_reg23;
13679 prev_reg24 = win1_reg24;
13680 prev_reg25 = win1_reg25;
13681 prev_reg26 = win1_reg26;
13682 prev_reg27 = win1_reg27;
13683 prev_reg28 = win1_reg28;
13684 prev_reg29 = win1_reg29;
13685 prev_reg30 = win1_reg30;
13686 prev_reg31 = win1_reg31;
13687 end // }
13688
13689 2: begin // {
13690 prev_reg8 = win2_reg8;
13691 prev_reg9 = win2_reg9;
13692 prev_reg10 = win2_reg10;
13693 prev_reg11 = win2_reg11;
13694 prev_reg12 = win2_reg12;
13695 prev_reg13 = win2_reg13;
13696 prev_reg14 = win2_reg14;
13697 prev_reg15 = win2_reg15;
13698 prev_reg16 = win2_reg16;
13699 prev_reg17 = win2_reg17;
13700 prev_reg18 = win2_reg18;
13701 prev_reg19 = win2_reg19;
13702 prev_reg20 = win2_reg20;
13703 prev_reg21 = win2_reg21;
13704 prev_reg22 = win2_reg22;
13705 prev_reg23 = win2_reg23;
13706 prev_reg24 = win2_reg24;
13707 prev_reg25 = win2_reg25;
13708 prev_reg26 = win2_reg26;
13709 prev_reg27 = win2_reg27;
13710 prev_reg28 = win2_reg28;
13711 prev_reg29 = win2_reg29;
13712 prev_reg30 = win2_reg30;
13713 prev_reg31 = win2_reg31;
13714 end // }
13715
13716 3: begin // {
13717 prev_reg8 = win3_reg8;
13718 prev_reg9 = win3_reg9;
13719 prev_reg10 = win3_reg10;
13720 prev_reg11 = win3_reg11;
13721 prev_reg12 = win3_reg12;
13722 prev_reg13 = win3_reg13;
13723 prev_reg14 = win3_reg14;
13724 prev_reg15 = win3_reg15;
13725 prev_reg16 = win3_reg16;
13726 prev_reg17 = win3_reg17;
13727 prev_reg18 = win3_reg18;
13728 prev_reg19 = win3_reg19;
13729 prev_reg20 = win3_reg20;
13730 prev_reg21 = win3_reg21;
13731 prev_reg22 = win3_reg22;
13732 prev_reg23 = win3_reg23;
13733 prev_reg24 = win3_reg24;
13734 prev_reg25 = win3_reg25;
13735 prev_reg26 = win3_reg26;
13736 prev_reg27 = win3_reg27;
13737 prev_reg28 = win3_reg28;
13738 prev_reg29 = win3_reg29;
13739 prev_reg30 = win3_reg30;
13740 prev_reg31 = win3_reg31;
13741 end // }
13742
13743 4: begin // {
13744 prev_reg8 = win4_reg8;
13745 prev_reg9 = win4_reg9;
13746 prev_reg10 = win4_reg10;
13747 prev_reg11 = win4_reg11;
13748 prev_reg12 = win4_reg12;
13749 prev_reg13 = win4_reg13;
13750 prev_reg14 = win4_reg14;
13751 prev_reg15 = win4_reg15;
13752 prev_reg16 = win4_reg16;
13753 prev_reg17 = win4_reg17;
13754 prev_reg18 = win4_reg18;
13755 prev_reg19 = win4_reg19;
13756 prev_reg20 = win4_reg20;
13757 prev_reg21 = win4_reg21;
13758 prev_reg22 = win4_reg22;
13759 prev_reg23 = win4_reg23;
13760 prev_reg24 = win4_reg24;
13761 prev_reg25 = win4_reg25;
13762 prev_reg26 = win4_reg26;
13763 prev_reg27 = win4_reg27;
13764 prev_reg28 = win4_reg28;
13765 prev_reg29 = win4_reg29;
13766 prev_reg30 = win4_reg30;
13767 prev_reg31 = win4_reg31;
13768 end // }
13769
13770 5: begin // {
13771 prev_reg8 = win5_reg8;
13772 prev_reg9 = win5_reg9;
13773 prev_reg10 = win5_reg10;
13774 prev_reg11 = win5_reg11;
13775 prev_reg12 = win5_reg12;
13776 prev_reg13 = win5_reg13;
13777 prev_reg14 = win5_reg14;
13778 prev_reg15 = win5_reg15;
13779 prev_reg16 = win5_reg16;
13780 prev_reg17 = win5_reg17;
13781 prev_reg18 = win5_reg18;
13782 prev_reg19 = win5_reg19;
13783 prev_reg20 = win5_reg20;
13784 prev_reg21 = win5_reg21;
13785 prev_reg22 = win5_reg22;
13786 prev_reg23 = win5_reg23;
13787 prev_reg24 = win5_reg24;
13788 prev_reg25 = win5_reg25;
13789 prev_reg26 = win5_reg26;
13790 prev_reg27 = win5_reg27;
13791 prev_reg28 = win5_reg28;
13792 prev_reg29 = win5_reg29;
13793 prev_reg30 = win5_reg30;
13794 prev_reg31 = win5_reg31;
13795 end // }
13796
13797 6: begin // {
13798 prev_reg8 = win6_reg8;
13799 prev_reg9 = win6_reg9;
13800 prev_reg10 = win6_reg10;
13801 prev_reg11 = win6_reg11;
13802 prev_reg12 = win6_reg12;
13803 prev_reg13 = win6_reg13;
13804 prev_reg14 = win6_reg14;
13805 prev_reg15 = win6_reg15;
13806 prev_reg16 = win6_reg16;
13807 prev_reg17 = win6_reg17;
13808 prev_reg18 = win6_reg18;
13809 prev_reg19 = win6_reg19;
13810 prev_reg20 = win6_reg20;
13811 prev_reg21 = win6_reg21;
13812 prev_reg22 = win6_reg22;
13813 prev_reg23 = win6_reg23;
13814 prev_reg24 = win6_reg24;
13815 prev_reg25 = win6_reg25;
13816 prev_reg26 = win6_reg26;
13817 prev_reg27 = win6_reg27;
13818 prev_reg28 = win6_reg28;
13819 prev_reg29 = win6_reg29;
13820 prev_reg30 = win6_reg30;
13821 prev_reg31 = win6_reg31;
13822 end // }
13823
13824 7: begin // {
13825 prev_reg8 = win7_reg8;
13826 prev_reg9 = win7_reg9;
13827 prev_reg10 = win7_reg10;
13828 prev_reg11 = win7_reg11;
13829 prev_reg12 = win7_reg12;
13830 prev_reg13 = win7_reg13;
13831 prev_reg14 = win7_reg14;
13832 prev_reg15 = win7_reg15;
13833 prev_reg16 = win7_reg16;
13834 prev_reg17 = win7_reg17;
13835 prev_reg18 = win7_reg18;
13836 prev_reg19 = win7_reg19;
13837 prev_reg20 = win7_reg20;
13838 prev_reg21 = win7_reg21;
13839 prev_reg22 = win7_reg22;
13840 prev_reg23 = win7_reg23;
13841 prev_reg24 = win7_reg24;
13842 prev_reg25 = win7_reg25;
13843 prev_reg26 = win7_reg26;
13844 prev_reg27 = win7_reg27;
13845 prev_reg28 = win7_reg28;
13846 prev_reg29 = win7_reg29;
13847 prev_reg30 = win7_reg30;
13848 prev_reg31 = win7_reg31;
13849 end // }
13850
13851 endcase
13852 end // }
13853endtask
13854
13855//----------------------------------------------------------
13856// Save current global to previous global, then copy new global to current global
13857task copy_global;
13858 input [2:0] new_gl;
13859 input [2:0] old_gl;
13860 integer i;
13861
13862 begin // {
13863
13864 // Save current global to Old global
13865 case (old_gl)
13866 0: begin // {
13867 gl0_reg0 = prev_reg0;
13868 gl0_reg1 = prev_reg1;
13869 gl0_reg2 = prev_reg2;
13870 gl0_reg3 = prev_reg3;
13871 gl0_reg4 = prev_reg4;
13872 gl0_reg5 = prev_reg5;
13873 gl0_reg6 = prev_reg6;
13874 gl0_reg7 = prev_reg7;
13875 end // }
13876 1: begin // {
13877 gl1_reg0 = prev_reg0;
13878 gl1_reg1 = prev_reg1;
13879 gl1_reg2 = prev_reg2;
13880 gl1_reg3 = prev_reg3;
13881 gl1_reg4 = prev_reg4;
13882 gl1_reg5 = prev_reg5;
13883 gl1_reg6 = prev_reg6;
13884 gl1_reg7 = prev_reg7;
13885 end // }
13886 2: begin // {
13887 gl2_reg0 = prev_reg0;
13888 gl2_reg1 = prev_reg1;
13889 gl2_reg2 = prev_reg2;
13890 gl2_reg3 = prev_reg3;
13891 gl2_reg4 = prev_reg4;
13892 gl2_reg5 = prev_reg5;
13893 gl2_reg6 = prev_reg6;
13894 gl2_reg7 = prev_reg7;
13895 end // }
13896 3: begin // {
13897 gl3_reg0 = prev_reg0;
13898 gl3_reg1 = prev_reg1;
13899 gl3_reg2 = prev_reg2;
13900 gl3_reg3 = prev_reg3;
13901 gl3_reg4 = prev_reg4;
13902 gl3_reg5 = prev_reg5;
13903 gl3_reg6 = prev_reg6;
13904 gl3_reg7 = prev_reg7;
13905 end // }
13906 endcase
13907
13908 // Copy New global current global
13909 case (new_gl)
13910 0: begin // {
13911 prev_reg0 = gl0_reg0;
13912 prev_reg1 = gl0_reg1;
13913 prev_reg2 = gl0_reg2;
13914 prev_reg3 = gl0_reg3;
13915 prev_reg4 = gl0_reg4;
13916 prev_reg5 = gl0_reg5;
13917 prev_reg6 = gl0_reg6;
13918 prev_reg7 = gl0_reg7;
13919 end // }
13920
13921 1: begin // {
13922 prev_reg0 = gl1_reg0;
13923 prev_reg1 = gl1_reg1;
13924 prev_reg2 = gl1_reg2;
13925 prev_reg3 = gl1_reg3;
13926 prev_reg4 = gl1_reg4;
13927 prev_reg5 = gl1_reg5;
13928 prev_reg6 = gl1_reg6;
13929 prev_reg7 = gl1_reg7;
13930 end // }
13931
13932 2: begin // {
13933 prev_reg0 = gl2_reg0;
13934 prev_reg1 = gl2_reg1;
13935 prev_reg2 = gl2_reg2;
13936 prev_reg3 = gl2_reg3;
13937 prev_reg4 = gl2_reg4;
13938 prev_reg5 = gl2_reg5;
13939 prev_reg6 = gl2_reg6;
13940 prev_reg7 = gl2_reg7;
13941 end // }
13942
13943 3: begin // {
13944 prev_reg0 = gl3_reg0;
13945 prev_reg1 = gl3_reg1;
13946 prev_reg2 = gl3_reg2;
13947 prev_reg3 = gl3_reg3;
13948 prev_reg4 = gl3_reg4;
13949 prev_reg5 = gl3_reg5;
13950 prev_reg6 = gl3_reg6;
13951 prev_reg7 = gl3_reg7;
13952 end // }
13953
13954 endcase
13955 end // }
13956endtask
13957
13958//----------------------------------------------------------
13959// Return window number and register type based on cwp and regnum as input
13960task calc_cwp;
13961 input [2:0] cwp;
13962 input [7:0] id;
13963 output [2:0] win;
13964 output [1:0] type;
13965
13966 begin // {
13967 if (id<=7) begin // {
13968 type = `G_TYPE;
13969 win = cwp;
13970 end // }
13971 else if (id<=23) begin // {
13972 type = `W_TYPE;
13973 win = cwp;
13974 end // }
13975 else if (id<=31) begin // {
13976 type = `W_TYPE;
13977 if (cwp == 0) begin // {
13978 win = 7;
13979 end // }
13980 else begin // {
13981 win = cwp-1;
13982 end // }
13983 end // }
13984 else if (id<=(64+`FP_OFFSET)) begin // {
13985 type = `F_TYPE;
13986 win = cwp;
13987 end // }
13988 else begin // {
13989 type = `C_TYPE;
13990 win = cwp;
13991 end // }
13992 end // }
13993endtask
13994
13995//----------------------------------------------------------
13996// Check for bad signal values
13997task check_values;
13998
13999 begin // {
14000
14001 //--------------------
14002 casex (complete_fw2)
14003 8'b00000000,
14004 8'b00000001,
14005 8'b00000010,
14006 8'b00000100,
14007 8'b00001000,
14008 8'b00010000,
14009 8'b00100000,
14010 8'b01000000,
14011 8'b10000000: ; // good value
14012 default: begin // {
14013 `PR_ERROR ("nas", `ERROR, " - T%0d More than one instruction retired in a single cycle for this thread.",
14014 mytnum);
14015 $write("\t\t\t\t Instructions - ");
14016 if (complete_fw2[`EXU_INDEX]) $write("EXU op, ");
14017 if (complete_fw2[`FP_INDEX]) $write("FP op, ");
14018 if (complete_fw2[`LSU_INDEX]) $write("LSU op, ");
14019 if (complete_fw2[`IMUL_INDEX]) $write("IMUL op, ");
14020 if (complete_fw2[`IDIV_INDEX]) $write("IDIV op, ");
14021 if (complete_fw2[`FDIV_INDEX]) $write("FDIV op, ");
14022 if (complete_fw2[`TLU_INDEX]) $write("TLU op, ");
14023 if (complete_fw2[`ASI_INDEX]) $write("ASI op, ");
14024 $write(" complete_fw2 = %b \n",complete_fw2);
14025 $display("");
14026 end // }
14027 endcase
14028
14029 // This check only works if diags are written properly.
14030 // For example, if a diag writes to one of these registers using wrpr,
14031 // then this check must be disabled using plusarg.
14032 //--------------------
14033 // CANSAVE + CANRESTORE + OTHERWIN = NWINDOWS-2 (per Sparc V9)
14034 if (`PARGS.win_check_on) begin // {
14035 if (complete_fw2 & ((CANSAVE_reg + CANRESTORE_reg + OTHERWIN_reg) != 6)) begin // {
14036 `PR_ERROR ("nas", `ERROR, "ERROR - T%0d Bad Values for window registers.", mytnum);
14037 `PR_ERROR ("nas", `ERROR, "- CANSAVE = %0d CANRESTORE = %0d OTHERWIN = %0d",
14038 CANSAVE_reg, CANRESTORE_reg,OTHERWIN_reg);
14039 end // }
14040 end // }
14041
14042 end // }
14043endtask
14044
14045//----------------------------------------------------------
14046//----------------------------------------------------------
14047`ifndef EMUL_TL
14048task sort_delta;
14049 reg [5:0] i, j, last;
14050 reg [`DELTA_WIDTH:0] temp1, temp2;
14051 begin // {
14052 last = delta_prev[`NEXT_INDEX]-1;
14053 for (i=`FIRST_INDEX; i <= last; i=i+1) begin // {
14054 for (j=`FIRST_INDEX; j < last; j=j+1) begin // {
14055 temp1 = delta_prev[j]; temp2 = delta_prev[j+1];
14056 if (temp1[76:64] > temp2[76:64]) begin // {
14057 delta_prev[j] = temp2; delta_prev [j+1] = temp1;
14058 end //}
14059 end // }
14060 end // }
14061 end // }
14062endtask
14063`endif
14064
14065//----------------------------------------------------------
14066//----------------------------------------------------------
14067// Print one entry in delta_* array
14068`ifndef EMUL_TL
14069task print_entry;
14070
14071 input [`DELTA_WIDTH:0] delta_entry;
14072
14073 reg [1:0] type;
14074 reg [2:0] win;
14075 reg [7:0] id;
14076 reg [63:0] act_value;
14077 reg [(20*8)-1:0] type_str;
14078 reg [(20*8)-1:0] regname;
14079
14080 begin // {
14081 {type,win,id,act_value} = delta_entry;
14082
14083 case (type)
14084 `G_TYPE: begin
14085 type_str="G";
14086 end
14087 `W_TYPE: begin
14088 type_str="W";
14089 end
14090 `F_TYPE: begin
14091 type_str="F";
14092 id = id - `FP_OFFSET;
14093 end
14094 `C_TYPE: begin
14095 type_str="C";
14096 id = id - `CTL_OFFSET;
14097 end
14098 endcase
14099
14100 `NASTOP.get_regname(mytnum,type_str,win,id,regname);
14101 `PR_NORMAL ("nas", `NORMAL, "type=%0s win=%0d RegID=%0d %0s=%h",
14102 type_str,win,id,regname,act_value);
14103 end //}
14104
14105endtask
14106`endif
14107
14108//----------------------------------------------------------
14109// Write Value to prev_reg using id as index (non-blocking)
14110task write_prev;
14111 input [7:0] id;
14112 input [63:0] value;
14113
14114 begin // {
14115
14116 case (id)
14117 8'd0: prev_reg0 <= value;
14118 8'd1: prev_reg1 <= value;
14119 8'd2: prev_reg2 <= value;
14120 8'd3: prev_reg3 <= value;
14121 8'd4: prev_reg4 <= value;
14122 8'd5: prev_reg5 <= value;
14123 8'd6: prev_reg6 <= value;
14124 8'd7: prev_reg7 <= value;
14125 8'd8: prev_reg8 <= value;
14126 8'd9: prev_reg9 <= value;
14127 8'd10: prev_reg10 <= value;
14128 8'd11: prev_reg11 <= value;
14129 8'd12: prev_reg12 <= value;
14130 8'd13: prev_reg13 <= value;
14131 8'd14: prev_reg14 <= value;
14132 8'd15: prev_reg15 <= value;
14133 8'd16: prev_reg16 <= value;
14134 8'd17: prev_reg17 <= value;
14135 8'd18: prev_reg18 <= value;
14136 8'd19: prev_reg19 <= value;
14137 8'd20: prev_reg20 <= value;
14138 8'd21: prev_reg21 <= value;
14139 8'd22: prev_reg22 <= value;
14140 8'd23: prev_reg23 <= value;
14141 8'd24: prev_reg24 <= value;
14142 8'd25: prev_reg25 <= value;
14143 8'd26: prev_reg26 <= value;
14144 8'd27: prev_reg27 <= value;
14145 8'd28: prev_reg28 <= value;
14146 8'd29: prev_reg29 <= value;
14147 8'd30: prev_reg30 <= value;
14148 8'd31: prev_reg31 <= value;
14149 8'd32: prev_reg32 <= value;
14150 8'd33: prev_reg33 <= value;
14151 8'd34: prev_reg34 <= value;
14152 8'd35: prev_reg35 <= value;
14153 8'd36: prev_reg36 <= value;
14154 8'd37: prev_reg37 <= value;
14155 8'd38: prev_reg38 <= value;
14156 8'd39: prev_reg39 <= value;
14157 8'd40: prev_reg40 <= value;
14158 8'd41: prev_reg41 <= value;
14159 8'd42: prev_reg42 <= value;
14160 8'd43: prev_reg43 <= value;
14161 8'd44: prev_reg44 <= value;
14162 8'd45: prev_reg45 <= value;
14163 8'd46: prev_reg46 <= value;
14164 8'd47: prev_reg47 <= value;
14165 8'd48: prev_reg48 <= value;
14166 8'd49: prev_reg49 <= value;
14167 8'd50: prev_reg50 <= value;
14168 8'd51: prev_reg51 <= value;
14169 8'd52: prev_reg52 <= value;
14170 8'd53: prev_reg53 <= value;
14171 8'd54: prev_reg54 <= value;
14172 8'd55: prev_reg55 <= value;
14173 8'd56: prev_reg56 <= value;
14174 8'd57: prev_reg57 <= value;
14175 8'd58: prev_reg58 <= value;
14176 8'd59: prev_reg59 <= value;
14177 8'd60: prev_reg60 <= value;
14178 8'd61: prev_reg61 <= value;
14179 8'd62: prev_reg62 <= value;
14180 8'd63: prev_reg63 <= value;
14181 8'd64: prev_reg64 <= value;
14182 8'd65: prev_reg65 <= value;
14183 8'd66: prev_reg66 <= value;
14184 8'd67: prev_reg67 <= value;
14185 8'd68: prev_reg68 <= value;
14186 8'd69: prev_reg69 <= value;
14187 8'd70: prev_reg70 <= value;
14188 8'd71: prev_reg71 <= value;
14189 8'd72: prev_reg72 <= value;
14190 8'd73: prev_reg73 <= value;
14191 8'd74: prev_reg74 <= value;
14192 8'd75: prev_reg75 <= value;
14193 8'd76: prev_reg76 <= value;
14194 8'd77: prev_reg77 <= value;
14195 8'd78: prev_reg78 <= value;
14196 8'd79: prev_reg79 <= value;
14197 8'd80: prev_reg80 <= value;
14198 8'd81: prev_reg81 <= value;
14199 8'd82: prev_reg82 <= value;
14200 8'd83: prev_reg83 <= value;
14201 8'd84: prev_reg84 <= value;
14202 8'd85: prev_reg85 <= value;
14203 8'd86: prev_reg86 <= value;
14204 8'd87: prev_reg87 <= value;
14205 8'd88: prev_reg88 <= value;
14206 8'd89: prev_reg89 <= value;
14207 8'd90: prev_reg90 <= value;
14208 8'd91: prev_reg91 <= value;
14209 8'd92: prev_reg92 <= value;
14210 8'd93: prev_reg93 <= value;
14211 8'd94: prev_reg94 <= value;
14212 8'd95: prev_reg95 <= value;
14213 8'd96: prev_reg96 <= value;
14214 8'd97: prev_reg97 <= value;
14215 8'd98: prev_reg98 <= value;
14216 8'd99: prev_reg99 <= value;
14217 8'd100: prev_reg100 <= value;
14218 8'd101: prev_reg101 <= value;
14219 8'd102: prev_reg102 <= value;
14220 8'd103: prev_reg103 <= value;
14221 8'd104: prev_reg104 <= value;
14222 8'd105: prev_reg105 <= value;
14223 8'd106: prev_reg106 <= value;
14224 8'd107: prev_reg107 <= value;
14225 8'd108: prev_reg108 <= value;
14226 8'd109: prev_reg109 <= value;
14227 8'd110: prev_reg110 <= value;
14228 8'd111: prev_reg111 <= value;
14229 8'd112: prev_reg112 <= value;
14230 8'd113: prev_reg113 <= value;
14231 8'd114: prev_reg114 <= value;
14232 8'd115: prev_reg115 <= value;
14233 8'd116: prev_reg116 <= value;
14234 8'd117: prev_reg117 <= value;
14235 8'd118: prev_reg118 <= value;
14236 8'd119: prev_reg119 <= value;
14237 8'd120: prev_reg120 <= value;
14238 8'd121: prev_reg121 <= value;
14239 8'd122: prev_reg122 <= value;
14240 8'd123: prev_reg123 <= value;
14241 8'd124: prev_reg124 <= value;
14242 8'd125: prev_reg125 <= value;
14243 8'd126: prev_reg126 <= value;
14244 8'd127: prev_reg127 <= value;
14245 8'd128: prev_reg128 <= value;
14246 8'd129: prev_reg129 <= value;
14247 8'd130: prev_reg130 <= value;
14248 8'd131: prev_reg131 <= value;
14249 8'd132: prev_reg132 <= value;
14250 8'd133: prev_reg133 <= value;
14251 8'd134: prev_reg134 <= value;
14252 8'd135: prev_reg135 <= value;
14253 8'd136: prev_reg136 <= value;
14254 8'd137: prev_reg137 <= value;
14255 8'd138: prev_reg138 <= value;
14256 8'd139: prev_reg139 <= value;
14257 8'd140: prev_reg140 <= value;
14258 8'd141: prev_reg141 <= value;
14259 8'd142: prev_reg142 <= value;
14260 8'd143: prev_reg143 <= value;
14261 8'd144: prev_reg144 <= value;
14262 8'd145: prev_reg145 <= value;
14263 8'd146: prev_reg146 <= value;
14264 8'd147: prev_reg147 <= value;
14265 8'd148: prev_reg148 <= value;
14266 8'd149: prev_reg149 <= value;
14267 8'd150: prev_reg150 <= value;
14268 8'd151: prev_reg151 <= value;
14269 8'd152: prev_reg152 <= value;
14270 8'd153: prev_reg153 <= value;
14271 8'd154: prev_reg154 <= value;
14272 8'd155: prev_reg155 <= value;
14273 8'd156: prev_reg156 <= value;
14274 8'd157: prev_reg157 <= value;
14275 8'd158: prev_reg158 <= value;
14276 8'd159: prev_reg159 <= value;
14277 8'd160: prev_reg160 <= value;
14278 8'd161: prev_reg161 <= value;
14279 8'd162: prev_reg162 <= value;
14280 8'd163: prev_reg163 <= value;
14281 8'd164: prev_reg164 <= value;
14282 8'd165: prev_reg165 <= value;
14283 8'd166: prev_reg166 <= value;
14284 8'd167: prev_reg167 <= value;
14285 8'd168: prev_reg168 <= value;
14286 8'd169: prev_reg169 <= value;
14287 8'd170: prev_reg170 <= value;
14288 8'd171: prev_reg171 <= value;
14289 8'd172: prev_reg172 <= value;
14290 8'd173: prev_reg173 <= value;
14291 8'd174: prev_reg174 <= value;
14292 8'd175: prev_reg175 <= value;
14293 8'd176: prev_reg176 <= value;
14294 8'd177: prev_reg177 <= value;
14295 8'd178: prev_reg178 <= value;
14296 8'd179: prev_reg179 <= value;
14297 8'd180: prev_reg180 <= value;
14298 8'd181: prev_reg181 <= value;
14299 8'd182: prev_reg182 <= value;
14300 8'd183: prev_reg183 <= value;
14301 8'd184: prev_reg184 <= value;
14302 8'd185: prev_reg185 <= value;
14303 8'd186: prev_reg186 <= value;
14304 8'd187: prev_reg187 <= value;
14305 8'd188: prev_reg188 <= value;
14306 8'd189: prev_reg189 <= value;
14307 8'd190: prev_reg190 <= value;
14308 8'd191: prev_reg191 <= value;
14309 8'd192: prev_reg192 <= value;
14310 8'd193: prev_reg193 <= value;
14311 8'd194: prev_reg194 <= value;
14312 8'd195: prev_reg195 <= value;
14313 8'd196: prev_reg196 <= value;
14314 8'd197: prev_reg197 <= value;
14315 8'd198: prev_reg198 <= value;
14316 8'd199: prev_reg199 <= value;
14317 8'd200: prev_reg200 <= value;
14318 8'd201: prev_reg201 <= value;
14319 8'd202: prev_reg202 <= value;
14320 8'd203: prev_reg203 <= value;
14321 8'd204: prev_reg204 <= value;
14322 8'd205: prev_reg205 <= value;
14323 8'd206: prev_reg206 <= value;
14324 8'd207: prev_reg207 <= value;
14325 8'd208: prev_reg208 <= value;
14326 8'd209: prev_reg209 <= value;
14327 8'd210: prev_reg210 <= value;
14328 8'd211: prev_reg211 <= value;
14329 8'd212: prev_reg212 <= value;
14330 8'd213: prev_reg213 <= value;
14331 8'd214: prev_reg214 <= value;
14332 8'd215: prev_reg215 <= value;
14333 8'd216: prev_reg216 <= value;
14334 8'd217: prev_reg217 <= value;
14335 8'd218: prev_reg218 <= value;
14336 8'd219: prev_reg219 <= value;
14337 8'd220: prev_reg220 <= value;
14338 8'd221: prev_reg221 <= value;
14339 8'd222: prev_reg222 <= value;
14340 8'd223: prev_reg223 <= value;
14341 8'd224: prev_reg224 <= value;
14342 8'd225: prev_reg225 <= value;
14343 8'd226: prev_reg226 <= value;
14344 8'd227: prev_reg227 <= value;
14345 8'd228: prev_reg228 <= value;
14346 8'd229: prev_reg229 <= value;
14347 8'd230: prev_reg230 <= value;
14348 8'd231: prev_reg231 <= value;
14349 8'd232: prev_reg232 <= value;
14350 8'd233: prev_reg233 <= value;
14351 8'd234: prev_reg234 <= value;
14352 8'd235: prev_reg235 <= value;
14353 8'd236: prev_reg236 <= value;
14354 8'd237: prev_reg237 <= value;
14355 8'd238: prev_reg238 <= value;
14356 8'd239: prev_reg239 <= value;
14357 8'd240: prev_reg240 <= value;
14358 8'd241: prev_reg241 <= value;
14359 8'd242: prev_reg242 <= value;
14360 8'd243: prev_reg243 <= value;
14361 8'd244: prev_reg244 <= value;
14362 8'd245: prev_reg245 <= value;
14363 8'd246: prev_reg246 <= value;
14364 8'd247: prev_reg247 <= value;
14365 8'd248: prev_reg248 <= value;
14366 8'd249: prev_reg249 <= value;
14367 8'd250: prev_reg250 <= value;
14368 8'd251: prev_reg251 <= value;
14369 8'd252: prev_reg252 <= value;
14370 8'd253: prev_reg253 <= value;
14371 8'd254: prev_reg254 <= value;
14372 8'd255: prev_reg255 <= value;
14373 endcase
14374
14375 end //}
14376
14377endtask
14378
14379//----------------------------------------------------------
14380// Write Value to prev_reg using id as index (blocking)
14381task write_prev_async;
14382 input [7:0] id;
14383 input [63:0] value;
14384
14385 begin // {
14386
14387 case (id)
14388 8'd0: prev_reg0 = value;
14389 8'd1: prev_reg1 = value;
14390 8'd2: prev_reg2 = value;
14391 8'd3: prev_reg3 = value;
14392 8'd4: prev_reg4 = value;
14393 8'd5: prev_reg5 = value;
14394 8'd6: prev_reg6 = value;
14395 8'd7: prev_reg7 = value;
14396 8'd8: prev_reg8 = value;
14397 8'd9: prev_reg9 = value;
14398 8'd10: prev_reg10 = value;
14399 8'd11: prev_reg11 = value;
14400 8'd12: prev_reg12 = value;
14401 8'd13: prev_reg13 = value;
14402 8'd14: prev_reg14 = value;
14403 8'd15: prev_reg15 = value;
14404 8'd16: prev_reg16 = value;
14405 8'd17: prev_reg17 = value;
14406 8'd18: prev_reg18 = value;
14407 8'd19: prev_reg19 = value;
14408 8'd20: prev_reg20 = value;
14409 8'd21: prev_reg21 = value;
14410 8'd22: prev_reg22 = value;
14411 8'd23: prev_reg23 = value;
14412 8'd24: prev_reg24 = value;
14413 8'd25: prev_reg25 = value;
14414 8'd26: prev_reg26 = value;
14415 8'd27: prev_reg27 = value;
14416 8'd28: prev_reg28 = value;
14417 8'd29: prev_reg29 = value;
14418 8'd30: prev_reg30 = value;
14419 8'd31: prev_reg31 = value;
14420 8'd32: prev_reg32 = value;
14421 8'd33: prev_reg33 = value;
14422 8'd34: prev_reg34 = value;
14423 8'd35: prev_reg35 = value;
14424 8'd36: prev_reg36 = value;
14425 8'd37: prev_reg37 = value;
14426 8'd38: prev_reg38 = value;
14427 8'd39: prev_reg39 = value;
14428 8'd40: prev_reg40 = value;
14429 8'd41: prev_reg41 = value;
14430 8'd42: prev_reg42 = value;
14431 8'd43: prev_reg43 = value;
14432 8'd44: prev_reg44 = value;
14433 8'd45: prev_reg45 = value;
14434 8'd46: prev_reg46 = value;
14435 8'd47: prev_reg47 = value;
14436 8'd48: prev_reg48 = value;
14437 8'd49: prev_reg49 = value;
14438 8'd50: prev_reg50 = value;
14439 8'd51: prev_reg51 = value;
14440 8'd52: prev_reg52 = value;
14441 8'd53: prev_reg53 = value;
14442 8'd54: prev_reg54 = value;
14443 8'd55: prev_reg55 = value;
14444 8'd56: prev_reg56 = value;
14445 8'd57: prev_reg57 = value;
14446 8'd58: prev_reg58 = value;
14447 8'd59: prev_reg59 = value;
14448 8'd60: prev_reg60 = value;
14449 8'd61: prev_reg61 = value;
14450 8'd62: prev_reg62 = value;
14451 8'd63: prev_reg63 = value;
14452 8'd64: prev_reg64 = value;
14453 8'd65: prev_reg65 = value;
14454 8'd66: prev_reg66 = value;
14455 8'd67: prev_reg67 = value;
14456 8'd68: prev_reg68 = value;
14457 8'd69: prev_reg69 = value;
14458 8'd70: prev_reg70 = value;
14459 8'd71: prev_reg71 = value;
14460 8'd72: prev_reg72 = value;
14461 8'd73: prev_reg73 = value;
14462 8'd74: prev_reg74 = value;
14463 8'd75: prev_reg75 = value;
14464 8'd76: prev_reg76 = value;
14465 8'd77: prev_reg77 = value;
14466 8'd78: prev_reg78 = value;
14467 8'd79: prev_reg79 = value;
14468 8'd80: prev_reg80 = value;
14469 8'd81: prev_reg81 = value;
14470 8'd82: prev_reg82 = value;
14471 8'd83: prev_reg83 = value;
14472 8'd84: prev_reg84 = value;
14473 8'd85: prev_reg85 = value;
14474 8'd86: prev_reg86 = value;
14475 8'd87: prev_reg87 = value;
14476 8'd88: prev_reg88 = value;
14477 8'd89: prev_reg89 = value;
14478 8'd90: prev_reg90 = value;
14479 8'd91: prev_reg91 = value;
14480 8'd92: prev_reg92 = value;
14481 8'd93: prev_reg93 = value;
14482 8'd94: prev_reg94 = value;
14483 8'd95: prev_reg95 = value;
14484 8'd96: prev_reg96 = value;
14485 8'd97: prev_reg97 = value;
14486 8'd98: prev_reg98 = value;
14487 8'd99: prev_reg99 = value;
14488 8'd100: prev_reg100 = value;
14489 8'd101: prev_reg101 = value;
14490 8'd102: prev_reg102 = value;
14491 8'd103: prev_reg103 = value;
14492 8'd104: prev_reg104 = value;
14493 8'd105: prev_reg105 = value;
14494 8'd106: prev_reg106 = value;
14495 8'd107: prev_reg107 = value;
14496 8'd108: prev_reg108 = value;
14497 8'd109: prev_reg109 = value;
14498 8'd110: prev_reg110 = value;
14499 8'd111: prev_reg111 = value;
14500 8'd112: prev_reg112 = value;
14501 8'd113: prev_reg113 = value;
14502 8'd114: prev_reg114 = value;
14503 8'd115: prev_reg115 = value;
14504 8'd116: prev_reg116 = value;
14505 8'd117: prev_reg117 = value;
14506 8'd118: prev_reg118 = value;
14507 8'd119: prev_reg119 = value;
14508 8'd120: prev_reg120 = value;
14509 8'd121: prev_reg121 = value;
14510 8'd122: prev_reg122 = value;
14511 8'd123: prev_reg123 = value;
14512 8'd124: prev_reg124 = value;
14513 8'd125: prev_reg125 = value;
14514 8'd126: prev_reg126 = value;
14515 8'd127: prev_reg127 = value;
14516 8'd128: prev_reg128 = value;
14517 8'd129: prev_reg129 = value;
14518 8'd130: prev_reg130 = value;
14519 8'd131: prev_reg131 = value;
14520 8'd132: prev_reg132 = value;
14521 8'd133: prev_reg133 = value;
14522 8'd134: prev_reg134 = value;
14523 8'd135: prev_reg135 = value;
14524 8'd136: prev_reg136 = value;
14525 8'd137: prev_reg137 = value;
14526 8'd138: prev_reg138 = value;
14527 8'd139: prev_reg139 = value;
14528 8'd140: prev_reg140 = value;
14529 8'd141: prev_reg141 = value;
14530 8'd142: prev_reg142 = value;
14531 8'd143: prev_reg143 = value;
14532 8'd144: prev_reg144 = value;
14533 8'd145: prev_reg145 = value;
14534 8'd146: prev_reg146 = value;
14535 8'd147: prev_reg147 = value;
14536 8'd148: prev_reg148 = value;
14537 8'd149: prev_reg149 = value;
14538 8'd150: prev_reg150 = value;
14539 8'd151: prev_reg151 = value;
14540 8'd152: prev_reg152 = value;
14541 8'd153: prev_reg153 = value;
14542 8'd154: prev_reg154 = value;
14543 8'd155: prev_reg155 = value;
14544 8'd156: prev_reg156 = value;
14545 8'd157: prev_reg157 = value;
14546 8'd158: prev_reg158 = value;
14547 8'd159: prev_reg159 = value;
14548 8'd160: prev_reg160 = value;
14549 8'd161: prev_reg161 = value;
14550 8'd162: prev_reg162 = value;
14551 8'd163: prev_reg163 = value;
14552 8'd164: prev_reg164 = value;
14553 8'd165: prev_reg165 = value;
14554 8'd166: prev_reg166 = value;
14555 8'd167: prev_reg167 = value;
14556 8'd168: prev_reg168 = value;
14557 8'd169: prev_reg169 = value;
14558 8'd170: prev_reg170 = value;
14559 8'd171: prev_reg171 = value;
14560 8'd172: prev_reg172 = value;
14561 8'd173: prev_reg173 = value;
14562 8'd174: prev_reg174 = value;
14563 8'd175: prev_reg175 = value;
14564 8'd176: prev_reg176 = value;
14565 8'd177: prev_reg177 = value;
14566 8'd178: prev_reg178 = value;
14567 8'd179: prev_reg179 = value;
14568 8'd180: prev_reg180 = value;
14569 8'd181: prev_reg181 = value;
14570 8'd182: prev_reg182 = value;
14571 8'd183: prev_reg183 = value;
14572 8'd184: prev_reg184 = value;
14573 8'd185: prev_reg185 = value;
14574 8'd186: prev_reg186 = value;
14575 8'd187: prev_reg187 = value;
14576 8'd188: prev_reg188 = value;
14577 8'd189: prev_reg189 = value;
14578 8'd190: prev_reg190 = value;
14579 8'd191: prev_reg191 = value;
14580 8'd192: prev_reg192 = value;
14581 8'd193: prev_reg193 = value;
14582 8'd194: prev_reg194 = value;
14583 8'd195: prev_reg195 = value;
14584 8'd196: prev_reg196 = value;
14585 8'd197: prev_reg197 = value;
14586 8'd198: prev_reg198 = value;
14587 8'd199: prev_reg199 = value;
14588 8'd200: prev_reg200 = value;
14589 8'd201: prev_reg201 = value;
14590 8'd202: prev_reg202 = value;
14591 8'd203: prev_reg203 = value;
14592 8'd204: prev_reg204 = value;
14593 8'd205: prev_reg205 = value;
14594 8'd206: prev_reg206 = value;
14595 8'd207: prev_reg207 = value;
14596 8'd208: prev_reg208 = value;
14597 8'd209: prev_reg209 = value;
14598 8'd210: prev_reg210 = value;
14599 8'd211: prev_reg211 = value;
14600 8'd212: prev_reg212 = value;
14601 8'd213: prev_reg213 = value;
14602 8'd214: prev_reg214 = value;
14603 8'd215: prev_reg215 = value;
14604 8'd216: prev_reg216 = value;
14605 8'd217: prev_reg217 = value;
14606 8'd218: prev_reg218 = value;
14607 8'd219: prev_reg219 = value;
14608 8'd220: prev_reg220 = value;
14609 8'd221: prev_reg221 = value;
14610 8'd222: prev_reg222 = value;
14611 8'd223: prev_reg223 = value;
14612 8'd224: prev_reg224 = value;
14613 8'd225: prev_reg225 = value;
14614 8'd226: prev_reg226 = value;
14615 8'd227: prev_reg227 = value;
14616 8'd228: prev_reg228 = value;
14617 8'd229: prev_reg229 = value;
14618 8'd230: prev_reg230 = value;
14619 8'd231: prev_reg231 = value;
14620 8'd232: prev_reg232 = value;
14621 8'd233: prev_reg233 = value;
14622 8'd234: prev_reg234 = value;
14623 8'd235: prev_reg235 = value;
14624 8'd236: prev_reg236 = value;
14625 8'd237: prev_reg237 = value;
14626 8'd238: prev_reg238 = value;
14627 8'd239: prev_reg239 = value;
14628 8'd240: prev_reg240 = value;
14629 8'd241: prev_reg241 = value;
14630 8'd242: prev_reg242 = value;
14631 8'd243: prev_reg243 = value;
14632 8'd244: prev_reg244 = value;
14633 8'd245: prev_reg245 = value;
14634 8'd246: prev_reg246 = value;
14635 8'd247: prev_reg247 = value;
14636 8'd248: prev_reg248 = value;
14637 8'd249: prev_reg249 = value;
14638 8'd250: prev_reg250 = value;
14639 8'd251: prev_reg251 = value;
14640 8'd252: prev_reg252 = value;
14641 8'd253: prev_reg253 = value;
14642 8'd254: prev_reg254 = value;
14643 8'd255: prev_reg255 = value;
14644 endcase
14645
14646 end //}
14647
14648endtask
14649
14650//----------------------------------------------------------
14651// Read value frpm prev_reg using id as index
14652function [63:0] read_prev;
14653 input [7:0] id;
14654
14655 begin // {
14656
14657 case (id)
14658 8'd0: read_prev = prev_reg0;
14659 8'd1: read_prev = prev_reg1;
14660 8'd2: read_prev = prev_reg2;
14661 8'd3: read_prev = prev_reg3;
14662 8'd4: read_prev = prev_reg4;
14663 8'd5: read_prev = prev_reg5;
14664 8'd6: read_prev = prev_reg6;
14665 8'd7: read_prev = prev_reg7;
14666 8'd8: read_prev = prev_reg8;
14667 8'd9: read_prev = prev_reg9;
14668 8'd10: read_prev = prev_reg10;
14669 8'd11: read_prev = prev_reg11;
14670 8'd12: read_prev = prev_reg12;
14671 8'd13: read_prev = prev_reg13;
14672 8'd14: read_prev = prev_reg14;
14673 8'd15: read_prev = prev_reg15;
14674 8'd16: read_prev = prev_reg16;
14675 8'd17: read_prev = prev_reg17;
14676 8'd18: read_prev = prev_reg18;
14677 8'd19: read_prev = prev_reg19;
14678 8'd20: read_prev = prev_reg20;
14679 8'd21: read_prev = prev_reg21;
14680 8'd22: read_prev = prev_reg22;
14681 8'd23: read_prev = prev_reg23;
14682 8'd24: read_prev = prev_reg24;
14683 8'd25: read_prev = prev_reg25;
14684 8'd26: read_prev = prev_reg26;
14685 8'd27: read_prev = prev_reg27;
14686 8'd28: read_prev = prev_reg28;
14687 8'd29: read_prev = prev_reg29;
14688 8'd30: read_prev = prev_reg30;
14689 8'd31: read_prev = prev_reg31;
14690 8'd32: read_prev = prev_reg32;
14691 8'd33: read_prev = prev_reg33;
14692 8'd34: read_prev = prev_reg34;
14693 8'd35: read_prev = prev_reg35;
14694 8'd36: read_prev = prev_reg36;
14695 8'd37: read_prev = prev_reg37;
14696 8'd38: read_prev = prev_reg38;
14697 8'd39: read_prev = prev_reg39;
14698 8'd40: read_prev = prev_reg40;
14699 8'd41: read_prev = prev_reg41;
14700 8'd42: read_prev = prev_reg42;
14701 8'd43: read_prev = prev_reg43;
14702 8'd44: read_prev = prev_reg44;
14703 8'd45: read_prev = prev_reg45;
14704 8'd46: read_prev = prev_reg46;
14705 8'd47: read_prev = prev_reg47;
14706 8'd48: read_prev = prev_reg48;
14707 8'd49: read_prev = prev_reg49;
14708 8'd50: read_prev = prev_reg50;
14709 8'd51: read_prev = prev_reg51;
14710 8'd52: read_prev = prev_reg52;
14711 8'd53: read_prev = prev_reg53;
14712 8'd54: read_prev = prev_reg54;
14713 8'd55: read_prev = prev_reg55;
14714 8'd56: read_prev = prev_reg56;
14715 8'd57: read_prev = prev_reg57;
14716 8'd58: read_prev = prev_reg58;
14717 8'd59: read_prev = prev_reg59;
14718 8'd60: read_prev = prev_reg60;
14719 8'd61: read_prev = prev_reg61;
14720 8'd62: read_prev = prev_reg62;
14721 8'd63: read_prev = prev_reg63;
14722 8'd64: read_prev = prev_reg64;
14723 8'd65: read_prev = prev_reg65;
14724 8'd66: read_prev = prev_reg66;
14725 8'd67: read_prev = prev_reg67;
14726 8'd68: read_prev = prev_reg68;
14727 8'd69: read_prev = prev_reg69;
14728 8'd70: read_prev = prev_reg70;
14729 8'd71: read_prev = prev_reg71;
14730 8'd72: read_prev = prev_reg72;
14731 8'd73: read_prev = prev_reg73;
14732 8'd74: read_prev = prev_reg74;
14733 8'd75: read_prev = prev_reg75;
14734 8'd76: read_prev = prev_reg76;
14735 8'd77: read_prev = prev_reg77;
14736 8'd78: read_prev = prev_reg78;
14737 8'd79: read_prev = prev_reg79;
14738 8'd80: read_prev = prev_reg80;
14739 8'd81: read_prev = prev_reg81;
14740 8'd82: read_prev = prev_reg82;
14741 8'd83: read_prev = prev_reg83;
14742 8'd84: read_prev = prev_reg84;
14743 8'd85: read_prev = prev_reg85;
14744 8'd86: read_prev = prev_reg86;
14745 8'd87: read_prev = prev_reg87;
14746 8'd88: read_prev = prev_reg88;
14747 8'd89: read_prev = prev_reg89;
14748 8'd90: read_prev = prev_reg90;
14749 8'd91: read_prev = prev_reg91;
14750 8'd92: read_prev = prev_reg92;
14751 8'd93: read_prev = prev_reg93;
14752 8'd94: read_prev = prev_reg94;
14753 8'd95: read_prev = prev_reg95;
14754 8'd96: read_prev = prev_reg96;
14755 8'd97: read_prev = prev_reg97;
14756 8'd98: read_prev = prev_reg98;
14757 8'd99: read_prev = prev_reg99;
14758 8'd100: read_prev = prev_reg100;
14759 8'd101: read_prev = prev_reg101;
14760 8'd102: read_prev = prev_reg102;
14761 8'd103: read_prev = prev_reg103;
14762 8'd104: read_prev = prev_reg104;
14763 8'd105: read_prev = prev_reg105;
14764 8'd106: read_prev = prev_reg106;
14765 8'd107: read_prev = prev_reg107;
14766 8'd108: read_prev = prev_reg108;
14767 8'd109: read_prev = prev_reg109;
14768 8'd110: read_prev = prev_reg110;
14769 8'd111: read_prev = prev_reg111;
14770 8'd112: read_prev = prev_reg112;
14771 8'd113: read_prev = prev_reg113;
14772 8'd114: read_prev = prev_reg114;
14773 8'd115: read_prev = prev_reg115;
14774 8'd116: read_prev = prev_reg116;
14775 8'd117: read_prev = prev_reg117;
14776 8'd118: read_prev = prev_reg118;
14777 8'd119: read_prev = prev_reg119;
14778 8'd120: read_prev = prev_reg120;
14779 8'd121: read_prev = prev_reg121;
14780 8'd122: read_prev = prev_reg122;
14781 8'd123: read_prev = prev_reg123;
14782 8'd124: read_prev = prev_reg124;
14783 8'd125: read_prev = prev_reg125;
14784 8'd126: read_prev = prev_reg126;
14785 8'd127: read_prev = prev_reg127;
14786 8'd128: read_prev = prev_reg128;
14787 8'd129: read_prev = prev_reg129;
14788 8'd130: read_prev = prev_reg130;
14789 8'd131: read_prev = prev_reg131;
14790 8'd132: read_prev = prev_reg132;
14791 8'd133: read_prev = prev_reg133;
14792 8'd134: read_prev = prev_reg134;
14793 8'd135: read_prev = prev_reg135;
14794 8'd136: read_prev = prev_reg136;
14795 8'd137: read_prev = prev_reg137;
14796 8'd138: read_prev = prev_reg138;
14797 8'd139: read_prev = prev_reg139;
14798 8'd140: read_prev = prev_reg140;
14799 8'd141: read_prev = prev_reg141;
14800 8'd142: read_prev = prev_reg142;
14801 8'd143: read_prev = prev_reg143;
14802 8'd144: read_prev = prev_reg144;
14803 8'd145: read_prev = prev_reg145;
14804 8'd146: read_prev = prev_reg146;
14805 8'd147: read_prev = prev_reg147;
14806 8'd148: read_prev = prev_reg148;
14807 8'd149: read_prev = prev_reg149;
14808 8'd150: read_prev = prev_reg150;
14809 8'd151: read_prev = prev_reg151;
14810 8'd152: read_prev = prev_reg152;
14811 8'd153: read_prev = prev_reg153;
14812 8'd154: read_prev = prev_reg154;
14813 8'd155: read_prev = prev_reg155;
14814 8'd156: read_prev = prev_reg156;
14815 8'd157: read_prev = prev_reg157;
14816 8'd158: read_prev = prev_reg158;
14817 8'd159: read_prev = prev_reg159;
14818 8'd160: read_prev = prev_reg160;
14819 8'd161: read_prev = prev_reg161;
14820 8'd162: read_prev = prev_reg162;
14821 8'd163: read_prev = prev_reg163;
14822 8'd164: read_prev = prev_reg164;
14823 8'd165: read_prev = prev_reg165;
14824 8'd166: read_prev = prev_reg166;
14825 8'd167: read_prev = prev_reg167;
14826 8'd168: read_prev = prev_reg168;
14827 8'd169: read_prev = prev_reg169;
14828 8'd170: read_prev = prev_reg170;
14829 8'd171: read_prev = prev_reg171;
14830 8'd172: read_prev = prev_reg172;
14831 8'd173: read_prev = prev_reg173;
14832 8'd174: read_prev = prev_reg174;
14833 8'd175: read_prev = prev_reg175;
14834 8'd176: read_prev = prev_reg176;
14835 8'd177: read_prev = prev_reg177;
14836 8'd178: read_prev = prev_reg178;
14837 8'd179: read_prev = prev_reg179;
14838 8'd180: read_prev = prev_reg180;
14839 8'd181: read_prev = prev_reg181;
14840 8'd182: read_prev = prev_reg182;
14841 8'd183: read_prev = prev_reg183;
14842 8'd184: read_prev = prev_reg184;
14843 8'd185: read_prev = prev_reg185;
14844 8'd186: read_prev = prev_reg186;
14845 8'd187: read_prev = prev_reg187;
14846 8'd188: read_prev = prev_reg188;
14847 8'd189: read_prev = prev_reg189;
14848 8'd190: read_prev = prev_reg190;
14849 8'd191: read_prev = prev_reg191;
14850 8'd192: read_prev = prev_reg192;
14851 8'd193: read_prev = prev_reg193;
14852 8'd194: read_prev = prev_reg194;
14853 8'd195: read_prev = prev_reg195;
14854 8'd196: read_prev = prev_reg196;
14855 8'd197: read_prev = prev_reg197;
14856 8'd198: read_prev = prev_reg198;
14857 8'd199: read_prev = prev_reg199;
14858 8'd200: read_prev = prev_reg200;
14859 8'd201: read_prev = prev_reg201;
14860 8'd202: read_prev = prev_reg202;
14861 8'd203: read_prev = prev_reg203;
14862 8'd204: read_prev = prev_reg204;
14863 8'd205: read_prev = prev_reg205;
14864 8'd206: read_prev = prev_reg206;
14865 8'd207: read_prev = prev_reg207;
14866 8'd208: read_prev = prev_reg208;
14867 8'd209: read_prev = prev_reg209;
14868 8'd210: read_prev = prev_reg210;
14869 8'd211: read_prev = prev_reg211;
14870 8'd212: read_prev = prev_reg212;
14871 8'd213: read_prev = prev_reg213;
14872 8'd214: read_prev = prev_reg214;
14873 8'd215: read_prev = prev_reg215;
14874 8'd216: read_prev = prev_reg216;
14875 8'd217: read_prev = prev_reg217;
14876 8'd218: read_prev = prev_reg218;
14877 8'd219: read_prev = prev_reg219;
14878 8'd220: read_prev = prev_reg220;
14879 8'd221: read_prev = prev_reg221;
14880 8'd222: read_prev = prev_reg222;
14881 8'd223: read_prev = prev_reg223;
14882 8'd224: read_prev = prev_reg224;
14883 8'd225: read_prev = prev_reg225;
14884 8'd226: read_prev = prev_reg226;
14885 8'd227: read_prev = prev_reg227;
14886 8'd228: read_prev = prev_reg228;
14887 8'd229: read_prev = prev_reg229;
14888 8'd230: read_prev = prev_reg230;
14889 8'd231: read_prev = prev_reg231;
14890 8'd232: read_prev = prev_reg232;
14891 8'd233: read_prev = prev_reg233;
14892 8'd234: read_prev = prev_reg234;
14893 8'd235: read_prev = prev_reg235;
14894 8'd236: read_prev = prev_reg236;
14895 8'd237: read_prev = prev_reg237;
14896 8'd238: read_prev = prev_reg238;
14897 8'd239: read_prev = prev_reg239;
14898 8'd240: read_prev = prev_reg240;
14899 8'd241: read_prev = prev_reg241;
14900 8'd242: read_prev = prev_reg242;
14901 8'd243: read_prev = prev_reg243;
14902 8'd244: read_prev = prev_reg244;
14903 8'd245: read_prev = prev_reg245;
14904 8'd246: read_prev = prev_reg246;
14905 8'd247: read_prev = prev_reg247;
14906 8'd248: read_prev = prev_reg248;
14907 8'd249: read_prev = prev_reg249;
14908 8'd250: read_prev = prev_reg250;
14909 8'd251: read_prev = prev_reg251;
14910 8'd252: read_prev = prev_reg252;
14911 8'd253: read_prev = prev_reg253;
14912 8'd254: read_prev = prev_reg254;
14913 8'd255: read_prev = prev_reg255;
14914 endcase
14915
14916 end //}
14917
14918endfunction
14919
14920//----------------------------------------------------------
14921function [4:0] remap;
14922 input [4:0] rd;
14923 input oddwin;
14924
14925 begin
14926
14927 remap[4] = rd[4] ^ (rd[3] & oddwin);
14928 remap[3:0] = rd[3:0];
14929
14930 end
14931endfunction
14932
14933//----------------------------------------------------------
14934// Initialize nas_pipe registers
14935initial begin : INIT_BLOCK
14936 integer i;
14937
14938 nas_pipe_enable = 1'b1; // Nas_pipe always enables itself
14939 good_trap_detected = 1'b0;
14940
14941 @ (posedge `BENCH_SPC2_GCLK);
14942 `TOP.th_last_act_cycle[mytnum] = 0;
14943
14944 // Window registers
14945 win0_reg8 = 0;
14946 win1_reg8 = 0;
14947 win2_reg8 = 0;
14948 win3_reg8 = 0;
14949 win4_reg8 = 0;
14950 win5_reg8 = 0;
14951 win6_reg8 = 0;
14952 win7_reg8 = 0;
14953 win0_reg9 = 0;
14954 win1_reg9 = 0;
14955 win2_reg9 = 0;
14956 win3_reg9 = 0;
14957 win4_reg9 = 0;
14958 win5_reg9 = 0;
14959 win6_reg9 = 0;
14960 win7_reg9 = 0;
14961 win0_reg10 = 0;
14962 win1_reg10 = 0;
14963 win2_reg10 = 0;
14964 win3_reg10 = 0;
14965 win4_reg10 = 0;
14966 win5_reg10 = 0;
14967 win6_reg10 = 0;
14968 win7_reg10 = 0;
14969 win0_reg11 = 0;
14970 win1_reg11 = 0;
14971 win2_reg11 = 0;
14972 win3_reg11 = 0;
14973 win4_reg11 = 0;
14974 win5_reg11 = 0;
14975 win6_reg11 = 0;
14976 win7_reg11 = 0;
14977 win0_reg12 = 0;
14978 win1_reg12 = 0;
14979 win2_reg12 = 0;
14980 win3_reg12 = 0;
14981 win4_reg12 = 0;
14982 win5_reg12 = 0;
14983 win6_reg12 = 0;
14984 win7_reg12 = 0;
14985 win0_reg13 = 0;
14986 win1_reg13 = 0;
14987 win2_reg13 = 0;
14988 win3_reg13 = 0;
14989 win4_reg13 = 0;
14990 win5_reg13 = 0;
14991 win6_reg13 = 0;
14992 win7_reg13 = 0;
14993 win0_reg14 = 0;
14994 win1_reg14 = 0;
14995 win2_reg14 = 0;
14996 win3_reg14 = 0;
14997 win4_reg14 = 0;
14998 win5_reg14 = 0;
14999 win6_reg14 = 0;
15000 win7_reg14 = 0;
15001 win0_reg15 = 0;
15002 win1_reg15 = 0;
15003 win2_reg15 = 0;
15004 win3_reg15 = 0;
15005 win4_reg15 = 0;
15006 win5_reg15 = 0;
15007 win6_reg15 = 0;
15008 win7_reg15 = 0;
15009 win0_reg16 = 0;
15010 win1_reg16 = 0;
15011 win2_reg16 = 0;
15012 win3_reg16 = 0;
15013 win4_reg16 = 0;
15014 win5_reg16 = 0;
15015 win6_reg16 = 0;
15016 win7_reg16 = 0;
15017 win0_reg17 = 0;
15018 win1_reg17 = 0;
15019 win2_reg17 = 0;
15020 win3_reg17 = 0;
15021 win4_reg17 = 0;
15022 win5_reg17 = 0;
15023 win6_reg17 = 0;
15024 win7_reg17 = 0;
15025 win0_reg18 = 0;
15026 win1_reg18 = 0;
15027 win2_reg18 = 0;
15028 win3_reg18 = 0;
15029 win4_reg18 = 0;
15030 win5_reg18 = 0;
15031 win6_reg18 = 0;
15032 win7_reg18 = 0;
15033 win0_reg19 = 0;
15034 win1_reg19 = 0;
15035 win2_reg19 = 0;
15036 win3_reg19 = 0;
15037 win4_reg19 = 0;
15038 win5_reg19 = 0;
15039 win6_reg19 = 0;
15040 win7_reg19 = 0;
15041 win0_reg20 = 0;
15042 win1_reg20 = 0;
15043 win2_reg20 = 0;
15044 win3_reg20 = 0;
15045 win4_reg20 = 0;
15046 win5_reg20 = 0;
15047 win6_reg20 = 0;
15048 win7_reg20 = 0;
15049 win0_reg21 = 0;
15050 win1_reg21 = 0;
15051 win2_reg21 = 0;
15052 win3_reg21 = 0;
15053 win4_reg21 = 0;
15054 win5_reg21 = 0;
15055 win6_reg21 = 0;
15056 win7_reg21 = 0;
15057 win0_reg22 = 0;
15058 win1_reg22 = 0;
15059 win2_reg22 = 0;
15060 win3_reg22 = 0;
15061 win4_reg22 = 0;
15062 win5_reg22 = 0;
15063 win6_reg22 = 0;
15064 win7_reg22 = 0;
15065 win0_reg23 = 0;
15066 win1_reg23 = 0;
15067 win2_reg23 = 0;
15068 win3_reg23 = 0;
15069 win4_reg23 = 0;
15070 win5_reg23 = 0;
15071 win6_reg23 = 0;
15072 win7_reg23 = 0;
15073 win0_reg24 = 0;
15074 win1_reg24 = 0;
15075 win2_reg24 = 0;
15076 win3_reg24 = 0;
15077 win4_reg24 = 0;
15078 win5_reg24 = 0;
15079 win6_reg24 = 0;
15080 win7_reg24 = 0;
15081 win0_reg25 = 0;
15082 win1_reg25 = 0;
15083 win2_reg25 = 0;
15084 win3_reg25 = 0;
15085 win4_reg25 = 0;
15086 win5_reg25 = 0;
15087 win6_reg25 = 0;
15088 win7_reg25 = 0;
15089 win0_reg26 = 0;
15090 win1_reg26 = 0;
15091 win2_reg26 = 0;
15092 win3_reg26 = 0;
15093 win4_reg26 = 0;
15094 win5_reg26 = 0;
15095 win6_reg26 = 0;
15096 win7_reg26 = 0;
15097 win0_reg27 = 0;
15098 win1_reg27 = 0;
15099 win2_reg27 = 0;
15100 win3_reg27 = 0;
15101 win4_reg27 = 0;
15102 win5_reg27 = 0;
15103 win6_reg27 = 0;
15104 win7_reg27 = 0;
15105 win0_reg28 = 0;
15106 win1_reg28 = 0;
15107 win2_reg28 = 0;
15108 win3_reg28 = 0;
15109 win4_reg28 = 0;
15110 win5_reg28 = 0;
15111 win6_reg28 = 0;
15112 win7_reg28 = 0;
15113 win0_reg29 = 0;
15114 win1_reg29 = 0;
15115 win2_reg29 = 0;
15116 win3_reg29 = 0;
15117 win4_reg29 = 0;
15118 win5_reg29 = 0;
15119 win6_reg29 = 0;
15120 win7_reg29 = 0;
15121 win0_reg30 = 0;
15122 win1_reg30 = 0;
15123 win2_reg30 = 0;
15124 win3_reg30 = 0;
15125 win4_reg30 = 0;
15126 win5_reg30 = 0;
15127 win6_reg30 = 0;
15128 win7_reg30 = 0;
15129 win0_reg31 = 0;
15130 win1_reg31 = 0;
15131 win2_reg31 = 0;
15132 win3_reg31 = 0;
15133 win4_reg31 = 0;
15134 win5_reg31 = 0;
15135 win6_reg31 = 0;
15136 win7_reg31 = 0;
15137
15138 // Global registers
15139 th_gl = `POR_GL;
15140 gl0_reg0 = 0;
15141 gl1_reg0 = 0;
15142 gl2_reg0 = 0;
15143 gl3_reg0 = 0;
15144 gl0_reg1 = 0;
15145 gl1_reg1 = 0;
15146 gl2_reg1 = 0;
15147 gl3_reg1 = 0;
15148 gl0_reg2 = 0;
15149 gl1_reg2 = 0;
15150 gl2_reg2 = 0;
15151 gl3_reg2 = 0;
15152 gl0_reg3 = 0;
15153 gl1_reg3 = 0;
15154 gl2_reg3 = 0;
15155 gl3_reg3 = 0;
15156 gl0_reg4 = 0;
15157 gl1_reg4 = 0;
15158 gl2_reg4 = 0;
15159 gl3_reg4 = 0;
15160 gl0_reg5 = 0;
15161 gl1_reg5 = 0;
15162 gl2_reg5 = 0;
15163 gl3_reg5 = 0;
15164 gl0_reg6 = 0;
15165 gl1_reg6 = 0;
15166 gl2_reg6 = 0;
15167 gl3_reg6 = 0;
15168 gl0_reg7 = 0;
15169 gl1_reg7 = 0;
15170 gl2_reg7 = 0;
15171 gl3_reg7 = 0;
15172
15173 `PR_INFO ("nas", `INFO, "T%0d Init shadow registers.",mytnum);
15174 prev_reg0 = 0;
15175 prev_reg1 = 0;
15176 prev_reg2 = 0;
15177 prev_reg3 = 0;
15178 prev_reg4 = 0;
15179 prev_reg5 = 0;
15180 prev_reg6 = 0;
15181 prev_reg7 = 0;
15182 prev_reg8 = 0;
15183 prev_reg9 = 0;
15184 prev_reg10 = 0;
15185 prev_reg11 = 0;
15186 prev_reg12 = 0;
15187 prev_reg13 = 0;
15188 prev_reg14 = 0;
15189 prev_reg15 = 0;
15190 prev_reg16 = 0;
15191 prev_reg17 = 0;
15192 prev_reg18 = 0;
15193 prev_reg19 = 0;
15194 prev_reg20 = 0;
15195 prev_reg21 = 0;
15196 prev_reg22 = 0;
15197 prev_reg23 = 0;
15198 prev_reg24 = 0;
15199 prev_reg25 = 0;
15200 prev_reg26 = 0;
15201 prev_reg27 = 0;
15202 prev_reg28 = 0;
15203 prev_reg29 = 0;
15204 prev_reg30 = 0;
15205 prev_reg31 = 0;
15206 prev_reg32 = 0;
15207 prev_reg33 = 0;
15208 prev_reg34 = 0;
15209 prev_reg35 = 0;
15210 prev_reg36 = 0;
15211 prev_reg37 = 0;
15212 prev_reg38 = 0;
15213 prev_reg39 = 0;
15214 prev_reg40 = 0;
15215 prev_reg41 = 0;
15216 prev_reg42 = 0;
15217 prev_reg43 = 0;
15218 prev_reg44 = 0;
15219 prev_reg45 = 0;
15220 prev_reg46 = 0;
15221 prev_reg47 = 0;
15222 prev_reg48 = 0;
15223 prev_reg49 = 0;
15224 prev_reg50 = 0;
15225 prev_reg51 = 0;
15226 prev_reg52 = 0;
15227 prev_reg53 = 0;
15228 prev_reg54 = 0;
15229 prev_reg55 = 0;
15230 prev_reg56 = 0;
15231 prev_reg57 = 0;
15232 prev_reg58 = 0;
15233 prev_reg59 = 0;
15234 prev_reg60 = 0;
15235 prev_reg61 = 0;
15236 prev_reg62 = 0;
15237 prev_reg63 = 0;
15238 prev_reg64 = 0;
15239 prev_reg65 = 0;
15240 prev_reg66 = 0;
15241 prev_reg67 = 0;
15242 prev_reg68 = 0;
15243 prev_reg69 = 0;
15244 prev_reg70 = 0;
15245 prev_reg71 = 0;
15246 prev_reg72 = 0;
15247 prev_reg73 = 0;
15248 prev_reg74 = 0;
15249 prev_reg75 = 0;
15250 prev_reg76 = 0;
15251 prev_reg77 = 0;
15252 prev_reg78 = 0;
15253 prev_reg79 = 0;
15254 prev_reg80 = 0;
15255 prev_reg81 = 0;
15256 prev_reg82 = 0;
15257 prev_reg83 = 0;
15258 prev_reg84 = 0;
15259 prev_reg85 = 0;
15260 prev_reg86 = 0;
15261 prev_reg87 = 0;
15262 prev_reg88 = 0;
15263 prev_reg89 = 0;
15264 prev_reg90 = 0;
15265 prev_reg91 = 0;
15266 prev_reg92 = 0;
15267 prev_reg93 = 0;
15268 prev_reg94 = 0;
15269 prev_reg95 = 0;
15270 prev_reg96 = 0;
15271 prev_reg97 = 0;
15272 prev_reg98 = 0;
15273 prev_reg99 = 0;
15274 prev_reg100 = 0;
15275 prev_reg101 = 0;
15276 prev_reg102 = 0;
15277 prev_reg103 = 0;
15278 prev_reg104 = 0;
15279 prev_reg105 = 0;
15280 prev_reg106 = 0;
15281 prev_reg107 = 0;
15282 prev_reg108 = 0;
15283 prev_reg109 = 0;
15284 prev_reg110 = 0;
15285 prev_reg111 = 0;
15286 prev_reg112 = 0;
15287 prev_reg113 = 0;
15288 prev_reg114 = 0;
15289 prev_reg115 = 0;
15290 prev_reg116 = 0;
15291 prev_reg117 = 0;
15292 prev_reg118 = 0;
15293 prev_reg119 = 0;
15294 prev_reg120 = 0;
15295 prev_reg121 = 0;
15296 prev_reg122 = 0;
15297 prev_reg123 = 0;
15298 prev_reg124 = 0;
15299 prev_reg125 = 0;
15300 prev_reg126 = 0;
15301 prev_reg127 = 0;
15302 prev_reg128 = 0;
15303 prev_reg129 = 0;
15304 prev_reg130 = 0;
15305 prev_reg131 = 0;
15306 prev_reg132 = 0;
15307 prev_reg133 = 0;
15308 prev_reg134 = 0;
15309 prev_reg135 = 0;
15310 prev_reg136 = 0;
15311 prev_reg137 = 0;
15312 prev_reg138 = 0;
15313 prev_reg139 = 0;
15314 prev_reg140 = 0;
15315 prev_reg141 = 0;
15316 prev_reg142 = 0;
15317 prev_reg143 = 0;
15318 prev_reg144 = 0;
15319 prev_reg145 = 0;
15320 prev_reg146 = 0;
15321 prev_reg147 = 0;
15322 prev_reg148 = 0;
15323 prev_reg149 = 0;
15324 prev_reg150 = 0;
15325 prev_reg151 = 0;
15326 prev_reg152 = 0;
15327 prev_reg153 = 0;
15328 prev_reg154 = 0;
15329 prev_reg155 = 0;
15330 prev_reg156 = 0;
15331 prev_reg157 = 0;
15332 prev_reg158 = 0;
15333 prev_reg159 = 0;
15334 prev_reg160 = 0;
15335 prev_reg161 = 0;
15336 prev_reg162 = 0;
15337 prev_reg163 = 0;
15338 prev_reg164 = 0;
15339 prev_reg165 = 0;
15340 prev_reg166 = 0;
15341 prev_reg167 = 0;
15342 prev_reg168 = 0;
15343 prev_reg169 = 0;
15344 prev_reg170 = 0;
15345 prev_reg171 = 0;
15346 prev_reg172 = 0;
15347 prev_reg173 = 0;
15348 prev_reg174 = 0;
15349 prev_reg175 = 0;
15350 prev_reg176 = 0;
15351 prev_reg177 = 0;
15352 prev_reg178 = 0;
15353 prev_reg179 = 0;
15354 prev_reg180 = 0;
15355 prev_reg181 = 0;
15356 prev_reg182 = 0;
15357 prev_reg183 = 0;
15358 prev_reg184 = 0;
15359 prev_reg185 = 0;
15360 prev_reg186 = 0;
15361 prev_reg187 = 0;
15362 prev_reg188 = 0;
15363 prev_reg189 = 0;
15364 prev_reg190 = 0;
15365 prev_reg191 = 0;
15366 prev_reg192 = 0;
15367 prev_reg193 = 0;
15368 prev_reg194 = 0;
15369 prev_reg195 = 0;
15370 prev_reg196 = 0;
15371 prev_reg197 = 0;
15372 prev_reg198 = 0;
15373 prev_reg199 = 0;
15374 prev_reg200 = 0;
15375 prev_reg201 = 0;
15376 prev_reg202 = 0;
15377 prev_reg203 = 0;
15378 prev_reg204 = 0;
15379 prev_reg205 = 0;
15380 prev_reg206 = 0;
15381 prev_reg207 = 0;
15382 prev_reg208 = 0;
15383 prev_reg209 = 0;
15384 prev_reg210 = 0;
15385 prev_reg211 = 0;
15386 prev_reg212 = 0;
15387 prev_reg213 = 0;
15388 prev_reg214 = 0;
15389 prev_reg215 = 0;
15390 prev_reg216 = 0;
15391 prev_reg217 = 0;
15392 prev_reg218 = 0;
15393 prev_reg219 = 0;
15394 prev_reg220 = 0;
15395 prev_reg221 = 0;
15396 prev_reg222 = 0;
15397 prev_reg223 = 0;
15398 prev_reg224 = 0;
15399 prev_reg225 = 0;
15400 prev_reg226 = 0;
15401 prev_reg227 = 0;
15402 prev_reg228 = 0;
15403 prev_reg229 = 0;
15404 prev_reg230 = 0;
15405 prev_reg231 = 0;
15406 prev_reg232 = 0;
15407 prev_reg233 = 0;
15408 prev_reg234 = 0;
15409 prev_reg235 = 0;
15410 prev_reg236 = 0;
15411 prev_reg237 = 0;
15412 prev_reg238 = 0;
15413 prev_reg239 = 0;
15414 prev_reg240 = 0;
15415 prev_reg241 = 0;
15416 prev_reg242 = 0;
15417 prev_reg243 = 0;
15418 prev_reg244 = 0;
15419 prev_reg245 = 0;
15420 prev_reg246 = 0;
15421 prev_reg247 = 0;
15422 prev_reg248 = 0;
15423 prev_reg249 = 0;
15424 prev_reg250 = 0;
15425 prev_reg251 = 0;
15426 prev_reg252 = 0;
15427 prev_reg253 = 0;
15428 prev_reg254 = 0;
15429 prev_reg255 = 0;
15430
15431 // POR for control registers
15432 write_prev(`FPRS +`CTL_OFFSET,3'h4);
15433 write_prev(`CLEANWIN +`CTL_OFFSET,3'h7);
15434 write_prev(`CANSAVE +`CTL_OFFSET,3'h6);
15435
15436 // POR for FPRS = 0x4
15437 write_prev(`FPRS+`CTL_OFFSET,3'h4);
15438
15439 // POR for PSTATE = 0x14 (PEF, PRIV = 1)
15440 write_prev(`PSTATE + `CTL_OFFSET,'h14);
15441
15442 // POR for HPSTATE = 0x4034 (RED, HPRIV = 1)
15443 write_prev(`HPSTATE + `CTL_OFFSET,'h24);
15444
15445 // POR for TL = = 0x6 [MAXTL]
15446 write_prev(`TL + `CTL_OFFSET,'h6);
15447
15448 // POR for TT6 = = 1
15449 write_prev(`TT6 + `CTL_OFFSET,'h1);
15450
15451 // POR for GL = MAXGL = 3
15452 write_prev(`GL + `CTL_OFFSET,`POR_GL);
15453
15454 // POR for VER = {003e, 0024, 01, 0036, 07}
15455 write_prev(`VER + `CTL_OFFSET,{32'h003e0024,VER_reg[31:24],24'h030607});
15456
15457 // POR for *_cmpr registers is INT_DIS = 1
15458 write_prev(`TICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
15459 write_prev(`STICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
15460 write_prev(`HSTICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
15461
15462 // Need to define so that 1st instruction will print correctly
15463 write_prev(`PC+`CTL_OFFSET,`POR_PC);
15464
15465 first_op = 1;
15466 pc_last = `BAD_PC;
15467
15468 `ifndef EMUL_TL
15469 delta_prev[`PC_INDEX] = `BAD_PC;
15470 `endif
15471
15472 irf_offset = (mytid%4)*32;
15473 in_wmr = 0;
15474 wmr <= 0;
15475end
15476
15477//----------------------------------------------------------
15478task wmr_prev;
15479 begin // {
15480
15481 // For WMR, we will set to 0x0, so that initial deltas
15482
15483 //
15484
15485 // WMR for PSTATE = 0x14 (PEF, PRIV = 1)
15486 // write_prev(`PSTATE + `CTL_OFFSET,'h00);
15487
15488 // WMR for HPSTATE = 0x4034 (RED, HPRIV = 1)
15489 // write_prev(`HPSTATE + `CTL_OFFSET,'h00);
15490
15491 // WMR for TL = = 0x6 [MAXTL]
15492 // write_prev(`TL + `CTL_OFFSET,'h0);
15493
15494 // WMR for TT6 = = 1
15495 // write_prev(`TT6 + `CTL_OFFSET,'h1);
15496
15497 // WMR for GL = MAXGL = 3
15498 // write_prev(`GL + `CTL_OFFSET,0);
15499
15500 end // }
15501endtask
15502
15503//----------------------------------------------------------
15504task por_prev;
15505 begin // {
15506
15507 // For POR, we will set to 0x0, so that initial deltas
15508 // and prev state are all consistent with DUT. No values
15509 // are preserved
15510
15511 `PR_ALWAYS ("arg", `ALWAYS,"T%0d Resetting Nas Pipe states for POR ..",mytnum);
15512 delta_fx4[`NEXT_INDEX] <= `FIRST_INDEX;
15513 delta_fx4[`FIRST_INDEX] <= 77'hx;
15514 delta_fx5[`NEXT_INDEX] <= `FIRST_INDEX;
15515 delta_fb[`NEXT_INDEX] <= `FIRST_INDEX;
15516 delta_fw[`NEXT_INDEX] <= `FIRST_INDEX;
15517 delta_fw1[`NEXT_INDEX] <= `FIRST_INDEX;
15518 delta_fw2[`NEXT_INDEX] <= `FIRST_INDEX;
15519 // Window registers
15520 win0_reg8 = 0;
15521 win1_reg8 = 0;
15522 win2_reg8 = 0;
15523 win3_reg8 = 0;
15524 win4_reg8 = 0;
15525 win5_reg8 = 0;
15526 win6_reg8 = 0;
15527 win7_reg8 = 0;
15528 win0_reg9 = 0;
15529 win1_reg9 = 0;
15530 win2_reg9 = 0;
15531 win3_reg9 = 0;
15532 win4_reg9 = 0;
15533 win5_reg9 = 0;
15534 win6_reg9 = 0;
15535 win7_reg9 = 0;
15536 win0_reg10 = 0;
15537 win1_reg10 = 0;
15538 win2_reg10 = 0;
15539 win3_reg10 = 0;
15540 win4_reg10 = 0;
15541 win5_reg10 = 0;
15542 win6_reg10 = 0;
15543 win7_reg10 = 0;
15544 win0_reg11 = 0;
15545 win1_reg11 = 0;
15546 win2_reg11 = 0;
15547 win3_reg11 = 0;
15548 win4_reg11 = 0;
15549 win5_reg11 = 0;
15550 win6_reg11 = 0;
15551 win7_reg11 = 0;
15552 win0_reg12 = 0;
15553 win1_reg12 = 0;
15554 win2_reg12 = 0;
15555 win3_reg12 = 0;
15556 win4_reg12 = 0;
15557 win5_reg12 = 0;
15558 win6_reg12 = 0;
15559 win7_reg12 = 0;
15560 win0_reg13 = 0;
15561 win1_reg13 = 0;
15562 win2_reg13 = 0;
15563 win3_reg13 = 0;
15564 win4_reg13 = 0;
15565 win5_reg13 = 0;
15566 win6_reg13 = 0;
15567 win7_reg13 = 0;
15568 win0_reg14 = 0;
15569 win1_reg14 = 0;
15570 win2_reg14 = 0;
15571 win3_reg14 = 0;
15572 win4_reg14 = 0;
15573 win5_reg14 = 0;
15574 win6_reg14 = 0;
15575 win7_reg14 = 0;
15576 win0_reg15 = 0;
15577 win1_reg15 = 0;
15578 win2_reg15 = 0;
15579 win3_reg15 = 0;
15580 win4_reg15 = 0;
15581 win5_reg15 = 0;
15582 win6_reg15 = 0;
15583 win7_reg15 = 0;
15584 win0_reg16 = 0;
15585 win1_reg16 = 0;
15586 win2_reg16 = 0;
15587 win3_reg16 = 0;
15588 win4_reg16 = 0;
15589 win5_reg16 = 0;
15590 win6_reg16 = 0;
15591 win7_reg16 = 0;
15592 win0_reg17 = 0;
15593 win1_reg17 = 0;
15594 win2_reg17 = 0;
15595 win3_reg17 = 0;
15596 win4_reg17 = 0;
15597 win5_reg17 = 0;
15598 win6_reg17 = 0;
15599 win7_reg17 = 0;
15600 win0_reg18 = 0;
15601 win1_reg18 = 0;
15602 win2_reg18 = 0;
15603 win3_reg18 = 0;
15604 win4_reg18 = 0;
15605 win5_reg18 = 0;
15606 win6_reg18 = 0;
15607 win7_reg18 = 0;
15608 win0_reg19 = 0;
15609 win1_reg19 = 0;
15610 win2_reg19 = 0;
15611 win3_reg19 = 0;
15612 win4_reg19 = 0;
15613 win5_reg19 = 0;
15614 win6_reg19 = 0;
15615 win7_reg19 = 0;
15616 win0_reg20 = 0;
15617 win1_reg20 = 0;
15618 win2_reg20 = 0;
15619 win3_reg20 = 0;
15620 win4_reg20 = 0;
15621 win5_reg20 = 0;
15622 win6_reg20 = 0;
15623 win7_reg20 = 0;
15624 win0_reg21 = 0;
15625 win1_reg21 = 0;
15626 win2_reg21 = 0;
15627 win3_reg21 = 0;
15628 win4_reg21 = 0;
15629 win5_reg21 = 0;
15630 win6_reg21 = 0;
15631 win7_reg21 = 0;
15632 win0_reg22 = 0;
15633 win1_reg22 = 0;
15634 win2_reg22 = 0;
15635 win3_reg22 = 0;
15636 win4_reg22 = 0;
15637 win5_reg22 = 0;
15638 win6_reg22 = 0;
15639 win7_reg22 = 0;
15640 win0_reg23 = 0;
15641 win1_reg23 = 0;
15642 win2_reg23 = 0;
15643 win3_reg23 = 0;
15644 win4_reg23 = 0;
15645 win5_reg23 = 0;
15646 win6_reg23 = 0;
15647 win7_reg23 = 0;
15648 win0_reg24 = 0;
15649 win1_reg24 = 0;
15650 win2_reg24 = 0;
15651 win3_reg24 = 0;
15652 win4_reg24 = 0;
15653 win5_reg24 = 0;
15654 win6_reg24 = 0;
15655 win7_reg24 = 0;
15656 win0_reg25 = 0;
15657 win1_reg25 = 0;
15658 win2_reg25 = 0;
15659 win3_reg25 = 0;
15660 win4_reg25 = 0;
15661 win5_reg25 = 0;
15662 win6_reg25 = 0;
15663 win7_reg25 = 0;
15664 win0_reg26 = 0;
15665 win1_reg26 = 0;
15666 win2_reg26 = 0;
15667 win3_reg26 = 0;
15668 win4_reg26 = 0;
15669 win5_reg26 = 0;
15670 win6_reg26 = 0;
15671 win7_reg26 = 0;
15672 win0_reg27 = 0;
15673 win1_reg27 = 0;
15674 win2_reg27 = 0;
15675 win3_reg27 = 0;
15676 win4_reg27 = 0;
15677 win5_reg27 = 0;
15678 win6_reg27 = 0;
15679 win7_reg27 = 0;
15680 win0_reg28 = 0;
15681 win1_reg28 = 0;
15682 win2_reg28 = 0;
15683 win3_reg28 = 0;
15684 win4_reg28 = 0;
15685 win5_reg28 = 0;
15686 win6_reg28 = 0;
15687 win7_reg28 = 0;
15688 win0_reg29 = 0;
15689 win1_reg29 = 0;
15690 win2_reg29 = 0;
15691 win3_reg29 = 0;
15692 win4_reg29 = 0;
15693 win5_reg29 = 0;
15694 win6_reg29 = 0;
15695 win7_reg29 = 0;
15696 win0_reg30 = 0;
15697 win1_reg30 = 0;
15698 win2_reg30 = 0;
15699 win3_reg30 = 0;
15700 win4_reg30 = 0;
15701 win5_reg30 = 0;
15702 win6_reg30 = 0;
15703 win7_reg30 = 0;
15704 win0_reg31 = 0;
15705 win1_reg31 = 0;
15706 win2_reg31 = 0;
15707 win3_reg31 = 0;
15708 win4_reg31 = 0;
15709 win5_reg31 = 0;
15710 win6_reg31 = 0;
15711 win7_reg31 = 0;
15712
15713 // Global registers
15714 th_gl = `POR_GL;
15715 gl0_reg0 = 0;
15716 gl1_reg0 = 0;
15717 gl2_reg0 = 0;
15718 gl3_reg0 = 0;
15719 gl0_reg1 = 0;
15720 gl1_reg1 = 0;
15721 gl2_reg1 = 0;
15722 gl3_reg1 = 0;
15723 gl0_reg2 = 0;
15724 gl1_reg2 = 0;
15725 gl2_reg2 = 0;
15726 gl3_reg2 = 0;
15727 gl0_reg3 = 0;
15728 gl1_reg3 = 0;
15729 gl2_reg3 = 0;
15730 gl3_reg3 = 0;
15731 gl0_reg4 = 0;
15732 gl1_reg4 = 0;
15733 gl2_reg4 = 0;
15734 gl3_reg4 = 0;
15735 gl0_reg5 = 0;
15736 gl1_reg5 = 0;
15737 gl2_reg5 = 0;
15738 gl3_reg5 = 0;
15739 gl0_reg6 = 0;
15740 gl1_reg6 = 0;
15741 gl2_reg6 = 0;
15742 gl3_reg6 = 0;
15743 gl0_reg7 = 0;
15744 gl1_reg7 = 0;
15745 gl2_reg7 = 0;
15746 gl3_reg7 = 0;
15747
15748 `PR_INFO ("nas", `INFO, "T%0d Init shadow registers.",mytnum);
15749 prev_reg0 = 0;
15750 prev_reg1 = 0;
15751 prev_reg2 = 0;
15752 prev_reg3 = 0;
15753 prev_reg4 = 0;
15754 prev_reg5 = 0;
15755 prev_reg6 = 0;
15756 prev_reg7 = 0;
15757 prev_reg8 = 0;
15758 prev_reg9 = 0;
15759 prev_reg10 = 0;
15760 prev_reg11 = 0;
15761 prev_reg12 = 0;
15762 prev_reg13 = 0;
15763 prev_reg14 = 0;
15764 prev_reg15 = 0;
15765 prev_reg16 = 0;
15766 prev_reg17 = 0;
15767 prev_reg18 = 0;
15768 prev_reg19 = 0;
15769 prev_reg20 = 0;
15770 prev_reg21 = 0;
15771 prev_reg22 = 0;
15772 prev_reg23 = 0;
15773 prev_reg24 = 0;
15774 prev_reg25 = 0;
15775 prev_reg26 = 0;
15776 prev_reg27 = 0;
15777 prev_reg28 = 0;
15778 prev_reg29 = 0;
15779 prev_reg30 = 0;
15780 prev_reg31 = 0;
15781 prev_reg32 = 0;
15782 prev_reg33 = 0;
15783 prev_reg34 = 0;
15784 prev_reg35 = 0;
15785 prev_reg36 = 0;
15786 prev_reg37 = 0;
15787 prev_reg38 = 0;
15788 prev_reg39 = 0;
15789 prev_reg40 = 0;
15790 prev_reg41 = 0;
15791 prev_reg42 = 0;
15792 prev_reg43 = 0;
15793 prev_reg44 = 0;
15794 prev_reg45 = 0;
15795 prev_reg46 = 0;
15796 prev_reg47 = 0;
15797 prev_reg48 = 0;
15798 prev_reg49 = 0;
15799 prev_reg50 = 0;
15800 prev_reg51 = 0;
15801 prev_reg52 = 0;
15802 prev_reg53 = 0;
15803 prev_reg54 = 0;
15804 prev_reg55 = 0;
15805 prev_reg56 = 0;
15806 prev_reg57 = 0;
15807 prev_reg58 = 0;
15808 prev_reg59 = 0;
15809 prev_reg60 = 0;
15810 prev_reg61 = 0;
15811 prev_reg62 = 0;
15812 prev_reg63 = 0;
15813 prev_reg64 = 0;
15814 prev_reg65 = 0;
15815 prev_reg66 = 0;
15816 prev_reg67 = 0;
15817 prev_reg68 = 0;
15818 prev_reg69 = 0;
15819 prev_reg70 = 0;
15820 prev_reg71 = 0;
15821 prev_reg72 = 0;
15822 prev_reg73 = 0;
15823 prev_reg74 = 0;
15824 prev_reg75 = 0;
15825 prev_reg76 = 0;
15826 prev_reg77 = 0;
15827 prev_reg78 = 0;
15828 prev_reg79 = 0;
15829 prev_reg80 = 0;
15830 prev_reg81 = 0;
15831 prev_reg82 = 0;
15832 prev_reg83 = 0;
15833 prev_reg84 = 0;
15834 prev_reg85 = 0;
15835 prev_reg86 = 0;
15836 prev_reg87 = 0;
15837 prev_reg88 = 0;
15838 prev_reg89 = 0;
15839 prev_reg90 = 0;
15840 prev_reg91 = 0;
15841 prev_reg92 = 0;
15842 prev_reg93 = 0;
15843 prev_reg94 = 0;
15844 prev_reg95 = 0;
15845 prev_reg96 = 0;
15846 prev_reg97 = 0;
15847 prev_reg98 = 0;
15848 prev_reg99 = 0;
15849 prev_reg100 = 0;
15850 prev_reg101 = 0;
15851 prev_reg102 = 0;
15852 prev_reg103 = 0;
15853 prev_reg104 = 0;
15854 prev_reg105 = 0;
15855 prev_reg106 = 0;
15856 prev_reg107 = 0;
15857 prev_reg108 = 0;
15858 prev_reg109 = 0;
15859 prev_reg110 = 0;
15860 prev_reg111 = 0;
15861 prev_reg112 = 0;
15862 prev_reg113 = 0;
15863 prev_reg114 = 0;
15864 prev_reg115 = 0;
15865 prev_reg116 = 0;
15866 prev_reg117 = 0;
15867 prev_reg118 = 0;
15868 prev_reg119 = 0;
15869 prev_reg120 = 0;
15870 prev_reg121 = 0;
15871 prev_reg122 = 0;
15872 prev_reg123 = 0;
15873 prev_reg124 = 0;
15874 prev_reg125 = 0;
15875 prev_reg126 = 0;
15876 prev_reg127 = 0;
15877 prev_reg128 = 0;
15878 prev_reg129 = 0;
15879 prev_reg130 = 0;
15880 prev_reg131 = 0;
15881 prev_reg132 = 0;
15882 prev_reg133 = 0;
15883 prev_reg134 = 0;
15884 prev_reg135 = 0;
15885 prev_reg136 = 0;
15886 prev_reg137 = 0;
15887 prev_reg138 = 0;
15888 prev_reg139 = 0;
15889 prev_reg140 = 0;
15890 prev_reg141 = 0;
15891 prev_reg142 = 0;
15892 prev_reg143 = 0;
15893 prev_reg144 = 0;
15894 prev_reg145 = 0;
15895 prev_reg146 = 0;
15896 prev_reg147 = 0;
15897 prev_reg148 = 0;
15898 prev_reg149 = 0;
15899 prev_reg150 = 0;
15900 prev_reg151 = 0;
15901 prev_reg152 = 0;
15902 prev_reg153 = 0;
15903 prev_reg154 = 0;
15904 prev_reg155 = 0;
15905 prev_reg156 = 0;
15906 prev_reg157 = 0;
15907 prev_reg158 = 0;
15908 prev_reg159 = 0;
15909 prev_reg160 = 0;
15910 prev_reg161 = 0;
15911 prev_reg162 = 0;
15912 prev_reg163 = 0;
15913 prev_reg164 = 0;
15914 prev_reg165 = 0;
15915 prev_reg166 = 0;
15916 prev_reg167 = 0;
15917 prev_reg168 = 0;
15918 prev_reg169 = 0;
15919 prev_reg170 = 0;
15920 prev_reg171 = 0;
15921 prev_reg172 = 0;
15922 prev_reg173 = 0;
15923 prev_reg174 = 0;
15924 prev_reg175 = 0;
15925 prev_reg176 = 0;
15926 prev_reg177 = 0;
15927 prev_reg178 = 0;
15928 prev_reg179 = 0;
15929 prev_reg180 = 0;
15930 prev_reg181 = 0;
15931 prev_reg182 = 0;
15932 prev_reg183 = 0;
15933 prev_reg184 = 0;
15934 prev_reg185 = 0;
15935 prev_reg186 = 0;
15936 prev_reg187 = 0;
15937 prev_reg188 = 0;
15938 prev_reg189 = 0;
15939 prev_reg190 = 0;
15940 prev_reg191 = 0;
15941 prev_reg192 = 0;
15942 prev_reg193 = 0;
15943 prev_reg194 = 0;
15944 prev_reg195 = 0;
15945 prev_reg196 = 0;
15946 prev_reg197 = 0;
15947 prev_reg198 = 0;
15948 prev_reg199 = 0;
15949 prev_reg200 = 0;
15950 prev_reg201 = 0;
15951 prev_reg202 = 0;
15952 prev_reg203 = 0;
15953 prev_reg204 = 0;
15954 prev_reg205 = 0;
15955 prev_reg206 = 0;
15956 prev_reg207 = 0;
15957 prev_reg208 = 0;
15958 prev_reg209 = 0;
15959 prev_reg210 = 0;
15960 prev_reg211 = 0;
15961 prev_reg212 = 0;
15962 prev_reg213 = 0;
15963 prev_reg214 = 0;
15964 prev_reg215 = 0;
15965 prev_reg216 = 0;
15966 prev_reg217 = 0;
15967 prev_reg218 = 0;
15968 prev_reg219 = 0;
15969 prev_reg220 = 0;
15970 prev_reg221 = 0;
15971 prev_reg222 = 0;
15972 prev_reg223 = 0;
15973 prev_reg224 = 0;
15974 prev_reg225 = 0;
15975 prev_reg226 = 0;
15976 prev_reg227 = 0;
15977 prev_reg228 = 0;
15978 prev_reg229 = 0;
15979 prev_reg230 = 0;
15980 prev_reg231 = 0;
15981 prev_reg232 = 0;
15982 prev_reg233 = 0;
15983 prev_reg234 = 0;
15984 prev_reg235 = 0;
15985 prev_reg236 = 0;
15986 prev_reg237 = 0;
15987 prev_reg238 = 0;
15988 prev_reg239 = 0;
15989 prev_reg240 = 0;
15990 prev_reg241 = 0;
15991 prev_reg242 = 0;
15992 prev_reg243 = 0;
15993 prev_reg244 = 0;
15994 prev_reg245 = 0;
15995 prev_reg246 = 0;
15996 prev_reg247 = 0;
15997 prev_reg248 = 0;
15998 prev_reg249 = 0;
15999 prev_reg250 = 0;
16000 prev_reg251 = 0;
16001 prev_reg252 = 0;
16002 prev_reg253 = 0;
16003 prev_reg254 = 0;
16004 prev_reg255 = 0;
16005
16006 // POR for control registers
16007 write_prev(`FPRS +`CTL_OFFSET,3'h4);
16008 write_prev(`CLEANWIN +`CTL_OFFSET,3'h7);
16009 write_prev(`CANSAVE +`CTL_OFFSET,3'h6);
16010
16011 // POR for FPRS = 0x4
16012 write_prev(`FPRS+`CTL_OFFSET,3'h4);
16013
16014 // POR for PSTATE = 0x14 (PEF, PRIV = 1)
16015 write_prev(`PSTATE + `CTL_OFFSET,'h14);
16016
16017 // POR for HPSTATE = 0x4034 (RED, HPRIV = 1)
16018 write_prev(`HPSTATE + `CTL_OFFSET,'h24);
16019
16020 // POR for TL = = 0x6 [MAXTL]
16021 write_prev(`TL + `CTL_OFFSET,'h6);
16022
16023 // POR for TT6 = = 1
16024 write_prev(`TT6 + `CTL_OFFSET,'h1);
16025
16026 // POR for GL = MAXGL = 3
16027 write_prev(`GL + `CTL_OFFSET,`POR_GL);
16028
16029 // POR for VER = {003e, 0024, 01, 0036, 07}
16030 write_prev(`VER + `CTL_OFFSET,64'h003e002410030607);
16031
16032 // POR for *_cmpr registers is INT_DIS = 1
16033 write_prev(`TICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
16034 write_prev(`STICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
16035 write_prev(`HSTICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
16036
16037 // Need to define so that 1st instruction will print correctly
16038 write_prev(`PC+`CTL_OFFSET,`POR_PC);
16039
16040 first_op = 1;
16041 pc_last = `BAD_PC;
16042
16043 end // }
16044endtask
16045
16046//----------------------------------------------------------
16047//----------------------------------------------------------
16048 `else // GATESIM
16049
16050// Watch for Good/Bad trap
16051
16052wire [5:0] mytnum = (mycid*8)+mytid;
16053wire mytg = mytid >> 2;
16054integer junk;
16055reg nas_pipe_enable;
16056
16057integer inst_count;
16058
16059 // Delimiter changes whether flat or hierarchical netlist
16060 `ifdef GATES_FLAT
16061 wire myclk = tb_top.cpu.spc2.gclk;
16062 wire dec_inst_valid_m = mytg ? tb_top.cpu.spc2.dec_inst_valid_m[1] : tb_top.cpu.spc2.dec_inst_valid_m[0];
16063 wire [1:0] dec_tid_m = mytg ? tb_top.cpu.spc2.dec_tid1_m : tb_top.cpu.spc2.dec_tid0_m;
16064 wire dec_flush_b = mytg ? tb_top.cpu.spc2.dec_flush_b[1] : tb_top.cpu.spc2.dec_flush_b[0];
16065 wire tlu_flush_ifu = tb_top.cpu.spc2.tlu_flush_ifu[mytid];
16066 wire [47:0] pc_d = mytg ? {tb_top.cpu.spc2.tlu_pc_1_d[47:2],2'b0} : {tb_top.cpu.spc2.tlu_pc_0_d[47:2],2'b0};
16067 wire [31:0] op_d = mytg ? tb_top.cpu.spc2.dec_inst1_d[31:0] : tb_top.cpu.spc2.dec_inst0_d[31:0];
16068 `else
16069 wire myclk = tb_top.cpu.spc2.gclk;
16070 wire dec_inst_valid_m = mytg ? tb_top.cpu.spc2.dec_inst_valid_m[1] : tb_top.cpu.spc2.dec_inst_valid_m[0];
16071 wire [1:0] dec_tid_m = mytg ? tb_top.cpu.spc2.dec_tid1_m : tb_top.cpu.spc2.dec_tid0_m;
16072 wire dec_flush_b = mytg ? tb_top.cpu.spc2.dec_flush_b[1] : tb_top.cpu.spc2.dec_flush_b[0];
16073 wire tlu_flush_ifu = tb_top.cpu.spc2.tlu_flush_ifu[mytid];
16074 wire [47:0] pc_d = mytg ? {tb_top.cpu.spc2.tlu_pc_1_d[47:2],2'b0} : {tb_top.cpu.spc2.tlu_pc_0_d[47:2],2'b0};
16075 wire [31:0] op_d = mytg ? tb_top.cpu.spc2.dec_inst1_d[31:0] : tb_top.cpu.spc2.dec_inst0_d[31:0];
16076 `endif
16077
16078 reg dec_inst_valid_b;
16079 reg [1:0] dec_tid_b;
16080
16081 reg inst_valid_w;
16082 reg inst_valid_fx4;
16083 reg inst_valid_fx5;
16084 reg inst_valid_fb;
16085 reg inst_valid_fw;
16086 reg inst_valid_fw1;
16087 reg inst_valid_fw2;
16088 reg [47:0] pc_e;
16089 reg [47:0] pc_m;
16090 reg [47:0] pc_b;
16091 reg [47:0] pc_w;
16092 reg [47:0] pc_fx4;
16093 reg [47:0] pc_fx5;
16094 reg [47:0] pc_fb;
16095 reg [47:0] pc_fw;
16096 reg [47:0] pc_fw1;
16097 reg [47:0] pc_fw2;
16098 reg [31:0] op_e;
16099 reg [31:0] op_m;
16100 reg [31:0] op_b;
16101 reg [31:0] op_w;
16102 reg [31:0] op_fx4;
16103 reg [31:0] op_fx5;
16104 reg [31:0] op_fb;
16105 reg [31:0] op_fw;
16106 reg [31:0] op_fw1;
16107 reg [31:0] op_fw2;
16108
16109 wire inst_valid_b = dec_inst_valid_b && (dec_tid_b==mytid[1:0]) && !(dec_flush_b || tlu_flush_ifu);
16110
16111initial begin // {
16112 inst_count = 1;
16113 nas_pipe_enable = 1;
16114end // }
16115
16116
16117always @ (posedge myclk) begin // {
16118
16119 dec_inst_valid_b <= dec_inst_valid_m;
16120 dec_tid_b <= dec_tid_m;
16121 op_e <= op_d;
16122 op_m <= op_e;
16123 op_b <= op_m;
16124 op_w <= op_b;
16125 op_fx4 <= op_w;
16126 op_fx5 <= op_fx4;
16127 op_fb <= op_fx5;
16128 op_fw <= op_fb;
16129 op_fw1 <= op_fw;
16130 op_fw2 <= op_fw1;
16131 pc_e <= pc_d;
16132 pc_m <= pc_e;
16133 pc_b <= pc_m;
16134 pc_w <= pc_b;
16135 pc_fx4 <= pc_w;
16136 pc_fx5 <= pc_fx4;
16137 pc_fb <= pc_fx5;
16138 pc_fw <= pc_fb;
16139 pc_fw1 <= pc_fw;
16140 pc_fw2 <= pc_fw1;
16141 inst_valid_w <= inst_valid_b;
16142 inst_valid_fx4 <= inst_valid_w;
16143 inst_valid_fx5 <= inst_valid_fx4;
16144 inst_valid_fb <= inst_valid_fx5;
16145 inst_valid_fw <= inst_valid_fb;
16146 inst_valid_fw1 <= inst_valid_fw;
16147 inst_valid_fw2 <= inst_valid_fw1;
16148
16149 if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable) begin // {
16150
16151 if (inst_valid_fw2) begin // {
16152
16153 // Print PC/opcode for debugging
16154 `PR_NORMAL ("nas", `NORMAL, "@%0d #%0d T%0d %h [%h]", $time, inst_count, mytnum, pc_fw2, op_fw2);
16155 inst_count = inst_count + 1;
16156
16157 //----------
16158 // End detection for GateSim runs
16159 for (junk=0;junk<`PARGS.bad_trap_count;junk=junk+1) begin // {
16160 if (({16'b0,pc_fw2}&`PC_MASK)===(`PARGS.bad_trap_addr[junk]&`PC_MASK)) begin // {
16161 `PR_ERROR ("nas",`ERROR, "T%0d reached Bad Trap [GATESIM]", mytnum);
16162 nas_pipe_enable = 1'b0;
16163 end //}
16164 end //}
16165 for (junk=0;junk<`PARGS.good_trap_count;junk=junk+1) begin // {
16166 if (({16'b0,pc_fw2}&`PC_MASK)===(`PARGS.good_trap_addr[junk]&`PC_MASK)) begin // {
16167 `TOP.finished_tids[mytnum] = 1'b1;
16168 `PARGS.th_check_enable[mytnum] = 1'b0;
16169 nas_pipe_enable = 1'b0;
16170 `PR_NORMAL ("nas", `NORMAL, "T%0d reached Good Trap. Disabling checking for thread %0d [GATESIM]", mytnum,mytnum);
16171 end //}
16172 end //}
16173
16174 end // }
16175 end // }
16176
16177end //}
16178
16179
16180`endif
16181
16182endmodule
16183//----------------------------------------------------------
16184//----------------------------------------------------------
16185
16186`endif
16187
16188
16189`ifdef CORE_3
16190
16191
16192module nas_pipe3 (
16193 mycid,
16194 mytid,
16195
16196 opcode,
16197 PC_reg,
16198 Y_reg,
16199 CCR_reg,
16200 FPRS_reg,
16201 FSR_reg,
16202 ASI_reg,
16203 GSR_reg,
16204 TICK_CMPR_reg,
16205 STICK_CMPR_reg,
16206 HSTICK_CMPR_reg,
16207 PSTATE_reg,
16208 TL_reg,
16209 PIL_reg,
16210 TBA_reg,
16211 VER_reg,
16212 CWP_reg,
16213 CANSAVE_reg,
16214 CANRESTORE_reg,
16215 OTHERWIN_reg,
16216 WSTATE_reg,
16217 CLEANWIN_reg,
16218 SOFTINT_reg,
16219 rd_SOFTINT_reg,
16220 INTR_RECEIVE_reg,
16221 GL_reg,
16222 HPSTATE_reg,
16223 HTBA_reg,
16224 HINTP_reg,
16225
16226 CTXT_PRIM_0_reg,
16227 CTXT_SEC_0_reg,
16228 CTXT_PRIM_1_reg,
16229 CTXT_SEC_1_reg,
16230 LSU_CONTROL_reg,
16231 I_TAG_ACC_reg,
16232 D_TAG_ACC_reg,
16233 WATCHPOINT_ADDR_reg,
16234 DSFAR_reg,
16235
16236 Trap_Entry_1,
16237 Trap_Entry_2,
16238 Trap_Entry_3,
16239 Trap_Entry_4,
16240 Trap_Entry_5,
16241 Trap_Entry_6,
16242
16243 exu_valid,
16244
16245 imul_valid,
16246
16247 frf_w2_valid,
16248 frf_w1_valid,
16249 frf_w1_tid,
16250 frf_w2_tid,
16251 frf_w1_addr,
16252 frf_w2_addr,
16253
16254 asi_valid,
16255 asi_in_progress,
16256
16257 fp_valid,
16258
16259 idiv_valid,
16260
16261 fdiv_valid,
16262
16263 lsu_valid,
16264
16265 tlu_valid
16266);
16267
16268//----------------------------------------------------------
16269input [2:0] mycid;
16270input [2:0] mytid;
16271
16272input [31:0] opcode;
16273input [47:0] PC_reg;
16274input [31:0] Y_reg;
16275input [7:0] CCR_reg;
16276input [2:0] FPRS_reg;
16277input [27:0] FSR_reg;
16278input [7:0] ASI_reg;
16279input [42:0] GSR_reg;
16280input [71:0] TICK_CMPR_reg;
16281input [71:0] STICK_CMPR_reg;
16282input [71:0] HSTICK_CMPR_reg;
16283input [12:0] PSTATE_reg;
16284input [2:0] TL_reg;
16285input [3:0] PIL_reg;
16286input [32:0] TBA_reg;
16287input [63:0] VER_reg;
16288input [2:0] CWP_reg;
16289input [2:0] CANSAVE_reg;
16290input [2:0] CANRESTORE_reg;
16291input [2:0] OTHERWIN_reg;
16292input [5:0] WSTATE_reg;
16293input [2:0] CLEANWIN_reg;
16294input [16:0] SOFTINT_reg;
16295input [16:0] rd_SOFTINT_reg;
16296input [63:0] INTR_RECEIVE_reg;
16297input [1:0] GL_reg;
16298input [12:0] HPSTATE_reg;
16299input [33:0] HTBA_reg;
16300input HINTP_reg;
16301
16302input [63:0] CTXT_PRIM_0_reg;
16303input [63:0] CTXT_SEC_0_reg;
16304input [63:0] CTXT_PRIM_1_reg;
16305input [63:0] CTXT_SEC_1_reg;
16306input [63:0] LSU_CONTROL_reg;
16307input [63:0] I_TAG_ACC_reg;
16308input [63:0] D_TAG_ACC_reg;
16309input [63:0] WATCHPOINT_ADDR_reg;
16310input [47:0] DSFAR_reg;
16311
16312input [151:0] Trap_Entry_1;
16313input [151:0] Trap_Entry_2;
16314input [151:0] Trap_Entry_3;
16315input [151:0] Trap_Entry_4;
16316input [151:0] Trap_Entry_5;
16317input [151:0] Trap_Entry_6;
16318
16319input exu_valid;
16320
16321input imul_valid;
16322
16323input [1:0] frf_w2_valid;
16324input [2:0] frf_w2_tid;
16325input [4:0] frf_w2_addr;
16326
16327input [1:0] frf_w1_valid;
16328input [2:0] frf_w1_tid;
16329input [4:0] frf_w1_addr;
16330
16331input asi_valid; // ASI/ASR/PR writes done ..
16332input asi_in_progress; // ASI/ASR/PR in progess
16333
16334input fp_valid;
16335
16336input idiv_valid;
16337
16338input fdiv_valid;
16339
16340input lsu_valid;
16341
16342input tlu_valid;
16343
16344`ifndef GATESIM
16345
16346//----------------------------------------------------------
16347// Register assignments
16348//----------------------------------------------------------
16349`include "nas_regs.v"
16350//----------------------------------------------------------
16351
16352wire exu_complete;
16353wire imul_complete;
16354wire idiv_complete;
16355wire tlu_complete;
16356wire fp_complete;
16357wire fdiv_complete;
16358wire lsu_complete;
16359wire asi_complete;
16360wire [7:0] complete_w;
16361reg [7:0] complete_fx4;
16362reg [7:0] complete_fx5;
16363reg [7:0] complete_fb;
16364reg [7:0] complete_fw;
16365reg [7:0] complete_fw1;
16366reg [7:0] complete_fw2;
16367
16368`ifndef EMUL_TL
16369// delta_* = {type(2bits),win(3bits),regnum(8bits),value(64bits)}
16370reg [`DELTA_WIDTH:0] delta_fx4 [0:(`MAX_INDEX)];
16371reg [`DELTA_WIDTH:0] delta_fx5 [0:(`MAX_INDEX)];
16372reg [`DELTA_WIDTH:0] delta_fb [0:(`MAX_INDEX)];
16373reg [`DELTA_WIDTH:0] delta_fw [0:(`MAX_INDEX)];
16374reg [`DELTA_WIDTH:0] delta_fw1 [0:(`MAX_INDEX)];
16375reg [`DELTA_WIDTH:0] delta_fw2 [0:(`MAX_INDEX)];
16376reg [`DELTA_WIDTH:0] delta_prev [0:(`MAX_INDEX)];
16377`endif
16378
16379reg [2:0] cwp_fx4;
16380reg [2:0] cwp_fx5;
16381reg [2:0] cwp_fb;
16382reg [2:0] cwp_fw;
16383reg [2:0] cwp_fw1;
16384reg [2:0] cwp_fw2;
16385reg [2:0] cwp_last;
16386
16387
16388// need to change in several places in this file
16389reg [63:0] prev_reg0; // includes G,W,C,F registers
16390reg [63:0] prev_reg1; // includes G,W,C,F registers
16391reg [63:0] prev_reg2; // includes G,W,C,F registers
16392reg [63:0] prev_reg3; // includes G,W,C,F registers
16393reg [63:0] prev_reg4; // includes G,W,C,F registers
16394reg [63:0] prev_reg5; // includes G,W,C,F registers
16395reg [63:0] prev_reg6; // includes G,W,C,F registers
16396reg [63:0] prev_reg7; // includes G,W,C,F registers
16397reg [63:0] prev_reg8; // includes G,W,C,F registers
16398reg [63:0] prev_reg9; // includes G,W,C,F registers
16399reg [63:0] prev_reg10; // includes G,W,C,F registers
16400reg [63:0] prev_reg11; // includes G,W,C,F registers
16401reg [63:0] prev_reg12; // includes G,W,C,F registers
16402reg [63:0] prev_reg13; // includes G,W,C,F registers
16403reg [63:0] prev_reg14; // includes G,W,C,F registers
16404reg [63:0] prev_reg15; // includes G,W,C,F registers
16405reg [63:0] prev_reg16; // includes G,W,C,F registers
16406reg [63:0] prev_reg17; // includes G,W,C,F registers
16407reg [63:0] prev_reg18; // includes G,W,C,F registers
16408reg [63:0] prev_reg19; // includes G,W,C,F registers
16409reg [63:0] prev_reg20; // includes G,W,C,F registers
16410reg [63:0] prev_reg21; // includes G,W,C,F registers
16411reg [63:0] prev_reg22; // includes G,W,C,F registers
16412reg [63:0] prev_reg23; // includes G,W,C,F registers
16413reg [63:0] prev_reg24; // includes G,W,C,F registers
16414reg [63:0] prev_reg25; // includes G,W,C,F registers
16415reg [63:0] prev_reg26; // includes G,W,C,F registers
16416reg [63:0] prev_reg27; // includes G,W,C,F registers
16417reg [63:0] prev_reg28; // includes G,W,C,F registers
16418reg [63:0] prev_reg29; // includes G,W,C,F registers
16419reg [63:0] prev_reg30; // includes G,W,C,F registers
16420reg [63:0] prev_reg31; // includes G,W,C,F registers
16421reg [63:0] prev_reg32; // includes G,W,C,F registers
16422reg [63:0] prev_reg33; // includes G,W,C,F registers
16423reg [63:0] prev_reg34; // includes G,W,C,F registers
16424reg [63:0] prev_reg35; // includes G,W,C,F registers
16425reg [63:0] prev_reg36; // includes G,W,C,F registers
16426reg [63:0] prev_reg37; // includes G,W,C,F registers
16427reg [63:0] prev_reg38; // includes G,W,C,F registers
16428reg [63:0] prev_reg39; // includes G,W,C,F registers
16429reg [63:0] prev_reg40; // includes G,W,C,F registers
16430reg [63:0] prev_reg41; // includes G,W,C,F registers
16431reg [63:0] prev_reg42; // includes G,W,C,F registers
16432reg [63:0] prev_reg43; // includes G,W,C,F registers
16433reg [63:0] prev_reg44; // includes G,W,C,F registers
16434reg [63:0] prev_reg45; // includes G,W,C,F registers
16435reg [63:0] prev_reg46; // includes G,W,C,F registers
16436reg [63:0] prev_reg47; // includes G,W,C,F registers
16437reg [63:0] prev_reg48; // includes G,W,C,F registers
16438reg [63:0] prev_reg49; // includes G,W,C,F registers
16439reg [63:0] prev_reg50; // includes G,W,C,F registers
16440reg [63:0] prev_reg51; // includes G,W,C,F registers
16441reg [63:0] prev_reg52; // includes G,W,C,F registers
16442reg [63:0] prev_reg53; // includes G,W,C,F registers
16443reg [63:0] prev_reg54; // includes G,W,C,F registers
16444reg [63:0] prev_reg55; // includes G,W,C,F registers
16445reg [63:0] prev_reg56; // includes G,W,C,F registers
16446reg [63:0] prev_reg57; // includes G,W,C,F registers
16447reg [63:0] prev_reg58; // includes G,W,C,F registers
16448reg [63:0] prev_reg59; // includes G,W,C,F registers
16449reg [63:0] prev_reg60; // includes G,W,C,F registers
16450reg [63:0] prev_reg61; // includes G,W,C,F registers
16451reg [63:0] prev_reg62; // includes G,W,C,F registers
16452reg [63:0] prev_reg63; // includes G,W,C,F registers
16453reg [63:0] prev_reg64; // includes G,W,C,F registers
16454reg [63:0] prev_reg65; // includes G,W,C,F registers
16455reg [63:0] prev_reg66; // includes G,W,C,F registers
16456reg [63:0] prev_reg67; // includes G,W,C,F registers
16457reg [63:0] prev_reg68; // includes G,W,C,F registers
16458reg [63:0] prev_reg69; // includes G,W,C,F registers
16459reg [63:0] prev_reg70; // includes G,W,C,F registers
16460reg [63:0] prev_reg71; // includes G,W,C,F registers
16461reg [63:0] prev_reg72; // includes G,W,C,F registers
16462reg [63:0] prev_reg73; // includes G,W,C,F registers
16463reg [63:0] prev_reg74; // includes G,W,C,F registers
16464reg [63:0] prev_reg75; // includes G,W,C,F registers
16465reg [63:0] prev_reg76; // includes G,W,C,F registers
16466reg [63:0] prev_reg77; // includes G,W,C,F registers
16467reg [63:0] prev_reg78; // includes G,W,C,F registers
16468reg [63:0] prev_reg79; // includes G,W,C,F registers
16469reg [63:0] prev_reg80; // includes G,W,C,F registers
16470reg [63:0] prev_reg81; // includes G,W,C,F registers
16471reg [63:0] prev_reg82; // includes G,W,C,F registers
16472reg [63:0] prev_reg83; // includes G,W,C,F registers
16473reg [63:0] prev_reg84; // includes G,W,C,F registers
16474reg [63:0] prev_reg85; // includes G,W,C,F registers
16475reg [63:0] prev_reg86; // includes G,W,C,F registers
16476reg [63:0] prev_reg87; // includes G,W,C,F registers
16477reg [63:0] prev_reg88; // includes G,W,C,F registers
16478reg [63:0] prev_reg89; // includes G,W,C,F registers
16479reg [63:0] prev_reg90; // includes G,W,C,F registers
16480reg [63:0] prev_reg91; // includes G,W,C,F registers
16481reg [63:0] prev_reg92; // includes G,W,C,F registers
16482reg [63:0] prev_reg93; // includes G,W,C,F registers
16483reg [63:0] prev_reg94; // includes G,W,C,F registers
16484reg [63:0] prev_reg95; // includes G,W,C,F registers
16485reg [63:0] prev_reg96; // includes G,W,C,F registers
16486reg [63:0] prev_reg97; // includes G,W,C,F registers
16487reg [63:0] prev_reg98; // includes G,W,C,F registers
16488reg [63:0] prev_reg99; // includes G,W,C,F registers
16489reg [63:0] prev_reg100; // includes G,W,C,F registers
16490reg [63:0] prev_reg101; // includes G,W,C,F registers
16491reg [63:0] prev_reg102; // includes G,W,C,F registers
16492reg [63:0] prev_reg103; // includes G,W,C,F registers
16493reg [63:0] prev_reg104; // includes G,W,C,F registers
16494reg [63:0] prev_reg105; // includes G,W,C,F registers
16495reg [63:0] prev_reg106; // includes G,W,C,F registers
16496reg [63:0] prev_reg107; // includes G,W,C,F registers
16497reg [63:0] prev_reg108; // includes G,W,C,F registers
16498reg [63:0] prev_reg109; // includes G,W,C,F registers
16499reg [63:0] prev_reg110; // includes G,W,C,F registers
16500reg [63:0] prev_reg111; // includes G,W,C,F registers
16501reg [63:0] prev_reg112; // includes G,W,C,F registers
16502reg [63:0] prev_reg113; // includes G,W,C,F registers
16503reg [63:0] prev_reg114; // includes G,W,C,F registers
16504reg [63:0] prev_reg115; // includes G,W,C,F registers
16505reg [63:0] prev_reg116; // includes G,W,C,F registers
16506reg [63:0] prev_reg117; // includes G,W,C,F registers
16507reg [63:0] prev_reg118; // includes G,W,C,F registers
16508reg [63:0] prev_reg119; // includes G,W,C,F registers
16509reg [63:0] prev_reg120; // includes G,W,C,F registers
16510reg [63:0] prev_reg121; // includes G,W,C,F registers
16511reg [63:0] prev_reg122; // includes G,W,C,F registers
16512reg [63:0] prev_reg123; // includes G,W,C,F registers
16513reg [63:0] prev_reg124; // includes G,W,C,F registers
16514reg [63:0] prev_reg125; // includes G,W,C,F registers
16515reg [63:0] prev_reg126; // includes G,W,C,F registers
16516reg [63:0] prev_reg127; // includes G,W,C,F registers
16517reg [63:0] prev_reg128; // includes G,W,C,F registers
16518reg [63:0] prev_reg129; // includes G,W,C,F registers
16519reg [63:0] prev_reg130; // includes G,W,C,F registers
16520reg [63:0] prev_reg131; // includes G,W,C,F registers
16521reg [63:0] prev_reg132; // includes G,W,C,F registers
16522reg [63:0] prev_reg133; // includes G,W,C,F registers
16523reg [63:0] prev_reg134; // includes G,W,C,F registers
16524reg [63:0] prev_reg135; // includes G,W,C,F registers
16525reg [63:0] prev_reg136; // includes G,W,C,F registers
16526reg [63:0] prev_reg137; // includes G,W,C,F registers
16527reg [63:0] prev_reg138; // includes G,W,C,F registers
16528reg [63:0] prev_reg139; // includes G,W,C,F registers
16529reg [63:0] prev_reg140; // includes G,W,C,F registers
16530reg [63:0] prev_reg141; // includes G,W,C,F registers
16531reg [63:0] prev_reg142; // includes G,W,C,F registers
16532reg [63:0] prev_reg143; // includes G,W,C,F registers
16533reg [63:0] prev_reg144; // includes G,W,C,F registers
16534reg [63:0] prev_reg145; // includes G,W,C,F registers
16535reg [63:0] prev_reg146; // includes G,W,C,F registers
16536reg [63:0] prev_reg147; // includes G,W,C,F registers
16537reg [63:0] prev_reg148; // includes G,W,C,F registers
16538reg [63:0] prev_reg149; // includes G,W,C,F registers
16539reg [63:0] prev_reg150; // includes G,W,C,F registers
16540reg [63:0] prev_reg151; // includes G,W,C,F registers
16541reg [63:0] prev_reg152; // includes G,W,C,F registers
16542reg [63:0] prev_reg153; // includes G,W,C,F registers
16543reg [63:0] prev_reg154; // includes G,W,C,F registers
16544reg [63:0] prev_reg155; // includes G,W,C,F registers
16545reg [63:0] prev_reg156; // includes G,W,C,F registers
16546reg [63:0] prev_reg157; // includes G,W,C,F registers
16547reg [63:0] prev_reg158; // includes G,W,C,F registers
16548reg [63:0] prev_reg159; // includes G,W,C,F registers
16549reg [63:0] prev_reg160; // includes G,W,C,F registers
16550reg [63:0] prev_reg161; // includes G,W,C,F registers
16551reg [63:0] prev_reg162; // includes G,W,C,F registers
16552reg [63:0] prev_reg163; // includes G,W,C,F registers
16553reg [63:0] prev_reg164; // includes G,W,C,F registers
16554reg [63:0] prev_reg165; // includes G,W,C,F registers
16555reg [63:0] prev_reg166; // includes G,W,C,F registers
16556reg [63:0] prev_reg167; // includes G,W,C,F registers
16557reg [63:0] prev_reg168; // includes G,W,C,F registers
16558reg [63:0] prev_reg169; // includes G,W,C,F registers
16559reg [63:0] prev_reg170; // includes G,W,C,F registers
16560reg [63:0] prev_reg171; // includes G,W,C,F registers
16561reg [63:0] prev_reg172; // includes G,W,C,F registers
16562reg [63:0] prev_reg173; // includes G,W,C,F registers
16563reg [63:0] prev_reg174; // includes G,W,C,F registers
16564reg [63:0] prev_reg175; // includes G,W,C,F registers
16565reg [63:0] prev_reg176; // includes G,W,C,F registers
16566reg [63:0] prev_reg177; // includes G,W,C,F registers
16567reg [63:0] prev_reg178; // includes G,W,C,F registers
16568reg [63:0] prev_reg179; // includes G,W,C,F registers
16569reg [63:0] prev_reg180; // includes G,W,C,F registers
16570reg [63:0] prev_reg181; // includes G,W,C,F registers
16571reg [63:0] prev_reg182; // includes G,W,C,F registers
16572reg [63:0] prev_reg183; // includes G,W,C,F registers
16573reg [63:0] prev_reg184; // includes G,W,C,F registers
16574reg [63:0] prev_reg185; // includes G,W,C,F registers
16575reg [63:0] prev_reg186; // includes G,W,C,F registers
16576reg [63:0] prev_reg187; // includes G,W,C,F registers
16577reg [63:0] prev_reg188; // includes G,W,C,F registers
16578reg [63:0] prev_reg189; // includes G,W,C,F registers
16579reg [63:0] prev_reg190; // includes G,W,C,F registers
16580reg [63:0] prev_reg191; // includes G,W,C,F registers
16581reg [63:0] prev_reg192; // includes G,W,C,F registers
16582reg [63:0] prev_reg193; // includes G,W,C,F registers
16583reg [63:0] prev_reg194; // includes G,W,C,F registers
16584reg [63:0] prev_reg195; // includes G,W,C,F registers
16585reg [63:0] prev_reg196; // includes G,W,C,F registers
16586reg [63:0] prev_reg197; // includes G,W,C,F registers
16587reg [63:0] prev_reg198; // includes G,W,C,F registers
16588reg [63:0] prev_reg199; // includes G,W,C,F registers
16589reg [63:0] prev_reg200; // includes G,W,C,F registers
16590reg [63:0] prev_reg201; // includes G,W,C,F registers
16591reg [63:0] prev_reg202; // includes G,W,C,F registers
16592reg [63:0] prev_reg203; // includes G,W,C,F registers
16593reg [63:0] prev_reg204; // includes G,W,C,F registers
16594reg [63:0] prev_reg205; // includes G,W,C,F registers
16595reg [63:0] prev_reg206; // includes G,W,C,F registers
16596reg [63:0] prev_reg207; // includes G,W,C,F registers
16597reg [63:0] prev_reg208; // includes G,W,C,F registers
16598reg [63:0] prev_reg209; // includes G,W,C,F registers
16599reg [63:0] prev_reg210; // includes G,W,C,F registers
16600reg [63:0] prev_reg211; // includes G,W,C,F registers
16601reg [63:0] prev_reg212; // includes G,W,C,F registers
16602reg [63:0] prev_reg213; // includes G,W,C,F registers
16603reg [63:0] prev_reg214; // includes G,W,C,F registers
16604reg [63:0] prev_reg215; // includes G,W,C,F registers
16605reg [63:0] prev_reg216; // includes G,W,C,F registers
16606reg [63:0] prev_reg217; // includes G,W,C,F registers
16607reg [63:0] prev_reg218; // includes G,W,C,F registers
16608reg [63:0] prev_reg219; // includes G,W,C,F registers
16609reg [63:0] prev_reg220; // includes G,W,C,F registers
16610reg [63:0] prev_reg221; // includes G,W,C,F registers
16611reg [63:0] prev_reg222; // includes G,W,C,F registers
16612reg [63:0] prev_reg223; // includes G,W,C,F registers
16613reg [63:0] prev_reg224; // includes G,W,C,F registers
16614reg [63:0] prev_reg225; // includes G,W,C,F registers
16615reg [63:0] prev_reg226; // includes G,W,C,F registers
16616reg [63:0] prev_reg227; // includes G,W,C,F registers
16617reg [63:0] prev_reg228; // includes G,W,C,F registers
16618reg [63:0] prev_reg229; // includes G,W,C,F registers
16619reg [63:0] prev_reg230; // includes G,W,C,F registers
16620reg [63:0] prev_reg231; // includes G,W,C,F registers
16621reg [63:0] prev_reg232; // includes G,W,C,F registers
16622reg [63:0] prev_reg233; // includes G,W,C,F registers
16623reg [63:0] prev_reg234; // includes G,W,C,F registers
16624reg [63:0] prev_reg235; // includes G,W,C,F registers
16625reg [63:0] prev_reg236; // includes G,W,C,F registers
16626reg [63:0] prev_reg237; // includes G,W,C,F registers
16627reg [63:0] prev_reg238; // includes G,W,C,F registers
16628reg [63:0] prev_reg239; // includes G,W,C,F registers
16629reg [63:0] prev_reg240; // includes G,W,C,F registers
16630reg [63:0] prev_reg241; // includes G,W,C,F registers
16631reg [63:0] prev_reg242; // includes G,W,C,F registers
16632reg [63:0] prev_reg243; // includes G,W,C,F registers
16633reg [63:0] prev_reg244; // includes G,W,C,F registers
16634reg [63:0] prev_reg245; // includes G,W,C,F registers
16635reg [63:0] prev_reg246; // includes G,W,C,F registers
16636reg [63:0] prev_reg247; // includes G,W,C,F registers
16637reg [63:0] prev_reg248; // includes G,W,C,F registers
16638reg [63:0] prev_reg249; // includes G,W,C,F registers
16639reg [63:0] prev_reg250; // includes G,W,C,F registers
16640reg [63:0] prev_reg251; // includes G,W,C,F registers
16641reg [63:0] prev_reg252; // includes G,W,C,F registers
16642reg [63:0] prev_reg253; // includes G,W,C,F registers
16643reg [63:0] prev_reg254; // includes G,W,C,F registers
16644reg [63:0] prev_reg255; // includes G,W,C,F registers
16645
16646reg [1:0] th_gl; // copy of GL_reg
16647
16648reg [63:0] gl0_reg0;
16649reg [63:0] gl1_reg0;
16650reg [63:0] gl2_reg0;
16651reg [63:0] gl3_reg0;
16652reg [63:0] gl0_reg1;
16653reg [63:0] gl1_reg1;
16654reg [63:0] gl2_reg1;
16655reg [63:0] gl3_reg1;
16656reg [63:0] gl0_reg2;
16657reg [63:0] gl1_reg2;
16658reg [63:0] gl2_reg2;
16659reg [63:0] gl3_reg2;
16660reg [63:0] gl0_reg3;
16661reg [63:0] gl1_reg3;
16662reg [63:0] gl2_reg3;
16663reg [63:0] gl3_reg3;
16664reg [63:0] gl0_reg4;
16665reg [63:0] gl1_reg4;
16666reg [63:0] gl2_reg4;
16667reg [63:0] gl3_reg4;
16668reg [63:0] gl0_reg5;
16669reg [63:0] gl1_reg5;
16670reg [63:0] gl2_reg5;
16671reg [63:0] gl3_reg5;
16672reg [63:0] gl0_reg6;
16673reg [63:0] gl1_reg6;
16674reg [63:0] gl2_reg6;
16675reg [63:0] gl3_reg6;
16676reg [63:0] gl0_reg7;
16677reg [63:0] gl1_reg7;
16678reg [63:0] gl2_reg7;
16679reg [63:0] gl3_reg7;
16680
16681reg [63:0] win0_reg8;
16682reg [63:0] win1_reg8;
16683reg [63:0] win2_reg8;
16684reg [63:0] win3_reg8;
16685reg [63:0] win4_reg8;
16686reg [63:0] win5_reg8;
16687reg [63:0] win6_reg8;
16688reg [63:0] win7_reg8;
16689reg [63:0] win0_reg9;
16690reg [63:0] win1_reg9;
16691reg [63:0] win2_reg9;
16692reg [63:0] win3_reg9;
16693reg [63:0] win4_reg9;
16694reg [63:0] win5_reg9;
16695reg [63:0] win6_reg9;
16696reg [63:0] win7_reg9;
16697reg [63:0] win0_reg10;
16698reg [63:0] win1_reg10;
16699reg [63:0] win2_reg10;
16700reg [63:0] win3_reg10;
16701reg [63:0] win4_reg10;
16702reg [63:0] win5_reg10;
16703reg [63:0] win6_reg10;
16704reg [63:0] win7_reg10;
16705reg [63:0] win0_reg11;
16706reg [63:0] win1_reg11;
16707reg [63:0] win2_reg11;
16708reg [63:0] win3_reg11;
16709reg [63:0] win4_reg11;
16710reg [63:0] win5_reg11;
16711reg [63:0] win6_reg11;
16712reg [63:0] win7_reg11;
16713reg [63:0] win0_reg12;
16714reg [63:0] win1_reg12;
16715reg [63:0] win2_reg12;
16716reg [63:0] win3_reg12;
16717reg [63:0] win4_reg12;
16718reg [63:0] win5_reg12;
16719reg [63:0] win6_reg12;
16720reg [63:0] win7_reg12;
16721reg [63:0] win0_reg13;
16722reg [63:0] win1_reg13;
16723reg [63:0] win2_reg13;
16724reg [63:0] win3_reg13;
16725reg [63:0] win4_reg13;
16726reg [63:0] win5_reg13;
16727reg [63:0] win6_reg13;
16728reg [63:0] win7_reg13;
16729reg [63:0] win0_reg14;
16730reg [63:0] win1_reg14;
16731reg [63:0] win2_reg14;
16732reg [63:0] win3_reg14;
16733reg [63:0] win4_reg14;
16734reg [63:0] win5_reg14;
16735reg [63:0] win6_reg14;
16736reg [63:0] win7_reg14;
16737reg [63:0] win0_reg15;
16738reg [63:0] win1_reg15;
16739reg [63:0] win2_reg15;
16740reg [63:0] win3_reg15;
16741reg [63:0] win4_reg15;
16742reg [63:0] win5_reg15;
16743reg [63:0] win6_reg15;
16744reg [63:0] win7_reg15;
16745reg [63:0] win0_reg16;
16746reg [63:0] win1_reg16;
16747reg [63:0] win2_reg16;
16748reg [63:0] win3_reg16;
16749reg [63:0] win4_reg16;
16750reg [63:0] win5_reg16;
16751reg [63:0] win6_reg16;
16752reg [63:0] win7_reg16;
16753reg [63:0] win0_reg17;
16754reg [63:0] win1_reg17;
16755reg [63:0] win2_reg17;
16756reg [63:0] win3_reg17;
16757reg [63:0] win4_reg17;
16758reg [63:0] win5_reg17;
16759reg [63:0] win6_reg17;
16760reg [63:0] win7_reg17;
16761reg [63:0] win0_reg18;
16762reg [63:0] win1_reg18;
16763reg [63:0] win2_reg18;
16764reg [63:0] win3_reg18;
16765reg [63:0] win4_reg18;
16766reg [63:0] win5_reg18;
16767reg [63:0] win6_reg18;
16768reg [63:0] win7_reg18;
16769reg [63:0] win0_reg19;
16770reg [63:0] win1_reg19;
16771reg [63:0] win2_reg19;
16772reg [63:0] win3_reg19;
16773reg [63:0] win4_reg19;
16774reg [63:0] win5_reg19;
16775reg [63:0] win6_reg19;
16776reg [63:0] win7_reg19;
16777reg [63:0] win0_reg20;
16778reg [63:0] win1_reg20;
16779reg [63:0] win2_reg20;
16780reg [63:0] win3_reg20;
16781reg [63:0] win4_reg20;
16782reg [63:0] win5_reg20;
16783reg [63:0] win6_reg20;
16784reg [63:0] win7_reg20;
16785reg [63:0] win0_reg21;
16786reg [63:0] win1_reg21;
16787reg [63:0] win2_reg21;
16788reg [63:0] win3_reg21;
16789reg [63:0] win4_reg21;
16790reg [63:0] win5_reg21;
16791reg [63:0] win6_reg21;
16792reg [63:0] win7_reg21;
16793reg [63:0] win0_reg22;
16794reg [63:0] win1_reg22;
16795reg [63:0] win2_reg22;
16796reg [63:0] win3_reg22;
16797reg [63:0] win4_reg22;
16798reg [63:0] win5_reg22;
16799reg [63:0] win6_reg22;
16800reg [63:0] win7_reg22;
16801reg [63:0] win0_reg23;
16802reg [63:0] win1_reg23;
16803reg [63:0] win2_reg23;
16804reg [63:0] win3_reg23;
16805reg [63:0] win4_reg23;
16806reg [63:0] win5_reg23;
16807reg [63:0] win6_reg23;
16808reg [63:0] win7_reg23;
16809reg [63:0] win0_reg24;
16810reg [63:0] win1_reg24;
16811reg [63:0] win2_reg24;
16812reg [63:0] win3_reg24;
16813reg [63:0] win4_reg24;
16814reg [63:0] win5_reg24;
16815reg [63:0] win6_reg24;
16816reg [63:0] win7_reg24;
16817reg [63:0] win0_reg25;
16818reg [63:0] win1_reg25;
16819reg [63:0] win2_reg25;
16820reg [63:0] win3_reg25;
16821reg [63:0] win4_reg25;
16822reg [63:0] win5_reg25;
16823reg [63:0] win6_reg25;
16824reg [63:0] win7_reg25;
16825reg [63:0] win0_reg26;
16826reg [63:0] win1_reg26;
16827reg [63:0] win2_reg26;
16828reg [63:0] win3_reg26;
16829reg [63:0] win4_reg26;
16830reg [63:0] win5_reg26;
16831reg [63:0] win6_reg26;
16832reg [63:0] win7_reg26;
16833reg [63:0] win0_reg27;
16834reg [63:0] win1_reg27;
16835reg [63:0] win2_reg27;
16836reg [63:0] win3_reg27;
16837reg [63:0] win4_reg27;
16838reg [63:0] win5_reg27;
16839reg [63:0] win6_reg27;
16840reg [63:0] win7_reg27;
16841reg [63:0] win0_reg28;
16842reg [63:0] win1_reg28;
16843reg [63:0] win2_reg28;
16844reg [63:0] win3_reg28;
16845reg [63:0] win4_reg28;
16846reg [63:0] win5_reg28;
16847reg [63:0] win6_reg28;
16848reg [63:0] win7_reg28;
16849reg [63:0] win0_reg29;
16850reg [63:0] win1_reg29;
16851reg [63:0] win2_reg29;
16852reg [63:0] win3_reg29;
16853reg [63:0] win4_reg29;
16854reg [63:0] win5_reg29;
16855reg [63:0] win6_reg29;
16856reg [63:0] win7_reg29;
16857reg [63:0] win0_reg30;
16858reg [63:0] win1_reg30;
16859reg [63:0] win2_reg30;
16860reg [63:0] win3_reg30;
16861reg [63:0] win4_reg30;
16862reg [63:0] win5_reg30;
16863reg [63:0] win6_reg30;
16864reg [63:0] win7_reg30;
16865reg [63:0] win0_reg31;
16866reg [63:0] win1_reg31;
16867reg [63:0] win2_reg31;
16868reg [63:0] win3_reg31;
16869reg [63:0] win4_reg31;
16870reg [63:0] win5_reg31;
16871reg [63:0] win6_reg31;
16872reg [63:0] win7_reg31;
16873
16874reg [63:0] itagacc_fx5;
16875reg [63:0] itagacc_fb;
16876reg [63:0] itagacc_fw;
16877reg [63:0] itagacc_fw1;
16878reg [63:0] itagacc_fw2;
16879
16880reg [63:0] dtagacc_fx5;
16881reg [63:0] dtagacc_fb;
16882reg [63:0] dtagacc_fw;
16883reg [63:0] dtagacc_fw1;
16884reg [63:0] dtagacc_fw2;
16885
16886reg [47:0] dsfar_fb;
16887reg [47:0] dsfar_fw;
16888reg [47:0] dsfar_fw1;
16889reg [47:0] dsfar_fw2;
16890
16891reg [47:0] pc_fx4;
16892reg [47:0] pc_fx5;
16893reg [47:0] pc_fb;
16894reg [47:0] pc_fw;
16895reg [47:0] pc_fw1;
16896reg [47:0] pc_fw2;
16897reg [47:0] pc_last;
16898
16899reg tlu_complete_1;
16900reg tlu_complete_2;
16901reg tlu_complete_3;
16902
16903reg frf_w1_valid_fw1;
16904reg frf_w1_valid_fw2;
16905
16906reg frf_w1_skip_addr4_fw1;
16907reg frf_w1_skip_addr4_fw2;
16908reg [2:0] fprs_fb;
16909reg [2:0] fprs_fw;
16910reg [2:0] fprs_fw1;
16911reg [2:0] fprs_fw2;
16912
16913
16914reg [1:0] frf_w2_valid_fw;
16915reg [1:0] frf_w2_valid_bn;
16916reg [2:0] frf_w2_tid_fw;
16917reg [4:0] frf_w2_addr_fw;
16918
16919reg [1:0] frf_w1_valid_fw;
16920reg [2:0] frf_w1_tid_fw;
16921reg [4:0] frf_w1_addr_fw;
16922
16923reg thread_running;
16924
16925reg in_wmr;
16926reg wmr; // latched to get edge
16927reg por_a; // latched to get edge
16928reg por_b; // latched to get edge
16929
16930reg nas_pipe_enable; // Turns on nas_pipe capture and Riesling SSTEP
16931reg first_op;
16932reg [63:0] mytime;
16933wire [5:0] mytnum;
16934wire mytg;
16935integer junk;
16936integer myindex;
16937integer irf_offset;
16938wire oddwin;
16939wire frf_w1_valid_even;
16940wire frf_w1_valid_odd;
16941wire frf_w2_valid_even;
16942wire frf_w2_valid_odd;
16943wire [4:0] frf_w1_skip_addr;
16944wire [4:0] frf_w2_skip_addr;
16945reg good_trap_detected; // Used for -nosas only.
16946
16947//----------------------------------------------------------
16948`ifdef DEBUG_PIPE
16949
16950wire [63:0] g0;
16951wire [63:0] g1;
16952wire [63:0] g2;
16953wire [63:0] g3;
16954wire [63:0] g4;
16955wire [63:0] g5;
16956wire [63:0] g6;
16957wire [63:0] g7;
16958
16959wire [63:0] o0;
16960wire [63:0] o1;
16961wire [63:0] o2;
16962wire [63:0] o3;
16963wire [63:0] o4;
16964wire [63:0] o5;
16965wire [63:0] o6;
16966wire [63:0] o7;
16967
16968wire [63:0] l0;
16969wire [63:0] l1;
16970wire [63:0] l2;
16971wire [63:0] l3;
16972wire [63:0] l4;
16973wire [63:0] l5;
16974wire [63:0] l6;
16975wire [63:0] l7;
16976
16977wire [63:0] i0;
16978wire [63:0] i1;
16979wire [63:0] i2;
16980wire [63:0] i3;
16981wire [63:0] i4;
16982wire [63:0] i5;
16983wire [63:0] i6;
16984wire [63:0] i7;
16985
16986wire [31:0] frf_0;
16987wire [31:0] frf_1;
16988wire [31:0] frf_2;
16989wire [31:0] frf_3;
16990wire [31:0] frf_4;
16991wire [31:0] frf_5;
16992wire [31:0] frf_6;
16993wire [31:0] frf_7;
16994wire [31:0] frf_8;
16995wire [31:0] frf_9;
16996wire [31:0] frf_10;
16997wire [31:0] frf_11;
16998wire [31:0] frf_12;
16999wire [31:0] frf_13;
17000wire [31:0] frf_14;
17001wire [31:0] frf_15;
17002wire [31:0] frf_16;
17003wire [31:0] frf_17;
17004wire [31:0] frf_18;
17005wire [31:0] frf_19;
17006wire [31:0] frf_20;
17007wire [31:0] frf_21;
17008wire [31:0] frf_22;
17009wire [31:0] frf_23;
17010wire [31:0] frf_24;
17011wire [31:0] frf_25;
17012wire [31:0] frf_26;
17013wire [31:0] frf_27;
17014wire [31:0] frf_28;
17015wire [31:0] frf_29;
17016wire [31:0] frf_30;
17017wire [31:0] frf_31;
17018wire [31:0] frf_32;
17019wire [31:0] frf_33;
17020wire [31:0] frf_34;
17021wire [31:0] frf_35;
17022wire [31:0] frf_36;
17023wire [31:0] frf_37;
17024wire [31:0] frf_38;
17025wire [31:0] frf_39;
17026wire [31:0] frf_40;
17027wire [31:0] frf_41;
17028wire [31:0] frf_42;
17029wire [31:0] frf_43;
17030wire [31:0] frf_44;
17031wire [31:0] frf_45;
17032wire [31:0] frf_46;
17033wire [31:0] frf_47;
17034wire [31:0] frf_48;
17035wire [31:0] frf_49;
17036wire [31:0] frf_50;
17037wire [31:0] frf_51;
17038wire [31:0] frf_52;
17039wire [31:0] frf_53;
17040wire [31:0] frf_54;
17041wire [31:0] frf_55;
17042wire [31:0] frf_56;
17043wire [31:0] frf_57;
17044wire [31:0] frf_58;
17045wire [31:0] frf_59;
17046wire [31:0] frf_60;
17047wire [31:0] frf_61;
17048wire [31:0] frf_62;
17049wire [31:0] frf_63;
17050
17051wire [`DELTA_WIDTH:0] delta_fx4_0;
17052wire [`DELTA_WIDTH:0] delta_fx4_1;
17053wire [`DELTA_WIDTH:0] delta_fx4_2;
17054wire [`DELTA_WIDTH:0] delta_fx4_3;
17055wire [`DELTA_WIDTH:0] delta_fx4_4;
17056wire [`DELTA_WIDTH:0] delta_fx4_5;
17057wire [`DELTA_WIDTH:0] delta_fx4_6;
17058wire [`DELTA_WIDTH:0] delta_fx4_7;
17059
17060wire [`DELTA_WIDTH:0] delta_fx5_0;
17061wire [`DELTA_WIDTH:0] delta_fx5_1;
17062wire [`DELTA_WIDTH:0] delta_fx5_2;
17063wire [`DELTA_WIDTH:0] delta_fx5_3;
17064wire [`DELTA_WIDTH:0] delta_fx5_4;
17065wire [`DELTA_WIDTH:0] delta_fx5_5;
17066wire [`DELTA_WIDTH:0] delta_fx5_6;
17067wire [`DELTA_WIDTH:0] delta_fx5_7;
17068
17069wire [`DELTA_WIDTH:0] delta_fb_0;
17070wire [`DELTA_WIDTH:0] delta_fb_1;
17071wire [`DELTA_WIDTH:0] delta_fb_2;
17072wire [`DELTA_WIDTH:0] delta_fb_3;
17073wire [`DELTA_WIDTH:0] delta_fb_4;
17074wire [`DELTA_WIDTH:0] delta_fb_5;
17075wire [`DELTA_WIDTH:0] delta_fb_6;
17076wire [`DELTA_WIDTH:0] delta_fb_7;
17077
17078wire [`DELTA_WIDTH:0] delta_fw_0;
17079wire [`DELTA_WIDTH:0] delta_fw_1;
17080wire [`DELTA_WIDTH:0] delta_fw_2;
17081wire [`DELTA_WIDTH:0] delta_fw_3;
17082wire [`DELTA_WIDTH:0] delta_fw_4;
17083wire [`DELTA_WIDTH:0] delta_fw_5;
17084wire [`DELTA_WIDTH:0] delta_fw_6;
17085wire [`DELTA_WIDTH:0] delta_fw_7;
17086
17087wire [`DELTA_WIDTH:0] delta_fw1_0;
17088wire [`DELTA_WIDTH:0] delta_fw1_1;
17089wire [`DELTA_WIDTH:0] delta_fw1_2;
17090wire [`DELTA_WIDTH:0] delta_fw1_3;
17091wire [`DELTA_WIDTH:0] delta_fw1_4;
17092wire [`DELTA_WIDTH:0] delta_fw1_5;
17093wire [`DELTA_WIDTH:0] delta_fw1_6;
17094wire [`DELTA_WIDTH:0] delta_fw1_7;
17095
17096wire [`DELTA_WIDTH:0] delta_fw2_0;
17097wire [`DELTA_WIDTH:0] delta_fw2_1;
17098wire [`DELTA_WIDTH:0] delta_fw2_2;
17099wire [`DELTA_WIDTH:0] delta_fw2_3;
17100wire [`DELTA_WIDTH:0] delta_fw2_4;
17101wire [`DELTA_WIDTH:0] delta_fw2_5;
17102wire [`DELTA_WIDTH:0] delta_fw2_6;
17103wire [`DELTA_WIDTH:0] delta_fw2_7;
17104
17105wire [`DELTA_WIDTH:0] delta_prev_0;
17106wire [`DELTA_WIDTH:0] delta_prev_1;
17107wire [`DELTA_WIDTH:0] delta_prev_2;
17108wire [`DELTA_WIDTH:0] delta_prev_3;
17109wire [`DELTA_WIDTH:0] delta_prev_4;
17110wire [`DELTA_WIDTH:0] delta_prev_5;
17111wire [`DELTA_WIDTH:0] delta_prev_6;
17112wire [`DELTA_WIDTH:0] delta_prev_7;
17113
17114initial begin
17115 #0;
17116 `PR_ALWAYS ("arg", `ALWAYS,"T%0d DEBUG_PIPE turned ON",mytnum);
17117end
17118
17119//----------------------------------------------------------
17120// Note: no remap of %g,%o,%l,%i regs based on CWP or GL
17121assign g0 = (mytid<=3) ? `IRF3_EXU0[( 0+irf_offset)] : `IRF3_EXU1[( 0+irf_offset)];
17122assign g1 = (mytid<=3) ? `IRF3_EXU0[( 1+irf_offset)] : `IRF3_EXU1[( 1+irf_offset)];
17123assign g2 = (mytid<=3) ? `IRF3_EXU0[( 2+irf_offset)] : `IRF3_EXU1[( 2+irf_offset)];
17124assign g3 = (mytid<=3) ? `IRF3_EXU0[( 3+irf_offset)] : `IRF3_EXU1[( 3+irf_offset)];
17125assign g4 = (mytid<=3) ? `IRF3_EXU0[( 4+irf_offset)] : `IRF3_EXU1[( 4+irf_offset)];
17126assign g5 = (mytid<=3) ? `IRF3_EXU0[( 5+irf_offset)] : `IRF3_EXU1[( 5+irf_offset)];
17127assign g6 = (mytid<=3) ? `IRF3_EXU0[( 6+irf_offset)] : `IRF3_EXU1[( 6+irf_offset)];
17128assign g7 = (mytid<=3) ? `IRF3_EXU0[( 7+irf_offset)] : `IRF3_EXU1[( 7+irf_offset)];
17129
17130assign o0 = (mytid<=3) ? `IRF3_EXU0[( 8+irf_offset)] : `IRF3_EXU1[( 8+irf_offset)];
17131assign o1 = (mytid<=3) ? `IRF3_EXU0[( 9+irf_offset)] : `IRF3_EXU1[( 9+irf_offset)];
17132assign o2 = (mytid<=3) ? `IRF3_EXU0[(10+irf_offset)] : `IRF3_EXU1[(10+irf_offset)];
17133assign o3 = (mytid<=3) ? `IRF3_EXU0[(11+irf_offset)] : `IRF3_EXU1[(11+irf_offset)];
17134assign o4 = (mytid<=3) ? `IRF3_EXU0[(12+irf_offset)] : `IRF3_EXU1[(12+irf_offset)];
17135assign o5 = (mytid<=3) ? `IRF3_EXU0[(13+irf_offset)] : `IRF3_EXU1[(13+irf_offset)];
17136assign o6 = (mytid<=3) ? `IRF3_EXU0[(14+irf_offset)] : `IRF3_EXU1[(14+irf_offset)];
17137assign o7 = (mytid<=3) ? `IRF3_EXU0[(15+irf_offset)] : `IRF3_EXU1[(15+irf_offset)];
17138
17139assign l0 = (mytid<=3) ? `IRF3_EXU0[(16+irf_offset)] : `IRF3_EXU1[(16+irf_offset)];
17140assign l1 = (mytid<=3) ? `IRF3_EXU0[(17+irf_offset)] : `IRF3_EXU1[(17+irf_offset)];
17141assign l2 = (mytid<=3) ? `IRF3_EXU0[(18+irf_offset)] : `IRF3_EXU1[(18+irf_offset)];
17142assign l3 = (mytid<=3) ? `IRF3_EXU0[(19+irf_offset)] : `IRF3_EXU1[(19+irf_offset)];
17143assign l4 = (mytid<=3) ? `IRF3_EXU0[(20+irf_offset)] : `IRF3_EXU1[(20+irf_offset)];
17144assign l5 = (mytid<=3) ? `IRF3_EXU0[(21+irf_offset)] : `IRF3_EXU1[(21+irf_offset)];
17145assign l6 = (mytid<=3) ? `IRF3_EXU0[(22+irf_offset)] : `IRF3_EXU1[(22+irf_offset)];
17146assign l7 = (mytid<=3) ? `IRF3_EXU0[(23+irf_offset)] : `IRF3_EXU1[(23+irf_offset)];
17147
17148assign i0 = (mytid<=3) ? `IRF3_EXU0[(24+irf_offset)] : `IRF3_EXU1[(24+irf_offset)];
17149assign i1 = (mytid<=3) ? `IRF3_EXU0[(25+irf_offset)] : `IRF3_EXU1[(25+irf_offset)];
17150assign i2 = (mytid<=3) ? `IRF3_EXU0[(26+irf_offset)] : `IRF3_EXU1[(26+irf_offset)];
17151assign i3 = (mytid<=3) ? `IRF3_EXU0[(27+irf_offset)] : `IRF3_EXU1[(27+irf_offset)];
17152assign i4 = (mytid<=3) ? `IRF3_EXU0[(28+irf_offset)] : `IRF3_EXU1[(28+irf_offset)];
17153assign i5 = (mytid<=3) ? `IRF3_EXU0[(29+irf_offset)] : `IRF3_EXU1[(29+irf_offset)];
17154assign i6 = (mytid<=3) ? `IRF3_EXU0[(30+irf_offset)] : `IRF3_EXU1[(30+irf_offset)];
17155assign i7 = (mytid<=3) ? `IRF3_EXU0[(31+irf_offset)] : `IRF3_EXU1[(31+irf_offset)];
17156
17157//----------------------------------------------------------
17158assign frf_0 = `FRF3_EVEN[(mytid*32)+ 0];
17159assign frf_2 = `FRF3_EVEN[(mytid*32)+ 1];
17160assign frf_4 = `FRF3_EVEN[(mytid*32)+ 2];
17161assign frf_6 = `FRF3_EVEN[(mytid*32)+ 3];
17162assign frf_8 = `FRF3_EVEN[(mytid*32)+ 4];
17163assign frf_10 = `FRF3_EVEN[(mytid*32)+ 5];
17164assign frf_12 = `FRF3_EVEN[(mytid*32)+ 6];
17165assign frf_14 = `FRF3_EVEN[(mytid*32)+ 7];
17166assign frf_16 = `FRF3_EVEN[(mytid*32)+ 8];
17167assign frf_18 = `FRF3_EVEN[(mytid*32)+ 9];
17168assign frf_20 = `FRF3_EVEN[(mytid*32)+ 10];
17169assign frf_22 = `FRF3_EVEN[(mytid*32)+ 11];
17170assign frf_24 = `FRF3_EVEN[(mytid*32)+ 12];
17171assign frf_26 = `FRF3_EVEN[(mytid*32)+ 13];
17172assign frf_28 = `FRF3_EVEN[(mytid*32)+ 14];
17173assign frf_30 = `FRF3_EVEN[(mytid*32)+ 15];
17174assign frf_32 = `FRF3_EVEN[(mytid*32)+ 16];
17175assign frf_34 = `FRF3_EVEN[(mytid*32)+ 17];
17176assign frf_36 = `FRF3_EVEN[(mytid*32)+ 18];
17177assign frf_38 = `FRF3_EVEN[(mytid*32)+ 19];
17178assign frf_40 = `FRF3_EVEN[(mytid*32)+ 20];
17179assign frf_42 = `FRF3_EVEN[(mytid*32)+ 21];
17180assign frf_44 = `FRF3_EVEN[(mytid*32)+ 22];
17181assign frf_46 = `FRF3_EVEN[(mytid*32)+ 23];
17182assign frf_48 = `FRF3_EVEN[(mytid*32)+ 24];
17183assign frf_50 = `FRF3_EVEN[(mytid*32)+ 25];
17184assign frf_52 = `FRF3_EVEN[(mytid*32)+ 26];
17185assign frf_54 = `FRF3_EVEN[(mytid*32)+ 27];
17186assign frf_56 = `FRF3_EVEN[(mytid*32)+ 28];
17187assign frf_58 = `FRF3_EVEN[(mytid*32)+ 29];
17188assign frf_60 = `FRF3_EVEN[(mytid*32)+ 30];
17189assign frf_62 = `FRF3_EVEN[(mytid*32)+ 31];
17190
17191assign frf_1 = `FRF3_ODD[(mytid*32)+ 0];
17192assign frf_3 = `FRF3_ODD[(mytid*32)+ 1];
17193assign frf_5 = `FRF3_ODD[(mytid*32)+ 2];
17194assign frf_7 = `FRF3_ODD[(mytid*32)+ 3];
17195assign frf_9 = `FRF3_ODD[(mytid*32)+ 4];
17196assign frf_11 = `FRF3_ODD[(mytid*32)+ 5];
17197assign frf_13 = `FRF3_ODD[(mytid*32)+ 6];
17198assign frf_15 = `FRF3_ODD[(mytid*32)+ 7];
17199assign frf_17 = `FRF3_ODD[(mytid*32)+ 8];
17200assign frf_19 = `FRF3_ODD[(mytid*32)+ 9];
17201assign frf_21 = `FRF3_ODD[(mytid*32)+ 10];
17202assign frf_23 = `FRF3_ODD[(mytid*32)+ 11];
17203assign frf_25 = `FRF3_ODD[(mytid*32)+ 12];
17204assign frf_27 = `FRF3_ODD[(mytid*32)+ 13];
17205assign frf_29 = `FRF3_ODD[(mytid*32)+ 14];
17206assign frf_31 = `FRF3_ODD[(mytid*32)+ 15];
17207assign frf_33 = `FRF3_ODD[(mytid*32)+ 16];
17208assign frf_35 = `FRF3_ODD[(mytid*32)+ 17];
17209assign frf_37 = `FRF3_ODD[(mytid*32)+ 18];
17210assign frf_39 = `FRF3_ODD[(mytid*32)+ 19];
17211assign frf_41 = `FRF3_ODD[(mytid*32)+ 20];
17212assign frf_43 = `FRF3_ODD[(mytid*32)+ 21];
17213assign frf_45 = `FRF3_ODD[(mytid*32)+ 22];
17214assign frf_47 = `FRF3_ODD[(mytid*32)+ 23];
17215assign frf_49 = `FRF3_ODD[(mytid*32)+ 24];
17216assign frf_51 = `FRF3_ODD[(mytid*32)+ 25];
17217assign frf_53 = `FRF3_ODD[(mytid*32)+ 26];
17218assign frf_55 = `FRF3_ODD[(mytid*32)+ 27];
17219assign frf_57 = `FRF3_ODD[(mytid*32)+ 28];
17220assign frf_59 = `FRF3_ODD[(mytid*32)+ 29];
17221assign frf_61 = `FRF3_ODD[(mytid*32)+ 30];
17222assign frf_63 = `FRF3_ODD[(mytid*32)+ 31];
17223
17224//----------------------------------------------------------
17225assign delta_fx4_0 = delta_fx4[0];
17226assign delta_fx4_1 = delta_fx4[1];
17227assign delta_fx4_2 = delta_fx4[2];
17228assign delta_fx4_3 = delta_fx4[3];
17229assign delta_fx4_4 = delta_fx4[4];
17230assign delta_fx4_5 = delta_fx4[5];
17231assign delta_fx4_6 = delta_fx4[6];
17232assign delta_fx4_7 = delta_fx4[7];
17233
17234assign delta_fx5_0 = delta_fx5[0];
17235assign delta_fx5_1 = delta_fx5[1];
17236assign delta_fx5_2 = delta_fx5[2];
17237assign delta_fx5_3 = delta_fx5[3];
17238assign delta_fx5_4 = delta_fx5[4];
17239assign delta_fx5_5 = delta_fx5[5];
17240assign delta_fx5_6 = delta_fx5[6];
17241assign delta_fx5_7 = delta_fx5[7];
17242
17243assign delta_fb_0 = delta_fb[0];
17244assign delta_fb_1 = delta_fb[1];
17245assign delta_fb_2 = delta_fb[2];
17246assign delta_fb_3 = delta_fb[3];
17247assign delta_fb_4 = delta_fb[4];
17248assign delta_fb_5 = delta_fb[5];
17249assign delta_fb_6 = delta_fb[6];
17250assign delta_fb_7 = delta_fb[7];
17251
17252assign delta_fw_0 = delta_fw[0];
17253assign delta_fw_1 = delta_fw[1];
17254assign delta_fw_2 = delta_fw[2];
17255assign delta_fw_3 = delta_fw[3];
17256assign delta_fw_4 = delta_fw[4];
17257assign delta_fw_5 = delta_fw[5];
17258assign delta_fw_6 = delta_fw[6];
17259assign delta_fw_7 = delta_fw[7];
17260
17261assign delta_fw1_0 = delta_fw1[0];
17262assign delta_fw1_1 = delta_fw1[1];
17263assign delta_fw1_2 = delta_fw1[2];
17264assign delta_fw1_3 = delta_fw1[3];
17265assign delta_fw1_4 = delta_fw1[4];
17266assign delta_fw1_5 = delta_fw1[5];
17267assign delta_fw1_6 = delta_fw1[6];
17268assign delta_fw1_7 = delta_fw1[7];
17269
17270assign delta_fw2_0 = delta_fw2[0];
17271assign delta_fw2_1 = delta_fw2[1];
17272assign delta_fw2_2 = delta_fw2[2];
17273assign delta_fw2_3 = delta_fw2[3];
17274assign delta_fw2_4 = delta_fw2[4];
17275assign delta_fw2_5 = delta_fw2[5];
17276assign delta_fw2_6 = delta_fw2[6];
17277assign delta_fw2_7 = delta_fw2[7];
17278
17279assign delta_prev_0 = delta_prev[0];
17280assign delta_prev_1 = delta_prev[1];
17281assign delta_prev_2 = delta_prev[2];
17282assign delta_prev_3 = delta_prev[3];
17283assign delta_prev_4 = delta_prev[4];
17284assign delta_prev_5 = delta_prev[5];
17285assign delta_prev_6 = delta_prev[6];
17286assign delta_prev_7 = delta_prev[7];
17287
17288`endif // DEBUG_PIPE
17289//----------------------------------------------------------
17290
17291//----------------------------------------------------------
17292assign mytnum = (mycid*8)+mytid;
17293assign mytg = mytid >> 2;
17294
17295assign exu_complete = exu_valid & ~(`PROBES3.clkstop_d5|`TOP.in_reset|`SPC3.tcu_scan_en);
17296assign imul_complete = imul_valid & ~(`TOP.in_reset|`SPC3.tcu_scan_en);
17297assign idiv_complete = idiv_valid & ~(`TOP.in_reset|`SPC3.tcu_scan_en);
17298assign tlu_complete = tlu_complete_3 ;
17299assign fp_complete = fp_valid & ~(`TOP.in_reset|`SPC3.tcu_scan_en);
17300assign fdiv_complete = fdiv_valid & ~(`TOP.in_reset|`SPC3.tcu_scan_en);
17301assign lsu_complete = lsu_valid & ~(`TOP.in_reset|`SPC3.tcu_scan_en);
17302assign asi_complete = asi_valid & ~(`TOP.in_reset|`SPC3.tcu_scan_en);
17303
17304assign complete_w = (exu_complete << `EXU_INDEX) |
17305 (lsu_complete << `LSU_INDEX) |
17306 (tlu_complete << `TLU_INDEX) |
17307 (asi_complete << `ASI_INDEX) ;
17308
17309assign oddwin = CWP_reg % 2;
17310
17311assign frf_w1_valid_even = (frf_w1_tid_fw == mytid) & frf_w1_valid_fw[1];
17312assign frf_w1_valid_odd = (frf_w1_tid_fw == mytid) & frf_w1_valid_fw[0];
17313assign frf_w2_valid_even = (frf_w2_tid_fw == mytid) & frf_w2_valid_fw[1];
17314assign frf_w2_valid_odd = (frf_w2_tid_fw == mytid) & frf_w2_valid_fw[0];
17315
17316assign frf_w1_skip_addr = frf_w1_addr_fw;
17317assign frf_w2_skip_addr = frf_w2_addr_fw;
17318
17319//-----------------
17320// ADD_TSB_CFG
17321// NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
17322`ifdef ADD_TSB_CFG
17323wire [63:0] ctxt_z_tsb_cfg0_reg = `PROBES3.ctxt_z_tsb_cfg0_reg[mytid];
17324wire [63:0] ctxt_z_tsb_cfg1_reg = `PROBES3.ctxt_z_tsb_cfg1_reg[mytid];
17325wire [63:0] ctxt_z_tsb_cfg2_reg = `PROBES3.ctxt_z_tsb_cfg2_reg[mytid];
17326wire [63:0] ctxt_z_tsb_cfg3_reg = `PROBES3.ctxt_z_tsb_cfg3_reg[mytid];
17327wire [63:0] ctxt_nz_tsb_cfg0_reg = `PROBES3.ctxt_nz_tsb_cfg0_reg[mytid];
17328wire [63:0] ctxt_nz_tsb_cfg1_reg = `PROBES3.ctxt_nz_tsb_cfg1_reg[mytid];
17329wire [63:0] ctxt_nz_tsb_cfg2_reg = `PROBES3.ctxt_nz_tsb_cfg2_reg[mytid];
17330wire [63:0] ctxt_nz_tsb_cfg3_reg = `PROBES3.ctxt_nz_tsb_cfg3_reg[mytid];
17331`endif
17332
17333//----------------------------------------------------------
17334// Pipelined Signals
17335always @ (posedge `BENCH_SPC3_GCLK) begin // {
17336
17337 // TLU is async to the execution pipeline
17338 // but needs to be delayed to allow CWP, etc to update and be stable
17339 // before arch state is captured and diff_reg is called.
17340 // Done for FLUSHW
17341
17342 // FDIV was moved from fw1 to fw to allow FPRS to be stable before capture
17343 tlu_complete_1 <= tlu_valid & ~(`TOP.in_reset|`SPC3.tcu_scan_en);
17344 tlu_complete_2 <= tlu_complete_1;
17345 tlu_complete_3 <= tlu_complete_2;
17346
17347 itagacc_fx5 <= I_TAG_ACC_reg; // Signal changes in W so need to pipeline to fw2
17348 itagacc_fb <= itagacc_fx5;
17349 itagacc_fw <= itagacc_fb;
17350 itagacc_fw1 <= itagacc_fw;
17351 itagacc_fw2 <= itagacc_fw1;
17352
17353 dtagacc_fx5 <= D_TAG_ACC_reg; // Signal changes in W so need to pipeline to fw2
17354 dtagacc_fb <= dtagacc_fx5;
17355 dtagacc_fw <= dtagacc_fb;
17356 dtagacc_fw1 <= dtagacc_fw;
17357 dtagacc_fw2 <= dtagacc_fw1;
17358
17359 dsfar_fb <= DSFAR_reg; // Signal changes in W+1 so need to pipeline to fw2
17360 dsfar_fw <= dsfar_fb;
17361 dsfar_fw1 <= dsfar_fw;
17362 dsfar_fw2 <= dsfar_fw1;
17363
17364 pc_fx4 <= PC_reg;
17365 pc_fx5 <= pc_fx4;
17366 pc_fb <= pc_fx5;
17367 pc_fw <= pc_fb;
17368 pc_fw1 <= pc_fw;
17369 pc_fw2 <= pc_fw1;
17370
17371 cwp_fx4 <= CWP_reg;
17372 cwp_fx5 <= cwp_fx4;
17373 cwp_fb <= cwp_fx5;
17374 cwp_fw <= cwp_fb;
17375 cwp_fw1 <= cwp_fw;
17376 cwp_fw2 <= cwp_fw1;
17377
17378 complete_fx4 <= complete_w;
17379 complete_fx5 <= complete_fx4 ;
17380 complete_fb <= complete_fx5 |
17381 (idiv_complete << `IDIV_INDEX);
17382 complete_fw <= complete_fb |
17383 (fdiv_complete << `FDIV_INDEX) |
17384 (imul_complete << `IMUL_INDEX);
17385 complete_fw1 <= complete_fw |
17386 (fp_complete << `FP_INDEX);
17387
17388 complete_fw2 <= complete_fw1;
17389
17390 frf_w1_valid_fw1 <= (frf_w1_valid_odd | frf_w1_valid_even) & fp_complete;
17391 frf_w1_valid_fw2 <= frf_w1_valid_fw1;
17392
17393 frf_w1_skip_addr4_fw1 <= frf_w1_skip_addr[4];
17394 frf_w1_skip_addr4_fw2 <= frf_w1_skip_addr4_fw1;
17395
17396 fprs_fb <= FPRS_reg;
17397 fprs_fw <= fprs_fb;
17398 fprs_fw1 <= fprs_fw;
17399 fprs_fw2 <= fprs_fw1;
17400
17401 frf_w2_valid_fw <= frf_w2_valid_bn;
17402 frf_w2_tid_fw <= frf_w2_tid;
17403 frf_w2_addr_fw <= frf_w2_addr;
17404
17405 frf_w1_valid_fw <= frf_w1_valid;
17406 frf_w1_tid_fw <= frf_w1_tid;
17407 frf_w1_addr_fw <= frf_w1_addr;
17408
17409 // Thread running
17410
17411 if (~thread_running & `SPC3.tcu_core_running[mytid])
17412 `TOP.th_last_act_cycle[mytnum] = `TOP.core_cycle_cnt;
17413
17414 thread_running <= `SPC3.tcu_core_running[mytid];
17415
17416 // Reset some register prev state on wmr negation
17417 if (`SPC3.rst_wmr_protect && ~wmr)
17418 wmr_prev;
17419
17420 if (por_a && ~por_b)
17421 por_prev;
17422
17423 wmr <= `SPC3.rst_wmr_protect;
17424 por_a <= `TOP.in_por;
17425 por_b <= por_a;
17426
17427 if (`SPC3.rst_wmr_protect)
17428 in_wmr <= 1;
17429
17430end // }
17431
17432//----------------------------------------------------------
17433// Holding state for registers that may be updated asynchronously
17434// after synchronous update, but before capture/step. Also for reads,
17435// when register is read and modified before capture/step ..
17436// We capture the value /write time, and use that for sstep,
17437// ignoring any async updates, which are sent in the NEXT sstep ..
17438//
17439reg [63:0] asi_updated_int_rec;
17440reg asi_rdwr_int_rec;
17441reg asi_wr_int_rec_delay;
17442
17443reg asi_updated_hintp;
17444reg asi_rdwr_hintp;
17445reg asi_wr_hintp_delay;
17446
17447reg [16:0] asi_updated_softint;
17448reg asi_rdwr_softint;
17449reg asi_wr_softint_delay;
17450reg [16:0] asi_softint_wrdata;
17451
17452always @(posedge `BENCH_SPC3_GCLK) begin // {
17453
17454 // Corner case : If async and sync wr occur in same clock, then the async
17455 // update takes place. In this case we have to capture the
17456 // value of the write WITHOUT async bit being set, so that
17457 // we can sync with Riesling's sync write ..
17458
17459 asi_wr_int_rec_delay <= ( `SPC3.tlu.cth.asi_wr_int_rec[mytid] |
17460 `SPC3.tlu.asi_rd_inc_vec_2[mytid]);
17461
17462 if (`SPC3.tlu.cth.asi_wr_int_rec[mytid] |
17463 ((`SPC3.tlu.asi.rd_inc_vec) &&
17464 (`SPC3.tlu.asi.rd_tid_dec[mytid])) |
17465 (`SPC3.tlu.asi_rd_int_rec &
17466 `SPC3.tlu.cth.int_rec_mux_sel==mytid))
17467 begin // {
17468
17469 if (`SPC3.tlu.cth.asi_wr_int_rec[mytid])
17470 asi_updated_int_rec <= `SPC3.tlu.cth.int_rec ;
17471 else if ( (`SPC3.tlu.asi.rd_inc_vec) &&
17472 (`SPC3.tlu.asi.rd_tid_dec[mytid]) )
17473 if (`SPC3.tlu.cth.cxi_wr_int_dis[mytid]) begin
17474 asi_updated_int_rec <= INTR_RECEIVE_reg & `SPC3.tlu.cth.int_rec_muxed_;
17475 asi_updated_int_rec[`SPC3.tlu.cth.incoming_vector_in] <= 1'b0 ;
17476 end
17477 else
17478 begin
17479 asi_updated_int_rec <= `SPC3.tlu.cth.int_rec_muxed ;
17480 asi_updated_int_rec[`SPC3.tlu.cth.incoming_vector_in] <= 1'b0 ;
17481 end
17482 else
17483 asi_updated_int_rec <= INTR_RECEIVE_reg;
17484 asi_rdwr_int_rec <= 1'b1;
17485 end //}
17486 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
17487 asi_rdwr_int_rec <= 1'b0;
17488
17489 asi_wr_hintp_delay <= `SPC3.tlu.asi_wr_hintp[mytid];
17490
17491 if (`SPC3.tlu.asi_wr_hintp[mytid] |
17492 `SPC3.tlu.asi_rd_hintp[mytid])
17493 begin // {
17494 if (`SPC3.tlu.asi_wr_hintp[mytid])
17495 asi_updated_hintp <= `SPC3.tlu.asi_wr_data_0[0] ;
17496 else
17497 asi_updated_hintp <= HINTP_reg;
17498 asi_rdwr_hintp <= 1'b1;
17499 end //}
17500 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
17501 asi_rdwr_hintp <= 1'b0;
17502
17503 asi_wr_softint_delay <= (`SPC3.tlu.asi_wr_softint[mytid] |
17504 `SPC3.tlu.asi_wr_clear_softint[mytid] |
17505 `SPC3.tlu.asi_wr_set_softint[mytid]);
17506
17507 if (`SPC3.tlu.asi_wr_clear_softint[mytid])
17508 asi_softint_wrdata <= ~`SPC3.tlu.asi_wr_data_0[16:0] & rd_SOFTINT_reg;
17509 else if (`SPC3.tlu.asi_wr_set_softint[mytid])
17510 asi_softint_wrdata <= `SPC3.tlu.asi_wr_data_0[16:0] | rd_SOFTINT_reg;
17511 else
17512 asi_softint_wrdata <= `SPC3.tlu.asi_wr_data_0[16:0];
17513
17514 if (asi_wr_softint_delay | `SPC3.tlu.asi_rd_softint[mytid])
17515 begin // {
17516 if (asi_wr_softint_delay)
17517 asi_updated_softint <= asi_softint_wrdata ;
17518 else
17519 asi_updated_softint <= rd_SOFTINT_reg ;
17520 asi_rdwr_softint <= 1'b1;
17521 end //}
17522 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
17523 asi_rdwr_softint <= 1'b0;
17524end //}
17525
17526//----------------------------------------------------------
17527// Negedge sampling to avoid race on specific signals ..
17528//
17529always @ (negedge `BENCH_SPC3_GCLK) begin // {
17530 frf_w2_valid_bn <= frf_w2_valid;
17531end //}
17532
17533//----------------------------------------------------------
17534// When instruction completes,
17535// Push differences to simics
17536
17537always @ (posedge `BENCH_SPC3_GCLK) begin // {
17538
17539 if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable && ~`SPC3.tcu_scan_en && ~`TOP.in_por) begin // {
17540
17541
17542 //----------
17543 // Update window registers
17544 if (CWP_reg != `NASTOP.th_cwp[mytnum]) begin // {
17545 copy_win (CWP_reg,`NASTOP.th_cwp[mytnum]);
17546 `NASTOP.th_cwp[mytnum] = CWP_reg;
17547 end // }
17548
17549 //----------
17550 // Update global registers
17551 // Wait for warm-reset flush related toggling to settle
17552 if (GL_reg != th_gl) begin // {
17553 if (`SPC3.spc_core_running_status[mytid] &
17554 ~`SPC3.rst_wmr_protect) begin // {
17555 copy_global (GL_reg,th_gl);
17556 th_gl = GL_reg;
17557 end // }
17558 end // }
17559
17560 //----------
17561 // Check for bad signal values
17562 check_values;
17563
17564 //----------
17565 // Step Simics
17566 //
17567 // if NASTOP.sstep_sent[tid]=1,
17568 // then SSTEP was set by another module (i.e. tlb_sync)
17569
17570 if (`PARGS.nas_check_on) begin // {
17571 mytime = `TOP.core_cycle_cnt-1;
17572 if (complete_fw2 && (`NASTOP.sstep_sent[mytnum]==1'b0)) begin // {
17573 `PR_INFO ("pli_nas", `INFO, " C%0d T%0d PLI_SSTEP tid=%d pc=%h ts=%0d ",
17574 mycid,mytid,mytnum,pc_fw2,mytime);
17575 junk = $sim_send(`PLI_SSTEP, mytnum);
17576 // Always clear sstep_early
17577 // In case tlb_sync asserted it too late for complete_fw2
17578 `NASTOP.sstep_early[mytnum] <= 1'b0;
17579 end //}
17580 else if (complete_fw2) begin // {
17581 `NASTOP.sstep_sent[mytnum] <= 1'b0; // re-arm SSTEP
17582 `NASTOP.sstep_early[mytnum] <= 1'b0;
17583 `PR_INFO ("pli_nas", `INFO, " C%0d T%0d PLI_SSTEP tid=%d pc=%h ts=%0d (nas_pipe: skip sstep. rearm sstep. sstep_sent=0)",
17584 mycid,mytid,mytnum,pc_fw2,mytime);
17585 end //}
17586 end //}
17587
17588 //----------
17589 // Only capture if something completes and not first instruction
17590 if (complete_fw2 && !first_op) begin // {
17591 update_pc;
17592 push_simics; // Use with AXIS to keep from getting timeout
17593 end // }
17594
17595 // Pipeline runs continuously
17596 // Other than when in POR ..
17597 update_fx4;
17598 update_fx5;
17599 update_fb;
17600 update_fw;
17601 update_fw1;
17602 update_fw2;
17603 // Only save to delta_prev when something completes
17604 if (complete_fw2) begin
17605 update_fw2_async;
17606 update_prev;
17607 first_op = 0;
17608 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
17609 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
17610 end
17611
17612
17613`ifndef EMUL_TL
17614 //----------
17615 // If something was captured but no instruction is in the pipeline
17616 if ((delta_fw2[`NEXT_INDEX]!=`FIRST_INDEX) && (complete_fw2 == 0))
17617 begin // {
17618
17619 for (myindex=`FIRST_INDEX; myindex<delta_fw2[`NEXT_INDEX]; myindex=myindex+1)
17620 begin // {
17621 print_entry (delta_fw2[myindex]);
17622 end //}
17623 `PR_ERROR ("nas",`ERROR, "T%0d Unexpected Reg change in DUT. Special case - no instruction retired.", mytnum);
17624
17625 end // }
17626`endif
17627
17628
17629 //----------
17630 // End detection for non-sas runs ..
17631
17632 for (junk=0;junk<`PARGS.bad_trap_count;junk=junk+1)
17633 if (({16'b0,pc_fw2}&`PC_MASK) ===
17634 (`PARGS.bad_trap_addr[junk]&`PC_MASK)) begin // {
17635 // Disable nas_pipe processing (capture & SSTEP)
17636 // to speed up simulation (minimize socket traffic,etc)
17637 nas_pipe_enable=1'b0;
17638 if (! `PARGS.nas_check_on) begin //{
17639 `PR_ERROR ("nas",`ERROR, "T%0d reached Bad Trap", mytnum);
17640 end //}
17641 end //}
17642
17643 for (junk=0;junk<`PARGS.good_trap_count;junk=junk+1)
17644 if ((|complete_fw2) && (({16'b0,pc_fw2}&`PC_MASK) ===
17645 (`PARGS.good_trap_addr[junk]&`PC_MASK))) begin // {
17646 // Disable nas_pipe processing (capture & SSTEP)
17647 // to speed up simulation (minimize socket traffic,etc)
17648 nas_pipe_enable=1'b0;
17649 if (! `PARGS.nas_check_on) begin //{
17650 good_trap_detected = 1'b1;
17651 end //}
17652 end //}
17653
17654 // Check Thread level timeout
17655 if (thread_running &&
17656 (`TOP.core_cycle_cnt - `TOP.th_last_act_cycle[mytnum]) > `PARGS.th_timeout)
17657 begin // {
17658 // Note: Do not change this message because regreport parses it for certain words.
17659 `PR_ALWAYS ("nas",`ALWAYS, "ERROR: Thread T%0d No Activity for %0d Cycles - Thread TIMEOUT!",
17660 mytnum, `PARGS.th_timeout);
17661 junk = incErr(9999); // must exceed users max error setting to force exit.
17662 end //}
17663
17664 end // if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable ...)}
17665
17666 // if -nosas only,
17667 // Need to make sure Store Buffer is empty before turning off th_check_enable.
17668 //global chkr requires to wait for all outstanding pending I
17669 if ((! `PARGS.nas_check_on) &&
17670 (good_trap_detected==1'b1) &&
17671 (`TOP.nas_top.lsu_stb_empty[mytnum]) && `TOP.nas_top.ireq_pending[mytnum]) begin // {
17672 `PARGS.th_check_enable[mytnum] = 1'b0;
17673 `TOP.finished_tids[mytnum] = 1'b1;
17674 good_trap_detected = 1'b0;
17675 `PR_NORMAL ("nas", `NORMAL, "T%0d reached Good Trap. Disabling checking for thread %0d", mytnum,mytnum);
17676 end // }
17677end // always }
17678
17679//----------------------------------------------------------
17680//----------------------------------------------------------
17681// Stage FX4 of delta pipeline
17682task update_fx4;
17683
17684 integer i;
17685 reg [7:0] index;
17686
17687 begin // {
17688
17689 `ifndef EMUL_TL
17690 index = `FIRST_INDEX;
17691
17692 //--------------------
17693 // Init delta_fx4
17694 delta_fx4[`NEXT_INDEX] <= `FIRST_INDEX;
17695 delta_fx4[`TIME_INDEX] <= 0;
17696 delta_fx4[`PC_INDEX] <= {16'b0,PC_reg};
17697 delta_fx4[`GL_INDEX] <= GL_reg;
17698 delta_fx4[`CWP_INDEX] <= CWP_reg;
17699 delta_fx4[`OPCODE_INDEX] <= opcode;
17700 delta_fx4[`FIRST_INDEX] <= 77'hx;
17701 `else
17702 index = 0;
17703 `endif
17704
17705 end // }
17706endtask
17707
17708//----------------------------------------------------------
17709// Stage FX5 of delta pipeline
17710task update_fx5;
17711
17712 integer i;
17713 reg [7:0] index;
17714 reg [38:0] frf_tmp;
17715
17716 begin // {
17717
17718 `ifndef EMUL_TL
17719 index = delta_fx4[`NEXT_INDEX];
17720
17721 //--------------------
17722 // Pipeline previous stage
17723 for (i=0; i<=delta_fx4[`NEXT_INDEX]; i=i+1) begin // {
17724 delta_fx5[i] <= delta_fx4[i];
17725 end
17726 `else
17727 index = 0;
17728 `endif
17729
17730 //-------------------
17731 // Control Registers
17732 if (complete_fx4) begin // LSU | EXU | TLU
17733 push_delta_fx5 (`CCR+`CTL_OFFSET,CCR_reg,index);
17734 end
17735
17736 //-------------------
17737 // Update IRF3
17738`ifndef NAS_NO_IRFFRF
17739 if (complete_fx4[`LSU_INDEX] |
17740 complete_fx4[`EXU_INDEX]) begin
17741 if (mytid <= 3) begin // {
17742 for (i=0; i<=31; i=i+1) begin // {
17743 push_delta_fx5 (i,`IRF3_EXU0[(remap(i,oddwin)+irf_offset)],index);
17744 end // }
17745 end // }
17746 else begin // {
17747 for (i=0; i<=31; i=i+1) begin // {
17748 push_delta_fx5 (i,`IRF3_EXU1[(remap(i,oddwin)+irf_offset)],index);
17749 end // }
17750 end // }
17751 end
17752`endif
17753
17754 //--------------------
17755 // Update FRF3 - Loads use W2 Port.
17756`ifndef NAS_NO_IRFFRF
17757 if (complete_fx4[`LSU_INDEX]) begin // {
17758 // IF W1 port is also being written, ignore that address
17759 for (i=0; i<=31; i=i+1) begin // {
17760 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
17761 frf_tmp = `FRF3_EVEN[(mytid*32)+i];
17762 push_delta_fx5 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
17763 end // }
17764 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
17765 frf_tmp = `FRF3_ODD[(mytid*32)+i];
17766 push_delta_fx5 (`FP_OFFSET + (i*2)+1, frf_tmp[31:0], index);
17767 end // }
17768 end //}
17769 end // }
17770`endif
17771
17772 // Update ASR/ASI registers
17773 if (complete_fx4) begin // {
17774 push_delta_fx5 (`PSTATE + `CTL_OFFSET,PSTATE_reg,index);
17775 push_delta_fx5 (`HPSTATE + `CTL_OFFSET,HPSTATE_reg,index);
17776 push_delta_fx5 (`PIL + `CTL_OFFSET,PIL_reg,index);
17777 push_delta_fx5 (`TBA + `CTL_OFFSET,{TBA_reg,15'b0},index);
17778 push_delta_fx5 (`GL + `CTL_OFFSET,GL_reg,index);
17779 push_delta_fx5 (`HTBA + `CTL_OFFSET,{HTBA_reg,14'b0},index);
17780 push_delta_fx5 (`VER + `CTL_OFFSET,VER_reg,index);
17781 push_delta_fx5 (`Y + `CTL_OFFSET,Y_reg,index);
17782 push_delta_fx5 (`ASI + `CTL_OFFSET,ASI_reg,index);
17783 push_delta_fx5 (`STICK_CMPR + `CTL_OFFSET,STICK_CMPR_wire,index);
17784 push_delta_fx5 (`HSTICK_CMPR + `CTL_OFFSET,HSTICK_CMPR_wire,index);
17785 push_delta_fx5 (`TICK_CMPR + `CTL_OFFSET,TICK_CMPR_wire,index);
17786 push_delta_fx5 (`CWP + `CTL_OFFSET,CWP_reg,index);
17787 push_delta_fx5 (`CANSAVE + `CTL_OFFSET,CANSAVE_reg,index);
17788 push_delta_fx5 (`CANRESTORE + `CTL_OFFSET,CANRESTORE_reg,index);
17789 push_delta_fx5 (`CLEANWIN + `CTL_OFFSET,CLEANWIN_reg,index);
17790 push_delta_fx5 (`OTHERWIN + `CTL_OFFSET,OTHERWIN_reg,index);
17791 push_delta_fx5 (`WSTATE + `CTL_OFFSET,WSTATE_reg,index);
17792
17793 push_delta_fx5 (`CTXT_PRIM_0+`CTL_OFFSET,CTXT_PRIM_0_reg,index);
17794 push_delta_fx5 (`CTXT_SEC_0+`CTL_OFFSET,CTXT_SEC_0_reg,index);
17795 push_delta_fx5 (`CTXT_PRIM_1+`CTL_OFFSET,CTXT_PRIM_1_reg,index);
17796 push_delta_fx5 (`CTXT_SEC_1+`CTL_OFFSET,CTXT_SEC_1_reg,index);
17797 push_delta_fx5 (`LSU_CONTROL+`CTL_OFFSET,LSU_CONTROL_reg,index);
17798 push_delta_fx5 (`WATCHPOINT_ADDR+`CTL_OFFSET,WATCHPOINT_ADDR_reg,index);
17799
17800 // NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
17801 // ADD_TSB_CFG
17802 `ifdef ADD_TSB_CFG
17803 push_delta_fx5 (`CTXT_Z_TSB_CFG0+`CTL_OFFSET,ctxt_z_tsb_cfg0_reg,index);
17804 push_delta_fx5 (`CTXT_Z_TSB_CFG1+`CTL_OFFSET,ctxt_z_tsb_cfg1_reg,index);
17805 push_delta_fx5 (`CTXT_Z_TSB_CFG2+`CTL_OFFSET,ctxt_z_tsb_cfg2_reg,index);
17806 push_delta_fx5 (`CTXT_Z_TSB_CFG3+`CTL_OFFSET,ctxt_z_tsb_cfg3_reg,index);
17807 push_delta_fx5 (`CTXT_NZ_TSB_CFG0+`CTL_OFFSET,ctxt_nz_tsb_cfg0_reg,index);
17808 push_delta_fx5 (`CTXT_NZ_TSB_CFG1+`CTL_OFFSET,ctxt_nz_tsb_cfg1_reg,index);
17809 push_delta_fx5 (`CTXT_NZ_TSB_CFG2+`CTL_OFFSET,ctxt_nz_tsb_cfg2_reg,index);
17810 push_delta_fx5 (`CTXT_NZ_TSB_CFG3+`CTL_OFFSET,ctxt_nz_tsb_cfg3_reg,index);
17811 `endif
17812
17813 end //}
17814
17815 // Update GSR for all except write ASR in progess
17816 if (!asi_in_progress) begin // {
17817 push_delta_fx5 (`GSR + `CTL_OFFSET,GSR_wire, index);
17818 end // }
17819
17820 // If lsu_complete & fp_complete assert at same time,
17821 // then the fp_complete is the one that will modify the FSR
17822 if (complete_fx4[`LSU_INDEX] & !complete_fw1[`FP_INDEX]) begin
17823 push_delta_fx5 (`FSR+`CTL_OFFSET,FSR_wire,index);
17824 end
17825
17826 // Non Trap updates of Trap stack & level
17827 if (complete_fx4 && !complete_fx4[`TLU_INDEX]) begin // {
17828 push_delta_fx5 (`TL + `CTL_OFFSET,TL_reg,index);
17829 push_delta_fx5 (`TPC1 + `CTL_OFFSET, TPC1_wire, index);
17830 push_delta_fx5 (`TPC2 + `CTL_OFFSET, TPC2_wire, index);
17831 push_delta_fx5 (`TPC3 + `CTL_OFFSET, TPC3_wire, index);
17832 push_delta_fx5 (`TPC4 + `CTL_OFFSET, TPC4_wire, index);
17833 push_delta_fx5 (`TPC5 + `CTL_OFFSET, TPC5_wire, index);
17834 push_delta_fx5 (`TPC6 + `CTL_OFFSET, TPC6_wire, index);
17835 push_delta_fx5 (`TNPC1 + `CTL_OFFSET, TNPC1_wire, index);
17836 push_delta_fx5 (`TNPC2 + `CTL_OFFSET, TNPC2_wire, index);
17837 push_delta_fx5 (`TNPC3 + `CTL_OFFSET, TNPC3_wire, index);
17838 push_delta_fx5 (`TNPC4 + `CTL_OFFSET, TNPC4_wire, index);
17839 push_delta_fx5 (`TNPC5 + `CTL_OFFSET, TNPC5_wire, index);
17840 push_delta_fx5 (`TNPC6 + `CTL_OFFSET, TNPC6_wire, index);
17841 push_delta_fx5 (`TSTATE1 + `CTL_OFFSET, TSTATE1_wire, index);
17842 push_delta_fx5 (`TSTATE2 + `CTL_OFFSET, TSTATE2_wire, index);
17843 push_delta_fx5 (`TSTATE3 + `CTL_OFFSET, TSTATE3_wire, index);
17844 push_delta_fx5 (`TSTATE4 + `CTL_OFFSET, TSTATE4_wire, index);
17845 push_delta_fx5 (`TSTATE5 + `CTL_OFFSET, TSTATE5_wire, index);
17846 push_delta_fx5 (`TSTATE6 + `CTL_OFFSET, TSTATE6_wire, index);
17847 push_delta_fx5 (`HTSTATE1 + `CTL_OFFSET, HTSTATE1_wire, index);
17848 push_delta_fx5 (`HTSTATE2 + `CTL_OFFSET, HTSTATE2_wire, index);
17849 push_delta_fx5 (`HTSTATE3 + `CTL_OFFSET, HTSTATE3_wire, index);
17850 push_delta_fx5 (`HTSTATE4 + `CTL_OFFSET, HTSTATE4_wire, index);
17851 push_delta_fx5 (`HTSTATE5 + `CTL_OFFSET, HTSTATE5_wire, index);
17852 push_delta_fx5 (`HTSTATE6 + `CTL_OFFSET, HTSTATE6_wire, index);
17853 push_delta_fx5 (`TT1 + `CTL_OFFSET, TT1_wire, index);
17854 push_delta_fx5 (`TT2 + `CTL_OFFSET, TT2_wire, index);
17855 push_delta_fx5 (`TT3 + `CTL_OFFSET, TT3_wire, index);
17856 push_delta_fx5 (`TT4 + `CTL_OFFSET, TT4_wire, index);
17857 push_delta_fx5 (`TT5 + `CTL_OFFSET, TT5_wire, index);
17858 push_delta_fx5 (`TT6 + `CTL_OFFSET, TT6_wire, index);
17859 end //}
17860
17861 end // }
17862endtask
17863
17864//----------------------------------------------------------
17865// Stage FB of delta pipeline
17866task update_fb;
17867
17868 integer i;
17869 reg [7:0] index;
17870
17871 begin // {
17872
17873 `ifndef EMUL_TL
17874 index = delta_fx5[`NEXT_INDEX];
17875
17876 //--------------------
17877 // Pipeline previous stage
17878 for (i=0; i<=delta_fx5[`NEXT_INDEX]; i=i+1) begin // {
17879 delta_fb[i] <= delta_fx5[i];
17880 end
17881 `else
17882 index = 0;
17883 `endif
17884
17885 // ASI/ASR ONLY updates
17886 if (complete_fx5[`ASI_INDEX]) begin // {
17887 push_delta_fb (`GSR + `CTL_OFFSET,GSR_wire, index);
17888 end //}
17889
17890 end // }
17891endtask
17892
17893//----------------------------------------------------------
17894// Stage FW of delta pipeline
17895task update_fw;
17896
17897 integer i;
17898 reg [7:0] index;
17899 reg [38:0] frf_tmp;
17900
17901 begin // {
17902
17903 `ifndef EMUL_TL
17904 index = delta_fb[`NEXT_INDEX];
17905
17906 //--------------------
17907 // Pipeline previous stage
17908 for (i=0; i<=delta_fb[`NEXT_INDEX]; i=i+1) begin // {
17909 delta_fw[i] <= delta_fb[i];
17910 end
17911
17912 // Capture CWP_reg for SAVE/RESTORE
17913 if (imul_complete) begin
17914 delta_fw[`CWP_INDEX] <= CWP_reg;
17915 end
17916 `else
17917 index = 0;
17918 `endif
17919
17920 //-------------------
17921 // Update IRF3
17922`ifndef NAS_NO_IRFFRF
17923 if (complete_fb[`TLU_INDEX]) begin
17924 if (mytid <= 3) begin // {
17925 for (i=0; i<=31; i=i+1) begin // {
17926 push_delta_fw (i,`IRF3_EXU0[(remap(i,oddwin)+irf_offset)],index);
17927 end // }
17928 end // }
17929 else begin // {
17930 for (i=0; i<=31; i=i+1) begin // {
17931 push_delta_fw (i,`IRF3_EXU1[(remap(i,oddwin)+irf_offset)],index);
17932 end // }
17933 end // }
17934 end
17935`endif
17936
17937 //--------------------
17938 // Update FRF3 - Idivs use W2.
17939`ifndef NAS_NO_IRFFRF
17940 if (complete_fb[`IDIV_INDEX]) begin // {
17941 // IF W1 port is also being written, ignore that address
17942 for (i=0; i<=31; i=i+1) begin // {
17943 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
17944 frf_tmp = `FRF3_EVEN[(mytid*32)+i];
17945 push_delta_fw (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
17946 end // }
17947 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
17948 frf_tmp = `FRF3_ODD[(mytid*32)+i];
17949 push_delta_fw (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
17950 end // }
17951 end //}
17952 end // }
17953`endif
17954
17955 end // }
17956
17957endtask
17958
17959//----------------------------------------------------------
17960// Stage FW1 of delta pipeline
17961task update_fw1;
17962
17963 integer i;
17964 reg [7:0] index;
17965
17966 reg [4:0] rdnum;
17967 reg [38:0] frf_tmp;
17968
17969 begin // {
17970
17971 `ifndef EMUL_TL
17972 index = delta_fw[`NEXT_INDEX];
17973
17974 //--------------------
17975 // Pipeline previous stage
17976 for (i=0; i<=delta_fw[`NEXT_INDEX]; i=i+1) begin // {
17977 delta_fw1[i] <= delta_fw[i];
17978 end
17979 `else
17980 index = 0;
17981 `endif
17982
17983 //--------------------
17984 // Update FRF3 - FPops use W1 port.
17985`ifndef NAS_NO_IRFFRF
17986 if (fp_complete) begin // {
17987 // IF W2 port is also being written, ignore that address
17988 for (i=0; i<=31; i=i+1) begin // {
17989 if (!((i == frf_w2_skip_addr) && frf_w2_valid_even)) begin // {
17990 frf_tmp = `FRF3_EVEN[(mytid*32)+i];
17991 push_delta_fw1 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
17992 end // }
17993 if (!((i == frf_w2_skip_addr) && frf_w2_valid_odd)) begin // {
17994 frf_tmp = `FRF3_ODD[(mytid*32)+i];
17995 push_delta_fw1 (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
17996 end // }
17997 end //}
17998 end // }
17999`endif
18000
18001 //-------------------
18002 // Control Registers
18003 if (complete_fw[`IMUL_INDEX]|complete_fw[`IDIV_INDEX]) begin
18004 push_delta_fw1 (`CCR+`CTL_OFFSET,CCR_reg,index);
18005 push_delta_fw1 (`Y+`CTL_OFFSET,Y_reg,index);
18006 push_delta_fw1 (`CWP+`CTL_OFFSET,CWP_reg,index);
18007 push_delta_fw1 (`CANSAVE+`CTL_OFFSET,CANSAVE_reg,index);
18008 push_delta_fw1 (`CANRESTORE+`CTL_OFFSET,CANRESTORE_reg,index);
18009 push_delta_fw1 (`CLEANWIN+`CTL_OFFSET,CLEANWIN_reg,index);
18010 push_delta_fw1 (`OTHERWIN+`CTL_OFFSET,OTHERWIN_reg,index);
18011 push_delta_fw1 (`WSTATE+`CTL_OFFSET,WSTATE_reg,index);
18012 end
18013
18014 // Update Trap Stack now
18015 if (complete_fw[`TLU_INDEX]) begin // {
18016 push_delta_fw1 (`TL + `CTL_OFFSET,TL_reg,index);
18017 push_delta_fw1 (`TPC1 + `CTL_OFFSET, TPC1_wire, index);
18018 push_delta_fw1 (`TPC2 + `CTL_OFFSET, TPC2_wire, index);
18019 push_delta_fw1 (`TPC3 + `CTL_OFFSET, TPC3_wire, index);
18020 push_delta_fw1 (`TPC4 + `CTL_OFFSET, TPC4_wire, index);
18021 push_delta_fw1 (`TPC5 + `CTL_OFFSET, TPC5_wire, index);
18022 push_delta_fw1 (`TPC6 + `CTL_OFFSET, TPC6_wire, index);
18023 push_delta_fw1 (`TNPC1 + `CTL_OFFSET, TNPC1_wire, index);
18024 push_delta_fw1 (`TNPC2 + `CTL_OFFSET, TNPC2_wire, index);
18025 push_delta_fw1 (`TNPC3 + `CTL_OFFSET, TNPC3_wire, index);
18026 push_delta_fw1 (`TNPC4 + `CTL_OFFSET, TNPC4_wire, index);
18027 push_delta_fw1 (`TNPC5 + `CTL_OFFSET, TNPC5_wire, index);
18028 push_delta_fw1 (`TNPC6 + `CTL_OFFSET, TNPC6_wire, index);
18029 push_delta_fw1 (`TSTATE1 + `CTL_OFFSET, TSTATE1_wire, index);
18030 push_delta_fw1 (`TSTATE2 + `CTL_OFFSET, TSTATE2_wire, index);
18031 push_delta_fw1 (`TSTATE3 + `CTL_OFFSET, TSTATE3_wire, index);
18032 push_delta_fw1 (`TSTATE4 + `CTL_OFFSET, TSTATE4_wire, index);
18033 push_delta_fw1 (`TSTATE5 + `CTL_OFFSET, TSTATE5_wire, index);
18034 push_delta_fw1 (`TSTATE6 + `CTL_OFFSET, TSTATE6_wire, index);
18035 push_delta_fw1 (`HTSTATE1 + `CTL_OFFSET, HTSTATE1_wire, index);
18036 push_delta_fw1 (`HTSTATE2 + `CTL_OFFSET, HTSTATE2_wire, index);
18037 push_delta_fw1 (`HTSTATE3 + `CTL_OFFSET, HTSTATE3_wire, index);
18038 push_delta_fw1 (`HTSTATE4 + `CTL_OFFSET, HTSTATE4_wire, index);
18039 push_delta_fw1 (`HTSTATE5 + `CTL_OFFSET, HTSTATE5_wire, index);
18040 push_delta_fw1 (`HTSTATE6 + `CTL_OFFSET, HTSTATE6_wire, index);
18041 push_delta_fw1 (`TT1 + `CTL_OFFSET, TT1_wire, index);
18042 push_delta_fw1 (`TT2 + `CTL_OFFSET, TT2_wire, index);
18043 push_delta_fw1 (`TT3 + `CTL_OFFSET, TT3_wire, index);
18044 push_delta_fw1 (`TT4 + `CTL_OFFSET, TT4_wire, index);
18045 push_delta_fw1 (`TT5 + `CTL_OFFSET, TT5_wire, index);
18046 push_delta_fw1 (`TT6 + `CTL_OFFSET, TT6_wire, index);
18047 end //}
18048
18049 end // }
18050endtask
18051
18052//----------------------------------------------------------
18053// Stage FW2 of delta pipeline
18054task update_fw2;
18055
18056 integer i;
18057 reg [7:0] index;
18058 reg [38:0] frf_tmp;
18059
18060 begin // {
18061
18062 `ifndef EMUL_TL
18063 index = delta_fw1[`NEXT_INDEX];
18064
18065 //--------------------
18066 // Pipeline previous stage
18067 for (i=0; i<=delta_fw1[`NEXT_INDEX]; i=i+1) begin // {
18068 delta_fw2[i] <= delta_fw1[i];
18069 end
18070
18071 delta_fw2[`TIME_INDEX] <= $time;
18072 `else
18073 index = 0;
18074 `endif
18075
18076 // Update Registers that may change asynchronously
18077 // If sstep was already sent by another module,
18078 // don't capture until the next sstep
18079 if (complete_fw1 && !`NASTOP.sstep_early[mytnum]) begin // {
18080 if ((complete_fw1[`ASI_INDEX]|complete_fw1[`LSU_INDEX]) & asi_rdwr_hintp)
18081 push_delta_fw2 (`HINTP + `CTL_OFFSET,asi_updated_hintp,index);
18082 else
18083 push_delta_fw2 (`HINTP + `CTL_OFFSET,HINTP_reg,index);
18084 if ((complete_fw1[`ASI_INDEX]|complete_fw1[`LSU_INDEX]) & asi_rdwr_softint)
18085 push_delta_fw2 (`SOFTINT + `CTL_OFFSET,asi_updated_softint,index);
18086 else
18087 push_delta_fw2 (`SOFTINT + `CTL_OFFSET,rd_SOFTINT_reg,index);
18088 end // }
18089
18090 //-------------------
18091 // Update IRF3
18092`ifndef NAS_NO_IRFFRF
18093 if (complete_fw1[`IMUL_INDEX] |
18094 complete_fw1[`IDIV_INDEX]) begin // {
18095 if (mytid <= 3) begin // {
18096 for (i=0; i<=31; i=i+1) begin // {
18097 push_delta_fw2 (i,`IRF3_EXU0[(remap(i,oddwin)+irf_offset)],index);
18098 end // }
18099 end // }
18100 else begin // {
18101 for (i=0; i<=31; i=i+1) begin // {
18102 push_delta_fw2 (i,`IRF3_EXU1[(remap(i,oddwin)+irf_offset)],index);
18103 end // }
18104 end // }
18105 end // }
18106`endif
18107
18108 //--------------------
18109 // Update FRF3 - fdivs and Imuls use W2 port
18110`ifndef NAS_NO_IRFFRF
18111 if (complete_fw1[`IMUL_INDEX] |
18112 complete_fw1[`FDIV_INDEX] ) begin // {
18113 // IF W1 port is also being written, ignore that address
18114 for (i=0; i<=31; i=i+1) begin // {
18115 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
18116 frf_tmp = `FRF3_EVEN[(mytid*32)+i];
18117 push_delta_fw2 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
18118 end // }
18119 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
18120 frf_tmp = `FRF3_ODD[(mytid*32)+i];
18121 push_delta_fw2 (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
18122 end // }
18123 end //}
18124 end // }
18125`endif
18126
18127 if (complete_fw1[`FP_INDEX] |
18128 complete_fw1[`TLU_INDEX] |
18129 complete_fw1[`FDIV_INDEX]) begin
18130 push_delta_fw2 (`FSR+`CTL_OFFSET,FSR_wire,index);
18131 end
18132
18133 if (complete_fw1) begin
18134 push_delta_fw2 (`I_TAG_ACC+`CTL_OFFSET,itagacc_fw2,index);
18135 push_delta_fw2 (`D_TAG_ACC+`CTL_OFFSET,dtagacc_fw2,index);
18136 push_delta_fw2 (`DSFAR+`CTL_OFFSET,dsfar_fw2,index);
18137 end
18138
18139 end // }
18140endtask
18141
18142//----------------------------------------------------------
18143// Stage FW2 of delta pipeline - for signals that change FW+2 !!
18144task update_fw2_async;
18145
18146 integer i;
18147 reg [7:0] index;
18148 reg [2:0] dummy_fprs;
18149
18150 begin // {
18151
18152 `ifndef EMUL_TL
18153 index = delta_fw2[`NEXT_INDEX];
18154 `else
18155 index = 0;
18156 `endif
18157
18158 // Since FPRS for FPops may have been corrupted by o-o-o loads:
18159 // If fprs_fw2 is != fprs_reg & there are loads in the pipeline
18160 // then assume loads have already updated fprs.
18161 // In that case, create our own fprs_reg by using the valids and
18162 // skip_addr and copy of fprs for this op..
18163 if (complete_fw2[`FP_INDEX] && frf_w1_valid_fw2) begin // {
18164 // o-o-o load has changed fprs already - use dummy
18165 if ((fprs_fw2 != FPRS_reg) && (complete_fw1[`LSU_INDEX] |
18166 complete_fw[`LSU_INDEX] | complete_fb[`LSU_INDEX] |
18167 complete_fx5[`LSU_INDEX] )) begin // {
18168 dummy_fprs = read_prev(`FPRS + `CTL_OFFSET);
18169 dummy_fprs = dummy_fprs |
18170 {1'b0, frf_w1_skip_addr4_fw2, ~frf_w1_skip_addr4_fw2};
18171 push_delta_fw2_async (`FPRS + `CTL_OFFSET,dummy_fprs,index);
18172 end //}
18173 // o-o-o load has NOT changed fprs already - use it
18174 else begin // {
18175 push_delta_fw2_async (`FPRS + `CTL_OFFSET,FPRS_reg,index);
18176 end //}
18177 end //}
18178 // Load FPRS for loads/reads as prev|fprs_fb ..
18179 // since loads may only 'set' bits, not clear ...
18180 else if (complete_fw2[`LSU_INDEX]) begin // {
18181 dummy_fprs = read_prev(`FPRS + `CTL_OFFSET);
18182 dummy_fprs = dummy_fprs | fprs_fw1;
18183 push_delta_fw2_async (`FPRS +`CTL_OFFSET,dummy_fprs,index);
18184 end // }
18185 // Load FPRS for store ASI or FDIV
18186 // FDIV can update FPRS on w1 or w2,
18187 // but the pipe is stalled behind it so no o-o-o loads.
18188 else if ((complete_fw2[`ASI_INDEX]) ||
18189 (complete_fw2[`FDIV_INDEX])) begin // {
18190 push_delta_fw2_async (`FPRS + `CTL_OFFSET,FPRS_reg,index);
18191 end //}
18192
18193 end // }
18194endtask
18195
18196//----------------------------------------------------------
18197// Store latest values into delta
18198// Capture of next PC
18199task update_pc;
18200 reg [7:0] index;
18201 begin
18202 `ifndef EMUL_TL
18203 index = delta_prev[`NEXT_INDEX];
18204 `else
18205 index = 0;
18206 `endif
18207
18208 if (in_wmr & ~`SPC3.rst_wmr_protect) begin // {
18209 push_delta_prev_async ( `PC+`CTL_OFFSET,{16'b0,pc_fw2|1},index);
18210 in_wmr <= 0;
18211 end // }
18212 else
18213 push_delta_prev_async ( `PC+`CTL_OFFSET,{16'b0,pc_fw2},index);
18214 pc_last <= pc_fw2;
18215 cwp_last <= cwp_fw2;
18216 end
18217endtask
18218
18219//----------------------------------------------------------
18220//----------------------------------------------------------
18221// Compare with current state and capture if different
18222task push_delta_fx4;
18223
18224 input [7:0] id;
18225 input [63:0] act_value;
18226 inout [7:0] next;
18227 reg [2:0] win;
18228 reg [1:0] type;
18229
18230 begin // {
18231 if (act_value != read_prev(id)) begin // { // Diff vs prev
18232 calc_cwp(CWP_reg,id,win,type); // special case for 1st stage
18233 write_prev(id,act_value);
18234
18235 `ifndef EMUL_TL
18236 delta_fx4[next] <= {type,win,id,act_value};
18237 next = next+1;
18238 delta_fx4[next] <= 77'hx;
18239 delta_fx4[`NEXT_INDEX] <= next;
18240 if (`PARGS.axis_debug_on) begin
18241 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
18242 mytnum,PC_reg,id,type,win,act_value,$time);
18243 end
18244 `else
18245 if (`PARGS.axis_debug_on) begin
18246 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
18247 mytnum,PC_reg,id,type,win,act_value,$time);
18248 end
18249 `endif
18250 end //}
18251 end //}
18252
18253endtask
18254
18255//----------------------------------------------------------
18256// Compare with current state and capture if different
18257task push_delta_fx5;
18258
18259 input [7:0] id;
18260 input [63:0] act_value;
18261 inout [7:0] next;
18262 reg [2:0] win;
18263 reg [1:0] type;
18264
18265 begin // {
18266 if (act_value != read_prev(id)) begin // { // Diff vs prev
18267 `ifndef EMUL_TL
18268 calc_cwp(delta_fx4[`CWP_INDEX],id,win,type);
18269 write_prev(id,act_value);
18270 delta_fx5[next] <= {type,win,id,act_value};
18271 next = next+1;
18272 delta_fx5[next] <= 77'hx;
18273 delta_fx5[`NEXT_INDEX] <= next;
18274 if (`PARGS.axis_debug_on) begin
18275 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
18276 mytnum,pc_fx4,id,type,win,act_value,$time);
18277 end
18278 `else
18279 calc_cwp(cwp_fx4,id,win,type);
18280 if (`PARGS.axis_debug_on) begin
18281 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
18282 mytnum,pc_fx4,id,type,win,act_value,$time);
18283 end
18284 `endif
18285 end //}
18286 end //}
18287
18288endtask
18289
18290//----------------------------------------------------------
18291// Compare with current state and capture if different
18292task push_delta_fb;
18293
18294 input [7:0] id;
18295 input [63:0] act_value;
18296 inout [7:0] next;
18297 reg [2:0] win;
18298 reg [1:0] type;
18299
18300 begin // {
18301 if (act_value != read_prev(id)) begin // { // Diff vs prev
18302 `ifndef EMUL_TL
18303 calc_cwp(delta_fx5[`CWP_INDEX],id,win,type);
18304 write_prev(id,act_value);
18305 delta_fb[next] <= {type,win,id,act_value};
18306 next = next+1;
18307 delta_fb[next] <= 77'hx;
18308 delta_fb[`NEXT_INDEX] <= next;
18309 if (`PARGS.axis_debug_on) begin
18310 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
18311 mytnum,pc_fx5,id,type,win,act_value,$time);
18312 end
18313 `else
18314 calc_cwp(cwp_fx5,id,win,type);
18315 if (`PARGS.axis_debug_on) begin
18316 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
18317 mytnum,pc_fx5,id,type,win,act_value,$time);
18318 end
18319 `endif
18320 end //}
18321 end //}
18322
18323endtask
18324
18325//----------------------------------------------------------
18326// Compare with current state and capture if different
18327task push_delta_fw;
18328
18329 input [7:0] id;
18330 input [63:0] act_value;
18331 inout [7:0] next;
18332 reg [2:0] win;
18333 reg [1:0] type;
18334
18335 begin // {
18336 if (act_value != read_prev(id)) begin // { // Diff vs prev
18337
18338 `ifndef EMUL_TL
18339 calc_cwp(delta_fb[`CWP_INDEX],id,win,type);
18340 write_prev(id,act_value);
18341 delta_fw[next] <= {type,win,id,act_value};
18342 next = next+1;
18343 delta_fw[next] <= 77'hx;
18344 delta_fw[`NEXT_INDEX] <= next;
18345 if (`PARGS.axis_debug_on) begin
18346 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
18347 mytnum,pc_fb,id,type,win,act_value,$time);
18348 end
18349 `else
18350 calc_cwp(cwp_fb[`CWP_INDEX],id,win,type);
18351 if (`PARGS.axis_debug_on) begin
18352 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
18353 mytnum,pc_fb,id,type,win,act_value,$time);
18354 end
18355 `endif
18356 end //}
18357 end //}
18358
18359endtask
18360
18361//----------------------------------------------------------
18362// Compare with current state and capture if different
18363task push_delta_fw1;
18364
18365 input [7:0] id;
18366 input [63:0] act_value;
18367 inout [7:0] next;
18368 reg [2:0] win;
18369 reg [1:0] type;
18370
18371 begin // {
18372 if (act_value != read_prev(id)) begin // { // Diff vs prev
18373
18374 `ifndef EMUL_TL
18375 calc_cwp(delta_fw[`CWP_INDEX],id,win,type);
18376 write_prev(id,act_value);
18377 delta_fw1[next] <= {type,win,id,act_value};
18378 next = next+1;
18379 delta_fw1[next] <= 77'hx;
18380 delta_fw1[`NEXT_INDEX] <= next;
18381 if (`PARGS.axis_debug_on) begin
18382 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
18383 mytnum,pc_fw,id,type,win,act_value,$time);
18384 end
18385 `else
18386 calc_cwp(cwp_fw,id,win,type);
18387 if (`PARGS.axis_debug_on) begin
18388 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
18389 mytnum,pc_fw,id,type,win,act_value,$time);
18390 end
18391 `endif
18392 end //}
18393 end //}
18394
18395endtask
18396
18397//----------------------------------------------------------
18398// Compare with current state and capture if different
18399task push_delta_fw2;
18400
18401 input [7:0] id;
18402 input [63:0] act_value;
18403 inout [7:0] next;
18404 reg [2:0] win;
18405 reg [1:0] type;
18406
18407 begin // {
18408 if (act_value != read_prev(id)) begin // { // Diff vs prev
18409
18410 `ifndef EMUL_TL
18411 calc_cwp(delta_fw1[`CWP_INDEX],id,win,type);
18412 write_prev(id,act_value);
18413 delta_fw2[next] <= {type,win,id,act_value};
18414 next = next+1;
18415 delta_fw2[next] <= 77'hx;
18416 delta_fw2[`NEXT_INDEX] <= next;
18417 if (`PARGS.axis_debug_on) begin
18418 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
18419 mytnum,pc_fw1,id,type,win,act_value,$time);
18420 end
18421 `else
18422 calc_cwp(cwp_fw1,id,win,type);
18423 if (`PARGS.axis_debug_on) begin
18424 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
18425 mytnum,pc_fw1,id,type,win,act_value,$time);
18426 end
18427 `endif
18428 end //}
18429 end //}
18430
18431endtask
18432
18433//----------------------------------------------------------
18434// Compare with current state and capture if different
18435// This is for late changing registers
18436// Use blocking assignments.
18437task push_delta_fw2_async;
18438
18439 input [7:0] id;
18440 input [63:0] act_value;
18441 inout [7:0] next;
18442 reg [2:0] win;
18443 reg [1:0] type;
18444
18445 begin // {
18446 if (act_value != read_prev(id)) begin // { // Diff vs prev
18447
18448 `ifndef EMUL_TL
18449 calc_cwp(delta_fw2[`CWP_INDEX],id,win,type);
18450 write_prev_async(id,act_value);
18451 delta_fw2[next] = {type,win,id,act_value};
18452 next = next+1;
18453 delta_fw2[next] = 77'hx;
18454 delta_fw2[`NEXT_INDEX] = next;
18455 if (`PARGS.axis_debug_on) begin
18456 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
18457 mytnum,pc_fw1,id,type,win,act_value,$time);
18458 end
18459 `else
18460 calc_cwp(cwp_fw2,id,win,type);
18461 if (`PARGS.axis_debug_on) begin
18462 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
18463 mytnum,pc_fw1,id,type,win,act_value,$time);
18464 end
18465 `endif
18466 end //}
18467 end //}
18468
18469endtask
18470
18471
18472//----------------------------------------------------------
18473// Compare with current state and capture if different
18474// Use blocking assignments so that push_simics will work
18475task push_delta_prev_async;
18476
18477 input [7:0] id;
18478 input [63:0] act_value;
18479 inout [7:0] next;
18480 reg [2:0] win;
18481 reg [1:0] type;
18482
18483 begin // {
18484
18485 if (act_value != read_prev(id)) begin // { // Diff vs prev
18486
18487 `ifndef EMUL_TL
18488 calc_cwp(delta_prev[`CWP_INDEX],id,win,type);
18489 write_prev_async(id,act_value);
18490 delta_prev[next] = {type,win,id,act_value};
18491 next = next+1;
18492 delta_prev[next] = 77'hx;
18493 delta_prev[`NEXT_INDEX] = next;
18494 if (`PARGS.axis_debug_on) begin
18495 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
18496 mytnum,pc_last,id,type,win,act_value,$time);
18497 end
18498 `else
18499 if (`PARGS.axis_debug_on) begin
18500 calc_cwp(cwp_last,id,win,type);
18501 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
18502 mytnum,pc_last,id,type,win,act_value,$time);
18503 end
18504 `endif
18505 end //}
18506 end //}
18507
18508endtask
18509
18510//----------------------------------------------------------
18511// prev of delta pipeline
18512task update_prev;
18513 integer i;
18514
18515 begin // {
18516 `ifndef EMUL_TL
18517 //--------------------
18518 // Pipeline previous stage
18519 for (i=0; i<=delta_fw2[`NEXT_INDEX]; i=i+1) begin // {
18520 delta_prev[i] <= delta_fw2[i];
18521 end
18522 `endif
18523 end //}
18524
18525endtask
18526
18527//----------------------------------------------------------
18528//----------------------------------------------------------
18529// Sort delta list in register ID order, then push to simics
18530// Or print deltas if sas check disabled ..
18531task push_simics;
18532
18533integer i;
18534reg [7:0] act_type;
18535integer act_level;
18536reg [7:0] regnum;
18537reg [2:0] win;
18538reg [1:0] type;
18539reg [63:0] value;
18540reg [63:0] pc;
18541reg [63:0] time_fw2;
18542
18543 begin // {
18544
18545 `ifndef EMUL_TL
18546 `NASTOP.delta_cnt = 0;
18547 sort_delta;
18548
18549 //--------------------
18550 // Order of registers reported to simics must be:
18551 // Global 0-7 aka prev_reg[0:7]
18552 // Window 8-23 aka prev_reg[8:23]
18553 // Floating 0-63 aka prev_reg[200:263]
18554 // Control 32-143 aka prev_reg[32:143]
18555
18556 act_level = delta_prev[`GL_INDEX]; // GL
18557 time_fw2 = delta_prev[`TIME_INDEX]; // Finish time
18558
18559
18560 //--------------------
18561 for (i=`FIRST_INDEX; i<delta_prev[`NEXT_INDEX]; i=i+1) begin // {
18562 {type,win,regnum,value} = delta_prev[i];
18563
18564 if (regnum<=7) begin // {
18565 act_type = "G";
18566 if (`PARGS.nas_check_on) begin // {
18567 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
18568 act_level, regnum, value);
18569 end // }
18570 else if (`PARGS.show_delta_on) begin // {
18571 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
18572 end //}
18573 end // }
18574 else if (regnum<=23) begin // { %o0-%l7, %l0-%l7
18575 act_type = "W";
18576 if (`PARGS.nas_check_on) begin // {
18577 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
18578 win, regnum, value);
18579 end // }
18580 else if (`PARGS.show_delta_on) begin // {
18581 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
18582 end //}
18583 end // }
18584 else if (regnum<=31) begin // { %i0-%i7
18585 act_type = "W";
18586 if (`PARGS.nas_check_on) begin // {
18587 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
18588 win, (regnum-16), value);
18589 end // }
18590 else if (`PARGS.show_delta_on) begin // {
18591 `NASTOP.print_delta (mytnum,act_type,win,(regnum-16),value);
18592 end //}
18593 end // }
18594 else if (regnum<=(64+`FP_OFFSET)) begin // {
18595 act_type = "F";
18596 if (`PARGS.nas_check_on) begin // {
18597 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
18598 (regnum-`FP_OFFSET), value);
18599 end // }
18600 else if (`PARGS.show_delta_on) begin // {
18601 `NASTOP.print_delta (mytnum,act_type,win,(regnum-`FP_OFFSET),value);
18602 end //}
18603 end // }
18604 else if ((regnum>=(32+`CTL_OFFSET))&(regnum<=(143+`CTL_OFFSET))) begin // {
18605 act_type = "C";
18606 if (`PARGS.nas_check_on) begin // {
18607 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
18608 (regnum-`CTL_OFFSET), value);
18609 end //}
18610 else if (`PARGS.show_delta_on) begin // {
18611 `NASTOP.print_delta (mytnum,act_type,win,(regnum-`CTL_OFFSET),value);
18612 end //}
18613 end // }
18614 else begin // {
18615 `PR_ERROR ("nas", `ERROR, " - T%0d Bench problem. push_simics has bad regnum", mytnum);
18616 end // }
18617 end // }
18618
18619 //--------------------
18620 // Push Opcode
18621 act_type = "C";
18622 regnum = `OPCODE;
18623 value = delta_prev[`OPCODE_INDEX];
18624 if (`PARGS.nas_check_on) begin // {
18625 `ifdef OPCODE_COMPARE
18626 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
18627 regnum, value);
18628 `endif
18629 end //}
18630 else if (`PARGS.show_delta_on) begin // {
18631 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
18632 end //}
18633
18634
18635 //--------------------
18636 // Push End of Instruction Delimiter
18637 // The value field for this PUSH equals the PC for this instruction.
18638 // so that printing to the logfile works correctly.
18639 // prev_reg[`PC] = current instruction PC
18640 // delta_reg[`PC] = PC at end of current instruction
18641 act_type = "X";
18642 pc = delta_prev[`PC_INDEX];
18643 if (`PARGS.nas_check_on) begin // {
18644 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
18645 delta_fw2[`CWP_INDEX], `END_INSTR, pc);
18646 end // }
18647 else if (`PARGS.show_delta_on) begin // {
18648 `NASTOP.print_delta (mytnum,act_type,delta_fw2[`CWP_INDEX],`END_INSTR,0);
18649 end //}
18650 if (! `PARGS.nas_check_on) begin // {
18651 `PR_NORMAL ("nas", `NORMAL, "@%0d T%0d %h (Unchecked..)",
18652 $time, mytnum, {16'b0,pc});
18653 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
18654 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
18655 end //}
18656
18657 `else
18658 if (! `PARGS.nas_check_on) begin // {
18659 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
18660 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
18661 end //}
18662 `endif
18663 end // }
18664endtask
18665
18666
18667//----------------------------------------------------------
18668// Save current window to previous window, then copy new window to current window
18669task copy_win;
18670 input [2:0] new_cwp;
18671 input [2:0] old_cwp;
18672 integer i;
18673
18674 begin // {
18675
18676 // Save current window to Old window
18677 case (old_cwp)
18678 0: begin // {
18679 win0_reg8 = prev_reg8;
18680 win1_reg24 = prev_reg8;
18681 win0_reg9 = prev_reg9;
18682 win1_reg25 = prev_reg9;
18683 win0_reg10 = prev_reg10;
18684 win1_reg26 = prev_reg10;
18685 win0_reg11 = prev_reg11;
18686 win1_reg27 = prev_reg11;
18687 win0_reg12 = prev_reg12;
18688 win1_reg28 = prev_reg12;
18689 win0_reg13 = prev_reg13;
18690 win1_reg29 = prev_reg13;
18691 win0_reg14 = prev_reg14;
18692 win1_reg30 = prev_reg14;
18693 win0_reg15 = prev_reg15;
18694 win1_reg31 = prev_reg15;
18695 win0_reg16 = prev_reg16;
18696 win0_reg17 = prev_reg17;
18697 win0_reg18 = prev_reg18;
18698 win0_reg19 = prev_reg19;
18699 win0_reg20 = prev_reg20;
18700 win0_reg21 = prev_reg21;
18701 win0_reg22 = prev_reg22;
18702 win0_reg23 = prev_reg23;
18703 win0_reg24 = prev_reg24;
18704 win7_reg8 = prev_reg24;
18705 win0_reg25 = prev_reg25;
18706 win7_reg9 = prev_reg25;
18707 win0_reg26 = prev_reg26;
18708 win7_reg10 = prev_reg26;
18709 win0_reg27 = prev_reg27;
18710 win7_reg11 = prev_reg27;
18711 win0_reg28 = prev_reg28;
18712 win7_reg12 = prev_reg28;
18713 win0_reg29 = prev_reg29;
18714 win7_reg13 = prev_reg29;
18715 win0_reg30 = prev_reg30;
18716 win7_reg14 = prev_reg30;
18717 win0_reg31 = prev_reg31;
18718 win7_reg15 = prev_reg31;
18719 end // }
18720 1: begin // {
18721 win1_reg8 = prev_reg8;
18722 win2_reg24 = prev_reg8;
18723 win1_reg9 = prev_reg9;
18724 win2_reg25 = prev_reg9;
18725 win1_reg10 = prev_reg10;
18726 win2_reg26 = prev_reg10;
18727 win1_reg11 = prev_reg11;
18728 win2_reg27 = prev_reg11;
18729 win1_reg12 = prev_reg12;
18730 win2_reg28 = prev_reg12;
18731 win1_reg13 = prev_reg13;
18732 win2_reg29 = prev_reg13;
18733 win1_reg14 = prev_reg14;
18734 win2_reg30 = prev_reg14;
18735 win1_reg15 = prev_reg15;
18736 win2_reg31 = prev_reg15;
18737 win1_reg16 = prev_reg16;
18738 win1_reg17 = prev_reg17;
18739 win1_reg18 = prev_reg18;
18740 win1_reg19 = prev_reg19;
18741 win1_reg20 = prev_reg20;
18742 win1_reg21 = prev_reg21;
18743 win1_reg22 = prev_reg22;
18744 win1_reg23 = prev_reg23;
18745 win1_reg24 = prev_reg24;
18746 win0_reg8 = prev_reg24;
18747 win1_reg25 = prev_reg25;
18748 win0_reg9 = prev_reg25;
18749 win1_reg26 = prev_reg26;
18750 win0_reg10 = prev_reg26;
18751 win1_reg27 = prev_reg27;
18752 win0_reg11 = prev_reg27;
18753 win1_reg28 = prev_reg28;
18754 win0_reg12 = prev_reg28;
18755 win1_reg29 = prev_reg29;
18756 win0_reg13 = prev_reg29;
18757 win1_reg30 = prev_reg30;
18758 win0_reg14 = prev_reg30;
18759 win1_reg31 = prev_reg31;
18760 win0_reg15 = prev_reg31;
18761 end // }
18762 2: begin // {
18763 win2_reg8 = prev_reg8;
18764 win3_reg24 = prev_reg8;
18765 win2_reg9 = prev_reg9;
18766 win3_reg25 = prev_reg9;
18767 win2_reg10 = prev_reg10;
18768 win3_reg26 = prev_reg10;
18769 win2_reg11 = prev_reg11;
18770 win3_reg27 = prev_reg11;
18771 win2_reg12 = prev_reg12;
18772 win3_reg28 = prev_reg12;
18773 win2_reg13 = prev_reg13;
18774 win3_reg29 = prev_reg13;
18775 win2_reg14 = prev_reg14;
18776 win3_reg30 = prev_reg14;
18777 win2_reg15 = prev_reg15;
18778 win3_reg31 = prev_reg15;
18779 win2_reg16 = prev_reg16;
18780 win2_reg17 = prev_reg17;
18781 win2_reg18 = prev_reg18;
18782 win2_reg19 = prev_reg19;
18783 win2_reg20 = prev_reg20;
18784 win2_reg21 = prev_reg21;
18785 win2_reg22 = prev_reg22;
18786 win2_reg23 = prev_reg23;
18787 win2_reg24 = prev_reg24;
18788 win1_reg8 = prev_reg24;
18789 win2_reg25 = prev_reg25;
18790 win1_reg9 = prev_reg25;
18791 win2_reg26 = prev_reg26;
18792 win1_reg10 = prev_reg26;
18793 win2_reg27 = prev_reg27;
18794 win1_reg11 = prev_reg27;
18795 win2_reg28 = prev_reg28;
18796 win1_reg12 = prev_reg28;
18797 win2_reg29 = prev_reg29;
18798 win1_reg13 = prev_reg29;
18799 win2_reg30 = prev_reg30;
18800 win1_reg14 = prev_reg30;
18801 win2_reg31 = prev_reg31;
18802 win1_reg15 = prev_reg31;
18803 end // }
18804 3: begin // {
18805 win3_reg8 = prev_reg8;
18806 win4_reg24 = prev_reg8;
18807 win3_reg9 = prev_reg9;
18808 win4_reg25 = prev_reg9;
18809 win3_reg10 = prev_reg10;
18810 win4_reg26 = prev_reg10;
18811 win3_reg11 = prev_reg11;
18812 win4_reg27 = prev_reg11;
18813 win3_reg12 = prev_reg12;
18814 win4_reg28 = prev_reg12;
18815 win3_reg13 = prev_reg13;
18816 win4_reg29 = prev_reg13;
18817 win3_reg14 = prev_reg14;
18818 win4_reg30 = prev_reg14;
18819 win3_reg15 = prev_reg15;
18820 win4_reg31 = prev_reg15;
18821 win3_reg16 = prev_reg16;
18822 win3_reg17 = prev_reg17;
18823 win3_reg18 = prev_reg18;
18824 win3_reg19 = prev_reg19;
18825 win3_reg20 = prev_reg20;
18826 win3_reg21 = prev_reg21;
18827 win3_reg22 = prev_reg22;
18828 win3_reg23 = prev_reg23;
18829 win3_reg24 = prev_reg24;
18830 win2_reg8 = prev_reg24;
18831 win3_reg25 = prev_reg25;
18832 win2_reg9 = prev_reg25;
18833 win3_reg26 = prev_reg26;
18834 win2_reg10 = prev_reg26;
18835 win3_reg27 = prev_reg27;
18836 win2_reg11 = prev_reg27;
18837 win3_reg28 = prev_reg28;
18838 win2_reg12 = prev_reg28;
18839 win3_reg29 = prev_reg29;
18840 win2_reg13 = prev_reg29;
18841 win3_reg30 = prev_reg30;
18842 win2_reg14 = prev_reg30;
18843 win3_reg31 = prev_reg31;
18844 win2_reg15 = prev_reg31;
18845 end // }
18846 4: begin // {
18847 win4_reg8 = prev_reg8;
18848 win5_reg24 = prev_reg8;
18849 win4_reg9 = prev_reg9;
18850 win5_reg25 = prev_reg9;
18851 win4_reg10 = prev_reg10;
18852 win5_reg26 = prev_reg10;
18853 win4_reg11 = prev_reg11;
18854 win5_reg27 = prev_reg11;
18855 win4_reg12 = prev_reg12;
18856 win5_reg28 = prev_reg12;
18857 win4_reg13 = prev_reg13;
18858 win5_reg29 = prev_reg13;
18859 win4_reg14 = prev_reg14;
18860 win5_reg30 = prev_reg14;
18861 win4_reg15 = prev_reg15;
18862 win5_reg31 = prev_reg15;
18863 win4_reg16 = prev_reg16;
18864 win4_reg17 = prev_reg17;
18865 win4_reg18 = prev_reg18;
18866 win4_reg19 = prev_reg19;
18867 win4_reg20 = prev_reg20;
18868 win4_reg21 = prev_reg21;
18869 win4_reg22 = prev_reg22;
18870 win4_reg23 = prev_reg23;
18871 win4_reg24 = prev_reg24;
18872 win3_reg8 = prev_reg24;
18873 win4_reg25 = prev_reg25;
18874 win3_reg9 = prev_reg25;
18875 win4_reg26 = prev_reg26;
18876 win3_reg10 = prev_reg26;
18877 win4_reg27 = prev_reg27;
18878 win3_reg11 = prev_reg27;
18879 win4_reg28 = prev_reg28;
18880 win3_reg12 = prev_reg28;
18881 win4_reg29 = prev_reg29;
18882 win3_reg13 = prev_reg29;
18883 win4_reg30 = prev_reg30;
18884 win3_reg14 = prev_reg30;
18885 win4_reg31 = prev_reg31;
18886 win3_reg15 = prev_reg31;
18887 end // }
18888 5: begin // {
18889 win5_reg8 = prev_reg8;
18890 win6_reg24 = prev_reg8;
18891 win5_reg9 = prev_reg9;
18892 win6_reg25 = prev_reg9;
18893 win5_reg10 = prev_reg10;
18894 win6_reg26 = prev_reg10;
18895 win5_reg11 = prev_reg11;
18896 win6_reg27 = prev_reg11;
18897 win5_reg12 = prev_reg12;
18898 win6_reg28 = prev_reg12;
18899 win5_reg13 = prev_reg13;
18900 win6_reg29 = prev_reg13;
18901 win5_reg14 = prev_reg14;
18902 win6_reg30 = prev_reg14;
18903 win5_reg15 = prev_reg15;
18904 win6_reg31 = prev_reg15;
18905 win5_reg16 = prev_reg16;
18906 win5_reg17 = prev_reg17;
18907 win5_reg18 = prev_reg18;
18908 win5_reg19 = prev_reg19;
18909 win5_reg20 = prev_reg20;
18910 win5_reg21 = prev_reg21;
18911 win5_reg22 = prev_reg22;
18912 win5_reg23 = prev_reg23;
18913 win5_reg24 = prev_reg24;
18914 win4_reg8 = prev_reg24;
18915 win5_reg25 = prev_reg25;
18916 win4_reg9 = prev_reg25;
18917 win5_reg26 = prev_reg26;
18918 win4_reg10 = prev_reg26;
18919 win5_reg27 = prev_reg27;
18920 win4_reg11 = prev_reg27;
18921 win5_reg28 = prev_reg28;
18922 win4_reg12 = prev_reg28;
18923 win5_reg29 = prev_reg29;
18924 win4_reg13 = prev_reg29;
18925 win5_reg30 = prev_reg30;
18926 win4_reg14 = prev_reg30;
18927 win5_reg31 = prev_reg31;
18928 win4_reg15 = prev_reg31;
18929 end // }
18930 6: begin // {
18931 win6_reg8 = prev_reg8;
18932 win7_reg24 = prev_reg8;
18933 win6_reg9 = prev_reg9;
18934 win7_reg25 = prev_reg9;
18935 win6_reg10 = prev_reg10;
18936 win7_reg26 = prev_reg10;
18937 win6_reg11 = prev_reg11;
18938 win7_reg27 = prev_reg11;
18939 win6_reg12 = prev_reg12;
18940 win7_reg28 = prev_reg12;
18941 win6_reg13 = prev_reg13;
18942 win7_reg29 = prev_reg13;
18943 win6_reg14 = prev_reg14;
18944 win7_reg30 = prev_reg14;
18945 win6_reg15 = prev_reg15;
18946 win7_reg31 = prev_reg15;
18947 win6_reg16 = prev_reg16;
18948 win6_reg17 = prev_reg17;
18949 win6_reg18 = prev_reg18;
18950 win6_reg19 = prev_reg19;
18951 win6_reg20 = prev_reg20;
18952 win6_reg21 = prev_reg21;
18953 win6_reg22 = prev_reg22;
18954 win6_reg23 = prev_reg23;
18955 win6_reg24 = prev_reg24;
18956 win5_reg8 = prev_reg24;
18957 win6_reg25 = prev_reg25;
18958 win5_reg9 = prev_reg25;
18959 win6_reg26 = prev_reg26;
18960 win5_reg10 = prev_reg26;
18961 win6_reg27 = prev_reg27;
18962 win5_reg11 = prev_reg27;
18963 win6_reg28 = prev_reg28;
18964 win5_reg12 = prev_reg28;
18965 win6_reg29 = prev_reg29;
18966 win5_reg13 = prev_reg29;
18967 win6_reg30 = prev_reg30;
18968 win5_reg14 = prev_reg30;
18969 win6_reg31 = prev_reg31;
18970 win5_reg15 = prev_reg31;
18971 end // }
18972 7: begin // {
18973 win7_reg8 = prev_reg8;
18974 win0_reg24 = prev_reg8;
18975 win7_reg9 = prev_reg9;
18976 win0_reg25 = prev_reg9;
18977 win7_reg10 = prev_reg10;
18978 win0_reg26 = prev_reg10;
18979 win7_reg11 = prev_reg11;
18980 win0_reg27 = prev_reg11;
18981 win7_reg12 = prev_reg12;
18982 win0_reg28 = prev_reg12;
18983 win7_reg13 = prev_reg13;
18984 win0_reg29 = prev_reg13;
18985 win7_reg14 = prev_reg14;
18986 win0_reg30 = prev_reg14;
18987 win7_reg15 = prev_reg15;
18988 win0_reg31 = prev_reg15;
18989 win7_reg16 = prev_reg16;
18990 win7_reg17 = prev_reg17;
18991 win7_reg18 = prev_reg18;
18992 win7_reg19 = prev_reg19;
18993 win7_reg20 = prev_reg20;
18994 win7_reg21 = prev_reg21;
18995 win7_reg22 = prev_reg22;
18996 win7_reg23 = prev_reg23;
18997 win7_reg24 = prev_reg24;
18998 win6_reg8 = prev_reg24;
18999 win7_reg25 = prev_reg25;
19000 win6_reg9 = prev_reg25;
19001 win7_reg26 = prev_reg26;
19002 win6_reg10 = prev_reg26;
19003 win7_reg27 = prev_reg27;
19004 win6_reg11 = prev_reg27;
19005 win7_reg28 = prev_reg28;
19006 win6_reg12 = prev_reg28;
19007 win7_reg29 = prev_reg29;
19008 win6_reg13 = prev_reg29;
19009 win7_reg30 = prev_reg30;
19010 win6_reg14 = prev_reg30;
19011 win7_reg31 = prev_reg31;
19012 win6_reg15 = prev_reg31;
19013 end // }
19014
19015 endcase
19016
19017 // Copy New window to current window
19018 case (new_cwp)
19019 0: begin // {
19020 prev_reg8 = win0_reg8;
19021 prev_reg9 = win0_reg9;
19022 prev_reg10 = win0_reg10;
19023 prev_reg11 = win0_reg11;
19024 prev_reg12 = win0_reg12;
19025 prev_reg13 = win0_reg13;
19026 prev_reg14 = win0_reg14;
19027 prev_reg15 = win0_reg15;
19028 prev_reg16 = win0_reg16;
19029 prev_reg17 = win0_reg17;
19030 prev_reg18 = win0_reg18;
19031 prev_reg19 = win0_reg19;
19032 prev_reg20 = win0_reg20;
19033 prev_reg21 = win0_reg21;
19034 prev_reg22 = win0_reg22;
19035 prev_reg23 = win0_reg23;
19036 prev_reg24 = win0_reg24;
19037 prev_reg25 = win0_reg25;
19038 prev_reg26 = win0_reg26;
19039 prev_reg27 = win0_reg27;
19040 prev_reg28 = win0_reg28;
19041 prev_reg29 = win0_reg29;
19042 prev_reg30 = win0_reg30;
19043 prev_reg31 = win0_reg31;
19044 end // }
19045
19046 1: begin // {
19047 prev_reg8 = win1_reg8;
19048 prev_reg9 = win1_reg9;
19049 prev_reg10 = win1_reg10;
19050 prev_reg11 = win1_reg11;
19051 prev_reg12 = win1_reg12;
19052 prev_reg13 = win1_reg13;
19053 prev_reg14 = win1_reg14;
19054 prev_reg15 = win1_reg15;
19055 prev_reg16 = win1_reg16;
19056 prev_reg17 = win1_reg17;
19057 prev_reg18 = win1_reg18;
19058 prev_reg19 = win1_reg19;
19059 prev_reg20 = win1_reg20;
19060 prev_reg21 = win1_reg21;
19061 prev_reg22 = win1_reg22;
19062 prev_reg23 = win1_reg23;
19063 prev_reg24 = win1_reg24;
19064 prev_reg25 = win1_reg25;
19065 prev_reg26 = win1_reg26;
19066 prev_reg27 = win1_reg27;
19067 prev_reg28 = win1_reg28;
19068 prev_reg29 = win1_reg29;
19069 prev_reg30 = win1_reg30;
19070 prev_reg31 = win1_reg31;
19071 end // }
19072
19073 2: begin // {
19074 prev_reg8 = win2_reg8;
19075 prev_reg9 = win2_reg9;
19076 prev_reg10 = win2_reg10;
19077 prev_reg11 = win2_reg11;
19078 prev_reg12 = win2_reg12;
19079 prev_reg13 = win2_reg13;
19080 prev_reg14 = win2_reg14;
19081 prev_reg15 = win2_reg15;
19082 prev_reg16 = win2_reg16;
19083 prev_reg17 = win2_reg17;
19084 prev_reg18 = win2_reg18;
19085 prev_reg19 = win2_reg19;
19086 prev_reg20 = win2_reg20;
19087 prev_reg21 = win2_reg21;
19088 prev_reg22 = win2_reg22;
19089 prev_reg23 = win2_reg23;
19090 prev_reg24 = win2_reg24;
19091 prev_reg25 = win2_reg25;
19092 prev_reg26 = win2_reg26;
19093 prev_reg27 = win2_reg27;
19094 prev_reg28 = win2_reg28;
19095 prev_reg29 = win2_reg29;
19096 prev_reg30 = win2_reg30;
19097 prev_reg31 = win2_reg31;
19098 end // }
19099
19100 3: begin // {
19101 prev_reg8 = win3_reg8;
19102 prev_reg9 = win3_reg9;
19103 prev_reg10 = win3_reg10;
19104 prev_reg11 = win3_reg11;
19105 prev_reg12 = win3_reg12;
19106 prev_reg13 = win3_reg13;
19107 prev_reg14 = win3_reg14;
19108 prev_reg15 = win3_reg15;
19109 prev_reg16 = win3_reg16;
19110 prev_reg17 = win3_reg17;
19111 prev_reg18 = win3_reg18;
19112 prev_reg19 = win3_reg19;
19113 prev_reg20 = win3_reg20;
19114 prev_reg21 = win3_reg21;
19115 prev_reg22 = win3_reg22;
19116 prev_reg23 = win3_reg23;
19117 prev_reg24 = win3_reg24;
19118 prev_reg25 = win3_reg25;
19119 prev_reg26 = win3_reg26;
19120 prev_reg27 = win3_reg27;
19121 prev_reg28 = win3_reg28;
19122 prev_reg29 = win3_reg29;
19123 prev_reg30 = win3_reg30;
19124 prev_reg31 = win3_reg31;
19125 end // }
19126
19127 4: begin // {
19128 prev_reg8 = win4_reg8;
19129 prev_reg9 = win4_reg9;
19130 prev_reg10 = win4_reg10;
19131 prev_reg11 = win4_reg11;
19132 prev_reg12 = win4_reg12;
19133 prev_reg13 = win4_reg13;
19134 prev_reg14 = win4_reg14;
19135 prev_reg15 = win4_reg15;
19136 prev_reg16 = win4_reg16;
19137 prev_reg17 = win4_reg17;
19138 prev_reg18 = win4_reg18;
19139 prev_reg19 = win4_reg19;
19140 prev_reg20 = win4_reg20;
19141 prev_reg21 = win4_reg21;
19142 prev_reg22 = win4_reg22;
19143 prev_reg23 = win4_reg23;
19144 prev_reg24 = win4_reg24;
19145 prev_reg25 = win4_reg25;
19146 prev_reg26 = win4_reg26;
19147 prev_reg27 = win4_reg27;
19148 prev_reg28 = win4_reg28;
19149 prev_reg29 = win4_reg29;
19150 prev_reg30 = win4_reg30;
19151 prev_reg31 = win4_reg31;
19152 end // }
19153
19154 5: begin // {
19155 prev_reg8 = win5_reg8;
19156 prev_reg9 = win5_reg9;
19157 prev_reg10 = win5_reg10;
19158 prev_reg11 = win5_reg11;
19159 prev_reg12 = win5_reg12;
19160 prev_reg13 = win5_reg13;
19161 prev_reg14 = win5_reg14;
19162 prev_reg15 = win5_reg15;
19163 prev_reg16 = win5_reg16;
19164 prev_reg17 = win5_reg17;
19165 prev_reg18 = win5_reg18;
19166 prev_reg19 = win5_reg19;
19167 prev_reg20 = win5_reg20;
19168 prev_reg21 = win5_reg21;
19169 prev_reg22 = win5_reg22;
19170 prev_reg23 = win5_reg23;
19171 prev_reg24 = win5_reg24;
19172 prev_reg25 = win5_reg25;
19173 prev_reg26 = win5_reg26;
19174 prev_reg27 = win5_reg27;
19175 prev_reg28 = win5_reg28;
19176 prev_reg29 = win5_reg29;
19177 prev_reg30 = win5_reg30;
19178 prev_reg31 = win5_reg31;
19179 end // }
19180
19181 6: begin // {
19182 prev_reg8 = win6_reg8;
19183 prev_reg9 = win6_reg9;
19184 prev_reg10 = win6_reg10;
19185 prev_reg11 = win6_reg11;
19186 prev_reg12 = win6_reg12;
19187 prev_reg13 = win6_reg13;
19188 prev_reg14 = win6_reg14;
19189 prev_reg15 = win6_reg15;
19190 prev_reg16 = win6_reg16;
19191 prev_reg17 = win6_reg17;
19192 prev_reg18 = win6_reg18;
19193 prev_reg19 = win6_reg19;
19194 prev_reg20 = win6_reg20;
19195 prev_reg21 = win6_reg21;
19196 prev_reg22 = win6_reg22;
19197 prev_reg23 = win6_reg23;
19198 prev_reg24 = win6_reg24;
19199 prev_reg25 = win6_reg25;
19200 prev_reg26 = win6_reg26;
19201 prev_reg27 = win6_reg27;
19202 prev_reg28 = win6_reg28;
19203 prev_reg29 = win6_reg29;
19204 prev_reg30 = win6_reg30;
19205 prev_reg31 = win6_reg31;
19206 end // }
19207
19208 7: begin // {
19209 prev_reg8 = win7_reg8;
19210 prev_reg9 = win7_reg9;
19211 prev_reg10 = win7_reg10;
19212 prev_reg11 = win7_reg11;
19213 prev_reg12 = win7_reg12;
19214 prev_reg13 = win7_reg13;
19215 prev_reg14 = win7_reg14;
19216 prev_reg15 = win7_reg15;
19217 prev_reg16 = win7_reg16;
19218 prev_reg17 = win7_reg17;
19219 prev_reg18 = win7_reg18;
19220 prev_reg19 = win7_reg19;
19221 prev_reg20 = win7_reg20;
19222 prev_reg21 = win7_reg21;
19223 prev_reg22 = win7_reg22;
19224 prev_reg23 = win7_reg23;
19225 prev_reg24 = win7_reg24;
19226 prev_reg25 = win7_reg25;
19227 prev_reg26 = win7_reg26;
19228 prev_reg27 = win7_reg27;
19229 prev_reg28 = win7_reg28;
19230 prev_reg29 = win7_reg29;
19231 prev_reg30 = win7_reg30;
19232 prev_reg31 = win7_reg31;
19233 end // }
19234
19235 endcase
19236 end // }
19237endtask
19238
19239//----------------------------------------------------------
19240// Save current global to previous global, then copy new global to current global
19241task copy_global;
19242 input [2:0] new_gl;
19243 input [2:0] old_gl;
19244 integer i;
19245
19246 begin // {
19247
19248 // Save current global to Old global
19249 case (old_gl)
19250 0: begin // {
19251 gl0_reg0 = prev_reg0;
19252 gl0_reg1 = prev_reg1;
19253 gl0_reg2 = prev_reg2;
19254 gl0_reg3 = prev_reg3;
19255 gl0_reg4 = prev_reg4;
19256 gl0_reg5 = prev_reg5;
19257 gl0_reg6 = prev_reg6;
19258 gl0_reg7 = prev_reg7;
19259 end // }
19260 1: begin // {
19261 gl1_reg0 = prev_reg0;
19262 gl1_reg1 = prev_reg1;
19263 gl1_reg2 = prev_reg2;
19264 gl1_reg3 = prev_reg3;
19265 gl1_reg4 = prev_reg4;
19266 gl1_reg5 = prev_reg5;
19267 gl1_reg6 = prev_reg6;
19268 gl1_reg7 = prev_reg7;
19269 end // }
19270 2: begin // {
19271 gl2_reg0 = prev_reg0;
19272 gl2_reg1 = prev_reg1;
19273 gl2_reg2 = prev_reg2;
19274 gl2_reg3 = prev_reg3;
19275 gl2_reg4 = prev_reg4;
19276 gl2_reg5 = prev_reg5;
19277 gl2_reg6 = prev_reg6;
19278 gl2_reg7 = prev_reg7;
19279 end // }
19280 3: begin // {
19281 gl3_reg0 = prev_reg0;
19282 gl3_reg1 = prev_reg1;
19283 gl3_reg2 = prev_reg2;
19284 gl3_reg3 = prev_reg3;
19285 gl3_reg4 = prev_reg4;
19286 gl3_reg5 = prev_reg5;
19287 gl3_reg6 = prev_reg6;
19288 gl3_reg7 = prev_reg7;
19289 end // }
19290 endcase
19291
19292 // Copy New global current global
19293 case (new_gl)
19294 0: begin // {
19295 prev_reg0 = gl0_reg0;
19296 prev_reg1 = gl0_reg1;
19297 prev_reg2 = gl0_reg2;
19298 prev_reg3 = gl0_reg3;
19299 prev_reg4 = gl0_reg4;
19300 prev_reg5 = gl0_reg5;
19301 prev_reg6 = gl0_reg6;
19302 prev_reg7 = gl0_reg7;
19303 end // }
19304
19305 1: begin // {
19306 prev_reg0 = gl1_reg0;
19307 prev_reg1 = gl1_reg1;
19308 prev_reg2 = gl1_reg2;
19309 prev_reg3 = gl1_reg3;
19310 prev_reg4 = gl1_reg4;
19311 prev_reg5 = gl1_reg5;
19312 prev_reg6 = gl1_reg6;
19313 prev_reg7 = gl1_reg7;
19314 end // }
19315
19316 2: begin // {
19317 prev_reg0 = gl2_reg0;
19318 prev_reg1 = gl2_reg1;
19319 prev_reg2 = gl2_reg2;
19320 prev_reg3 = gl2_reg3;
19321 prev_reg4 = gl2_reg4;
19322 prev_reg5 = gl2_reg5;
19323 prev_reg6 = gl2_reg6;
19324 prev_reg7 = gl2_reg7;
19325 end // }
19326
19327 3: begin // {
19328 prev_reg0 = gl3_reg0;
19329 prev_reg1 = gl3_reg1;
19330 prev_reg2 = gl3_reg2;
19331 prev_reg3 = gl3_reg3;
19332 prev_reg4 = gl3_reg4;
19333 prev_reg5 = gl3_reg5;
19334 prev_reg6 = gl3_reg6;
19335 prev_reg7 = gl3_reg7;
19336 end // }
19337
19338 endcase
19339 end // }
19340endtask
19341
19342//----------------------------------------------------------
19343// Return window number and register type based on cwp and regnum as input
19344task calc_cwp;
19345 input [2:0] cwp;
19346 input [7:0] id;
19347 output [2:0] win;
19348 output [1:0] type;
19349
19350 begin // {
19351 if (id<=7) begin // {
19352 type = `G_TYPE;
19353 win = cwp;
19354 end // }
19355 else if (id<=23) begin // {
19356 type = `W_TYPE;
19357 win = cwp;
19358 end // }
19359 else if (id<=31) begin // {
19360 type = `W_TYPE;
19361 if (cwp == 0) begin // {
19362 win = 7;
19363 end // }
19364 else begin // {
19365 win = cwp-1;
19366 end // }
19367 end // }
19368 else if (id<=(64+`FP_OFFSET)) begin // {
19369 type = `F_TYPE;
19370 win = cwp;
19371 end // }
19372 else begin // {
19373 type = `C_TYPE;
19374 win = cwp;
19375 end // }
19376 end // }
19377endtask
19378
19379//----------------------------------------------------------
19380// Check for bad signal values
19381task check_values;
19382
19383 begin // {
19384
19385 //--------------------
19386 casex (complete_fw2)
19387 8'b00000000,
19388 8'b00000001,
19389 8'b00000010,
19390 8'b00000100,
19391 8'b00001000,
19392 8'b00010000,
19393 8'b00100000,
19394 8'b01000000,
19395 8'b10000000: ; // good value
19396 default: begin // {
19397 `PR_ERROR ("nas", `ERROR, " - T%0d More than one instruction retired in a single cycle for this thread.",
19398 mytnum);
19399 $write("\t\t\t\t Instructions - ");
19400 if (complete_fw2[`EXU_INDEX]) $write("EXU op, ");
19401 if (complete_fw2[`FP_INDEX]) $write("FP op, ");
19402 if (complete_fw2[`LSU_INDEX]) $write("LSU op, ");
19403 if (complete_fw2[`IMUL_INDEX]) $write("IMUL op, ");
19404 if (complete_fw2[`IDIV_INDEX]) $write("IDIV op, ");
19405 if (complete_fw2[`FDIV_INDEX]) $write("FDIV op, ");
19406 if (complete_fw2[`TLU_INDEX]) $write("TLU op, ");
19407 if (complete_fw2[`ASI_INDEX]) $write("ASI op, ");
19408 $write(" complete_fw2 = %b \n",complete_fw2);
19409 $display("");
19410 end // }
19411 endcase
19412
19413 // This check only works if diags are written properly.
19414 // For example, if a diag writes to one of these registers using wrpr,
19415 // then this check must be disabled using plusarg.
19416 //--------------------
19417 // CANSAVE + CANRESTORE + OTHERWIN = NWINDOWS-2 (per Sparc V9)
19418 if (`PARGS.win_check_on) begin // {
19419 if (complete_fw2 & ((CANSAVE_reg + CANRESTORE_reg + OTHERWIN_reg) != 6)) begin // {
19420 `PR_ERROR ("nas", `ERROR, "ERROR - T%0d Bad Values for window registers.", mytnum);
19421 `PR_ERROR ("nas", `ERROR, "- CANSAVE = %0d CANRESTORE = %0d OTHERWIN = %0d",
19422 CANSAVE_reg, CANRESTORE_reg,OTHERWIN_reg);
19423 end // }
19424 end // }
19425
19426 end // }
19427endtask
19428
19429//----------------------------------------------------------
19430//----------------------------------------------------------
19431`ifndef EMUL_TL
19432task sort_delta;
19433 reg [5:0] i, j, last;
19434 reg [`DELTA_WIDTH:0] temp1, temp2;
19435 begin // {
19436 last = delta_prev[`NEXT_INDEX]-1;
19437 for (i=`FIRST_INDEX; i <= last; i=i+1) begin // {
19438 for (j=`FIRST_INDEX; j < last; j=j+1) begin // {
19439 temp1 = delta_prev[j]; temp2 = delta_prev[j+1];
19440 if (temp1[76:64] > temp2[76:64]) begin // {
19441 delta_prev[j] = temp2; delta_prev [j+1] = temp1;
19442 end //}
19443 end // }
19444 end // }
19445 end // }
19446endtask
19447`endif
19448
19449//----------------------------------------------------------
19450//----------------------------------------------------------
19451// Print one entry in delta_* array
19452`ifndef EMUL_TL
19453task print_entry;
19454
19455 input [`DELTA_WIDTH:0] delta_entry;
19456
19457 reg [1:0] type;
19458 reg [2:0] win;
19459 reg [7:0] id;
19460 reg [63:0] act_value;
19461 reg [(20*8)-1:0] type_str;
19462 reg [(20*8)-1:0] regname;
19463
19464 begin // {
19465 {type,win,id,act_value} = delta_entry;
19466
19467 case (type)
19468 `G_TYPE: begin
19469 type_str="G";
19470 end
19471 `W_TYPE: begin
19472 type_str="W";
19473 end
19474 `F_TYPE: begin
19475 type_str="F";
19476 id = id - `FP_OFFSET;
19477 end
19478 `C_TYPE: begin
19479 type_str="C";
19480 id = id - `CTL_OFFSET;
19481 end
19482 endcase
19483
19484 `NASTOP.get_regname(mytnum,type_str,win,id,regname);
19485 `PR_NORMAL ("nas", `NORMAL, "type=%0s win=%0d RegID=%0d %0s=%h",
19486 type_str,win,id,regname,act_value);
19487 end //}
19488
19489endtask
19490`endif
19491
19492//----------------------------------------------------------
19493// Write Value to prev_reg using id as index (non-blocking)
19494task write_prev;
19495 input [7:0] id;
19496 input [63:0] value;
19497
19498 begin // {
19499
19500 case (id)
19501 8'd0: prev_reg0 <= value;
19502 8'd1: prev_reg1 <= value;
19503 8'd2: prev_reg2 <= value;
19504 8'd3: prev_reg3 <= value;
19505 8'd4: prev_reg4 <= value;
19506 8'd5: prev_reg5 <= value;
19507 8'd6: prev_reg6 <= value;
19508 8'd7: prev_reg7 <= value;
19509 8'd8: prev_reg8 <= value;
19510 8'd9: prev_reg9 <= value;
19511 8'd10: prev_reg10 <= value;
19512 8'd11: prev_reg11 <= value;
19513 8'd12: prev_reg12 <= value;
19514 8'd13: prev_reg13 <= value;
19515 8'd14: prev_reg14 <= value;
19516 8'd15: prev_reg15 <= value;
19517 8'd16: prev_reg16 <= value;
19518 8'd17: prev_reg17 <= value;
19519 8'd18: prev_reg18 <= value;
19520 8'd19: prev_reg19 <= value;
19521 8'd20: prev_reg20 <= value;
19522 8'd21: prev_reg21 <= value;
19523 8'd22: prev_reg22 <= value;
19524 8'd23: prev_reg23 <= value;
19525 8'd24: prev_reg24 <= value;
19526 8'd25: prev_reg25 <= value;
19527 8'd26: prev_reg26 <= value;
19528 8'd27: prev_reg27 <= value;
19529 8'd28: prev_reg28 <= value;
19530 8'd29: prev_reg29 <= value;
19531 8'd30: prev_reg30 <= value;
19532 8'd31: prev_reg31 <= value;
19533 8'd32: prev_reg32 <= value;
19534 8'd33: prev_reg33 <= value;
19535 8'd34: prev_reg34 <= value;
19536 8'd35: prev_reg35 <= value;
19537 8'd36: prev_reg36 <= value;
19538 8'd37: prev_reg37 <= value;
19539 8'd38: prev_reg38 <= value;
19540 8'd39: prev_reg39 <= value;
19541 8'd40: prev_reg40 <= value;
19542 8'd41: prev_reg41 <= value;
19543 8'd42: prev_reg42 <= value;
19544 8'd43: prev_reg43 <= value;
19545 8'd44: prev_reg44 <= value;
19546 8'd45: prev_reg45 <= value;
19547 8'd46: prev_reg46 <= value;
19548 8'd47: prev_reg47 <= value;
19549 8'd48: prev_reg48 <= value;
19550 8'd49: prev_reg49 <= value;
19551 8'd50: prev_reg50 <= value;
19552 8'd51: prev_reg51 <= value;
19553 8'd52: prev_reg52 <= value;
19554 8'd53: prev_reg53 <= value;
19555 8'd54: prev_reg54 <= value;
19556 8'd55: prev_reg55 <= value;
19557 8'd56: prev_reg56 <= value;
19558 8'd57: prev_reg57 <= value;
19559 8'd58: prev_reg58 <= value;
19560 8'd59: prev_reg59 <= value;
19561 8'd60: prev_reg60 <= value;
19562 8'd61: prev_reg61 <= value;
19563 8'd62: prev_reg62 <= value;
19564 8'd63: prev_reg63 <= value;
19565 8'd64: prev_reg64 <= value;
19566 8'd65: prev_reg65 <= value;
19567 8'd66: prev_reg66 <= value;
19568 8'd67: prev_reg67 <= value;
19569 8'd68: prev_reg68 <= value;
19570 8'd69: prev_reg69 <= value;
19571 8'd70: prev_reg70 <= value;
19572 8'd71: prev_reg71 <= value;
19573 8'd72: prev_reg72 <= value;
19574 8'd73: prev_reg73 <= value;
19575 8'd74: prev_reg74 <= value;
19576 8'd75: prev_reg75 <= value;
19577 8'd76: prev_reg76 <= value;
19578 8'd77: prev_reg77 <= value;
19579 8'd78: prev_reg78 <= value;
19580 8'd79: prev_reg79 <= value;
19581 8'd80: prev_reg80 <= value;
19582 8'd81: prev_reg81 <= value;
19583 8'd82: prev_reg82 <= value;
19584 8'd83: prev_reg83 <= value;
19585 8'd84: prev_reg84 <= value;
19586 8'd85: prev_reg85 <= value;
19587 8'd86: prev_reg86 <= value;
19588 8'd87: prev_reg87 <= value;
19589 8'd88: prev_reg88 <= value;
19590 8'd89: prev_reg89 <= value;
19591 8'd90: prev_reg90 <= value;
19592 8'd91: prev_reg91 <= value;
19593 8'd92: prev_reg92 <= value;
19594 8'd93: prev_reg93 <= value;
19595 8'd94: prev_reg94 <= value;
19596 8'd95: prev_reg95 <= value;
19597 8'd96: prev_reg96 <= value;
19598 8'd97: prev_reg97 <= value;
19599 8'd98: prev_reg98 <= value;
19600 8'd99: prev_reg99 <= value;
19601 8'd100: prev_reg100 <= value;
19602 8'd101: prev_reg101 <= value;
19603 8'd102: prev_reg102 <= value;
19604 8'd103: prev_reg103 <= value;
19605 8'd104: prev_reg104 <= value;
19606 8'd105: prev_reg105 <= value;
19607 8'd106: prev_reg106 <= value;
19608 8'd107: prev_reg107 <= value;
19609 8'd108: prev_reg108 <= value;
19610 8'd109: prev_reg109 <= value;
19611 8'd110: prev_reg110 <= value;
19612 8'd111: prev_reg111 <= value;
19613 8'd112: prev_reg112 <= value;
19614 8'd113: prev_reg113 <= value;
19615 8'd114: prev_reg114 <= value;
19616 8'd115: prev_reg115 <= value;
19617 8'd116: prev_reg116 <= value;
19618 8'd117: prev_reg117 <= value;
19619 8'd118: prev_reg118 <= value;
19620 8'd119: prev_reg119 <= value;
19621 8'd120: prev_reg120 <= value;
19622 8'd121: prev_reg121 <= value;
19623 8'd122: prev_reg122 <= value;
19624 8'd123: prev_reg123 <= value;
19625 8'd124: prev_reg124 <= value;
19626 8'd125: prev_reg125 <= value;
19627 8'd126: prev_reg126 <= value;
19628 8'd127: prev_reg127 <= value;
19629 8'd128: prev_reg128 <= value;
19630 8'd129: prev_reg129 <= value;
19631 8'd130: prev_reg130 <= value;
19632 8'd131: prev_reg131 <= value;
19633 8'd132: prev_reg132 <= value;
19634 8'd133: prev_reg133 <= value;
19635 8'd134: prev_reg134 <= value;
19636 8'd135: prev_reg135 <= value;
19637 8'd136: prev_reg136 <= value;
19638 8'd137: prev_reg137 <= value;
19639 8'd138: prev_reg138 <= value;
19640 8'd139: prev_reg139 <= value;
19641 8'd140: prev_reg140 <= value;
19642 8'd141: prev_reg141 <= value;
19643 8'd142: prev_reg142 <= value;
19644 8'd143: prev_reg143 <= value;
19645 8'd144: prev_reg144 <= value;
19646 8'd145: prev_reg145 <= value;
19647 8'd146: prev_reg146 <= value;
19648 8'd147: prev_reg147 <= value;
19649 8'd148: prev_reg148 <= value;
19650 8'd149: prev_reg149 <= value;
19651 8'd150: prev_reg150 <= value;
19652 8'd151: prev_reg151 <= value;
19653 8'd152: prev_reg152 <= value;
19654 8'd153: prev_reg153 <= value;
19655 8'd154: prev_reg154 <= value;
19656 8'd155: prev_reg155 <= value;
19657 8'd156: prev_reg156 <= value;
19658 8'd157: prev_reg157 <= value;
19659 8'd158: prev_reg158 <= value;
19660 8'd159: prev_reg159 <= value;
19661 8'd160: prev_reg160 <= value;
19662 8'd161: prev_reg161 <= value;
19663 8'd162: prev_reg162 <= value;
19664 8'd163: prev_reg163 <= value;
19665 8'd164: prev_reg164 <= value;
19666 8'd165: prev_reg165 <= value;
19667 8'd166: prev_reg166 <= value;
19668 8'd167: prev_reg167 <= value;
19669 8'd168: prev_reg168 <= value;
19670 8'd169: prev_reg169 <= value;
19671 8'd170: prev_reg170 <= value;
19672 8'd171: prev_reg171 <= value;
19673 8'd172: prev_reg172 <= value;
19674 8'd173: prev_reg173 <= value;
19675 8'd174: prev_reg174 <= value;
19676 8'd175: prev_reg175 <= value;
19677 8'd176: prev_reg176 <= value;
19678 8'd177: prev_reg177 <= value;
19679 8'd178: prev_reg178 <= value;
19680 8'd179: prev_reg179 <= value;
19681 8'd180: prev_reg180 <= value;
19682 8'd181: prev_reg181 <= value;
19683 8'd182: prev_reg182 <= value;
19684 8'd183: prev_reg183 <= value;
19685 8'd184: prev_reg184 <= value;
19686 8'd185: prev_reg185 <= value;
19687 8'd186: prev_reg186 <= value;
19688 8'd187: prev_reg187 <= value;
19689 8'd188: prev_reg188 <= value;
19690 8'd189: prev_reg189 <= value;
19691 8'd190: prev_reg190 <= value;
19692 8'd191: prev_reg191 <= value;
19693 8'd192: prev_reg192 <= value;
19694 8'd193: prev_reg193 <= value;
19695 8'd194: prev_reg194 <= value;
19696 8'd195: prev_reg195 <= value;
19697 8'd196: prev_reg196 <= value;
19698 8'd197: prev_reg197 <= value;
19699 8'd198: prev_reg198 <= value;
19700 8'd199: prev_reg199 <= value;
19701 8'd200: prev_reg200 <= value;
19702 8'd201: prev_reg201 <= value;
19703 8'd202: prev_reg202 <= value;
19704 8'd203: prev_reg203 <= value;
19705 8'd204: prev_reg204 <= value;
19706 8'd205: prev_reg205 <= value;
19707 8'd206: prev_reg206 <= value;
19708 8'd207: prev_reg207 <= value;
19709 8'd208: prev_reg208 <= value;
19710 8'd209: prev_reg209 <= value;
19711 8'd210: prev_reg210 <= value;
19712 8'd211: prev_reg211 <= value;
19713 8'd212: prev_reg212 <= value;
19714 8'd213: prev_reg213 <= value;
19715 8'd214: prev_reg214 <= value;
19716 8'd215: prev_reg215 <= value;
19717 8'd216: prev_reg216 <= value;
19718 8'd217: prev_reg217 <= value;
19719 8'd218: prev_reg218 <= value;
19720 8'd219: prev_reg219 <= value;
19721 8'd220: prev_reg220 <= value;
19722 8'd221: prev_reg221 <= value;
19723 8'd222: prev_reg222 <= value;
19724 8'd223: prev_reg223 <= value;
19725 8'd224: prev_reg224 <= value;
19726 8'd225: prev_reg225 <= value;
19727 8'd226: prev_reg226 <= value;
19728 8'd227: prev_reg227 <= value;
19729 8'd228: prev_reg228 <= value;
19730 8'd229: prev_reg229 <= value;
19731 8'd230: prev_reg230 <= value;
19732 8'd231: prev_reg231 <= value;
19733 8'd232: prev_reg232 <= value;
19734 8'd233: prev_reg233 <= value;
19735 8'd234: prev_reg234 <= value;
19736 8'd235: prev_reg235 <= value;
19737 8'd236: prev_reg236 <= value;
19738 8'd237: prev_reg237 <= value;
19739 8'd238: prev_reg238 <= value;
19740 8'd239: prev_reg239 <= value;
19741 8'd240: prev_reg240 <= value;
19742 8'd241: prev_reg241 <= value;
19743 8'd242: prev_reg242 <= value;
19744 8'd243: prev_reg243 <= value;
19745 8'd244: prev_reg244 <= value;
19746 8'd245: prev_reg245 <= value;
19747 8'd246: prev_reg246 <= value;
19748 8'd247: prev_reg247 <= value;
19749 8'd248: prev_reg248 <= value;
19750 8'd249: prev_reg249 <= value;
19751 8'd250: prev_reg250 <= value;
19752 8'd251: prev_reg251 <= value;
19753 8'd252: prev_reg252 <= value;
19754 8'd253: prev_reg253 <= value;
19755 8'd254: prev_reg254 <= value;
19756 8'd255: prev_reg255 <= value;
19757 endcase
19758
19759 end //}
19760
19761endtask
19762
19763//----------------------------------------------------------
19764// Write Value to prev_reg using id as index (blocking)
19765task write_prev_async;
19766 input [7:0] id;
19767 input [63:0] value;
19768
19769 begin // {
19770
19771 case (id)
19772 8'd0: prev_reg0 = value;
19773 8'd1: prev_reg1 = value;
19774 8'd2: prev_reg2 = value;
19775 8'd3: prev_reg3 = value;
19776 8'd4: prev_reg4 = value;
19777 8'd5: prev_reg5 = value;
19778 8'd6: prev_reg6 = value;
19779 8'd7: prev_reg7 = value;
19780 8'd8: prev_reg8 = value;
19781 8'd9: prev_reg9 = value;
19782 8'd10: prev_reg10 = value;
19783 8'd11: prev_reg11 = value;
19784 8'd12: prev_reg12 = value;
19785 8'd13: prev_reg13 = value;
19786 8'd14: prev_reg14 = value;
19787 8'd15: prev_reg15 = value;
19788 8'd16: prev_reg16 = value;
19789 8'd17: prev_reg17 = value;
19790 8'd18: prev_reg18 = value;
19791 8'd19: prev_reg19 = value;
19792 8'd20: prev_reg20 = value;
19793 8'd21: prev_reg21 = value;
19794 8'd22: prev_reg22 = value;
19795 8'd23: prev_reg23 = value;
19796 8'd24: prev_reg24 = value;
19797 8'd25: prev_reg25 = value;
19798 8'd26: prev_reg26 = value;
19799 8'd27: prev_reg27 = value;
19800 8'd28: prev_reg28 = value;
19801 8'd29: prev_reg29 = value;
19802 8'd30: prev_reg30 = value;
19803 8'd31: prev_reg31 = value;
19804 8'd32: prev_reg32 = value;
19805 8'd33: prev_reg33 = value;
19806 8'd34: prev_reg34 = value;
19807 8'd35: prev_reg35 = value;
19808 8'd36: prev_reg36 = value;
19809 8'd37: prev_reg37 = value;
19810 8'd38: prev_reg38 = value;
19811 8'd39: prev_reg39 = value;
19812 8'd40: prev_reg40 = value;
19813 8'd41: prev_reg41 = value;
19814 8'd42: prev_reg42 = value;
19815 8'd43: prev_reg43 = value;
19816 8'd44: prev_reg44 = value;
19817 8'd45: prev_reg45 = value;
19818 8'd46: prev_reg46 = value;
19819 8'd47: prev_reg47 = value;
19820 8'd48: prev_reg48 = value;
19821 8'd49: prev_reg49 = value;
19822 8'd50: prev_reg50 = value;
19823 8'd51: prev_reg51 = value;
19824 8'd52: prev_reg52 = value;
19825 8'd53: prev_reg53 = value;
19826 8'd54: prev_reg54 = value;
19827 8'd55: prev_reg55 = value;
19828 8'd56: prev_reg56 = value;
19829 8'd57: prev_reg57 = value;
19830 8'd58: prev_reg58 = value;
19831 8'd59: prev_reg59 = value;
19832 8'd60: prev_reg60 = value;
19833 8'd61: prev_reg61 = value;
19834 8'd62: prev_reg62 = value;
19835 8'd63: prev_reg63 = value;
19836 8'd64: prev_reg64 = value;
19837 8'd65: prev_reg65 = value;
19838 8'd66: prev_reg66 = value;
19839 8'd67: prev_reg67 = value;
19840 8'd68: prev_reg68 = value;
19841 8'd69: prev_reg69 = value;
19842 8'd70: prev_reg70 = value;
19843 8'd71: prev_reg71 = value;
19844 8'd72: prev_reg72 = value;
19845 8'd73: prev_reg73 = value;
19846 8'd74: prev_reg74 = value;
19847 8'd75: prev_reg75 = value;
19848 8'd76: prev_reg76 = value;
19849 8'd77: prev_reg77 = value;
19850 8'd78: prev_reg78 = value;
19851 8'd79: prev_reg79 = value;
19852 8'd80: prev_reg80 = value;
19853 8'd81: prev_reg81 = value;
19854 8'd82: prev_reg82 = value;
19855 8'd83: prev_reg83 = value;
19856 8'd84: prev_reg84 = value;
19857 8'd85: prev_reg85 = value;
19858 8'd86: prev_reg86 = value;
19859 8'd87: prev_reg87 = value;
19860 8'd88: prev_reg88 = value;
19861 8'd89: prev_reg89 = value;
19862 8'd90: prev_reg90 = value;
19863 8'd91: prev_reg91 = value;
19864 8'd92: prev_reg92 = value;
19865 8'd93: prev_reg93 = value;
19866 8'd94: prev_reg94 = value;
19867 8'd95: prev_reg95 = value;
19868 8'd96: prev_reg96 = value;
19869 8'd97: prev_reg97 = value;
19870 8'd98: prev_reg98 = value;
19871 8'd99: prev_reg99 = value;
19872 8'd100: prev_reg100 = value;
19873 8'd101: prev_reg101 = value;
19874 8'd102: prev_reg102 = value;
19875 8'd103: prev_reg103 = value;
19876 8'd104: prev_reg104 = value;
19877 8'd105: prev_reg105 = value;
19878 8'd106: prev_reg106 = value;
19879 8'd107: prev_reg107 = value;
19880 8'd108: prev_reg108 = value;
19881 8'd109: prev_reg109 = value;
19882 8'd110: prev_reg110 = value;
19883 8'd111: prev_reg111 = value;
19884 8'd112: prev_reg112 = value;
19885 8'd113: prev_reg113 = value;
19886 8'd114: prev_reg114 = value;
19887 8'd115: prev_reg115 = value;
19888 8'd116: prev_reg116 = value;
19889 8'd117: prev_reg117 = value;
19890 8'd118: prev_reg118 = value;
19891 8'd119: prev_reg119 = value;
19892 8'd120: prev_reg120 = value;
19893 8'd121: prev_reg121 = value;
19894 8'd122: prev_reg122 = value;
19895 8'd123: prev_reg123 = value;
19896 8'd124: prev_reg124 = value;
19897 8'd125: prev_reg125 = value;
19898 8'd126: prev_reg126 = value;
19899 8'd127: prev_reg127 = value;
19900 8'd128: prev_reg128 = value;
19901 8'd129: prev_reg129 = value;
19902 8'd130: prev_reg130 = value;
19903 8'd131: prev_reg131 = value;
19904 8'd132: prev_reg132 = value;
19905 8'd133: prev_reg133 = value;
19906 8'd134: prev_reg134 = value;
19907 8'd135: prev_reg135 = value;
19908 8'd136: prev_reg136 = value;
19909 8'd137: prev_reg137 = value;
19910 8'd138: prev_reg138 = value;
19911 8'd139: prev_reg139 = value;
19912 8'd140: prev_reg140 = value;
19913 8'd141: prev_reg141 = value;
19914 8'd142: prev_reg142 = value;
19915 8'd143: prev_reg143 = value;
19916 8'd144: prev_reg144 = value;
19917 8'd145: prev_reg145 = value;
19918 8'd146: prev_reg146 = value;
19919 8'd147: prev_reg147 = value;
19920 8'd148: prev_reg148 = value;
19921 8'd149: prev_reg149 = value;
19922 8'd150: prev_reg150 = value;
19923 8'd151: prev_reg151 = value;
19924 8'd152: prev_reg152 = value;
19925 8'd153: prev_reg153 = value;
19926 8'd154: prev_reg154 = value;
19927 8'd155: prev_reg155 = value;
19928 8'd156: prev_reg156 = value;
19929 8'd157: prev_reg157 = value;
19930 8'd158: prev_reg158 = value;
19931 8'd159: prev_reg159 = value;
19932 8'd160: prev_reg160 = value;
19933 8'd161: prev_reg161 = value;
19934 8'd162: prev_reg162 = value;
19935 8'd163: prev_reg163 = value;
19936 8'd164: prev_reg164 = value;
19937 8'd165: prev_reg165 = value;
19938 8'd166: prev_reg166 = value;
19939 8'd167: prev_reg167 = value;
19940 8'd168: prev_reg168 = value;
19941 8'd169: prev_reg169 = value;
19942 8'd170: prev_reg170 = value;
19943 8'd171: prev_reg171 = value;
19944 8'd172: prev_reg172 = value;
19945 8'd173: prev_reg173 = value;
19946 8'd174: prev_reg174 = value;
19947 8'd175: prev_reg175 = value;
19948 8'd176: prev_reg176 = value;
19949 8'd177: prev_reg177 = value;
19950 8'd178: prev_reg178 = value;
19951 8'd179: prev_reg179 = value;
19952 8'd180: prev_reg180 = value;
19953 8'd181: prev_reg181 = value;
19954 8'd182: prev_reg182 = value;
19955 8'd183: prev_reg183 = value;
19956 8'd184: prev_reg184 = value;
19957 8'd185: prev_reg185 = value;
19958 8'd186: prev_reg186 = value;
19959 8'd187: prev_reg187 = value;
19960 8'd188: prev_reg188 = value;
19961 8'd189: prev_reg189 = value;
19962 8'd190: prev_reg190 = value;
19963 8'd191: prev_reg191 = value;
19964 8'd192: prev_reg192 = value;
19965 8'd193: prev_reg193 = value;
19966 8'd194: prev_reg194 = value;
19967 8'd195: prev_reg195 = value;
19968 8'd196: prev_reg196 = value;
19969 8'd197: prev_reg197 = value;
19970 8'd198: prev_reg198 = value;
19971 8'd199: prev_reg199 = value;
19972 8'd200: prev_reg200 = value;
19973 8'd201: prev_reg201 = value;
19974 8'd202: prev_reg202 = value;
19975 8'd203: prev_reg203 = value;
19976 8'd204: prev_reg204 = value;
19977 8'd205: prev_reg205 = value;
19978 8'd206: prev_reg206 = value;
19979 8'd207: prev_reg207 = value;
19980 8'd208: prev_reg208 = value;
19981 8'd209: prev_reg209 = value;
19982 8'd210: prev_reg210 = value;
19983 8'd211: prev_reg211 = value;
19984 8'd212: prev_reg212 = value;
19985 8'd213: prev_reg213 = value;
19986 8'd214: prev_reg214 = value;
19987 8'd215: prev_reg215 = value;
19988 8'd216: prev_reg216 = value;
19989 8'd217: prev_reg217 = value;
19990 8'd218: prev_reg218 = value;
19991 8'd219: prev_reg219 = value;
19992 8'd220: prev_reg220 = value;
19993 8'd221: prev_reg221 = value;
19994 8'd222: prev_reg222 = value;
19995 8'd223: prev_reg223 = value;
19996 8'd224: prev_reg224 = value;
19997 8'd225: prev_reg225 = value;
19998 8'd226: prev_reg226 = value;
19999 8'd227: prev_reg227 = value;
20000 8'd228: prev_reg228 = value;
20001 8'd229: prev_reg229 = value;
20002 8'd230: prev_reg230 = value;
20003 8'd231: prev_reg231 = value;
20004 8'd232: prev_reg232 = value;
20005 8'd233: prev_reg233 = value;
20006 8'd234: prev_reg234 = value;
20007 8'd235: prev_reg235 = value;
20008 8'd236: prev_reg236 = value;
20009 8'd237: prev_reg237 = value;
20010 8'd238: prev_reg238 = value;
20011 8'd239: prev_reg239 = value;
20012 8'd240: prev_reg240 = value;
20013 8'd241: prev_reg241 = value;
20014 8'd242: prev_reg242 = value;
20015 8'd243: prev_reg243 = value;
20016 8'd244: prev_reg244 = value;
20017 8'd245: prev_reg245 = value;
20018 8'd246: prev_reg246 = value;
20019 8'd247: prev_reg247 = value;
20020 8'd248: prev_reg248 = value;
20021 8'd249: prev_reg249 = value;
20022 8'd250: prev_reg250 = value;
20023 8'd251: prev_reg251 = value;
20024 8'd252: prev_reg252 = value;
20025 8'd253: prev_reg253 = value;
20026 8'd254: prev_reg254 = value;
20027 8'd255: prev_reg255 = value;
20028 endcase
20029
20030 end //}
20031
20032endtask
20033
20034//----------------------------------------------------------
20035// Read value frpm prev_reg using id as index
20036function [63:0] read_prev;
20037 input [7:0] id;
20038
20039 begin // {
20040
20041 case (id)
20042 8'd0: read_prev = prev_reg0;
20043 8'd1: read_prev = prev_reg1;
20044 8'd2: read_prev = prev_reg2;
20045 8'd3: read_prev = prev_reg3;
20046 8'd4: read_prev = prev_reg4;
20047 8'd5: read_prev = prev_reg5;
20048 8'd6: read_prev = prev_reg6;
20049 8'd7: read_prev = prev_reg7;
20050 8'd8: read_prev = prev_reg8;
20051 8'd9: read_prev = prev_reg9;
20052 8'd10: read_prev = prev_reg10;
20053 8'd11: read_prev = prev_reg11;
20054 8'd12: read_prev = prev_reg12;
20055 8'd13: read_prev = prev_reg13;
20056 8'd14: read_prev = prev_reg14;
20057 8'd15: read_prev = prev_reg15;
20058 8'd16: read_prev = prev_reg16;
20059 8'd17: read_prev = prev_reg17;
20060 8'd18: read_prev = prev_reg18;
20061 8'd19: read_prev = prev_reg19;
20062 8'd20: read_prev = prev_reg20;
20063 8'd21: read_prev = prev_reg21;
20064 8'd22: read_prev = prev_reg22;
20065 8'd23: read_prev = prev_reg23;
20066 8'd24: read_prev = prev_reg24;
20067 8'd25: read_prev = prev_reg25;
20068 8'd26: read_prev = prev_reg26;
20069 8'd27: read_prev = prev_reg27;
20070 8'd28: read_prev = prev_reg28;
20071 8'd29: read_prev = prev_reg29;
20072 8'd30: read_prev = prev_reg30;
20073 8'd31: read_prev = prev_reg31;
20074 8'd32: read_prev = prev_reg32;
20075 8'd33: read_prev = prev_reg33;
20076 8'd34: read_prev = prev_reg34;
20077 8'd35: read_prev = prev_reg35;
20078 8'd36: read_prev = prev_reg36;
20079 8'd37: read_prev = prev_reg37;
20080 8'd38: read_prev = prev_reg38;
20081 8'd39: read_prev = prev_reg39;
20082 8'd40: read_prev = prev_reg40;
20083 8'd41: read_prev = prev_reg41;
20084 8'd42: read_prev = prev_reg42;
20085 8'd43: read_prev = prev_reg43;
20086 8'd44: read_prev = prev_reg44;
20087 8'd45: read_prev = prev_reg45;
20088 8'd46: read_prev = prev_reg46;
20089 8'd47: read_prev = prev_reg47;
20090 8'd48: read_prev = prev_reg48;
20091 8'd49: read_prev = prev_reg49;
20092 8'd50: read_prev = prev_reg50;
20093 8'd51: read_prev = prev_reg51;
20094 8'd52: read_prev = prev_reg52;
20095 8'd53: read_prev = prev_reg53;
20096 8'd54: read_prev = prev_reg54;
20097 8'd55: read_prev = prev_reg55;
20098 8'd56: read_prev = prev_reg56;
20099 8'd57: read_prev = prev_reg57;
20100 8'd58: read_prev = prev_reg58;
20101 8'd59: read_prev = prev_reg59;
20102 8'd60: read_prev = prev_reg60;
20103 8'd61: read_prev = prev_reg61;
20104 8'd62: read_prev = prev_reg62;
20105 8'd63: read_prev = prev_reg63;
20106 8'd64: read_prev = prev_reg64;
20107 8'd65: read_prev = prev_reg65;
20108 8'd66: read_prev = prev_reg66;
20109 8'd67: read_prev = prev_reg67;
20110 8'd68: read_prev = prev_reg68;
20111 8'd69: read_prev = prev_reg69;
20112 8'd70: read_prev = prev_reg70;
20113 8'd71: read_prev = prev_reg71;
20114 8'd72: read_prev = prev_reg72;
20115 8'd73: read_prev = prev_reg73;
20116 8'd74: read_prev = prev_reg74;
20117 8'd75: read_prev = prev_reg75;
20118 8'd76: read_prev = prev_reg76;
20119 8'd77: read_prev = prev_reg77;
20120 8'd78: read_prev = prev_reg78;
20121 8'd79: read_prev = prev_reg79;
20122 8'd80: read_prev = prev_reg80;
20123 8'd81: read_prev = prev_reg81;
20124 8'd82: read_prev = prev_reg82;
20125 8'd83: read_prev = prev_reg83;
20126 8'd84: read_prev = prev_reg84;
20127 8'd85: read_prev = prev_reg85;
20128 8'd86: read_prev = prev_reg86;
20129 8'd87: read_prev = prev_reg87;
20130 8'd88: read_prev = prev_reg88;
20131 8'd89: read_prev = prev_reg89;
20132 8'd90: read_prev = prev_reg90;
20133 8'd91: read_prev = prev_reg91;
20134 8'd92: read_prev = prev_reg92;
20135 8'd93: read_prev = prev_reg93;
20136 8'd94: read_prev = prev_reg94;
20137 8'd95: read_prev = prev_reg95;
20138 8'd96: read_prev = prev_reg96;
20139 8'd97: read_prev = prev_reg97;
20140 8'd98: read_prev = prev_reg98;
20141 8'd99: read_prev = prev_reg99;
20142 8'd100: read_prev = prev_reg100;
20143 8'd101: read_prev = prev_reg101;
20144 8'd102: read_prev = prev_reg102;
20145 8'd103: read_prev = prev_reg103;
20146 8'd104: read_prev = prev_reg104;
20147 8'd105: read_prev = prev_reg105;
20148 8'd106: read_prev = prev_reg106;
20149 8'd107: read_prev = prev_reg107;
20150 8'd108: read_prev = prev_reg108;
20151 8'd109: read_prev = prev_reg109;
20152 8'd110: read_prev = prev_reg110;
20153 8'd111: read_prev = prev_reg111;
20154 8'd112: read_prev = prev_reg112;
20155 8'd113: read_prev = prev_reg113;
20156 8'd114: read_prev = prev_reg114;
20157 8'd115: read_prev = prev_reg115;
20158 8'd116: read_prev = prev_reg116;
20159 8'd117: read_prev = prev_reg117;
20160 8'd118: read_prev = prev_reg118;
20161 8'd119: read_prev = prev_reg119;
20162 8'd120: read_prev = prev_reg120;
20163 8'd121: read_prev = prev_reg121;
20164 8'd122: read_prev = prev_reg122;
20165 8'd123: read_prev = prev_reg123;
20166 8'd124: read_prev = prev_reg124;
20167 8'd125: read_prev = prev_reg125;
20168 8'd126: read_prev = prev_reg126;
20169 8'd127: read_prev = prev_reg127;
20170 8'd128: read_prev = prev_reg128;
20171 8'd129: read_prev = prev_reg129;
20172 8'd130: read_prev = prev_reg130;
20173 8'd131: read_prev = prev_reg131;
20174 8'd132: read_prev = prev_reg132;
20175 8'd133: read_prev = prev_reg133;
20176 8'd134: read_prev = prev_reg134;
20177 8'd135: read_prev = prev_reg135;
20178 8'd136: read_prev = prev_reg136;
20179 8'd137: read_prev = prev_reg137;
20180 8'd138: read_prev = prev_reg138;
20181 8'd139: read_prev = prev_reg139;
20182 8'd140: read_prev = prev_reg140;
20183 8'd141: read_prev = prev_reg141;
20184 8'd142: read_prev = prev_reg142;
20185 8'd143: read_prev = prev_reg143;
20186 8'd144: read_prev = prev_reg144;
20187 8'd145: read_prev = prev_reg145;
20188 8'd146: read_prev = prev_reg146;
20189 8'd147: read_prev = prev_reg147;
20190 8'd148: read_prev = prev_reg148;
20191 8'd149: read_prev = prev_reg149;
20192 8'd150: read_prev = prev_reg150;
20193 8'd151: read_prev = prev_reg151;
20194 8'd152: read_prev = prev_reg152;
20195 8'd153: read_prev = prev_reg153;
20196 8'd154: read_prev = prev_reg154;
20197 8'd155: read_prev = prev_reg155;
20198 8'd156: read_prev = prev_reg156;
20199 8'd157: read_prev = prev_reg157;
20200 8'd158: read_prev = prev_reg158;
20201 8'd159: read_prev = prev_reg159;
20202 8'd160: read_prev = prev_reg160;
20203 8'd161: read_prev = prev_reg161;
20204 8'd162: read_prev = prev_reg162;
20205 8'd163: read_prev = prev_reg163;
20206 8'd164: read_prev = prev_reg164;
20207 8'd165: read_prev = prev_reg165;
20208 8'd166: read_prev = prev_reg166;
20209 8'd167: read_prev = prev_reg167;
20210 8'd168: read_prev = prev_reg168;
20211 8'd169: read_prev = prev_reg169;
20212 8'd170: read_prev = prev_reg170;
20213 8'd171: read_prev = prev_reg171;
20214 8'd172: read_prev = prev_reg172;
20215 8'd173: read_prev = prev_reg173;
20216 8'd174: read_prev = prev_reg174;
20217 8'd175: read_prev = prev_reg175;
20218 8'd176: read_prev = prev_reg176;
20219 8'd177: read_prev = prev_reg177;
20220 8'd178: read_prev = prev_reg178;
20221 8'd179: read_prev = prev_reg179;
20222 8'd180: read_prev = prev_reg180;
20223 8'd181: read_prev = prev_reg181;
20224 8'd182: read_prev = prev_reg182;
20225 8'd183: read_prev = prev_reg183;
20226 8'd184: read_prev = prev_reg184;
20227 8'd185: read_prev = prev_reg185;
20228 8'd186: read_prev = prev_reg186;
20229 8'd187: read_prev = prev_reg187;
20230 8'd188: read_prev = prev_reg188;
20231 8'd189: read_prev = prev_reg189;
20232 8'd190: read_prev = prev_reg190;
20233 8'd191: read_prev = prev_reg191;
20234 8'd192: read_prev = prev_reg192;
20235 8'd193: read_prev = prev_reg193;
20236 8'd194: read_prev = prev_reg194;
20237 8'd195: read_prev = prev_reg195;
20238 8'd196: read_prev = prev_reg196;
20239 8'd197: read_prev = prev_reg197;
20240 8'd198: read_prev = prev_reg198;
20241 8'd199: read_prev = prev_reg199;
20242 8'd200: read_prev = prev_reg200;
20243 8'd201: read_prev = prev_reg201;
20244 8'd202: read_prev = prev_reg202;
20245 8'd203: read_prev = prev_reg203;
20246 8'd204: read_prev = prev_reg204;
20247 8'd205: read_prev = prev_reg205;
20248 8'd206: read_prev = prev_reg206;
20249 8'd207: read_prev = prev_reg207;
20250 8'd208: read_prev = prev_reg208;
20251 8'd209: read_prev = prev_reg209;
20252 8'd210: read_prev = prev_reg210;
20253 8'd211: read_prev = prev_reg211;
20254 8'd212: read_prev = prev_reg212;
20255 8'd213: read_prev = prev_reg213;
20256 8'd214: read_prev = prev_reg214;
20257 8'd215: read_prev = prev_reg215;
20258 8'd216: read_prev = prev_reg216;
20259 8'd217: read_prev = prev_reg217;
20260 8'd218: read_prev = prev_reg218;
20261 8'd219: read_prev = prev_reg219;
20262 8'd220: read_prev = prev_reg220;
20263 8'd221: read_prev = prev_reg221;
20264 8'd222: read_prev = prev_reg222;
20265 8'd223: read_prev = prev_reg223;
20266 8'd224: read_prev = prev_reg224;
20267 8'd225: read_prev = prev_reg225;
20268 8'd226: read_prev = prev_reg226;
20269 8'd227: read_prev = prev_reg227;
20270 8'd228: read_prev = prev_reg228;
20271 8'd229: read_prev = prev_reg229;
20272 8'd230: read_prev = prev_reg230;
20273 8'd231: read_prev = prev_reg231;
20274 8'd232: read_prev = prev_reg232;
20275 8'd233: read_prev = prev_reg233;
20276 8'd234: read_prev = prev_reg234;
20277 8'd235: read_prev = prev_reg235;
20278 8'd236: read_prev = prev_reg236;
20279 8'd237: read_prev = prev_reg237;
20280 8'd238: read_prev = prev_reg238;
20281 8'd239: read_prev = prev_reg239;
20282 8'd240: read_prev = prev_reg240;
20283 8'd241: read_prev = prev_reg241;
20284 8'd242: read_prev = prev_reg242;
20285 8'd243: read_prev = prev_reg243;
20286 8'd244: read_prev = prev_reg244;
20287 8'd245: read_prev = prev_reg245;
20288 8'd246: read_prev = prev_reg246;
20289 8'd247: read_prev = prev_reg247;
20290 8'd248: read_prev = prev_reg248;
20291 8'd249: read_prev = prev_reg249;
20292 8'd250: read_prev = prev_reg250;
20293 8'd251: read_prev = prev_reg251;
20294 8'd252: read_prev = prev_reg252;
20295 8'd253: read_prev = prev_reg253;
20296 8'd254: read_prev = prev_reg254;
20297 8'd255: read_prev = prev_reg255;
20298 endcase
20299
20300 end //}
20301
20302endfunction
20303
20304//----------------------------------------------------------
20305function [4:0] remap;
20306 input [4:0] rd;
20307 input oddwin;
20308
20309 begin
20310
20311 remap[4] = rd[4] ^ (rd[3] & oddwin);
20312 remap[3:0] = rd[3:0];
20313
20314 end
20315endfunction
20316
20317//----------------------------------------------------------
20318// Initialize nas_pipe registers
20319initial begin : INIT_BLOCK
20320 integer i;
20321
20322 nas_pipe_enable = 1'b1; // Nas_pipe always enables itself
20323 good_trap_detected = 1'b0;
20324
20325 @ (posedge `BENCH_SPC3_GCLK);
20326 `TOP.th_last_act_cycle[mytnum] = 0;
20327
20328 // Window registers
20329 win0_reg8 = 0;
20330 win1_reg8 = 0;
20331 win2_reg8 = 0;
20332 win3_reg8 = 0;
20333 win4_reg8 = 0;
20334 win5_reg8 = 0;
20335 win6_reg8 = 0;
20336 win7_reg8 = 0;
20337 win0_reg9 = 0;
20338 win1_reg9 = 0;
20339 win2_reg9 = 0;
20340 win3_reg9 = 0;
20341 win4_reg9 = 0;
20342 win5_reg9 = 0;
20343 win6_reg9 = 0;
20344 win7_reg9 = 0;
20345 win0_reg10 = 0;
20346 win1_reg10 = 0;
20347 win2_reg10 = 0;
20348 win3_reg10 = 0;
20349 win4_reg10 = 0;
20350 win5_reg10 = 0;
20351 win6_reg10 = 0;
20352 win7_reg10 = 0;
20353 win0_reg11 = 0;
20354 win1_reg11 = 0;
20355 win2_reg11 = 0;
20356 win3_reg11 = 0;
20357 win4_reg11 = 0;
20358 win5_reg11 = 0;
20359 win6_reg11 = 0;
20360 win7_reg11 = 0;
20361 win0_reg12 = 0;
20362 win1_reg12 = 0;
20363 win2_reg12 = 0;
20364 win3_reg12 = 0;
20365 win4_reg12 = 0;
20366 win5_reg12 = 0;
20367 win6_reg12 = 0;
20368 win7_reg12 = 0;
20369 win0_reg13 = 0;
20370 win1_reg13 = 0;
20371 win2_reg13 = 0;
20372 win3_reg13 = 0;
20373 win4_reg13 = 0;
20374 win5_reg13 = 0;
20375 win6_reg13 = 0;
20376 win7_reg13 = 0;
20377 win0_reg14 = 0;
20378 win1_reg14 = 0;
20379 win2_reg14 = 0;
20380 win3_reg14 = 0;
20381 win4_reg14 = 0;
20382 win5_reg14 = 0;
20383 win6_reg14 = 0;
20384 win7_reg14 = 0;
20385 win0_reg15 = 0;
20386 win1_reg15 = 0;
20387 win2_reg15 = 0;
20388 win3_reg15 = 0;
20389 win4_reg15 = 0;
20390 win5_reg15 = 0;
20391 win6_reg15 = 0;
20392 win7_reg15 = 0;
20393 win0_reg16 = 0;
20394 win1_reg16 = 0;
20395 win2_reg16 = 0;
20396 win3_reg16 = 0;
20397 win4_reg16 = 0;
20398 win5_reg16 = 0;
20399 win6_reg16 = 0;
20400 win7_reg16 = 0;
20401 win0_reg17 = 0;
20402 win1_reg17 = 0;
20403 win2_reg17 = 0;
20404 win3_reg17 = 0;
20405 win4_reg17 = 0;
20406 win5_reg17 = 0;
20407 win6_reg17 = 0;
20408 win7_reg17 = 0;
20409 win0_reg18 = 0;
20410 win1_reg18 = 0;
20411 win2_reg18 = 0;
20412 win3_reg18 = 0;
20413 win4_reg18 = 0;
20414 win5_reg18 = 0;
20415 win6_reg18 = 0;
20416 win7_reg18 = 0;
20417 win0_reg19 = 0;
20418 win1_reg19 = 0;
20419 win2_reg19 = 0;
20420 win3_reg19 = 0;
20421 win4_reg19 = 0;
20422 win5_reg19 = 0;
20423 win6_reg19 = 0;
20424 win7_reg19 = 0;
20425 win0_reg20 = 0;
20426 win1_reg20 = 0;
20427 win2_reg20 = 0;
20428 win3_reg20 = 0;
20429 win4_reg20 = 0;
20430 win5_reg20 = 0;
20431 win6_reg20 = 0;
20432 win7_reg20 = 0;
20433 win0_reg21 = 0;
20434 win1_reg21 = 0;
20435 win2_reg21 = 0;
20436 win3_reg21 = 0;
20437 win4_reg21 = 0;
20438 win5_reg21 = 0;
20439 win6_reg21 = 0;
20440 win7_reg21 = 0;
20441 win0_reg22 = 0;
20442 win1_reg22 = 0;
20443 win2_reg22 = 0;
20444 win3_reg22 = 0;
20445 win4_reg22 = 0;
20446 win5_reg22 = 0;
20447 win6_reg22 = 0;
20448 win7_reg22 = 0;
20449 win0_reg23 = 0;
20450 win1_reg23 = 0;
20451 win2_reg23 = 0;
20452 win3_reg23 = 0;
20453 win4_reg23 = 0;
20454 win5_reg23 = 0;
20455 win6_reg23 = 0;
20456 win7_reg23 = 0;
20457 win0_reg24 = 0;
20458 win1_reg24 = 0;
20459 win2_reg24 = 0;
20460 win3_reg24 = 0;
20461 win4_reg24 = 0;
20462 win5_reg24 = 0;
20463 win6_reg24 = 0;
20464 win7_reg24 = 0;
20465 win0_reg25 = 0;
20466 win1_reg25 = 0;
20467 win2_reg25 = 0;
20468 win3_reg25 = 0;
20469 win4_reg25 = 0;
20470 win5_reg25 = 0;
20471 win6_reg25 = 0;
20472 win7_reg25 = 0;
20473 win0_reg26 = 0;
20474 win1_reg26 = 0;
20475 win2_reg26 = 0;
20476 win3_reg26 = 0;
20477 win4_reg26 = 0;
20478 win5_reg26 = 0;
20479 win6_reg26 = 0;
20480 win7_reg26 = 0;
20481 win0_reg27 = 0;
20482 win1_reg27 = 0;
20483 win2_reg27 = 0;
20484 win3_reg27 = 0;
20485 win4_reg27 = 0;
20486 win5_reg27 = 0;
20487 win6_reg27 = 0;
20488 win7_reg27 = 0;
20489 win0_reg28 = 0;
20490 win1_reg28 = 0;
20491 win2_reg28 = 0;
20492 win3_reg28 = 0;
20493 win4_reg28 = 0;
20494 win5_reg28 = 0;
20495 win6_reg28 = 0;
20496 win7_reg28 = 0;
20497 win0_reg29 = 0;
20498 win1_reg29 = 0;
20499 win2_reg29 = 0;
20500 win3_reg29 = 0;
20501 win4_reg29 = 0;
20502 win5_reg29 = 0;
20503 win6_reg29 = 0;
20504 win7_reg29 = 0;
20505 win0_reg30 = 0;
20506 win1_reg30 = 0;
20507 win2_reg30 = 0;
20508 win3_reg30 = 0;
20509 win4_reg30 = 0;
20510 win5_reg30 = 0;
20511 win6_reg30 = 0;
20512 win7_reg30 = 0;
20513 win0_reg31 = 0;
20514 win1_reg31 = 0;
20515 win2_reg31 = 0;
20516 win3_reg31 = 0;
20517 win4_reg31 = 0;
20518 win5_reg31 = 0;
20519 win6_reg31 = 0;
20520 win7_reg31 = 0;
20521
20522 // Global registers
20523 th_gl = `POR_GL;
20524 gl0_reg0 = 0;
20525 gl1_reg0 = 0;
20526 gl2_reg0 = 0;
20527 gl3_reg0 = 0;
20528 gl0_reg1 = 0;
20529 gl1_reg1 = 0;
20530 gl2_reg1 = 0;
20531 gl3_reg1 = 0;
20532 gl0_reg2 = 0;
20533 gl1_reg2 = 0;
20534 gl2_reg2 = 0;
20535 gl3_reg2 = 0;
20536 gl0_reg3 = 0;
20537 gl1_reg3 = 0;
20538 gl2_reg3 = 0;
20539 gl3_reg3 = 0;
20540 gl0_reg4 = 0;
20541 gl1_reg4 = 0;
20542 gl2_reg4 = 0;
20543 gl3_reg4 = 0;
20544 gl0_reg5 = 0;
20545 gl1_reg5 = 0;
20546 gl2_reg5 = 0;
20547 gl3_reg5 = 0;
20548 gl0_reg6 = 0;
20549 gl1_reg6 = 0;
20550 gl2_reg6 = 0;
20551 gl3_reg6 = 0;
20552 gl0_reg7 = 0;
20553 gl1_reg7 = 0;
20554 gl2_reg7 = 0;
20555 gl3_reg7 = 0;
20556
20557 `PR_INFO ("nas", `INFO, "T%0d Init shadow registers.",mytnum);
20558 prev_reg0 = 0;
20559 prev_reg1 = 0;
20560 prev_reg2 = 0;
20561 prev_reg3 = 0;
20562 prev_reg4 = 0;
20563 prev_reg5 = 0;
20564 prev_reg6 = 0;
20565 prev_reg7 = 0;
20566 prev_reg8 = 0;
20567 prev_reg9 = 0;
20568 prev_reg10 = 0;
20569 prev_reg11 = 0;
20570 prev_reg12 = 0;
20571 prev_reg13 = 0;
20572 prev_reg14 = 0;
20573 prev_reg15 = 0;
20574 prev_reg16 = 0;
20575 prev_reg17 = 0;
20576 prev_reg18 = 0;
20577 prev_reg19 = 0;
20578 prev_reg20 = 0;
20579 prev_reg21 = 0;
20580 prev_reg22 = 0;
20581 prev_reg23 = 0;
20582 prev_reg24 = 0;
20583 prev_reg25 = 0;
20584 prev_reg26 = 0;
20585 prev_reg27 = 0;
20586 prev_reg28 = 0;
20587 prev_reg29 = 0;
20588 prev_reg30 = 0;
20589 prev_reg31 = 0;
20590 prev_reg32 = 0;
20591 prev_reg33 = 0;
20592 prev_reg34 = 0;
20593 prev_reg35 = 0;
20594 prev_reg36 = 0;
20595 prev_reg37 = 0;
20596 prev_reg38 = 0;
20597 prev_reg39 = 0;
20598 prev_reg40 = 0;
20599 prev_reg41 = 0;
20600 prev_reg42 = 0;
20601 prev_reg43 = 0;
20602 prev_reg44 = 0;
20603 prev_reg45 = 0;
20604 prev_reg46 = 0;
20605 prev_reg47 = 0;
20606 prev_reg48 = 0;
20607 prev_reg49 = 0;
20608 prev_reg50 = 0;
20609 prev_reg51 = 0;
20610 prev_reg52 = 0;
20611 prev_reg53 = 0;
20612 prev_reg54 = 0;
20613 prev_reg55 = 0;
20614 prev_reg56 = 0;
20615 prev_reg57 = 0;
20616 prev_reg58 = 0;
20617 prev_reg59 = 0;
20618 prev_reg60 = 0;
20619 prev_reg61 = 0;
20620 prev_reg62 = 0;
20621 prev_reg63 = 0;
20622 prev_reg64 = 0;
20623 prev_reg65 = 0;
20624 prev_reg66 = 0;
20625 prev_reg67 = 0;
20626 prev_reg68 = 0;
20627 prev_reg69 = 0;
20628 prev_reg70 = 0;
20629 prev_reg71 = 0;
20630 prev_reg72 = 0;
20631 prev_reg73 = 0;
20632 prev_reg74 = 0;
20633 prev_reg75 = 0;
20634 prev_reg76 = 0;
20635 prev_reg77 = 0;
20636 prev_reg78 = 0;
20637 prev_reg79 = 0;
20638 prev_reg80 = 0;
20639 prev_reg81 = 0;
20640 prev_reg82 = 0;
20641 prev_reg83 = 0;
20642 prev_reg84 = 0;
20643 prev_reg85 = 0;
20644 prev_reg86 = 0;
20645 prev_reg87 = 0;
20646 prev_reg88 = 0;
20647 prev_reg89 = 0;
20648 prev_reg90 = 0;
20649 prev_reg91 = 0;
20650 prev_reg92 = 0;
20651 prev_reg93 = 0;
20652 prev_reg94 = 0;
20653 prev_reg95 = 0;
20654 prev_reg96 = 0;
20655 prev_reg97 = 0;
20656 prev_reg98 = 0;
20657 prev_reg99 = 0;
20658 prev_reg100 = 0;
20659 prev_reg101 = 0;
20660 prev_reg102 = 0;
20661 prev_reg103 = 0;
20662 prev_reg104 = 0;
20663 prev_reg105 = 0;
20664 prev_reg106 = 0;
20665 prev_reg107 = 0;
20666 prev_reg108 = 0;
20667 prev_reg109 = 0;
20668 prev_reg110 = 0;
20669 prev_reg111 = 0;
20670 prev_reg112 = 0;
20671 prev_reg113 = 0;
20672 prev_reg114 = 0;
20673 prev_reg115 = 0;
20674 prev_reg116 = 0;
20675 prev_reg117 = 0;
20676 prev_reg118 = 0;
20677 prev_reg119 = 0;
20678 prev_reg120 = 0;
20679 prev_reg121 = 0;
20680 prev_reg122 = 0;
20681 prev_reg123 = 0;
20682 prev_reg124 = 0;
20683 prev_reg125 = 0;
20684 prev_reg126 = 0;
20685 prev_reg127 = 0;
20686 prev_reg128 = 0;
20687 prev_reg129 = 0;
20688 prev_reg130 = 0;
20689 prev_reg131 = 0;
20690 prev_reg132 = 0;
20691 prev_reg133 = 0;
20692 prev_reg134 = 0;
20693 prev_reg135 = 0;
20694 prev_reg136 = 0;
20695 prev_reg137 = 0;
20696 prev_reg138 = 0;
20697 prev_reg139 = 0;
20698 prev_reg140 = 0;
20699 prev_reg141 = 0;
20700 prev_reg142 = 0;
20701 prev_reg143 = 0;
20702 prev_reg144 = 0;
20703 prev_reg145 = 0;
20704 prev_reg146 = 0;
20705 prev_reg147 = 0;
20706 prev_reg148 = 0;
20707 prev_reg149 = 0;
20708 prev_reg150 = 0;
20709 prev_reg151 = 0;
20710 prev_reg152 = 0;
20711 prev_reg153 = 0;
20712 prev_reg154 = 0;
20713 prev_reg155 = 0;
20714 prev_reg156 = 0;
20715 prev_reg157 = 0;
20716 prev_reg158 = 0;
20717 prev_reg159 = 0;
20718 prev_reg160 = 0;
20719 prev_reg161 = 0;
20720 prev_reg162 = 0;
20721 prev_reg163 = 0;
20722 prev_reg164 = 0;
20723 prev_reg165 = 0;
20724 prev_reg166 = 0;
20725 prev_reg167 = 0;
20726 prev_reg168 = 0;
20727 prev_reg169 = 0;
20728 prev_reg170 = 0;
20729 prev_reg171 = 0;
20730 prev_reg172 = 0;
20731 prev_reg173 = 0;
20732 prev_reg174 = 0;
20733 prev_reg175 = 0;
20734 prev_reg176 = 0;
20735 prev_reg177 = 0;
20736 prev_reg178 = 0;
20737 prev_reg179 = 0;
20738 prev_reg180 = 0;
20739 prev_reg181 = 0;
20740 prev_reg182 = 0;
20741 prev_reg183 = 0;
20742 prev_reg184 = 0;
20743 prev_reg185 = 0;
20744 prev_reg186 = 0;
20745 prev_reg187 = 0;
20746 prev_reg188 = 0;
20747 prev_reg189 = 0;
20748 prev_reg190 = 0;
20749 prev_reg191 = 0;
20750 prev_reg192 = 0;
20751 prev_reg193 = 0;
20752 prev_reg194 = 0;
20753 prev_reg195 = 0;
20754 prev_reg196 = 0;
20755 prev_reg197 = 0;
20756 prev_reg198 = 0;
20757 prev_reg199 = 0;
20758 prev_reg200 = 0;
20759 prev_reg201 = 0;
20760 prev_reg202 = 0;
20761 prev_reg203 = 0;
20762 prev_reg204 = 0;
20763 prev_reg205 = 0;
20764 prev_reg206 = 0;
20765 prev_reg207 = 0;
20766 prev_reg208 = 0;
20767 prev_reg209 = 0;
20768 prev_reg210 = 0;
20769 prev_reg211 = 0;
20770 prev_reg212 = 0;
20771 prev_reg213 = 0;
20772 prev_reg214 = 0;
20773 prev_reg215 = 0;
20774 prev_reg216 = 0;
20775 prev_reg217 = 0;
20776 prev_reg218 = 0;
20777 prev_reg219 = 0;
20778 prev_reg220 = 0;
20779 prev_reg221 = 0;
20780 prev_reg222 = 0;
20781 prev_reg223 = 0;
20782 prev_reg224 = 0;
20783 prev_reg225 = 0;
20784 prev_reg226 = 0;
20785 prev_reg227 = 0;
20786 prev_reg228 = 0;
20787 prev_reg229 = 0;
20788 prev_reg230 = 0;
20789 prev_reg231 = 0;
20790 prev_reg232 = 0;
20791 prev_reg233 = 0;
20792 prev_reg234 = 0;
20793 prev_reg235 = 0;
20794 prev_reg236 = 0;
20795 prev_reg237 = 0;
20796 prev_reg238 = 0;
20797 prev_reg239 = 0;
20798 prev_reg240 = 0;
20799 prev_reg241 = 0;
20800 prev_reg242 = 0;
20801 prev_reg243 = 0;
20802 prev_reg244 = 0;
20803 prev_reg245 = 0;
20804 prev_reg246 = 0;
20805 prev_reg247 = 0;
20806 prev_reg248 = 0;
20807 prev_reg249 = 0;
20808 prev_reg250 = 0;
20809 prev_reg251 = 0;
20810 prev_reg252 = 0;
20811 prev_reg253 = 0;
20812 prev_reg254 = 0;
20813 prev_reg255 = 0;
20814
20815 // POR for control registers
20816 write_prev(`FPRS +`CTL_OFFSET,3'h4);
20817 write_prev(`CLEANWIN +`CTL_OFFSET,3'h7);
20818 write_prev(`CANSAVE +`CTL_OFFSET,3'h6);
20819
20820 // POR for FPRS = 0x4
20821 write_prev(`FPRS+`CTL_OFFSET,3'h4);
20822
20823 // POR for PSTATE = 0x14 (PEF, PRIV = 1)
20824 write_prev(`PSTATE + `CTL_OFFSET,'h14);
20825
20826 // POR for HPSTATE = 0x4034 (RED, HPRIV = 1)
20827 write_prev(`HPSTATE + `CTL_OFFSET,'h24);
20828
20829 // POR for TL = = 0x6 [MAXTL]
20830 write_prev(`TL + `CTL_OFFSET,'h6);
20831
20832 // POR for TT6 = = 1
20833 write_prev(`TT6 + `CTL_OFFSET,'h1);
20834
20835 // POR for GL = MAXGL = 3
20836 write_prev(`GL + `CTL_OFFSET,`POR_GL);
20837
20838 // POR for VER = {003e, 0024, 01, 0036, 07}
20839 write_prev(`VER + `CTL_OFFSET,{32'h003e0024,VER_reg[31:24],24'h030607});
20840
20841 // POR for *_cmpr registers is INT_DIS = 1
20842 write_prev(`TICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
20843 write_prev(`STICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
20844 write_prev(`HSTICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
20845
20846 // Need to define so that 1st instruction will print correctly
20847 write_prev(`PC+`CTL_OFFSET,`POR_PC);
20848
20849 first_op = 1;
20850 pc_last = `BAD_PC;
20851
20852 `ifndef EMUL_TL
20853 delta_prev[`PC_INDEX] = `BAD_PC;
20854 `endif
20855
20856 irf_offset = (mytid%4)*32;
20857 in_wmr = 0;
20858 wmr <= 0;
20859end
20860
20861//----------------------------------------------------------
20862task wmr_prev;
20863 begin // {
20864
20865 // For WMR, we will set to 0x0, so that initial deltas
20866
20867 //
20868
20869 // WMR for PSTATE = 0x14 (PEF, PRIV = 1)
20870 // write_prev(`PSTATE + `CTL_OFFSET,'h00);
20871
20872 // WMR for HPSTATE = 0x4034 (RED, HPRIV = 1)
20873 // write_prev(`HPSTATE + `CTL_OFFSET,'h00);
20874
20875 // WMR for TL = = 0x6 [MAXTL]
20876 // write_prev(`TL + `CTL_OFFSET,'h0);
20877
20878 // WMR for TT6 = = 1
20879 // write_prev(`TT6 + `CTL_OFFSET,'h1);
20880
20881 // WMR for GL = MAXGL = 3
20882 // write_prev(`GL + `CTL_OFFSET,0);
20883
20884 end // }
20885endtask
20886
20887//----------------------------------------------------------
20888task por_prev;
20889 begin // {
20890
20891 // For POR, we will set to 0x0, so that initial deltas
20892 // and prev state are all consistent with DUT. No values
20893 // are preserved
20894
20895 `PR_ALWAYS ("arg", `ALWAYS,"T%0d Resetting Nas Pipe states for POR ..",mytnum);
20896 delta_fx4[`NEXT_INDEX] <= `FIRST_INDEX;
20897 delta_fx4[`FIRST_INDEX] <= 77'hx;
20898 delta_fx5[`NEXT_INDEX] <= `FIRST_INDEX;
20899 delta_fb[`NEXT_INDEX] <= `FIRST_INDEX;
20900 delta_fw[`NEXT_INDEX] <= `FIRST_INDEX;
20901 delta_fw1[`NEXT_INDEX] <= `FIRST_INDEX;
20902 delta_fw2[`NEXT_INDEX] <= `FIRST_INDEX;
20903 // Window registers
20904 win0_reg8 = 0;
20905 win1_reg8 = 0;
20906 win2_reg8 = 0;
20907 win3_reg8 = 0;
20908 win4_reg8 = 0;
20909 win5_reg8 = 0;
20910 win6_reg8 = 0;
20911 win7_reg8 = 0;
20912 win0_reg9 = 0;
20913 win1_reg9 = 0;
20914 win2_reg9 = 0;
20915 win3_reg9 = 0;
20916 win4_reg9 = 0;
20917 win5_reg9 = 0;
20918 win6_reg9 = 0;
20919 win7_reg9 = 0;
20920 win0_reg10 = 0;
20921 win1_reg10 = 0;
20922 win2_reg10 = 0;
20923 win3_reg10 = 0;
20924 win4_reg10 = 0;
20925 win5_reg10 = 0;
20926 win6_reg10 = 0;
20927 win7_reg10 = 0;
20928 win0_reg11 = 0;
20929 win1_reg11 = 0;
20930 win2_reg11 = 0;
20931 win3_reg11 = 0;
20932 win4_reg11 = 0;
20933 win5_reg11 = 0;
20934 win6_reg11 = 0;
20935 win7_reg11 = 0;
20936 win0_reg12 = 0;
20937 win1_reg12 = 0;
20938 win2_reg12 = 0;
20939 win3_reg12 = 0;
20940 win4_reg12 = 0;
20941 win5_reg12 = 0;
20942 win6_reg12 = 0;
20943 win7_reg12 = 0;
20944 win0_reg13 = 0;
20945 win1_reg13 = 0;
20946 win2_reg13 = 0;
20947 win3_reg13 = 0;
20948 win4_reg13 = 0;
20949 win5_reg13 = 0;
20950 win6_reg13 = 0;
20951 win7_reg13 = 0;
20952 win0_reg14 = 0;
20953 win1_reg14 = 0;
20954 win2_reg14 = 0;
20955 win3_reg14 = 0;
20956 win4_reg14 = 0;
20957 win5_reg14 = 0;
20958 win6_reg14 = 0;
20959 win7_reg14 = 0;
20960 win0_reg15 = 0;
20961 win1_reg15 = 0;
20962 win2_reg15 = 0;
20963 win3_reg15 = 0;
20964 win4_reg15 = 0;
20965 win5_reg15 = 0;
20966 win6_reg15 = 0;
20967 win7_reg15 = 0;
20968 win0_reg16 = 0;
20969 win1_reg16 = 0;
20970 win2_reg16 = 0;
20971 win3_reg16 = 0;
20972 win4_reg16 = 0;
20973 win5_reg16 = 0;
20974 win6_reg16 = 0;
20975 win7_reg16 = 0;
20976 win0_reg17 = 0;
20977 win1_reg17 = 0;
20978 win2_reg17 = 0;
20979 win3_reg17 = 0;
20980 win4_reg17 = 0;
20981 win5_reg17 = 0;
20982 win6_reg17 = 0;
20983 win7_reg17 = 0;
20984 win0_reg18 = 0;
20985 win1_reg18 = 0;
20986 win2_reg18 = 0;
20987 win3_reg18 = 0;
20988 win4_reg18 = 0;
20989 win5_reg18 = 0;
20990 win6_reg18 = 0;
20991 win7_reg18 = 0;
20992 win0_reg19 = 0;
20993 win1_reg19 = 0;
20994 win2_reg19 = 0;
20995 win3_reg19 = 0;
20996 win4_reg19 = 0;
20997 win5_reg19 = 0;
20998 win6_reg19 = 0;
20999 win7_reg19 = 0;
21000 win0_reg20 = 0;
21001 win1_reg20 = 0;
21002 win2_reg20 = 0;
21003 win3_reg20 = 0;
21004 win4_reg20 = 0;
21005 win5_reg20 = 0;
21006 win6_reg20 = 0;
21007 win7_reg20 = 0;
21008 win0_reg21 = 0;
21009 win1_reg21 = 0;
21010 win2_reg21 = 0;
21011 win3_reg21 = 0;
21012 win4_reg21 = 0;
21013 win5_reg21 = 0;
21014 win6_reg21 = 0;
21015 win7_reg21 = 0;
21016 win0_reg22 = 0;
21017 win1_reg22 = 0;
21018 win2_reg22 = 0;
21019 win3_reg22 = 0;
21020 win4_reg22 = 0;
21021 win5_reg22 = 0;
21022 win6_reg22 = 0;
21023 win7_reg22 = 0;
21024 win0_reg23 = 0;
21025 win1_reg23 = 0;
21026 win2_reg23 = 0;
21027 win3_reg23 = 0;
21028 win4_reg23 = 0;
21029 win5_reg23 = 0;
21030 win6_reg23 = 0;
21031 win7_reg23 = 0;
21032 win0_reg24 = 0;
21033 win1_reg24 = 0;
21034 win2_reg24 = 0;
21035 win3_reg24 = 0;
21036 win4_reg24 = 0;
21037 win5_reg24 = 0;
21038 win6_reg24 = 0;
21039 win7_reg24 = 0;
21040 win0_reg25 = 0;
21041 win1_reg25 = 0;
21042 win2_reg25 = 0;
21043 win3_reg25 = 0;
21044 win4_reg25 = 0;
21045 win5_reg25 = 0;
21046 win6_reg25 = 0;
21047 win7_reg25 = 0;
21048 win0_reg26 = 0;
21049 win1_reg26 = 0;
21050 win2_reg26 = 0;
21051 win3_reg26 = 0;
21052 win4_reg26 = 0;
21053 win5_reg26 = 0;
21054 win6_reg26 = 0;
21055 win7_reg26 = 0;
21056 win0_reg27 = 0;
21057 win1_reg27 = 0;
21058 win2_reg27 = 0;
21059 win3_reg27 = 0;
21060 win4_reg27 = 0;
21061 win5_reg27 = 0;
21062 win6_reg27 = 0;
21063 win7_reg27 = 0;
21064 win0_reg28 = 0;
21065 win1_reg28 = 0;
21066 win2_reg28 = 0;
21067 win3_reg28 = 0;
21068 win4_reg28 = 0;
21069 win5_reg28 = 0;
21070 win6_reg28 = 0;
21071 win7_reg28 = 0;
21072 win0_reg29 = 0;
21073 win1_reg29 = 0;
21074 win2_reg29 = 0;
21075 win3_reg29 = 0;
21076 win4_reg29 = 0;
21077 win5_reg29 = 0;
21078 win6_reg29 = 0;
21079 win7_reg29 = 0;
21080 win0_reg30 = 0;
21081 win1_reg30 = 0;
21082 win2_reg30 = 0;
21083 win3_reg30 = 0;
21084 win4_reg30 = 0;
21085 win5_reg30 = 0;
21086 win6_reg30 = 0;
21087 win7_reg30 = 0;
21088 win0_reg31 = 0;
21089 win1_reg31 = 0;
21090 win2_reg31 = 0;
21091 win3_reg31 = 0;
21092 win4_reg31 = 0;
21093 win5_reg31 = 0;
21094 win6_reg31 = 0;
21095 win7_reg31 = 0;
21096
21097 // Global registers
21098 th_gl = `POR_GL;
21099 gl0_reg0 = 0;
21100 gl1_reg0 = 0;
21101 gl2_reg0 = 0;
21102 gl3_reg0 = 0;
21103 gl0_reg1 = 0;
21104 gl1_reg1 = 0;
21105 gl2_reg1 = 0;
21106 gl3_reg1 = 0;
21107 gl0_reg2 = 0;
21108 gl1_reg2 = 0;
21109 gl2_reg2 = 0;
21110 gl3_reg2 = 0;
21111 gl0_reg3 = 0;
21112 gl1_reg3 = 0;
21113 gl2_reg3 = 0;
21114 gl3_reg3 = 0;
21115 gl0_reg4 = 0;
21116 gl1_reg4 = 0;
21117 gl2_reg4 = 0;
21118 gl3_reg4 = 0;
21119 gl0_reg5 = 0;
21120 gl1_reg5 = 0;
21121 gl2_reg5 = 0;
21122 gl3_reg5 = 0;
21123 gl0_reg6 = 0;
21124 gl1_reg6 = 0;
21125 gl2_reg6 = 0;
21126 gl3_reg6 = 0;
21127 gl0_reg7 = 0;
21128 gl1_reg7 = 0;
21129 gl2_reg7 = 0;
21130 gl3_reg7 = 0;
21131
21132 `PR_INFO ("nas", `INFO, "T%0d Init shadow registers.",mytnum);
21133 prev_reg0 = 0;
21134 prev_reg1 = 0;
21135 prev_reg2 = 0;
21136 prev_reg3 = 0;
21137 prev_reg4 = 0;
21138 prev_reg5 = 0;
21139 prev_reg6 = 0;
21140 prev_reg7 = 0;
21141 prev_reg8 = 0;
21142 prev_reg9 = 0;
21143 prev_reg10 = 0;
21144 prev_reg11 = 0;
21145 prev_reg12 = 0;
21146 prev_reg13 = 0;
21147 prev_reg14 = 0;
21148 prev_reg15 = 0;
21149 prev_reg16 = 0;
21150 prev_reg17 = 0;
21151 prev_reg18 = 0;
21152 prev_reg19 = 0;
21153 prev_reg20 = 0;
21154 prev_reg21 = 0;
21155 prev_reg22 = 0;
21156 prev_reg23 = 0;
21157 prev_reg24 = 0;
21158 prev_reg25 = 0;
21159 prev_reg26 = 0;
21160 prev_reg27 = 0;
21161 prev_reg28 = 0;
21162 prev_reg29 = 0;
21163 prev_reg30 = 0;
21164 prev_reg31 = 0;
21165 prev_reg32 = 0;
21166 prev_reg33 = 0;
21167 prev_reg34 = 0;
21168 prev_reg35 = 0;
21169 prev_reg36 = 0;
21170 prev_reg37 = 0;
21171 prev_reg38 = 0;
21172 prev_reg39 = 0;
21173 prev_reg40 = 0;
21174 prev_reg41 = 0;
21175 prev_reg42 = 0;
21176 prev_reg43 = 0;
21177 prev_reg44 = 0;
21178 prev_reg45 = 0;
21179 prev_reg46 = 0;
21180 prev_reg47 = 0;
21181 prev_reg48 = 0;
21182 prev_reg49 = 0;
21183 prev_reg50 = 0;
21184 prev_reg51 = 0;
21185 prev_reg52 = 0;
21186 prev_reg53 = 0;
21187 prev_reg54 = 0;
21188 prev_reg55 = 0;
21189 prev_reg56 = 0;
21190 prev_reg57 = 0;
21191 prev_reg58 = 0;
21192 prev_reg59 = 0;
21193 prev_reg60 = 0;
21194 prev_reg61 = 0;
21195 prev_reg62 = 0;
21196 prev_reg63 = 0;
21197 prev_reg64 = 0;
21198 prev_reg65 = 0;
21199 prev_reg66 = 0;
21200 prev_reg67 = 0;
21201 prev_reg68 = 0;
21202 prev_reg69 = 0;
21203 prev_reg70 = 0;
21204 prev_reg71 = 0;
21205 prev_reg72 = 0;
21206 prev_reg73 = 0;
21207 prev_reg74 = 0;
21208 prev_reg75 = 0;
21209 prev_reg76 = 0;
21210 prev_reg77 = 0;
21211 prev_reg78 = 0;
21212 prev_reg79 = 0;
21213 prev_reg80 = 0;
21214 prev_reg81 = 0;
21215 prev_reg82 = 0;
21216 prev_reg83 = 0;
21217 prev_reg84 = 0;
21218 prev_reg85 = 0;
21219 prev_reg86 = 0;
21220 prev_reg87 = 0;
21221 prev_reg88 = 0;
21222 prev_reg89 = 0;
21223 prev_reg90 = 0;
21224 prev_reg91 = 0;
21225 prev_reg92 = 0;
21226 prev_reg93 = 0;
21227 prev_reg94 = 0;
21228 prev_reg95 = 0;
21229 prev_reg96 = 0;
21230 prev_reg97 = 0;
21231 prev_reg98 = 0;
21232 prev_reg99 = 0;
21233 prev_reg100 = 0;
21234 prev_reg101 = 0;
21235 prev_reg102 = 0;
21236 prev_reg103 = 0;
21237 prev_reg104 = 0;
21238 prev_reg105 = 0;
21239 prev_reg106 = 0;
21240 prev_reg107 = 0;
21241 prev_reg108 = 0;
21242 prev_reg109 = 0;
21243 prev_reg110 = 0;
21244 prev_reg111 = 0;
21245 prev_reg112 = 0;
21246 prev_reg113 = 0;
21247 prev_reg114 = 0;
21248 prev_reg115 = 0;
21249 prev_reg116 = 0;
21250 prev_reg117 = 0;
21251 prev_reg118 = 0;
21252 prev_reg119 = 0;
21253 prev_reg120 = 0;
21254 prev_reg121 = 0;
21255 prev_reg122 = 0;
21256 prev_reg123 = 0;
21257 prev_reg124 = 0;
21258 prev_reg125 = 0;
21259 prev_reg126 = 0;
21260 prev_reg127 = 0;
21261 prev_reg128 = 0;
21262 prev_reg129 = 0;
21263 prev_reg130 = 0;
21264 prev_reg131 = 0;
21265 prev_reg132 = 0;
21266 prev_reg133 = 0;
21267 prev_reg134 = 0;
21268 prev_reg135 = 0;
21269 prev_reg136 = 0;
21270 prev_reg137 = 0;
21271 prev_reg138 = 0;
21272 prev_reg139 = 0;
21273 prev_reg140 = 0;
21274 prev_reg141 = 0;
21275 prev_reg142 = 0;
21276 prev_reg143 = 0;
21277 prev_reg144 = 0;
21278 prev_reg145 = 0;
21279 prev_reg146 = 0;
21280 prev_reg147 = 0;
21281 prev_reg148 = 0;
21282 prev_reg149 = 0;
21283 prev_reg150 = 0;
21284 prev_reg151 = 0;
21285 prev_reg152 = 0;
21286 prev_reg153 = 0;
21287 prev_reg154 = 0;
21288 prev_reg155 = 0;
21289 prev_reg156 = 0;
21290 prev_reg157 = 0;
21291 prev_reg158 = 0;
21292 prev_reg159 = 0;
21293 prev_reg160 = 0;
21294 prev_reg161 = 0;
21295 prev_reg162 = 0;
21296 prev_reg163 = 0;
21297 prev_reg164 = 0;
21298 prev_reg165 = 0;
21299 prev_reg166 = 0;
21300 prev_reg167 = 0;
21301 prev_reg168 = 0;
21302 prev_reg169 = 0;
21303 prev_reg170 = 0;
21304 prev_reg171 = 0;
21305 prev_reg172 = 0;
21306 prev_reg173 = 0;
21307 prev_reg174 = 0;
21308 prev_reg175 = 0;
21309 prev_reg176 = 0;
21310 prev_reg177 = 0;
21311 prev_reg178 = 0;
21312 prev_reg179 = 0;
21313 prev_reg180 = 0;
21314 prev_reg181 = 0;
21315 prev_reg182 = 0;
21316 prev_reg183 = 0;
21317 prev_reg184 = 0;
21318 prev_reg185 = 0;
21319 prev_reg186 = 0;
21320 prev_reg187 = 0;
21321 prev_reg188 = 0;
21322 prev_reg189 = 0;
21323 prev_reg190 = 0;
21324 prev_reg191 = 0;
21325 prev_reg192 = 0;
21326 prev_reg193 = 0;
21327 prev_reg194 = 0;
21328 prev_reg195 = 0;
21329 prev_reg196 = 0;
21330 prev_reg197 = 0;
21331 prev_reg198 = 0;
21332 prev_reg199 = 0;
21333 prev_reg200 = 0;
21334 prev_reg201 = 0;
21335 prev_reg202 = 0;
21336 prev_reg203 = 0;
21337 prev_reg204 = 0;
21338 prev_reg205 = 0;
21339 prev_reg206 = 0;
21340 prev_reg207 = 0;
21341 prev_reg208 = 0;
21342 prev_reg209 = 0;
21343 prev_reg210 = 0;
21344 prev_reg211 = 0;
21345 prev_reg212 = 0;
21346 prev_reg213 = 0;
21347 prev_reg214 = 0;
21348 prev_reg215 = 0;
21349 prev_reg216 = 0;
21350 prev_reg217 = 0;
21351 prev_reg218 = 0;
21352 prev_reg219 = 0;
21353 prev_reg220 = 0;
21354 prev_reg221 = 0;
21355 prev_reg222 = 0;
21356 prev_reg223 = 0;
21357 prev_reg224 = 0;
21358 prev_reg225 = 0;
21359 prev_reg226 = 0;
21360 prev_reg227 = 0;
21361 prev_reg228 = 0;
21362 prev_reg229 = 0;
21363 prev_reg230 = 0;
21364 prev_reg231 = 0;
21365 prev_reg232 = 0;
21366 prev_reg233 = 0;
21367 prev_reg234 = 0;
21368 prev_reg235 = 0;
21369 prev_reg236 = 0;
21370 prev_reg237 = 0;
21371 prev_reg238 = 0;
21372 prev_reg239 = 0;
21373 prev_reg240 = 0;
21374 prev_reg241 = 0;
21375 prev_reg242 = 0;
21376 prev_reg243 = 0;
21377 prev_reg244 = 0;
21378 prev_reg245 = 0;
21379 prev_reg246 = 0;
21380 prev_reg247 = 0;
21381 prev_reg248 = 0;
21382 prev_reg249 = 0;
21383 prev_reg250 = 0;
21384 prev_reg251 = 0;
21385 prev_reg252 = 0;
21386 prev_reg253 = 0;
21387 prev_reg254 = 0;
21388 prev_reg255 = 0;
21389
21390 // POR for control registers
21391 write_prev(`FPRS +`CTL_OFFSET,3'h4);
21392 write_prev(`CLEANWIN +`CTL_OFFSET,3'h7);
21393 write_prev(`CANSAVE +`CTL_OFFSET,3'h6);
21394
21395 // POR for FPRS = 0x4
21396 write_prev(`FPRS+`CTL_OFFSET,3'h4);
21397
21398 // POR for PSTATE = 0x14 (PEF, PRIV = 1)
21399 write_prev(`PSTATE + `CTL_OFFSET,'h14);
21400
21401 // POR for HPSTATE = 0x4034 (RED, HPRIV = 1)
21402 write_prev(`HPSTATE + `CTL_OFFSET,'h24);
21403
21404 // POR for TL = = 0x6 [MAXTL]
21405 write_prev(`TL + `CTL_OFFSET,'h6);
21406
21407 // POR for TT6 = = 1
21408 write_prev(`TT6 + `CTL_OFFSET,'h1);
21409
21410 // POR for GL = MAXGL = 3
21411 write_prev(`GL + `CTL_OFFSET,`POR_GL);
21412
21413 // POR for VER = {003e, 0024, 01, 0036, 07}
21414 write_prev(`VER + `CTL_OFFSET,64'h003e002410030607);
21415
21416 // POR for *_cmpr registers is INT_DIS = 1
21417 write_prev(`TICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
21418 write_prev(`STICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
21419 write_prev(`HSTICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
21420
21421 // Need to define so that 1st instruction will print correctly
21422 write_prev(`PC+`CTL_OFFSET,`POR_PC);
21423
21424 first_op = 1;
21425 pc_last = `BAD_PC;
21426
21427 end // }
21428endtask
21429
21430//----------------------------------------------------------
21431//----------------------------------------------------------
21432 `else // GATESIM
21433
21434// Watch for Good/Bad trap
21435
21436wire [5:0] mytnum = (mycid*8)+mytid;
21437wire mytg = mytid >> 2;
21438integer junk;
21439reg nas_pipe_enable;
21440
21441integer inst_count;
21442
21443 // Delimiter changes whether flat or hierarchical netlist
21444 `ifdef GATES_FLAT
21445 wire myclk = tb_top.cpu.spc3.gclk;
21446 wire dec_inst_valid_m = mytg ? tb_top.cpu.spc3.dec_inst_valid_m[1] : tb_top.cpu.spc3.dec_inst_valid_m[0];
21447 wire [1:0] dec_tid_m = mytg ? tb_top.cpu.spc3.dec_tid1_m : tb_top.cpu.spc3.dec_tid0_m;
21448 wire dec_flush_b = mytg ? tb_top.cpu.spc3.dec_flush_b[1] : tb_top.cpu.spc3.dec_flush_b[0];
21449 wire tlu_flush_ifu = tb_top.cpu.spc3.tlu_flush_ifu[mytid];
21450 wire [47:0] pc_d = mytg ? {tb_top.cpu.spc3.tlu_pc_1_d[47:2],2'b0} : {tb_top.cpu.spc3.tlu_pc_0_d[47:2],2'b0};
21451 wire [31:0] op_d = mytg ? tb_top.cpu.spc3.dec_inst1_d[31:0] : tb_top.cpu.spc3.dec_inst0_d[31:0];
21452 `else
21453 wire myclk = tb_top.cpu.spc3.gclk;
21454 wire dec_inst_valid_m = mytg ? tb_top.cpu.spc3.dec_inst_valid_m[1] : tb_top.cpu.spc3.dec_inst_valid_m[0];
21455 wire [1:0] dec_tid_m = mytg ? tb_top.cpu.spc3.dec_tid1_m : tb_top.cpu.spc3.dec_tid0_m;
21456 wire dec_flush_b = mytg ? tb_top.cpu.spc3.dec_flush_b[1] : tb_top.cpu.spc3.dec_flush_b[0];
21457 wire tlu_flush_ifu = tb_top.cpu.spc3.tlu_flush_ifu[mytid];
21458 wire [47:0] pc_d = mytg ? {tb_top.cpu.spc3.tlu_pc_1_d[47:2],2'b0} : {tb_top.cpu.spc3.tlu_pc_0_d[47:2],2'b0};
21459 wire [31:0] op_d = mytg ? tb_top.cpu.spc3.dec_inst1_d[31:0] : tb_top.cpu.spc3.dec_inst0_d[31:0];
21460 `endif
21461
21462 reg dec_inst_valid_b;
21463 reg [1:0] dec_tid_b;
21464
21465 reg inst_valid_w;
21466 reg inst_valid_fx4;
21467 reg inst_valid_fx5;
21468 reg inst_valid_fb;
21469 reg inst_valid_fw;
21470 reg inst_valid_fw1;
21471 reg inst_valid_fw2;
21472 reg [47:0] pc_e;
21473 reg [47:0] pc_m;
21474 reg [47:0] pc_b;
21475 reg [47:0] pc_w;
21476 reg [47:0] pc_fx4;
21477 reg [47:0] pc_fx5;
21478 reg [47:0] pc_fb;
21479 reg [47:0] pc_fw;
21480 reg [47:0] pc_fw1;
21481 reg [47:0] pc_fw2;
21482 reg [31:0] op_e;
21483 reg [31:0] op_m;
21484 reg [31:0] op_b;
21485 reg [31:0] op_w;
21486 reg [31:0] op_fx4;
21487 reg [31:0] op_fx5;
21488 reg [31:0] op_fb;
21489 reg [31:0] op_fw;
21490 reg [31:0] op_fw1;
21491 reg [31:0] op_fw2;
21492
21493 wire inst_valid_b = dec_inst_valid_b && (dec_tid_b==mytid[1:0]) && !(dec_flush_b || tlu_flush_ifu);
21494
21495initial begin // {
21496 inst_count = 1;
21497 nas_pipe_enable = 1;
21498end // }
21499
21500
21501always @ (posedge myclk) begin // {
21502
21503 dec_inst_valid_b <= dec_inst_valid_m;
21504 dec_tid_b <= dec_tid_m;
21505 op_e <= op_d;
21506 op_m <= op_e;
21507 op_b <= op_m;
21508 op_w <= op_b;
21509 op_fx4 <= op_w;
21510 op_fx5 <= op_fx4;
21511 op_fb <= op_fx5;
21512 op_fw <= op_fb;
21513 op_fw1 <= op_fw;
21514 op_fw2 <= op_fw1;
21515 pc_e <= pc_d;
21516 pc_m <= pc_e;
21517 pc_b <= pc_m;
21518 pc_w <= pc_b;
21519 pc_fx4 <= pc_w;
21520 pc_fx5 <= pc_fx4;
21521 pc_fb <= pc_fx5;
21522 pc_fw <= pc_fb;
21523 pc_fw1 <= pc_fw;
21524 pc_fw2 <= pc_fw1;
21525 inst_valid_w <= inst_valid_b;
21526 inst_valid_fx4 <= inst_valid_w;
21527 inst_valid_fx5 <= inst_valid_fx4;
21528 inst_valid_fb <= inst_valid_fx5;
21529 inst_valid_fw <= inst_valid_fb;
21530 inst_valid_fw1 <= inst_valid_fw;
21531 inst_valid_fw2 <= inst_valid_fw1;
21532
21533 if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable) begin // {
21534
21535 if (inst_valid_fw2) begin // {
21536
21537 // Print PC/opcode for debugging
21538 `PR_NORMAL ("nas", `NORMAL, "@%0d #%0d T%0d %h [%h]", $time, inst_count, mytnum, pc_fw2, op_fw2);
21539 inst_count = inst_count + 1;
21540
21541 //----------
21542 // End detection for GateSim runs
21543 for (junk=0;junk<`PARGS.bad_trap_count;junk=junk+1) begin // {
21544 if (({16'b0,pc_fw2}&`PC_MASK)===(`PARGS.bad_trap_addr[junk]&`PC_MASK)) begin // {
21545 `PR_ERROR ("nas",`ERROR, "T%0d reached Bad Trap [GATESIM]", mytnum);
21546 nas_pipe_enable = 1'b0;
21547 end //}
21548 end //}
21549 for (junk=0;junk<`PARGS.good_trap_count;junk=junk+1) begin // {
21550 if (({16'b0,pc_fw2}&`PC_MASK)===(`PARGS.good_trap_addr[junk]&`PC_MASK)) begin // {
21551 `TOP.finished_tids[mytnum] = 1'b1;
21552 `PARGS.th_check_enable[mytnum] = 1'b0;
21553 nas_pipe_enable = 1'b0;
21554 `PR_NORMAL ("nas", `NORMAL, "T%0d reached Good Trap. Disabling checking for thread %0d [GATESIM]", mytnum,mytnum);
21555 end //}
21556 end //}
21557
21558 end // }
21559 end // }
21560
21561end //}
21562
21563
21564`endif
21565
21566endmodule
21567//----------------------------------------------------------
21568//----------------------------------------------------------
21569
21570`endif
21571
21572
21573`ifdef CORE_4
21574
21575
21576module nas_pipe4 (
21577 mycid,
21578 mytid,
21579
21580 opcode,
21581 PC_reg,
21582 Y_reg,
21583 CCR_reg,
21584 FPRS_reg,
21585 FSR_reg,
21586 ASI_reg,
21587 GSR_reg,
21588 TICK_CMPR_reg,
21589 STICK_CMPR_reg,
21590 HSTICK_CMPR_reg,
21591 PSTATE_reg,
21592 TL_reg,
21593 PIL_reg,
21594 TBA_reg,
21595 VER_reg,
21596 CWP_reg,
21597 CANSAVE_reg,
21598 CANRESTORE_reg,
21599 OTHERWIN_reg,
21600 WSTATE_reg,
21601 CLEANWIN_reg,
21602 SOFTINT_reg,
21603 rd_SOFTINT_reg,
21604 INTR_RECEIVE_reg,
21605 GL_reg,
21606 HPSTATE_reg,
21607 HTBA_reg,
21608 HINTP_reg,
21609
21610 CTXT_PRIM_0_reg,
21611 CTXT_SEC_0_reg,
21612 CTXT_PRIM_1_reg,
21613 CTXT_SEC_1_reg,
21614 LSU_CONTROL_reg,
21615 I_TAG_ACC_reg,
21616 D_TAG_ACC_reg,
21617 WATCHPOINT_ADDR_reg,
21618 DSFAR_reg,
21619
21620 Trap_Entry_1,
21621 Trap_Entry_2,
21622 Trap_Entry_3,
21623 Trap_Entry_4,
21624 Trap_Entry_5,
21625 Trap_Entry_6,
21626
21627 exu_valid,
21628
21629 imul_valid,
21630
21631 frf_w2_valid,
21632 frf_w1_valid,
21633 frf_w1_tid,
21634 frf_w2_tid,
21635 frf_w1_addr,
21636 frf_w2_addr,
21637
21638 asi_valid,
21639 asi_in_progress,
21640
21641 fp_valid,
21642
21643 idiv_valid,
21644
21645 fdiv_valid,
21646
21647 lsu_valid,
21648
21649 tlu_valid
21650);
21651
21652//----------------------------------------------------------
21653input [2:0] mycid;
21654input [2:0] mytid;
21655
21656input [31:0] opcode;
21657input [47:0] PC_reg;
21658input [31:0] Y_reg;
21659input [7:0] CCR_reg;
21660input [2:0] FPRS_reg;
21661input [27:0] FSR_reg;
21662input [7:0] ASI_reg;
21663input [42:0] GSR_reg;
21664input [71:0] TICK_CMPR_reg;
21665input [71:0] STICK_CMPR_reg;
21666input [71:0] HSTICK_CMPR_reg;
21667input [12:0] PSTATE_reg;
21668input [2:0] TL_reg;
21669input [3:0] PIL_reg;
21670input [32:0] TBA_reg;
21671input [63:0] VER_reg;
21672input [2:0] CWP_reg;
21673input [2:0] CANSAVE_reg;
21674input [2:0] CANRESTORE_reg;
21675input [2:0] OTHERWIN_reg;
21676input [5:0] WSTATE_reg;
21677input [2:0] CLEANWIN_reg;
21678input [16:0] SOFTINT_reg;
21679input [16:0] rd_SOFTINT_reg;
21680input [63:0] INTR_RECEIVE_reg;
21681input [1:0] GL_reg;
21682input [12:0] HPSTATE_reg;
21683input [33:0] HTBA_reg;
21684input HINTP_reg;
21685
21686input [63:0] CTXT_PRIM_0_reg;
21687input [63:0] CTXT_SEC_0_reg;
21688input [63:0] CTXT_PRIM_1_reg;
21689input [63:0] CTXT_SEC_1_reg;
21690input [63:0] LSU_CONTROL_reg;
21691input [63:0] I_TAG_ACC_reg;
21692input [63:0] D_TAG_ACC_reg;
21693input [63:0] WATCHPOINT_ADDR_reg;
21694input [47:0] DSFAR_reg;
21695
21696input [151:0] Trap_Entry_1;
21697input [151:0] Trap_Entry_2;
21698input [151:0] Trap_Entry_3;
21699input [151:0] Trap_Entry_4;
21700input [151:0] Trap_Entry_5;
21701input [151:0] Trap_Entry_6;
21702
21703input exu_valid;
21704
21705input imul_valid;
21706
21707input [1:0] frf_w2_valid;
21708input [2:0] frf_w2_tid;
21709input [4:0] frf_w2_addr;
21710
21711input [1:0] frf_w1_valid;
21712input [2:0] frf_w1_tid;
21713input [4:0] frf_w1_addr;
21714
21715input asi_valid; // ASI/ASR/PR writes done ..
21716input asi_in_progress; // ASI/ASR/PR in progess
21717
21718input fp_valid;
21719
21720input idiv_valid;
21721
21722input fdiv_valid;
21723
21724input lsu_valid;
21725
21726input tlu_valid;
21727
21728`ifndef GATESIM
21729
21730//----------------------------------------------------------
21731// Register assignments
21732//----------------------------------------------------------
21733`include "nas_regs.v"
21734//----------------------------------------------------------
21735
21736wire exu_complete;
21737wire imul_complete;
21738wire idiv_complete;
21739wire tlu_complete;
21740wire fp_complete;
21741wire fdiv_complete;
21742wire lsu_complete;
21743wire asi_complete;
21744wire [7:0] complete_w;
21745reg [7:0] complete_fx4;
21746reg [7:0] complete_fx5;
21747reg [7:0] complete_fb;
21748reg [7:0] complete_fw;
21749reg [7:0] complete_fw1;
21750reg [7:0] complete_fw2;
21751
21752`ifndef EMUL_TL
21753// delta_* = {type(2bits),win(3bits),regnum(8bits),value(64bits)}
21754reg [`DELTA_WIDTH:0] delta_fx4 [0:(`MAX_INDEX)];
21755reg [`DELTA_WIDTH:0] delta_fx5 [0:(`MAX_INDEX)];
21756reg [`DELTA_WIDTH:0] delta_fb [0:(`MAX_INDEX)];
21757reg [`DELTA_WIDTH:0] delta_fw [0:(`MAX_INDEX)];
21758reg [`DELTA_WIDTH:0] delta_fw1 [0:(`MAX_INDEX)];
21759reg [`DELTA_WIDTH:0] delta_fw2 [0:(`MAX_INDEX)];
21760reg [`DELTA_WIDTH:0] delta_prev [0:(`MAX_INDEX)];
21761`endif
21762
21763reg [2:0] cwp_fx4;
21764reg [2:0] cwp_fx5;
21765reg [2:0] cwp_fb;
21766reg [2:0] cwp_fw;
21767reg [2:0] cwp_fw1;
21768reg [2:0] cwp_fw2;
21769reg [2:0] cwp_last;
21770
21771
21772// need to change in several places in this file
21773reg [63:0] prev_reg0; // includes G,W,C,F registers
21774reg [63:0] prev_reg1; // includes G,W,C,F registers
21775reg [63:0] prev_reg2; // includes G,W,C,F registers
21776reg [63:0] prev_reg3; // includes G,W,C,F registers
21777reg [63:0] prev_reg4; // includes G,W,C,F registers
21778reg [63:0] prev_reg5; // includes G,W,C,F registers
21779reg [63:0] prev_reg6; // includes G,W,C,F registers
21780reg [63:0] prev_reg7; // includes G,W,C,F registers
21781reg [63:0] prev_reg8; // includes G,W,C,F registers
21782reg [63:0] prev_reg9; // includes G,W,C,F registers
21783reg [63:0] prev_reg10; // includes G,W,C,F registers
21784reg [63:0] prev_reg11; // includes G,W,C,F registers
21785reg [63:0] prev_reg12; // includes G,W,C,F registers
21786reg [63:0] prev_reg13; // includes G,W,C,F registers
21787reg [63:0] prev_reg14; // includes G,W,C,F registers
21788reg [63:0] prev_reg15; // includes G,W,C,F registers
21789reg [63:0] prev_reg16; // includes G,W,C,F registers
21790reg [63:0] prev_reg17; // includes G,W,C,F registers
21791reg [63:0] prev_reg18; // includes G,W,C,F registers
21792reg [63:0] prev_reg19; // includes G,W,C,F registers
21793reg [63:0] prev_reg20; // includes G,W,C,F registers
21794reg [63:0] prev_reg21; // includes G,W,C,F registers
21795reg [63:0] prev_reg22; // includes G,W,C,F registers
21796reg [63:0] prev_reg23; // includes G,W,C,F registers
21797reg [63:0] prev_reg24; // includes G,W,C,F registers
21798reg [63:0] prev_reg25; // includes G,W,C,F registers
21799reg [63:0] prev_reg26; // includes G,W,C,F registers
21800reg [63:0] prev_reg27; // includes G,W,C,F registers
21801reg [63:0] prev_reg28; // includes G,W,C,F registers
21802reg [63:0] prev_reg29; // includes G,W,C,F registers
21803reg [63:0] prev_reg30; // includes G,W,C,F registers
21804reg [63:0] prev_reg31; // includes G,W,C,F registers
21805reg [63:0] prev_reg32; // includes G,W,C,F registers
21806reg [63:0] prev_reg33; // includes G,W,C,F registers
21807reg [63:0] prev_reg34; // includes G,W,C,F registers
21808reg [63:0] prev_reg35; // includes G,W,C,F registers
21809reg [63:0] prev_reg36; // includes G,W,C,F registers
21810reg [63:0] prev_reg37; // includes G,W,C,F registers
21811reg [63:0] prev_reg38; // includes G,W,C,F registers
21812reg [63:0] prev_reg39; // includes G,W,C,F registers
21813reg [63:0] prev_reg40; // includes G,W,C,F registers
21814reg [63:0] prev_reg41; // includes G,W,C,F registers
21815reg [63:0] prev_reg42; // includes G,W,C,F registers
21816reg [63:0] prev_reg43; // includes G,W,C,F registers
21817reg [63:0] prev_reg44; // includes G,W,C,F registers
21818reg [63:0] prev_reg45; // includes G,W,C,F registers
21819reg [63:0] prev_reg46; // includes G,W,C,F registers
21820reg [63:0] prev_reg47; // includes G,W,C,F registers
21821reg [63:0] prev_reg48; // includes G,W,C,F registers
21822reg [63:0] prev_reg49; // includes G,W,C,F registers
21823reg [63:0] prev_reg50; // includes G,W,C,F registers
21824reg [63:0] prev_reg51; // includes G,W,C,F registers
21825reg [63:0] prev_reg52; // includes G,W,C,F registers
21826reg [63:0] prev_reg53; // includes G,W,C,F registers
21827reg [63:0] prev_reg54; // includes G,W,C,F registers
21828reg [63:0] prev_reg55; // includes G,W,C,F registers
21829reg [63:0] prev_reg56; // includes G,W,C,F registers
21830reg [63:0] prev_reg57; // includes G,W,C,F registers
21831reg [63:0] prev_reg58; // includes G,W,C,F registers
21832reg [63:0] prev_reg59; // includes G,W,C,F registers
21833reg [63:0] prev_reg60; // includes G,W,C,F registers
21834reg [63:0] prev_reg61; // includes G,W,C,F registers
21835reg [63:0] prev_reg62; // includes G,W,C,F registers
21836reg [63:0] prev_reg63; // includes G,W,C,F registers
21837reg [63:0] prev_reg64; // includes G,W,C,F registers
21838reg [63:0] prev_reg65; // includes G,W,C,F registers
21839reg [63:0] prev_reg66; // includes G,W,C,F registers
21840reg [63:0] prev_reg67; // includes G,W,C,F registers
21841reg [63:0] prev_reg68; // includes G,W,C,F registers
21842reg [63:0] prev_reg69; // includes G,W,C,F registers
21843reg [63:0] prev_reg70; // includes G,W,C,F registers
21844reg [63:0] prev_reg71; // includes G,W,C,F registers
21845reg [63:0] prev_reg72; // includes G,W,C,F registers
21846reg [63:0] prev_reg73; // includes G,W,C,F registers
21847reg [63:0] prev_reg74; // includes G,W,C,F registers
21848reg [63:0] prev_reg75; // includes G,W,C,F registers
21849reg [63:0] prev_reg76; // includes G,W,C,F registers
21850reg [63:0] prev_reg77; // includes G,W,C,F registers
21851reg [63:0] prev_reg78; // includes G,W,C,F registers
21852reg [63:0] prev_reg79; // includes G,W,C,F registers
21853reg [63:0] prev_reg80; // includes G,W,C,F registers
21854reg [63:0] prev_reg81; // includes G,W,C,F registers
21855reg [63:0] prev_reg82; // includes G,W,C,F registers
21856reg [63:0] prev_reg83; // includes G,W,C,F registers
21857reg [63:0] prev_reg84; // includes G,W,C,F registers
21858reg [63:0] prev_reg85; // includes G,W,C,F registers
21859reg [63:0] prev_reg86; // includes G,W,C,F registers
21860reg [63:0] prev_reg87; // includes G,W,C,F registers
21861reg [63:0] prev_reg88; // includes G,W,C,F registers
21862reg [63:0] prev_reg89; // includes G,W,C,F registers
21863reg [63:0] prev_reg90; // includes G,W,C,F registers
21864reg [63:0] prev_reg91; // includes G,W,C,F registers
21865reg [63:0] prev_reg92; // includes G,W,C,F registers
21866reg [63:0] prev_reg93; // includes G,W,C,F registers
21867reg [63:0] prev_reg94; // includes G,W,C,F registers
21868reg [63:0] prev_reg95; // includes G,W,C,F registers
21869reg [63:0] prev_reg96; // includes G,W,C,F registers
21870reg [63:0] prev_reg97; // includes G,W,C,F registers
21871reg [63:0] prev_reg98; // includes G,W,C,F registers
21872reg [63:0] prev_reg99; // includes G,W,C,F registers
21873reg [63:0] prev_reg100; // includes G,W,C,F registers
21874reg [63:0] prev_reg101; // includes G,W,C,F registers
21875reg [63:0] prev_reg102; // includes G,W,C,F registers
21876reg [63:0] prev_reg103; // includes G,W,C,F registers
21877reg [63:0] prev_reg104; // includes G,W,C,F registers
21878reg [63:0] prev_reg105; // includes G,W,C,F registers
21879reg [63:0] prev_reg106; // includes G,W,C,F registers
21880reg [63:0] prev_reg107; // includes G,W,C,F registers
21881reg [63:0] prev_reg108; // includes G,W,C,F registers
21882reg [63:0] prev_reg109; // includes G,W,C,F registers
21883reg [63:0] prev_reg110; // includes G,W,C,F registers
21884reg [63:0] prev_reg111; // includes G,W,C,F registers
21885reg [63:0] prev_reg112; // includes G,W,C,F registers
21886reg [63:0] prev_reg113; // includes G,W,C,F registers
21887reg [63:0] prev_reg114; // includes G,W,C,F registers
21888reg [63:0] prev_reg115; // includes G,W,C,F registers
21889reg [63:0] prev_reg116; // includes G,W,C,F registers
21890reg [63:0] prev_reg117; // includes G,W,C,F registers
21891reg [63:0] prev_reg118; // includes G,W,C,F registers
21892reg [63:0] prev_reg119; // includes G,W,C,F registers
21893reg [63:0] prev_reg120; // includes G,W,C,F registers
21894reg [63:0] prev_reg121; // includes G,W,C,F registers
21895reg [63:0] prev_reg122; // includes G,W,C,F registers
21896reg [63:0] prev_reg123; // includes G,W,C,F registers
21897reg [63:0] prev_reg124; // includes G,W,C,F registers
21898reg [63:0] prev_reg125; // includes G,W,C,F registers
21899reg [63:0] prev_reg126; // includes G,W,C,F registers
21900reg [63:0] prev_reg127; // includes G,W,C,F registers
21901reg [63:0] prev_reg128; // includes G,W,C,F registers
21902reg [63:0] prev_reg129; // includes G,W,C,F registers
21903reg [63:0] prev_reg130; // includes G,W,C,F registers
21904reg [63:0] prev_reg131; // includes G,W,C,F registers
21905reg [63:0] prev_reg132; // includes G,W,C,F registers
21906reg [63:0] prev_reg133; // includes G,W,C,F registers
21907reg [63:0] prev_reg134; // includes G,W,C,F registers
21908reg [63:0] prev_reg135; // includes G,W,C,F registers
21909reg [63:0] prev_reg136; // includes G,W,C,F registers
21910reg [63:0] prev_reg137; // includes G,W,C,F registers
21911reg [63:0] prev_reg138; // includes G,W,C,F registers
21912reg [63:0] prev_reg139; // includes G,W,C,F registers
21913reg [63:0] prev_reg140; // includes G,W,C,F registers
21914reg [63:0] prev_reg141; // includes G,W,C,F registers
21915reg [63:0] prev_reg142; // includes G,W,C,F registers
21916reg [63:0] prev_reg143; // includes G,W,C,F registers
21917reg [63:0] prev_reg144; // includes G,W,C,F registers
21918reg [63:0] prev_reg145; // includes G,W,C,F registers
21919reg [63:0] prev_reg146; // includes G,W,C,F registers
21920reg [63:0] prev_reg147; // includes G,W,C,F registers
21921reg [63:0] prev_reg148; // includes G,W,C,F registers
21922reg [63:0] prev_reg149; // includes G,W,C,F registers
21923reg [63:0] prev_reg150; // includes G,W,C,F registers
21924reg [63:0] prev_reg151; // includes G,W,C,F registers
21925reg [63:0] prev_reg152; // includes G,W,C,F registers
21926reg [63:0] prev_reg153; // includes G,W,C,F registers
21927reg [63:0] prev_reg154; // includes G,W,C,F registers
21928reg [63:0] prev_reg155; // includes G,W,C,F registers
21929reg [63:0] prev_reg156; // includes G,W,C,F registers
21930reg [63:0] prev_reg157; // includes G,W,C,F registers
21931reg [63:0] prev_reg158; // includes G,W,C,F registers
21932reg [63:0] prev_reg159; // includes G,W,C,F registers
21933reg [63:0] prev_reg160; // includes G,W,C,F registers
21934reg [63:0] prev_reg161; // includes G,W,C,F registers
21935reg [63:0] prev_reg162; // includes G,W,C,F registers
21936reg [63:0] prev_reg163; // includes G,W,C,F registers
21937reg [63:0] prev_reg164; // includes G,W,C,F registers
21938reg [63:0] prev_reg165; // includes G,W,C,F registers
21939reg [63:0] prev_reg166; // includes G,W,C,F registers
21940reg [63:0] prev_reg167; // includes G,W,C,F registers
21941reg [63:0] prev_reg168; // includes G,W,C,F registers
21942reg [63:0] prev_reg169; // includes G,W,C,F registers
21943reg [63:0] prev_reg170; // includes G,W,C,F registers
21944reg [63:0] prev_reg171; // includes G,W,C,F registers
21945reg [63:0] prev_reg172; // includes G,W,C,F registers
21946reg [63:0] prev_reg173; // includes G,W,C,F registers
21947reg [63:0] prev_reg174; // includes G,W,C,F registers
21948reg [63:0] prev_reg175; // includes G,W,C,F registers
21949reg [63:0] prev_reg176; // includes G,W,C,F registers
21950reg [63:0] prev_reg177; // includes G,W,C,F registers
21951reg [63:0] prev_reg178; // includes G,W,C,F registers
21952reg [63:0] prev_reg179; // includes G,W,C,F registers
21953reg [63:0] prev_reg180; // includes G,W,C,F registers
21954reg [63:0] prev_reg181; // includes G,W,C,F registers
21955reg [63:0] prev_reg182; // includes G,W,C,F registers
21956reg [63:0] prev_reg183; // includes G,W,C,F registers
21957reg [63:0] prev_reg184; // includes G,W,C,F registers
21958reg [63:0] prev_reg185; // includes G,W,C,F registers
21959reg [63:0] prev_reg186; // includes G,W,C,F registers
21960reg [63:0] prev_reg187; // includes G,W,C,F registers
21961reg [63:0] prev_reg188; // includes G,W,C,F registers
21962reg [63:0] prev_reg189; // includes G,W,C,F registers
21963reg [63:0] prev_reg190; // includes G,W,C,F registers
21964reg [63:0] prev_reg191; // includes G,W,C,F registers
21965reg [63:0] prev_reg192; // includes G,W,C,F registers
21966reg [63:0] prev_reg193; // includes G,W,C,F registers
21967reg [63:0] prev_reg194; // includes G,W,C,F registers
21968reg [63:0] prev_reg195; // includes G,W,C,F registers
21969reg [63:0] prev_reg196; // includes G,W,C,F registers
21970reg [63:0] prev_reg197; // includes G,W,C,F registers
21971reg [63:0] prev_reg198; // includes G,W,C,F registers
21972reg [63:0] prev_reg199; // includes G,W,C,F registers
21973reg [63:0] prev_reg200; // includes G,W,C,F registers
21974reg [63:0] prev_reg201; // includes G,W,C,F registers
21975reg [63:0] prev_reg202; // includes G,W,C,F registers
21976reg [63:0] prev_reg203; // includes G,W,C,F registers
21977reg [63:0] prev_reg204; // includes G,W,C,F registers
21978reg [63:0] prev_reg205; // includes G,W,C,F registers
21979reg [63:0] prev_reg206; // includes G,W,C,F registers
21980reg [63:0] prev_reg207; // includes G,W,C,F registers
21981reg [63:0] prev_reg208; // includes G,W,C,F registers
21982reg [63:0] prev_reg209; // includes G,W,C,F registers
21983reg [63:0] prev_reg210; // includes G,W,C,F registers
21984reg [63:0] prev_reg211; // includes G,W,C,F registers
21985reg [63:0] prev_reg212; // includes G,W,C,F registers
21986reg [63:0] prev_reg213; // includes G,W,C,F registers
21987reg [63:0] prev_reg214; // includes G,W,C,F registers
21988reg [63:0] prev_reg215; // includes G,W,C,F registers
21989reg [63:0] prev_reg216; // includes G,W,C,F registers
21990reg [63:0] prev_reg217; // includes G,W,C,F registers
21991reg [63:0] prev_reg218; // includes G,W,C,F registers
21992reg [63:0] prev_reg219; // includes G,W,C,F registers
21993reg [63:0] prev_reg220; // includes G,W,C,F registers
21994reg [63:0] prev_reg221; // includes G,W,C,F registers
21995reg [63:0] prev_reg222; // includes G,W,C,F registers
21996reg [63:0] prev_reg223; // includes G,W,C,F registers
21997reg [63:0] prev_reg224; // includes G,W,C,F registers
21998reg [63:0] prev_reg225; // includes G,W,C,F registers
21999reg [63:0] prev_reg226; // includes G,W,C,F registers
22000reg [63:0] prev_reg227; // includes G,W,C,F registers
22001reg [63:0] prev_reg228; // includes G,W,C,F registers
22002reg [63:0] prev_reg229; // includes G,W,C,F registers
22003reg [63:0] prev_reg230; // includes G,W,C,F registers
22004reg [63:0] prev_reg231; // includes G,W,C,F registers
22005reg [63:0] prev_reg232; // includes G,W,C,F registers
22006reg [63:0] prev_reg233; // includes G,W,C,F registers
22007reg [63:0] prev_reg234; // includes G,W,C,F registers
22008reg [63:0] prev_reg235; // includes G,W,C,F registers
22009reg [63:0] prev_reg236; // includes G,W,C,F registers
22010reg [63:0] prev_reg237; // includes G,W,C,F registers
22011reg [63:0] prev_reg238; // includes G,W,C,F registers
22012reg [63:0] prev_reg239; // includes G,W,C,F registers
22013reg [63:0] prev_reg240; // includes G,W,C,F registers
22014reg [63:0] prev_reg241; // includes G,W,C,F registers
22015reg [63:0] prev_reg242; // includes G,W,C,F registers
22016reg [63:0] prev_reg243; // includes G,W,C,F registers
22017reg [63:0] prev_reg244; // includes G,W,C,F registers
22018reg [63:0] prev_reg245; // includes G,W,C,F registers
22019reg [63:0] prev_reg246; // includes G,W,C,F registers
22020reg [63:0] prev_reg247; // includes G,W,C,F registers
22021reg [63:0] prev_reg248; // includes G,W,C,F registers
22022reg [63:0] prev_reg249; // includes G,W,C,F registers
22023reg [63:0] prev_reg250; // includes G,W,C,F registers
22024reg [63:0] prev_reg251; // includes G,W,C,F registers
22025reg [63:0] prev_reg252; // includes G,W,C,F registers
22026reg [63:0] prev_reg253; // includes G,W,C,F registers
22027reg [63:0] prev_reg254; // includes G,W,C,F registers
22028reg [63:0] prev_reg255; // includes G,W,C,F registers
22029
22030reg [1:0] th_gl; // copy of GL_reg
22031
22032reg [63:0] gl0_reg0;
22033reg [63:0] gl1_reg0;
22034reg [63:0] gl2_reg0;
22035reg [63:0] gl3_reg0;
22036reg [63:0] gl0_reg1;
22037reg [63:0] gl1_reg1;
22038reg [63:0] gl2_reg1;
22039reg [63:0] gl3_reg1;
22040reg [63:0] gl0_reg2;
22041reg [63:0] gl1_reg2;
22042reg [63:0] gl2_reg2;
22043reg [63:0] gl3_reg2;
22044reg [63:0] gl0_reg3;
22045reg [63:0] gl1_reg3;
22046reg [63:0] gl2_reg3;
22047reg [63:0] gl3_reg3;
22048reg [63:0] gl0_reg4;
22049reg [63:0] gl1_reg4;
22050reg [63:0] gl2_reg4;
22051reg [63:0] gl3_reg4;
22052reg [63:0] gl0_reg5;
22053reg [63:0] gl1_reg5;
22054reg [63:0] gl2_reg5;
22055reg [63:0] gl3_reg5;
22056reg [63:0] gl0_reg6;
22057reg [63:0] gl1_reg6;
22058reg [63:0] gl2_reg6;
22059reg [63:0] gl3_reg6;
22060reg [63:0] gl0_reg7;
22061reg [63:0] gl1_reg7;
22062reg [63:0] gl2_reg7;
22063reg [63:0] gl3_reg7;
22064
22065reg [63:0] win0_reg8;
22066reg [63:0] win1_reg8;
22067reg [63:0] win2_reg8;
22068reg [63:0] win3_reg8;
22069reg [63:0] win4_reg8;
22070reg [63:0] win5_reg8;
22071reg [63:0] win6_reg8;
22072reg [63:0] win7_reg8;
22073reg [63:0] win0_reg9;
22074reg [63:0] win1_reg9;
22075reg [63:0] win2_reg9;
22076reg [63:0] win3_reg9;
22077reg [63:0] win4_reg9;
22078reg [63:0] win5_reg9;
22079reg [63:0] win6_reg9;
22080reg [63:0] win7_reg9;
22081reg [63:0] win0_reg10;
22082reg [63:0] win1_reg10;
22083reg [63:0] win2_reg10;
22084reg [63:0] win3_reg10;
22085reg [63:0] win4_reg10;
22086reg [63:0] win5_reg10;
22087reg [63:0] win6_reg10;
22088reg [63:0] win7_reg10;
22089reg [63:0] win0_reg11;
22090reg [63:0] win1_reg11;
22091reg [63:0] win2_reg11;
22092reg [63:0] win3_reg11;
22093reg [63:0] win4_reg11;
22094reg [63:0] win5_reg11;
22095reg [63:0] win6_reg11;
22096reg [63:0] win7_reg11;
22097reg [63:0] win0_reg12;
22098reg [63:0] win1_reg12;
22099reg [63:0] win2_reg12;
22100reg [63:0] win3_reg12;
22101reg [63:0] win4_reg12;
22102reg [63:0] win5_reg12;
22103reg [63:0] win6_reg12;
22104reg [63:0] win7_reg12;
22105reg [63:0] win0_reg13;
22106reg [63:0] win1_reg13;
22107reg [63:0] win2_reg13;
22108reg [63:0] win3_reg13;
22109reg [63:0] win4_reg13;
22110reg [63:0] win5_reg13;
22111reg [63:0] win6_reg13;
22112reg [63:0] win7_reg13;
22113reg [63:0] win0_reg14;
22114reg [63:0] win1_reg14;
22115reg [63:0] win2_reg14;
22116reg [63:0] win3_reg14;
22117reg [63:0] win4_reg14;
22118reg [63:0] win5_reg14;
22119reg [63:0] win6_reg14;
22120reg [63:0] win7_reg14;
22121reg [63:0] win0_reg15;
22122reg [63:0] win1_reg15;
22123reg [63:0] win2_reg15;
22124reg [63:0] win3_reg15;
22125reg [63:0] win4_reg15;
22126reg [63:0] win5_reg15;
22127reg [63:0] win6_reg15;
22128reg [63:0] win7_reg15;
22129reg [63:0] win0_reg16;
22130reg [63:0] win1_reg16;
22131reg [63:0] win2_reg16;
22132reg [63:0] win3_reg16;
22133reg [63:0] win4_reg16;
22134reg [63:0] win5_reg16;
22135reg [63:0] win6_reg16;
22136reg [63:0] win7_reg16;
22137reg [63:0] win0_reg17;
22138reg [63:0] win1_reg17;
22139reg [63:0] win2_reg17;
22140reg [63:0] win3_reg17;
22141reg [63:0] win4_reg17;
22142reg [63:0] win5_reg17;
22143reg [63:0] win6_reg17;
22144reg [63:0] win7_reg17;
22145reg [63:0] win0_reg18;
22146reg [63:0] win1_reg18;
22147reg [63:0] win2_reg18;
22148reg [63:0] win3_reg18;
22149reg [63:0] win4_reg18;
22150reg [63:0] win5_reg18;
22151reg [63:0] win6_reg18;
22152reg [63:0] win7_reg18;
22153reg [63:0] win0_reg19;
22154reg [63:0] win1_reg19;
22155reg [63:0] win2_reg19;
22156reg [63:0] win3_reg19;
22157reg [63:0] win4_reg19;
22158reg [63:0] win5_reg19;
22159reg [63:0] win6_reg19;
22160reg [63:0] win7_reg19;
22161reg [63:0] win0_reg20;
22162reg [63:0] win1_reg20;
22163reg [63:0] win2_reg20;
22164reg [63:0] win3_reg20;
22165reg [63:0] win4_reg20;
22166reg [63:0] win5_reg20;
22167reg [63:0] win6_reg20;
22168reg [63:0] win7_reg20;
22169reg [63:0] win0_reg21;
22170reg [63:0] win1_reg21;
22171reg [63:0] win2_reg21;
22172reg [63:0] win3_reg21;
22173reg [63:0] win4_reg21;
22174reg [63:0] win5_reg21;
22175reg [63:0] win6_reg21;
22176reg [63:0] win7_reg21;
22177reg [63:0] win0_reg22;
22178reg [63:0] win1_reg22;
22179reg [63:0] win2_reg22;
22180reg [63:0] win3_reg22;
22181reg [63:0] win4_reg22;
22182reg [63:0] win5_reg22;
22183reg [63:0] win6_reg22;
22184reg [63:0] win7_reg22;
22185reg [63:0] win0_reg23;
22186reg [63:0] win1_reg23;
22187reg [63:0] win2_reg23;
22188reg [63:0] win3_reg23;
22189reg [63:0] win4_reg23;
22190reg [63:0] win5_reg23;
22191reg [63:0] win6_reg23;
22192reg [63:0] win7_reg23;
22193reg [63:0] win0_reg24;
22194reg [63:0] win1_reg24;
22195reg [63:0] win2_reg24;
22196reg [63:0] win3_reg24;
22197reg [63:0] win4_reg24;
22198reg [63:0] win5_reg24;
22199reg [63:0] win6_reg24;
22200reg [63:0] win7_reg24;
22201reg [63:0] win0_reg25;
22202reg [63:0] win1_reg25;
22203reg [63:0] win2_reg25;
22204reg [63:0] win3_reg25;
22205reg [63:0] win4_reg25;
22206reg [63:0] win5_reg25;
22207reg [63:0] win6_reg25;
22208reg [63:0] win7_reg25;
22209reg [63:0] win0_reg26;
22210reg [63:0] win1_reg26;
22211reg [63:0] win2_reg26;
22212reg [63:0] win3_reg26;
22213reg [63:0] win4_reg26;
22214reg [63:0] win5_reg26;
22215reg [63:0] win6_reg26;
22216reg [63:0] win7_reg26;
22217reg [63:0] win0_reg27;
22218reg [63:0] win1_reg27;
22219reg [63:0] win2_reg27;
22220reg [63:0] win3_reg27;
22221reg [63:0] win4_reg27;
22222reg [63:0] win5_reg27;
22223reg [63:0] win6_reg27;
22224reg [63:0] win7_reg27;
22225reg [63:0] win0_reg28;
22226reg [63:0] win1_reg28;
22227reg [63:0] win2_reg28;
22228reg [63:0] win3_reg28;
22229reg [63:0] win4_reg28;
22230reg [63:0] win5_reg28;
22231reg [63:0] win6_reg28;
22232reg [63:0] win7_reg28;
22233reg [63:0] win0_reg29;
22234reg [63:0] win1_reg29;
22235reg [63:0] win2_reg29;
22236reg [63:0] win3_reg29;
22237reg [63:0] win4_reg29;
22238reg [63:0] win5_reg29;
22239reg [63:0] win6_reg29;
22240reg [63:0] win7_reg29;
22241reg [63:0] win0_reg30;
22242reg [63:0] win1_reg30;
22243reg [63:0] win2_reg30;
22244reg [63:0] win3_reg30;
22245reg [63:0] win4_reg30;
22246reg [63:0] win5_reg30;
22247reg [63:0] win6_reg30;
22248reg [63:0] win7_reg30;
22249reg [63:0] win0_reg31;
22250reg [63:0] win1_reg31;
22251reg [63:0] win2_reg31;
22252reg [63:0] win3_reg31;
22253reg [63:0] win4_reg31;
22254reg [63:0] win5_reg31;
22255reg [63:0] win6_reg31;
22256reg [63:0] win7_reg31;
22257
22258reg [63:0] itagacc_fx5;
22259reg [63:0] itagacc_fb;
22260reg [63:0] itagacc_fw;
22261reg [63:0] itagacc_fw1;
22262reg [63:0] itagacc_fw2;
22263
22264reg [63:0] dtagacc_fx5;
22265reg [63:0] dtagacc_fb;
22266reg [63:0] dtagacc_fw;
22267reg [63:0] dtagacc_fw1;
22268reg [63:0] dtagacc_fw2;
22269
22270reg [47:0] dsfar_fb;
22271reg [47:0] dsfar_fw;
22272reg [47:0] dsfar_fw1;
22273reg [47:0] dsfar_fw2;
22274
22275reg [47:0] pc_fx4;
22276reg [47:0] pc_fx5;
22277reg [47:0] pc_fb;
22278reg [47:0] pc_fw;
22279reg [47:0] pc_fw1;
22280reg [47:0] pc_fw2;
22281reg [47:0] pc_last;
22282
22283reg tlu_complete_1;
22284reg tlu_complete_2;
22285reg tlu_complete_3;
22286
22287reg frf_w1_valid_fw1;
22288reg frf_w1_valid_fw2;
22289
22290reg frf_w1_skip_addr4_fw1;
22291reg frf_w1_skip_addr4_fw2;
22292reg [2:0] fprs_fb;
22293reg [2:0] fprs_fw;
22294reg [2:0] fprs_fw1;
22295reg [2:0] fprs_fw2;
22296
22297
22298reg [1:0] frf_w2_valid_fw;
22299reg [1:0] frf_w2_valid_bn;
22300reg [2:0] frf_w2_tid_fw;
22301reg [4:0] frf_w2_addr_fw;
22302
22303reg [1:0] frf_w1_valid_fw;
22304reg [2:0] frf_w1_tid_fw;
22305reg [4:0] frf_w1_addr_fw;
22306
22307reg thread_running;
22308
22309reg in_wmr;
22310reg wmr; // latched to get edge
22311reg por_a; // latched to get edge
22312reg por_b; // latched to get edge
22313
22314reg nas_pipe_enable; // Turns on nas_pipe capture and Riesling SSTEP
22315reg first_op;
22316reg [63:0] mytime;
22317wire [5:0] mytnum;
22318wire mytg;
22319integer junk;
22320integer myindex;
22321integer irf_offset;
22322wire oddwin;
22323wire frf_w1_valid_even;
22324wire frf_w1_valid_odd;
22325wire frf_w2_valid_even;
22326wire frf_w2_valid_odd;
22327wire [4:0] frf_w1_skip_addr;
22328wire [4:0] frf_w2_skip_addr;
22329reg good_trap_detected; // Used for -nosas only.
22330
22331//----------------------------------------------------------
22332`ifdef DEBUG_PIPE
22333
22334wire [63:0] g0;
22335wire [63:0] g1;
22336wire [63:0] g2;
22337wire [63:0] g3;
22338wire [63:0] g4;
22339wire [63:0] g5;
22340wire [63:0] g6;
22341wire [63:0] g7;
22342
22343wire [63:0] o0;
22344wire [63:0] o1;
22345wire [63:0] o2;
22346wire [63:0] o3;
22347wire [63:0] o4;
22348wire [63:0] o5;
22349wire [63:0] o6;
22350wire [63:0] o7;
22351
22352wire [63:0] l0;
22353wire [63:0] l1;
22354wire [63:0] l2;
22355wire [63:0] l3;
22356wire [63:0] l4;
22357wire [63:0] l5;
22358wire [63:0] l6;
22359wire [63:0] l7;
22360
22361wire [63:0] i0;
22362wire [63:0] i1;
22363wire [63:0] i2;
22364wire [63:0] i3;
22365wire [63:0] i4;
22366wire [63:0] i5;
22367wire [63:0] i6;
22368wire [63:0] i7;
22369
22370wire [31:0] frf_0;
22371wire [31:0] frf_1;
22372wire [31:0] frf_2;
22373wire [31:0] frf_3;
22374wire [31:0] frf_4;
22375wire [31:0] frf_5;
22376wire [31:0] frf_6;
22377wire [31:0] frf_7;
22378wire [31:0] frf_8;
22379wire [31:0] frf_9;
22380wire [31:0] frf_10;
22381wire [31:0] frf_11;
22382wire [31:0] frf_12;
22383wire [31:0] frf_13;
22384wire [31:0] frf_14;
22385wire [31:0] frf_15;
22386wire [31:0] frf_16;
22387wire [31:0] frf_17;
22388wire [31:0] frf_18;
22389wire [31:0] frf_19;
22390wire [31:0] frf_20;
22391wire [31:0] frf_21;
22392wire [31:0] frf_22;
22393wire [31:0] frf_23;
22394wire [31:0] frf_24;
22395wire [31:0] frf_25;
22396wire [31:0] frf_26;
22397wire [31:0] frf_27;
22398wire [31:0] frf_28;
22399wire [31:0] frf_29;
22400wire [31:0] frf_30;
22401wire [31:0] frf_31;
22402wire [31:0] frf_32;
22403wire [31:0] frf_33;
22404wire [31:0] frf_34;
22405wire [31:0] frf_35;
22406wire [31:0] frf_36;
22407wire [31:0] frf_37;
22408wire [31:0] frf_38;
22409wire [31:0] frf_39;
22410wire [31:0] frf_40;
22411wire [31:0] frf_41;
22412wire [31:0] frf_42;
22413wire [31:0] frf_43;
22414wire [31:0] frf_44;
22415wire [31:0] frf_45;
22416wire [31:0] frf_46;
22417wire [31:0] frf_47;
22418wire [31:0] frf_48;
22419wire [31:0] frf_49;
22420wire [31:0] frf_50;
22421wire [31:0] frf_51;
22422wire [31:0] frf_52;
22423wire [31:0] frf_53;
22424wire [31:0] frf_54;
22425wire [31:0] frf_55;
22426wire [31:0] frf_56;
22427wire [31:0] frf_57;
22428wire [31:0] frf_58;
22429wire [31:0] frf_59;
22430wire [31:0] frf_60;
22431wire [31:0] frf_61;
22432wire [31:0] frf_62;
22433wire [31:0] frf_63;
22434
22435wire [`DELTA_WIDTH:0] delta_fx4_0;
22436wire [`DELTA_WIDTH:0] delta_fx4_1;
22437wire [`DELTA_WIDTH:0] delta_fx4_2;
22438wire [`DELTA_WIDTH:0] delta_fx4_3;
22439wire [`DELTA_WIDTH:0] delta_fx4_4;
22440wire [`DELTA_WIDTH:0] delta_fx4_5;
22441wire [`DELTA_WIDTH:0] delta_fx4_6;
22442wire [`DELTA_WIDTH:0] delta_fx4_7;
22443
22444wire [`DELTA_WIDTH:0] delta_fx5_0;
22445wire [`DELTA_WIDTH:0] delta_fx5_1;
22446wire [`DELTA_WIDTH:0] delta_fx5_2;
22447wire [`DELTA_WIDTH:0] delta_fx5_3;
22448wire [`DELTA_WIDTH:0] delta_fx5_4;
22449wire [`DELTA_WIDTH:0] delta_fx5_5;
22450wire [`DELTA_WIDTH:0] delta_fx5_6;
22451wire [`DELTA_WIDTH:0] delta_fx5_7;
22452
22453wire [`DELTA_WIDTH:0] delta_fb_0;
22454wire [`DELTA_WIDTH:0] delta_fb_1;
22455wire [`DELTA_WIDTH:0] delta_fb_2;
22456wire [`DELTA_WIDTH:0] delta_fb_3;
22457wire [`DELTA_WIDTH:0] delta_fb_4;
22458wire [`DELTA_WIDTH:0] delta_fb_5;
22459wire [`DELTA_WIDTH:0] delta_fb_6;
22460wire [`DELTA_WIDTH:0] delta_fb_7;
22461
22462wire [`DELTA_WIDTH:0] delta_fw_0;
22463wire [`DELTA_WIDTH:0] delta_fw_1;
22464wire [`DELTA_WIDTH:0] delta_fw_2;
22465wire [`DELTA_WIDTH:0] delta_fw_3;
22466wire [`DELTA_WIDTH:0] delta_fw_4;
22467wire [`DELTA_WIDTH:0] delta_fw_5;
22468wire [`DELTA_WIDTH:0] delta_fw_6;
22469wire [`DELTA_WIDTH:0] delta_fw_7;
22470
22471wire [`DELTA_WIDTH:0] delta_fw1_0;
22472wire [`DELTA_WIDTH:0] delta_fw1_1;
22473wire [`DELTA_WIDTH:0] delta_fw1_2;
22474wire [`DELTA_WIDTH:0] delta_fw1_3;
22475wire [`DELTA_WIDTH:0] delta_fw1_4;
22476wire [`DELTA_WIDTH:0] delta_fw1_5;
22477wire [`DELTA_WIDTH:0] delta_fw1_6;
22478wire [`DELTA_WIDTH:0] delta_fw1_7;
22479
22480wire [`DELTA_WIDTH:0] delta_fw2_0;
22481wire [`DELTA_WIDTH:0] delta_fw2_1;
22482wire [`DELTA_WIDTH:0] delta_fw2_2;
22483wire [`DELTA_WIDTH:0] delta_fw2_3;
22484wire [`DELTA_WIDTH:0] delta_fw2_4;
22485wire [`DELTA_WIDTH:0] delta_fw2_5;
22486wire [`DELTA_WIDTH:0] delta_fw2_6;
22487wire [`DELTA_WIDTH:0] delta_fw2_7;
22488
22489wire [`DELTA_WIDTH:0] delta_prev_0;
22490wire [`DELTA_WIDTH:0] delta_prev_1;
22491wire [`DELTA_WIDTH:0] delta_prev_2;
22492wire [`DELTA_WIDTH:0] delta_prev_3;
22493wire [`DELTA_WIDTH:0] delta_prev_4;
22494wire [`DELTA_WIDTH:0] delta_prev_5;
22495wire [`DELTA_WIDTH:0] delta_prev_6;
22496wire [`DELTA_WIDTH:0] delta_prev_7;
22497
22498initial begin
22499 #0;
22500 `PR_ALWAYS ("arg", `ALWAYS,"T%0d DEBUG_PIPE turned ON",mytnum);
22501end
22502
22503//----------------------------------------------------------
22504// Note: no remap of %g,%o,%l,%i regs based on CWP or GL
22505assign g0 = (mytid<=3) ? `IRF4_EXU0[( 0+irf_offset)] : `IRF4_EXU1[( 0+irf_offset)];
22506assign g1 = (mytid<=3) ? `IRF4_EXU0[( 1+irf_offset)] : `IRF4_EXU1[( 1+irf_offset)];
22507assign g2 = (mytid<=3) ? `IRF4_EXU0[( 2+irf_offset)] : `IRF4_EXU1[( 2+irf_offset)];
22508assign g3 = (mytid<=3) ? `IRF4_EXU0[( 3+irf_offset)] : `IRF4_EXU1[( 3+irf_offset)];
22509assign g4 = (mytid<=3) ? `IRF4_EXU0[( 4+irf_offset)] : `IRF4_EXU1[( 4+irf_offset)];
22510assign g5 = (mytid<=3) ? `IRF4_EXU0[( 5+irf_offset)] : `IRF4_EXU1[( 5+irf_offset)];
22511assign g6 = (mytid<=3) ? `IRF4_EXU0[( 6+irf_offset)] : `IRF4_EXU1[( 6+irf_offset)];
22512assign g7 = (mytid<=3) ? `IRF4_EXU0[( 7+irf_offset)] : `IRF4_EXU1[( 7+irf_offset)];
22513
22514assign o0 = (mytid<=3) ? `IRF4_EXU0[( 8+irf_offset)] : `IRF4_EXU1[( 8+irf_offset)];
22515assign o1 = (mytid<=3) ? `IRF4_EXU0[( 9+irf_offset)] : `IRF4_EXU1[( 9+irf_offset)];
22516assign o2 = (mytid<=3) ? `IRF4_EXU0[(10+irf_offset)] : `IRF4_EXU1[(10+irf_offset)];
22517assign o3 = (mytid<=3) ? `IRF4_EXU0[(11+irf_offset)] : `IRF4_EXU1[(11+irf_offset)];
22518assign o4 = (mytid<=3) ? `IRF4_EXU0[(12+irf_offset)] : `IRF4_EXU1[(12+irf_offset)];
22519assign o5 = (mytid<=3) ? `IRF4_EXU0[(13+irf_offset)] : `IRF4_EXU1[(13+irf_offset)];
22520assign o6 = (mytid<=3) ? `IRF4_EXU0[(14+irf_offset)] : `IRF4_EXU1[(14+irf_offset)];
22521assign o7 = (mytid<=3) ? `IRF4_EXU0[(15+irf_offset)] : `IRF4_EXU1[(15+irf_offset)];
22522
22523assign l0 = (mytid<=3) ? `IRF4_EXU0[(16+irf_offset)] : `IRF4_EXU1[(16+irf_offset)];
22524assign l1 = (mytid<=3) ? `IRF4_EXU0[(17+irf_offset)] : `IRF4_EXU1[(17+irf_offset)];
22525assign l2 = (mytid<=3) ? `IRF4_EXU0[(18+irf_offset)] : `IRF4_EXU1[(18+irf_offset)];
22526assign l3 = (mytid<=3) ? `IRF4_EXU0[(19+irf_offset)] : `IRF4_EXU1[(19+irf_offset)];
22527assign l4 = (mytid<=3) ? `IRF4_EXU0[(20+irf_offset)] : `IRF4_EXU1[(20+irf_offset)];
22528assign l5 = (mytid<=3) ? `IRF4_EXU0[(21+irf_offset)] : `IRF4_EXU1[(21+irf_offset)];
22529assign l6 = (mytid<=3) ? `IRF4_EXU0[(22+irf_offset)] : `IRF4_EXU1[(22+irf_offset)];
22530assign l7 = (mytid<=3) ? `IRF4_EXU0[(23+irf_offset)] : `IRF4_EXU1[(23+irf_offset)];
22531
22532assign i0 = (mytid<=3) ? `IRF4_EXU0[(24+irf_offset)] : `IRF4_EXU1[(24+irf_offset)];
22533assign i1 = (mytid<=3) ? `IRF4_EXU0[(25+irf_offset)] : `IRF4_EXU1[(25+irf_offset)];
22534assign i2 = (mytid<=3) ? `IRF4_EXU0[(26+irf_offset)] : `IRF4_EXU1[(26+irf_offset)];
22535assign i3 = (mytid<=3) ? `IRF4_EXU0[(27+irf_offset)] : `IRF4_EXU1[(27+irf_offset)];
22536assign i4 = (mytid<=3) ? `IRF4_EXU0[(28+irf_offset)] : `IRF4_EXU1[(28+irf_offset)];
22537assign i5 = (mytid<=3) ? `IRF4_EXU0[(29+irf_offset)] : `IRF4_EXU1[(29+irf_offset)];
22538assign i6 = (mytid<=3) ? `IRF4_EXU0[(30+irf_offset)] : `IRF4_EXU1[(30+irf_offset)];
22539assign i7 = (mytid<=3) ? `IRF4_EXU0[(31+irf_offset)] : `IRF4_EXU1[(31+irf_offset)];
22540
22541//----------------------------------------------------------
22542assign frf_0 = `FRF4_EVEN[(mytid*32)+ 0];
22543assign frf_2 = `FRF4_EVEN[(mytid*32)+ 1];
22544assign frf_4 = `FRF4_EVEN[(mytid*32)+ 2];
22545assign frf_6 = `FRF4_EVEN[(mytid*32)+ 3];
22546assign frf_8 = `FRF4_EVEN[(mytid*32)+ 4];
22547assign frf_10 = `FRF4_EVEN[(mytid*32)+ 5];
22548assign frf_12 = `FRF4_EVEN[(mytid*32)+ 6];
22549assign frf_14 = `FRF4_EVEN[(mytid*32)+ 7];
22550assign frf_16 = `FRF4_EVEN[(mytid*32)+ 8];
22551assign frf_18 = `FRF4_EVEN[(mytid*32)+ 9];
22552assign frf_20 = `FRF4_EVEN[(mytid*32)+ 10];
22553assign frf_22 = `FRF4_EVEN[(mytid*32)+ 11];
22554assign frf_24 = `FRF4_EVEN[(mytid*32)+ 12];
22555assign frf_26 = `FRF4_EVEN[(mytid*32)+ 13];
22556assign frf_28 = `FRF4_EVEN[(mytid*32)+ 14];
22557assign frf_30 = `FRF4_EVEN[(mytid*32)+ 15];
22558assign frf_32 = `FRF4_EVEN[(mytid*32)+ 16];
22559assign frf_34 = `FRF4_EVEN[(mytid*32)+ 17];
22560assign frf_36 = `FRF4_EVEN[(mytid*32)+ 18];
22561assign frf_38 = `FRF4_EVEN[(mytid*32)+ 19];
22562assign frf_40 = `FRF4_EVEN[(mytid*32)+ 20];
22563assign frf_42 = `FRF4_EVEN[(mytid*32)+ 21];
22564assign frf_44 = `FRF4_EVEN[(mytid*32)+ 22];
22565assign frf_46 = `FRF4_EVEN[(mytid*32)+ 23];
22566assign frf_48 = `FRF4_EVEN[(mytid*32)+ 24];
22567assign frf_50 = `FRF4_EVEN[(mytid*32)+ 25];
22568assign frf_52 = `FRF4_EVEN[(mytid*32)+ 26];
22569assign frf_54 = `FRF4_EVEN[(mytid*32)+ 27];
22570assign frf_56 = `FRF4_EVEN[(mytid*32)+ 28];
22571assign frf_58 = `FRF4_EVEN[(mytid*32)+ 29];
22572assign frf_60 = `FRF4_EVEN[(mytid*32)+ 30];
22573assign frf_62 = `FRF4_EVEN[(mytid*32)+ 31];
22574
22575assign frf_1 = `FRF4_ODD[(mytid*32)+ 0];
22576assign frf_3 = `FRF4_ODD[(mytid*32)+ 1];
22577assign frf_5 = `FRF4_ODD[(mytid*32)+ 2];
22578assign frf_7 = `FRF4_ODD[(mytid*32)+ 3];
22579assign frf_9 = `FRF4_ODD[(mytid*32)+ 4];
22580assign frf_11 = `FRF4_ODD[(mytid*32)+ 5];
22581assign frf_13 = `FRF4_ODD[(mytid*32)+ 6];
22582assign frf_15 = `FRF4_ODD[(mytid*32)+ 7];
22583assign frf_17 = `FRF4_ODD[(mytid*32)+ 8];
22584assign frf_19 = `FRF4_ODD[(mytid*32)+ 9];
22585assign frf_21 = `FRF4_ODD[(mytid*32)+ 10];
22586assign frf_23 = `FRF4_ODD[(mytid*32)+ 11];
22587assign frf_25 = `FRF4_ODD[(mytid*32)+ 12];
22588assign frf_27 = `FRF4_ODD[(mytid*32)+ 13];
22589assign frf_29 = `FRF4_ODD[(mytid*32)+ 14];
22590assign frf_31 = `FRF4_ODD[(mytid*32)+ 15];
22591assign frf_33 = `FRF4_ODD[(mytid*32)+ 16];
22592assign frf_35 = `FRF4_ODD[(mytid*32)+ 17];
22593assign frf_37 = `FRF4_ODD[(mytid*32)+ 18];
22594assign frf_39 = `FRF4_ODD[(mytid*32)+ 19];
22595assign frf_41 = `FRF4_ODD[(mytid*32)+ 20];
22596assign frf_43 = `FRF4_ODD[(mytid*32)+ 21];
22597assign frf_45 = `FRF4_ODD[(mytid*32)+ 22];
22598assign frf_47 = `FRF4_ODD[(mytid*32)+ 23];
22599assign frf_49 = `FRF4_ODD[(mytid*32)+ 24];
22600assign frf_51 = `FRF4_ODD[(mytid*32)+ 25];
22601assign frf_53 = `FRF4_ODD[(mytid*32)+ 26];
22602assign frf_55 = `FRF4_ODD[(mytid*32)+ 27];
22603assign frf_57 = `FRF4_ODD[(mytid*32)+ 28];
22604assign frf_59 = `FRF4_ODD[(mytid*32)+ 29];
22605assign frf_61 = `FRF4_ODD[(mytid*32)+ 30];
22606assign frf_63 = `FRF4_ODD[(mytid*32)+ 31];
22607
22608//----------------------------------------------------------
22609assign delta_fx4_0 = delta_fx4[0];
22610assign delta_fx4_1 = delta_fx4[1];
22611assign delta_fx4_2 = delta_fx4[2];
22612assign delta_fx4_3 = delta_fx4[3];
22613assign delta_fx4_4 = delta_fx4[4];
22614assign delta_fx4_5 = delta_fx4[5];
22615assign delta_fx4_6 = delta_fx4[6];
22616assign delta_fx4_7 = delta_fx4[7];
22617
22618assign delta_fx5_0 = delta_fx5[0];
22619assign delta_fx5_1 = delta_fx5[1];
22620assign delta_fx5_2 = delta_fx5[2];
22621assign delta_fx5_3 = delta_fx5[3];
22622assign delta_fx5_4 = delta_fx5[4];
22623assign delta_fx5_5 = delta_fx5[5];
22624assign delta_fx5_6 = delta_fx5[6];
22625assign delta_fx5_7 = delta_fx5[7];
22626
22627assign delta_fb_0 = delta_fb[0];
22628assign delta_fb_1 = delta_fb[1];
22629assign delta_fb_2 = delta_fb[2];
22630assign delta_fb_3 = delta_fb[3];
22631assign delta_fb_4 = delta_fb[4];
22632assign delta_fb_5 = delta_fb[5];
22633assign delta_fb_6 = delta_fb[6];
22634assign delta_fb_7 = delta_fb[7];
22635
22636assign delta_fw_0 = delta_fw[0];
22637assign delta_fw_1 = delta_fw[1];
22638assign delta_fw_2 = delta_fw[2];
22639assign delta_fw_3 = delta_fw[3];
22640assign delta_fw_4 = delta_fw[4];
22641assign delta_fw_5 = delta_fw[5];
22642assign delta_fw_6 = delta_fw[6];
22643assign delta_fw_7 = delta_fw[7];
22644
22645assign delta_fw1_0 = delta_fw1[0];
22646assign delta_fw1_1 = delta_fw1[1];
22647assign delta_fw1_2 = delta_fw1[2];
22648assign delta_fw1_3 = delta_fw1[3];
22649assign delta_fw1_4 = delta_fw1[4];
22650assign delta_fw1_5 = delta_fw1[5];
22651assign delta_fw1_6 = delta_fw1[6];
22652assign delta_fw1_7 = delta_fw1[7];
22653
22654assign delta_fw2_0 = delta_fw2[0];
22655assign delta_fw2_1 = delta_fw2[1];
22656assign delta_fw2_2 = delta_fw2[2];
22657assign delta_fw2_3 = delta_fw2[3];
22658assign delta_fw2_4 = delta_fw2[4];
22659assign delta_fw2_5 = delta_fw2[5];
22660assign delta_fw2_6 = delta_fw2[6];
22661assign delta_fw2_7 = delta_fw2[7];
22662
22663assign delta_prev_0 = delta_prev[0];
22664assign delta_prev_1 = delta_prev[1];
22665assign delta_prev_2 = delta_prev[2];
22666assign delta_prev_3 = delta_prev[3];
22667assign delta_prev_4 = delta_prev[4];
22668assign delta_prev_5 = delta_prev[5];
22669assign delta_prev_6 = delta_prev[6];
22670assign delta_prev_7 = delta_prev[7];
22671
22672`endif // DEBUG_PIPE
22673//----------------------------------------------------------
22674
22675//----------------------------------------------------------
22676assign mytnum = (mycid*8)+mytid;
22677assign mytg = mytid >> 2;
22678
22679assign exu_complete = exu_valid & ~(`PROBES4.clkstop_d5|`TOP.in_reset|`SPC4.tcu_scan_en);
22680assign imul_complete = imul_valid & ~(`TOP.in_reset|`SPC4.tcu_scan_en);
22681assign idiv_complete = idiv_valid & ~(`TOP.in_reset|`SPC4.tcu_scan_en);
22682assign tlu_complete = tlu_complete_3 ;
22683assign fp_complete = fp_valid & ~(`TOP.in_reset|`SPC4.tcu_scan_en);
22684assign fdiv_complete = fdiv_valid & ~(`TOP.in_reset|`SPC4.tcu_scan_en);
22685assign lsu_complete = lsu_valid & ~(`TOP.in_reset|`SPC4.tcu_scan_en);
22686assign asi_complete = asi_valid & ~(`TOP.in_reset|`SPC4.tcu_scan_en);
22687
22688assign complete_w = (exu_complete << `EXU_INDEX) |
22689 (lsu_complete << `LSU_INDEX) |
22690 (tlu_complete << `TLU_INDEX) |
22691 (asi_complete << `ASI_INDEX) ;
22692
22693assign oddwin = CWP_reg % 2;
22694
22695assign frf_w1_valid_even = (frf_w1_tid_fw == mytid) & frf_w1_valid_fw[1];
22696assign frf_w1_valid_odd = (frf_w1_tid_fw == mytid) & frf_w1_valid_fw[0];
22697assign frf_w2_valid_even = (frf_w2_tid_fw == mytid) & frf_w2_valid_fw[1];
22698assign frf_w2_valid_odd = (frf_w2_tid_fw == mytid) & frf_w2_valid_fw[0];
22699
22700assign frf_w1_skip_addr = frf_w1_addr_fw;
22701assign frf_w2_skip_addr = frf_w2_addr_fw;
22702
22703//-----------------
22704// ADD_TSB_CFG
22705// NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
22706`ifdef ADD_TSB_CFG
22707wire [63:0] ctxt_z_tsb_cfg0_reg = `PROBES4.ctxt_z_tsb_cfg0_reg[mytid];
22708wire [63:0] ctxt_z_tsb_cfg1_reg = `PROBES4.ctxt_z_tsb_cfg1_reg[mytid];
22709wire [63:0] ctxt_z_tsb_cfg2_reg = `PROBES4.ctxt_z_tsb_cfg2_reg[mytid];
22710wire [63:0] ctxt_z_tsb_cfg3_reg = `PROBES4.ctxt_z_tsb_cfg3_reg[mytid];
22711wire [63:0] ctxt_nz_tsb_cfg0_reg = `PROBES4.ctxt_nz_tsb_cfg0_reg[mytid];
22712wire [63:0] ctxt_nz_tsb_cfg1_reg = `PROBES4.ctxt_nz_tsb_cfg1_reg[mytid];
22713wire [63:0] ctxt_nz_tsb_cfg2_reg = `PROBES4.ctxt_nz_tsb_cfg2_reg[mytid];
22714wire [63:0] ctxt_nz_tsb_cfg3_reg = `PROBES4.ctxt_nz_tsb_cfg3_reg[mytid];
22715`endif
22716
22717//----------------------------------------------------------
22718// Pipelined Signals
22719always @ (posedge `BENCH_SPC4_GCLK) begin // {
22720
22721 // TLU is async to the execution pipeline
22722 // but needs to be delayed to allow CWP, etc to update and be stable
22723 // before arch state is captured and diff_reg is called.
22724 // Done for FLUSHW
22725
22726 // FDIV was moved from fw1 to fw to allow FPRS to be stable before capture
22727 tlu_complete_1 <= tlu_valid & ~(`TOP.in_reset|`SPC4.tcu_scan_en);
22728 tlu_complete_2 <= tlu_complete_1;
22729 tlu_complete_3 <= tlu_complete_2;
22730
22731 itagacc_fx5 <= I_TAG_ACC_reg; // Signal changes in W so need to pipeline to fw2
22732 itagacc_fb <= itagacc_fx5;
22733 itagacc_fw <= itagacc_fb;
22734 itagacc_fw1 <= itagacc_fw;
22735 itagacc_fw2 <= itagacc_fw1;
22736
22737 dtagacc_fx5 <= D_TAG_ACC_reg; // Signal changes in W so need to pipeline to fw2
22738 dtagacc_fb <= dtagacc_fx5;
22739 dtagacc_fw <= dtagacc_fb;
22740 dtagacc_fw1 <= dtagacc_fw;
22741 dtagacc_fw2 <= dtagacc_fw1;
22742
22743 dsfar_fb <= DSFAR_reg; // Signal changes in W+1 so need to pipeline to fw2
22744 dsfar_fw <= dsfar_fb;
22745 dsfar_fw1 <= dsfar_fw;
22746 dsfar_fw2 <= dsfar_fw1;
22747
22748 pc_fx4 <= PC_reg;
22749 pc_fx5 <= pc_fx4;
22750 pc_fb <= pc_fx5;
22751 pc_fw <= pc_fb;
22752 pc_fw1 <= pc_fw;
22753 pc_fw2 <= pc_fw1;
22754
22755 cwp_fx4 <= CWP_reg;
22756 cwp_fx5 <= cwp_fx4;
22757 cwp_fb <= cwp_fx5;
22758 cwp_fw <= cwp_fb;
22759 cwp_fw1 <= cwp_fw;
22760 cwp_fw2 <= cwp_fw1;
22761
22762 complete_fx4 <= complete_w;
22763 complete_fx5 <= complete_fx4 ;
22764 complete_fb <= complete_fx5 |
22765 (idiv_complete << `IDIV_INDEX);
22766 complete_fw <= complete_fb |
22767 (fdiv_complete << `FDIV_INDEX) |
22768 (imul_complete << `IMUL_INDEX);
22769 complete_fw1 <= complete_fw |
22770 (fp_complete << `FP_INDEX);
22771
22772 complete_fw2 <= complete_fw1;
22773
22774 frf_w1_valid_fw1 <= (frf_w1_valid_odd | frf_w1_valid_even) & fp_complete;
22775 frf_w1_valid_fw2 <= frf_w1_valid_fw1;
22776
22777 frf_w1_skip_addr4_fw1 <= frf_w1_skip_addr[4];
22778 frf_w1_skip_addr4_fw2 <= frf_w1_skip_addr4_fw1;
22779
22780 fprs_fb <= FPRS_reg;
22781 fprs_fw <= fprs_fb;
22782 fprs_fw1 <= fprs_fw;
22783 fprs_fw2 <= fprs_fw1;
22784
22785 frf_w2_valid_fw <= frf_w2_valid_bn;
22786 frf_w2_tid_fw <= frf_w2_tid;
22787 frf_w2_addr_fw <= frf_w2_addr;
22788
22789 frf_w1_valid_fw <= frf_w1_valid;
22790 frf_w1_tid_fw <= frf_w1_tid;
22791 frf_w1_addr_fw <= frf_w1_addr;
22792
22793 // Thread running
22794
22795 if (~thread_running & `SPC4.tcu_core_running[mytid])
22796 `TOP.th_last_act_cycle[mytnum] = `TOP.core_cycle_cnt;
22797
22798 thread_running <= `SPC4.tcu_core_running[mytid];
22799
22800 // Reset some register prev state on wmr negation
22801 if (`SPC4.rst_wmr_protect && ~wmr)
22802 wmr_prev;
22803
22804 if (por_a && ~por_b)
22805 por_prev;
22806
22807 wmr <= `SPC4.rst_wmr_protect;
22808 por_a <= `TOP.in_por;
22809 por_b <= por_a;
22810
22811 if (`SPC4.rst_wmr_protect)
22812 in_wmr <= 1;
22813
22814end // }
22815
22816//----------------------------------------------------------
22817// Holding state for registers that may be updated asynchronously
22818// after synchronous update, but before capture/step. Also for reads,
22819// when register is read and modified before capture/step ..
22820// We capture the value /write time, and use that for sstep,
22821// ignoring any async updates, which are sent in the NEXT sstep ..
22822//
22823reg [63:0] asi_updated_int_rec;
22824reg asi_rdwr_int_rec;
22825reg asi_wr_int_rec_delay;
22826
22827reg asi_updated_hintp;
22828reg asi_rdwr_hintp;
22829reg asi_wr_hintp_delay;
22830
22831reg [16:0] asi_updated_softint;
22832reg asi_rdwr_softint;
22833reg asi_wr_softint_delay;
22834reg [16:0] asi_softint_wrdata;
22835
22836always @(posedge `BENCH_SPC4_GCLK) begin // {
22837
22838 // Corner case : If async and sync wr occur in same clock, then the async
22839 // update takes place. In this case we have to capture the
22840 // value of the write WITHOUT async bit being set, so that
22841 // we can sync with Riesling's sync write ..
22842
22843 asi_wr_int_rec_delay <= ( `SPC4.tlu.cth.asi_wr_int_rec[mytid] |
22844 `SPC4.tlu.asi_rd_inc_vec_2[mytid]);
22845
22846 if (`SPC4.tlu.cth.asi_wr_int_rec[mytid] |
22847 ((`SPC4.tlu.asi.rd_inc_vec) &&
22848 (`SPC4.tlu.asi.rd_tid_dec[mytid])) |
22849 (`SPC4.tlu.asi_rd_int_rec &
22850 `SPC4.tlu.cth.int_rec_mux_sel==mytid))
22851 begin // {
22852
22853 if (`SPC4.tlu.cth.asi_wr_int_rec[mytid])
22854 asi_updated_int_rec <= `SPC4.tlu.cth.int_rec ;
22855 else if ( (`SPC4.tlu.asi.rd_inc_vec) &&
22856 (`SPC4.tlu.asi.rd_tid_dec[mytid]) )
22857 if (`SPC4.tlu.cth.cxi_wr_int_dis[mytid]) begin
22858 asi_updated_int_rec <= INTR_RECEIVE_reg & `SPC4.tlu.cth.int_rec_muxed_;
22859 asi_updated_int_rec[`SPC4.tlu.cth.incoming_vector_in] <= 1'b0 ;
22860 end
22861 else
22862 begin
22863 asi_updated_int_rec <= `SPC4.tlu.cth.int_rec_muxed ;
22864 asi_updated_int_rec[`SPC4.tlu.cth.incoming_vector_in] <= 1'b0 ;
22865 end
22866 else
22867 asi_updated_int_rec <= INTR_RECEIVE_reg;
22868 asi_rdwr_int_rec <= 1'b1;
22869 end //}
22870 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
22871 asi_rdwr_int_rec <= 1'b0;
22872
22873 asi_wr_hintp_delay <= `SPC4.tlu.asi_wr_hintp[mytid];
22874
22875 if (`SPC4.tlu.asi_wr_hintp[mytid] |
22876 `SPC4.tlu.asi_rd_hintp[mytid])
22877 begin // {
22878 if (`SPC4.tlu.asi_wr_hintp[mytid])
22879 asi_updated_hintp <= `SPC4.tlu.asi_wr_data_0[0] ;
22880 else
22881 asi_updated_hintp <= HINTP_reg;
22882 asi_rdwr_hintp <= 1'b1;
22883 end //}
22884 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
22885 asi_rdwr_hintp <= 1'b0;
22886
22887 asi_wr_softint_delay <= (`SPC4.tlu.asi_wr_softint[mytid] |
22888 `SPC4.tlu.asi_wr_clear_softint[mytid] |
22889 `SPC4.tlu.asi_wr_set_softint[mytid]);
22890
22891 if (`SPC4.tlu.asi_wr_clear_softint[mytid])
22892 asi_softint_wrdata <= ~`SPC4.tlu.asi_wr_data_0[16:0] & rd_SOFTINT_reg;
22893 else if (`SPC4.tlu.asi_wr_set_softint[mytid])
22894 asi_softint_wrdata <= `SPC4.tlu.asi_wr_data_0[16:0] | rd_SOFTINT_reg;
22895 else
22896 asi_softint_wrdata <= `SPC4.tlu.asi_wr_data_0[16:0];
22897
22898 if (asi_wr_softint_delay | `SPC4.tlu.asi_rd_softint[mytid])
22899 begin // {
22900 if (asi_wr_softint_delay)
22901 asi_updated_softint <= asi_softint_wrdata ;
22902 else
22903 asi_updated_softint <= rd_SOFTINT_reg ;
22904 asi_rdwr_softint <= 1'b1;
22905 end //}
22906 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
22907 asi_rdwr_softint <= 1'b0;
22908end //}
22909
22910//----------------------------------------------------------
22911// Negedge sampling to avoid race on specific signals ..
22912//
22913always @ (negedge `BENCH_SPC4_GCLK) begin // {
22914 frf_w2_valid_bn <= frf_w2_valid;
22915end //}
22916
22917//----------------------------------------------------------
22918// When instruction completes,
22919// Push differences to simics
22920
22921always @ (posedge `BENCH_SPC4_GCLK) begin // {
22922
22923 if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable && ~`SPC4.tcu_scan_en && ~`TOP.in_por) begin // {
22924
22925
22926 //----------
22927 // Update window registers
22928 if (CWP_reg != `NASTOP.th_cwp[mytnum]) begin // {
22929 copy_win (CWP_reg,`NASTOP.th_cwp[mytnum]);
22930 `NASTOP.th_cwp[mytnum] = CWP_reg;
22931 end // }
22932
22933 //----------
22934 // Update global registers
22935 // Wait for warm-reset flush related toggling to settle
22936 if (GL_reg != th_gl) begin // {
22937 if (`SPC4.spc_core_running_status[mytid] &
22938 ~`SPC4.rst_wmr_protect) begin // {
22939 copy_global (GL_reg,th_gl);
22940 th_gl = GL_reg;
22941 end // }
22942 end // }
22943
22944 //----------
22945 // Check for bad signal values
22946 check_values;
22947
22948 //----------
22949 // Step Simics
22950 //
22951 // if NASTOP.sstep_sent[tid]=1,
22952 // then SSTEP was set by another module (i.e. tlb_sync)
22953
22954 if (`PARGS.nas_check_on) begin // {
22955 mytime = `TOP.core_cycle_cnt-1;
22956 if (complete_fw2 && (`NASTOP.sstep_sent[mytnum]==1'b0)) begin // {
22957 `PR_INFO ("pli_nas", `INFO, " C%0d T%0d PLI_SSTEP tid=%d pc=%h ts=%0d ",
22958 mycid,mytid,mytnum,pc_fw2,mytime);
22959 junk = $sim_send(`PLI_SSTEP, mytnum);
22960 // Always clear sstep_early
22961 // In case tlb_sync asserted it too late for complete_fw2
22962 `NASTOP.sstep_early[mytnum] <= 1'b0;
22963 end //}
22964 else if (complete_fw2) begin // {
22965 `NASTOP.sstep_sent[mytnum] <= 1'b0; // re-arm SSTEP
22966 `NASTOP.sstep_early[mytnum] <= 1'b0;
22967 `PR_INFO ("pli_nas", `INFO, " C%0d T%0d PLI_SSTEP tid=%d pc=%h ts=%0d (nas_pipe: skip sstep. rearm sstep. sstep_sent=0)",
22968 mycid,mytid,mytnum,pc_fw2,mytime);
22969 end //}
22970 end //}
22971
22972 //----------
22973 // Only capture if something completes and not first instruction
22974 if (complete_fw2 && !first_op) begin // {
22975 update_pc;
22976 push_simics; // Use with AXIS to keep from getting timeout
22977 end // }
22978
22979 // Pipeline runs continuously
22980 // Other than when in POR ..
22981 update_fx4;
22982 update_fx5;
22983 update_fb;
22984 update_fw;
22985 update_fw1;
22986 update_fw2;
22987 // Only save to delta_prev when something completes
22988 if (complete_fw2) begin
22989 update_fw2_async;
22990 update_prev;
22991 first_op = 0;
22992 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
22993 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
22994 end
22995
22996
22997`ifndef EMUL_TL
22998 //----------
22999 // If something was captured but no instruction is in the pipeline
23000 if ((delta_fw2[`NEXT_INDEX]!=`FIRST_INDEX) && (complete_fw2 == 0))
23001 begin // {
23002
23003 for (myindex=`FIRST_INDEX; myindex<delta_fw2[`NEXT_INDEX]; myindex=myindex+1)
23004 begin // {
23005 print_entry (delta_fw2[myindex]);
23006 end //}
23007 `PR_ERROR ("nas",`ERROR, "T%0d Unexpected Reg change in DUT. Special case - no instruction retired.", mytnum);
23008
23009 end // }
23010`endif
23011
23012
23013 //----------
23014 // End detection for non-sas runs ..
23015
23016 for (junk=0;junk<`PARGS.bad_trap_count;junk=junk+1)
23017 if (({16'b0,pc_fw2}&`PC_MASK) ===
23018 (`PARGS.bad_trap_addr[junk]&`PC_MASK)) begin // {
23019 // Disable nas_pipe processing (capture & SSTEP)
23020 // to speed up simulation (minimize socket traffic,etc)
23021 nas_pipe_enable=1'b0;
23022 if (! `PARGS.nas_check_on) begin //{
23023 `PR_ERROR ("nas",`ERROR, "T%0d reached Bad Trap", mytnum);
23024 end //}
23025 end //}
23026
23027 for (junk=0;junk<`PARGS.good_trap_count;junk=junk+1)
23028 if ((|complete_fw2) && (({16'b0,pc_fw2}&`PC_MASK) ===
23029 (`PARGS.good_trap_addr[junk]&`PC_MASK))) begin // {
23030 // Disable nas_pipe processing (capture & SSTEP)
23031 // to speed up simulation (minimize socket traffic,etc)
23032 nas_pipe_enable=1'b0;
23033 if (! `PARGS.nas_check_on) begin //{
23034 good_trap_detected = 1'b1;
23035 end //}
23036 end //}
23037
23038 // Check Thread level timeout
23039 if (thread_running &&
23040 (`TOP.core_cycle_cnt - `TOP.th_last_act_cycle[mytnum]) > `PARGS.th_timeout)
23041 begin // {
23042 // Note: Do not change this message because regreport parses it for certain words.
23043 `PR_ALWAYS ("nas",`ALWAYS, "ERROR: Thread T%0d No Activity for %0d Cycles - Thread TIMEOUT!",
23044 mytnum, `PARGS.th_timeout);
23045 junk = incErr(9999); // must exceed users max error setting to force exit.
23046 end //}
23047
23048 end // if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable ...)}
23049
23050 // if -nosas only,
23051 // Need to make sure Store Buffer is empty before turning off th_check_enable.
23052 //global chkr requires to wait for all outstanding pending I
23053 if ((! `PARGS.nas_check_on) &&
23054 (good_trap_detected==1'b1) &&
23055 (`TOP.nas_top.lsu_stb_empty[mytnum]) && `TOP.nas_top.ireq_pending[mytnum]) begin // {
23056 `PARGS.th_check_enable[mytnum] = 1'b0;
23057 `TOP.finished_tids[mytnum] = 1'b1;
23058 good_trap_detected = 1'b0;
23059 `PR_NORMAL ("nas", `NORMAL, "T%0d reached Good Trap. Disabling checking for thread %0d", mytnum,mytnum);
23060 end // }
23061end // always }
23062
23063//----------------------------------------------------------
23064//----------------------------------------------------------
23065// Stage FX4 of delta pipeline
23066task update_fx4;
23067
23068 integer i;
23069 reg [7:0] index;
23070
23071 begin // {
23072
23073 `ifndef EMUL_TL
23074 index = `FIRST_INDEX;
23075
23076 //--------------------
23077 // Init delta_fx4
23078 delta_fx4[`NEXT_INDEX] <= `FIRST_INDEX;
23079 delta_fx4[`TIME_INDEX] <= 0;
23080 delta_fx4[`PC_INDEX] <= {16'b0,PC_reg};
23081 delta_fx4[`GL_INDEX] <= GL_reg;
23082 delta_fx4[`CWP_INDEX] <= CWP_reg;
23083 delta_fx4[`OPCODE_INDEX] <= opcode;
23084 delta_fx4[`FIRST_INDEX] <= 77'hx;
23085 `else
23086 index = 0;
23087 `endif
23088
23089 end // }
23090endtask
23091
23092//----------------------------------------------------------
23093// Stage FX5 of delta pipeline
23094task update_fx5;
23095
23096 integer i;
23097 reg [7:0] index;
23098 reg [38:0] frf_tmp;
23099
23100 begin // {
23101
23102 `ifndef EMUL_TL
23103 index = delta_fx4[`NEXT_INDEX];
23104
23105 //--------------------
23106 // Pipeline previous stage
23107 for (i=0; i<=delta_fx4[`NEXT_INDEX]; i=i+1) begin // {
23108 delta_fx5[i] <= delta_fx4[i];
23109 end
23110 `else
23111 index = 0;
23112 `endif
23113
23114 //-------------------
23115 // Control Registers
23116 if (complete_fx4) begin // LSU | EXU | TLU
23117 push_delta_fx5 (`CCR+`CTL_OFFSET,CCR_reg,index);
23118 end
23119
23120 //-------------------
23121 // Update IRF4
23122`ifndef NAS_NO_IRFFRF
23123 if (complete_fx4[`LSU_INDEX] |
23124 complete_fx4[`EXU_INDEX]) begin
23125 if (mytid <= 3) begin // {
23126 for (i=0; i<=31; i=i+1) begin // {
23127 push_delta_fx5 (i,`IRF4_EXU0[(remap(i,oddwin)+irf_offset)],index);
23128 end // }
23129 end // }
23130 else begin // {
23131 for (i=0; i<=31; i=i+1) begin // {
23132 push_delta_fx5 (i,`IRF4_EXU1[(remap(i,oddwin)+irf_offset)],index);
23133 end // }
23134 end // }
23135 end
23136`endif
23137
23138 //--------------------
23139 // Update FRF4 - Loads use W2 Port.
23140`ifndef NAS_NO_IRFFRF
23141 if (complete_fx4[`LSU_INDEX]) begin // {
23142 // IF W1 port is also being written, ignore that address
23143 for (i=0; i<=31; i=i+1) begin // {
23144 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
23145 frf_tmp = `FRF4_EVEN[(mytid*32)+i];
23146 push_delta_fx5 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
23147 end // }
23148 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
23149 frf_tmp = `FRF4_ODD[(mytid*32)+i];
23150 push_delta_fx5 (`FP_OFFSET + (i*2)+1, frf_tmp[31:0], index);
23151 end // }
23152 end //}
23153 end // }
23154`endif
23155
23156 // Update ASR/ASI registers
23157 if (complete_fx4) begin // {
23158 push_delta_fx5 (`PSTATE + `CTL_OFFSET,PSTATE_reg,index);
23159 push_delta_fx5 (`HPSTATE + `CTL_OFFSET,HPSTATE_reg,index);
23160 push_delta_fx5 (`PIL + `CTL_OFFSET,PIL_reg,index);
23161 push_delta_fx5 (`TBA + `CTL_OFFSET,{TBA_reg,15'b0},index);
23162 push_delta_fx5 (`GL + `CTL_OFFSET,GL_reg,index);
23163 push_delta_fx5 (`HTBA + `CTL_OFFSET,{HTBA_reg,14'b0},index);
23164 push_delta_fx5 (`VER + `CTL_OFFSET,VER_reg,index);
23165 push_delta_fx5 (`Y + `CTL_OFFSET,Y_reg,index);
23166 push_delta_fx5 (`ASI + `CTL_OFFSET,ASI_reg,index);
23167 push_delta_fx5 (`STICK_CMPR + `CTL_OFFSET,STICK_CMPR_wire,index);
23168 push_delta_fx5 (`HSTICK_CMPR + `CTL_OFFSET,HSTICK_CMPR_wire,index);
23169 push_delta_fx5 (`TICK_CMPR + `CTL_OFFSET,TICK_CMPR_wire,index);
23170 push_delta_fx5 (`CWP + `CTL_OFFSET,CWP_reg,index);
23171 push_delta_fx5 (`CANSAVE + `CTL_OFFSET,CANSAVE_reg,index);
23172 push_delta_fx5 (`CANRESTORE + `CTL_OFFSET,CANRESTORE_reg,index);
23173 push_delta_fx5 (`CLEANWIN + `CTL_OFFSET,CLEANWIN_reg,index);
23174 push_delta_fx5 (`OTHERWIN + `CTL_OFFSET,OTHERWIN_reg,index);
23175 push_delta_fx5 (`WSTATE + `CTL_OFFSET,WSTATE_reg,index);
23176
23177 push_delta_fx5 (`CTXT_PRIM_0+`CTL_OFFSET,CTXT_PRIM_0_reg,index);
23178 push_delta_fx5 (`CTXT_SEC_0+`CTL_OFFSET,CTXT_SEC_0_reg,index);
23179 push_delta_fx5 (`CTXT_PRIM_1+`CTL_OFFSET,CTXT_PRIM_1_reg,index);
23180 push_delta_fx5 (`CTXT_SEC_1+`CTL_OFFSET,CTXT_SEC_1_reg,index);
23181 push_delta_fx5 (`LSU_CONTROL+`CTL_OFFSET,LSU_CONTROL_reg,index);
23182 push_delta_fx5 (`WATCHPOINT_ADDR+`CTL_OFFSET,WATCHPOINT_ADDR_reg,index);
23183
23184 // NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
23185 // ADD_TSB_CFG
23186 `ifdef ADD_TSB_CFG
23187 push_delta_fx5 (`CTXT_Z_TSB_CFG0+`CTL_OFFSET,ctxt_z_tsb_cfg0_reg,index);
23188 push_delta_fx5 (`CTXT_Z_TSB_CFG1+`CTL_OFFSET,ctxt_z_tsb_cfg1_reg,index);
23189 push_delta_fx5 (`CTXT_Z_TSB_CFG2+`CTL_OFFSET,ctxt_z_tsb_cfg2_reg,index);
23190 push_delta_fx5 (`CTXT_Z_TSB_CFG3+`CTL_OFFSET,ctxt_z_tsb_cfg3_reg,index);
23191 push_delta_fx5 (`CTXT_NZ_TSB_CFG0+`CTL_OFFSET,ctxt_nz_tsb_cfg0_reg,index);
23192 push_delta_fx5 (`CTXT_NZ_TSB_CFG1+`CTL_OFFSET,ctxt_nz_tsb_cfg1_reg,index);
23193 push_delta_fx5 (`CTXT_NZ_TSB_CFG2+`CTL_OFFSET,ctxt_nz_tsb_cfg2_reg,index);
23194 push_delta_fx5 (`CTXT_NZ_TSB_CFG3+`CTL_OFFSET,ctxt_nz_tsb_cfg3_reg,index);
23195 `endif
23196
23197 end //}
23198
23199 // Update GSR for all except write ASR in progess
23200 if (!asi_in_progress) begin // {
23201 push_delta_fx5 (`GSR + `CTL_OFFSET,GSR_wire, index);
23202 end // }
23203
23204 // If lsu_complete & fp_complete assert at same time,
23205 // then the fp_complete is the one that will modify the FSR
23206 if (complete_fx4[`LSU_INDEX] & !complete_fw1[`FP_INDEX]) begin
23207 push_delta_fx5 (`FSR+`CTL_OFFSET,FSR_wire,index);
23208 end
23209
23210 // Non Trap updates of Trap stack & level
23211 if (complete_fx4 && !complete_fx4[`TLU_INDEX]) begin // {
23212 push_delta_fx5 (`TL + `CTL_OFFSET,TL_reg,index);
23213 push_delta_fx5 (`TPC1 + `CTL_OFFSET, TPC1_wire, index);
23214 push_delta_fx5 (`TPC2 + `CTL_OFFSET, TPC2_wire, index);
23215 push_delta_fx5 (`TPC3 + `CTL_OFFSET, TPC3_wire, index);
23216 push_delta_fx5 (`TPC4 + `CTL_OFFSET, TPC4_wire, index);
23217 push_delta_fx5 (`TPC5 + `CTL_OFFSET, TPC5_wire, index);
23218 push_delta_fx5 (`TPC6 + `CTL_OFFSET, TPC6_wire, index);
23219 push_delta_fx5 (`TNPC1 + `CTL_OFFSET, TNPC1_wire, index);
23220 push_delta_fx5 (`TNPC2 + `CTL_OFFSET, TNPC2_wire, index);
23221 push_delta_fx5 (`TNPC3 + `CTL_OFFSET, TNPC3_wire, index);
23222 push_delta_fx5 (`TNPC4 + `CTL_OFFSET, TNPC4_wire, index);
23223 push_delta_fx5 (`TNPC5 + `CTL_OFFSET, TNPC5_wire, index);
23224 push_delta_fx5 (`TNPC6 + `CTL_OFFSET, TNPC6_wire, index);
23225 push_delta_fx5 (`TSTATE1 + `CTL_OFFSET, TSTATE1_wire, index);
23226 push_delta_fx5 (`TSTATE2 + `CTL_OFFSET, TSTATE2_wire, index);
23227 push_delta_fx5 (`TSTATE3 + `CTL_OFFSET, TSTATE3_wire, index);
23228 push_delta_fx5 (`TSTATE4 + `CTL_OFFSET, TSTATE4_wire, index);
23229 push_delta_fx5 (`TSTATE5 + `CTL_OFFSET, TSTATE5_wire, index);
23230 push_delta_fx5 (`TSTATE6 + `CTL_OFFSET, TSTATE6_wire, index);
23231 push_delta_fx5 (`HTSTATE1 + `CTL_OFFSET, HTSTATE1_wire, index);
23232 push_delta_fx5 (`HTSTATE2 + `CTL_OFFSET, HTSTATE2_wire, index);
23233 push_delta_fx5 (`HTSTATE3 + `CTL_OFFSET, HTSTATE3_wire, index);
23234 push_delta_fx5 (`HTSTATE4 + `CTL_OFFSET, HTSTATE4_wire, index);
23235 push_delta_fx5 (`HTSTATE5 + `CTL_OFFSET, HTSTATE5_wire, index);
23236 push_delta_fx5 (`HTSTATE6 + `CTL_OFFSET, HTSTATE6_wire, index);
23237 push_delta_fx5 (`TT1 + `CTL_OFFSET, TT1_wire, index);
23238 push_delta_fx5 (`TT2 + `CTL_OFFSET, TT2_wire, index);
23239 push_delta_fx5 (`TT3 + `CTL_OFFSET, TT3_wire, index);
23240 push_delta_fx5 (`TT4 + `CTL_OFFSET, TT4_wire, index);
23241 push_delta_fx5 (`TT5 + `CTL_OFFSET, TT5_wire, index);
23242 push_delta_fx5 (`TT6 + `CTL_OFFSET, TT6_wire, index);
23243 end //}
23244
23245 end // }
23246endtask
23247
23248//----------------------------------------------------------
23249// Stage FB of delta pipeline
23250task update_fb;
23251
23252 integer i;
23253 reg [7:0] index;
23254
23255 begin // {
23256
23257 `ifndef EMUL_TL
23258 index = delta_fx5[`NEXT_INDEX];
23259
23260 //--------------------
23261 // Pipeline previous stage
23262 for (i=0; i<=delta_fx5[`NEXT_INDEX]; i=i+1) begin // {
23263 delta_fb[i] <= delta_fx5[i];
23264 end
23265 `else
23266 index = 0;
23267 `endif
23268
23269 // ASI/ASR ONLY updates
23270 if (complete_fx5[`ASI_INDEX]) begin // {
23271 push_delta_fb (`GSR + `CTL_OFFSET,GSR_wire, index);
23272 end //}
23273
23274 end // }
23275endtask
23276
23277//----------------------------------------------------------
23278// Stage FW of delta pipeline
23279task update_fw;
23280
23281 integer i;
23282 reg [7:0] index;
23283 reg [38:0] frf_tmp;
23284
23285 begin // {
23286
23287 `ifndef EMUL_TL
23288 index = delta_fb[`NEXT_INDEX];
23289
23290 //--------------------
23291 // Pipeline previous stage
23292 for (i=0; i<=delta_fb[`NEXT_INDEX]; i=i+1) begin // {
23293 delta_fw[i] <= delta_fb[i];
23294 end
23295
23296 // Capture CWP_reg for SAVE/RESTORE
23297 if (imul_complete) begin
23298 delta_fw[`CWP_INDEX] <= CWP_reg;
23299 end
23300 `else
23301 index = 0;
23302 `endif
23303
23304 //-------------------
23305 // Update IRF4
23306`ifndef NAS_NO_IRFFRF
23307 if (complete_fb[`TLU_INDEX]) begin
23308 if (mytid <= 3) begin // {
23309 for (i=0; i<=31; i=i+1) begin // {
23310 push_delta_fw (i,`IRF4_EXU0[(remap(i,oddwin)+irf_offset)],index);
23311 end // }
23312 end // }
23313 else begin // {
23314 for (i=0; i<=31; i=i+1) begin // {
23315 push_delta_fw (i,`IRF4_EXU1[(remap(i,oddwin)+irf_offset)],index);
23316 end // }
23317 end // }
23318 end
23319`endif
23320
23321 //--------------------
23322 // Update FRF4 - Idivs use W2.
23323`ifndef NAS_NO_IRFFRF
23324 if (complete_fb[`IDIV_INDEX]) begin // {
23325 // IF W1 port is also being written, ignore that address
23326 for (i=0; i<=31; i=i+1) begin // {
23327 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
23328 frf_tmp = `FRF4_EVEN[(mytid*32)+i];
23329 push_delta_fw (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
23330 end // }
23331 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
23332 frf_tmp = `FRF4_ODD[(mytid*32)+i];
23333 push_delta_fw (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
23334 end // }
23335 end //}
23336 end // }
23337`endif
23338
23339 end // }
23340
23341endtask
23342
23343//----------------------------------------------------------
23344// Stage FW1 of delta pipeline
23345task update_fw1;
23346
23347 integer i;
23348 reg [7:0] index;
23349
23350 reg [4:0] rdnum;
23351 reg [38:0] frf_tmp;
23352
23353 begin // {
23354
23355 `ifndef EMUL_TL
23356 index = delta_fw[`NEXT_INDEX];
23357
23358 //--------------------
23359 // Pipeline previous stage
23360 for (i=0; i<=delta_fw[`NEXT_INDEX]; i=i+1) begin // {
23361 delta_fw1[i] <= delta_fw[i];
23362 end
23363 `else
23364 index = 0;
23365 `endif
23366
23367 //--------------------
23368 // Update FRF4 - FPops use W1 port.
23369`ifndef NAS_NO_IRFFRF
23370 if (fp_complete) begin // {
23371 // IF W2 port is also being written, ignore that address
23372 for (i=0; i<=31; i=i+1) begin // {
23373 if (!((i == frf_w2_skip_addr) && frf_w2_valid_even)) begin // {
23374 frf_tmp = `FRF4_EVEN[(mytid*32)+i];
23375 push_delta_fw1 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
23376 end // }
23377 if (!((i == frf_w2_skip_addr) && frf_w2_valid_odd)) begin // {
23378 frf_tmp = `FRF4_ODD[(mytid*32)+i];
23379 push_delta_fw1 (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
23380 end // }
23381 end //}
23382 end // }
23383`endif
23384
23385 //-------------------
23386 // Control Registers
23387 if (complete_fw[`IMUL_INDEX]|complete_fw[`IDIV_INDEX]) begin
23388 push_delta_fw1 (`CCR+`CTL_OFFSET,CCR_reg,index);
23389 push_delta_fw1 (`Y+`CTL_OFFSET,Y_reg,index);
23390 push_delta_fw1 (`CWP+`CTL_OFFSET,CWP_reg,index);
23391 push_delta_fw1 (`CANSAVE+`CTL_OFFSET,CANSAVE_reg,index);
23392 push_delta_fw1 (`CANRESTORE+`CTL_OFFSET,CANRESTORE_reg,index);
23393 push_delta_fw1 (`CLEANWIN+`CTL_OFFSET,CLEANWIN_reg,index);
23394 push_delta_fw1 (`OTHERWIN+`CTL_OFFSET,OTHERWIN_reg,index);
23395 push_delta_fw1 (`WSTATE+`CTL_OFFSET,WSTATE_reg,index);
23396 end
23397
23398 // Update Trap Stack now
23399 if (complete_fw[`TLU_INDEX]) begin // {
23400 push_delta_fw1 (`TL + `CTL_OFFSET,TL_reg,index);
23401 push_delta_fw1 (`TPC1 + `CTL_OFFSET, TPC1_wire, index);
23402 push_delta_fw1 (`TPC2 + `CTL_OFFSET, TPC2_wire, index);
23403 push_delta_fw1 (`TPC3 + `CTL_OFFSET, TPC3_wire, index);
23404 push_delta_fw1 (`TPC4 + `CTL_OFFSET, TPC4_wire, index);
23405 push_delta_fw1 (`TPC5 + `CTL_OFFSET, TPC5_wire, index);
23406 push_delta_fw1 (`TPC6 + `CTL_OFFSET, TPC6_wire, index);
23407 push_delta_fw1 (`TNPC1 + `CTL_OFFSET, TNPC1_wire, index);
23408 push_delta_fw1 (`TNPC2 + `CTL_OFFSET, TNPC2_wire, index);
23409 push_delta_fw1 (`TNPC3 + `CTL_OFFSET, TNPC3_wire, index);
23410 push_delta_fw1 (`TNPC4 + `CTL_OFFSET, TNPC4_wire, index);
23411 push_delta_fw1 (`TNPC5 + `CTL_OFFSET, TNPC5_wire, index);
23412 push_delta_fw1 (`TNPC6 + `CTL_OFFSET, TNPC6_wire, index);
23413 push_delta_fw1 (`TSTATE1 + `CTL_OFFSET, TSTATE1_wire, index);
23414 push_delta_fw1 (`TSTATE2 + `CTL_OFFSET, TSTATE2_wire, index);
23415 push_delta_fw1 (`TSTATE3 + `CTL_OFFSET, TSTATE3_wire, index);
23416 push_delta_fw1 (`TSTATE4 + `CTL_OFFSET, TSTATE4_wire, index);
23417 push_delta_fw1 (`TSTATE5 + `CTL_OFFSET, TSTATE5_wire, index);
23418 push_delta_fw1 (`TSTATE6 + `CTL_OFFSET, TSTATE6_wire, index);
23419 push_delta_fw1 (`HTSTATE1 + `CTL_OFFSET, HTSTATE1_wire, index);
23420 push_delta_fw1 (`HTSTATE2 + `CTL_OFFSET, HTSTATE2_wire, index);
23421 push_delta_fw1 (`HTSTATE3 + `CTL_OFFSET, HTSTATE3_wire, index);
23422 push_delta_fw1 (`HTSTATE4 + `CTL_OFFSET, HTSTATE4_wire, index);
23423 push_delta_fw1 (`HTSTATE5 + `CTL_OFFSET, HTSTATE5_wire, index);
23424 push_delta_fw1 (`HTSTATE6 + `CTL_OFFSET, HTSTATE6_wire, index);
23425 push_delta_fw1 (`TT1 + `CTL_OFFSET, TT1_wire, index);
23426 push_delta_fw1 (`TT2 + `CTL_OFFSET, TT2_wire, index);
23427 push_delta_fw1 (`TT3 + `CTL_OFFSET, TT3_wire, index);
23428 push_delta_fw1 (`TT4 + `CTL_OFFSET, TT4_wire, index);
23429 push_delta_fw1 (`TT5 + `CTL_OFFSET, TT5_wire, index);
23430 push_delta_fw1 (`TT6 + `CTL_OFFSET, TT6_wire, index);
23431 end //}
23432
23433 end // }
23434endtask
23435
23436//----------------------------------------------------------
23437// Stage FW2 of delta pipeline
23438task update_fw2;
23439
23440 integer i;
23441 reg [7:0] index;
23442 reg [38:0] frf_tmp;
23443
23444 begin // {
23445
23446 `ifndef EMUL_TL
23447 index = delta_fw1[`NEXT_INDEX];
23448
23449 //--------------------
23450 // Pipeline previous stage
23451 for (i=0; i<=delta_fw1[`NEXT_INDEX]; i=i+1) begin // {
23452 delta_fw2[i] <= delta_fw1[i];
23453 end
23454
23455 delta_fw2[`TIME_INDEX] <= $time;
23456 `else
23457 index = 0;
23458 `endif
23459
23460 // Update Registers that may change asynchronously
23461 // If sstep was already sent by another module,
23462 // don't capture until the next sstep
23463 if (complete_fw1 && !`NASTOP.sstep_early[mytnum]) begin // {
23464 if ((complete_fw1[`ASI_INDEX]|complete_fw1[`LSU_INDEX]) & asi_rdwr_hintp)
23465 push_delta_fw2 (`HINTP + `CTL_OFFSET,asi_updated_hintp,index);
23466 else
23467 push_delta_fw2 (`HINTP + `CTL_OFFSET,HINTP_reg,index);
23468 if ((complete_fw1[`ASI_INDEX]|complete_fw1[`LSU_INDEX]) & asi_rdwr_softint)
23469 push_delta_fw2 (`SOFTINT + `CTL_OFFSET,asi_updated_softint,index);
23470 else
23471 push_delta_fw2 (`SOFTINT + `CTL_OFFSET,rd_SOFTINT_reg,index);
23472 end // }
23473
23474 //-------------------
23475 // Update IRF4
23476`ifndef NAS_NO_IRFFRF
23477 if (complete_fw1[`IMUL_INDEX] |
23478 complete_fw1[`IDIV_INDEX]) begin // {
23479 if (mytid <= 3) begin // {
23480 for (i=0; i<=31; i=i+1) begin // {
23481 push_delta_fw2 (i,`IRF4_EXU0[(remap(i,oddwin)+irf_offset)],index);
23482 end // }
23483 end // }
23484 else begin // {
23485 for (i=0; i<=31; i=i+1) begin // {
23486 push_delta_fw2 (i,`IRF4_EXU1[(remap(i,oddwin)+irf_offset)],index);
23487 end // }
23488 end // }
23489 end // }
23490`endif
23491
23492 //--------------------
23493 // Update FRF4 - fdivs and Imuls use W2 port
23494`ifndef NAS_NO_IRFFRF
23495 if (complete_fw1[`IMUL_INDEX] |
23496 complete_fw1[`FDIV_INDEX] ) begin // {
23497 // IF W1 port is also being written, ignore that address
23498 for (i=0; i<=31; i=i+1) begin // {
23499 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
23500 frf_tmp = `FRF4_EVEN[(mytid*32)+i];
23501 push_delta_fw2 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
23502 end // }
23503 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
23504 frf_tmp = `FRF4_ODD[(mytid*32)+i];
23505 push_delta_fw2 (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
23506 end // }
23507 end //}
23508 end // }
23509`endif
23510
23511 if (complete_fw1[`FP_INDEX] |
23512 complete_fw1[`TLU_INDEX] |
23513 complete_fw1[`FDIV_INDEX]) begin
23514 push_delta_fw2 (`FSR+`CTL_OFFSET,FSR_wire,index);
23515 end
23516
23517 if (complete_fw1) begin
23518 push_delta_fw2 (`I_TAG_ACC+`CTL_OFFSET,itagacc_fw2,index);
23519 push_delta_fw2 (`D_TAG_ACC+`CTL_OFFSET,dtagacc_fw2,index);
23520 push_delta_fw2 (`DSFAR+`CTL_OFFSET,dsfar_fw2,index);
23521 end
23522
23523 end // }
23524endtask
23525
23526//----------------------------------------------------------
23527// Stage FW2 of delta pipeline - for signals that change FW+2 !!
23528task update_fw2_async;
23529
23530 integer i;
23531 reg [7:0] index;
23532 reg [2:0] dummy_fprs;
23533
23534 begin // {
23535
23536 `ifndef EMUL_TL
23537 index = delta_fw2[`NEXT_INDEX];
23538 `else
23539 index = 0;
23540 `endif
23541
23542 // Since FPRS for FPops may have been corrupted by o-o-o loads:
23543 // If fprs_fw2 is != fprs_reg & there are loads in the pipeline
23544 // then assume loads have already updated fprs.
23545 // In that case, create our own fprs_reg by using the valids and
23546 // skip_addr and copy of fprs for this op..
23547 if (complete_fw2[`FP_INDEX] && frf_w1_valid_fw2) begin // {
23548 // o-o-o load has changed fprs already - use dummy
23549 if ((fprs_fw2 != FPRS_reg) && (complete_fw1[`LSU_INDEX] |
23550 complete_fw[`LSU_INDEX] | complete_fb[`LSU_INDEX] |
23551 complete_fx5[`LSU_INDEX] )) begin // {
23552 dummy_fprs = read_prev(`FPRS + `CTL_OFFSET);
23553 dummy_fprs = dummy_fprs |
23554 {1'b0, frf_w1_skip_addr4_fw2, ~frf_w1_skip_addr4_fw2};
23555 push_delta_fw2_async (`FPRS + `CTL_OFFSET,dummy_fprs,index);
23556 end //}
23557 // o-o-o load has NOT changed fprs already - use it
23558 else begin // {
23559 push_delta_fw2_async (`FPRS + `CTL_OFFSET,FPRS_reg,index);
23560 end //}
23561 end //}
23562 // Load FPRS for loads/reads as prev|fprs_fb ..
23563 // since loads may only 'set' bits, not clear ...
23564 else if (complete_fw2[`LSU_INDEX]) begin // {
23565 dummy_fprs = read_prev(`FPRS + `CTL_OFFSET);
23566 dummy_fprs = dummy_fprs | fprs_fw1;
23567 push_delta_fw2_async (`FPRS +`CTL_OFFSET,dummy_fprs,index);
23568 end // }
23569 // Load FPRS for store ASI or FDIV
23570 // FDIV can update FPRS on w1 or w2,
23571 // but the pipe is stalled behind it so no o-o-o loads.
23572 else if ((complete_fw2[`ASI_INDEX]) ||
23573 (complete_fw2[`FDIV_INDEX])) begin // {
23574 push_delta_fw2_async (`FPRS + `CTL_OFFSET,FPRS_reg,index);
23575 end //}
23576
23577 end // }
23578endtask
23579
23580//----------------------------------------------------------
23581// Store latest values into delta
23582// Capture of next PC
23583task update_pc;
23584 reg [7:0] index;
23585 begin
23586 `ifndef EMUL_TL
23587 index = delta_prev[`NEXT_INDEX];
23588 `else
23589 index = 0;
23590 `endif
23591
23592 if (in_wmr & ~`SPC4.rst_wmr_protect) begin // {
23593 push_delta_prev_async ( `PC+`CTL_OFFSET,{16'b0,pc_fw2|1},index);
23594 in_wmr <= 0;
23595 end // }
23596 else
23597 push_delta_prev_async ( `PC+`CTL_OFFSET,{16'b0,pc_fw2},index);
23598 pc_last <= pc_fw2;
23599 cwp_last <= cwp_fw2;
23600 end
23601endtask
23602
23603//----------------------------------------------------------
23604//----------------------------------------------------------
23605// Compare with current state and capture if different
23606task push_delta_fx4;
23607
23608 input [7:0] id;
23609 input [63:0] act_value;
23610 inout [7:0] next;
23611 reg [2:0] win;
23612 reg [1:0] type;
23613
23614 begin // {
23615 if (act_value != read_prev(id)) begin // { // Diff vs prev
23616 calc_cwp(CWP_reg,id,win,type); // special case for 1st stage
23617 write_prev(id,act_value);
23618
23619 `ifndef EMUL_TL
23620 delta_fx4[next] <= {type,win,id,act_value};
23621 next = next+1;
23622 delta_fx4[next] <= 77'hx;
23623 delta_fx4[`NEXT_INDEX] <= next;
23624 if (`PARGS.axis_debug_on) begin
23625 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
23626 mytnum,PC_reg,id,type,win,act_value,$time);
23627 end
23628 `else
23629 if (`PARGS.axis_debug_on) begin
23630 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
23631 mytnum,PC_reg,id,type,win,act_value,$time);
23632 end
23633 `endif
23634 end //}
23635 end //}
23636
23637endtask
23638
23639//----------------------------------------------------------
23640// Compare with current state and capture if different
23641task push_delta_fx5;
23642
23643 input [7:0] id;
23644 input [63:0] act_value;
23645 inout [7:0] next;
23646 reg [2:0] win;
23647 reg [1:0] type;
23648
23649 begin // {
23650 if (act_value != read_prev(id)) begin // { // Diff vs prev
23651 `ifndef EMUL_TL
23652 calc_cwp(delta_fx4[`CWP_INDEX],id,win,type);
23653 write_prev(id,act_value);
23654 delta_fx5[next] <= {type,win,id,act_value};
23655 next = next+1;
23656 delta_fx5[next] <= 77'hx;
23657 delta_fx5[`NEXT_INDEX] <= next;
23658 if (`PARGS.axis_debug_on) begin
23659 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
23660 mytnum,pc_fx4,id,type,win,act_value,$time);
23661 end
23662 `else
23663 calc_cwp(cwp_fx4,id,win,type);
23664 if (`PARGS.axis_debug_on) begin
23665 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
23666 mytnum,pc_fx4,id,type,win,act_value,$time);
23667 end
23668 `endif
23669 end //}
23670 end //}
23671
23672endtask
23673
23674//----------------------------------------------------------
23675// Compare with current state and capture if different
23676task push_delta_fb;
23677
23678 input [7:0] id;
23679 input [63:0] act_value;
23680 inout [7:0] next;
23681 reg [2:0] win;
23682 reg [1:0] type;
23683
23684 begin // {
23685 if (act_value != read_prev(id)) begin // { // Diff vs prev
23686 `ifndef EMUL_TL
23687 calc_cwp(delta_fx5[`CWP_INDEX],id,win,type);
23688 write_prev(id,act_value);
23689 delta_fb[next] <= {type,win,id,act_value};
23690 next = next+1;
23691 delta_fb[next] <= 77'hx;
23692 delta_fb[`NEXT_INDEX] <= next;
23693 if (`PARGS.axis_debug_on) begin
23694 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
23695 mytnum,pc_fx5,id,type,win,act_value,$time);
23696 end
23697 `else
23698 calc_cwp(cwp_fx5,id,win,type);
23699 if (`PARGS.axis_debug_on) begin
23700 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
23701 mytnum,pc_fx5,id,type,win,act_value,$time);
23702 end
23703 `endif
23704 end //}
23705 end //}
23706
23707endtask
23708
23709//----------------------------------------------------------
23710// Compare with current state and capture if different
23711task push_delta_fw;
23712
23713 input [7:0] id;
23714 input [63:0] act_value;
23715 inout [7:0] next;
23716 reg [2:0] win;
23717 reg [1:0] type;
23718
23719 begin // {
23720 if (act_value != read_prev(id)) begin // { // Diff vs prev
23721
23722 `ifndef EMUL_TL
23723 calc_cwp(delta_fb[`CWP_INDEX],id,win,type);
23724 write_prev(id,act_value);
23725 delta_fw[next] <= {type,win,id,act_value};
23726 next = next+1;
23727 delta_fw[next] <= 77'hx;
23728 delta_fw[`NEXT_INDEX] <= next;
23729 if (`PARGS.axis_debug_on) begin
23730 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
23731 mytnum,pc_fb,id,type,win,act_value,$time);
23732 end
23733 `else
23734 calc_cwp(cwp_fb[`CWP_INDEX],id,win,type);
23735 if (`PARGS.axis_debug_on) begin
23736 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
23737 mytnum,pc_fb,id,type,win,act_value,$time);
23738 end
23739 `endif
23740 end //}
23741 end //}
23742
23743endtask
23744
23745//----------------------------------------------------------
23746// Compare with current state and capture if different
23747task push_delta_fw1;
23748
23749 input [7:0] id;
23750 input [63:0] act_value;
23751 inout [7:0] next;
23752 reg [2:0] win;
23753 reg [1:0] type;
23754
23755 begin // {
23756 if (act_value != read_prev(id)) begin // { // Diff vs prev
23757
23758 `ifndef EMUL_TL
23759 calc_cwp(delta_fw[`CWP_INDEX],id,win,type);
23760 write_prev(id,act_value);
23761 delta_fw1[next] <= {type,win,id,act_value};
23762 next = next+1;
23763 delta_fw1[next] <= 77'hx;
23764 delta_fw1[`NEXT_INDEX] <= next;
23765 if (`PARGS.axis_debug_on) begin
23766 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
23767 mytnum,pc_fw,id,type,win,act_value,$time);
23768 end
23769 `else
23770 calc_cwp(cwp_fw,id,win,type);
23771 if (`PARGS.axis_debug_on) begin
23772 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
23773 mytnum,pc_fw,id,type,win,act_value,$time);
23774 end
23775 `endif
23776 end //}
23777 end //}
23778
23779endtask
23780
23781//----------------------------------------------------------
23782// Compare with current state and capture if different
23783task push_delta_fw2;
23784
23785 input [7:0] id;
23786 input [63:0] act_value;
23787 inout [7:0] next;
23788 reg [2:0] win;
23789 reg [1:0] type;
23790
23791 begin // {
23792 if (act_value != read_prev(id)) begin // { // Diff vs prev
23793
23794 `ifndef EMUL_TL
23795 calc_cwp(delta_fw1[`CWP_INDEX],id,win,type);
23796 write_prev(id,act_value);
23797 delta_fw2[next] <= {type,win,id,act_value};
23798 next = next+1;
23799 delta_fw2[next] <= 77'hx;
23800 delta_fw2[`NEXT_INDEX] <= next;
23801 if (`PARGS.axis_debug_on) begin
23802 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
23803 mytnum,pc_fw1,id,type,win,act_value,$time);
23804 end
23805 `else
23806 calc_cwp(cwp_fw1,id,win,type);
23807 if (`PARGS.axis_debug_on) begin
23808 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
23809 mytnum,pc_fw1,id,type,win,act_value,$time);
23810 end
23811 `endif
23812 end //}
23813 end //}
23814
23815endtask
23816
23817//----------------------------------------------------------
23818// Compare with current state and capture if different
23819// This is for late changing registers
23820// Use blocking assignments.
23821task push_delta_fw2_async;
23822
23823 input [7:0] id;
23824 input [63:0] act_value;
23825 inout [7:0] next;
23826 reg [2:0] win;
23827 reg [1:0] type;
23828
23829 begin // {
23830 if (act_value != read_prev(id)) begin // { // Diff vs prev
23831
23832 `ifndef EMUL_TL
23833 calc_cwp(delta_fw2[`CWP_INDEX],id,win,type);
23834 write_prev_async(id,act_value);
23835 delta_fw2[next] = {type,win,id,act_value};
23836 next = next+1;
23837 delta_fw2[next] = 77'hx;
23838 delta_fw2[`NEXT_INDEX] = next;
23839 if (`PARGS.axis_debug_on) begin
23840 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
23841 mytnum,pc_fw1,id,type,win,act_value,$time);
23842 end
23843 `else
23844 calc_cwp(cwp_fw2,id,win,type);
23845 if (`PARGS.axis_debug_on) begin
23846 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
23847 mytnum,pc_fw1,id,type,win,act_value,$time);
23848 end
23849 `endif
23850 end //}
23851 end //}
23852
23853endtask
23854
23855
23856//----------------------------------------------------------
23857// Compare with current state and capture if different
23858// Use blocking assignments so that push_simics will work
23859task push_delta_prev_async;
23860
23861 input [7:0] id;
23862 input [63:0] act_value;
23863 inout [7:0] next;
23864 reg [2:0] win;
23865 reg [1:0] type;
23866
23867 begin // {
23868
23869 if (act_value != read_prev(id)) begin // { // Diff vs prev
23870
23871 `ifndef EMUL_TL
23872 calc_cwp(delta_prev[`CWP_INDEX],id,win,type);
23873 write_prev_async(id,act_value);
23874 delta_prev[next] = {type,win,id,act_value};
23875 next = next+1;
23876 delta_prev[next] = 77'hx;
23877 delta_prev[`NEXT_INDEX] = next;
23878 if (`PARGS.axis_debug_on) begin
23879 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
23880 mytnum,pc_last,id,type,win,act_value,$time);
23881 end
23882 `else
23883 if (`PARGS.axis_debug_on) begin
23884 calc_cwp(cwp_last,id,win,type);
23885 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
23886 mytnum,pc_last,id,type,win,act_value,$time);
23887 end
23888 `endif
23889 end //}
23890 end //}
23891
23892endtask
23893
23894//----------------------------------------------------------
23895// prev of delta pipeline
23896task update_prev;
23897 integer i;
23898
23899 begin // {
23900 `ifndef EMUL_TL
23901 //--------------------
23902 // Pipeline previous stage
23903 for (i=0; i<=delta_fw2[`NEXT_INDEX]; i=i+1) begin // {
23904 delta_prev[i] <= delta_fw2[i];
23905 end
23906 `endif
23907 end //}
23908
23909endtask
23910
23911//----------------------------------------------------------
23912//----------------------------------------------------------
23913// Sort delta list in register ID order, then push to simics
23914// Or print deltas if sas check disabled ..
23915task push_simics;
23916
23917integer i;
23918reg [7:0] act_type;
23919integer act_level;
23920reg [7:0] regnum;
23921reg [2:0] win;
23922reg [1:0] type;
23923reg [63:0] value;
23924reg [63:0] pc;
23925reg [63:0] time_fw2;
23926
23927 begin // {
23928
23929 `ifndef EMUL_TL
23930 `NASTOP.delta_cnt = 0;
23931 sort_delta;
23932
23933 //--------------------
23934 // Order of registers reported to simics must be:
23935 // Global 0-7 aka prev_reg[0:7]
23936 // Window 8-23 aka prev_reg[8:23]
23937 // Floating 0-63 aka prev_reg[200:263]
23938 // Control 32-143 aka prev_reg[32:143]
23939
23940 act_level = delta_prev[`GL_INDEX]; // GL
23941 time_fw2 = delta_prev[`TIME_INDEX]; // Finish time
23942
23943
23944 //--------------------
23945 for (i=`FIRST_INDEX; i<delta_prev[`NEXT_INDEX]; i=i+1) begin // {
23946 {type,win,regnum,value} = delta_prev[i];
23947
23948 if (regnum<=7) begin // {
23949 act_type = "G";
23950 if (`PARGS.nas_check_on) begin // {
23951 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
23952 act_level, regnum, value);
23953 end // }
23954 else if (`PARGS.show_delta_on) begin // {
23955 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
23956 end //}
23957 end // }
23958 else if (regnum<=23) begin // { %o0-%l7, %l0-%l7
23959 act_type = "W";
23960 if (`PARGS.nas_check_on) begin // {
23961 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
23962 win, regnum, value);
23963 end // }
23964 else if (`PARGS.show_delta_on) begin // {
23965 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
23966 end //}
23967 end // }
23968 else if (regnum<=31) begin // { %i0-%i7
23969 act_type = "W";
23970 if (`PARGS.nas_check_on) begin // {
23971 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
23972 win, (regnum-16), value);
23973 end // }
23974 else if (`PARGS.show_delta_on) begin // {
23975 `NASTOP.print_delta (mytnum,act_type,win,(regnum-16),value);
23976 end //}
23977 end // }
23978 else if (regnum<=(64+`FP_OFFSET)) begin // {
23979 act_type = "F";
23980 if (`PARGS.nas_check_on) begin // {
23981 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
23982 (regnum-`FP_OFFSET), value);
23983 end // }
23984 else if (`PARGS.show_delta_on) begin // {
23985 `NASTOP.print_delta (mytnum,act_type,win,(regnum-`FP_OFFSET),value);
23986 end //}
23987 end // }
23988 else if ((regnum>=(32+`CTL_OFFSET))&(regnum<=(143+`CTL_OFFSET))) begin // {
23989 act_type = "C";
23990 if (`PARGS.nas_check_on) begin // {
23991 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
23992 (regnum-`CTL_OFFSET), value);
23993 end //}
23994 else if (`PARGS.show_delta_on) begin // {
23995 `NASTOP.print_delta (mytnum,act_type,win,(regnum-`CTL_OFFSET),value);
23996 end //}
23997 end // }
23998 else begin // {
23999 `PR_ERROR ("nas", `ERROR, " - T%0d Bench problem. push_simics has bad regnum", mytnum);
24000 end // }
24001 end // }
24002
24003 //--------------------
24004 // Push Opcode
24005 act_type = "C";
24006 regnum = `OPCODE;
24007 value = delta_prev[`OPCODE_INDEX];
24008 if (`PARGS.nas_check_on) begin // {
24009 `ifdef OPCODE_COMPARE
24010 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
24011 regnum, value);
24012 `endif
24013 end //}
24014 else if (`PARGS.show_delta_on) begin // {
24015 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
24016 end //}
24017
24018
24019 //--------------------
24020 // Push End of Instruction Delimiter
24021 // The value field for this PUSH equals the PC for this instruction.
24022 // so that printing to the logfile works correctly.
24023 // prev_reg[`PC] = current instruction PC
24024 // delta_reg[`PC] = PC at end of current instruction
24025 act_type = "X";
24026 pc = delta_prev[`PC_INDEX];
24027 if (`PARGS.nas_check_on) begin // {
24028 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
24029 delta_fw2[`CWP_INDEX], `END_INSTR, pc);
24030 end // }
24031 else if (`PARGS.show_delta_on) begin // {
24032 `NASTOP.print_delta (mytnum,act_type,delta_fw2[`CWP_INDEX],`END_INSTR,0);
24033 end //}
24034 if (! `PARGS.nas_check_on) begin // {
24035 `PR_NORMAL ("nas", `NORMAL, "@%0d T%0d %h (Unchecked..)",
24036 $time, mytnum, {16'b0,pc});
24037 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
24038 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
24039 end //}
24040
24041 `else
24042 if (! `PARGS.nas_check_on) begin // {
24043 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
24044 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
24045 end //}
24046 `endif
24047 end // }
24048endtask
24049
24050
24051//----------------------------------------------------------
24052// Save current window to previous window, then copy new window to current window
24053task copy_win;
24054 input [2:0] new_cwp;
24055 input [2:0] old_cwp;
24056 integer i;
24057
24058 begin // {
24059
24060 // Save current window to Old window
24061 case (old_cwp)
24062 0: begin // {
24063 win0_reg8 = prev_reg8;
24064 win1_reg24 = prev_reg8;
24065 win0_reg9 = prev_reg9;
24066 win1_reg25 = prev_reg9;
24067 win0_reg10 = prev_reg10;
24068 win1_reg26 = prev_reg10;
24069 win0_reg11 = prev_reg11;
24070 win1_reg27 = prev_reg11;
24071 win0_reg12 = prev_reg12;
24072 win1_reg28 = prev_reg12;
24073 win0_reg13 = prev_reg13;
24074 win1_reg29 = prev_reg13;
24075 win0_reg14 = prev_reg14;
24076 win1_reg30 = prev_reg14;
24077 win0_reg15 = prev_reg15;
24078 win1_reg31 = prev_reg15;
24079 win0_reg16 = prev_reg16;
24080 win0_reg17 = prev_reg17;
24081 win0_reg18 = prev_reg18;
24082 win0_reg19 = prev_reg19;
24083 win0_reg20 = prev_reg20;
24084 win0_reg21 = prev_reg21;
24085 win0_reg22 = prev_reg22;
24086 win0_reg23 = prev_reg23;
24087 win0_reg24 = prev_reg24;
24088 win7_reg8 = prev_reg24;
24089 win0_reg25 = prev_reg25;
24090 win7_reg9 = prev_reg25;
24091 win0_reg26 = prev_reg26;
24092 win7_reg10 = prev_reg26;
24093 win0_reg27 = prev_reg27;
24094 win7_reg11 = prev_reg27;
24095 win0_reg28 = prev_reg28;
24096 win7_reg12 = prev_reg28;
24097 win0_reg29 = prev_reg29;
24098 win7_reg13 = prev_reg29;
24099 win0_reg30 = prev_reg30;
24100 win7_reg14 = prev_reg30;
24101 win0_reg31 = prev_reg31;
24102 win7_reg15 = prev_reg31;
24103 end // }
24104 1: begin // {
24105 win1_reg8 = prev_reg8;
24106 win2_reg24 = prev_reg8;
24107 win1_reg9 = prev_reg9;
24108 win2_reg25 = prev_reg9;
24109 win1_reg10 = prev_reg10;
24110 win2_reg26 = prev_reg10;
24111 win1_reg11 = prev_reg11;
24112 win2_reg27 = prev_reg11;
24113 win1_reg12 = prev_reg12;
24114 win2_reg28 = prev_reg12;
24115 win1_reg13 = prev_reg13;
24116 win2_reg29 = prev_reg13;
24117 win1_reg14 = prev_reg14;
24118 win2_reg30 = prev_reg14;
24119 win1_reg15 = prev_reg15;
24120 win2_reg31 = prev_reg15;
24121 win1_reg16 = prev_reg16;
24122 win1_reg17 = prev_reg17;
24123 win1_reg18 = prev_reg18;
24124 win1_reg19 = prev_reg19;
24125 win1_reg20 = prev_reg20;
24126 win1_reg21 = prev_reg21;
24127 win1_reg22 = prev_reg22;
24128 win1_reg23 = prev_reg23;
24129 win1_reg24 = prev_reg24;
24130 win0_reg8 = prev_reg24;
24131 win1_reg25 = prev_reg25;
24132 win0_reg9 = prev_reg25;
24133 win1_reg26 = prev_reg26;
24134 win0_reg10 = prev_reg26;
24135 win1_reg27 = prev_reg27;
24136 win0_reg11 = prev_reg27;
24137 win1_reg28 = prev_reg28;
24138 win0_reg12 = prev_reg28;
24139 win1_reg29 = prev_reg29;
24140 win0_reg13 = prev_reg29;
24141 win1_reg30 = prev_reg30;
24142 win0_reg14 = prev_reg30;
24143 win1_reg31 = prev_reg31;
24144 win0_reg15 = prev_reg31;
24145 end // }
24146 2: begin // {
24147 win2_reg8 = prev_reg8;
24148 win3_reg24 = prev_reg8;
24149 win2_reg9 = prev_reg9;
24150 win3_reg25 = prev_reg9;
24151 win2_reg10 = prev_reg10;
24152 win3_reg26 = prev_reg10;
24153 win2_reg11 = prev_reg11;
24154 win3_reg27 = prev_reg11;
24155 win2_reg12 = prev_reg12;
24156 win3_reg28 = prev_reg12;
24157 win2_reg13 = prev_reg13;
24158 win3_reg29 = prev_reg13;
24159 win2_reg14 = prev_reg14;
24160 win3_reg30 = prev_reg14;
24161 win2_reg15 = prev_reg15;
24162 win3_reg31 = prev_reg15;
24163 win2_reg16 = prev_reg16;
24164 win2_reg17 = prev_reg17;
24165 win2_reg18 = prev_reg18;
24166 win2_reg19 = prev_reg19;
24167 win2_reg20 = prev_reg20;
24168 win2_reg21 = prev_reg21;
24169 win2_reg22 = prev_reg22;
24170 win2_reg23 = prev_reg23;
24171 win2_reg24 = prev_reg24;
24172 win1_reg8 = prev_reg24;
24173 win2_reg25 = prev_reg25;
24174 win1_reg9 = prev_reg25;
24175 win2_reg26 = prev_reg26;
24176 win1_reg10 = prev_reg26;
24177 win2_reg27 = prev_reg27;
24178 win1_reg11 = prev_reg27;
24179 win2_reg28 = prev_reg28;
24180 win1_reg12 = prev_reg28;
24181 win2_reg29 = prev_reg29;
24182 win1_reg13 = prev_reg29;
24183 win2_reg30 = prev_reg30;
24184 win1_reg14 = prev_reg30;
24185 win2_reg31 = prev_reg31;
24186 win1_reg15 = prev_reg31;
24187 end // }
24188 3: begin // {
24189 win3_reg8 = prev_reg8;
24190 win4_reg24 = prev_reg8;
24191 win3_reg9 = prev_reg9;
24192 win4_reg25 = prev_reg9;
24193 win3_reg10 = prev_reg10;
24194 win4_reg26 = prev_reg10;
24195 win3_reg11 = prev_reg11;
24196 win4_reg27 = prev_reg11;
24197 win3_reg12 = prev_reg12;
24198 win4_reg28 = prev_reg12;
24199 win3_reg13 = prev_reg13;
24200 win4_reg29 = prev_reg13;
24201 win3_reg14 = prev_reg14;
24202 win4_reg30 = prev_reg14;
24203 win3_reg15 = prev_reg15;
24204 win4_reg31 = prev_reg15;
24205 win3_reg16 = prev_reg16;
24206 win3_reg17 = prev_reg17;
24207 win3_reg18 = prev_reg18;
24208 win3_reg19 = prev_reg19;
24209 win3_reg20 = prev_reg20;
24210 win3_reg21 = prev_reg21;
24211 win3_reg22 = prev_reg22;
24212 win3_reg23 = prev_reg23;
24213 win3_reg24 = prev_reg24;
24214 win2_reg8 = prev_reg24;
24215 win3_reg25 = prev_reg25;
24216 win2_reg9 = prev_reg25;
24217 win3_reg26 = prev_reg26;
24218 win2_reg10 = prev_reg26;
24219 win3_reg27 = prev_reg27;
24220 win2_reg11 = prev_reg27;
24221 win3_reg28 = prev_reg28;
24222 win2_reg12 = prev_reg28;
24223 win3_reg29 = prev_reg29;
24224 win2_reg13 = prev_reg29;
24225 win3_reg30 = prev_reg30;
24226 win2_reg14 = prev_reg30;
24227 win3_reg31 = prev_reg31;
24228 win2_reg15 = prev_reg31;
24229 end // }
24230 4: begin // {
24231 win4_reg8 = prev_reg8;
24232 win5_reg24 = prev_reg8;
24233 win4_reg9 = prev_reg9;
24234 win5_reg25 = prev_reg9;
24235 win4_reg10 = prev_reg10;
24236 win5_reg26 = prev_reg10;
24237 win4_reg11 = prev_reg11;
24238 win5_reg27 = prev_reg11;
24239 win4_reg12 = prev_reg12;
24240 win5_reg28 = prev_reg12;
24241 win4_reg13 = prev_reg13;
24242 win5_reg29 = prev_reg13;
24243 win4_reg14 = prev_reg14;
24244 win5_reg30 = prev_reg14;
24245 win4_reg15 = prev_reg15;
24246 win5_reg31 = prev_reg15;
24247 win4_reg16 = prev_reg16;
24248 win4_reg17 = prev_reg17;
24249 win4_reg18 = prev_reg18;
24250 win4_reg19 = prev_reg19;
24251 win4_reg20 = prev_reg20;
24252 win4_reg21 = prev_reg21;
24253 win4_reg22 = prev_reg22;
24254 win4_reg23 = prev_reg23;
24255 win4_reg24 = prev_reg24;
24256 win3_reg8 = prev_reg24;
24257 win4_reg25 = prev_reg25;
24258 win3_reg9 = prev_reg25;
24259 win4_reg26 = prev_reg26;
24260 win3_reg10 = prev_reg26;
24261 win4_reg27 = prev_reg27;
24262 win3_reg11 = prev_reg27;
24263 win4_reg28 = prev_reg28;
24264 win3_reg12 = prev_reg28;
24265 win4_reg29 = prev_reg29;
24266 win3_reg13 = prev_reg29;
24267 win4_reg30 = prev_reg30;
24268 win3_reg14 = prev_reg30;
24269 win4_reg31 = prev_reg31;
24270 win3_reg15 = prev_reg31;
24271 end // }
24272 5: begin // {
24273 win5_reg8 = prev_reg8;
24274 win6_reg24 = prev_reg8;
24275 win5_reg9 = prev_reg9;
24276 win6_reg25 = prev_reg9;
24277 win5_reg10 = prev_reg10;
24278 win6_reg26 = prev_reg10;
24279 win5_reg11 = prev_reg11;
24280 win6_reg27 = prev_reg11;
24281 win5_reg12 = prev_reg12;
24282 win6_reg28 = prev_reg12;
24283 win5_reg13 = prev_reg13;
24284 win6_reg29 = prev_reg13;
24285 win5_reg14 = prev_reg14;
24286 win6_reg30 = prev_reg14;
24287 win5_reg15 = prev_reg15;
24288 win6_reg31 = prev_reg15;
24289 win5_reg16 = prev_reg16;
24290 win5_reg17 = prev_reg17;
24291 win5_reg18 = prev_reg18;
24292 win5_reg19 = prev_reg19;
24293 win5_reg20 = prev_reg20;
24294 win5_reg21 = prev_reg21;
24295 win5_reg22 = prev_reg22;
24296 win5_reg23 = prev_reg23;
24297 win5_reg24 = prev_reg24;
24298 win4_reg8 = prev_reg24;
24299 win5_reg25 = prev_reg25;
24300 win4_reg9 = prev_reg25;
24301 win5_reg26 = prev_reg26;
24302 win4_reg10 = prev_reg26;
24303 win5_reg27 = prev_reg27;
24304 win4_reg11 = prev_reg27;
24305 win5_reg28 = prev_reg28;
24306 win4_reg12 = prev_reg28;
24307 win5_reg29 = prev_reg29;
24308 win4_reg13 = prev_reg29;
24309 win5_reg30 = prev_reg30;
24310 win4_reg14 = prev_reg30;
24311 win5_reg31 = prev_reg31;
24312 win4_reg15 = prev_reg31;
24313 end // }
24314 6: begin // {
24315 win6_reg8 = prev_reg8;
24316 win7_reg24 = prev_reg8;
24317 win6_reg9 = prev_reg9;
24318 win7_reg25 = prev_reg9;
24319 win6_reg10 = prev_reg10;
24320 win7_reg26 = prev_reg10;
24321 win6_reg11 = prev_reg11;
24322 win7_reg27 = prev_reg11;
24323 win6_reg12 = prev_reg12;
24324 win7_reg28 = prev_reg12;
24325 win6_reg13 = prev_reg13;
24326 win7_reg29 = prev_reg13;
24327 win6_reg14 = prev_reg14;
24328 win7_reg30 = prev_reg14;
24329 win6_reg15 = prev_reg15;
24330 win7_reg31 = prev_reg15;
24331 win6_reg16 = prev_reg16;
24332 win6_reg17 = prev_reg17;
24333 win6_reg18 = prev_reg18;
24334 win6_reg19 = prev_reg19;
24335 win6_reg20 = prev_reg20;
24336 win6_reg21 = prev_reg21;
24337 win6_reg22 = prev_reg22;
24338 win6_reg23 = prev_reg23;
24339 win6_reg24 = prev_reg24;
24340 win5_reg8 = prev_reg24;
24341 win6_reg25 = prev_reg25;
24342 win5_reg9 = prev_reg25;
24343 win6_reg26 = prev_reg26;
24344 win5_reg10 = prev_reg26;
24345 win6_reg27 = prev_reg27;
24346 win5_reg11 = prev_reg27;
24347 win6_reg28 = prev_reg28;
24348 win5_reg12 = prev_reg28;
24349 win6_reg29 = prev_reg29;
24350 win5_reg13 = prev_reg29;
24351 win6_reg30 = prev_reg30;
24352 win5_reg14 = prev_reg30;
24353 win6_reg31 = prev_reg31;
24354 win5_reg15 = prev_reg31;
24355 end // }
24356 7: begin // {
24357 win7_reg8 = prev_reg8;
24358 win0_reg24 = prev_reg8;
24359 win7_reg9 = prev_reg9;
24360 win0_reg25 = prev_reg9;
24361 win7_reg10 = prev_reg10;
24362 win0_reg26 = prev_reg10;
24363 win7_reg11 = prev_reg11;
24364 win0_reg27 = prev_reg11;
24365 win7_reg12 = prev_reg12;
24366 win0_reg28 = prev_reg12;
24367 win7_reg13 = prev_reg13;
24368 win0_reg29 = prev_reg13;
24369 win7_reg14 = prev_reg14;
24370 win0_reg30 = prev_reg14;
24371 win7_reg15 = prev_reg15;
24372 win0_reg31 = prev_reg15;
24373 win7_reg16 = prev_reg16;
24374 win7_reg17 = prev_reg17;
24375 win7_reg18 = prev_reg18;
24376 win7_reg19 = prev_reg19;
24377 win7_reg20 = prev_reg20;
24378 win7_reg21 = prev_reg21;
24379 win7_reg22 = prev_reg22;
24380 win7_reg23 = prev_reg23;
24381 win7_reg24 = prev_reg24;
24382 win6_reg8 = prev_reg24;
24383 win7_reg25 = prev_reg25;
24384 win6_reg9 = prev_reg25;
24385 win7_reg26 = prev_reg26;
24386 win6_reg10 = prev_reg26;
24387 win7_reg27 = prev_reg27;
24388 win6_reg11 = prev_reg27;
24389 win7_reg28 = prev_reg28;
24390 win6_reg12 = prev_reg28;
24391 win7_reg29 = prev_reg29;
24392 win6_reg13 = prev_reg29;
24393 win7_reg30 = prev_reg30;
24394 win6_reg14 = prev_reg30;
24395 win7_reg31 = prev_reg31;
24396 win6_reg15 = prev_reg31;
24397 end // }
24398
24399 endcase
24400
24401 // Copy New window to current window
24402 case (new_cwp)
24403 0: begin // {
24404 prev_reg8 = win0_reg8;
24405 prev_reg9 = win0_reg9;
24406 prev_reg10 = win0_reg10;
24407 prev_reg11 = win0_reg11;
24408 prev_reg12 = win0_reg12;
24409 prev_reg13 = win0_reg13;
24410 prev_reg14 = win0_reg14;
24411 prev_reg15 = win0_reg15;
24412 prev_reg16 = win0_reg16;
24413 prev_reg17 = win0_reg17;
24414 prev_reg18 = win0_reg18;
24415 prev_reg19 = win0_reg19;
24416 prev_reg20 = win0_reg20;
24417 prev_reg21 = win0_reg21;
24418 prev_reg22 = win0_reg22;
24419 prev_reg23 = win0_reg23;
24420 prev_reg24 = win0_reg24;
24421 prev_reg25 = win0_reg25;
24422 prev_reg26 = win0_reg26;
24423 prev_reg27 = win0_reg27;
24424 prev_reg28 = win0_reg28;
24425 prev_reg29 = win0_reg29;
24426 prev_reg30 = win0_reg30;
24427 prev_reg31 = win0_reg31;
24428 end // }
24429
24430 1: begin // {
24431 prev_reg8 = win1_reg8;
24432 prev_reg9 = win1_reg9;
24433 prev_reg10 = win1_reg10;
24434 prev_reg11 = win1_reg11;
24435 prev_reg12 = win1_reg12;
24436 prev_reg13 = win1_reg13;
24437 prev_reg14 = win1_reg14;
24438 prev_reg15 = win1_reg15;
24439 prev_reg16 = win1_reg16;
24440 prev_reg17 = win1_reg17;
24441 prev_reg18 = win1_reg18;
24442 prev_reg19 = win1_reg19;
24443 prev_reg20 = win1_reg20;
24444 prev_reg21 = win1_reg21;
24445 prev_reg22 = win1_reg22;
24446 prev_reg23 = win1_reg23;
24447 prev_reg24 = win1_reg24;
24448 prev_reg25 = win1_reg25;
24449 prev_reg26 = win1_reg26;
24450 prev_reg27 = win1_reg27;
24451 prev_reg28 = win1_reg28;
24452 prev_reg29 = win1_reg29;
24453 prev_reg30 = win1_reg30;
24454 prev_reg31 = win1_reg31;
24455 end // }
24456
24457 2: begin // {
24458 prev_reg8 = win2_reg8;
24459 prev_reg9 = win2_reg9;
24460 prev_reg10 = win2_reg10;
24461 prev_reg11 = win2_reg11;
24462 prev_reg12 = win2_reg12;
24463 prev_reg13 = win2_reg13;
24464 prev_reg14 = win2_reg14;
24465 prev_reg15 = win2_reg15;
24466 prev_reg16 = win2_reg16;
24467 prev_reg17 = win2_reg17;
24468 prev_reg18 = win2_reg18;
24469 prev_reg19 = win2_reg19;
24470 prev_reg20 = win2_reg20;
24471 prev_reg21 = win2_reg21;
24472 prev_reg22 = win2_reg22;
24473 prev_reg23 = win2_reg23;
24474 prev_reg24 = win2_reg24;
24475 prev_reg25 = win2_reg25;
24476 prev_reg26 = win2_reg26;
24477 prev_reg27 = win2_reg27;
24478 prev_reg28 = win2_reg28;
24479 prev_reg29 = win2_reg29;
24480 prev_reg30 = win2_reg30;
24481 prev_reg31 = win2_reg31;
24482 end // }
24483
24484 3: begin // {
24485 prev_reg8 = win3_reg8;
24486 prev_reg9 = win3_reg9;
24487 prev_reg10 = win3_reg10;
24488 prev_reg11 = win3_reg11;
24489 prev_reg12 = win3_reg12;
24490 prev_reg13 = win3_reg13;
24491 prev_reg14 = win3_reg14;
24492 prev_reg15 = win3_reg15;
24493 prev_reg16 = win3_reg16;
24494 prev_reg17 = win3_reg17;
24495 prev_reg18 = win3_reg18;
24496 prev_reg19 = win3_reg19;
24497 prev_reg20 = win3_reg20;
24498 prev_reg21 = win3_reg21;
24499 prev_reg22 = win3_reg22;
24500 prev_reg23 = win3_reg23;
24501 prev_reg24 = win3_reg24;
24502 prev_reg25 = win3_reg25;
24503 prev_reg26 = win3_reg26;
24504 prev_reg27 = win3_reg27;
24505 prev_reg28 = win3_reg28;
24506 prev_reg29 = win3_reg29;
24507 prev_reg30 = win3_reg30;
24508 prev_reg31 = win3_reg31;
24509 end // }
24510
24511 4: begin // {
24512 prev_reg8 = win4_reg8;
24513 prev_reg9 = win4_reg9;
24514 prev_reg10 = win4_reg10;
24515 prev_reg11 = win4_reg11;
24516 prev_reg12 = win4_reg12;
24517 prev_reg13 = win4_reg13;
24518 prev_reg14 = win4_reg14;
24519 prev_reg15 = win4_reg15;
24520 prev_reg16 = win4_reg16;
24521 prev_reg17 = win4_reg17;
24522 prev_reg18 = win4_reg18;
24523 prev_reg19 = win4_reg19;
24524 prev_reg20 = win4_reg20;
24525 prev_reg21 = win4_reg21;
24526 prev_reg22 = win4_reg22;
24527 prev_reg23 = win4_reg23;
24528 prev_reg24 = win4_reg24;
24529 prev_reg25 = win4_reg25;
24530 prev_reg26 = win4_reg26;
24531 prev_reg27 = win4_reg27;
24532 prev_reg28 = win4_reg28;
24533 prev_reg29 = win4_reg29;
24534 prev_reg30 = win4_reg30;
24535 prev_reg31 = win4_reg31;
24536 end // }
24537
24538 5: begin // {
24539 prev_reg8 = win5_reg8;
24540 prev_reg9 = win5_reg9;
24541 prev_reg10 = win5_reg10;
24542 prev_reg11 = win5_reg11;
24543 prev_reg12 = win5_reg12;
24544 prev_reg13 = win5_reg13;
24545 prev_reg14 = win5_reg14;
24546 prev_reg15 = win5_reg15;
24547 prev_reg16 = win5_reg16;
24548 prev_reg17 = win5_reg17;
24549 prev_reg18 = win5_reg18;
24550 prev_reg19 = win5_reg19;
24551 prev_reg20 = win5_reg20;
24552 prev_reg21 = win5_reg21;
24553 prev_reg22 = win5_reg22;
24554 prev_reg23 = win5_reg23;
24555 prev_reg24 = win5_reg24;
24556 prev_reg25 = win5_reg25;
24557 prev_reg26 = win5_reg26;
24558 prev_reg27 = win5_reg27;
24559 prev_reg28 = win5_reg28;
24560 prev_reg29 = win5_reg29;
24561 prev_reg30 = win5_reg30;
24562 prev_reg31 = win5_reg31;
24563 end // }
24564
24565 6: begin // {
24566 prev_reg8 = win6_reg8;
24567 prev_reg9 = win6_reg9;
24568 prev_reg10 = win6_reg10;
24569 prev_reg11 = win6_reg11;
24570 prev_reg12 = win6_reg12;
24571 prev_reg13 = win6_reg13;
24572 prev_reg14 = win6_reg14;
24573 prev_reg15 = win6_reg15;
24574 prev_reg16 = win6_reg16;
24575 prev_reg17 = win6_reg17;
24576 prev_reg18 = win6_reg18;
24577 prev_reg19 = win6_reg19;
24578 prev_reg20 = win6_reg20;
24579 prev_reg21 = win6_reg21;
24580 prev_reg22 = win6_reg22;
24581 prev_reg23 = win6_reg23;
24582 prev_reg24 = win6_reg24;
24583 prev_reg25 = win6_reg25;
24584 prev_reg26 = win6_reg26;
24585 prev_reg27 = win6_reg27;
24586 prev_reg28 = win6_reg28;
24587 prev_reg29 = win6_reg29;
24588 prev_reg30 = win6_reg30;
24589 prev_reg31 = win6_reg31;
24590 end // }
24591
24592 7: begin // {
24593 prev_reg8 = win7_reg8;
24594 prev_reg9 = win7_reg9;
24595 prev_reg10 = win7_reg10;
24596 prev_reg11 = win7_reg11;
24597 prev_reg12 = win7_reg12;
24598 prev_reg13 = win7_reg13;
24599 prev_reg14 = win7_reg14;
24600 prev_reg15 = win7_reg15;
24601 prev_reg16 = win7_reg16;
24602 prev_reg17 = win7_reg17;
24603 prev_reg18 = win7_reg18;
24604 prev_reg19 = win7_reg19;
24605 prev_reg20 = win7_reg20;
24606 prev_reg21 = win7_reg21;
24607 prev_reg22 = win7_reg22;
24608 prev_reg23 = win7_reg23;
24609 prev_reg24 = win7_reg24;
24610 prev_reg25 = win7_reg25;
24611 prev_reg26 = win7_reg26;
24612 prev_reg27 = win7_reg27;
24613 prev_reg28 = win7_reg28;
24614 prev_reg29 = win7_reg29;
24615 prev_reg30 = win7_reg30;
24616 prev_reg31 = win7_reg31;
24617 end // }
24618
24619 endcase
24620 end // }
24621endtask
24622
24623//----------------------------------------------------------
24624// Save current global to previous global, then copy new global to current global
24625task copy_global;
24626 input [2:0] new_gl;
24627 input [2:0] old_gl;
24628 integer i;
24629
24630 begin // {
24631
24632 // Save current global to Old global
24633 case (old_gl)
24634 0: begin // {
24635 gl0_reg0 = prev_reg0;
24636 gl0_reg1 = prev_reg1;
24637 gl0_reg2 = prev_reg2;
24638 gl0_reg3 = prev_reg3;
24639 gl0_reg4 = prev_reg4;
24640 gl0_reg5 = prev_reg5;
24641 gl0_reg6 = prev_reg6;
24642 gl0_reg7 = prev_reg7;
24643 end // }
24644 1: begin // {
24645 gl1_reg0 = prev_reg0;
24646 gl1_reg1 = prev_reg1;
24647 gl1_reg2 = prev_reg2;
24648 gl1_reg3 = prev_reg3;
24649 gl1_reg4 = prev_reg4;
24650 gl1_reg5 = prev_reg5;
24651 gl1_reg6 = prev_reg6;
24652 gl1_reg7 = prev_reg7;
24653 end // }
24654 2: begin // {
24655 gl2_reg0 = prev_reg0;
24656 gl2_reg1 = prev_reg1;
24657 gl2_reg2 = prev_reg2;
24658 gl2_reg3 = prev_reg3;
24659 gl2_reg4 = prev_reg4;
24660 gl2_reg5 = prev_reg5;
24661 gl2_reg6 = prev_reg6;
24662 gl2_reg7 = prev_reg7;
24663 end // }
24664 3: begin // {
24665 gl3_reg0 = prev_reg0;
24666 gl3_reg1 = prev_reg1;
24667 gl3_reg2 = prev_reg2;
24668 gl3_reg3 = prev_reg3;
24669 gl3_reg4 = prev_reg4;
24670 gl3_reg5 = prev_reg5;
24671 gl3_reg6 = prev_reg6;
24672 gl3_reg7 = prev_reg7;
24673 end // }
24674 endcase
24675
24676 // Copy New global current global
24677 case (new_gl)
24678 0: begin // {
24679 prev_reg0 = gl0_reg0;
24680 prev_reg1 = gl0_reg1;
24681 prev_reg2 = gl0_reg2;
24682 prev_reg3 = gl0_reg3;
24683 prev_reg4 = gl0_reg4;
24684 prev_reg5 = gl0_reg5;
24685 prev_reg6 = gl0_reg6;
24686 prev_reg7 = gl0_reg7;
24687 end // }
24688
24689 1: begin // {
24690 prev_reg0 = gl1_reg0;
24691 prev_reg1 = gl1_reg1;
24692 prev_reg2 = gl1_reg2;
24693 prev_reg3 = gl1_reg3;
24694 prev_reg4 = gl1_reg4;
24695 prev_reg5 = gl1_reg5;
24696 prev_reg6 = gl1_reg6;
24697 prev_reg7 = gl1_reg7;
24698 end // }
24699
24700 2: begin // {
24701 prev_reg0 = gl2_reg0;
24702 prev_reg1 = gl2_reg1;
24703 prev_reg2 = gl2_reg2;
24704 prev_reg3 = gl2_reg3;
24705 prev_reg4 = gl2_reg4;
24706 prev_reg5 = gl2_reg5;
24707 prev_reg6 = gl2_reg6;
24708 prev_reg7 = gl2_reg7;
24709 end // }
24710
24711 3: begin // {
24712 prev_reg0 = gl3_reg0;
24713 prev_reg1 = gl3_reg1;
24714 prev_reg2 = gl3_reg2;
24715 prev_reg3 = gl3_reg3;
24716 prev_reg4 = gl3_reg4;
24717 prev_reg5 = gl3_reg5;
24718 prev_reg6 = gl3_reg6;
24719 prev_reg7 = gl3_reg7;
24720 end // }
24721
24722 endcase
24723 end // }
24724endtask
24725
24726//----------------------------------------------------------
24727// Return window number and register type based on cwp and regnum as input
24728task calc_cwp;
24729 input [2:0] cwp;
24730 input [7:0] id;
24731 output [2:0] win;
24732 output [1:0] type;
24733
24734 begin // {
24735 if (id<=7) begin // {
24736 type = `G_TYPE;
24737 win = cwp;
24738 end // }
24739 else if (id<=23) begin // {
24740 type = `W_TYPE;
24741 win = cwp;
24742 end // }
24743 else if (id<=31) begin // {
24744 type = `W_TYPE;
24745 if (cwp == 0) begin // {
24746 win = 7;
24747 end // }
24748 else begin // {
24749 win = cwp-1;
24750 end // }
24751 end // }
24752 else if (id<=(64+`FP_OFFSET)) begin // {
24753 type = `F_TYPE;
24754 win = cwp;
24755 end // }
24756 else begin // {
24757 type = `C_TYPE;
24758 win = cwp;
24759 end // }
24760 end // }
24761endtask
24762
24763//----------------------------------------------------------
24764// Check for bad signal values
24765task check_values;
24766
24767 begin // {
24768
24769 //--------------------
24770 casex (complete_fw2)
24771 8'b00000000,
24772 8'b00000001,
24773 8'b00000010,
24774 8'b00000100,
24775 8'b00001000,
24776 8'b00010000,
24777 8'b00100000,
24778 8'b01000000,
24779 8'b10000000: ; // good value
24780 default: begin // {
24781 `PR_ERROR ("nas", `ERROR, " - T%0d More than one instruction retired in a single cycle for this thread.",
24782 mytnum);
24783 $write("\t\t\t\t Instructions - ");
24784 if (complete_fw2[`EXU_INDEX]) $write("EXU op, ");
24785 if (complete_fw2[`FP_INDEX]) $write("FP op, ");
24786 if (complete_fw2[`LSU_INDEX]) $write("LSU op, ");
24787 if (complete_fw2[`IMUL_INDEX]) $write("IMUL op, ");
24788 if (complete_fw2[`IDIV_INDEX]) $write("IDIV op, ");
24789 if (complete_fw2[`FDIV_INDEX]) $write("FDIV op, ");
24790 if (complete_fw2[`TLU_INDEX]) $write("TLU op, ");
24791 if (complete_fw2[`ASI_INDEX]) $write("ASI op, ");
24792 $write(" complete_fw2 = %b \n",complete_fw2);
24793 $display("");
24794 end // }
24795 endcase
24796
24797 // This check only works if diags are written properly.
24798 // For example, if a diag writes to one of these registers using wrpr,
24799 // then this check must be disabled using plusarg.
24800 //--------------------
24801 // CANSAVE + CANRESTORE + OTHERWIN = NWINDOWS-2 (per Sparc V9)
24802 if (`PARGS.win_check_on) begin // {
24803 if (complete_fw2 & ((CANSAVE_reg + CANRESTORE_reg + OTHERWIN_reg) != 6)) begin // {
24804 `PR_ERROR ("nas", `ERROR, "ERROR - T%0d Bad Values for window registers.", mytnum);
24805 `PR_ERROR ("nas", `ERROR, "- CANSAVE = %0d CANRESTORE = %0d OTHERWIN = %0d",
24806 CANSAVE_reg, CANRESTORE_reg,OTHERWIN_reg);
24807 end // }
24808 end // }
24809
24810 end // }
24811endtask
24812
24813//----------------------------------------------------------
24814//----------------------------------------------------------
24815`ifndef EMUL_TL
24816task sort_delta;
24817 reg [5:0] i, j, last;
24818 reg [`DELTA_WIDTH:0] temp1, temp2;
24819 begin // {
24820 last = delta_prev[`NEXT_INDEX]-1;
24821 for (i=`FIRST_INDEX; i <= last; i=i+1) begin // {
24822 for (j=`FIRST_INDEX; j < last; j=j+1) begin // {
24823 temp1 = delta_prev[j]; temp2 = delta_prev[j+1];
24824 if (temp1[76:64] > temp2[76:64]) begin // {
24825 delta_prev[j] = temp2; delta_prev [j+1] = temp1;
24826 end //}
24827 end // }
24828 end // }
24829 end // }
24830endtask
24831`endif
24832
24833//----------------------------------------------------------
24834//----------------------------------------------------------
24835// Print one entry in delta_* array
24836`ifndef EMUL_TL
24837task print_entry;
24838
24839 input [`DELTA_WIDTH:0] delta_entry;
24840
24841 reg [1:0] type;
24842 reg [2:0] win;
24843 reg [7:0] id;
24844 reg [63:0] act_value;
24845 reg [(20*8)-1:0] type_str;
24846 reg [(20*8)-1:0] regname;
24847
24848 begin // {
24849 {type,win,id,act_value} = delta_entry;
24850
24851 case (type)
24852 `G_TYPE: begin
24853 type_str="G";
24854 end
24855 `W_TYPE: begin
24856 type_str="W";
24857 end
24858 `F_TYPE: begin
24859 type_str="F";
24860 id = id - `FP_OFFSET;
24861 end
24862 `C_TYPE: begin
24863 type_str="C";
24864 id = id - `CTL_OFFSET;
24865 end
24866 endcase
24867
24868 `NASTOP.get_regname(mytnum,type_str,win,id,regname);
24869 `PR_NORMAL ("nas", `NORMAL, "type=%0s win=%0d RegID=%0d %0s=%h",
24870 type_str,win,id,regname,act_value);
24871 end //}
24872
24873endtask
24874`endif
24875
24876//----------------------------------------------------------
24877// Write Value to prev_reg using id as index (non-blocking)
24878task write_prev;
24879 input [7:0] id;
24880 input [63:0] value;
24881
24882 begin // {
24883
24884 case (id)
24885 8'd0: prev_reg0 <= value;
24886 8'd1: prev_reg1 <= value;
24887 8'd2: prev_reg2 <= value;
24888 8'd3: prev_reg3 <= value;
24889 8'd4: prev_reg4 <= value;
24890 8'd5: prev_reg5 <= value;
24891 8'd6: prev_reg6 <= value;
24892 8'd7: prev_reg7 <= value;
24893 8'd8: prev_reg8 <= value;
24894 8'd9: prev_reg9 <= value;
24895 8'd10: prev_reg10 <= value;
24896 8'd11: prev_reg11 <= value;
24897 8'd12: prev_reg12 <= value;
24898 8'd13: prev_reg13 <= value;
24899 8'd14: prev_reg14 <= value;
24900 8'd15: prev_reg15 <= value;
24901 8'd16: prev_reg16 <= value;
24902 8'd17: prev_reg17 <= value;
24903 8'd18: prev_reg18 <= value;
24904 8'd19: prev_reg19 <= value;
24905 8'd20: prev_reg20 <= value;
24906 8'd21: prev_reg21 <= value;
24907 8'd22: prev_reg22 <= value;
24908 8'd23: prev_reg23 <= value;
24909 8'd24: prev_reg24 <= value;
24910 8'd25: prev_reg25 <= value;
24911 8'd26: prev_reg26 <= value;
24912 8'd27: prev_reg27 <= value;
24913 8'd28: prev_reg28 <= value;
24914 8'd29: prev_reg29 <= value;
24915 8'd30: prev_reg30 <= value;
24916 8'd31: prev_reg31 <= value;
24917 8'd32: prev_reg32 <= value;
24918 8'd33: prev_reg33 <= value;
24919 8'd34: prev_reg34 <= value;
24920 8'd35: prev_reg35 <= value;
24921 8'd36: prev_reg36 <= value;
24922 8'd37: prev_reg37 <= value;
24923 8'd38: prev_reg38 <= value;
24924 8'd39: prev_reg39 <= value;
24925 8'd40: prev_reg40 <= value;
24926 8'd41: prev_reg41 <= value;
24927 8'd42: prev_reg42 <= value;
24928 8'd43: prev_reg43 <= value;
24929 8'd44: prev_reg44 <= value;
24930 8'd45: prev_reg45 <= value;
24931 8'd46: prev_reg46 <= value;
24932 8'd47: prev_reg47 <= value;
24933 8'd48: prev_reg48 <= value;
24934 8'd49: prev_reg49 <= value;
24935 8'd50: prev_reg50 <= value;
24936 8'd51: prev_reg51 <= value;
24937 8'd52: prev_reg52 <= value;
24938 8'd53: prev_reg53 <= value;
24939 8'd54: prev_reg54 <= value;
24940 8'd55: prev_reg55 <= value;
24941 8'd56: prev_reg56 <= value;
24942 8'd57: prev_reg57 <= value;
24943 8'd58: prev_reg58 <= value;
24944 8'd59: prev_reg59 <= value;
24945 8'd60: prev_reg60 <= value;
24946 8'd61: prev_reg61 <= value;
24947 8'd62: prev_reg62 <= value;
24948 8'd63: prev_reg63 <= value;
24949 8'd64: prev_reg64 <= value;
24950 8'd65: prev_reg65 <= value;
24951 8'd66: prev_reg66 <= value;
24952 8'd67: prev_reg67 <= value;
24953 8'd68: prev_reg68 <= value;
24954 8'd69: prev_reg69 <= value;
24955 8'd70: prev_reg70 <= value;
24956 8'd71: prev_reg71 <= value;
24957 8'd72: prev_reg72 <= value;
24958 8'd73: prev_reg73 <= value;
24959 8'd74: prev_reg74 <= value;
24960 8'd75: prev_reg75 <= value;
24961 8'd76: prev_reg76 <= value;
24962 8'd77: prev_reg77 <= value;
24963 8'd78: prev_reg78 <= value;
24964 8'd79: prev_reg79 <= value;
24965 8'd80: prev_reg80 <= value;
24966 8'd81: prev_reg81 <= value;
24967 8'd82: prev_reg82 <= value;
24968 8'd83: prev_reg83 <= value;
24969 8'd84: prev_reg84 <= value;
24970 8'd85: prev_reg85 <= value;
24971 8'd86: prev_reg86 <= value;
24972 8'd87: prev_reg87 <= value;
24973 8'd88: prev_reg88 <= value;
24974 8'd89: prev_reg89 <= value;
24975 8'd90: prev_reg90 <= value;
24976 8'd91: prev_reg91 <= value;
24977 8'd92: prev_reg92 <= value;
24978 8'd93: prev_reg93 <= value;
24979 8'd94: prev_reg94 <= value;
24980 8'd95: prev_reg95 <= value;
24981 8'd96: prev_reg96 <= value;
24982 8'd97: prev_reg97 <= value;
24983 8'd98: prev_reg98 <= value;
24984 8'd99: prev_reg99 <= value;
24985 8'd100: prev_reg100 <= value;
24986 8'd101: prev_reg101 <= value;
24987 8'd102: prev_reg102 <= value;
24988 8'd103: prev_reg103 <= value;
24989 8'd104: prev_reg104 <= value;
24990 8'd105: prev_reg105 <= value;
24991 8'd106: prev_reg106 <= value;
24992 8'd107: prev_reg107 <= value;
24993 8'd108: prev_reg108 <= value;
24994 8'd109: prev_reg109 <= value;
24995 8'd110: prev_reg110 <= value;
24996 8'd111: prev_reg111 <= value;
24997 8'd112: prev_reg112 <= value;
24998 8'd113: prev_reg113 <= value;
24999 8'd114: prev_reg114 <= value;
25000 8'd115: prev_reg115 <= value;
25001 8'd116: prev_reg116 <= value;
25002 8'd117: prev_reg117 <= value;
25003 8'd118: prev_reg118 <= value;
25004 8'd119: prev_reg119 <= value;
25005 8'd120: prev_reg120 <= value;
25006 8'd121: prev_reg121 <= value;
25007 8'd122: prev_reg122 <= value;
25008 8'd123: prev_reg123 <= value;
25009 8'd124: prev_reg124 <= value;
25010 8'd125: prev_reg125 <= value;
25011 8'd126: prev_reg126 <= value;
25012 8'd127: prev_reg127 <= value;
25013 8'd128: prev_reg128 <= value;
25014 8'd129: prev_reg129 <= value;
25015 8'd130: prev_reg130 <= value;
25016 8'd131: prev_reg131 <= value;
25017 8'd132: prev_reg132 <= value;
25018 8'd133: prev_reg133 <= value;
25019 8'd134: prev_reg134 <= value;
25020 8'd135: prev_reg135 <= value;
25021 8'd136: prev_reg136 <= value;
25022 8'd137: prev_reg137 <= value;
25023 8'd138: prev_reg138 <= value;
25024 8'd139: prev_reg139 <= value;
25025 8'd140: prev_reg140 <= value;
25026 8'd141: prev_reg141 <= value;
25027 8'd142: prev_reg142 <= value;
25028 8'd143: prev_reg143 <= value;
25029 8'd144: prev_reg144 <= value;
25030 8'd145: prev_reg145 <= value;
25031 8'd146: prev_reg146 <= value;
25032 8'd147: prev_reg147 <= value;
25033 8'd148: prev_reg148 <= value;
25034 8'd149: prev_reg149 <= value;
25035 8'd150: prev_reg150 <= value;
25036 8'd151: prev_reg151 <= value;
25037 8'd152: prev_reg152 <= value;
25038 8'd153: prev_reg153 <= value;
25039 8'd154: prev_reg154 <= value;
25040 8'd155: prev_reg155 <= value;
25041 8'd156: prev_reg156 <= value;
25042 8'd157: prev_reg157 <= value;
25043 8'd158: prev_reg158 <= value;
25044 8'd159: prev_reg159 <= value;
25045 8'd160: prev_reg160 <= value;
25046 8'd161: prev_reg161 <= value;
25047 8'd162: prev_reg162 <= value;
25048 8'd163: prev_reg163 <= value;
25049 8'd164: prev_reg164 <= value;
25050 8'd165: prev_reg165 <= value;
25051 8'd166: prev_reg166 <= value;
25052 8'd167: prev_reg167 <= value;
25053 8'd168: prev_reg168 <= value;
25054 8'd169: prev_reg169 <= value;
25055 8'd170: prev_reg170 <= value;
25056 8'd171: prev_reg171 <= value;
25057 8'd172: prev_reg172 <= value;
25058 8'd173: prev_reg173 <= value;
25059 8'd174: prev_reg174 <= value;
25060 8'd175: prev_reg175 <= value;
25061 8'd176: prev_reg176 <= value;
25062 8'd177: prev_reg177 <= value;
25063 8'd178: prev_reg178 <= value;
25064 8'd179: prev_reg179 <= value;
25065 8'd180: prev_reg180 <= value;
25066 8'd181: prev_reg181 <= value;
25067 8'd182: prev_reg182 <= value;
25068 8'd183: prev_reg183 <= value;
25069 8'd184: prev_reg184 <= value;
25070 8'd185: prev_reg185 <= value;
25071 8'd186: prev_reg186 <= value;
25072 8'd187: prev_reg187 <= value;
25073 8'd188: prev_reg188 <= value;
25074 8'd189: prev_reg189 <= value;
25075 8'd190: prev_reg190 <= value;
25076 8'd191: prev_reg191 <= value;
25077 8'd192: prev_reg192 <= value;
25078 8'd193: prev_reg193 <= value;
25079 8'd194: prev_reg194 <= value;
25080 8'd195: prev_reg195 <= value;
25081 8'd196: prev_reg196 <= value;
25082 8'd197: prev_reg197 <= value;
25083 8'd198: prev_reg198 <= value;
25084 8'd199: prev_reg199 <= value;
25085 8'd200: prev_reg200 <= value;
25086 8'd201: prev_reg201 <= value;
25087 8'd202: prev_reg202 <= value;
25088 8'd203: prev_reg203 <= value;
25089 8'd204: prev_reg204 <= value;
25090 8'd205: prev_reg205 <= value;
25091 8'd206: prev_reg206 <= value;
25092 8'd207: prev_reg207 <= value;
25093 8'd208: prev_reg208 <= value;
25094 8'd209: prev_reg209 <= value;
25095 8'd210: prev_reg210 <= value;
25096 8'd211: prev_reg211 <= value;
25097 8'd212: prev_reg212 <= value;
25098 8'd213: prev_reg213 <= value;
25099 8'd214: prev_reg214 <= value;
25100 8'd215: prev_reg215 <= value;
25101 8'd216: prev_reg216 <= value;
25102 8'd217: prev_reg217 <= value;
25103 8'd218: prev_reg218 <= value;
25104 8'd219: prev_reg219 <= value;
25105 8'd220: prev_reg220 <= value;
25106 8'd221: prev_reg221 <= value;
25107 8'd222: prev_reg222 <= value;
25108 8'd223: prev_reg223 <= value;
25109 8'd224: prev_reg224 <= value;
25110 8'd225: prev_reg225 <= value;
25111 8'd226: prev_reg226 <= value;
25112 8'd227: prev_reg227 <= value;
25113 8'd228: prev_reg228 <= value;
25114 8'd229: prev_reg229 <= value;
25115 8'd230: prev_reg230 <= value;
25116 8'd231: prev_reg231 <= value;
25117 8'd232: prev_reg232 <= value;
25118 8'd233: prev_reg233 <= value;
25119 8'd234: prev_reg234 <= value;
25120 8'd235: prev_reg235 <= value;
25121 8'd236: prev_reg236 <= value;
25122 8'd237: prev_reg237 <= value;
25123 8'd238: prev_reg238 <= value;
25124 8'd239: prev_reg239 <= value;
25125 8'd240: prev_reg240 <= value;
25126 8'd241: prev_reg241 <= value;
25127 8'd242: prev_reg242 <= value;
25128 8'd243: prev_reg243 <= value;
25129 8'd244: prev_reg244 <= value;
25130 8'd245: prev_reg245 <= value;
25131 8'd246: prev_reg246 <= value;
25132 8'd247: prev_reg247 <= value;
25133 8'd248: prev_reg248 <= value;
25134 8'd249: prev_reg249 <= value;
25135 8'd250: prev_reg250 <= value;
25136 8'd251: prev_reg251 <= value;
25137 8'd252: prev_reg252 <= value;
25138 8'd253: prev_reg253 <= value;
25139 8'd254: prev_reg254 <= value;
25140 8'd255: prev_reg255 <= value;
25141 endcase
25142
25143 end //}
25144
25145endtask
25146
25147//----------------------------------------------------------
25148// Write Value to prev_reg using id as index (blocking)
25149task write_prev_async;
25150 input [7:0] id;
25151 input [63:0] value;
25152
25153 begin // {
25154
25155 case (id)
25156 8'd0: prev_reg0 = value;
25157 8'd1: prev_reg1 = value;
25158 8'd2: prev_reg2 = value;
25159 8'd3: prev_reg3 = value;
25160 8'd4: prev_reg4 = value;
25161 8'd5: prev_reg5 = value;
25162 8'd6: prev_reg6 = value;
25163 8'd7: prev_reg7 = value;
25164 8'd8: prev_reg8 = value;
25165 8'd9: prev_reg9 = value;
25166 8'd10: prev_reg10 = value;
25167 8'd11: prev_reg11 = value;
25168 8'd12: prev_reg12 = value;
25169 8'd13: prev_reg13 = value;
25170 8'd14: prev_reg14 = value;
25171 8'd15: prev_reg15 = value;
25172 8'd16: prev_reg16 = value;
25173 8'd17: prev_reg17 = value;
25174 8'd18: prev_reg18 = value;
25175 8'd19: prev_reg19 = value;
25176 8'd20: prev_reg20 = value;
25177 8'd21: prev_reg21 = value;
25178 8'd22: prev_reg22 = value;
25179 8'd23: prev_reg23 = value;
25180 8'd24: prev_reg24 = value;
25181 8'd25: prev_reg25 = value;
25182 8'd26: prev_reg26 = value;
25183 8'd27: prev_reg27 = value;
25184 8'd28: prev_reg28 = value;
25185 8'd29: prev_reg29 = value;
25186 8'd30: prev_reg30 = value;
25187 8'd31: prev_reg31 = value;
25188 8'd32: prev_reg32 = value;
25189 8'd33: prev_reg33 = value;
25190 8'd34: prev_reg34 = value;
25191 8'd35: prev_reg35 = value;
25192 8'd36: prev_reg36 = value;
25193 8'd37: prev_reg37 = value;
25194 8'd38: prev_reg38 = value;
25195 8'd39: prev_reg39 = value;
25196 8'd40: prev_reg40 = value;
25197 8'd41: prev_reg41 = value;
25198 8'd42: prev_reg42 = value;
25199 8'd43: prev_reg43 = value;
25200 8'd44: prev_reg44 = value;
25201 8'd45: prev_reg45 = value;
25202 8'd46: prev_reg46 = value;
25203 8'd47: prev_reg47 = value;
25204 8'd48: prev_reg48 = value;
25205 8'd49: prev_reg49 = value;
25206 8'd50: prev_reg50 = value;
25207 8'd51: prev_reg51 = value;
25208 8'd52: prev_reg52 = value;
25209 8'd53: prev_reg53 = value;
25210 8'd54: prev_reg54 = value;
25211 8'd55: prev_reg55 = value;
25212 8'd56: prev_reg56 = value;
25213 8'd57: prev_reg57 = value;
25214 8'd58: prev_reg58 = value;
25215 8'd59: prev_reg59 = value;
25216 8'd60: prev_reg60 = value;
25217 8'd61: prev_reg61 = value;
25218 8'd62: prev_reg62 = value;
25219 8'd63: prev_reg63 = value;
25220 8'd64: prev_reg64 = value;
25221 8'd65: prev_reg65 = value;
25222 8'd66: prev_reg66 = value;
25223 8'd67: prev_reg67 = value;
25224 8'd68: prev_reg68 = value;
25225 8'd69: prev_reg69 = value;
25226 8'd70: prev_reg70 = value;
25227 8'd71: prev_reg71 = value;
25228 8'd72: prev_reg72 = value;
25229 8'd73: prev_reg73 = value;
25230 8'd74: prev_reg74 = value;
25231 8'd75: prev_reg75 = value;
25232 8'd76: prev_reg76 = value;
25233 8'd77: prev_reg77 = value;
25234 8'd78: prev_reg78 = value;
25235 8'd79: prev_reg79 = value;
25236 8'd80: prev_reg80 = value;
25237 8'd81: prev_reg81 = value;
25238 8'd82: prev_reg82 = value;
25239 8'd83: prev_reg83 = value;
25240 8'd84: prev_reg84 = value;
25241 8'd85: prev_reg85 = value;
25242 8'd86: prev_reg86 = value;
25243 8'd87: prev_reg87 = value;
25244 8'd88: prev_reg88 = value;
25245 8'd89: prev_reg89 = value;
25246 8'd90: prev_reg90 = value;
25247 8'd91: prev_reg91 = value;
25248 8'd92: prev_reg92 = value;
25249 8'd93: prev_reg93 = value;
25250 8'd94: prev_reg94 = value;
25251 8'd95: prev_reg95 = value;
25252 8'd96: prev_reg96 = value;
25253 8'd97: prev_reg97 = value;
25254 8'd98: prev_reg98 = value;
25255 8'd99: prev_reg99 = value;
25256 8'd100: prev_reg100 = value;
25257 8'd101: prev_reg101 = value;
25258 8'd102: prev_reg102 = value;
25259 8'd103: prev_reg103 = value;
25260 8'd104: prev_reg104 = value;
25261 8'd105: prev_reg105 = value;
25262 8'd106: prev_reg106 = value;
25263 8'd107: prev_reg107 = value;
25264 8'd108: prev_reg108 = value;
25265 8'd109: prev_reg109 = value;
25266 8'd110: prev_reg110 = value;
25267 8'd111: prev_reg111 = value;
25268 8'd112: prev_reg112 = value;
25269 8'd113: prev_reg113 = value;
25270 8'd114: prev_reg114 = value;
25271 8'd115: prev_reg115 = value;
25272 8'd116: prev_reg116 = value;
25273 8'd117: prev_reg117 = value;
25274 8'd118: prev_reg118 = value;
25275 8'd119: prev_reg119 = value;
25276 8'd120: prev_reg120 = value;
25277 8'd121: prev_reg121 = value;
25278 8'd122: prev_reg122 = value;
25279 8'd123: prev_reg123 = value;
25280 8'd124: prev_reg124 = value;
25281 8'd125: prev_reg125 = value;
25282 8'd126: prev_reg126 = value;
25283 8'd127: prev_reg127 = value;
25284 8'd128: prev_reg128 = value;
25285 8'd129: prev_reg129 = value;
25286 8'd130: prev_reg130 = value;
25287 8'd131: prev_reg131 = value;
25288 8'd132: prev_reg132 = value;
25289 8'd133: prev_reg133 = value;
25290 8'd134: prev_reg134 = value;
25291 8'd135: prev_reg135 = value;
25292 8'd136: prev_reg136 = value;
25293 8'd137: prev_reg137 = value;
25294 8'd138: prev_reg138 = value;
25295 8'd139: prev_reg139 = value;
25296 8'd140: prev_reg140 = value;
25297 8'd141: prev_reg141 = value;
25298 8'd142: prev_reg142 = value;
25299 8'd143: prev_reg143 = value;
25300 8'd144: prev_reg144 = value;
25301 8'd145: prev_reg145 = value;
25302 8'd146: prev_reg146 = value;
25303 8'd147: prev_reg147 = value;
25304 8'd148: prev_reg148 = value;
25305 8'd149: prev_reg149 = value;
25306 8'd150: prev_reg150 = value;
25307 8'd151: prev_reg151 = value;
25308 8'd152: prev_reg152 = value;
25309 8'd153: prev_reg153 = value;
25310 8'd154: prev_reg154 = value;
25311 8'd155: prev_reg155 = value;
25312 8'd156: prev_reg156 = value;
25313 8'd157: prev_reg157 = value;
25314 8'd158: prev_reg158 = value;
25315 8'd159: prev_reg159 = value;
25316 8'd160: prev_reg160 = value;
25317 8'd161: prev_reg161 = value;
25318 8'd162: prev_reg162 = value;
25319 8'd163: prev_reg163 = value;
25320 8'd164: prev_reg164 = value;
25321 8'd165: prev_reg165 = value;
25322 8'd166: prev_reg166 = value;
25323 8'd167: prev_reg167 = value;
25324 8'd168: prev_reg168 = value;
25325 8'd169: prev_reg169 = value;
25326 8'd170: prev_reg170 = value;
25327 8'd171: prev_reg171 = value;
25328 8'd172: prev_reg172 = value;
25329 8'd173: prev_reg173 = value;
25330 8'd174: prev_reg174 = value;
25331 8'd175: prev_reg175 = value;
25332 8'd176: prev_reg176 = value;
25333 8'd177: prev_reg177 = value;
25334 8'd178: prev_reg178 = value;
25335 8'd179: prev_reg179 = value;
25336 8'd180: prev_reg180 = value;
25337 8'd181: prev_reg181 = value;
25338 8'd182: prev_reg182 = value;
25339 8'd183: prev_reg183 = value;
25340 8'd184: prev_reg184 = value;
25341 8'd185: prev_reg185 = value;
25342 8'd186: prev_reg186 = value;
25343 8'd187: prev_reg187 = value;
25344 8'd188: prev_reg188 = value;
25345 8'd189: prev_reg189 = value;
25346 8'd190: prev_reg190 = value;
25347 8'd191: prev_reg191 = value;
25348 8'd192: prev_reg192 = value;
25349 8'd193: prev_reg193 = value;
25350 8'd194: prev_reg194 = value;
25351 8'd195: prev_reg195 = value;
25352 8'd196: prev_reg196 = value;
25353 8'd197: prev_reg197 = value;
25354 8'd198: prev_reg198 = value;
25355 8'd199: prev_reg199 = value;
25356 8'd200: prev_reg200 = value;
25357 8'd201: prev_reg201 = value;
25358 8'd202: prev_reg202 = value;
25359 8'd203: prev_reg203 = value;
25360 8'd204: prev_reg204 = value;
25361 8'd205: prev_reg205 = value;
25362 8'd206: prev_reg206 = value;
25363 8'd207: prev_reg207 = value;
25364 8'd208: prev_reg208 = value;
25365 8'd209: prev_reg209 = value;
25366 8'd210: prev_reg210 = value;
25367 8'd211: prev_reg211 = value;
25368 8'd212: prev_reg212 = value;
25369 8'd213: prev_reg213 = value;
25370 8'd214: prev_reg214 = value;
25371 8'd215: prev_reg215 = value;
25372 8'd216: prev_reg216 = value;
25373 8'd217: prev_reg217 = value;
25374 8'd218: prev_reg218 = value;
25375 8'd219: prev_reg219 = value;
25376 8'd220: prev_reg220 = value;
25377 8'd221: prev_reg221 = value;
25378 8'd222: prev_reg222 = value;
25379 8'd223: prev_reg223 = value;
25380 8'd224: prev_reg224 = value;
25381 8'd225: prev_reg225 = value;
25382 8'd226: prev_reg226 = value;
25383 8'd227: prev_reg227 = value;
25384 8'd228: prev_reg228 = value;
25385 8'd229: prev_reg229 = value;
25386 8'd230: prev_reg230 = value;
25387 8'd231: prev_reg231 = value;
25388 8'd232: prev_reg232 = value;
25389 8'd233: prev_reg233 = value;
25390 8'd234: prev_reg234 = value;
25391 8'd235: prev_reg235 = value;
25392 8'd236: prev_reg236 = value;
25393 8'd237: prev_reg237 = value;
25394 8'd238: prev_reg238 = value;
25395 8'd239: prev_reg239 = value;
25396 8'd240: prev_reg240 = value;
25397 8'd241: prev_reg241 = value;
25398 8'd242: prev_reg242 = value;
25399 8'd243: prev_reg243 = value;
25400 8'd244: prev_reg244 = value;
25401 8'd245: prev_reg245 = value;
25402 8'd246: prev_reg246 = value;
25403 8'd247: prev_reg247 = value;
25404 8'd248: prev_reg248 = value;
25405 8'd249: prev_reg249 = value;
25406 8'd250: prev_reg250 = value;
25407 8'd251: prev_reg251 = value;
25408 8'd252: prev_reg252 = value;
25409 8'd253: prev_reg253 = value;
25410 8'd254: prev_reg254 = value;
25411 8'd255: prev_reg255 = value;
25412 endcase
25413
25414 end //}
25415
25416endtask
25417
25418//----------------------------------------------------------
25419// Read value frpm prev_reg using id as index
25420function [63:0] read_prev;
25421 input [7:0] id;
25422
25423 begin // {
25424
25425 case (id)
25426 8'd0: read_prev = prev_reg0;
25427 8'd1: read_prev = prev_reg1;
25428 8'd2: read_prev = prev_reg2;
25429 8'd3: read_prev = prev_reg3;
25430 8'd4: read_prev = prev_reg4;
25431 8'd5: read_prev = prev_reg5;
25432 8'd6: read_prev = prev_reg6;
25433 8'd7: read_prev = prev_reg7;
25434 8'd8: read_prev = prev_reg8;
25435 8'd9: read_prev = prev_reg9;
25436 8'd10: read_prev = prev_reg10;
25437 8'd11: read_prev = prev_reg11;
25438 8'd12: read_prev = prev_reg12;
25439 8'd13: read_prev = prev_reg13;
25440 8'd14: read_prev = prev_reg14;
25441 8'd15: read_prev = prev_reg15;
25442 8'd16: read_prev = prev_reg16;
25443 8'd17: read_prev = prev_reg17;
25444 8'd18: read_prev = prev_reg18;
25445 8'd19: read_prev = prev_reg19;
25446 8'd20: read_prev = prev_reg20;
25447 8'd21: read_prev = prev_reg21;
25448 8'd22: read_prev = prev_reg22;
25449 8'd23: read_prev = prev_reg23;
25450 8'd24: read_prev = prev_reg24;
25451 8'd25: read_prev = prev_reg25;
25452 8'd26: read_prev = prev_reg26;
25453 8'd27: read_prev = prev_reg27;
25454 8'd28: read_prev = prev_reg28;
25455 8'd29: read_prev = prev_reg29;
25456 8'd30: read_prev = prev_reg30;
25457 8'd31: read_prev = prev_reg31;
25458 8'd32: read_prev = prev_reg32;
25459 8'd33: read_prev = prev_reg33;
25460 8'd34: read_prev = prev_reg34;
25461 8'd35: read_prev = prev_reg35;
25462 8'd36: read_prev = prev_reg36;
25463 8'd37: read_prev = prev_reg37;
25464 8'd38: read_prev = prev_reg38;
25465 8'd39: read_prev = prev_reg39;
25466 8'd40: read_prev = prev_reg40;
25467 8'd41: read_prev = prev_reg41;
25468 8'd42: read_prev = prev_reg42;
25469 8'd43: read_prev = prev_reg43;
25470 8'd44: read_prev = prev_reg44;
25471 8'd45: read_prev = prev_reg45;
25472 8'd46: read_prev = prev_reg46;
25473 8'd47: read_prev = prev_reg47;
25474 8'd48: read_prev = prev_reg48;
25475 8'd49: read_prev = prev_reg49;
25476 8'd50: read_prev = prev_reg50;
25477 8'd51: read_prev = prev_reg51;
25478 8'd52: read_prev = prev_reg52;
25479 8'd53: read_prev = prev_reg53;
25480 8'd54: read_prev = prev_reg54;
25481 8'd55: read_prev = prev_reg55;
25482 8'd56: read_prev = prev_reg56;
25483 8'd57: read_prev = prev_reg57;
25484 8'd58: read_prev = prev_reg58;
25485 8'd59: read_prev = prev_reg59;
25486 8'd60: read_prev = prev_reg60;
25487 8'd61: read_prev = prev_reg61;
25488 8'd62: read_prev = prev_reg62;
25489 8'd63: read_prev = prev_reg63;
25490 8'd64: read_prev = prev_reg64;
25491 8'd65: read_prev = prev_reg65;
25492 8'd66: read_prev = prev_reg66;
25493 8'd67: read_prev = prev_reg67;
25494 8'd68: read_prev = prev_reg68;
25495 8'd69: read_prev = prev_reg69;
25496 8'd70: read_prev = prev_reg70;
25497 8'd71: read_prev = prev_reg71;
25498 8'd72: read_prev = prev_reg72;
25499 8'd73: read_prev = prev_reg73;
25500 8'd74: read_prev = prev_reg74;
25501 8'd75: read_prev = prev_reg75;
25502 8'd76: read_prev = prev_reg76;
25503 8'd77: read_prev = prev_reg77;
25504 8'd78: read_prev = prev_reg78;
25505 8'd79: read_prev = prev_reg79;
25506 8'd80: read_prev = prev_reg80;
25507 8'd81: read_prev = prev_reg81;
25508 8'd82: read_prev = prev_reg82;
25509 8'd83: read_prev = prev_reg83;
25510 8'd84: read_prev = prev_reg84;
25511 8'd85: read_prev = prev_reg85;
25512 8'd86: read_prev = prev_reg86;
25513 8'd87: read_prev = prev_reg87;
25514 8'd88: read_prev = prev_reg88;
25515 8'd89: read_prev = prev_reg89;
25516 8'd90: read_prev = prev_reg90;
25517 8'd91: read_prev = prev_reg91;
25518 8'd92: read_prev = prev_reg92;
25519 8'd93: read_prev = prev_reg93;
25520 8'd94: read_prev = prev_reg94;
25521 8'd95: read_prev = prev_reg95;
25522 8'd96: read_prev = prev_reg96;
25523 8'd97: read_prev = prev_reg97;
25524 8'd98: read_prev = prev_reg98;
25525 8'd99: read_prev = prev_reg99;
25526 8'd100: read_prev = prev_reg100;
25527 8'd101: read_prev = prev_reg101;
25528 8'd102: read_prev = prev_reg102;
25529 8'd103: read_prev = prev_reg103;
25530 8'd104: read_prev = prev_reg104;
25531 8'd105: read_prev = prev_reg105;
25532 8'd106: read_prev = prev_reg106;
25533 8'd107: read_prev = prev_reg107;
25534 8'd108: read_prev = prev_reg108;
25535 8'd109: read_prev = prev_reg109;
25536 8'd110: read_prev = prev_reg110;
25537 8'd111: read_prev = prev_reg111;
25538 8'd112: read_prev = prev_reg112;
25539 8'd113: read_prev = prev_reg113;
25540 8'd114: read_prev = prev_reg114;
25541 8'd115: read_prev = prev_reg115;
25542 8'd116: read_prev = prev_reg116;
25543 8'd117: read_prev = prev_reg117;
25544 8'd118: read_prev = prev_reg118;
25545 8'd119: read_prev = prev_reg119;
25546 8'd120: read_prev = prev_reg120;
25547 8'd121: read_prev = prev_reg121;
25548 8'd122: read_prev = prev_reg122;
25549 8'd123: read_prev = prev_reg123;
25550 8'd124: read_prev = prev_reg124;
25551 8'd125: read_prev = prev_reg125;
25552 8'd126: read_prev = prev_reg126;
25553 8'd127: read_prev = prev_reg127;
25554 8'd128: read_prev = prev_reg128;
25555 8'd129: read_prev = prev_reg129;
25556 8'd130: read_prev = prev_reg130;
25557 8'd131: read_prev = prev_reg131;
25558 8'd132: read_prev = prev_reg132;
25559 8'd133: read_prev = prev_reg133;
25560 8'd134: read_prev = prev_reg134;
25561 8'd135: read_prev = prev_reg135;
25562 8'd136: read_prev = prev_reg136;
25563 8'd137: read_prev = prev_reg137;
25564 8'd138: read_prev = prev_reg138;
25565 8'd139: read_prev = prev_reg139;
25566 8'd140: read_prev = prev_reg140;
25567 8'd141: read_prev = prev_reg141;
25568 8'd142: read_prev = prev_reg142;
25569 8'd143: read_prev = prev_reg143;
25570 8'd144: read_prev = prev_reg144;
25571 8'd145: read_prev = prev_reg145;
25572 8'd146: read_prev = prev_reg146;
25573 8'd147: read_prev = prev_reg147;
25574 8'd148: read_prev = prev_reg148;
25575 8'd149: read_prev = prev_reg149;
25576 8'd150: read_prev = prev_reg150;
25577 8'd151: read_prev = prev_reg151;
25578 8'd152: read_prev = prev_reg152;
25579 8'd153: read_prev = prev_reg153;
25580 8'd154: read_prev = prev_reg154;
25581 8'd155: read_prev = prev_reg155;
25582 8'd156: read_prev = prev_reg156;
25583 8'd157: read_prev = prev_reg157;
25584 8'd158: read_prev = prev_reg158;
25585 8'd159: read_prev = prev_reg159;
25586 8'd160: read_prev = prev_reg160;
25587 8'd161: read_prev = prev_reg161;
25588 8'd162: read_prev = prev_reg162;
25589 8'd163: read_prev = prev_reg163;
25590 8'd164: read_prev = prev_reg164;
25591 8'd165: read_prev = prev_reg165;
25592 8'd166: read_prev = prev_reg166;
25593 8'd167: read_prev = prev_reg167;
25594 8'd168: read_prev = prev_reg168;
25595 8'd169: read_prev = prev_reg169;
25596 8'd170: read_prev = prev_reg170;
25597 8'd171: read_prev = prev_reg171;
25598 8'd172: read_prev = prev_reg172;
25599 8'd173: read_prev = prev_reg173;
25600 8'd174: read_prev = prev_reg174;
25601 8'd175: read_prev = prev_reg175;
25602 8'd176: read_prev = prev_reg176;
25603 8'd177: read_prev = prev_reg177;
25604 8'd178: read_prev = prev_reg178;
25605 8'd179: read_prev = prev_reg179;
25606 8'd180: read_prev = prev_reg180;
25607 8'd181: read_prev = prev_reg181;
25608 8'd182: read_prev = prev_reg182;
25609 8'd183: read_prev = prev_reg183;
25610 8'd184: read_prev = prev_reg184;
25611 8'd185: read_prev = prev_reg185;
25612 8'd186: read_prev = prev_reg186;
25613 8'd187: read_prev = prev_reg187;
25614 8'd188: read_prev = prev_reg188;
25615 8'd189: read_prev = prev_reg189;
25616 8'd190: read_prev = prev_reg190;
25617 8'd191: read_prev = prev_reg191;
25618 8'd192: read_prev = prev_reg192;
25619 8'd193: read_prev = prev_reg193;
25620 8'd194: read_prev = prev_reg194;
25621 8'd195: read_prev = prev_reg195;
25622 8'd196: read_prev = prev_reg196;
25623 8'd197: read_prev = prev_reg197;
25624 8'd198: read_prev = prev_reg198;
25625 8'd199: read_prev = prev_reg199;
25626 8'd200: read_prev = prev_reg200;
25627 8'd201: read_prev = prev_reg201;
25628 8'd202: read_prev = prev_reg202;
25629 8'd203: read_prev = prev_reg203;
25630 8'd204: read_prev = prev_reg204;
25631 8'd205: read_prev = prev_reg205;
25632 8'd206: read_prev = prev_reg206;
25633 8'd207: read_prev = prev_reg207;
25634 8'd208: read_prev = prev_reg208;
25635 8'd209: read_prev = prev_reg209;
25636 8'd210: read_prev = prev_reg210;
25637 8'd211: read_prev = prev_reg211;
25638 8'd212: read_prev = prev_reg212;
25639 8'd213: read_prev = prev_reg213;
25640 8'd214: read_prev = prev_reg214;
25641 8'd215: read_prev = prev_reg215;
25642 8'd216: read_prev = prev_reg216;
25643 8'd217: read_prev = prev_reg217;
25644 8'd218: read_prev = prev_reg218;
25645 8'd219: read_prev = prev_reg219;
25646 8'd220: read_prev = prev_reg220;
25647 8'd221: read_prev = prev_reg221;
25648 8'd222: read_prev = prev_reg222;
25649 8'd223: read_prev = prev_reg223;
25650 8'd224: read_prev = prev_reg224;
25651 8'd225: read_prev = prev_reg225;
25652 8'd226: read_prev = prev_reg226;
25653 8'd227: read_prev = prev_reg227;
25654 8'd228: read_prev = prev_reg228;
25655 8'd229: read_prev = prev_reg229;
25656 8'd230: read_prev = prev_reg230;
25657 8'd231: read_prev = prev_reg231;
25658 8'd232: read_prev = prev_reg232;
25659 8'd233: read_prev = prev_reg233;
25660 8'd234: read_prev = prev_reg234;
25661 8'd235: read_prev = prev_reg235;
25662 8'd236: read_prev = prev_reg236;
25663 8'd237: read_prev = prev_reg237;
25664 8'd238: read_prev = prev_reg238;
25665 8'd239: read_prev = prev_reg239;
25666 8'd240: read_prev = prev_reg240;
25667 8'd241: read_prev = prev_reg241;
25668 8'd242: read_prev = prev_reg242;
25669 8'd243: read_prev = prev_reg243;
25670 8'd244: read_prev = prev_reg244;
25671 8'd245: read_prev = prev_reg245;
25672 8'd246: read_prev = prev_reg246;
25673 8'd247: read_prev = prev_reg247;
25674 8'd248: read_prev = prev_reg248;
25675 8'd249: read_prev = prev_reg249;
25676 8'd250: read_prev = prev_reg250;
25677 8'd251: read_prev = prev_reg251;
25678 8'd252: read_prev = prev_reg252;
25679 8'd253: read_prev = prev_reg253;
25680 8'd254: read_prev = prev_reg254;
25681 8'd255: read_prev = prev_reg255;
25682 endcase
25683
25684 end //}
25685
25686endfunction
25687
25688//----------------------------------------------------------
25689function [4:0] remap;
25690 input [4:0] rd;
25691 input oddwin;
25692
25693 begin
25694
25695 remap[4] = rd[4] ^ (rd[3] & oddwin);
25696 remap[3:0] = rd[3:0];
25697
25698 end
25699endfunction
25700
25701//----------------------------------------------------------
25702// Initialize nas_pipe registers
25703initial begin : INIT_BLOCK
25704 integer i;
25705
25706 nas_pipe_enable = 1'b1; // Nas_pipe always enables itself
25707 good_trap_detected = 1'b0;
25708
25709 @ (posedge `BENCH_SPC4_GCLK);
25710 `TOP.th_last_act_cycle[mytnum] = 0;
25711
25712 // Window registers
25713 win0_reg8 = 0;
25714 win1_reg8 = 0;
25715 win2_reg8 = 0;
25716 win3_reg8 = 0;
25717 win4_reg8 = 0;
25718 win5_reg8 = 0;
25719 win6_reg8 = 0;
25720 win7_reg8 = 0;
25721 win0_reg9 = 0;
25722 win1_reg9 = 0;
25723 win2_reg9 = 0;
25724 win3_reg9 = 0;
25725 win4_reg9 = 0;
25726 win5_reg9 = 0;
25727 win6_reg9 = 0;
25728 win7_reg9 = 0;
25729 win0_reg10 = 0;
25730 win1_reg10 = 0;
25731 win2_reg10 = 0;
25732 win3_reg10 = 0;
25733 win4_reg10 = 0;
25734 win5_reg10 = 0;
25735 win6_reg10 = 0;
25736 win7_reg10 = 0;
25737 win0_reg11 = 0;
25738 win1_reg11 = 0;
25739 win2_reg11 = 0;
25740 win3_reg11 = 0;
25741 win4_reg11 = 0;
25742 win5_reg11 = 0;
25743 win6_reg11 = 0;
25744 win7_reg11 = 0;
25745 win0_reg12 = 0;
25746 win1_reg12 = 0;
25747 win2_reg12 = 0;
25748 win3_reg12 = 0;
25749 win4_reg12 = 0;
25750 win5_reg12 = 0;
25751 win6_reg12 = 0;
25752 win7_reg12 = 0;
25753 win0_reg13 = 0;
25754 win1_reg13 = 0;
25755 win2_reg13 = 0;
25756 win3_reg13 = 0;
25757 win4_reg13 = 0;
25758 win5_reg13 = 0;
25759 win6_reg13 = 0;
25760 win7_reg13 = 0;
25761 win0_reg14 = 0;
25762 win1_reg14 = 0;
25763 win2_reg14 = 0;
25764 win3_reg14 = 0;
25765 win4_reg14 = 0;
25766 win5_reg14 = 0;
25767 win6_reg14 = 0;
25768 win7_reg14 = 0;
25769 win0_reg15 = 0;
25770 win1_reg15 = 0;
25771 win2_reg15 = 0;
25772 win3_reg15 = 0;
25773 win4_reg15 = 0;
25774 win5_reg15 = 0;
25775 win6_reg15 = 0;
25776 win7_reg15 = 0;
25777 win0_reg16 = 0;
25778 win1_reg16 = 0;
25779 win2_reg16 = 0;
25780 win3_reg16 = 0;
25781 win4_reg16 = 0;
25782 win5_reg16 = 0;
25783 win6_reg16 = 0;
25784 win7_reg16 = 0;
25785 win0_reg17 = 0;
25786 win1_reg17 = 0;
25787 win2_reg17 = 0;
25788 win3_reg17 = 0;
25789 win4_reg17 = 0;
25790 win5_reg17 = 0;
25791 win6_reg17 = 0;
25792 win7_reg17 = 0;
25793 win0_reg18 = 0;
25794 win1_reg18 = 0;
25795 win2_reg18 = 0;
25796 win3_reg18 = 0;
25797 win4_reg18 = 0;
25798 win5_reg18 = 0;
25799 win6_reg18 = 0;
25800 win7_reg18 = 0;
25801 win0_reg19 = 0;
25802 win1_reg19 = 0;
25803 win2_reg19 = 0;
25804 win3_reg19 = 0;
25805 win4_reg19 = 0;
25806 win5_reg19 = 0;
25807 win6_reg19 = 0;
25808 win7_reg19 = 0;
25809 win0_reg20 = 0;
25810 win1_reg20 = 0;
25811 win2_reg20 = 0;
25812 win3_reg20 = 0;
25813 win4_reg20 = 0;
25814 win5_reg20 = 0;
25815 win6_reg20 = 0;
25816 win7_reg20 = 0;
25817 win0_reg21 = 0;
25818 win1_reg21 = 0;
25819 win2_reg21 = 0;
25820 win3_reg21 = 0;
25821 win4_reg21 = 0;
25822 win5_reg21 = 0;
25823 win6_reg21 = 0;
25824 win7_reg21 = 0;
25825 win0_reg22 = 0;
25826 win1_reg22 = 0;
25827 win2_reg22 = 0;
25828 win3_reg22 = 0;
25829 win4_reg22 = 0;
25830 win5_reg22 = 0;
25831 win6_reg22 = 0;
25832 win7_reg22 = 0;
25833 win0_reg23 = 0;
25834 win1_reg23 = 0;
25835 win2_reg23 = 0;
25836 win3_reg23 = 0;
25837 win4_reg23 = 0;
25838 win5_reg23 = 0;
25839 win6_reg23 = 0;
25840 win7_reg23 = 0;
25841 win0_reg24 = 0;
25842 win1_reg24 = 0;
25843 win2_reg24 = 0;
25844 win3_reg24 = 0;
25845 win4_reg24 = 0;
25846 win5_reg24 = 0;
25847 win6_reg24 = 0;
25848 win7_reg24 = 0;
25849 win0_reg25 = 0;
25850 win1_reg25 = 0;
25851 win2_reg25 = 0;
25852 win3_reg25 = 0;
25853 win4_reg25 = 0;
25854 win5_reg25 = 0;
25855 win6_reg25 = 0;
25856 win7_reg25 = 0;
25857 win0_reg26 = 0;
25858 win1_reg26 = 0;
25859 win2_reg26 = 0;
25860 win3_reg26 = 0;
25861 win4_reg26 = 0;
25862 win5_reg26 = 0;
25863 win6_reg26 = 0;
25864 win7_reg26 = 0;
25865 win0_reg27 = 0;
25866 win1_reg27 = 0;
25867 win2_reg27 = 0;
25868 win3_reg27 = 0;
25869 win4_reg27 = 0;
25870 win5_reg27 = 0;
25871 win6_reg27 = 0;
25872 win7_reg27 = 0;
25873 win0_reg28 = 0;
25874 win1_reg28 = 0;
25875 win2_reg28 = 0;
25876 win3_reg28 = 0;
25877 win4_reg28 = 0;
25878 win5_reg28 = 0;
25879 win6_reg28 = 0;
25880 win7_reg28 = 0;
25881 win0_reg29 = 0;
25882 win1_reg29 = 0;
25883 win2_reg29 = 0;
25884 win3_reg29 = 0;
25885 win4_reg29 = 0;
25886 win5_reg29 = 0;
25887 win6_reg29 = 0;
25888 win7_reg29 = 0;
25889 win0_reg30 = 0;
25890 win1_reg30 = 0;
25891 win2_reg30 = 0;
25892 win3_reg30 = 0;
25893 win4_reg30 = 0;
25894 win5_reg30 = 0;
25895 win6_reg30 = 0;
25896 win7_reg30 = 0;
25897 win0_reg31 = 0;
25898 win1_reg31 = 0;
25899 win2_reg31 = 0;
25900 win3_reg31 = 0;
25901 win4_reg31 = 0;
25902 win5_reg31 = 0;
25903 win6_reg31 = 0;
25904 win7_reg31 = 0;
25905
25906 // Global registers
25907 th_gl = `POR_GL;
25908 gl0_reg0 = 0;
25909 gl1_reg0 = 0;
25910 gl2_reg0 = 0;
25911 gl3_reg0 = 0;
25912 gl0_reg1 = 0;
25913 gl1_reg1 = 0;
25914 gl2_reg1 = 0;
25915 gl3_reg1 = 0;
25916 gl0_reg2 = 0;
25917 gl1_reg2 = 0;
25918 gl2_reg2 = 0;
25919 gl3_reg2 = 0;
25920 gl0_reg3 = 0;
25921 gl1_reg3 = 0;
25922 gl2_reg3 = 0;
25923 gl3_reg3 = 0;
25924 gl0_reg4 = 0;
25925 gl1_reg4 = 0;
25926 gl2_reg4 = 0;
25927 gl3_reg4 = 0;
25928 gl0_reg5 = 0;
25929 gl1_reg5 = 0;
25930 gl2_reg5 = 0;
25931 gl3_reg5 = 0;
25932 gl0_reg6 = 0;
25933 gl1_reg6 = 0;
25934 gl2_reg6 = 0;
25935 gl3_reg6 = 0;
25936 gl0_reg7 = 0;
25937 gl1_reg7 = 0;
25938 gl2_reg7 = 0;
25939 gl3_reg7 = 0;
25940
25941 `PR_INFO ("nas", `INFO, "T%0d Init shadow registers.",mytnum);
25942 prev_reg0 = 0;
25943 prev_reg1 = 0;
25944 prev_reg2 = 0;
25945 prev_reg3 = 0;
25946 prev_reg4 = 0;
25947 prev_reg5 = 0;
25948 prev_reg6 = 0;
25949 prev_reg7 = 0;
25950 prev_reg8 = 0;
25951 prev_reg9 = 0;
25952 prev_reg10 = 0;
25953 prev_reg11 = 0;
25954 prev_reg12 = 0;
25955 prev_reg13 = 0;
25956 prev_reg14 = 0;
25957 prev_reg15 = 0;
25958 prev_reg16 = 0;
25959 prev_reg17 = 0;
25960 prev_reg18 = 0;
25961 prev_reg19 = 0;
25962 prev_reg20 = 0;
25963 prev_reg21 = 0;
25964 prev_reg22 = 0;
25965 prev_reg23 = 0;
25966 prev_reg24 = 0;
25967 prev_reg25 = 0;
25968 prev_reg26 = 0;
25969 prev_reg27 = 0;
25970 prev_reg28 = 0;
25971 prev_reg29 = 0;
25972 prev_reg30 = 0;
25973 prev_reg31 = 0;
25974 prev_reg32 = 0;
25975 prev_reg33 = 0;
25976 prev_reg34 = 0;
25977 prev_reg35 = 0;
25978 prev_reg36 = 0;
25979 prev_reg37 = 0;
25980 prev_reg38 = 0;
25981 prev_reg39 = 0;
25982 prev_reg40 = 0;
25983 prev_reg41 = 0;
25984 prev_reg42 = 0;
25985 prev_reg43 = 0;
25986 prev_reg44 = 0;
25987 prev_reg45 = 0;
25988 prev_reg46 = 0;
25989 prev_reg47 = 0;
25990 prev_reg48 = 0;
25991 prev_reg49 = 0;
25992 prev_reg50 = 0;
25993 prev_reg51 = 0;
25994 prev_reg52 = 0;
25995 prev_reg53 = 0;
25996 prev_reg54 = 0;
25997 prev_reg55 = 0;
25998 prev_reg56 = 0;
25999 prev_reg57 = 0;
26000 prev_reg58 = 0;
26001 prev_reg59 = 0;
26002 prev_reg60 = 0;
26003 prev_reg61 = 0;
26004 prev_reg62 = 0;
26005 prev_reg63 = 0;
26006 prev_reg64 = 0;
26007 prev_reg65 = 0;
26008 prev_reg66 = 0;
26009 prev_reg67 = 0;
26010 prev_reg68 = 0;
26011 prev_reg69 = 0;
26012 prev_reg70 = 0;
26013 prev_reg71 = 0;
26014 prev_reg72 = 0;
26015 prev_reg73 = 0;
26016 prev_reg74 = 0;
26017 prev_reg75 = 0;
26018 prev_reg76 = 0;
26019 prev_reg77 = 0;
26020 prev_reg78 = 0;
26021 prev_reg79 = 0;
26022 prev_reg80 = 0;
26023 prev_reg81 = 0;
26024 prev_reg82 = 0;
26025 prev_reg83 = 0;
26026 prev_reg84 = 0;
26027 prev_reg85 = 0;
26028 prev_reg86 = 0;
26029 prev_reg87 = 0;
26030 prev_reg88 = 0;
26031 prev_reg89 = 0;
26032 prev_reg90 = 0;
26033 prev_reg91 = 0;
26034 prev_reg92 = 0;
26035 prev_reg93 = 0;
26036 prev_reg94 = 0;
26037 prev_reg95 = 0;
26038 prev_reg96 = 0;
26039 prev_reg97 = 0;
26040 prev_reg98 = 0;
26041 prev_reg99 = 0;
26042 prev_reg100 = 0;
26043 prev_reg101 = 0;
26044 prev_reg102 = 0;
26045 prev_reg103 = 0;
26046 prev_reg104 = 0;
26047 prev_reg105 = 0;
26048 prev_reg106 = 0;
26049 prev_reg107 = 0;
26050 prev_reg108 = 0;
26051 prev_reg109 = 0;
26052 prev_reg110 = 0;
26053 prev_reg111 = 0;
26054 prev_reg112 = 0;
26055 prev_reg113 = 0;
26056 prev_reg114 = 0;
26057 prev_reg115 = 0;
26058 prev_reg116 = 0;
26059 prev_reg117 = 0;
26060 prev_reg118 = 0;
26061 prev_reg119 = 0;
26062 prev_reg120 = 0;
26063 prev_reg121 = 0;
26064 prev_reg122 = 0;
26065 prev_reg123 = 0;
26066 prev_reg124 = 0;
26067 prev_reg125 = 0;
26068 prev_reg126 = 0;
26069 prev_reg127 = 0;
26070 prev_reg128 = 0;
26071 prev_reg129 = 0;
26072 prev_reg130 = 0;
26073 prev_reg131 = 0;
26074 prev_reg132 = 0;
26075 prev_reg133 = 0;
26076 prev_reg134 = 0;
26077 prev_reg135 = 0;
26078 prev_reg136 = 0;
26079 prev_reg137 = 0;
26080 prev_reg138 = 0;
26081 prev_reg139 = 0;
26082 prev_reg140 = 0;
26083 prev_reg141 = 0;
26084 prev_reg142 = 0;
26085 prev_reg143 = 0;
26086 prev_reg144 = 0;
26087 prev_reg145 = 0;
26088 prev_reg146 = 0;
26089 prev_reg147 = 0;
26090 prev_reg148 = 0;
26091 prev_reg149 = 0;
26092 prev_reg150 = 0;
26093 prev_reg151 = 0;
26094 prev_reg152 = 0;
26095 prev_reg153 = 0;
26096 prev_reg154 = 0;
26097 prev_reg155 = 0;
26098 prev_reg156 = 0;
26099 prev_reg157 = 0;
26100 prev_reg158 = 0;
26101 prev_reg159 = 0;
26102 prev_reg160 = 0;
26103 prev_reg161 = 0;
26104 prev_reg162 = 0;
26105 prev_reg163 = 0;
26106 prev_reg164 = 0;
26107 prev_reg165 = 0;
26108 prev_reg166 = 0;
26109 prev_reg167 = 0;
26110 prev_reg168 = 0;
26111 prev_reg169 = 0;
26112 prev_reg170 = 0;
26113 prev_reg171 = 0;
26114 prev_reg172 = 0;
26115 prev_reg173 = 0;
26116 prev_reg174 = 0;
26117 prev_reg175 = 0;
26118 prev_reg176 = 0;
26119 prev_reg177 = 0;
26120 prev_reg178 = 0;
26121 prev_reg179 = 0;
26122 prev_reg180 = 0;
26123 prev_reg181 = 0;
26124 prev_reg182 = 0;
26125 prev_reg183 = 0;
26126 prev_reg184 = 0;
26127 prev_reg185 = 0;
26128 prev_reg186 = 0;
26129 prev_reg187 = 0;
26130 prev_reg188 = 0;
26131 prev_reg189 = 0;
26132 prev_reg190 = 0;
26133 prev_reg191 = 0;
26134 prev_reg192 = 0;
26135 prev_reg193 = 0;
26136 prev_reg194 = 0;
26137 prev_reg195 = 0;
26138 prev_reg196 = 0;
26139 prev_reg197 = 0;
26140 prev_reg198 = 0;
26141 prev_reg199 = 0;
26142 prev_reg200 = 0;
26143 prev_reg201 = 0;
26144 prev_reg202 = 0;
26145 prev_reg203 = 0;
26146 prev_reg204 = 0;
26147 prev_reg205 = 0;
26148 prev_reg206 = 0;
26149 prev_reg207 = 0;
26150 prev_reg208 = 0;
26151 prev_reg209 = 0;
26152 prev_reg210 = 0;
26153 prev_reg211 = 0;
26154 prev_reg212 = 0;
26155 prev_reg213 = 0;
26156 prev_reg214 = 0;
26157 prev_reg215 = 0;
26158 prev_reg216 = 0;
26159 prev_reg217 = 0;
26160 prev_reg218 = 0;
26161 prev_reg219 = 0;
26162 prev_reg220 = 0;
26163 prev_reg221 = 0;
26164 prev_reg222 = 0;
26165 prev_reg223 = 0;
26166 prev_reg224 = 0;
26167 prev_reg225 = 0;
26168 prev_reg226 = 0;
26169 prev_reg227 = 0;
26170 prev_reg228 = 0;
26171 prev_reg229 = 0;
26172 prev_reg230 = 0;
26173 prev_reg231 = 0;
26174 prev_reg232 = 0;
26175 prev_reg233 = 0;
26176 prev_reg234 = 0;
26177 prev_reg235 = 0;
26178 prev_reg236 = 0;
26179 prev_reg237 = 0;
26180 prev_reg238 = 0;
26181 prev_reg239 = 0;
26182 prev_reg240 = 0;
26183 prev_reg241 = 0;
26184 prev_reg242 = 0;
26185 prev_reg243 = 0;
26186 prev_reg244 = 0;
26187 prev_reg245 = 0;
26188 prev_reg246 = 0;
26189 prev_reg247 = 0;
26190 prev_reg248 = 0;
26191 prev_reg249 = 0;
26192 prev_reg250 = 0;
26193 prev_reg251 = 0;
26194 prev_reg252 = 0;
26195 prev_reg253 = 0;
26196 prev_reg254 = 0;
26197 prev_reg255 = 0;
26198
26199 // POR for control registers
26200 write_prev(`FPRS +`CTL_OFFSET,3'h4);
26201 write_prev(`CLEANWIN +`CTL_OFFSET,3'h7);
26202 write_prev(`CANSAVE +`CTL_OFFSET,3'h6);
26203
26204 // POR for FPRS = 0x4
26205 write_prev(`FPRS+`CTL_OFFSET,3'h4);
26206
26207 // POR for PSTATE = 0x14 (PEF, PRIV = 1)
26208 write_prev(`PSTATE + `CTL_OFFSET,'h14);
26209
26210 // POR for HPSTATE = 0x4034 (RED, HPRIV = 1)
26211 write_prev(`HPSTATE + `CTL_OFFSET,'h24);
26212
26213 // POR for TL = = 0x6 [MAXTL]
26214 write_prev(`TL + `CTL_OFFSET,'h6);
26215
26216 // POR for TT6 = = 1
26217 write_prev(`TT6 + `CTL_OFFSET,'h1);
26218
26219 // POR for GL = MAXGL = 3
26220 write_prev(`GL + `CTL_OFFSET,`POR_GL);
26221
26222 // POR for VER = {003e, 0024, 01, 0036, 07}
26223 write_prev(`VER + `CTL_OFFSET,{32'h003e0024,VER_reg[31:24],24'h030607});
26224
26225 // POR for *_cmpr registers is INT_DIS = 1
26226 write_prev(`TICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
26227 write_prev(`STICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
26228 write_prev(`HSTICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
26229
26230 // Need to define so that 1st instruction will print correctly
26231 write_prev(`PC+`CTL_OFFSET,`POR_PC);
26232
26233 first_op = 1;
26234 pc_last = `BAD_PC;
26235
26236 `ifndef EMUL_TL
26237 delta_prev[`PC_INDEX] = `BAD_PC;
26238 `endif
26239
26240 irf_offset = (mytid%4)*32;
26241 in_wmr = 0;
26242 wmr <= 0;
26243end
26244
26245//----------------------------------------------------------
26246task wmr_prev;
26247 begin // {
26248
26249 // For WMR, we will set to 0x0, so that initial deltas
26250
26251 //
26252
26253 // WMR for PSTATE = 0x14 (PEF, PRIV = 1)
26254 // write_prev(`PSTATE + `CTL_OFFSET,'h00);
26255
26256 // WMR for HPSTATE = 0x4034 (RED, HPRIV = 1)
26257 // write_prev(`HPSTATE + `CTL_OFFSET,'h00);
26258
26259 // WMR for TL = = 0x6 [MAXTL]
26260 // write_prev(`TL + `CTL_OFFSET,'h0);
26261
26262 // WMR for TT6 = = 1
26263 // write_prev(`TT6 + `CTL_OFFSET,'h1);
26264
26265 // WMR for GL = MAXGL = 3
26266 // write_prev(`GL + `CTL_OFFSET,0);
26267
26268 end // }
26269endtask
26270
26271//----------------------------------------------------------
26272task por_prev;
26273 begin // {
26274
26275 // For POR, we will set to 0x0, so that initial deltas
26276 // and prev state are all consistent with DUT. No values
26277 // are preserved
26278
26279 `PR_ALWAYS ("arg", `ALWAYS,"T%0d Resetting Nas Pipe states for POR ..",mytnum);
26280 delta_fx4[`NEXT_INDEX] <= `FIRST_INDEX;
26281 delta_fx4[`FIRST_INDEX] <= 77'hx;
26282 delta_fx5[`NEXT_INDEX] <= `FIRST_INDEX;
26283 delta_fb[`NEXT_INDEX] <= `FIRST_INDEX;
26284 delta_fw[`NEXT_INDEX] <= `FIRST_INDEX;
26285 delta_fw1[`NEXT_INDEX] <= `FIRST_INDEX;
26286 delta_fw2[`NEXT_INDEX] <= `FIRST_INDEX;
26287 // Window registers
26288 win0_reg8 = 0;
26289 win1_reg8 = 0;
26290 win2_reg8 = 0;
26291 win3_reg8 = 0;
26292 win4_reg8 = 0;
26293 win5_reg8 = 0;
26294 win6_reg8 = 0;
26295 win7_reg8 = 0;
26296 win0_reg9 = 0;
26297 win1_reg9 = 0;
26298 win2_reg9 = 0;
26299 win3_reg9 = 0;
26300 win4_reg9 = 0;
26301 win5_reg9 = 0;
26302 win6_reg9 = 0;
26303 win7_reg9 = 0;
26304 win0_reg10 = 0;
26305 win1_reg10 = 0;
26306 win2_reg10 = 0;
26307 win3_reg10 = 0;
26308 win4_reg10 = 0;
26309 win5_reg10 = 0;
26310 win6_reg10 = 0;
26311 win7_reg10 = 0;
26312 win0_reg11 = 0;
26313 win1_reg11 = 0;
26314 win2_reg11 = 0;
26315 win3_reg11 = 0;
26316 win4_reg11 = 0;
26317 win5_reg11 = 0;
26318 win6_reg11 = 0;
26319 win7_reg11 = 0;
26320 win0_reg12 = 0;
26321 win1_reg12 = 0;
26322 win2_reg12 = 0;
26323 win3_reg12 = 0;
26324 win4_reg12 = 0;
26325 win5_reg12 = 0;
26326 win6_reg12 = 0;
26327 win7_reg12 = 0;
26328 win0_reg13 = 0;
26329 win1_reg13 = 0;
26330 win2_reg13 = 0;
26331 win3_reg13 = 0;
26332 win4_reg13 = 0;
26333 win5_reg13 = 0;
26334 win6_reg13 = 0;
26335 win7_reg13 = 0;
26336 win0_reg14 = 0;
26337 win1_reg14 = 0;
26338 win2_reg14 = 0;
26339 win3_reg14 = 0;
26340 win4_reg14 = 0;
26341 win5_reg14 = 0;
26342 win6_reg14 = 0;
26343 win7_reg14 = 0;
26344 win0_reg15 = 0;
26345 win1_reg15 = 0;
26346 win2_reg15 = 0;
26347 win3_reg15 = 0;
26348 win4_reg15 = 0;
26349 win5_reg15 = 0;
26350 win6_reg15 = 0;
26351 win7_reg15 = 0;
26352 win0_reg16 = 0;
26353 win1_reg16 = 0;
26354 win2_reg16 = 0;
26355 win3_reg16 = 0;
26356 win4_reg16 = 0;
26357 win5_reg16 = 0;
26358 win6_reg16 = 0;
26359 win7_reg16 = 0;
26360 win0_reg17 = 0;
26361 win1_reg17 = 0;
26362 win2_reg17 = 0;
26363 win3_reg17 = 0;
26364 win4_reg17 = 0;
26365 win5_reg17 = 0;
26366 win6_reg17 = 0;
26367 win7_reg17 = 0;
26368 win0_reg18 = 0;
26369 win1_reg18 = 0;
26370 win2_reg18 = 0;
26371 win3_reg18 = 0;
26372 win4_reg18 = 0;
26373 win5_reg18 = 0;
26374 win6_reg18 = 0;
26375 win7_reg18 = 0;
26376 win0_reg19 = 0;
26377 win1_reg19 = 0;
26378 win2_reg19 = 0;
26379 win3_reg19 = 0;
26380 win4_reg19 = 0;
26381 win5_reg19 = 0;
26382 win6_reg19 = 0;
26383 win7_reg19 = 0;
26384 win0_reg20 = 0;
26385 win1_reg20 = 0;
26386 win2_reg20 = 0;
26387 win3_reg20 = 0;
26388 win4_reg20 = 0;
26389 win5_reg20 = 0;
26390 win6_reg20 = 0;
26391 win7_reg20 = 0;
26392 win0_reg21 = 0;
26393 win1_reg21 = 0;
26394 win2_reg21 = 0;
26395 win3_reg21 = 0;
26396 win4_reg21 = 0;
26397 win5_reg21 = 0;
26398 win6_reg21 = 0;
26399 win7_reg21 = 0;
26400 win0_reg22 = 0;
26401 win1_reg22 = 0;
26402 win2_reg22 = 0;
26403 win3_reg22 = 0;
26404 win4_reg22 = 0;
26405 win5_reg22 = 0;
26406 win6_reg22 = 0;
26407 win7_reg22 = 0;
26408 win0_reg23 = 0;
26409 win1_reg23 = 0;
26410 win2_reg23 = 0;
26411 win3_reg23 = 0;
26412 win4_reg23 = 0;
26413 win5_reg23 = 0;
26414 win6_reg23 = 0;
26415 win7_reg23 = 0;
26416 win0_reg24 = 0;
26417 win1_reg24 = 0;
26418 win2_reg24 = 0;
26419 win3_reg24 = 0;
26420 win4_reg24 = 0;
26421 win5_reg24 = 0;
26422 win6_reg24 = 0;
26423 win7_reg24 = 0;
26424 win0_reg25 = 0;
26425 win1_reg25 = 0;
26426 win2_reg25 = 0;
26427 win3_reg25 = 0;
26428 win4_reg25 = 0;
26429 win5_reg25 = 0;
26430 win6_reg25 = 0;
26431 win7_reg25 = 0;
26432 win0_reg26 = 0;
26433 win1_reg26 = 0;
26434 win2_reg26 = 0;
26435 win3_reg26 = 0;
26436 win4_reg26 = 0;
26437 win5_reg26 = 0;
26438 win6_reg26 = 0;
26439 win7_reg26 = 0;
26440 win0_reg27 = 0;
26441 win1_reg27 = 0;
26442 win2_reg27 = 0;
26443 win3_reg27 = 0;
26444 win4_reg27 = 0;
26445 win5_reg27 = 0;
26446 win6_reg27 = 0;
26447 win7_reg27 = 0;
26448 win0_reg28 = 0;
26449 win1_reg28 = 0;
26450 win2_reg28 = 0;
26451 win3_reg28 = 0;
26452 win4_reg28 = 0;
26453 win5_reg28 = 0;
26454 win6_reg28 = 0;
26455 win7_reg28 = 0;
26456 win0_reg29 = 0;
26457 win1_reg29 = 0;
26458 win2_reg29 = 0;
26459 win3_reg29 = 0;
26460 win4_reg29 = 0;
26461 win5_reg29 = 0;
26462 win6_reg29 = 0;
26463 win7_reg29 = 0;
26464 win0_reg30 = 0;
26465 win1_reg30 = 0;
26466 win2_reg30 = 0;
26467 win3_reg30 = 0;
26468 win4_reg30 = 0;
26469 win5_reg30 = 0;
26470 win6_reg30 = 0;
26471 win7_reg30 = 0;
26472 win0_reg31 = 0;
26473 win1_reg31 = 0;
26474 win2_reg31 = 0;
26475 win3_reg31 = 0;
26476 win4_reg31 = 0;
26477 win5_reg31 = 0;
26478 win6_reg31 = 0;
26479 win7_reg31 = 0;
26480
26481 // Global registers
26482 th_gl = `POR_GL;
26483 gl0_reg0 = 0;
26484 gl1_reg0 = 0;
26485 gl2_reg0 = 0;
26486 gl3_reg0 = 0;
26487 gl0_reg1 = 0;
26488 gl1_reg1 = 0;
26489 gl2_reg1 = 0;
26490 gl3_reg1 = 0;
26491 gl0_reg2 = 0;
26492 gl1_reg2 = 0;
26493 gl2_reg2 = 0;
26494 gl3_reg2 = 0;
26495 gl0_reg3 = 0;
26496 gl1_reg3 = 0;
26497 gl2_reg3 = 0;
26498 gl3_reg3 = 0;
26499 gl0_reg4 = 0;
26500 gl1_reg4 = 0;
26501 gl2_reg4 = 0;
26502 gl3_reg4 = 0;
26503 gl0_reg5 = 0;
26504 gl1_reg5 = 0;
26505 gl2_reg5 = 0;
26506 gl3_reg5 = 0;
26507 gl0_reg6 = 0;
26508 gl1_reg6 = 0;
26509 gl2_reg6 = 0;
26510 gl3_reg6 = 0;
26511 gl0_reg7 = 0;
26512 gl1_reg7 = 0;
26513 gl2_reg7 = 0;
26514 gl3_reg7 = 0;
26515
26516 `PR_INFO ("nas", `INFO, "T%0d Init shadow registers.",mytnum);
26517 prev_reg0 = 0;
26518 prev_reg1 = 0;
26519 prev_reg2 = 0;
26520 prev_reg3 = 0;
26521 prev_reg4 = 0;
26522 prev_reg5 = 0;
26523 prev_reg6 = 0;
26524 prev_reg7 = 0;
26525 prev_reg8 = 0;
26526 prev_reg9 = 0;
26527 prev_reg10 = 0;
26528 prev_reg11 = 0;
26529 prev_reg12 = 0;
26530 prev_reg13 = 0;
26531 prev_reg14 = 0;
26532 prev_reg15 = 0;
26533 prev_reg16 = 0;
26534 prev_reg17 = 0;
26535 prev_reg18 = 0;
26536 prev_reg19 = 0;
26537 prev_reg20 = 0;
26538 prev_reg21 = 0;
26539 prev_reg22 = 0;
26540 prev_reg23 = 0;
26541 prev_reg24 = 0;
26542 prev_reg25 = 0;
26543 prev_reg26 = 0;
26544 prev_reg27 = 0;
26545 prev_reg28 = 0;
26546 prev_reg29 = 0;
26547 prev_reg30 = 0;
26548 prev_reg31 = 0;
26549 prev_reg32 = 0;
26550 prev_reg33 = 0;
26551 prev_reg34 = 0;
26552 prev_reg35 = 0;
26553 prev_reg36 = 0;
26554 prev_reg37 = 0;
26555 prev_reg38 = 0;
26556 prev_reg39 = 0;
26557 prev_reg40 = 0;
26558 prev_reg41 = 0;
26559 prev_reg42 = 0;
26560 prev_reg43 = 0;
26561 prev_reg44 = 0;
26562 prev_reg45 = 0;
26563 prev_reg46 = 0;
26564 prev_reg47 = 0;
26565 prev_reg48 = 0;
26566 prev_reg49 = 0;
26567 prev_reg50 = 0;
26568 prev_reg51 = 0;
26569 prev_reg52 = 0;
26570 prev_reg53 = 0;
26571 prev_reg54 = 0;
26572 prev_reg55 = 0;
26573 prev_reg56 = 0;
26574 prev_reg57 = 0;
26575 prev_reg58 = 0;
26576 prev_reg59 = 0;
26577 prev_reg60 = 0;
26578 prev_reg61 = 0;
26579 prev_reg62 = 0;
26580 prev_reg63 = 0;
26581 prev_reg64 = 0;
26582 prev_reg65 = 0;
26583 prev_reg66 = 0;
26584 prev_reg67 = 0;
26585 prev_reg68 = 0;
26586 prev_reg69 = 0;
26587 prev_reg70 = 0;
26588 prev_reg71 = 0;
26589 prev_reg72 = 0;
26590 prev_reg73 = 0;
26591 prev_reg74 = 0;
26592 prev_reg75 = 0;
26593 prev_reg76 = 0;
26594 prev_reg77 = 0;
26595 prev_reg78 = 0;
26596 prev_reg79 = 0;
26597 prev_reg80 = 0;
26598 prev_reg81 = 0;
26599 prev_reg82 = 0;
26600 prev_reg83 = 0;
26601 prev_reg84 = 0;
26602 prev_reg85 = 0;
26603 prev_reg86 = 0;
26604 prev_reg87 = 0;
26605 prev_reg88 = 0;
26606 prev_reg89 = 0;
26607 prev_reg90 = 0;
26608 prev_reg91 = 0;
26609 prev_reg92 = 0;
26610 prev_reg93 = 0;
26611 prev_reg94 = 0;
26612 prev_reg95 = 0;
26613 prev_reg96 = 0;
26614 prev_reg97 = 0;
26615 prev_reg98 = 0;
26616 prev_reg99 = 0;
26617 prev_reg100 = 0;
26618 prev_reg101 = 0;
26619 prev_reg102 = 0;
26620 prev_reg103 = 0;
26621 prev_reg104 = 0;
26622 prev_reg105 = 0;
26623 prev_reg106 = 0;
26624 prev_reg107 = 0;
26625 prev_reg108 = 0;
26626 prev_reg109 = 0;
26627 prev_reg110 = 0;
26628 prev_reg111 = 0;
26629 prev_reg112 = 0;
26630 prev_reg113 = 0;
26631 prev_reg114 = 0;
26632 prev_reg115 = 0;
26633 prev_reg116 = 0;
26634 prev_reg117 = 0;
26635 prev_reg118 = 0;
26636 prev_reg119 = 0;
26637 prev_reg120 = 0;
26638 prev_reg121 = 0;
26639 prev_reg122 = 0;
26640 prev_reg123 = 0;
26641 prev_reg124 = 0;
26642 prev_reg125 = 0;
26643 prev_reg126 = 0;
26644 prev_reg127 = 0;
26645 prev_reg128 = 0;
26646 prev_reg129 = 0;
26647 prev_reg130 = 0;
26648 prev_reg131 = 0;
26649 prev_reg132 = 0;
26650 prev_reg133 = 0;
26651 prev_reg134 = 0;
26652 prev_reg135 = 0;
26653 prev_reg136 = 0;
26654 prev_reg137 = 0;
26655 prev_reg138 = 0;
26656 prev_reg139 = 0;
26657 prev_reg140 = 0;
26658 prev_reg141 = 0;
26659 prev_reg142 = 0;
26660 prev_reg143 = 0;
26661 prev_reg144 = 0;
26662 prev_reg145 = 0;
26663 prev_reg146 = 0;
26664 prev_reg147 = 0;
26665 prev_reg148 = 0;
26666 prev_reg149 = 0;
26667 prev_reg150 = 0;
26668 prev_reg151 = 0;
26669 prev_reg152 = 0;
26670 prev_reg153 = 0;
26671 prev_reg154 = 0;
26672 prev_reg155 = 0;
26673 prev_reg156 = 0;
26674 prev_reg157 = 0;
26675 prev_reg158 = 0;
26676 prev_reg159 = 0;
26677 prev_reg160 = 0;
26678 prev_reg161 = 0;
26679 prev_reg162 = 0;
26680 prev_reg163 = 0;
26681 prev_reg164 = 0;
26682 prev_reg165 = 0;
26683 prev_reg166 = 0;
26684 prev_reg167 = 0;
26685 prev_reg168 = 0;
26686 prev_reg169 = 0;
26687 prev_reg170 = 0;
26688 prev_reg171 = 0;
26689 prev_reg172 = 0;
26690 prev_reg173 = 0;
26691 prev_reg174 = 0;
26692 prev_reg175 = 0;
26693 prev_reg176 = 0;
26694 prev_reg177 = 0;
26695 prev_reg178 = 0;
26696 prev_reg179 = 0;
26697 prev_reg180 = 0;
26698 prev_reg181 = 0;
26699 prev_reg182 = 0;
26700 prev_reg183 = 0;
26701 prev_reg184 = 0;
26702 prev_reg185 = 0;
26703 prev_reg186 = 0;
26704 prev_reg187 = 0;
26705 prev_reg188 = 0;
26706 prev_reg189 = 0;
26707 prev_reg190 = 0;
26708 prev_reg191 = 0;
26709 prev_reg192 = 0;
26710 prev_reg193 = 0;
26711 prev_reg194 = 0;
26712 prev_reg195 = 0;
26713 prev_reg196 = 0;
26714 prev_reg197 = 0;
26715 prev_reg198 = 0;
26716 prev_reg199 = 0;
26717 prev_reg200 = 0;
26718 prev_reg201 = 0;
26719 prev_reg202 = 0;
26720 prev_reg203 = 0;
26721 prev_reg204 = 0;
26722 prev_reg205 = 0;
26723 prev_reg206 = 0;
26724 prev_reg207 = 0;
26725 prev_reg208 = 0;
26726 prev_reg209 = 0;
26727 prev_reg210 = 0;
26728 prev_reg211 = 0;
26729 prev_reg212 = 0;
26730 prev_reg213 = 0;
26731 prev_reg214 = 0;
26732 prev_reg215 = 0;
26733 prev_reg216 = 0;
26734 prev_reg217 = 0;
26735 prev_reg218 = 0;
26736 prev_reg219 = 0;
26737 prev_reg220 = 0;
26738 prev_reg221 = 0;
26739 prev_reg222 = 0;
26740 prev_reg223 = 0;
26741 prev_reg224 = 0;
26742 prev_reg225 = 0;
26743 prev_reg226 = 0;
26744 prev_reg227 = 0;
26745 prev_reg228 = 0;
26746 prev_reg229 = 0;
26747 prev_reg230 = 0;
26748 prev_reg231 = 0;
26749 prev_reg232 = 0;
26750 prev_reg233 = 0;
26751 prev_reg234 = 0;
26752 prev_reg235 = 0;
26753 prev_reg236 = 0;
26754 prev_reg237 = 0;
26755 prev_reg238 = 0;
26756 prev_reg239 = 0;
26757 prev_reg240 = 0;
26758 prev_reg241 = 0;
26759 prev_reg242 = 0;
26760 prev_reg243 = 0;
26761 prev_reg244 = 0;
26762 prev_reg245 = 0;
26763 prev_reg246 = 0;
26764 prev_reg247 = 0;
26765 prev_reg248 = 0;
26766 prev_reg249 = 0;
26767 prev_reg250 = 0;
26768 prev_reg251 = 0;
26769 prev_reg252 = 0;
26770 prev_reg253 = 0;
26771 prev_reg254 = 0;
26772 prev_reg255 = 0;
26773
26774 // POR for control registers
26775 write_prev(`FPRS +`CTL_OFFSET,3'h4);
26776 write_prev(`CLEANWIN +`CTL_OFFSET,3'h7);
26777 write_prev(`CANSAVE +`CTL_OFFSET,3'h6);
26778
26779 // POR for FPRS = 0x4
26780 write_prev(`FPRS+`CTL_OFFSET,3'h4);
26781
26782 // POR for PSTATE = 0x14 (PEF, PRIV = 1)
26783 write_prev(`PSTATE + `CTL_OFFSET,'h14);
26784
26785 // POR for HPSTATE = 0x4034 (RED, HPRIV = 1)
26786 write_prev(`HPSTATE + `CTL_OFFSET,'h24);
26787
26788 // POR for TL = = 0x6 [MAXTL]
26789 write_prev(`TL + `CTL_OFFSET,'h6);
26790
26791 // POR for TT6 = = 1
26792 write_prev(`TT6 + `CTL_OFFSET,'h1);
26793
26794 // POR for GL = MAXGL = 3
26795 write_prev(`GL + `CTL_OFFSET,`POR_GL);
26796
26797 // POR for VER = {003e, 0024, 01, 0036, 07}
26798 write_prev(`VER + `CTL_OFFSET,64'h003e002410030607);
26799
26800 // POR for *_cmpr registers is INT_DIS = 1
26801 write_prev(`TICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
26802 write_prev(`STICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
26803 write_prev(`HSTICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
26804
26805 // Need to define so that 1st instruction will print correctly
26806 write_prev(`PC+`CTL_OFFSET,`POR_PC);
26807
26808 first_op = 1;
26809 pc_last = `BAD_PC;
26810
26811 end // }
26812endtask
26813
26814//----------------------------------------------------------
26815//----------------------------------------------------------
26816 `else // GATESIM
26817
26818// Watch for Good/Bad trap
26819
26820wire [5:0] mytnum = (mycid*8)+mytid;
26821wire mytg = mytid >> 2;
26822integer junk;
26823reg nas_pipe_enable;
26824
26825integer inst_count;
26826
26827 // Delimiter changes whether flat or hierarchical netlist
26828 `ifdef GATES_FLAT
26829 wire myclk = tb_top.cpu.spc4.gclk;
26830 wire dec_inst_valid_m = mytg ? tb_top.cpu.spc4.dec_inst_valid_m[1] : tb_top.cpu.spc4.dec_inst_valid_m[0];
26831 wire [1:0] dec_tid_m = mytg ? tb_top.cpu.spc4.dec_tid1_m : tb_top.cpu.spc4.dec_tid0_m;
26832 wire dec_flush_b = mytg ? tb_top.cpu.spc4.dec_flush_b[1] : tb_top.cpu.spc4.dec_flush_b[0];
26833 wire tlu_flush_ifu = tb_top.cpu.spc4.tlu_flush_ifu[mytid];
26834 wire [47:0] pc_d = mytg ? {tb_top.cpu.spc4.tlu_pc_1_d[47:2],2'b0} : {tb_top.cpu.spc4.tlu_pc_0_d[47:2],2'b0};
26835 wire [31:0] op_d = mytg ? tb_top.cpu.spc4.dec_inst1_d[31:0] : tb_top.cpu.spc4.dec_inst0_d[31:0];
26836 `else
26837 wire myclk = tb_top.cpu.spc4.gclk;
26838 wire dec_inst_valid_m = mytg ? tb_top.cpu.spc4.dec_inst_valid_m[1] : tb_top.cpu.spc4.dec_inst_valid_m[0];
26839 wire [1:0] dec_tid_m = mytg ? tb_top.cpu.spc4.dec_tid1_m : tb_top.cpu.spc4.dec_tid0_m;
26840 wire dec_flush_b = mytg ? tb_top.cpu.spc4.dec_flush_b[1] : tb_top.cpu.spc4.dec_flush_b[0];
26841 wire tlu_flush_ifu = tb_top.cpu.spc4.tlu_flush_ifu[mytid];
26842 wire [47:0] pc_d = mytg ? {tb_top.cpu.spc4.tlu_pc_1_d[47:2],2'b0} : {tb_top.cpu.spc4.tlu_pc_0_d[47:2],2'b0};
26843 wire [31:0] op_d = mytg ? tb_top.cpu.spc4.dec_inst1_d[31:0] : tb_top.cpu.spc4.dec_inst0_d[31:0];
26844 `endif
26845
26846 reg dec_inst_valid_b;
26847 reg [1:0] dec_tid_b;
26848
26849 reg inst_valid_w;
26850 reg inst_valid_fx4;
26851 reg inst_valid_fx5;
26852 reg inst_valid_fb;
26853 reg inst_valid_fw;
26854 reg inst_valid_fw1;
26855 reg inst_valid_fw2;
26856 reg [47:0] pc_e;
26857 reg [47:0] pc_m;
26858 reg [47:0] pc_b;
26859 reg [47:0] pc_w;
26860 reg [47:0] pc_fx4;
26861 reg [47:0] pc_fx5;
26862 reg [47:0] pc_fb;
26863 reg [47:0] pc_fw;
26864 reg [47:0] pc_fw1;
26865 reg [47:0] pc_fw2;
26866 reg [31:0] op_e;
26867 reg [31:0] op_m;
26868 reg [31:0] op_b;
26869 reg [31:0] op_w;
26870 reg [31:0] op_fx4;
26871 reg [31:0] op_fx5;
26872 reg [31:0] op_fb;
26873 reg [31:0] op_fw;
26874 reg [31:0] op_fw1;
26875 reg [31:0] op_fw2;
26876
26877 wire inst_valid_b = dec_inst_valid_b && (dec_tid_b==mytid[1:0]) && !(dec_flush_b || tlu_flush_ifu);
26878
26879initial begin // {
26880 inst_count = 1;
26881 nas_pipe_enable = 1;
26882end // }
26883
26884
26885always @ (posedge myclk) begin // {
26886
26887 dec_inst_valid_b <= dec_inst_valid_m;
26888 dec_tid_b <= dec_tid_m;
26889 op_e <= op_d;
26890 op_m <= op_e;
26891 op_b <= op_m;
26892 op_w <= op_b;
26893 op_fx4 <= op_w;
26894 op_fx5 <= op_fx4;
26895 op_fb <= op_fx5;
26896 op_fw <= op_fb;
26897 op_fw1 <= op_fw;
26898 op_fw2 <= op_fw1;
26899 pc_e <= pc_d;
26900 pc_m <= pc_e;
26901 pc_b <= pc_m;
26902 pc_w <= pc_b;
26903 pc_fx4 <= pc_w;
26904 pc_fx5 <= pc_fx4;
26905 pc_fb <= pc_fx5;
26906 pc_fw <= pc_fb;
26907 pc_fw1 <= pc_fw;
26908 pc_fw2 <= pc_fw1;
26909 inst_valid_w <= inst_valid_b;
26910 inst_valid_fx4 <= inst_valid_w;
26911 inst_valid_fx5 <= inst_valid_fx4;
26912 inst_valid_fb <= inst_valid_fx5;
26913 inst_valid_fw <= inst_valid_fb;
26914 inst_valid_fw1 <= inst_valid_fw;
26915 inst_valid_fw2 <= inst_valid_fw1;
26916
26917 if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable) begin // {
26918
26919 if (inst_valid_fw2) begin // {
26920
26921 // Print PC/opcode for debugging
26922 `PR_NORMAL ("nas", `NORMAL, "@%0d #%0d T%0d %h [%h]", $time, inst_count, mytnum, pc_fw2, op_fw2);
26923 inst_count = inst_count + 1;
26924
26925 //----------
26926 // End detection for GateSim runs
26927 for (junk=0;junk<`PARGS.bad_trap_count;junk=junk+1) begin // {
26928 if (({16'b0,pc_fw2}&`PC_MASK)===(`PARGS.bad_trap_addr[junk]&`PC_MASK)) begin // {
26929 `PR_ERROR ("nas",`ERROR, "T%0d reached Bad Trap [GATESIM]", mytnum);
26930 nas_pipe_enable = 1'b0;
26931 end //}
26932 end //}
26933 for (junk=0;junk<`PARGS.good_trap_count;junk=junk+1) begin // {
26934 if (({16'b0,pc_fw2}&`PC_MASK)===(`PARGS.good_trap_addr[junk]&`PC_MASK)) begin // {
26935 `TOP.finished_tids[mytnum] = 1'b1;
26936 `PARGS.th_check_enable[mytnum] = 1'b0;
26937 nas_pipe_enable = 1'b0;
26938 `PR_NORMAL ("nas", `NORMAL, "T%0d reached Good Trap. Disabling checking for thread %0d [GATESIM]", mytnum,mytnum);
26939 end //}
26940 end //}
26941
26942 end // }
26943 end // }
26944
26945end //}
26946
26947
26948`endif
26949
26950endmodule
26951//----------------------------------------------------------
26952//----------------------------------------------------------
26953
26954`endif
26955
26956
26957`ifdef CORE_5
26958
26959
26960module nas_pipe5 (
26961 mycid,
26962 mytid,
26963
26964 opcode,
26965 PC_reg,
26966 Y_reg,
26967 CCR_reg,
26968 FPRS_reg,
26969 FSR_reg,
26970 ASI_reg,
26971 GSR_reg,
26972 TICK_CMPR_reg,
26973 STICK_CMPR_reg,
26974 HSTICK_CMPR_reg,
26975 PSTATE_reg,
26976 TL_reg,
26977 PIL_reg,
26978 TBA_reg,
26979 VER_reg,
26980 CWP_reg,
26981 CANSAVE_reg,
26982 CANRESTORE_reg,
26983 OTHERWIN_reg,
26984 WSTATE_reg,
26985 CLEANWIN_reg,
26986 SOFTINT_reg,
26987 rd_SOFTINT_reg,
26988 INTR_RECEIVE_reg,
26989 GL_reg,
26990 HPSTATE_reg,
26991 HTBA_reg,
26992 HINTP_reg,
26993
26994 CTXT_PRIM_0_reg,
26995 CTXT_SEC_0_reg,
26996 CTXT_PRIM_1_reg,
26997 CTXT_SEC_1_reg,
26998 LSU_CONTROL_reg,
26999 I_TAG_ACC_reg,
27000 D_TAG_ACC_reg,
27001 WATCHPOINT_ADDR_reg,
27002 DSFAR_reg,
27003
27004 Trap_Entry_1,
27005 Trap_Entry_2,
27006 Trap_Entry_3,
27007 Trap_Entry_4,
27008 Trap_Entry_5,
27009 Trap_Entry_6,
27010
27011 exu_valid,
27012
27013 imul_valid,
27014
27015 frf_w2_valid,
27016 frf_w1_valid,
27017 frf_w1_tid,
27018 frf_w2_tid,
27019 frf_w1_addr,
27020 frf_w2_addr,
27021
27022 asi_valid,
27023 asi_in_progress,
27024
27025 fp_valid,
27026
27027 idiv_valid,
27028
27029 fdiv_valid,
27030
27031 lsu_valid,
27032
27033 tlu_valid
27034);
27035
27036//----------------------------------------------------------
27037input [2:0] mycid;
27038input [2:0] mytid;
27039
27040input [31:0] opcode;
27041input [47:0] PC_reg;
27042input [31:0] Y_reg;
27043input [7:0] CCR_reg;
27044input [2:0] FPRS_reg;
27045input [27:0] FSR_reg;
27046input [7:0] ASI_reg;
27047input [42:0] GSR_reg;
27048input [71:0] TICK_CMPR_reg;
27049input [71:0] STICK_CMPR_reg;
27050input [71:0] HSTICK_CMPR_reg;
27051input [12:0] PSTATE_reg;
27052input [2:0] TL_reg;
27053input [3:0] PIL_reg;
27054input [32:0] TBA_reg;
27055input [63:0] VER_reg;
27056input [2:0] CWP_reg;
27057input [2:0] CANSAVE_reg;
27058input [2:0] CANRESTORE_reg;
27059input [2:0] OTHERWIN_reg;
27060input [5:0] WSTATE_reg;
27061input [2:0] CLEANWIN_reg;
27062input [16:0] SOFTINT_reg;
27063input [16:0] rd_SOFTINT_reg;
27064input [63:0] INTR_RECEIVE_reg;
27065input [1:0] GL_reg;
27066input [12:0] HPSTATE_reg;
27067input [33:0] HTBA_reg;
27068input HINTP_reg;
27069
27070input [63:0] CTXT_PRIM_0_reg;
27071input [63:0] CTXT_SEC_0_reg;
27072input [63:0] CTXT_PRIM_1_reg;
27073input [63:0] CTXT_SEC_1_reg;
27074input [63:0] LSU_CONTROL_reg;
27075input [63:0] I_TAG_ACC_reg;
27076input [63:0] D_TAG_ACC_reg;
27077input [63:0] WATCHPOINT_ADDR_reg;
27078input [47:0] DSFAR_reg;
27079
27080input [151:0] Trap_Entry_1;
27081input [151:0] Trap_Entry_2;
27082input [151:0] Trap_Entry_3;
27083input [151:0] Trap_Entry_4;
27084input [151:0] Trap_Entry_5;
27085input [151:0] Trap_Entry_6;
27086
27087input exu_valid;
27088
27089input imul_valid;
27090
27091input [1:0] frf_w2_valid;
27092input [2:0] frf_w2_tid;
27093input [4:0] frf_w2_addr;
27094
27095input [1:0] frf_w1_valid;
27096input [2:0] frf_w1_tid;
27097input [4:0] frf_w1_addr;
27098
27099input asi_valid; // ASI/ASR/PR writes done ..
27100input asi_in_progress; // ASI/ASR/PR in progess
27101
27102input fp_valid;
27103
27104input idiv_valid;
27105
27106input fdiv_valid;
27107
27108input lsu_valid;
27109
27110input tlu_valid;
27111
27112`ifndef GATESIM
27113
27114//----------------------------------------------------------
27115// Register assignments
27116//----------------------------------------------------------
27117`include "nas_regs.v"
27118//----------------------------------------------------------
27119
27120wire exu_complete;
27121wire imul_complete;
27122wire idiv_complete;
27123wire tlu_complete;
27124wire fp_complete;
27125wire fdiv_complete;
27126wire lsu_complete;
27127wire asi_complete;
27128wire [7:0] complete_w;
27129reg [7:0] complete_fx4;
27130reg [7:0] complete_fx5;
27131reg [7:0] complete_fb;
27132reg [7:0] complete_fw;
27133reg [7:0] complete_fw1;
27134reg [7:0] complete_fw2;
27135
27136`ifndef EMUL_TL
27137// delta_* = {type(2bits),win(3bits),regnum(8bits),value(64bits)}
27138reg [`DELTA_WIDTH:0] delta_fx4 [0:(`MAX_INDEX)];
27139reg [`DELTA_WIDTH:0] delta_fx5 [0:(`MAX_INDEX)];
27140reg [`DELTA_WIDTH:0] delta_fb [0:(`MAX_INDEX)];
27141reg [`DELTA_WIDTH:0] delta_fw [0:(`MAX_INDEX)];
27142reg [`DELTA_WIDTH:0] delta_fw1 [0:(`MAX_INDEX)];
27143reg [`DELTA_WIDTH:0] delta_fw2 [0:(`MAX_INDEX)];
27144reg [`DELTA_WIDTH:0] delta_prev [0:(`MAX_INDEX)];
27145`endif
27146
27147reg [2:0] cwp_fx4;
27148reg [2:0] cwp_fx5;
27149reg [2:0] cwp_fb;
27150reg [2:0] cwp_fw;
27151reg [2:0] cwp_fw1;
27152reg [2:0] cwp_fw2;
27153reg [2:0] cwp_last;
27154
27155
27156// need to change in several places in this file
27157reg [63:0] prev_reg0; // includes G,W,C,F registers
27158reg [63:0] prev_reg1; // includes G,W,C,F registers
27159reg [63:0] prev_reg2; // includes G,W,C,F registers
27160reg [63:0] prev_reg3; // includes G,W,C,F registers
27161reg [63:0] prev_reg4; // includes G,W,C,F registers
27162reg [63:0] prev_reg5; // includes G,W,C,F registers
27163reg [63:0] prev_reg6; // includes G,W,C,F registers
27164reg [63:0] prev_reg7; // includes G,W,C,F registers
27165reg [63:0] prev_reg8; // includes G,W,C,F registers
27166reg [63:0] prev_reg9; // includes G,W,C,F registers
27167reg [63:0] prev_reg10; // includes G,W,C,F registers
27168reg [63:0] prev_reg11; // includes G,W,C,F registers
27169reg [63:0] prev_reg12; // includes G,W,C,F registers
27170reg [63:0] prev_reg13; // includes G,W,C,F registers
27171reg [63:0] prev_reg14; // includes G,W,C,F registers
27172reg [63:0] prev_reg15; // includes G,W,C,F registers
27173reg [63:0] prev_reg16; // includes G,W,C,F registers
27174reg [63:0] prev_reg17; // includes G,W,C,F registers
27175reg [63:0] prev_reg18; // includes G,W,C,F registers
27176reg [63:0] prev_reg19; // includes G,W,C,F registers
27177reg [63:0] prev_reg20; // includes G,W,C,F registers
27178reg [63:0] prev_reg21; // includes G,W,C,F registers
27179reg [63:0] prev_reg22; // includes G,W,C,F registers
27180reg [63:0] prev_reg23; // includes G,W,C,F registers
27181reg [63:0] prev_reg24; // includes G,W,C,F registers
27182reg [63:0] prev_reg25; // includes G,W,C,F registers
27183reg [63:0] prev_reg26; // includes G,W,C,F registers
27184reg [63:0] prev_reg27; // includes G,W,C,F registers
27185reg [63:0] prev_reg28; // includes G,W,C,F registers
27186reg [63:0] prev_reg29; // includes G,W,C,F registers
27187reg [63:0] prev_reg30; // includes G,W,C,F registers
27188reg [63:0] prev_reg31; // includes G,W,C,F registers
27189reg [63:0] prev_reg32; // includes G,W,C,F registers
27190reg [63:0] prev_reg33; // includes G,W,C,F registers
27191reg [63:0] prev_reg34; // includes G,W,C,F registers
27192reg [63:0] prev_reg35; // includes G,W,C,F registers
27193reg [63:0] prev_reg36; // includes G,W,C,F registers
27194reg [63:0] prev_reg37; // includes G,W,C,F registers
27195reg [63:0] prev_reg38; // includes G,W,C,F registers
27196reg [63:0] prev_reg39; // includes G,W,C,F registers
27197reg [63:0] prev_reg40; // includes G,W,C,F registers
27198reg [63:0] prev_reg41; // includes G,W,C,F registers
27199reg [63:0] prev_reg42; // includes G,W,C,F registers
27200reg [63:0] prev_reg43; // includes G,W,C,F registers
27201reg [63:0] prev_reg44; // includes G,W,C,F registers
27202reg [63:0] prev_reg45; // includes G,W,C,F registers
27203reg [63:0] prev_reg46; // includes G,W,C,F registers
27204reg [63:0] prev_reg47; // includes G,W,C,F registers
27205reg [63:0] prev_reg48; // includes G,W,C,F registers
27206reg [63:0] prev_reg49; // includes G,W,C,F registers
27207reg [63:0] prev_reg50; // includes G,W,C,F registers
27208reg [63:0] prev_reg51; // includes G,W,C,F registers
27209reg [63:0] prev_reg52; // includes G,W,C,F registers
27210reg [63:0] prev_reg53; // includes G,W,C,F registers
27211reg [63:0] prev_reg54; // includes G,W,C,F registers
27212reg [63:0] prev_reg55; // includes G,W,C,F registers
27213reg [63:0] prev_reg56; // includes G,W,C,F registers
27214reg [63:0] prev_reg57; // includes G,W,C,F registers
27215reg [63:0] prev_reg58; // includes G,W,C,F registers
27216reg [63:0] prev_reg59; // includes G,W,C,F registers
27217reg [63:0] prev_reg60; // includes G,W,C,F registers
27218reg [63:0] prev_reg61; // includes G,W,C,F registers
27219reg [63:0] prev_reg62; // includes G,W,C,F registers
27220reg [63:0] prev_reg63; // includes G,W,C,F registers
27221reg [63:0] prev_reg64; // includes G,W,C,F registers
27222reg [63:0] prev_reg65; // includes G,W,C,F registers
27223reg [63:0] prev_reg66; // includes G,W,C,F registers
27224reg [63:0] prev_reg67; // includes G,W,C,F registers
27225reg [63:0] prev_reg68; // includes G,W,C,F registers
27226reg [63:0] prev_reg69; // includes G,W,C,F registers
27227reg [63:0] prev_reg70; // includes G,W,C,F registers
27228reg [63:0] prev_reg71; // includes G,W,C,F registers
27229reg [63:0] prev_reg72; // includes G,W,C,F registers
27230reg [63:0] prev_reg73; // includes G,W,C,F registers
27231reg [63:0] prev_reg74; // includes G,W,C,F registers
27232reg [63:0] prev_reg75; // includes G,W,C,F registers
27233reg [63:0] prev_reg76; // includes G,W,C,F registers
27234reg [63:0] prev_reg77; // includes G,W,C,F registers
27235reg [63:0] prev_reg78; // includes G,W,C,F registers
27236reg [63:0] prev_reg79; // includes G,W,C,F registers
27237reg [63:0] prev_reg80; // includes G,W,C,F registers
27238reg [63:0] prev_reg81; // includes G,W,C,F registers
27239reg [63:0] prev_reg82; // includes G,W,C,F registers
27240reg [63:0] prev_reg83; // includes G,W,C,F registers
27241reg [63:0] prev_reg84; // includes G,W,C,F registers
27242reg [63:0] prev_reg85; // includes G,W,C,F registers
27243reg [63:0] prev_reg86; // includes G,W,C,F registers
27244reg [63:0] prev_reg87; // includes G,W,C,F registers
27245reg [63:0] prev_reg88; // includes G,W,C,F registers
27246reg [63:0] prev_reg89; // includes G,W,C,F registers
27247reg [63:0] prev_reg90; // includes G,W,C,F registers
27248reg [63:0] prev_reg91; // includes G,W,C,F registers
27249reg [63:0] prev_reg92; // includes G,W,C,F registers
27250reg [63:0] prev_reg93; // includes G,W,C,F registers
27251reg [63:0] prev_reg94; // includes G,W,C,F registers
27252reg [63:0] prev_reg95; // includes G,W,C,F registers
27253reg [63:0] prev_reg96; // includes G,W,C,F registers
27254reg [63:0] prev_reg97; // includes G,W,C,F registers
27255reg [63:0] prev_reg98; // includes G,W,C,F registers
27256reg [63:0] prev_reg99; // includes G,W,C,F registers
27257reg [63:0] prev_reg100; // includes G,W,C,F registers
27258reg [63:0] prev_reg101; // includes G,W,C,F registers
27259reg [63:0] prev_reg102; // includes G,W,C,F registers
27260reg [63:0] prev_reg103; // includes G,W,C,F registers
27261reg [63:0] prev_reg104; // includes G,W,C,F registers
27262reg [63:0] prev_reg105; // includes G,W,C,F registers
27263reg [63:0] prev_reg106; // includes G,W,C,F registers
27264reg [63:0] prev_reg107; // includes G,W,C,F registers
27265reg [63:0] prev_reg108; // includes G,W,C,F registers
27266reg [63:0] prev_reg109; // includes G,W,C,F registers
27267reg [63:0] prev_reg110; // includes G,W,C,F registers
27268reg [63:0] prev_reg111; // includes G,W,C,F registers
27269reg [63:0] prev_reg112; // includes G,W,C,F registers
27270reg [63:0] prev_reg113; // includes G,W,C,F registers
27271reg [63:0] prev_reg114; // includes G,W,C,F registers
27272reg [63:0] prev_reg115; // includes G,W,C,F registers
27273reg [63:0] prev_reg116; // includes G,W,C,F registers
27274reg [63:0] prev_reg117; // includes G,W,C,F registers
27275reg [63:0] prev_reg118; // includes G,W,C,F registers
27276reg [63:0] prev_reg119; // includes G,W,C,F registers
27277reg [63:0] prev_reg120; // includes G,W,C,F registers
27278reg [63:0] prev_reg121; // includes G,W,C,F registers
27279reg [63:0] prev_reg122; // includes G,W,C,F registers
27280reg [63:0] prev_reg123; // includes G,W,C,F registers
27281reg [63:0] prev_reg124; // includes G,W,C,F registers
27282reg [63:0] prev_reg125; // includes G,W,C,F registers
27283reg [63:0] prev_reg126; // includes G,W,C,F registers
27284reg [63:0] prev_reg127; // includes G,W,C,F registers
27285reg [63:0] prev_reg128; // includes G,W,C,F registers
27286reg [63:0] prev_reg129; // includes G,W,C,F registers
27287reg [63:0] prev_reg130; // includes G,W,C,F registers
27288reg [63:0] prev_reg131; // includes G,W,C,F registers
27289reg [63:0] prev_reg132; // includes G,W,C,F registers
27290reg [63:0] prev_reg133; // includes G,W,C,F registers
27291reg [63:0] prev_reg134; // includes G,W,C,F registers
27292reg [63:0] prev_reg135; // includes G,W,C,F registers
27293reg [63:0] prev_reg136; // includes G,W,C,F registers
27294reg [63:0] prev_reg137; // includes G,W,C,F registers
27295reg [63:0] prev_reg138; // includes G,W,C,F registers
27296reg [63:0] prev_reg139; // includes G,W,C,F registers
27297reg [63:0] prev_reg140; // includes G,W,C,F registers
27298reg [63:0] prev_reg141; // includes G,W,C,F registers
27299reg [63:0] prev_reg142; // includes G,W,C,F registers
27300reg [63:0] prev_reg143; // includes G,W,C,F registers
27301reg [63:0] prev_reg144; // includes G,W,C,F registers
27302reg [63:0] prev_reg145; // includes G,W,C,F registers
27303reg [63:0] prev_reg146; // includes G,W,C,F registers
27304reg [63:0] prev_reg147; // includes G,W,C,F registers
27305reg [63:0] prev_reg148; // includes G,W,C,F registers
27306reg [63:0] prev_reg149; // includes G,W,C,F registers
27307reg [63:0] prev_reg150; // includes G,W,C,F registers
27308reg [63:0] prev_reg151; // includes G,W,C,F registers
27309reg [63:0] prev_reg152; // includes G,W,C,F registers
27310reg [63:0] prev_reg153; // includes G,W,C,F registers
27311reg [63:0] prev_reg154; // includes G,W,C,F registers
27312reg [63:0] prev_reg155; // includes G,W,C,F registers
27313reg [63:0] prev_reg156; // includes G,W,C,F registers
27314reg [63:0] prev_reg157; // includes G,W,C,F registers
27315reg [63:0] prev_reg158; // includes G,W,C,F registers
27316reg [63:0] prev_reg159; // includes G,W,C,F registers
27317reg [63:0] prev_reg160; // includes G,W,C,F registers
27318reg [63:0] prev_reg161; // includes G,W,C,F registers
27319reg [63:0] prev_reg162; // includes G,W,C,F registers
27320reg [63:0] prev_reg163; // includes G,W,C,F registers
27321reg [63:0] prev_reg164; // includes G,W,C,F registers
27322reg [63:0] prev_reg165; // includes G,W,C,F registers
27323reg [63:0] prev_reg166; // includes G,W,C,F registers
27324reg [63:0] prev_reg167; // includes G,W,C,F registers
27325reg [63:0] prev_reg168; // includes G,W,C,F registers
27326reg [63:0] prev_reg169; // includes G,W,C,F registers
27327reg [63:0] prev_reg170; // includes G,W,C,F registers
27328reg [63:0] prev_reg171; // includes G,W,C,F registers
27329reg [63:0] prev_reg172; // includes G,W,C,F registers
27330reg [63:0] prev_reg173; // includes G,W,C,F registers
27331reg [63:0] prev_reg174; // includes G,W,C,F registers
27332reg [63:0] prev_reg175; // includes G,W,C,F registers
27333reg [63:0] prev_reg176; // includes G,W,C,F registers
27334reg [63:0] prev_reg177; // includes G,W,C,F registers
27335reg [63:0] prev_reg178; // includes G,W,C,F registers
27336reg [63:0] prev_reg179; // includes G,W,C,F registers
27337reg [63:0] prev_reg180; // includes G,W,C,F registers
27338reg [63:0] prev_reg181; // includes G,W,C,F registers
27339reg [63:0] prev_reg182; // includes G,W,C,F registers
27340reg [63:0] prev_reg183; // includes G,W,C,F registers
27341reg [63:0] prev_reg184; // includes G,W,C,F registers
27342reg [63:0] prev_reg185; // includes G,W,C,F registers
27343reg [63:0] prev_reg186; // includes G,W,C,F registers
27344reg [63:0] prev_reg187; // includes G,W,C,F registers
27345reg [63:0] prev_reg188; // includes G,W,C,F registers
27346reg [63:0] prev_reg189; // includes G,W,C,F registers
27347reg [63:0] prev_reg190; // includes G,W,C,F registers
27348reg [63:0] prev_reg191; // includes G,W,C,F registers
27349reg [63:0] prev_reg192; // includes G,W,C,F registers
27350reg [63:0] prev_reg193; // includes G,W,C,F registers
27351reg [63:0] prev_reg194; // includes G,W,C,F registers
27352reg [63:0] prev_reg195; // includes G,W,C,F registers
27353reg [63:0] prev_reg196; // includes G,W,C,F registers
27354reg [63:0] prev_reg197; // includes G,W,C,F registers
27355reg [63:0] prev_reg198; // includes G,W,C,F registers
27356reg [63:0] prev_reg199; // includes G,W,C,F registers
27357reg [63:0] prev_reg200; // includes G,W,C,F registers
27358reg [63:0] prev_reg201; // includes G,W,C,F registers
27359reg [63:0] prev_reg202; // includes G,W,C,F registers
27360reg [63:0] prev_reg203; // includes G,W,C,F registers
27361reg [63:0] prev_reg204; // includes G,W,C,F registers
27362reg [63:0] prev_reg205; // includes G,W,C,F registers
27363reg [63:0] prev_reg206; // includes G,W,C,F registers
27364reg [63:0] prev_reg207; // includes G,W,C,F registers
27365reg [63:0] prev_reg208; // includes G,W,C,F registers
27366reg [63:0] prev_reg209; // includes G,W,C,F registers
27367reg [63:0] prev_reg210; // includes G,W,C,F registers
27368reg [63:0] prev_reg211; // includes G,W,C,F registers
27369reg [63:0] prev_reg212; // includes G,W,C,F registers
27370reg [63:0] prev_reg213; // includes G,W,C,F registers
27371reg [63:0] prev_reg214; // includes G,W,C,F registers
27372reg [63:0] prev_reg215; // includes G,W,C,F registers
27373reg [63:0] prev_reg216; // includes G,W,C,F registers
27374reg [63:0] prev_reg217; // includes G,W,C,F registers
27375reg [63:0] prev_reg218; // includes G,W,C,F registers
27376reg [63:0] prev_reg219; // includes G,W,C,F registers
27377reg [63:0] prev_reg220; // includes G,W,C,F registers
27378reg [63:0] prev_reg221; // includes G,W,C,F registers
27379reg [63:0] prev_reg222; // includes G,W,C,F registers
27380reg [63:0] prev_reg223; // includes G,W,C,F registers
27381reg [63:0] prev_reg224; // includes G,W,C,F registers
27382reg [63:0] prev_reg225; // includes G,W,C,F registers
27383reg [63:0] prev_reg226; // includes G,W,C,F registers
27384reg [63:0] prev_reg227; // includes G,W,C,F registers
27385reg [63:0] prev_reg228; // includes G,W,C,F registers
27386reg [63:0] prev_reg229; // includes G,W,C,F registers
27387reg [63:0] prev_reg230; // includes G,W,C,F registers
27388reg [63:0] prev_reg231; // includes G,W,C,F registers
27389reg [63:0] prev_reg232; // includes G,W,C,F registers
27390reg [63:0] prev_reg233; // includes G,W,C,F registers
27391reg [63:0] prev_reg234; // includes G,W,C,F registers
27392reg [63:0] prev_reg235; // includes G,W,C,F registers
27393reg [63:0] prev_reg236; // includes G,W,C,F registers
27394reg [63:0] prev_reg237; // includes G,W,C,F registers
27395reg [63:0] prev_reg238; // includes G,W,C,F registers
27396reg [63:0] prev_reg239; // includes G,W,C,F registers
27397reg [63:0] prev_reg240; // includes G,W,C,F registers
27398reg [63:0] prev_reg241; // includes G,W,C,F registers
27399reg [63:0] prev_reg242; // includes G,W,C,F registers
27400reg [63:0] prev_reg243; // includes G,W,C,F registers
27401reg [63:0] prev_reg244; // includes G,W,C,F registers
27402reg [63:0] prev_reg245; // includes G,W,C,F registers
27403reg [63:0] prev_reg246; // includes G,W,C,F registers
27404reg [63:0] prev_reg247; // includes G,W,C,F registers
27405reg [63:0] prev_reg248; // includes G,W,C,F registers
27406reg [63:0] prev_reg249; // includes G,W,C,F registers
27407reg [63:0] prev_reg250; // includes G,W,C,F registers
27408reg [63:0] prev_reg251; // includes G,W,C,F registers
27409reg [63:0] prev_reg252; // includes G,W,C,F registers
27410reg [63:0] prev_reg253; // includes G,W,C,F registers
27411reg [63:0] prev_reg254; // includes G,W,C,F registers
27412reg [63:0] prev_reg255; // includes G,W,C,F registers
27413
27414reg [1:0] th_gl; // copy of GL_reg
27415
27416reg [63:0] gl0_reg0;
27417reg [63:0] gl1_reg0;
27418reg [63:0] gl2_reg0;
27419reg [63:0] gl3_reg0;
27420reg [63:0] gl0_reg1;
27421reg [63:0] gl1_reg1;
27422reg [63:0] gl2_reg1;
27423reg [63:0] gl3_reg1;
27424reg [63:0] gl0_reg2;
27425reg [63:0] gl1_reg2;
27426reg [63:0] gl2_reg2;
27427reg [63:0] gl3_reg2;
27428reg [63:0] gl0_reg3;
27429reg [63:0] gl1_reg3;
27430reg [63:0] gl2_reg3;
27431reg [63:0] gl3_reg3;
27432reg [63:0] gl0_reg4;
27433reg [63:0] gl1_reg4;
27434reg [63:0] gl2_reg4;
27435reg [63:0] gl3_reg4;
27436reg [63:0] gl0_reg5;
27437reg [63:0] gl1_reg5;
27438reg [63:0] gl2_reg5;
27439reg [63:0] gl3_reg5;
27440reg [63:0] gl0_reg6;
27441reg [63:0] gl1_reg6;
27442reg [63:0] gl2_reg6;
27443reg [63:0] gl3_reg6;
27444reg [63:0] gl0_reg7;
27445reg [63:0] gl1_reg7;
27446reg [63:0] gl2_reg7;
27447reg [63:0] gl3_reg7;
27448
27449reg [63:0] win0_reg8;
27450reg [63:0] win1_reg8;
27451reg [63:0] win2_reg8;
27452reg [63:0] win3_reg8;
27453reg [63:0] win4_reg8;
27454reg [63:0] win5_reg8;
27455reg [63:0] win6_reg8;
27456reg [63:0] win7_reg8;
27457reg [63:0] win0_reg9;
27458reg [63:0] win1_reg9;
27459reg [63:0] win2_reg9;
27460reg [63:0] win3_reg9;
27461reg [63:0] win4_reg9;
27462reg [63:0] win5_reg9;
27463reg [63:0] win6_reg9;
27464reg [63:0] win7_reg9;
27465reg [63:0] win0_reg10;
27466reg [63:0] win1_reg10;
27467reg [63:0] win2_reg10;
27468reg [63:0] win3_reg10;
27469reg [63:0] win4_reg10;
27470reg [63:0] win5_reg10;
27471reg [63:0] win6_reg10;
27472reg [63:0] win7_reg10;
27473reg [63:0] win0_reg11;
27474reg [63:0] win1_reg11;
27475reg [63:0] win2_reg11;
27476reg [63:0] win3_reg11;
27477reg [63:0] win4_reg11;
27478reg [63:0] win5_reg11;
27479reg [63:0] win6_reg11;
27480reg [63:0] win7_reg11;
27481reg [63:0] win0_reg12;
27482reg [63:0] win1_reg12;
27483reg [63:0] win2_reg12;
27484reg [63:0] win3_reg12;
27485reg [63:0] win4_reg12;
27486reg [63:0] win5_reg12;
27487reg [63:0] win6_reg12;
27488reg [63:0] win7_reg12;
27489reg [63:0] win0_reg13;
27490reg [63:0] win1_reg13;
27491reg [63:0] win2_reg13;
27492reg [63:0] win3_reg13;
27493reg [63:0] win4_reg13;
27494reg [63:0] win5_reg13;
27495reg [63:0] win6_reg13;
27496reg [63:0] win7_reg13;
27497reg [63:0] win0_reg14;
27498reg [63:0] win1_reg14;
27499reg [63:0] win2_reg14;
27500reg [63:0] win3_reg14;
27501reg [63:0] win4_reg14;
27502reg [63:0] win5_reg14;
27503reg [63:0] win6_reg14;
27504reg [63:0] win7_reg14;
27505reg [63:0] win0_reg15;
27506reg [63:0] win1_reg15;
27507reg [63:0] win2_reg15;
27508reg [63:0] win3_reg15;
27509reg [63:0] win4_reg15;
27510reg [63:0] win5_reg15;
27511reg [63:0] win6_reg15;
27512reg [63:0] win7_reg15;
27513reg [63:0] win0_reg16;
27514reg [63:0] win1_reg16;
27515reg [63:0] win2_reg16;
27516reg [63:0] win3_reg16;
27517reg [63:0] win4_reg16;
27518reg [63:0] win5_reg16;
27519reg [63:0] win6_reg16;
27520reg [63:0] win7_reg16;
27521reg [63:0] win0_reg17;
27522reg [63:0] win1_reg17;
27523reg [63:0] win2_reg17;
27524reg [63:0] win3_reg17;
27525reg [63:0] win4_reg17;
27526reg [63:0] win5_reg17;
27527reg [63:0] win6_reg17;
27528reg [63:0] win7_reg17;
27529reg [63:0] win0_reg18;
27530reg [63:0] win1_reg18;
27531reg [63:0] win2_reg18;
27532reg [63:0] win3_reg18;
27533reg [63:0] win4_reg18;
27534reg [63:0] win5_reg18;
27535reg [63:0] win6_reg18;
27536reg [63:0] win7_reg18;
27537reg [63:0] win0_reg19;
27538reg [63:0] win1_reg19;
27539reg [63:0] win2_reg19;
27540reg [63:0] win3_reg19;
27541reg [63:0] win4_reg19;
27542reg [63:0] win5_reg19;
27543reg [63:0] win6_reg19;
27544reg [63:0] win7_reg19;
27545reg [63:0] win0_reg20;
27546reg [63:0] win1_reg20;
27547reg [63:0] win2_reg20;
27548reg [63:0] win3_reg20;
27549reg [63:0] win4_reg20;
27550reg [63:0] win5_reg20;
27551reg [63:0] win6_reg20;
27552reg [63:0] win7_reg20;
27553reg [63:0] win0_reg21;
27554reg [63:0] win1_reg21;
27555reg [63:0] win2_reg21;
27556reg [63:0] win3_reg21;
27557reg [63:0] win4_reg21;
27558reg [63:0] win5_reg21;
27559reg [63:0] win6_reg21;
27560reg [63:0] win7_reg21;
27561reg [63:0] win0_reg22;
27562reg [63:0] win1_reg22;
27563reg [63:0] win2_reg22;
27564reg [63:0] win3_reg22;
27565reg [63:0] win4_reg22;
27566reg [63:0] win5_reg22;
27567reg [63:0] win6_reg22;
27568reg [63:0] win7_reg22;
27569reg [63:0] win0_reg23;
27570reg [63:0] win1_reg23;
27571reg [63:0] win2_reg23;
27572reg [63:0] win3_reg23;
27573reg [63:0] win4_reg23;
27574reg [63:0] win5_reg23;
27575reg [63:0] win6_reg23;
27576reg [63:0] win7_reg23;
27577reg [63:0] win0_reg24;
27578reg [63:0] win1_reg24;
27579reg [63:0] win2_reg24;
27580reg [63:0] win3_reg24;
27581reg [63:0] win4_reg24;
27582reg [63:0] win5_reg24;
27583reg [63:0] win6_reg24;
27584reg [63:0] win7_reg24;
27585reg [63:0] win0_reg25;
27586reg [63:0] win1_reg25;
27587reg [63:0] win2_reg25;
27588reg [63:0] win3_reg25;
27589reg [63:0] win4_reg25;
27590reg [63:0] win5_reg25;
27591reg [63:0] win6_reg25;
27592reg [63:0] win7_reg25;
27593reg [63:0] win0_reg26;
27594reg [63:0] win1_reg26;
27595reg [63:0] win2_reg26;
27596reg [63:0] win3_reg26;
27597reg [63:0] win4_reg26;
27598reg [63:0] win5_reg26;
27599reg [63:0] win6_reg26;
27600reg [63:0] win7_reg26;
27601reg [63:0] win0_reg27;
27602reg [63:0] win1_reg27;
27603reg [63:0] win2_reg27;
27604reg [63:0] win3_reg27;
27605reg [63:0] win4_reg27;
27606reg [63:0] win5_reg27;
27607reg [63:0] win6_reg27;
27608reg [63:0] win7_reg27;
27609reg [63:0] win0_reg28;
27610reg [63:0] win1_reg28;
27611reg [63:0] win2_reg28;
27612reg [63:0] win3_reg28;
27613reg [63:0] win4_reg28;
27614reg [63:0] win5_reg28;
27615reg [63:0] win6_reg28;
27616reg [63:0] win7_reg28;
27617reg [63:0] win0_reg29;
27618reg [63:0] win1_reg29;
27619reg [63:0] win2_reg29;
27620reg [63:0] win3_reg29;
27621reg [63:0] win4_reg29;
27622reg [63:0] win5_reg29;
27623reg [63:0] win6_reg29;
27624reg [63:0] win7_reg29;
27625reg [63:0] win0_reg30;
27626reg [63:0] win1_reg30;
27627reg [63:0] win2_reg30;
27628reg [63:0] win3_reg30;
27629reg [63:0] win4_reg30;
27630reg [63:0] win5_reg30;
27631reg [63:0] win6_reg30;
27632reg [63:0] win7_reg30;
27633reg [63:0] win0_reg31;
27634reg [63:0] win1_reg31;
27635reg [63:0] win2_reg31;
27636reg [63:0] win3_reg31;
27637reg [63:0] win4_reg31;
27638reg [63:0] win5_reg31;
27639reg [63:0] win6_reg31;
27640reg [63:0] win7_reg31;
27641
27642reg [63:0] itagacc_fx5;
27643reg [63:0] itagacc_fb;
27644reg [63:0] itagacc_fw;
27645reg [63:0] itagacc_fw1;
27646reg [63:0] itagacc_fw2;
27647
27648reg [63:0] dtagacc_fx5;
27649reg [63:0] dtagacc_fb;
27650reg [63:0] dtagacc_fw;
27651reg [63:0] dtagacc_fw1;
27652reg [63:0] dtagacc_fw2;
27653
27654reg [47:0] dsfar_fb;
27655reg [47:0] dsfar_fw;
27656reg [47:0] dsfar_fw1;
27657reg [47:0] dsfar_fw2;
27658
27659reg [47:0] pc_fx4;
27660reg [47:0] pc_fx5;
27661reg [47:0] pc_fb;
27662reg [47:0] pc_fw;
27663reg [47:0] pc_fw1;
27664reg [47:0] pc_fw2;
27665reg [47:0] pc_last;
27666
27667reg tlu_complete_1;
27668reg tlu_complete_2;
27669reg tlu_complete_3;
27670
27671reg frf_w1_valid_fw1;
27672reg frf_w1_valid_fw2;
27673
27674reg frf_w1_skip_addr4_fw1;
27675reg frf_w1_skip_addr4_fw2;
27676reg [2:0] fprs_fb;
27677reg [2:0] fprs_fw;
27678reg [2:0] fprs_fw1;
27679reg [2:0] fprs_fw2;
27680
27681
27682reg [1:0] frf_w2_valid_fw;
27683reg [1:0] frf_w2_valid_bn;
27684reg [2:0] frf_w2_tid_fw;
27685reg [4:0] frf_w2_addr_fw;
27686
27687reg [1:0] frf_w1_valid_fw;
27688reg [2:0] frf_w1_tid_fw;
27689reg [4:0] frf_w1_addr_fw;
27690
27691reg thread_running;
27692
27693reg in_wmr;
27694reg wmr; // latched to get edge
27695reg por_a; // latched to get edge
27696reg por_b; // latched to get edge
27697
27698reg nas_pipe_enable; // Turns on nas_pipe capture and Riesling SSTEP
27699reg first_op;
27700reg [63:0] mytime;
27701wire [5:0] mytnum;
27702wire mytg;
27703integer junk;
27704integer myindex;
27705integer irf_offset;
27706wire oddwin;
27707wire frf_w1_valid_even;
27708wire frf_w1_valid_odd;
27709wire frf_w2_valid_even;
27710wire frf_w2_valid_odd;
27711wire [4:0] frf_w1_skip_addr;
27712wire [4:0] frf_w2_skip_addr;
27713reg good_trap_detected; // Used for -nosas only.
27714
27715//----------------------------------------------------------
27716`ifdef DEBUG_PIPE
27717
27718wire [63:0] g0;
27719wire [63:0] g1;
27720wire [63:0] g2;
27721wire [63:0] g3;
27722wire [63:0] g4;
27723wire [63:0] g5;
27724wire [63:0] g6;
27725wire [63:0] g7;
27726
27727wire [63:0] o0;
27728wire [63:0] o1;
27729wire [63:0] o2;
27730wire [63:0] o3;
27731wire [63:0] o4;
27732wire [63:0] o5;
27733wire [63:0] o6;
27734wire [63:0] o7;
27735
27736wire [63:0] l0;
27737wire [63:0] l1;
27738wire [63:0] l2;
27739wire [63:0] l3;
27740wire [63:0] l4;
27741wire [63:0] l5;
27742wire [63:0] l6;
27743wire [63:0] l7;
27744
27745wire [63:0] i0;
27746wire [63:0] i1;
27747wire [63:0] i2;
27748wire [63:0] i3;
27749wire [63:0] i4;
27750wire [63:0] i5;
27751wire [63:0] i6;
27752wire [63:0] i7;
27753
27754wire [31:0] frf_0;
27755wire [31:0] frf_1;
27756wire [31:0] frf_2;
27757wire [31:0] frf_3;
27758wire [31:0] frf_4;
27759wire [31:0] frf_5;
27760wire [31:0] frf_6;
27761wire [31:0] frf_7;
27762wire [31:0] frf_8;
27763wire [31:0] frf_9;
27764wire [31:0] frf_10;
27765wire [31:0] frf_11;
27766wire [31:0] frf_12;
27767wire [31:0] frf_13;
27768wire [31:0] frf_14;
27769wire [31:0] frf_15;
27770wire [31:0] frf_16;
27771wire [31:0] frf_17;
27772wire [31:0] frf_18;
27773wire [31:0] frf_19;
27774wire [31:0] frf_20;
27775wire [31:0] frf_21;
27776wire [31:0] frf_22;
27777wire [31:0] frf_23;
27778wire [31:0] frf_24;
27779wire [31:0] frf_25;
27780wire [31:0] frf_26;
27781wire [31:0] frf_27;
27782wire [31:0] frf_28;
27783wire [31:0] frf_29;
27784wire [31:0] frf_30;
27785wire [31:0] frf_31;
27786wire [31:0] frf_32;
27787wire [31:0] frf_33;
27788wire [31:0] frf_34;
27789wire [31:0] frf_35;
27790wire [31:0] frf_36;
27791wire [31:0] frf_37;
27792wire [31:0] frf_38;
27793wire [31:0] frf_39;
27794wire [31:0] frf_40;
27795wire [31:0] frf_41;
27796wire [31:0] frf_42;
27797wire [31:0] frf_43;
27798wire [31:0] frf_44;
27799wire [31:0] frf_45;
27800wire [31:0] frf_46;
27801wire [31:0] frf_47;
27802wire [31:0] frf_48;
27803wire [31:0] frf_49;
27804wire [31:0] frf_50;
27805wire [31:0] frf_51;
27806wire [31:0] frf_52;
27807wire [31:0] frf_53;
27808wire [31:0] frf_54;
27809wire [31:0] frf_55;
27810wire [31:0] frf_56;
27811wire [31:0] frf_57;
27812wire [31:0] frf_58;
27813wire [31:0] frf_59;
27814wire [31:0] frf_60;
27815wire [31:0] frf_61;
27816wire [31:0] frf_62;
27817wire [31:0] frf_63;
27818
27819wire [`DELTA_WIDTH:0] delta_fx4_0;
27820wire [`DELTA_WIDTH:0] delta_fx4_1;
27821wire [`DELTA_WIDTH:0] delta_fx4_2;
27822wire [`DELTA_WIDTH:0] delta_fx4_3;
27823wire [`DELTA_WIDTH:0] delta_fx4_4;
27824wire [`DELTA_WIDTH:0] delta_fx4_5;
27825wire [`DELTA_WIDTH:0] delta_fx4_6;
27826wire [`DELTA_WIDTH:0] delta_fx4_7;
27827
27828wire [`DELTA_WIDTH:0] delta_fx5_0;
27829wire [`DELTA_WIDTH:0] delta_fx5_1;
27830wire [`DELTA_WIDTH:0] delta_fx5_2;
27831wire [`DELTA_WIDTH:0] delta_fx5_3;
27832wire [`DELTA_WIDTH:0] delta_fx5_4;
27833wire [`DELTA_WIDTH:0] delta_fx5_5;
27834wire [`DELTA_WIDTH:0] delta_fx5_6;
27835wire [`DELTA_WIDTH:0] delta_fx5_7;
27836
27837wire [`DELTA_WIDTH:0] delta_fb_0;
27838wire [`DELTA_WIDTH:0] delta_fb_1;
27839wire [`DELTA_WIDTH:0] delta_fb_2;
27840wire [`DELTA_WIDTH:0] delta_fb_3;
27841wire [`DELTA_WIDTH:0] delta_fb_4;
27842wire [`DELTA_WIDTH:0] delta_fb_5;
27843wire [`DELTA_WIDTH:0] delta_fb_6;
27844wire [`DELTA_WIDTH:0] delta_fb_7;
27845
27846wire [`DELTA_WIDTH:0] delta_fw_0;
27847wire [`DELTA_WIDTH:0] delta_fw_1;
27848wire [`DELTA_WIDTH:0] delta_fw_2;
27849wire [`DELTA_WIDTH:0] delta_fw_3;
27850wire [`DELTA_WIDTH:0] delta_fw_4;
27851wire [`DELTA_WIDTH:0] delta_fw_5;
27852wire [`DELTA_WIDTH:0] delta_fw_6;
27853wire [`DELTA_WIDTH:0] delta_fw_7;
27854
27855wire [`DELTA_WIDTH:0] delta_fw1_0;
27856wire [`DELTA_WIDTH:0] delta_fw1_1;
27857wire [`DELTA_WIDTH:0] delta_fw1_2;
27858wire [`DELTA_WIDTH:0] delta_fw1_3;
27859wire [`DELTA_WIDTH:0] delta_fw1_4;
27860wire [`DELTA_WIDTH:0] delta_fw1_5;
27861wire [`DELTA_WIDTH:0] delta_fw1_6;
27862wire [`DELTA_WIDTH:0] delta_fw1_7;
27863
27864wire [`DELTA_WIDTH:0] delta_fw2_0;
27865wire [`DELTA_WIDTH:0] delta_fw2_1;
27866wire [`DELTA_WIDTH:0] delta_fw2_2;
27867wire [`DELTA_WIDTH:0] delta_fw2_3;
27868wire [`DELTA_WIDTH:0] delta_fw2_4;
27869wire [`DELTA_WIDTH:0] delta_fw2_5;
27870wire [`DELTA_WIDTH:0] delta_fw2_6;
27871wire [`DELTA_WIDTH:0] delta_fw2_7;
27872
27873wire [`DELTA_WIDTH:0] delta_prev_0;
27874wire [`DELTA_WIDTH:0] delta_prev_1;
27875wire [`DELTA_WIDTH:0] delta_prev_2;
27876wire [`DELTA_WIDTH:0] delta_prev_3;
27877wire [`DELTA_WIDTH:0] delta_prev_4;
27878wire [`DELTA_WIDTH:0] delta_prev_5;
27879wire [`DELTA_WIDTH:0] delta_prev_6;
27880wire [`DELTA_WIDTH:0] delta_prev_7;
27881
27882initial begin
27883 #0;
27884 `PR_ALWAYS ("arg", `ALWAYS,"T%0d DEBUG_PIPE turned ON",mytnum);
27885end
27886
27887//----------------------------------------------------------
27888// Note: no remap of %g,%o,%l,%i regs based on CWP or GL
27889assign g0 = (mytid<=3) ? `IRF5_EXU0[( 0+irf_offset)] : `IRF5_EXU1[( 0+irf_offset)];
27890assign g1 = (mytid<=3) ? `IRF5_EXU0[( 1+irf_offset)] : `IRF5_EXU1[( 1+irf_offset)];
27891assign g2 = (mytid<=3) ? `IRF5_EXU0[( 2+irf_offset)] : `IRF5_EXU1[( 2+irf_offset)];
27892assign g3 = (mytid<=3) ? `IRF5_EXU0[( 3+irf_offset)] : `IRF5_EXU1[( 3+irf_offset)];
27893assign g4 = (mytid<=3) ? `IRF5_EXU0[( 4+irf_offset)] : `IRF5_EXU1[( 4+irf_offset)];
27894assign g5 = (mytid<=3) ? `IRF5_EXU0[( 5+irf_offset)] : `IRF5_EXU1[( 5+irf_offset)];
27895assign g6 = (mytid<=3) ? `IRF5_EXU0[( 6+irf_offset)] : `IRF5_EXU1[( 6+irf_offset)];
27896assign g7 = (mytid<=3) ? `IRF5_EXU0[( 7+irf_offset)] : `IRF5_EXU1[( 7+irf_offset)];
27897
27898assign o0 = (mytid<=3) ? `IRF5_EXU0[( 8+irf_offset)] : `IRF5_EXU1[( 8+irf_offset)];
27899assign o1 = (mytid<=3) ? `IRF5_EXU0[( 9+irf_offset)] : `IRF5_EXU1[( 9+irf_offset)];
27900assign o2 = (mytid<=3) ? `IRF5_EXU0[(10+irf_offset)] : `IRF5_EXU1[(10+irf_offset)];
27901assign o3 = (mytid<=3) ? `IRF5_EXU0[(11+irf_offset)] : `IRF5_EXU1[(11+irf_offset)];
27902assign o4 = (mytid<=3) ? `IRF5_EXU0[(12+irf_offset)] : `IRF5_EXU1[(12+irf_offset)];
27903assign o5 = (mytid<=3) ? `IRF5_EXU0[(13+irf_offset)] : `IRF5_EXU1[(13+irf_offset)];
27904assign o6 = (mytid<=3) ? `IRF5_EXU0[(14+irf_offset)] : `IRF5_EXU1[(14+irf_offset)];
27905assign o7 = (mytid<=3) ? `IRF5_EXU0[(15+irf_offset)] : `IRF5_EXU1[(15+irf_offset)];
27906
27907assign l0 = (mytid<=3) ? `IRF5_EXU0[(16+irf_offset)] : `IRF5_EXU1[(16+irf_offset)];
27908assign l1 = (mytid<=3) ? `IRF5_EXU0[(17+irf_offset)] : `IRF5_EXU1[(17+irf_offset)];
27909assign l2 = (mytid<=3) ? `IRF5_EXU0[(18+irf_offset)] : `IRF5_EXU1[(18+irf_offset)];
27910assign l3 = (mytid<=3) ? `IRF5_EXU0[(19+irf_offset)] : `IRF5_EXU1[(19+irf_offset)];
27911assign l4 = (mytid<=3) ? `IRF5_EXU0[(20+irf_offset)] : `IRF5_EXU1[(20+irf_offset)];
27912assign l5 = (mytid<=3) ? `IRF5_EXU0[(21+irf_offset)] : `IRF5_EXU1[(21+irf_offset)];
27913assign l6 = (mytid<=3) ? `IRF5_EXU0[(22+irf_offset)] : `IRF5_EXU1[(22+irf_offset)];
27914assign l7 = (mytid<=3) ? `IRF5_EXU0[(23+irf_offset)] : `IRF5_EXU1[(23+irf_offset)];
27915
27916assign i0 = (mytid<=3) ? `IRF5_EXU0[(24+irf_offset)] : `IRF5_EXU1[(24+irf_offset)];
27917assign i1 = (mytid<=3) ? `IRF5_EXU0[(25+irf_offset)] : `IRF5_EXU1[(25+irf_offset)];
27918assign i2 = (mytid<=3) ? `IRF5_EXU0[(26+irf_offset)] : `IRF5_EXU1[(26+irf_offset)];
27919assign i3 = (mytid<=3) ? `IRF5_EXU0[(27+irf_offset)] : `IRF5_EXU1[(27+irf_offset)];
27920assign i4 = (mytid<=3) ? `IRF5_EXU0[(28+irf_offset)] : `IRF5_EXU1[(28+irf_offset)];
27921assign i5 = (mytid<=3) ? `IRF5_EXU0[(29+irf_offset)] : `IRF5_EXU1[(29+irf_offset)];
27922assign i6 = (mytid<=3) ? `IRF5_EXU0[(30+irf_offset)] : `IRF5_EXU1[(30+irf_offset)];
27923assign i7 = (mytid<=3) ? `IRF5_EXU0[(31+irf_offset)] : `IRF5_EXU1[(31+irf_offset)];
27924
27925//----------------------------------------------------------
27926assign frf_0 = `FRF5_EVEN[(mytid*32)+ 0];
27927assign frf_2 = `FRF5_EVEN[(mytid*32)+ 1];
27928assign frf_4 = `FRF5_EVEN[(mytid*32)+ 2];
27929assign frf_6 = `FRF5_EVEN[(mytid*32)+ 3];
27930assign frf_8 = `FRF5_EVEN[(mytid*32)+ 4];
27931assign frf_10 = `FRF5_EVEN[(mytid*32)+ 5];
27932assign frf_12 = `FRF5_EVEN[(mytid*32)+ 6];
27933assign frf_14 = `FRF5_EVEN[(mytid*32)+ 7];
27934assign frf_16 = `FRF5_EVEN[(mytid*32)+ 8];
27935assign frf_18 = `FRF5_EVEN[(mytid*32)+ 9];
27936assign frf_20 = `FRF5_EVEN[(mytid*32)+ 10];
27937assign frf_22 = `FRF5_EVEN[(mytid*32)+ 11];
27938assign frf_24 = `FRF5_EVEN[(mytid*32)+ 12];
27939assign frf_26 = `FRF5_EVEN[(mytid*32)+ 13];
27940assign frf_28 = `FRF5_EVEN[(mytid*32)+ 14];
27941assign frf_30 = `FRF5_EVEN[(mytid*32)+ 15];
27942assign frf_32 = `FRF5_EVEN[(mytid*32)+ 16];
27943assign frf_34 = `FRF5_EVEN[(mytid*32)+ 17];
27944assign frf_36 = `FRF5_EVEN[(mytid*32)+ 18];
27945assign frf_38 = `FRF5_EVEN[(mytid*32)+ 19];
27946assign frf_40 = `FRF5_EVEN[(mytid*32)+ 20];
27947assign frf_42 = `FRF5_EVEN[(mytid*32)+ 21];
27948assign frf_44 = `FRF5_EVEN[(mytid*32)+ 22];
27949assign frf_46 = `FRF5_EVEN[(mytid*32)+ 23];
27950assign frf_48 = `FRF5_EVEN[(mytid*32)+ 24];
27951assign frf_50 = `FRF5_EVEN[(mytid*32)+ 25];
27952assign frf_52 = `FRF5_EVEN[(mytid*32)+ 26];
27953assign frf_54 = `FRF5_EVEN[(mytid*32)+ 27];
27954assign frf_56 = `FRF5_EVEN[(mytid*32)+ 28];
27955assign frf_58 = `FRF5_EVEN[(mytid*32)+ 29];
27956assign frf_60 = `FRF5_EVEN[(mytid*32)+ 30];
27957assign frf_62 = `FRF5_EVEN[(mytid*32)+ 31];
27958
27959assign frf_1 = `FRF5_ODD[(mytid*32)+ 0];
27960assign frf_3 = `FRF5_ODD[(mytid*32)+ 1];
27961assign frf_5 = `FRF5_ODD[(mytid*32)+ 2];
27962assign frf_7 = `FRF5_ODD[(mytid*32)+ 3];
27963assign frf_9 = `FRF5_ODD[(mytid*32)+ 4];
27964assign frf_11 = `FRF5_ODD[(mytid*32)+ 5];
27965assign frf_13 = `FRF5_ODD[(mytid*32)+ 6];
27966assign frf_15 = `FRF5_ODD[(mytid*32)+ 7];
27967assign frf_17 = `FRF5_ODD[(mytid*32)+ 8];
27968assign frf_19 = `FRF5_ODD[(mytid*32)+ 9];
27969assign frf_21 = `FRF5_ODD[(mytid*32)+ 10];
27970assign frf_23 = `FRF5_ODD[(mytid*32)+ 11];
27971assign frf_25 = `FRF5_ODD[(mytid*32)+ 12];
27972assign frf_27 = `FRF5_ODD[(mytid*32)+ 13];
27973assign frf_29 = `FRF5_ODD[(mytid*32)+ 14];
27974assign frf_31 = `FRF5_ODD[(mytid*32)+ 15];
27975assign frf_33 = `FRF5_ODD[(mytid*32)+ 16];
27976assign frf_35 = `FRF5_ODD[(mytid*32)+ 17];
27977assign frf_37 = `FRF5_ODD[(mytid*32)+ 18];
27978assign frf_39 = `FRF5_ODD[(mytid*32)+ 19];
27979assign frf_41 = `FRF5_ODD[(mytid*32)+ 20];
27980assign frf_43 = `FRF5_ODD[(mytid*32)+ 21];
27981assign frf_45 = `FRF5_ODD[(mytid*32)+ 22];
27982assign frf_47 = `FRF5_ODD[(mytid*32)+ 23];
27983assign frf_49 = `FRF5_ODD[(mytid*32)+ 24];
27984assign frf_51 = `FRF5_ODD[(mytid*32)+ 25];
27985assign frf_53 = `FRF5_ODD[(mytid*32)+ 26];
27986assign frf_55 = `FRF5_ODD[(mytid*32)+ 27];
27987assign frf_57 = `FRF5_ODD[(mytid*32)+ 28];
27988assign frf_59 = `FRF5_ODD[(mytid*32)+ 29];
27989assign frf_61 = `FRF5_ODD[(mytid*32)+ 30];
27990assign frf_63 = `FRF5_ODD[(mytid*32)+ 31];
27991
27992//----------------------------------------------------------
27993assign delta_fx4_0 = delta_fx4[0];
27994assign delta_fx4_1 = delta_fx4[1];
27995assign delta_fx4_2 = delta_fx4[2];
27996assign delta_fx4_3 = delta_fx4[3];
27997assign delta_fx4_4 = delta_fx4[4];
27998assign delta_fx4_5 = delta_fx4[5];
27999assign delta_fx4_6 = delta_fx4[6];
28000assign delta_fx4_7 = delta_fx4[7];
28001
28002assign delta_fx5_0 = delta_fx5[0];
28003assign delta_fx5_1 = delta_fx5[1];
28004assign delta_fx5_2 = delta_fx5[2];
28005assign delta_fx5_3 = delta_fx5[3];
28006assign delta_fx5_4 = delta_fx5[4];
28007assign delta_fx5_5 = delta_fx5[5];
28008assign delta_fx5_6 = delta_fx5[6];
28009assign delta_fx5_7 = delta_fx5[7];
28010
28011assign delta_fb_0 = delta_fb[0];
28012assign delta_fb_1 = delta_fb[1];
28013assign delta_fb_2 = delta_fb[2];
28014assign delta_fb_3 = delta_fb[3];
28015assign delta_fb_4 = delta_fb[4];
28016assign delta_fb_5 = delta_fb[5];
28017assign delta_fb_6 = delta_fb[6];
28018assign delta_fb_7 = delta_fb[7];
28019
28020assign delta_fw_0 = delta_fw[0];
28021assign delta_fw_1 = delta_fw[1];
28022assign delta_fw_2 = delta_fw[2];
28023assign delta_fw_3 = delta_fw[3];
28024assign delta_fw_4 = delta_fw[4];
28025assign delta_fw_5 = delta_fw[5];
28026assign delta_fw_6 = delta_fw[6];
28027assign delta_fw_7 = delta_fw[7];
28028
28029assign delta_fw1_0 = delta_fw1[0];
28030assign delta_fw1_1 = delta_fw1[1];
28031assign delta_fw1_2 = delta_fw1[2];
28032assign delta_fw1_3 = delta_fw1[3];
28033assign delta_fw1_4 = delta_fw1[4];
28034assign delta_fw1_5 = delta_fw1[5];
28035assign delta_fw1_6 = delta_fw1[6];
28036assign delta_fw1_7 = delta_fw1[7];
28037
28038assign delta_fw2_0 = delta_fw2[0];
28039assign delta_fw2_1 = delta_fw2[1];
28040assign delta_fw2_2 = delta_fw2[2];
28041assign delta_fw2_3 = delta_fw2[3];
28042assign delta_fw2_4 = delta_fw2[4];
28043assign delta_fw2_5 = delta_fw2[5];
28044assign delta_fw2_6 = delta_fw2[6];
28045assign delta_fw2_7 = delta_fw2[7];
28046
28047assign delta_prev_0 = delta_prev[0];
28048assign delta_prev_1 = delta_prev[1];
28049assign delta_prev_2 = delta_prev[2];
28050assign delta_prev_3 = delta_prev[3];
28051assign delta_prev_4 = delta_prev[4];
28052assign delta_prev_5 = delta_prev[5];
28053assign delta_prev_6 = delta_prev[6];
28054assign delta_prev_7 = delta_prev[7];
28055
28056`endif // DEBUG_PIPE
28057//----------------------------------------------------------
28058
28059//----------------------------------------------------------
28060assign mytnum = (mycid*8)+mytid;
28061assign mytg = mytid >> 2;
28062
28063assign exu_complete = exu_valid & ~(`PROBES5.clkstop_d5|`TOP.in_reset|`SPC5.tcu_scan_en);
28064assign imul_complete = imul_valid & ~(`TOP.in_reset|`SPC5.tcu_scan_en);
28065assign idiv_complete = idiv_valid & ~(`TOP.in_reset|`SPC5.tcu_scan_en);
28066assign tlu_complete = tlu_complete_3 ;
28067assign fp_complete = fp_valid & ~(`TOP.in_reset|`SPC5.tcu_scan_en);
28068assign fdiv_complete = fdiv_valid & ~(`TOP.in_reset|`SPC5.tcu_scan_en);
28069assign lsu_complete = lsu_valid & ~(`TOP.in_reset|`SPC5.tcu_scan_en);
28070assign asi_complete = asi_valid & ~(`TOP.in_reset|`SPC5.tcu_scan_en);
28071
28072assign complete_w = (exu_complete << `EXU_INDEX) |
28073 (lsu_complete << `LSU_INDEX) |
28074 (tlu_complete << `TLU_INDEX) |
28075 (asi_complete << `ASI_INDEX) ;
28076
28077assign oddwin = CWP_reg % 2;
28078
28079assign frf_w1_valid_even = (frf_w1_tid_fw == mytid) & frf_w1_valid_fw[1];
28080assign frf_w1_valid_odd = (frf_w1_tid_fw == mytid) & frf_w1_valid_fw[0];
28081assign frf_w2_valid_even = (frf_w2_tid_fw == mytid) & frf_w2_valid_fw[1];
28082assign frf_w2_valid_odd = (frf_w2_tid_fw == mytid) & frf_w2_valid_fw[0];
28083
28084assign frf_w1_skip_addr = frf_w1_addr_fw;
28085assign frf_w2_skip_addr = frf_w2_addr_fw;
28086
28087//-----------------
28088// ADD_TSB_CFG
28089// NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
28090`ifdef ADD_TSB_CFG
28091wire [63:0] ctxt_z_tsb_cfg0_reg = `PROBES5.ctxt_z_tsb_cfg0_reg[mytid];
28092wire [63:0] ctxt_z_tsb_cfg1_reg = `PROBES5.ctxt_z_tsb_cfg1_reg[mytid];
28093wire [63:0] ctxt_z_tsb_cfg2_reg = `PROBES5.ctxt_z_tsb_cfg2_reg[mytid];
28094wire [63:0] ctxt_z_tsb_cfg3_reg = `PROBES5.ctxt_z_tsb_cfg3_reg[mytid];
28095wire [63:0] ctxt_nz_tsb_cfg0_reg = `PROBES5.ctxt_nz_tsb_cfg0_reg[mytid];
28096wire [63:0] ctxt_nz_tsb_cfg1_reg = `PROBES5.ctxt_nz_tsb_cfg1_reg[mytid];
28097wire [63:0] ctxt_nz_tsb_cfg2_reg = `PROBES5.ctxt_nz_tsb_cfg2_reg[mytid];
28098wire [63:0] ctxt_nz_tsb_cfg3_reg = `PROBES5.ctxt_nz_tsb_cfg3_reg[mytid];
28099`endif
28100
28101//----------------------------------------------------------
28102// Pipelined Signals
28103always @ (posedge `BENCH_SPC5_GCLK) begin // {
28104
28105 // TLU is async to the execution pipeline
28106 // but needs to be delayed to allow CWP, etc to update and be stable
28107 // before arch state is captured and diff_reg is called.
28108 // Done for FLUSHW
28109
28110 // FDIV was moved from fw1 to fw to allow FPRS to be stable before capture
28111 tlu_complete_1 <= tlu_valid & ~(`TOP.in_reset|`SPC5.tcu_scan_en);
28112 tlu_complete_2 <= tlu_complete_1;
28113 tlu_complete_3 <= tlu_complete_2;
28114
28115 itagacc_fx5 <= I_TAG_ACC_reg; // Signal changes in W so need to pipeline to fw2
28116 itagacc_fb <= itagacc_fx5;
28117 itagacc_fw <= itagacc_fb;
28118 itagacc_fw1 <= itagacc_fw;
28119 itagacc_fw2 <= itagacc_fw1;
28120
28121 dtagacc_fx5 <= D_TAG_ACC_reg; // Signal changes in W so need to pipeline to fw2
28122 dtagacc_fb <= dtagacc_fx5;
28123 dtagacc_fw <= dtagacc_fb;
28124 dtagacc_fw1 <= dtagacc_fw;
28125 dtagacc_fw2 <= dtagacc_fw1;
28126
28127 dsfar_fb <= DSFAR_reg; // Signal changes in W+1 so need to pipeline to fw2
28128 dsfar_fw <= dsfar_fb;
28129 dsfar_fw1 <= dsfar_fw;
28130 dsfar_fw2 <= dsfar_fw1;
28131
28132 pc_fx4 <= PC_reg;
28133 pc_fx5 <= pc_fx4;
28134 pc_fb <= pc_fx5;
28135 pc_fw <= pc_fb;
28136 pc_fw1 <= pc_fw;
28137 pc_fw2 <= pc_fw1;
28138
28139 cwp_fx4 <= CWP_reg;
28140 cwp_fx5 <= cwp_fx4;
28141 cwp_fb <= cwp_fx5;
28142 cwp_fw <= cwp_fb;
28143 cwp_fw1 <= cwp_fw;
28144 cwp_fw2 <= cwp_fw1;
28145
28146 complete_fx4 <= complete_w;
28147 complete_fx5 <= complete_fx4 ;
28148 complete_fb <= complete_fx5 |
28149 (idiv_complete << `IDIV_INDEX);
28150 complete_fw <= complete_fb |
28151 (fdiv_complete << `FDIV_INDEX) |
28152 (imul_complete << `IMUL_INDEX);
28153 complete_fw1 <= complete_fw |
28154 (fp_complete << `FP_INDEX);
28155
28156 complete_fw2 <= complete_fw1;
28157
28158 frf_w1_valid_fw1 <= (frf_w1_valid_odd | frf_w1_valid_even) & fp_complete;
28159 frf_w1_valid_fw2 <= frf_w1_valid_fw1;
28160
28161 frf_w1_skip_addr4_fw1 <= frf_w1_skip_addr[4];
28162 frf_w1_skip_addr4_fw2 <= frf_w1_skip_addr4_fw1;
28163
28164 fprs_fb <= FPRS_reg;
28165 fprs_fw <= fprs_fb;
28166 fprs_fw1 <= fprs_fw;
28167 fprs_fw2 <= fprs_fw1;
28168
28169 frf_w2_valid_fw <= frf_w2_valid_bn;
28170 frf_w2_tid_fw <= frf_w2_tid;
28171 frf_w2_addr_fw <= frf_w2_addr;
28172
28173 frf_w1_valid_fw <= frf_w1_valid;
28174 frf_w1_tid_fw <= frf_w1_tid;
28175 frf_w1_addr_fw <= frf_w1_addr;
28176
28177 // Thread running
28178
28179 if (~thread_running & `SPC5.tcu_core_running[mytid])
28180 `TOP.th_last_act_cycle[mytnum] = `TOP.core_cycle_cnt;
28181
28182 thread_running <= `SPC5.tcu_core_running[mytid];
28183
28184 // Reset some register prev state on wmr negation
28185 if (`SPC5.rst_wmr_protect && ~wmr)
28186 wmr_prev;
28187
28188 if (por_a && ~por_b)
28189 por_prev;
28190
28191 wmr <= `SPC5.rst_wmr_protect;
28192 por_a <= `TOP.in_por;
28193 por_b <= por_a;
28194
28195 if (`SPC5.rst_wmr_protect)
28196 in_wmr <= 1;
28197
28198end // }
28199
28200//----------------------------------------------------------
28201// Holding state for registers that may be updated asynchronously
28202// after synchronous update, but before capture/step. Also for reads,
28203// when register is read and modified before capture/step ..
28204// We capture the value /write time, and use that for sstep,
28205// ignoring any async updates, which are sent in the NEXT sstep ..
28206//
28207reg [63:0] asi_updated_int_rec;
28208reg asi_rdwr_int_rec;
28209reg asi_wr_int_rec_delay;
28210
28211reg asi_updated_hintp;
28212reg asi_rdwr_hintp;
28213reg asi_wr_hintp_delay;
28214
28215reg [16:0] asi_updated_softint;
28216reg asi_rdwr_softint;
28217reg asi_wr_softint_delay;
28218reg [16:0] asi_softint_wrdata;
28219
28220always @(posedge `BENCH_SPC5_GCLK) begin // {
28221
28222 // Corner case : If async and sync wr occur in same clock, then the async
28223 // update takes place. In this case we have to capture the
28224 // value of the write WITHOUT async bit being set, so that
28225 // we can sync with Riesling's sync write ..
28226
28227 asi_wr_int_rec_delay <= ( `SPC5.tlu.cth.asi_wr_int_rec[mytid] |
28228 `SPC5.tlu.asi_rd_inc_vec_2[mytid]);
28229
28230 if (`SPC5.tlu.cth.asi_wr_int_rec[mytid] |
28231 ((`SPC5.tlu.asi.rd_inc_vec) &&
28232 (`SPC5.tlu.asi.rd_tid_dec[mytid])) |
28233 (`SPC5.tlu.asi_rd_int_rec &
28234 `SPC5.tlu.cth.int_rec_mux_sel==mytid))
28235 begin // {
28236
28237 if (`SPC5.tlu.cth.asi_wr_int_rec[mytid])
28238 asi_updated_int_rec <= `SPC5.tlu.cth.int_rec ;
28239 else if ( (`SPC5.tlu.asi.rd_inc_vec) &&
28240 (`SPC5.tlu.asi.rd_tid_dec[mytid]) )
28241 if (`SPC5.tlu.cth.cxi_wr_int_dis[mytid]) begin
28242 asi_updated_int_rec <= INTR_RECEIVE_reg & `SPC5.tlu.cth.int_rec_muxed_;
28243 asi_updated_int_rec[`SPC5.tlu.cth.incoming_vector_in] <= 1'b0 ;
28244 end
28245 else
28246 begin
28247 asi_updated_int_rec <= `SPC5.tlu.cth.int_rec_muxed ;
28248 asi_updated_int_rec[`SPC5.tlu.cth.incoming_vector_in] <= 1'b0 ;
28249 end
28250 else
28251 asi_updated_int_rec <= INTR_RECEIVE_reg;
28252 asi_rdwr_int_rec <= 1'b1;
28253 end //}
28254 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
28255 asi_rdwr_int_rec <= 1'b0;
28256
28257 asi_wr_hintp_delay <= `SPC5.tlu.asi_wr_hintp[mytid];
28258
28259 if (`SPC5.tlu.asi_wr_hintp[mytid] |
28260 `SPC5.tlu.asi_rd_hintp[mytid])
28261 begin // {
28262 if (`SPC5.tlu.asi_wr_hintp[mytid])
28263 asi_updated_hintp <= `SPC5.tlu.asi_wr_data_0[0] ;
28264 else
28265 asi_updated_hintp <= HINTP_reg;
28266 asi_rdwr_hintp <= 1'b1;
28267 end //}
28268 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
28269 asi_rdwr_hintp <= 1'b0;
28270
28271 asi_wr_softint_delay <= (`SPC5.tlu.asi_wr_softint[mytid] |
28272 `SPC5.tlu.asi_wr_clear_softint[mytid] |
28273 `SPC5.tlu.asi_wr_set_softint[mytid]);
28274
28275 if (`SPC5.tlu.asi_wr_clear_softint[mytid])
28276 asi_softint_wrdata <= ~`SPC5.tlu.asi_wr_data_0[16:0] & rd_SOFTINT_reg;
28277 else if (`SPC5.tlu.asi_wr_set_softint[mytid])
28278 asi_softint_wrdata <= `SPC5.tlu.asi_wr_data_0[16:0] | rd_SOFTINT_reg;
28279 else
28280 asi_softint_wrdata <= `SPC5.tlu.asi_wr_data_0[16:0];
28281
28282 if (asi_wr_softint_delay | `SPC5.tlu.asi_rd_softint[mytid])
28283 begin // {
28284 if (asi_wr_softint_delay)
28285 asi_updated_softint <= asi_softint_wrdata ;
28286 else
28287 asi_updated_softint <= rd_SOFTINT_reg ;
28288 asi_rdwr_softint <= 1'b1;
28289 end //}
28290 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
28291 asi_rdwr_softint <= 1'b0;
28292end //}
28293
28294//----------------------------------------------------------
28295// Negedge sampling to avoid race on specific signals ..
28296//
28297always @ (negedge `BENCH_SPC5_GCLK) begin // {
28298 frf_w2_valid_bn <= frf_w2_valid;
28299end //}
28300
28301//----------------------------------------------------------
28302// When instruction completes,
28303// Push differences to simics
28304
28305always @ (posedge `BENCH_SPC5_GCLK) begin // {
28306
28307 if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable && ~`SPC5.tcu_scan_en && ~`TOP.in_por) begin // {
28308
28309
28310 //----------
28311 // Update window registers
28312 if (CWP_reg != `NASTOP.th_cwp[mytnum]) begin // {
28313 copy_win (CWP_reg,`NASTOP.th_cwp[mytnum]);
28314 `NASTOP.th_cwp[mytnum] = CWP_reg;
28315 end // }
28316
28317 //----------
28318 // Update global registers
28319 // Wait for warm-reset flush related toggling to settle
28320 if (GL_reg != th_gl) begin // {
28321 if (`SPC5.spc_core_running_status[mytid] &
28322 ~`SPC5.rst_wmr_protect) begin // {
28323 copy_global (GL_reg,th_gl);
28324 th_gl = GL_reg;
28325 end // }
28326 end // }
28327
28328 //----------
28329 // Check for bad signal values
28330 check_values;
28331
28332 //----------
28333 // Step Simics
28334 //
28335 // if NASTOP.sstep_sent[tid]=1,
28336 // then SSTEP was set by another module (i.e. tlb_sync)
28337
28338 if (`PARGS.nas_check_on) begin // {
28339 mytime = `TOP.core_cycle_cnt-1;
28340 if (complete_fw2 && (`NASTOP.sstep_sent[mytnum]==1'b0)) begin // {
28341 `PR_INFO ("pli_nas", `INFO, " C%0d T%0d PLI_SSTEP tid=%d pc=%h ts=%0d ",
28342 mycid,mytid,mytnum,pc_fw2,mytime);
28343 junk = $sim_send(`PLI_SSTEP, mytnum);
28344 // Always clear sstep_early
28345 // In case tlb_sync asserted it too late for complete_fw2
28346 `NASTOP.sstep_early[mytnum] <= 1'b0;
28347 end //}
28348 else if (complete_fw2) begin // {
28349 `NASTOP.sstep_sent[mytnum] <= 1'b0; // re-arm SSTEP
28350 `NASTOP.sstep_early[mytnum] <= 1'b0;
28351 `PR_INFO ("pli_nas", `INFO, " C%0d T%0d PLI_SSTEP tid=%d pc=%h ts=%0d (nas_pipe: skip sstep. rearm sstep. sstep_sent=0)",
28352 mycid,mytid,mytnum,pc_fw2,mytime);
28353 end //}
28354 end //}
28355
28356 //----------
28357 // Only capture if something completes and not first instruction
28358 if (complete_fw2 && !first_op) begin // {
28359 update_pc;
28360 push_simics; // Use with AXIS to keep from getting timeout
28361 end // }
28362
28363 // Pipeline runs continuously
28364 // Other than when in POR ..
28365 update_fx4;
28366 update_fx5;
28367 update_fb;
28368 update_fw;
28369 update_fw1;
28370 update_fw2;
28371 // Only save to delta_prev when something completes
28372 if (complete_fw2) begin
28373 update_fw2_async;
28374 update_prev;
28375 first_op = 0;
28376 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
28377 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
28378 end
28379
28380
28381`ifndef EMUL_TL
28382 //----------
28383 // If something was captured but no instruction is in the pipeline
28384 if ((delta_fw2[`NEXT_INDEX]!=`FIRST_INDEX) && (complete_fw2 == 0))
28385 begin // {
28386
28387 for (myindex=`FIRST_INDEX; myindex<delta_fw2[`NEXT_INDEX]; myindex=myindex+1)
28388 begin // {
28389 print_entry (delta_fw2[myindex]);
28390 end //}
28391 `PR_ERROR ("nas",`ERROR, "T%0d Unexpected Reg change in DUT. Special case - no instruction retired.", mytnum);
28392
28393 end // }
28394`endif
28395
28396
28397 //----------
28398 // End detection for non-sas runs ..
28399
28400 for (junk=0;junk<`PARGS.bad_trap_count;junk=junk+1)
28401 if (({16'b0,pc_fw2}&`PC_MASK) ===
28402 (`PARGS.bad_trap_addr[junk]&`PC_MASK)) begin // {
28403 // Disable nas_pipe processing (capture & SSTEP)
28404 // to speed up simulation (minimize socket traffic,etc)
28405 nas_pipe_enable=1'b0;
28406 if (! `PARGS.nas_check_on) begin //{
28407 `PR_ERROR ("nas",`ERROR, "T%0d reached Bad Trap", mytnum);
28408 end //}
28409 end //}
28410
28411 for (junk=0;junk<`PARGS.good_trap_count;junk=junk+1)
28412 if ((|complete_fw2) && (({16'b0,pc_fw2}&`PC_MASK) ===
28413 (`PARGS.good_trap_addr[junk]&`PC_MASK))) begin // {
28414 // Disable nas_pipe processing (capture & SSTEP)
28415 // to speed up simulation (minimize socket traffic,etc)
28416 nas_pipe_enable=1'b0;
28417 if (! `PARGS.nas_check_on) begin //{
28418 good_trap_detected = 1'b1;
28419 end //}
28420 end //}
28421
28422 // Check Thread level timeout
28423 if (thread_running &&
28424 (`TOP.core_cycle_cnt - `TOP.th_last_act_cycle[mytnum]) > `PARGS.th_timeout)
28425 begin // {
28426 // Note: Do not change this message because regreport parses it for certain words.
28427 `PR_ALWAYS ("nas",`ALWAYS, "ERROR: Thread T%0d No Activity for %0d Cycles - Thread TIMEOUT!",
28428 mytnum, `PARGS.th_timeout);
28429 junk = incErr(9999); // must exceed users max error setting to force exit.
28430 end //}
28431
28432 end // if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable ...)}
28433
28434 // if -nosas only,
28435 // Need to make sure Store Buffer is empty before turning off th_check_enable.
28436 //global chkr requires to wait for all outstanding pending I
28437 if ((! `PARGS.nas_check_on) &&
28438 (good_trap_detected==1'b1) &&
28439 (`TOP.nas_top.lsu_stb_empty[mytnum]) && `TOP.nas_top.ireq_pending[mytnum]) begin // {
28440 `PARGS.th_check_enable[mytnum] = 1'b0;
28441 `TOP.finished_tids[mytnum] = 1'b1;
28442 good_trap_detected = 1'b0;
28443 `PR_NORMAL ("nas", `NORMAL, "T%0d reached Good Trap. Disabling checking for thread %0d", mytnum,mytnum);
28444 end // }
28445end // always }
28446
28447//----------------------------------------------------------
28448//----------------------------------------------------------
28449// Stage FX4 of delta pipeline
28450task update_fx4;
28451
28452 integer i;
28453 reg [7:0] index;
28454
28455 begin // {
28456
28457 `ifndef EMUL_TL
28458 index = `FIRST_INDEX;
28459
28460 //--------------------
28461 // Init delta_fx4
28462 delta_fx4[`NEXT_INDEX] <= `FIRST_INDEX;
28463 delta_fx4[`TIME_INDEX] <= 0;
28464 delta_fx4[`PC_INDEX] <= {16'b0,PC_reg};
28465 delta_fx4[`GL_INDEX] <= GL_reg;
28466 delta_fx4[`CWP_INDEX] <= CWP_reg;
28467 delta_fx4[`OPCODE_INDEX] <= opcode;
28468 delta_fx4[`FIRST_INDEX] <= 77'hx;
28469 `else
28470 index = 0;
28471 `endif
28472
28473 end // }
28474endtask
28475
28476//----------------------------------------------------------
28477// Stage FX5 of delta pipeline
28478task update_fx5;
28479
28480 integer i;
28481 reg [7:0] index;
28482 reg [38:0] frf_tmp;
28483
28484 begin // {
28485
28486 `ifndef EMUL_TL
28487 index = delta_fx4[`NEXT_INDEX];
28488
28489 //--------------------
28490 // Pipeline previous stage
28491 for (i=0; i<=delta_fx4[`NEXT_INDEX]; i=i+1) begin // {
28492 delta_fx5[i] <= delta_fx4[i];
28493 end
28494 `else
28495 index = 0;
28496 `endif
28497
28498 //-------------------
28499 // Control Registers
28500 if (complete_fx4) begin // LSU | EXU | TLU
28501 push_delta_fx5 (`CCR+`CTL_OFFSET,CCR_reg,index);
28502 end
28503
28504 //-------------------
28505 // Update IRF5
28506`ifndef NAS_NO_IRFFRF
28507 if (complete_fx4[`LSU_INDEX] |
28508 complete_fx4[`EXU_INDEX]) begin
28509 if (mytid <= 3) begin // {
28510 for (i=0; i<=31; i=i+1) begin // {
28511 push_delta_fx5 (i,`IRF5_EXU0[(remap(i,oddwin)+irf_offset)],index);
28512 end // }
28513 end // }
28514 else begin // {
28515 for (i=0; i<=31; i=i+1) begin // {
28516 push_delta_fx5 (i,`IRF5_EXU1[(remap(i,oddwin)+irf_offset)],index);
28517 end // }
28518 end // }
28519 end
28520`endif
28521
28522 //--------------------
28523 // Update FRF5 - Loads use W2 Port.
28524`ifndef NAS_NO_IRFFRF
28525 if (complete_fx4[`LSU_INDEX]) begin // {
28526 // IF W1 port is also being written, ignore that address
28527 for (i=0; i<=31; i=i+1) begin // {
28528 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
28529 frf_tmp = `FRF5_EVEN[(mytid*32)+i];
28530 push_delta_fx5 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
28531 end // }
28532 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
28533 frf_tmp = `FRF5_ODD[(mytid*32)+i];
28534 push_delta_fx5 (`FP_OFFSET + (i*2)+1, frf_tmp[31:0], index);
28535 end // }
28536 end //}
28537 end // }
28538`endif
28539
28540 // Update ASR/ASI registers
28541 if (complete_fx4) begin // {
28542 push_delta_fx5 (`PSTATE + `CTL_OFFSET,PSTATE_reg,index);
28543 push_delta_fx5 (`HPSTATE + `CTL_OFFSET,HPSTATE_reg,index);
28544 push_delta_fx5 (`PIL + `CTL_OFFSET,PIL_reg,index);
28545 push_delta_fx5 (`TBA + `CTL_OFFSET,{TBA_reg,15'b0},index);
28546 push_delta_fx5 (`GL + `CTL_OFFSET,GL_reg,index);
28547 push_delta_fx5 (`HTBA + `CTL_OFFSET,{HTBA_reg,14'b0},index);
28548 push_delta_fx5 (`VER + `CTL_OFFSET,VER_reg,index);
28549 push_delta_fx5 (`Y + `CTL_OFFSET,Y_reg,index);
28550 push_delta_fx5 (`ASI + `CTL_OFFSET,ASI_reg,index);
28551 push_delta_fx5 (`STICK_CMPR + `CTL_OFFSET,STICK_CMPR_wire,index);
28552 push_delta_fx5 (`HSTICK_CMPR + `CTL_OFFSET,HSTICK_CMPR_wire,index);
28553 push_delta_fx5 (`TICK_CMPR + `CTL_OFFSET,TICK_CMPR_wire,index);
28554 push_delta_fx5 (`CWP + `CTL_OFFSET,CWP_reg,index);
28555 push_delta_fx5 (`CANSAVE + `CTL_OFFSET,CANSAVE_reg,index);
28556 push_delta_fx5 (`CANRESTORE + `CTL_OFFSET,CANRESTORE_reg,index);
28557 push_delta_fx5 (`CLEANWIN + `CTL_OFFSET,CLEANWIN_reg,index);
28558 push_delta_fx5 (`OTHERWIN + `CTL_OFFSET,OTHERWIN_reg,index);
28559 push_delta_fx5 (`WSTATE + `CTL_OFFSET,WSTATE_reg,index);
28560
28561 push_delta_fx5 (`CTXT_PRIM_0+`CTL_OFFSET,CTXT_PRIM_0_reg,index);
28562 push_delta_fx5 (`CTXT_SEC_0+`CTL_OFFSET,CTXT_SEC_0_reg,index);
28563 push_delta_fx5 (`CTXT_PRIM_1+`CTL_OFFSET,CTXT_PRIM_1_reg,index);
28564 push_delta_fx5 (`CTXT_SEC_1+`CTL_OFFSET,CTXT_SEC_1_reg,index);
28565 push_delta_fx5 (`LSU_CONTROL+`CTL_OFFSET,LSU_CONTROL_reg,index);
28566 push_delta_fx5 (`WATCHPOINT_ADDR+`CTL_OFFSET,WATCHPOINT_ADDR_reg,index);
28567
28568 // NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
28569 // ADD_TSB_CFG
28570 `ifdef ADD_TSB_CFG
28571 push_delta_fx5 (`CTXT_Z_TSB_CFG0+`CTL_OFFSET,ctxt_z_tsb_cfg0_reg,index);
28572 push_delta_fx5 (`CTXT_Z_TSB_CFG1+`CTL_OFFSET,ctxt_z_tsb_cfg1_reg,index);
28573 push_delta_fx5 (`CTXT_Z_TSB_CFG2+`CTL_OFFSET,ctxt_z_tsb_cfg2_reg,index);
28574 push_delta_fx5 (`CTXT_Z_TSB_CFG3+`CTL_OFFSET,ctxt_z_tsb_cfg3_reg,index);
28575 push_delta_fx5 (`CTXT_NZ_TSB_CFG0+`CTL_OFFSET,ctxt_nz_tsb_cfg0_reg,index);
28576 push_delta_fx5 (`CTXT_NZ_TSB_CFG1+`CTL_OFFSET,ctxt_nz_tsb_cfg1_reg,index);
28577 push_delta_fx5 (`CTXT_NZ_TSB_CFG2+`CTL_OFFSET,ctxt_nz_tsb_cfg2_reg,index);
28578 push_delta_fx5 (`CTXT_NZ_TSB_CFG3+`CTL_OFFSET,ctxt_nz_tsb_cfg3_reg,index);
28579 `endif
28580
28581 end //}
28582
28583 // Update GSR for all except write ASR in progess
28584 if (!asi_in_progress) begin // {
28585 push_delta_fx5 (`GSR + `CTL_OFFSET,GSR_wire, index);
28586 end // }
28587
28588 // If lsu_complete & fp_complete assert at same time,
28589 // then the fp_complete is the one that will modify the FSR
28590 if (complete_fx4[`LSU_INDEX] & !complete_fw1[`FP_INDEX]) begin
28591 push_delta_fx5 (`FSR+`CTL_OFFSET,FSR_wire,index);
28592 end
28593
28594 // Non Trap updates of Trap stack & level
28595 if (complete_fx4 && !complete_fx4[`TLU_INDEX]) begin // {
28596 push_delta_fx5 (`TL + `CTL_OFFSET,TL_reg,index);
28597 push_delta_fx5 (`TPC1 + `CTL_OFFSET, TPC1_wire, index);
28598 push_delta_fx5 (`TPC2 + `CTL_OFFSET, TPC2_wire, index);
28599 push_delta_fx5 (`TPC3 + `CTL_OFFSET, TPC3_wire, index);
28600 push_delta_fx5 (`TPC4 + `CTL_OFFSET, TPC4_wire, index);
28601 push_delta_fx5 (`TPC5 + `CTL_OFFSET, TPC5_wire, index);
28602 push_delta_fx5 (`TPC6 + `CTL_OFFSET, TPC6_wire, index);
28603 push_delta_fx5 (`TNPC1 + `CTL_OFFSET, TNPC1_wire, index);
28604 push_delta_fx5 (`TNPC2 + `CTL_OFFSET, TNPC2_wire, index);
28605 push_delta_fx5 (`TNPC3 + `CTL_OFFSET, TNPC3_wire, index);
28606 push_delta_fx5 (`TNPC4 + `CTL_OFFSET, TNPC4_wire, index);
28607 push_delta_fx5 (`TNPC5 + `CTL_OFFSET, TNPC5_wire, index);
28608 push_delta_fx5 (`TNPC6 + `CTL_OFFSET, TNPC6_wire, index);
28609 push_delta_fx5 (`TSTATE1 + `CTL_OFFSET, TSTATE1_wire, index);
28610 push_delta_fx5 (`TSTATE2 + `CTL_OFFSET, TSTATE2_wire, index);
28611 push_delta_fx5 (`TSTATE3 + `CTL_OFFSET, TSTATE3_wire, index);
28612 push_delta_fx5 (`TSTATE4 + `CTL_OFFSET, TSTATE4_wire, index);
28613 push_delta_fx5 (`TSTATE5 + `CTL_OFFSET, TSTATE5_wire, index);
28614 push_delta_fx5 (`TSTATE6 + `CTL_OFFSET, TSTATE6_wire, index);
28615 push_delta_fx5 (`HTSTATE1 + `CTL_OFFSET, HTSTATE1_wire, index);
28616 push_delta_fx5 (`HTSTATE2 + `CTL_OFFSET, HTSTATE2_wire, index);
28617 push_delta_fx5 (`HTSTATE3 + `CTL_OFFSET, HTSTATE3_wire, index);
28618 push_delta_fx5 (`HTSTATE4 + `CTL_OFFSET, HTSTATE4_wire, index);
28619 push_delta_fx5 (`HTSTATE5 + `CTL_OFFSET, HTSTATE5_wire, index);
28620 push_delta_fx5 (`HTSTATE6 + `CTL_OFFSET, HTSTATE6_wire, index);
28621 push_delta_fx5 (`TT1 + `CTL_OFFSET, TT1_wire, index);
28622 push_delta_fx5 (`TT2 + `CTL_OFFSET, TT2_wire, index);
28623 push_delta_fx5 (`TT3 + `CTL_OFFSET, TT3_wire, index);
28624 push_delta_fx5 (`TT4 + `CTL_OFFSET, TT4_wire, index);
28625 push_delta_fx5 (`TT5 + `CTL_OFFSET, TT5_wire, index);
28626 push_delta_fx5 (`TT6 + `CTL_OFFSET, TT6_wire, index);
28627 end //}
28628
28629 end // }
28630endtask
28631
28632//----------------------------------------------------------
28633// Stage FB of delta pipeline
28634task update_fb;
28635
28636 integer i;
28637 reg [7:0] index;
28638
28639 begin // {
28640
28641 `ifndef EMUL_TL
28642 index = delta_fx5[`NEXT_INDEX];
28643
28644 //--------------------
28645 // Pipeline previous stage
28646 for (i=0; i<=delta_fx5[`NEXT_INDEX]; i=i+1) begin // {
28647 delta_fb[i] <= delta_fx5[i];
28648 end
28649 `else
28650 index = 0;
28651 `endif
28652
28653 // ASI/ASR ONLY updates
28654 if (complete_fx5[`ASI_INDEX]) begin // {
28655 push_delta_fb (`GSR + `CTL_OFFSET,GSR_wire, index);
28656 end //}
28657
28658 end // }
28659endtask
28660
28661//----------------------------------------------------------
28662// Stage FW of delta pipeline
28663task update_fw;
28664
28665 integer i;
28666 reg [7:0] index;
28667 reg [38:0] frf_tmp;
28668
28669 begin // {
28670
28671 `ifndef EMUL_TL
28672 index = delta_fb[`NEXT_INDEX];
28673
28674 //--------------------
28675 // Pipeline previous stage
28676 for (i=0; i<=delta_fb[`NEXT_INDEX]; i=i+1) begin // {
28677 delta_fw[i] <= delta_fb[i];
28678 end
28679
28680 // Capture CWP_reg for SAVE/RESTORE
28681 if (imul_complete) begin
28682 delta_fw[`CWP_INDEX] <= CWP_reg;
28683 end
28684 `else
28685 index = 0;
28686 `endif
28687
28688 //-------------------
28689 // Update IRF5
28690`ifndef NAS_NO_IRFFRF
28691 if (complete_fb[`TLU_INDEX]) begin
28692 if (mytid <= 3) begin // {
28693 for (i=0; i<=31; i=i+1) begin // {
28694 push_delta_fw (i,`IRF5_EXU0[(remap(i,oddwin)+irf_offset)],index);
28695 end // }
28696 end // }
28697 else begin // {
28698 for (i=0; i<=31; i=i+1) begin // {
28699 push_delta_fw (i,`IRF5_EXU1[(remap(i,oddwin)+irf_offset)],index);
28700 end // }
28701 end // }
28702 end
28703`endif
28704
28705 //--------------------
28706 // Update FRF5 - Idivs use W2.
28707`ifndef NAS_NO_IRFFRF
28708 if (complete_fb[`IDIV_INDEX]) begin // {
28709 // IF W1 port is also being written, ignore that address
28710 for (i=0; i<=31; i=i+1) begin // {
28711 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
28712 frf_tmp = `FRF5_EVEN[(mytid*32)+i];
28713 push_delta_fw (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
28714 end // }
28715 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
28716 frf_tmp = `FRF5_ODD[(mytid*32)+i];
28717 push_delta_fw (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
28718 end // }
28719 end //}
28720 end // }
28721`endif
28722
28723 end // }
28724
28725endtask
28726
28727//----------------------------------------------------------
28728// Stage FW1 of delta pipeline
28729task update_fw1;
28730
28731 integer i;
28732 reg [7:0] index;
28733
28734 reg [4:0] rdnum;
28735 reg [38:0] frf_tmp;
28736
28737 begin // {
28738
28739 `ifndef EMUL_TL
28740 index = delta_fw[`NEXT_INDEX];
28741
28742 //--------------------
28743 // Pipeline previous stage
28744 for (i=0; i<=delta_fw[`NEXT_INDEX]; i=i+1) begin // {
28745 delta_fw1[i] <= delta_fw[i];
28746 end
28747 `else
28748 index = 0;
28749 `endif
28750
28751 //--------------------
28752 // Update FRF5 - FPops use W1 port.
28753`ifndef NAS_NO_IRFFRF
28754 if (fp_complete) begin // {
28755 // IF W2 port is also being written, ignore that address
28756 for (i=0; i<=31; i=i+1) begin // {
28757 if (!((i == frf_w2_skip_addr) && frf_w2_valid_even)) begin // {
28758 frf_tmp = `FRF5_EVEN[(mytid*32)+i];
28759 push_delta_fw1 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
28760 end // }
28761 if (!((i == frf_w2_skip_addr) && frf_w2_valid_odd)) begin // {
28762 frf_tmp = `FRF5_ODD[(mytid*32)+i];
28763 push_delta_fw1 (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
28764 end // }
28765 end //}
28766 end // }
28767`endif
28768
28769 //-------------------
28770 // Control Registers
28771 if (complete_fw[`IMUL_INDEX]|complete_fw[`IDIV_INDEX]) begin
28772 push_delta_fw1 (`CCR+`CTL_OFFSET,CCR_reg,index);
28773 push_delta_fw1 (`Y+`CTL_OFFSET,Y_reg,index);
28774 push_delta_fw1 (`CWP+`CTL_OFFSET,CWP_reg,index);
28775 push_delta_fw1 (`CANSAVE+`CTL_OFFSET,CANSAVE_reg,index);
28776 push_delta_fw1 (`CANRESTORE+`CTL_OFFSET,CANRESTORE_reg,index);
28777 push_delta_fw1 (`CLEANWIN+`CTL_OFFSET,CLEANWIN_reg,index);
28778 push_delta_fw1 (`OTHERWIN+`CTL_OFFSET,OTHERWIN_reg,index);
28779 push_delta_fw1 (`WSTATE+`CTL_OFFSET,WSTATE_reg,index);
28780 end
28781
28782 // Update Trap Stack now
28783 if (complete_fw[`TLU_INDEX]) begin // {
28784 push_delta_fw1 (`TL + `CTL_OFFSET,TL_reg,index);
28785 push_delta_fw1 (`TPC1 + `CTL_OFFSET, TPC1_wire, index);
28786 push_delta_fw1 (`TPC2 + `CTL_OFFSET, TPC2_wire, index);
28787 push_delta_fw1 (`TPC3 + `CTL_OFFSET, TPC3_wire, index);
28788 push_delta_fw1 (`TPC4 + `CTL_OFFSET, TPC4_wire, index);
28789 push_delta_fw1 (`TPC5 + `CTL_OFFSET, TPC5_wire, index);
28790 push_delta_fw1 (`TPC6 + `CTL_OFFSET, TPC6_wire, index);
28791 push_delta_fw1 (`TNPC1 + `CTL_OFFSET, TNPC1_wire, index);
28792 push_delta_fw1 (`TNPC2 + `CTL_OFFSET, TNPC2_wire, index);
28793 push_delta_fw1 (`TNPC3 + `CTL_OFFSET, TNPC3_wire, index);
28794 push_delta_fw1 (`TNPC4 + `CTL_OFFSET, TNPC4_wire, index);
28795 push_delta_fw1 (`TNPC5 + `CTL_OFFSET, TNPC5_wire, index);
28796 push_delta_fw1 (`TNPC6 + `CTL_OFFSET, TNPC6_wire, index);
28797 push_delta_fw1 (`TSTATE1 + `CTL_OFFSET, TSTATE1_wire, index);
28798 push_delta_fw1 (`TSTATE2 + `CTL_OFFSET, TSTATE2_wire, index);
28799 push_delta_fw1 (`TSTATE3 + `CTL_OFFSET, TSTATE3_wire, index);
28800 push_delta_fw1 (`TSTATE4 + `CTL_OFFSET, TSTATE4_wire, index);
28801 push_delta_fw1 (`TSTATE5 + `CTL_OFFSET, TSTATE5_wire, index);
28802 push_delta_fw1 (`TSTATE6 + `CTL_OFFSET, TSTATE6_wire, index);
28803 push_delta_fw1 (`HTSTATE1 + `CTL_OFFSET, HTSTATE1_wire, index);
28804 push_delta_fw1 (`HTSTATE2 + `CTL_OFFSET, HTSTATE2_wire, index);
28805 push_delta_fw1 (`HTSTATE3 + `CTL_OFFSET, HTSTATE3_wire, index);
28806 push_delta_fw1 (`HTSTATE4 + `CTL_OFFSET, HTSTATE4_wire, index);
28807 push_delta_fw1 (`HTSTATE5 + `CTL_OFFSET, HTSTATE5_wire, index);
28808 push_delta_fw1 (`HTSTATE6 + `CTL_OFFSET, HTSTATE6_wire, index);
28809 push_delta_fw1 (`TT1 + `CTL_OFFSET, TT1_wire, index);
28810 push_delta_fw1 (`TT2 + `CTL_OFFSET, TT2_wire, index);
28811 push_delta_fw1 (`TT3 + `CTL_OFFSET, TT3_wire, index);
28812 push_delta_fw1 (`TT4 + `CTL_OFFSET, TT4_wire, index);
28813 push_delta_fw1 (`TT5 + `CTL_OFFSET, TT5_wire, index);
28814 push_delta_fw1 (`TT6 + `CTL_OFFSET, TT6_wire, index);
28815 end //}
28816
28817 end // }
28818endtask
28819
28820//----------------------------------------------------------
28821// Stage FW2 of delta pipeline
28822task update_fw2;
28823
28824 integer i;
28825 reg [7:0] index;
28826 reg [38:0] frf_tmp;
28827
28828 begin // {
28829
28830 `ifndef EMUL_TL
28831 index = delta_fw1[`NEXT_INDEX];
28832
28833 //--------------------
28834 // Pipeline previous stage
28835 for (i=0; i<=delta_fw1[`NEXT_INDEX]; i=i+1) begin // {
28836 delta_fw2[i] <= delta_fw1[i];
28837 end
28838
28839 delta_fw2[`TIME_INDEX] <= $time;
28840 `else
28841 index = 0;
28842 `endif
28843
28844 // Update Registers that may change asynchronously
28845 // If sstep was already sent by another module,
28846 // don't capture until the next sstep
28847 if (complete_fw1 && !`NASTOP.sstep_early[mytnum]) begin // {
28848 if ((complete_fw1[`ASI_INDEX]|complete_fw1[`LSU_INDEX]) & asi_rdwr_hintp)
28849 push_delta_fw2 (`HINTP + `CTL_OFFSET,asi_updated_hintp,index);
28850 else
28851 push_delta_fw2 (`HINTP + `CTL_OFFSET,HINTP_reg,index);
28852 if ((complete_fw1[`ASI_INDEX]|complete_fw1[`LSU_INDEX]) & asi_rdwr_softint)
28853 push_delta_fw2 (`SOFTINT + `CTL_OFFSET,asi_updated_softint,index);
28854 else
28855 push_delta_fw2 (`SOFTINT + `CTL_OFFSET,rd_SOFTINT_reg,index);
28856 end // }
28857
28858 //-------------------
28859 // Update IRF5
28860`ifndef NAS_NO_IRFFRF
28861 if (complete_fw1[`IMUL_INDEX] |
28862 complete_fw1[`IDIV_INDEX]) begin // {
28863 if (mytid <= 3) begin // {
28864 for (i=0; i<=31; i=i+1) begin // {
28865 push_delta_fw2 (i,`IRF5_EXU0[(remap(i,oddwin)+irf_offset)],index);
28866 end // }
28867 end // }
28868 else begin // {
28869 for (i=0; i<=31; i=i+1) begin // {
28870 push_delta_fw2 (i,`IRF5_EXU1[(remap(i,oddwin)+irf_offset)],index);
28871 end // }
28872 end // }
28873 end // }
28874`endif
28875
28876 //--------------------
28877 // Update FRF5 - fdivs and Imuls use W2 port
28878`ifndef NAS_NO_IRFFRF
28879 if (complete_fw1[`IMUL_INDEX] |
28880 complete_fw1[`FDIV_INDEX] ) begin // {
28881 // IF W1 port is also being written, ignore that address
28882 for (i=0; i<=31; i=i+1) begin // {
28883 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
28884 frf_tmp = `FRF5_EVEN[(mytid*32)+i];
28885 push_delta_fw2 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
28886 end // }
28887 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
28888 frf_tmp = `FRF5_ODD[(mytid*32)+i];
28889 push_delta_fw2 (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
28890 end // }
28891 end //}
28892 end // }
28893`endif
28894
28895 if (complete_fw1[`FP_INDEX] |
28896 complete_fw1[`TLU_INDEX] |
28897 complete_fw1[`FDIV_INDEX]) begin
28898 push_delta_fw2 (`FSR+`CTL_OFFSET,FSR_wire,index);
28899 end
28900
28901 if (complete_fw1) begin
28902 push_delta_fw2 (`I_TAG_ACC+`CTL_OFFSET,itagacc_fw2,index);
28903 push_delta_fw2 (`D_TAG_ACC+`CTL_OFFSET,dtagacc_fw2,index);
28904 push_delta_fw2 (`DSFAR+`CTL_OFFSET,dsfar_fw2,index);
28905 end
28906
28907 end // }
28908endtask
28909
28910//----------------------------------------------------------
28911// Stage FW2 of delta pipeline - for signals that change FW+2 !!
28912task update_fw2_async;
28913
28914 integer i;
28915 reg [7:0] index;
28916 reg [2:0] dummy_fprs;
28917
28918 begin // {
28919
28920 `ifndef EMUL_TL
28921 index = delta_fw2[`NEXT_INDEX];
28922 `else
28923 index = 0;
28924 `endif
28925
28926 // Since FPRS for FPops may have been corrupted by o-o-o loads:
28927 // If fprs_fw2 is != fprs_reg & there are loads in the pipeline
28928 // then assume loads have already updated fprs.
28929 // In that case, create our own fprs_reg by using the valids and
28930 // skip_addr and copy of fprs for this op..
28931 if (complete_fw2[`FP_INDEX] && frf_w1_valid_fw2) begin // {
28932 // o-o-o load has changed fprs already - use dummy
28933 if ((fprs_fw2 != FPRS_reg) && (complete_fw1[`LSU_INDEX] |
28934 complete_fw[`LSU_INDEX] | complete_fb[`LSU_INDEX] |
28935 complete_fx5[`LSU_INDEX] )) begin // {
28936 dummy_fprs = read_prev(`FPRS + `CTL_OFFSET);
28937 dummy_fprs = dummy_fprs |
28938 {1'b0, frf_w1_skip_addr4_fw2, ~frf_w1_skip_addr4_fw2};
28939 push_delta_fw2_async (`FPRS + `CTL_OFFSET,dummy_fprs,index);
28940 end //}
28941 // o-o-o load has NOT changed fprs already - use it
28942 else begin // {
28943 push_delta_fw2_async (`FPRS + `CTL_OFFSET,FPRS_reg,index);
28944 end //}
28945 end //}
28946 // Load FPRS for loads/reads as prev|fprs_fb ..
28947 // since loads may only 'set' bits, not clear ...
28948 else if (complete_fw2[`LSU_INDEX]) begin // {
28949 dummy_fprs = read_prev(`FPRS + `CTL_OFFSET);
28950 dummy_fprs = dummy_fprs | fprs_fw1;
28951 push_delta_fw2_async (`FPRS +`CTL_OFFSET,dummy_fprs,index);
28952 end // }
28953 // Load FPRS for store ASI or FDIV
28954 // FDIV can update FPRS on w1 or w2,
28955 // but the pipe is stalled behind it so no o-o-o loads.
28956 else if ((complete_fw2[`ASI_INDEX]) ||
28957 (complete_fw2[`FDIV_INDEX])) begin // {
28958 push_delta_fw2_async (`FPRS + `CTL_OFFSET,FPRS_reg,index);
28959 end //}
28960
28961 end // }
28962endtask
28963
28964//----------------------------------------------------------
28965// Store latest values into delta
28966// Capture of next PC
28967task update_pc;
28968 reg [7:0] index;
28969 begin
28970 `ifndef EMUL_TL
28971 index = delta_prev[`NEXT_INDEX];
28972 `else
28973 index = 0;
28974 `endif
28975
28976 if (in_wmr & ~`SPC5.rst_wmr_protect) begin // {
28977 push_delta_prev_async ( `PC+`CTL_OFFSET,{16'b0,pc_fw2|1},index);
28978 in_wmr <= 0;
28979 end // }
28980 else
28981 push_delta_prev_async ( `PC+`CTL_OFFSET,{16'b0,pc_fw2},index);
28982 pc_last <= pc_fw2;
28983 cwp_last <= cwp_fw2;
28984 end
28985endtask
28986
28987//----------------------------------------------------------
28988//----------------------------------------------------------
28989// Compare with current state and capture if different
28990task push_delta_fx4;
28991
28992 input [7:0] id;
28993 input [63:0] act_value;
28994 inout [7:0] next;
28995 reg [2:0] win;
28996 reg [1:0] type;
28997
28998 begin // {
28999 if (act_value != read_prev(id)) begin // { // Diff vs prev
29000 calc_cwp(CWP_reg,id,win,type); // special case for 1st stage
29001 write_prev(id,act_value);
29002
29003 `ifndef EMUL_TL
29004 delta_fx4[next] <= {type,win,id,act_value};
29005 next = next+1;
29006 delta_fx4[next] <= 77'hx;
29007 delta_fx4[`NEXT_INDEX] <= next;
29008 if (`PARGS.axis_debug_on) begin
29009 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
29010 mytnum,PC_reg,id,type,win,act_value,$time);
29011 end
29012 `else
29013 if (`PARGS.axis_debug_on) begin
29014 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
29015 mytnum,PC_reg,id,type,win,act_value,$time);
29016 end
29017 `endif
29018 end //}
29019 end //}
29020
29021endtask
29022
29023//----------------------------------------------------------
29024// Compare with current state and capture if different
29025task push_delta_fx5;
29026
29027 input [7:0] id;
29028 input [63:0] act_value;
29029 inout [7:0] next;
29030 reg [2:0] win;
29031 reg [1:0] type;
29032
29033 begin // {
29034 if (act_value != read_prev(id)) begin // { // Diff vs prev
29035 `ifndef EMUL_TL
29036 calc_cwp(delta_fx4[`CWP_INDEX],id,win,type);
29037 write_prev(id,act_value);
29038 delta_fx5[next] <= {type,win,id,act_value};
29039 next = next+1;
29040 delta_fx5[next] <= 77'hx;
29041 delta_fx5[`NEXT_INDEX] <= next;
29042 if (`PARGS.axis_debug_on) begin
29043 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
29044 mytnum,pc_fx4,id,type,win,act_value,$time);
29045 end
29046 `else
29047 calc_cwp(cwp_fx4,id,win,type);
29048 if (`PARGS.axis_debug_on) begin
29049 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
29050 mytnum,pc_fx4,id,type,win,act_value,$time);
29051 end
29052 `endif
29053 end //}
29054 end //}
29055
29056endtask
29057
29058//----------------------------------------------------------
29059// Compare with current state and capture if different
29060task push_delta_fb;
29061
29062 input [7:0] id;
29063 input [63:0] act_value;
29064 inout [7:0] next;
29065 reg [2:0] win;
29066 reg [1:0] type;
29067
29068 begin // {
29069 if (act_value != read_prev(id)) begin // { // Diff vs prev
29070 `ifndef EMUL_TL
29071 calc_cwp(delta_fx5[`CWP_INDEX],id,win,type);
29072 write_prev(id,act_value);
29073 delta_fb[next] <= {type,win,id,act_value};
29074 next = next+1;
29075 delta_fb[next] <= 77'hx;
29076 delta_fb[`NEXT_INDEX] <= next;
29077 if (`PARGS.axis_debug_on) begin
29078 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
29079 mytnum,pc_fx5,id,type,win,act_value,$time);
29080 end
29081 `else
29082 calc_cwp(cwp_fx5,id,win,type);
29083 if (`PARGS.axis_debug_on) begin
29084 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
29085 mytnum,pc_fx5,id,type,win,act_value,$time);
29086 end
29087 `endif
29088 end //}
29089 end //}
29090
29091endtask
29092
29093//----------------------------------------------------------
29094// Compare with current state and capture if different
29095task push_delta_fw;
29096
29097 input [7:0] id;
29098 input [63:0] act_value;
29099 inout [7:0] next;
29100 reg [2:0] win;
29101 reg [1:0] type;
29102
29103 begin // {
29104 if (act_value != read_prev(id)) begin // { // Diff vs prev
29105
29106 `ifndef EMUL_TL
29107 calc_cwp(delta_fb[`CWP_INDEX],id,win,type);
29108 write_prev(id,act_value);
29109 delta_fw[next] <= {type,win,id,act_value};
29110 next = next+1;
29111 delta_fw[next] <= 77'hx;
29112 delta_fw[`NEXT_INDEX] <= next;
29113 if (`PARGS.axis_debug_on) begin
29114 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
29115 mytnum,pc_fb,id,type,win,act_value,$time);
29116 end
29117 `else
29118 calc_cwp(cwp_fb[`CWP_INDEX],id,win,type);
29119 if (`PARGS.axis_debug_on) begin
29120 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
29121 mytnum,pc_fb,id,type,win,act_value,$time);
29122 end
29123 `endif
29124 end //}
29125 end //}
29126
29127endtask
29128
29129//----------------------------------------------------------
29130// Compare with current state and capture if different
29131task push_delta_fw1;
29132
29133 input [7:0] id;
29134 input [63:0] act_value;
29135 inout [7:0] next;
29136 reg [2:0] win;
29137 reg [1:0] type;
29138
29139 begin // {
29140 if (act_value != read_prev(id)) begin // { // Diff vs prev
29141
29142 `ifndef EMUL_TL
29143 calc_cwp(delta_fw[`CWP_INDEX],id,win,type);
29144 write_prev(id,act_value);
29145 delta_fw1[next] <= {type,win,id,act_value};
29146 next = next+1;
29147 delta_fw1[next] <= 77'hx;
29148 delta_fw1[`NEXT_INDEX] <= next;
29149 if (`PARGS.axis_debug_on) begin
29150 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
29151 mytnum,pc_fw,id,type,win,act_value,$time);
29152 end
29153 `else
29154 calc_cwp(cwp_fw,id,win,type);
29155 if (`PARGS.axis_debug_on) begin
29156 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
29157 mytnum,pc_fw,id,type,win,act_value,$time);
29158 end
29159 `endif
29160 end //}
29161 end //}
29162
29163endtask
29164
29165//----------------------------------------------------------
29166// Compare with current state and capture if different
29167task push_delta_fw2;
29168
29169 input [7:0] id;
29170 input [63:0] act_value;
29171 inout [7:0] next;
29172 reg [2:0] win;
29173 reg [1:0] type;
29174
29175 begin // {
29176 if (act_value != read_prev(id)) begin // { // Diff vs prev
29177
29178 `ifndef EMUL_TL
29179 calc_cwp(delta_fw1[`CWP_INDEX],id,win,type);
29180 write_prev(id,act_value);
29181 delta_fw2[next] <= {type,win,id,act_value};
29182 next = next+1;
29183 delta_fw2[next] <= 77'hx;
29184 delta_fw2[`NEXT_INDEX] <= next;
29185 if (`PARGS.axis_debug_on) begin
29186 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
29187 mytnum,pc_fw1,id,type,win,act_value,$time);
29188 end
29189 `else
29190 calc_cwp(cwp_fw1,id,win,type);
29191 if (`PARGS.axis_debug_on) begin
29192 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
29193 mytnum,pc_fw1,id,type,win,act_value,$time);
29194 end
29195 `endif
29196 end //}
29197 end //}
29198
29199endtask
29200
29201//----------------------------------------------------------
29202// Compare with current state and capture if different
29203// This is for late changing registers
29204// Use blocking assignments.
29205task push_delta_fw2_async;
29206
29207 input [7:0] id;
29208 input [63:0] act_value;
29209 inout [7:0] next;
29210 reg [2:0] win;
29211 reg [1:0] type;
29212
29213 begin // {
29214 if (act_value != read_prev(id)) begin // { // Diff vs prev
29215
29216 `ifndef EMUL_TL
29217 calc_cwp(delta_fw2[`CWP_INDEX],id,win,type);
29218 write_prev_async(id,act_value);
29219 delta_fw2[next] = {type,win,id,act_value};
29220 next = next+1;
29221 delta_fw2[next] = 77'hx;
29222 delta_fw2[`NEXT_INDEX] = next;
29223 if (`PARGS.axis_debug_on) begin
29224 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
29225 mytnum,pc_fw1,id,type,win,act_value,$time);
29226 end
29227 `else
29228 calc_cwp(cwp_fw2,id,win,type);
29229 if (`PARGS.axis_debug_on) begin
29230 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
29231 mytnum,pc_fw1,id,type,win,act_value,$time);
29232 end
29233 `endif
29234 end //}
29235 end //}
29236
29237endtask
29238
29239
29240//----------------------------------------------------------
29241// Compare with current state and capture if different
29242// Use blocking assignments so that push_simics will work
29243task push_delta_prev_async;
29244
29245 input [7:0] id;
29246 input [63:0] act_value;
29247 inout [7:0] next;
29248 reg [2:0] win;
29249 reg [1:0] type;
29250
29251 begin // {
29252
29253 if (act_value != read_prev(id)) begin // { // Diff vs prev
29254
29255 `ifndef EMUL_TL
29256 calc_cwp(delta_prev[`CWP_INDEX],id,win,type);
29257 write_prev_async(id,act_value);
29258 delta_prev[next] = {type,win,id,act_value};
29259 next = next+1;
29260 delta_prev[next] = 77'hx;
29261 delta_prev[`NEXT_INDEX] = next;
29262 if (`PARGS.axis_debug_on) begin
29263 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
29264 mytnum,pc_last,id,type,win,act_value,$time);
29265 end
29266 `else
29267 if (`PARGS.axis_debug_on) begin
29268 calc_cwp(cwp_last,id,win,type);
29269 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
29270 mytnum,pc_last,id,type,win,act_value,$time);
29271 end
29272 `endif
29273 end //}
29274 end //}
29275
29276endtask
29277
29278//----------------------------------------------------------
29279// prev of delta pipeline
29280task update_prev;
29281 integer i;
29282
29283 begin // {
29284 `ifndef EMUL_TL
29285 //--------------------
29286 // Pipeline previous stage
29287 for (i=0; i<=delta_fw2[`NEXT_INDEX]; i=i+1) begin // {
29288 delta_prev[i] <= delta_fw2[i];
29289 end
29290 `endif
29291 end //}
29292
29293endtask
29294
29295//----------------------------------------------------------
29296//----------------------------------------------------------
29297// Sort delta list in register ID order, then push to simics
29298// Or print deltas if sas check disabled ..
29299task push_simics;
29300
29301integer i;
29302reg [7:0] act_type;
29303integer act_level;
29304reg [7:0] regnum;
29305reg [2:0] win;
29306reg [1:0] type;
29307reg [63:0] value;
29308reg [63:0] pc;
29309reg [63:0] time_fw2;
29310
29311 begin // {
29312
29313 `ifndef EMUL_TL
29314 `NASTOP.delta_cnt = 0;
29315 sort_delta;
29316
29317 //--------------------
29318 // Order of registers reported to simics must be:
29319 // Global 0-7 aka prev_reg[0:7]
29320 // Window 8-23 aka prev_reg[8:23]
29321 // Floating 0-63 aka prev_reg[200:263]
29322 // Control 32-143 aka prev_reg[32:143]
29323
29324 act_level = delta_prev[`GL_INDEX]; // GL
29325 time_fw2 = delta_prev[`TIME_INDEX]; // Finish time
29326
29327
29328 //--------------------
29329 for (i=`FIRST_INDEX; i<delta_prev[`NEXT_INDEX]; i=i+1) begin // {
29330 {type,win,regnum,value} = delta_prev[i];
29331
29332 if (regnum<=7) begin // {
29333 act_type = "G";
29334 if (`PARGS.nas_check_on) begin // {
29335 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
29336 act_level, regnum, value);
29337 end // }
29338 else if (`PARGS.show_delta_on) begin // {
29339 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
29340 end //}
29341 end // }
29342 else if (regnum<=23) begin // { %o0-%l7, %l0-%l7
29343 act_type = "W";
29344 if (`PARGS.nas_check_on) begin // {
29345 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
29346 win, regnum, value);
29347 end // }
29348 else if (`PARGS.show_delta_on) begin // {
29349 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
29350 end //}
29351 end // }
29352 else if (regnum<=31) begin // { %i0-%i7
29353 act_type = "W";
29354 if (`PARGS.nas_check_on) begin // {
29355 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
29356 win, (regnum-16), value);
29357 end // }
29358 else if (`PARGS.show_delta_on) begin // {
29359 `NASTOP.print_delta (mytnum,act_type,win,(regnum-16),value);
29360 end //}
29361 end // }
29362 else if (regnum<=(64+`FP_OFFSET)) begin // {
29363 act_type = "F";
29364 if (`PARGS.nas_check_on) begin // {
29365 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
29366 (regnum-`FP_OFFSET), value);
29367 end // }
29368 else if (`PARGS.show_delta_on) begin // {
29369 `NASTOP.print_delta (mytnum,act_type,win,(regnum-`FP_OFFSET),value);
29370 end //}
29371 end // }
29372 else if ((regnum>=(32+`CTL_OFFSET))&(regnum<=(143+`CTL_OFFSET))) begin // {
29373 act_type = "C";
29374 if (`PARGS.nas_check_on) begin // {
29375 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
29376 (regnum-`CTL_OFFSET), value);
29377 end //}
29378 else if (`PARGS.show_delta_on) begin // {
29379 `NASTOP.print_delta (mytnum,act_type,win,(regnum-`CTL_OFFSET),value);
29380 end //}
29381 end // }
29382 else begin // {
29383 `PR_ERROR ("nas", `ERROR, " - T%0d Bench problem. push_simics has bad regnum", mytnum);
29384 end // }
29385 end // }
29386
29387 //--------------------
29388 // Push Opcode
29389 act_type = "C";
29390 regnum = `OPCODE;
29391 value = delta_prev[`OPCODE_INDEX];
29392 if (`PARGS.nas_check_on) begin // {
29393 `ifdef OPCODE_COMPARE
29394 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
29395 regnum, value);
29396 `endif
29397 end //}
29398 else if (`PARGS.show_delta_on) begin // {
29399 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
29400 end //}
29401
29402
29403 //--------------------
29404 // Push End of Instruction Delimiter
29405 // The value field for this PUSH equals the PC for this instruction.
29406 // so that printing to the logfile works correctly.
29407 // prev_reg[`PC] = current instruction PC
29408 // delta_reg[`PC] = PC at end of current instruction
29409 act_type = "X";
29410 pc = delta_prev[`PC_INDEX];
29411 if (`PARGS.nas_check_on) begin // {
29412 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
29413 delta_fw2[`CWP_INDEX], `END_INSTR, pc);
29414 end // }
29415 else if (`PARGS.show_delta_on) begin // {
29416 `NASTOP.print_delta (mytnum,act_type,delta_fw2[`CWP_INDEX],`END_INSTR,0);
29417 end //}
29418 if (! `PARGS.nas_check_on) begin // {
29419 `PR_NORMAL ("nas", `NORMAL, "@%0d T%0d %h (Unchecked..)",
29420 $time, mytnum, {16'b0,pc});
29421 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
29422 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
29423 end //}
29424
29425 `else
29426 if (! `PARGS.nas_check_on) begin // {
29427 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
29428 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
29429 end //}
29430 `endif
29431 end // }
29432endtask
29433
29434
29435//----------------------------------------------------------
29436// Save current window to previous window, then copy new window to current window
29437task copy_win;
29438 input [2:0] new_cwp;
29439 input [2:0] old_cwp;
29440 integer i;
29441
29442 begin // {
29443
29444 // Save current window to Old window
29445 case (old_cwp)
29446 0: begin // {
29447 win0_reg8 = prev_reg8;
29448 win1_reg24 = prev_reg8;
29449 win0_reg9 = prev_reg9;
29450 win1_reg25 = prev_reg9;
29451 win0_reg10 = prev_reg10;
29452 win1_reg26 = prev_reg10;
29453 win0_reg11 = prev_reg11;
29454 win1_reg27 = prev_reg11;
29455 win0_reg12 = prev_reg12;
29456 win1_reg28 = prev_reg12;
29457 win0_reg13 = prev_reg13;
29458 win1_reg29 = prev_reg13;
29459 win0_reg14 = prev_reg14;
29460 win1_reg30 = prev_reg14;
29461 win0_reg15 = prev_reg15;
29462 win1_reg31 = prev_reg15;
29463 win0_reg16 = prev_reg16;
29464 win0_reg17 = prev_reg17;
29465 win0_reg18 = prev_reg18;
29466 win0_reg19 = prev_reg19;
29467 win0_reg20 = prev_reg20;
29468 win0_reg21 = prev_reg21;
29469 win0_reg22 = prev_reg22;
29470 win0_reg23 = prev_reg23;
29471 win0_reg24 = prev_reg24;
29472 win7_reg8 = prev_reg24;
29473 win0_reg25 = prev_reg25;
29474 win7_reg9 = prev_reg25;
29475 win0_reg26 = prev_reg26;
29476 win7_reg10 = prev_reg26;
29477 win0_reg27 = prev_reg27;
29478 win7_reg11 = prev_reg27;
29479 win0_reg28 = prev_reg28;
29480 win7_reg12 = prev_reg28;
29481 win0_reg29 = prev_reg29;
29482 win7_reg13 = prev_reg29;
29483 win0_reg30 = prev_reg30;
29484 win7_reg14 = prev_reg30;
29485 win0_reg31 = prev_reg31;
29486 win7_reg15 = prev_reg31;
29487 end // }
29488 1: begin // {
29489 win1_reg8 = prev_reg8;
29490 win2_reg24 = prev_reg8;
29491 win1_reg9 = prev_reg9;
29492 win2_reg25 = prev_reg9;
29493 win1_reg10 = prev_reg10;
29494 win2_reg26 = prev_reg10;
29495 win1_reg11 = prev_reg11;
29496 win2_reg27 = prev_reg11;
29497 win1_reg12 = prev_reg12;
29498 win2_reg28 = prev_reg12;
29499 win1_reg13 = prev_reg13;
29500 win2_reg29 = prev_reg13;
29501 win1_reg14 = prev_reg14;
29502 win2_reg30 = prev_reg14;
29503 win1_reg15 = prev_reg15;
29504 win2_reg31 = prev_reg15;
29505 win1_reg16 = prev_reg16;
29506 win1_reg17 = prev_reg17;
29507 win1_reg18 = prev_reg18;
29508 win1_reg19 = prev_reg19;
29509 win1_reg20 = prev_reg20;
29510 win1_reg21 = prev_reg21;
29511 win1_reg22 = prev_reg22;
29512 win1_reg23 = prev_reg23;
29513 win1_reg24 = prev_reg24;
29514 win0_reg8 = prev_reg24;
29515 win1_reg25 = prev_reg25;
29516 win0_reg9 = prev_reg25;
29517 win1_reg26 = prev_reg26;
29518 win0_reg10 = prev_reg26;
29519 win1_reg27 = prev_reg27;
29520 win0_reg11 = prev_reg27;
29521 win1_reg28 = prev_reg28;
29522 win0_reg12 = prev_reg28;
29523 win1_reg29 = prev_reg29;
29524 win0_reg13 = prev_reg29;
29525 win1_reg30 = prev_reg30;
29526 win0_reg14 = prev_reg30;
29527 win1_reg31 = prev_reg31;
29528 win0_reg15 = prev_reg31;
29529 end // }
29530 2: begin // {
29531 win2_reg8 = prev_reg8;
29532 win3_reg24 = prev_reg8;
29533 win2_reg9 = prev_reg9;
29534 win3_reg25 = prev_reg9;
29535 win2_reg10 = prev_reg10;
29536 win3_reg26 = prev_reg10;
29537 win2_reg11 = prev_reg11;
29538 win3_reg27 = prev_reg11;
29539 win2_reg12 = prev_reg12;
29540 win3_reg28 = prev_reg12;
29541 win2_reg13 = prev_reg13;
29542 win3_reg29 = prev_reg13;
29543 win2_reg14 = prev_reg14;
29544 win3_reg30 = prev_reg14;
29545 win2_reg15 = prev_reg15;
29546 win3_reg31 = prev_reg15;
29547 win2_reg16 = prev_reg16;
29548 win2_reg17 = prev_reg17;
29549 win2_reg18 = prev_reg18;
29550 win2_reg19 = prev_reg19;
29551 win2_reg20 = prev_reg20;
29552 win2_reg21 = prev_reg21;
29553 win2_reg22 = prev_reg22;
29554 win2_reg23 = prev_reg23;
29555 win2_reg24 = prev_reg24;
29556 win1_reg8 = prev_reg24;
29557 win2_reg25 = prev_reg25;
29558 win1_reg9 = prev_reg25;
29559 win2_reg26 = prev_reg26;
29560 win1_reg10 = prev_reg26;
29561 win2_reg27 = prev_reg27;
29562 win1_reg11 = prev_reg27;
29563 win2_reg28 = prev_reg28;
29564 win1_reg12 = prev_reg28;
29565 win2_reg29 = prev_reg29;
29566 win1_reg13 = prev_reg29;
29567 win2_reg30 = prev_reg30;
29568 win1_reg14 = prev_reg30;
29569 win2_reg31 = prev_reg31;
29570 win1_reg15 = prev_reg31;
29571 end // }
29572 3: begin // {
29573 win3_reg8 = prev_reg8;
29574 win4_reg24 = prev_reg8;
29575 win3_reg9 = prev_reg9;
29576 win4_reg25 = prev_reg9;
29577 win3_reg10 = prev_reg10;
29578 win4_reg26 = prev_reg10;
29579 win3_reg11 = prev_reg11;
29580 win4_reg27 = prev_reg11;
29581 win3_reg12 = prev_reg12;
29582 win4_reg28 = prev_reg12;
29583 win3_reg13 = prev_reg13;
29584 win4_reg29 = prev_reg13;
29585 win3_reg14 = prev_reg14;
29586 win4_reg30 = prev_reg14;
29587 win3_reg15 = prev_reg15;
29588 win4_reg31 = prev_reg15;
29589 win3_reg16 = prev_reg16;
29590 win3_reg17 = prev_reg17;
29591 win3_reg18 = prev_reg18;
29592 win3_reg19 = prev_reg19;
29593 win3_reg20 = prev_reg20;
29594 win3_reg21 = prev_reg21;
29595 win3_reg22 = prev_reg22;
29596 win3_reg23 = prev_reg23;
29597 win3_reg24 = prev_reg24;
29598 win2_reg8 = prev_reg24;
29599 win3_reg25 = prev_reg25;
29600 win2_reg9 = prev_reg25;
29601 win3_reg26 = prev_reg26;
29602 win2_reg10 = prev_reg26;
29603 win3_reg27 = prev_reg27;
29604 win2_reg11 = prev_reg27;
29605 win3_reg28 = prev_reg28;
29606 win2_reg12 = prev_reg28;
29607 win3_reg29 = prev_reg29;
29608 win2_reg13 = prev_reg29;
29609 win3_reg30 = prev_reg30;
29610 win2_reg14 = prev_reg30;
29611 win3_reg31 = prev_reg31;
29612 win2_reg15 = prev_reg31;
29613 end // }
29614 4: begin // {
29615 win4_reg8 = prev_reg8;
29616 win5_reg24 = prev_reg8;
29617 win4_reg9 = prev_reg9;
29618 win5_reg25 = prev_reg9;
29619 win4_reg10 = prev_reg10;
29620 win5_reg26 = prev_reg10;
29621 win4_reg11 = prev_reg11;
29622 win5_reg27 = prev_reg11;
29623 win4_reg12 = prev_reg12;
29624 win5_reg28 = prev_reg12;
29625 win4_reg13 = prev_reg13;
29626 win5_reg29 = prev_reg13;
29627 win4_reg14 = prev_reg14;
29628 win5_reg30 = prev_reg14;
29629 win4_reg15 = prev_reg15;
29630 win5_reg31 = prev_reg15;
29631 win4_reg16 = prev_reg16;
29632 win4_reg17 = prev_reg17;
29633 win4_reg18 = prev_reg18;
29634 win4_reg19 = prev_reg19;
29635 win4_reg20 = prev_reg20;
29636 win4_reg21 = prev_reg21;
29637 win4_reg22 = prev_reg22;
29638 win4_reg23 = prev_reg23;
29639 win4_reg24 = prev_reg24;
29640 win3_reg8 = prev_reg24;
29641 win4_reg25 = prev_reg25;
29642 win3_reg9 = prev_reg25;
29643 win4_reg26 = prev_reg26;
29644 win3_reg10 = prev_reg26;
29645 win4_reg27 = prev_reg27;
29646 win3_reg11 = prev_reg27;
29647 win4_reg28 = prev_reg28;
29648 win3_reg12 = prev_reg28;
29649 win4_reg29 = prev_reg29;
29650 win3_reg13 = prev_reg29;
29651 win4_reg30 = prev_reg30;
29652 win3_reg14 = prev_reg30;
29653 win4_reg31 = prev_reg31;
29654 win3_reg15 = prev_reg31;
29655 end // }
29656 5: begin // {
29657 win5_reg8 = prev_reg8;
29658 win6_reg24 = prev_reg8;
29659 win5_reg9 = prev_reg9;
29660 win6_reg25 = prev_reg9;
29661 win5_reg10 = prev_reg10;
29662 win6_reg26 = prev_reg10;
29663 win5_reg11 = prev_reg11;
29664 win6_reg27 = prev_reg11;
29665 win5_reg12 = prev_reg12;
29666 win6_reg28 = prev_reg12;
29667 win5_reg13 = prev_reg13;
29668 win6_reg29 = prev_reg13;
29669 win5_reg14 = prev_reg14;
29670 win6_reg30 = prev_reg14;
29671 win5_reg15 = prev_reg15;
29672 win6_reg31 = prev_reg15;
29673 win5_reg16 = prev_reg16;
29674 win5_reg17 = prev_reg17;
29675 win5_reg18 = prev_reg18;
29676 win5_reg19 = prev_reg19;
29677 win5_reg20 = prev_reg20;
29678 win5_reg21 = prev_reg21;
29679 win5_reg22 = prev_reg22;
29680 win5_reg23 = prev_reg23;
29681 win5_reg24 = prev_reg24;
29682 win4_reg8 = prev_reg24;
29683 win5_reg25 = prev_reg25;
29684 win4_reg9 = prev_reg25;
29685 win5_reg26 = prev_reg26;
29686 win4_reg10 = prev_reg26;
29687 win5_reg27 = prev_reg27;
29688 win4_reg11 = prev_reg27;
29689 win5_reg28 = prev_reg28;
29690 win4_reg12 = prev_reg28;
29691 win5_reg29 = prev_reg29;
29692 win4_reg13 = prev_reg29;
29693 win5_reg30 = prev_reg30;
29694 win4_reg14 = prev_reg30;
29695 win5_reg31 = prev_reg31;
29696 win4_reg15 = prev_reg31;
29697 end // }
29698 6: begin // {
29699 win6_reg8 = prev_reg8;
29700 win7_reg24 = prev_reg8;
29701 win6_reg9 = prev_reg9;
29702 win7_reg25 = prev_reg9;
29703 win6_reg10 = prev_reg10;
29704 win7_reg26 = prev_reg10;
29705 win6_reg11 = prev_reg11;
29706 win7_reg27 = prev_reg11;
29707 win6_reg12 = prev_reg12;
29708 win7_reg28 = prev_reg12;
29709 win6_reg13 = prev_reg13;
29710 win7_reg29 = prev_reg13;
29711 win6_reg14 = prev_reg14;
29712 win7_reg30 = prev_reg14;
29713 win6_reg15 = prev_reg15;
29714 win7_reg31 = prev_reg15;
29715 win6_reg16 = prev_reg16;
29716 win6_reg17 = prev_reg17;
29717 win6_reg18 = prev_reg18;
29718 win6_reg19 = prev_reg19;
29719 win6_reg20 = prev_reg20;
29720 win6_reg21 = prev_reg21;
29721 win6_reg22 = prev_reg22;
29722 win6_reg23 = prev_reg23;
29723 win6_reg24 = prev_reg24;
29724 win5_reg8 = prev_reg24;
29725 win6_reg25 = prev_reg25;
29726 win5_reg9 = prev_reg25;
29727 win6_reg26 = prev_reg26;
29728 win5_reg10 = prev_reg26;
29729 win6_reg27 = prev_reg27;
29730 win5_reg11 = prev_reg27;
29731 win6_reg28 = prev_reg28;
29732 win5_reg12 = prev_reg28;
29733 win6_reg29 = prev_reg29;
29734 win5_reg13 = prev_reg29;
29735 win6_reg30 = prev_reg30;
29736 win5_reg14 = prev_reg30;
29737 win6_reg31 = prev_reg31;
29738 win5_reg15 = prev_reg31;
29739 end // }
29740 7: begin // {
29741 win7_reg8 = prev_reg8;
29742 win0_reg24 = prev_reg8;
29743 win7_reg9 = prev_reg9;
29744 win0_reg25 = prev_reg9;
29745 win7_reg10 = prev_reg10;
29746 win0_reg26 = prev_reg10;
29747 win7_reg11 = prev_reg11;
29748 win0_reg27 = prev_reg11;
29749 win7_reg12 = prev_reg12;
29750 win0_reg28 = prev_reg12;
29751 win7_reg13 = prev_reg13;
29752 win0_reg29 = prev_reg13;
29753 win7_reg14 = prev_reg14;
29754 win0_reg30 = prev_reg14;
29755 win7_reg15 = prev_reg15;
29756 win0_reg31 = prev_reg15;
29757 win7_reg16 = prev_reg16;
29758 win7_reg17 = prev_reg17;
29759 win7_reg18 = prev_reg18;
29760 win7_reg19 = prev_reg19;
29761 win7_reg20 = prev_reg20;
29762 win7_reg21 = prev_reg21;
29763 win7_reg22 = prev_reg22;
29764 win7_reg23 = prev_reg23;
29765 win7_reg24 = prev_reg24;
29766 win6_reg8 = prev_reg24;
29767 win7_reg25 = prev_reg25;
29768 win6_reg9 = prev_reg25;
29769 win7_reg26 = prev_reg26;
29770 win6_reg10 = prev_reg26;
29771 win7_reg27 = prev_reg27;
29772 win6_reg11 = prev_reg27;
29773 win7_reg28 = prev_reg28;
29774 win6_reg12 = prev_reg28;
29775 win7_reg29 = prev_reg29;
29776 win6_reg13 = prev_reg29;
29777 win7_reg30 = prev_reg30;
29778 win6_reg14 = prev_reg30;
29779 win7_reg31 = prev_reg31;
29780 win6_reg15 = prev_reg31;
29781 end // }
29782
29783 endcase
29784
29785 // Copy New window to current window
29786 case (new_cwp)
29787 0: begin // {
29788 prev_reg8 = win0_reg8;
29789 prev_reg9 = win0_reg9;
29790 prev_reg10 = win0_reg10;
29791 prev_reg11 = win0_reg11;
29792 prev_reg12 = win0_reg12;
29793 prev_reg13 = win0_reg13;
29794 prev_reg14 = win0_reg14;
29795 prev_reg15 = win0_reg15;
29796 prev_reg16 = win0_reg16;
29797 prev_reg17 = win0_reg17;
29798 prev_reg18 = win0_reg18;
29799 prev_reg19 = win0_reg19;
29800 prev_reg20 = win0_reg20;
29801 prev_reg21 = win0_reg21;
29802 prev_reg22 = win0_reg22;
29803 prev_reg23 = win0_reg23;
29804 prev_reg24 = win0_reg24;
29805 prev_reg25 = win0_reg25;
29806 prev_reg26 = win0_reg26;
29807 prev_reg27 = win0_reg27;
29808 prev_reg28 = win0_reg28;
29809 prev_reg29 = win0_reg29;
29810 prev_reg30 = win0_reg30;
29811 prev_reg31 = win0_reg31;
29812 end // }
29813
29814 1: begin // {
29815 prev_reg8 = win1_reg8;
29816 prev_reg9 = win1_reg9;
29817 prev_reg10 = win1_reg10;
29818 prev_reg11 = win1_reg11;
29819 prev_reg12 = win1_reg12;
29820 prev_reg13 = win1_reg13;
29821 prev_reg14 = win1_reg14;
29822 prev_reg15 = win1_reg15;
29823 prev_reg16 = win1_reg16;
29824 prev_reg17 = win1_reg17;
29825 prev_reg18 = win1_reg18;
29826 prev_reg19 = win1_reg19;
29827 prev_reg20 = win1_reg20;
29828 prev_reg21 = win1_reg21;
29829 prev_reg22 = win1_reg22;
29830 prev_reg23 = win1_reg23;
29831 prev_reg24 = win1_reg24;
29832 prev_reg25 = win1_reg25;
29833 prev_reg26 = win1_reg26;
29834 prev_reg27 = win1_reg27;
29835 prev_reg28 = win1_reg28;
29836 prev_reg29 = win1_reg29;
29837 prev_reg30 = win1_reg30;
29838 prev_reg31 = win1_reg31;
29839 end // }
29840
29841 2: begin // {
29842 prev_reg8 = win2_reg8;
29843 prev_reg9 = win2_reg9;
29844 prev_reg10 = win2_reg10;
29845 prev_reg11 = win2_reg11;
29846 prev_reg12 = win2_reg12;
29847 prev_reg13 = win2_reg13;
29848 prev_reg14 = win2_reg14;
29849 prev_reg15 = win2_reg15;
29850 prev_reg16 = win2_reg16;
29851 prev_reg17 = win2_reg17;
29852 prev_reg18 = win2_reg18;
29853 prev_reg19 = win2_reg19;
29854 prev_reg20 = win2_reg20;
29855 prev_reg21 = win2_reg21;
29856 prev_reg22 = win2_reg22;
29857 prev_reg23 = win2_reg23;
29858 prev_reg24 = win2_reg24;
29859 prev_reg25 = win2_reg25;
29860 prev_reg26 = win2_reg26;
29861 prev_reg27 = win2_reg27;
29862 prev_reg28 = win2_reg28;
29863 prev_reg29 = win2_reg29;
29864 prev_reg30 = win2_reg30;
29865 prev_reg31 = win2_reg31;
29866 end // }
29867
29868 3: begin // {
29869 prev_reg8 = win3_reg8;
29870 prev_reg9 = win3_reg9;
29871 prev_reg10 = win3_reg10;
29872 prev_reg11 = win3_reg11;
29873 prev_reg12 = win3_reg12;
29874 prev_reg13 = win3_reg13;
29875 prev_reg14 = win3_reg14;
29876 prev_reg15 = win3_reg15;
29877 prev_reg16 = win3_reg16;
29878 prev_reg17 = win3_reg17;
29879 prev_reg18 = win3_reg18;
29880 prev_reg19 = win3_reg19;
29881 prev_reg20 = win3_reg20;
29882 prev_reg21 = win3_reg21;
29883 prev_reg22 = win3_reg22;
29884 prev_reg23 = win3_reg23;
29885 prev_reg24 = win3_reg24;
29886 prev_reg25 = win3_reg25;
29887 prev_reg26 = win3_reg26;
29888 prev_reg27 = win3_reg27;
29889 prev_reg28 = win3_reg28;
29890 prev_reg29 = win3_reg29;
29891 prev_reg30 = win3_reg30;
29892 prev_reg31 = win3_reg31;
29893 end // }
29894
29895 4: begin // {
29896 prev_reg8 = win4_reg8;
29897 prev_reg9 = win4_reg9;
29898 prev_reg10 = win4_reg10;
29899 prev_reg11 = win4_reg11;
29900 prev_reg12 = win4_reg12;
29901 prev_reg13 = win4_reg13;
29902 prev_reg14 = win4_reg14;
29903 prev_reg15 = win4_reg15;
29904 prev_reg16 = win4_reg16;
29905 prev_reg17 = win4_reg17;
29906 prev_reg18 = win4_reg18;
29907 prev_reg19 = win4_reg19;
29908 prev_reg20 = win4_reg20;
29909 prev_reg21 = win4_reg21;
29910 prev_reg22 = win4_reg22;
29911 prev_reg23 = win4_reg23;
29912 prev_reg24 = win4_reg24;
29913 prev_reg25 = win4_reg25;
29914 prev_reg26 = win4_reg26;
29915 prev_reg27 = win4_reg27;
29916 prev_reg28 = win4_reg28;
29917 prev_reg29 = win4_reg29;
29918 prev_reg30 = win4_reg30;
29919 prev_reg31 = win4_reg31;
29920 end // }
29921
29922 5: begin // {
29923 prev_reg8 = win5_reg8;
29924 prev_reg9 = win5_reg9;
29925 prev_reg10 = win5_reg10;
29926 prev_reg11 = win5_reg11;
29927 prev_reg12 = win5_reg12;
29928 prev_reg13 = win5_reg13;
29929 prev_reg14 = win5_reg14;
29930 prev_reg15 = win5_reg15;
29931 prev_reg16 = win5_reg16;
29932 prev_reg17 = win5_reg17;
29933 prev_reg18 = win5_reg18;
29934 prev_reg19 = win5_reg19;
29935 prev_reg20 = win5_reg20;
29936 prev_reg21 = win5_reg21;
29937 prev_reg22 = win5_reg22;
29938 prev_reg23 = win5_reg23;
29939 prev_reg24 = win5_reg24;
29940 prev_reg25 = win5_reg25;
29941 prev_reg26 = win5_reg26;
29942 prev_reg27 = win5_reg27;
29943 prev_reg28 = win5_reg28;
29944 prev_reg29 = win5_reg29;
29945 prev_reg30 = win5_reg30;
29946 prev_reg31 = win5_reg31;
29947 end // }
29948
29949 6: begin // {
29950 prev_reg8 = win6_reg8;
29951 prev_reg9 = win6_reg9;
29952 prev_reg10 = win6_reg10;
29953 prev_reg11 = win6_reg11;
29954 prev_reg12 = win6_reg12;
29955 prev_reg13 = win6_reg13;
29956 prev_reg14 = win6_reg14;
29957 prev_reg15 = win6_reg15;
29958 prev_reg16 = win6_reg16;
29959 prev_reg17 = win6_reg17;
29960 prev_reg18 = win6_reg18;
29961 prev_reg19 = win6_reg19;
29962 prev_reg20 = win6_reg20;
29963 prev_reg21 = win6_reg21;
29964 prev_reg22 = win6_reg22;
29965 prev_reg23 = win6_reg23;
29966 prev_reg24 = win6_reg24;
29967 prev_reg25 = win6_reg25;
29968 prev_reg26 = win6_reg26;
29969 prev_reg27 = win6_reg27;
29970 prev_reg28 = win6_reg28;
29971 prev_reg29 = win6_reg29;
29972 prev_reg30 = win6_reg30;
29973 prev_reg31 = win6_reg31;
29974 end // }
29975
29976 7: begin // {
29977 prev_reg8 = win7_reg8;
29978 prev_reg9 = win7_reg9;
29979 prev_reg10 = win7_reg10;
29980 prev_reg11 = win7_reg11;
29981 prev_reg12 = win7_reg12;
29982 prev_reg13 = win7_reg13;
29983 prev_reg14 = win7_reg14;
29984 prev_reg15 = win7_reg15;
29985 prev_reg16 = win7_reg16;
29986 prev_reg17 = win7_reg17;
29987 prev_reg18 = win7_reg18;
29988 prev_reg19 = win7_reg19;
29989 prev_reg20 = win7_reg20;
29990 prev_reg21 = win7_reg21;
29991 prev_reg22 = win7_reg22;
29992 prev_reg23 = win7_reg23;
29993 prev_reg24 = win7_reg24;
29994 prev_reg25 = win7_reg25;
29995 prev_reg26 = win7_reg26;
29996 prev_reg27 = win7_reg27;
29997 prev_reg28 = win7_reg28;
29998 prev_reg29 = win7_reg29;
29999 prev_reg30 = win7_reg30;
30000 prev_reg31 = win7_reg31;
30001 end // }
30002
30003 endcase
30004 end // }
30005endtask
30006
30007//----------------------------------------------------------
30008// Save current global to previous global, then copy new global to current global
30009task copy_global;
30010 input [2:0] new_gl;
30011 input [2:0] old_gl;
30012 integer i;
30013
30014 begin // {
30015
30016 // Save current global to Old global
30017 case (old_gl)
30018 0: begin // {
30019 gl0_reg0 = prev_reg0;
30020 gl0_reg1 = prev_reg1;
30021 gl0_reg2 = prev_reg2;
30022 gl0_reg3 = prev_reg3;
30023 gl0_reg4 = prev_reg4;
30024 gl0_reg5 = prev_reg5;
30025 gl0_reg6 = prev_reg6;
30026 gl0_reg7 = prev_reg7;
30027 end // }
30028 1: begin // {
30029 gl1_reg0 = prev_reg0;
30030 gl1_reg1 = prev_reg1;
30031 gl1_reg2 = prev_reg2;
30032 gl1_reg3 = prev_reg3;
30033 gl1_reg4 = prev_reg4;
30034 gl1_reg5 = prev_reg5;
30035 gl1_reg6 = prev_reg6;
30036 gl1_reg7 = prev_reg7;
30037 end // }
30038 2: begin // {
30039 gl2_reg0 = prev_reg0;
30040 gl2_reg1 = prev_reg1;
30041 gl2_reg2 = prev_reg2;
30042 gl2_reg3 = prev_reg3;
30043 gl2_reg4 = prev_reg4;
30044 gl2_reg5 = prev_reg5;
30045 gl2_reg6 = prev_reg6;
30046 gl2_reg7 = prev_reg7;
30047 end // }
30048 3: begin // {
30049 gl3_reg0 = prev_reg0;
30050 gl3_reg1 = prev_reg1;
30051 gl3_reg2 = prev_reg2;
30052 gl3_reg3 = prev_reg3;
30053 gl3_reg4 = prev_reg4;
30054 gl3_reg5 = prev_reg5;
30055 gl3_reg6 = prev_reg6;
30056 gl3_reg7 = prev_reg7;
30057 end // }
30058 endcase
30059
30060 // Copy New global current global
30061 case (new_gl)
30062 0: begin // {
30063 prev_reg0 = gl0_reg0;
30064 prev_reg1 = gl0_reg1;
30065 prev_reg2 = gl0_reg2;
30066 prev_reg3 = gl0_reg3;
30067 prev_reg4 = gl0_reg4;
30068 prev_reg5 = gl0_reg5;
30069 prev_reg6 = gl0_reg6;
30070 prev_reg7 = gl0_reg7;
30071 end // }
30072
30073 1: begin // {
30074 prev_reg0 = gl1_reg0;
30075 prev_reg1 = gl1_reg1;
30076 prev_reg2 = gl1_reg2;
30077 prev_reg3 = gl1_reg3;
30078 prev_reg4 = gl1_reg4;
30079 prev_reg5 = gl1_reg5;
30080 prev_reg6 = gl1_reg6;
30081 prev_reg7 = gl1_reg7;
30082 end // }
30083
30084 2: begin // {
30085 prev_reg0 = gl2_reg0;
30086 prev_reg1 = gl2_reg1;
30087 prev_reg2 = gl2_reg2;
30088 prev_reg3 = gl2_reg3;
30089 prev_reg4 = gl2_reg4;
30090 prev_reg5 = gl2_reg5;
30091 prev_reg6 = gl2_reg6;
30092 prev_reg7 = gl2_reg7;
30093 end // }
30094
30095 3: begin // {
30096 prev_reg0 = gl3_reg0;
30097 prev_reg1 = gl3_reg1;
30098 prev_reg2 = gl3_reg2;
30099 prev_reg3 = gl3_reg3;
30100 prev_reg4 = gl3_reg4;
30101 prev_reg5 = gl3_reg5;
30102 prev_reg6 = gl3_reg6;
30103 prev_reg7 = gl3_reg7;
30104 end // }
30105
30106 endcase
30107 end // }
30108endtask
30109
30110//----------------------------------------------------------
30111// Return window number and register type based on cwp and regnum as input
30112task calc_cwp;
30113 input [2:0] cwp;
30114 input [7:0] id;
30115 output [2:0] win;
30116 output [1:0] type;
30117
30118 begin // {
30119 if (id<=7) begin // {
30120 type = `G_TYPE;
30121 win = cwp;
30122 end // }
30123 else if (id<=23) begin // {
30124 type = `W_TYPE;
30125 win = cwp;
30126 end // }
30127 else if (id<=31) begin // {
30128 type = `W_TYPE;
30129 if (cwp == 0) begin // {
30130 win = 7;
30131 end // }
30132 else begin // {
30133 win = cwp-1;
30134 end // }
30135 end // }
30136 else if (id<=(64+`FP_OFFSET)) begin // {
30137 type = `F_TYPE;
30138 win = cwp;
30139 end // }
30140 else begin // {
30141 type = `C_TYPE;
30142 win = cwp;
30143 end // }
30144 end // }
30145endtask
30146
30147//----------------------------------------------------------
30148// Check for bad signal values
30149task check_values;
30150
30151 begin // {
30152
30153 //--------------------
30154 casex (complete_fw2)
30155 8'b00000000,
30156 8'b00000001,
30157 8'b00000010,
30158 8'b00000100,
30159 8'b00001000,
30160 8'b00010000,
30161 8'b00100000,
30162 8'b01000000,
30163 8'b10000000: ; // good value
30164 default: begin // {
30165 `PR_ERROR ("nas", `ERROR, " - T%0d More than one instruction retired in a single cycle for this thread.",
30166 mytnum);
30167 $write("\t\t\t\t Instructions - ");
30168 if (complete_fw2[`EXU_INDEX]) $write("EXU op, ");
30169 if (complete_fw2[`FP_INDEX]) $write("FP op, ");
30170 if (complete_fw2[`LSU_INDEX]) $write("LSU op, ");
30171 if (complete_fw2[`IMUL_INDEX]) $write("IMUL op, ");
30172 if (complete_fw2[`IDIV_INDEX]) $write("IDIV op, ");
30173 if (complete_fw2[`FDIV_INDEX]) $write("FDIV op, ");
30174 if (complete_fw2[`TLU_INDEX]) $write("TLU op, ");
30175 if (complete_fw2[`ASI_INDEX]) $write("ASI op, ");
30176 $write(" complete_fw2 = %b \n",complete_fw2);
30177 $display("");
30178 end // }
30179 endcase
30180
30181 // This check only works if diags are written properly.
30182 // For example, if a diag writes to one of these registers using wrpr,
30183 // then this check must be disabled using plusarg.
30184 //--------------------
30185 // CANSAVE + CANRESTORE + OTHERWIN = NWINDOWS-2 (per Sparc V9)
30186 if (`PARGS.win_check_on) begin // {
30187 if (complete_fw2 & ((CANSAVE_reg + CANRESTORE_reg + OTHERWIN_reg) != 6)) begin // {
30188 `PR_ERROR ("nas", `ERROR, "ERROR - T%0d Bad Values for window registers.", mytnum);
30189 `PR_ERROR ("nas", `ERROR, "- CANSAVE = %0d CANRESTORE = %0d OTHERWIN = %0d",
30190 CANSAVE_reg, CANRESTORE_reg,OTHERWIN_reg);
30191 end // }
30192 end // }
30193
30194 end // }
30195endtask
30196
30197//----------------------------------------------------------
30198//----------------------------------------------------------
30199`ifndef EMUL_TL
30200task sort_delta;
30201 reg [5:0] i, j, last;
30202 reg [`DELTA_WIDTH:0] temp1, temp2;
30203 begin // {
30204 last = delta_prev[`NEXT_INDEX]-1;
30205 for (i=`FIRST_INDEX; i <= last; i=i+1) begin // {
30206 for (j=`FIRST_INDEX; j < last; j=j+1) begin // {
30207 temp1 = delta_prev[j]; temp2 = delta_prev[j+1];
30208 if (temp1[76:64] > temp2[76:64]) begin // {
30209 delta_prev[j] = temp2; delta_prev [j+1] = temp1;
30210 end //}
30211 end // }
30212 end // }
30213 end // }
30214endtask
30215`endif
30216
30217//----------------------------------------------------------
30218//----------------------------------------------------------
30219// Print one entry in delta_* array
30220`ifndef EMUL_TL
30221task print_entry;
30222
30223 input [`DELTA_WIDTH:0] delta_entry;
30224
30225 reg [1:0] type;
30226 reg [2:0] win;
30227 reg [7:0] id;
30228 reg [63:0] act_value;
30229 reg [(20*8)-1:0] type_str;
30230 reg [(20*8)-1:0] regname;
30231
30232 begin // {
30233 {type,win,id,act_value} = delta_entry;
30234
30235 case (type)
30236 `G_TYPE: begin
30237 type_str="G";
30238 end
30239 `W_TYPE: begin
30240 type_str="W";
30241 end
30242 `F_TYPE: begin
30243 type_str="F";
30244 id = id - `FP_OFFSET;
30245 end
30246 `C_TYPE: begin
30247 type_str="C";
30248 id = id - `CTL_OFFSET;
30249 end
30250 endcase
30251
30252 `NASTOP.get_regname(mytnum,type_str,win,id,regname);
30253 `PR_NORMAL ("nas", `NORMAL, "type=%0s win=%0d RegID=%0d %0s=%h",
30254 type_str,win,id,regname,act_value);
30255 end //}
30256
30257endtask
30258`endif
30259
30260//----------------------------------------------------------
30261// Write Value to prev_reg using id as index (non-blocking)
30262task write_prev;
30263 input [7:0] id;
30264 input [63:0] value;
30265
30266 begin // {
30267
30268 case (id)
30269 8'd0: prev_reg0 <= value;
30270 8'd1: prev_reg1 <= value;
30271 8'd2: prev_reg2 <= value;
30272 8'd3: prev_reg3 <= value;
30273 8'd4: prev_reg4 <= value;
30274 8'd5: prev_reg5 <= value;
30275 8'd6: prev_reg6 <= value;
30276 8'd7: prev_reg7 <= value;
30277 8'd8: prev_reg8 <= value;
30278 8'd9: prev_reg9 <= value;
30279 8'd10: prev_reg10 <= value;
30280 8'd11: prev_reg11 <= value;
30281 8'd12: prev_reg12 <= value;
30282 8'd13: prev_reg13 <= value;
30283 8'd14: prev_reg14 <= value;
30284 8'd15: prev_reg15 <= value;
30285 8'd16: prev_reg16 <= value;
30286 8'd17: prev_reg17 <= value;
30287 8'd18: prev_reg18 <= value;
30288 8'd19: prev_reg19 <= value;
30289 8'd20: prev_reg20 <= value;
30290 8'd21: prev_reg21 <= value;
30291 8'd22: prev_reg22 <= value;
30292 8'd23: prev_reg23 <= value;
30293 8'd24: prev_reg24 <= value;
30294 8'd25: prev_reg25 <= value;
30295 8'd26: prev_reg26 <= value;
30296 8'd27: prev_reg27 <= value;
30297 8'd28: prev_reg28 <= value;
30298 8'd29: prev_reg29 <= value;
30299 8'd30: prev_reg30 <= value;
30300 8'd31: prev_reg31 <= value;
30301 8'd32: prev_reg32 <= value;
30302 8'd33: prev_reg33 <= value;
30303 8'd34: prev_reg34 <= value;
30304 8'd35: prev_reg35 <= value;
30305 8'd36: prev_reg36 <= value;
30306 8'd37: prev_reg37 <= value;
30307 8'd38: prev_reg38 <= value;
30308 8'd39: prev_reg39 <= value;
30309 8'd40: prev_reg40 <= value;
30310 8'd41: prev_reg41 <= value;
30311 8'd42: prev_reg42 <= value;
30312 8'd43: prev_reg43 <= value;
30313 8'd44: prev_reg44 <= value;
30314 8'd45: prev_reg45 <= value;
30315 8'd46: prev_reg46 <= value;
30316 8'd47: prev_reg47 <= value;
30317 8'd48: prev_reg48 <= value;
30318 8'd49: prev_reg49 <= value;
30319 8'd50: prev_reg50 <= value;
30320 8'd51: prev_reg51 <= value;
30321 8'd52: prev_reg52 <= value;
30322 8'd53: prev_reg53 <= value;
30323 8'd54: prev_reg54 <= value;
30324 8'd55: prev_reg55 <= value;
30325 8'd56: prev_reg56 <= value;
30326 8'd57: prev_reg57 <= value;
30327 8'd58: prev_reg58 <= value;
30328 8'd59: prev_reg59 <= value;
30329 8'd60: prev_reg60 <= value;
30330 8'd61: prev_reg61 <= value;
30331 8'd62: prev_reg62 <= value;
30332 8'd63: prev_reg63 <= value;
30333 8'd64: prev_reg64 <= value;
30334 8'd65: prev_reg65 <= value;
30335 8'd66: prev_reg66 <= value;
30336 8'd67: prev_reg67 <= value;
30337 8'd68: prev_reg68 <= value;
30338 8'd69: prev_reg69 <= value;
30339 8'd70: prev_reg70 <= value;
30340 8'd71: prev_reg71 <= value;
30341 8'd72: prev_reg72 <= value;
30342 8'd73: prev_reg73 <= value;
30343 8'd74: prev_reg74 <= value;
30344 8'd75: prev_reg75 <= value;
30345 8'd76: prev_reg76 <= value;
30346 8'd77: prev_reg77 <= value;
30347 8'd78: prev_reg78 <= value;
30348 8'd79: prev_reg79 <= value;
30349 8'd80: prev_reg80 <= value;
30350 8'd81: prev_reg81 <= value;
30351 8'd82: prev_reg82 <= value;
30352 8'd83: prev_reg83 <= value;
30353 8'd84: prev_reg84 <= value;
30354 8'd85: prev_reg85 <= value;
30355 8'd86: prev_reg86 <= value;
30356 8'd87: prev_reg87 <= value;
30357 8'd88: prev_reg88 <= value;
30358 8'd89: prev_reg89 <= value;
30359 8'd90: prev_reg90 <= value;
30360 8'd91: prev_reg91 <= value;
30361 8'd92: prev_reg92 <= value;
30362 8'd93: prev_reg93 <= value;
30363 8'd94: prev_reg94 <= value;
30364 8'd95: prev_reg95 <= value;
30365 8'd96: prev_reg96 <= value;
30366 8'd97: prev_reg97 <= value;
30367 8'd98: prev_reg98 <= value;
30368 8'd99: prev_reg99 <= value;
30369 8'd100: prev_reg100 <= value;
30370 8'd101: prev_reg101 <= value;
30371 8'd102: prev_reg102 <= value;
30372 8'd103: prev_reg103 <= value;
30373 8'd104: prev_reg104 <= value;
30374 8'd105: prev_reg105 <= value;
30375 8'd106: prev_reg106 <= value;
30376 8'd107: prev_reg107 <= value;
30377 8'd108: prev_reg108 <= value;
30378 8'd109: prev_reg109 <= value;
30379 8'd110: prev_reg110 <= value;
30380 8'd111: prev_reg111 <= value;
30381 8'd112: prev_reg112 <= value;
30382 8'd113: prev_reg113 <= value;
30383 8'd114: prev_reg114 <= value;
30384 8'd115: prev_reg115 <= value;
30385 8'd116: prev_reg116 <= value;
30386 8'd117: prev_reg117 <= value;
30387 8'd118: prev_reg118 <= value;
30388 8'd119: prev_reg119 <= value;
30389 8'd120: prev_reg120 <= value;
30390 8'd121: prev_reg121 <= value;
30391 8'd122: prev_reg122 <= value;
30392 8'd123: prev_reg123 <= value;
30393 8'd124: prev_reg124 <= value;
30394 8'd125: prev_reg125 <= value;
30395 8'd126: prev_reg126 <= value;
30396 8'd127: prev_reg127 <= value;
30397 8'd128: prev_reg128 <= value;
30398 8'd129: prev_reg129 <= value;
30399 8'd130: prev_reg130 <= value;
30400 8'd131: prev_reg131 <= value;
30401 8'd132: prev_reg132 <= value;
30402 8'd133: prev_reg133 <= value;
30403 8'd134: prev_reg134 <= value;
30404 8'd135: prev_reg135 <= value;
30405 8'd136: prev_reg136 <= value;
30406 8'd137: prev_reg137 <= value;
30407 8'd138: prev_reg138 <= value;
30408 8'd139: prev_reg139 <= value;
30409 8'd140: prev_reg140 <= value;
30410 8'd141: prev_reg141 <= value;
30411 8'd142: prev_reg142 <= value;
30412 8'd143: prev_reg143 <= value;
30413 8'd144: prev_reg144 <= value;
30414 8'd145: prev_reg145 <= value;
30415 8'd146: prev_reg146 <= value;
30416 8'd147: prev_reg147 <= value;
30417 8'd148: prev_reg148 <= value;
30418 8'd149: prev_reg149 <= value;
30419 8'd150: prev_reg150 <= value;
30420 8'd151: prev_reg151 <= value;
30421 8'd152: prev_reg152 <= value;
30422 8'd153: prev_reg153 <= value;
30423 8'd154: prev_reg154 <= value;
30424 8'd155: prev_reg155 <= value;
30425 8'd156: prev_reg156 <= value;
30426 8'd157: prev_reg157 <= value;
30427 8'd158: prev_reg158 <= value;
30428 8'd159: prev_reg159 <= value;
30429 8'd160: prev_reg160 <= value;
30430 8'd161: prev_reg161 <= value;
30431 8'd162: prev_reg162 <= value;
30432 8'd163: prev_reg163 <= value;
30433 8'd164: prev_reg164 <= value;
30434 8'd165: prev_reg165 <= value;
30435 8'd166: prev_reg166 <= value;
30436 8'd167: prev_reg167 <= value;
30437 8'd168: prev_reg168 <= value;
30438 8'd169: prev_reg169 <= value;
30439 8'd170: prev_reg170 <= value;
30440 8'd171: prev_reg171 <= value;
30441 8'd172: prev_reg172 <= value;
30442 8'd173: prev_reg173 <= value;
30443 8'd174: prev_reg174 <= value;
30444 8'd175: prev_reg175 <= value;
30445 8'd176: prev_reg176 <= value;
30446 8'd177: prev_reg177 <= value;
30447 8'd178: prev_reg178 <= value;
30448 8'd179: prev_reg179 <= value;
30449 8'd180: prev_reg180 <= value;
30450 8'd181: prev_reg181 <= value;
30451 8'd182: prev_reg182 <= value;
30452 8'd183: prev_reg183 <= value;
30453 8'd184: prev_reg184 <= value;
30454 8'd185: prev_reg185 <= value;
30455 8'd186: prev_reg186 <= value;
30456 8'd187: prev_reg187 <= value;
30457 8'd188: prev_reg188 <= value;
30458 8'd189: prev_reg189 <= value;
30459 8'd190: prev_reg190 <= value;
30460 8'd191: prev_reg191 <= value;
30461 8'd192: prev_reg192 <= value;
30462 8'd193: prev_reg193 <= value;
30463 8'd194: prev_reg194 <= value;
30464 8'd195: prev_reg195 <= value;
30465 8'd196: prev_reg196 <= value;
30466 8'd197: prev_reg197 <= value;
30467 8'd198: prev_reg198 <= value;
30468 8'd199: prev_reg199 <= value;
30469 8'd200: prev_reg200 <= value;
30470 8'd201: prev_reg201 <= value;
30471 8'd202: prev_reg202 <= value;
30472 8'd203: prev_reg203 <= value;
30473 8'd204: prev_reg204 <= value;
30474 8'd205: prev_reg205 <= value;
30475 8'd206: prev_reg206 <= value;
30476 8'd207: prev_reg207 <= value;
30477 8'd208: prev_reg208 <= value;
30478 8'd209: prev_reg209 <= value;
30479 8'd210: prev_reg210 <= value;
30480 8'd211: prev_reg211 <= value;
30481 8'd212: prev_reg212 <= value;
30482 8'd213: prev_reg213 <= value;
30483 8'd214: prev_reg214 <= value;
30484 8'd215: prev_reg215 <= value;
30485 8'd216: prev_reg216 <= value;
30486 8'd217: prev_reg217 <= value;
30487 8'd218: prev_reg218 <= value;
30488 8'd219: prev_reg219 <= value;
30489 8'd220: prev_reg220 <= value;
30490 8'd221: prev_reg221 <= value;
30491 8'd222: prev_reg222 <= value;
30492 8'd223: prev_reg223 <= value;
30493 8'd224: prev_reg224 <= value;
30494 8'd225: prev_reg225 <= value;
30495 8'd226: prev_reg226 <= value;
30496 8'd227: prev_reg227 <= value;
30497 8'd228: prev_reg228 <= value;
30498 8'd229: prev_reg229 <= value;
30499 8'd230: prev_reg230 <= value;
30500 8'd231: prev_reg231 <= value;
30501 8'd232: prev_reg232 <= value;
30502 8'd233: prev_reg233 <= value;
30503 8'd234: prev_reg234 <= value;
30504 8'd235: prev_reg235 <= value;
30505 8'd236: prev_reg236 <= value;
30506 8'd237: prev_reg237 <= value;
30507 8'd238: prev_reg238 <= value;
30508 8'd239: prev_reg239 <= value;
30509 8'd240: prev_reg240 <= value;
30510 8'd241: prev_reg241 <= value;
30511 8'd242: prev_reg242 <= value;
30512 8'd243: prev_reg243 <= value;
30513 8'd244: prev_reg244 <= value;
30514 8'd245: prev_reg245 <= value;
30515 8'd246: prev_reg246 <= value;
30516 8'd247: prev_reg247 <= value;
30517 8'd248: prev_reg248 <= value;
30518 8'd249: prev_reg249 <= value;
30519 8'd250: prev_reg250 <= value;
30520 8'd251: prev_reg251 <= value;
30521 8'd252: prev_reg252 <= value;
30522 8'd253: prev_reg253 <= value;
30523 8'd254: prev_reg254 <= value;
30524 8'd255: prev_reg255 <= value;
30525 endcase
30526
30527 end //}
30528
30529endtask
30530
30531//----------------------------------------------------------
30532// Write Value to prev_reg using id as index (blocking)
30533task write_prev_async;
30534 input [7:0] id;
30535 input [63:0] value;
30536
30537 begin // {
30538
30539 case (id)
30540 8'd0: prev_reg0 = value;
30541 8'd1: prev_reg1 = value;
30542 8'd2: prev_reg2 = value;
30543 8'd3: prev_reg3 = value;
30544 8'd4: prev_reg4 = value;
30545 8'd5: prev_reg5 = value;
30546 8'd6: prev_reg6 = value;
30547 8'd7: prev_reg7 = value;
30548 8'd8: prev_reg8 = value;
30549 8'd9: prev_reg9 = value;
30550 8'd10: prev_reg10 = value;
30551 8'd11: prev_reg11 = value;
30552 8'd12: prev_reg12 = value;
30553 8'd13: prev_reg13 = value;
30554 8'd14: prev_reg14 = value;
30555 8'd15: prev_reg15 = value;
30556 8'd16: prev_reg16 = value;
30557 8'd17: prev_reg17 = value;
30558 8'd18: prev_reg18 = value;
30559 8'd19: prev_reg19 = value;
30560 8'd20: prev_reg20 = value;
30561 8'd21: prev_reg21 = value;
30562 8'd22: prev_reg22 = value;
30563 8'd23: prev_reg23 = value;
30564 8'd24: prev_reg24 = value;
30565 8'd25: prev_reg25 = value;
30566 8'd26: prev_reg26 = value;
30567 8'd27: prev_reg27 = value;
30568 8'd28: prev_reg28 = value;
30569 8'd29: prev_reg29 = value;
30570 8'd30: prev_reg30 = value;
30571 8'd31: prev_reg31 = value;
30572 8'd32: prev_reg32 = value;
30573 8'd33: prev_reg33 = value;
30574 8'd34: prev_reg34 = value;
30575 8'd35: prev_reg35 = value;
30576 8'd36: prev_reg36 = value;
30577 8'd37: prev_reg37 = value;
30578 8'd38: prev_reg38 = value;
30579 8'd39: prev_reg39 = value;
30580 8'd40: prev_reg40 = value;
30581 8'd41: prev_reg41 = value;
30582 8'd42: prev_reg42 = value;
30583 8'd43: prev_reg43 = value;
30584 8'd44: prev_reg44 = value;
30585 8'd45: prev_reg45 = value;
30586 8'd46: prev_reg46 = value;
30587 8'd47: prev_reg47 = value;
30588 8'd48: prev_reg48 = value;
30589 8'd49: prev_reg49 = value;
30590 8'd50: prev_reg50 = value;
30591 8'd51: prev_reg51 = value;
30592 8'd52: prev_reg52 = value;
30593 8'd53: prev_reg53 = value;
30594 8'd54: prev_reg54 = value;
30595 8'd55: prev_reg55 = value;
30596 8'd56: prev_reg56 = value;
30597 8'd57: prev_reg57 = value;
30598 8'd58: prev_reg58 = value;
30599 8'd59: prev_reg59 = value;
30600 8'd60: prev_reg60 = value;
30601 8'd61: prev_reg61 = value;
30602 8'd62: prev_reg62 = value;
30603 8'd63: prev_reg63 = value;
30604 8'd64: prev_reg64 = value;
30605 8'd65: prev_reg65 = value;
30606 8'd66: prev_reg66 = value;
30607 8'd67: prev_reg67 = value;
30608 8'd68: prev_reg68 = value;
30609 8'd69: prev_reg69 = value;
30610 8'd70: prev_reg70 = value;
30611 8'd71: prev_reg71 = value;
30612 8'd72: prev_reg72 = value;
30613 8'd73: prev_reg73 = value;
30614 8'd74: prev_reg74 = value;
30615 8'd75: prev_reg75 = value;
30616 8'd76: prev_reg76 = value;
30617 8'd77: prev_reg77 = value;
30618 8'd78: prev_reg78 = value;
30619 8'd79: prev_reg79 = value;
30620 8'd80: prev_reg80 = value;
30621 8'd81: prev_reg81 = value;
30622 8'd82: prev_reg82 = value;
30623 8'd83: prev_reg83 = value;
30624 8'd84: prev_reg84 = value;
30625 8'd85: prev_reg85 = value;
30626 8'd86: prev_reg86 = value;
30627 8'd87: prev_reg87 = value;
30628 8'd88: prev_reg88 = value;
30629 8'd89: prev_reg89 = value;
30630 8'd90: prev_reg90 = value;
30631 8'd91: prev_reg91 = value;
30632 8'd92: prev_reg92 = value;
30633 8'd93: prev_reg93 = value;
30634 8'd94: prev_reg94 = value;
30635 8'd95: prev_reg95 = value;
30636 8'd96: prev_reg96 = value;
30637 8'd97: prev_reg97 = value;
30638 8'd98: prev_reg98 = value;
30639 8'd99: prev_reg99 = value;
30640 8'd100: prev_reg100 = value;
30641 8'd101: prev_reg101 = value;
30642 8'd102: prev_reg102 = value;
30643 8'd103: prev_reg103 = value;
30644 8'd104: prev_reg104 = value;
30645 8'd105: prev_reg105 = value;
30646 8'd106: prev_reg106 = value;
30647 8'd107: prev_reg107 = value;
30648 8'd108: prev_reg108 = value;
30649 8'd109: prev_reg109 = value;
30650 8'd110: prev_reg110 = value;
30651 8'd111: prev_reg111 = value;
30652 8'd112: prev_reg112 = value;
30653 8'd113: prev_reg113 = value;
30654 8'd114: prev_reg114 = value;
30655 8'd115: prev_reg115 = value;
30656 8'd116: prev_reg116 = value;
30657 8'd117: prev_reg117 = value;
30658 8'd118: prev_reg118 = value;
30659 8'd119: prev_reg119 = value;
30660 8'd120: prev_reg120 = value;
30661 8'd121: prev_reg121 = value;
30662 8'd122: prev_reg122 = value;
30663 8'd123: prev_reg123 = value;
30664 8'd124: prev_reg124 = value;
30665 8'd125: prev_reg125 = value;
30666 8'd126: prev_reg126 = value;
30667 8'd127: prev_reg127 = value;
30668 8'd128: prev_reg128 = value;
30669 8'd129: prev_reg129 = value;
30670 8'd130: prev_reg130 = value;
30671 8'd131: prev_reg131 = value;
30672 8'd132: prev_reg132 = value;
30673 8'd133: prev_reg133 = value;
30674 8'd134: prev_reg134 = value;
30675 8'd135: prev_reg135 = value;
30676 8'd136: prev_reg136 = value;
30677 8'd137: prev_reg137 = value;
30678 8'd138: prev_reg138 = value;
30679 8'd139: prev_reg139 = value;
30680 8'd140: prev_reg140 = value;
30681 8'd141: prev_reg141 = value;
30682 8'd142: prev_reg142 = value;
30683 8'd143: prev_reg143 = value;
30684 8'd144: prev_reg144 = value;
30685 8'd145: prev_reg145 = value;
30686 8'd146: prev_reg146 = value;
30687 8'd147: prev_reg147 = value;
30688 8'd148: prev_reg148 = value;
30689 8'd149: prev_reg149 = value;
30690 8'd150: prev_reg150 = value;
30691 8'd151: prev_reg151 = value;
30692 8'd152: prev_reg152 = value;
30693 8'd153: prev_reg153 = value;
30694 8'd154: prev_reg154 = value;
30695 8'd155: prev_reg155 = value;
30696 8'd156: prev_reg156 = value;
30697 8'd157: prev_reg157 = value;
30698 8'd158: prev_reg158 = value;
30699 8'd159: prev_reg159 = value;
30700 8'd160: prev_reg160 = value;
30701 8'd161: prev_reg161 = value;
30702 8'd162: prev_reg162 = value;
30703 8'd163: prev_reg163 = value;
30704 8'd164: prev_reg164 = value;
30705 8'd165: prev_reg165 = value;
30706 8'd166: prev_reg166 = value;
30707 8'd167: prev_reg167 = value;
30708 8'd168: prev_reg168 = value;
30709 8'd169: prev_reg169 = value;
30710 8'd170: prev_reg170 = value;
30711 8'd171: prev_reg171 = value;
30712 8'd172: prev_reg172 = value;
30713 8'd173: prev_reg173 = value;
30714 8'd174: prev_reg174 = value;
30715 8'd175: prev_reg175 = value;
30716 8'd176: prev_reg176 = value;
30717 8'd177: prev_reg177 = value;
30718 8'd178: prev_reg178 = value;
30719 8'd179: prev_reg179 = value;
30720 8'd180: prev_reg180 = value;
30721 8'd181: prev_reg181 = value;
30722 8'd182: prev_reg182 = value;
30723 8'd183: prev_reg183 = value;
30724 8'd184: prev_reg184 = value;
30725 8'd185: prev_reg185 = value;
30726 8'd186: prev_reg186 = value;
30727 8'd187: prev_reg187 = value;
30728 8'd188: prev_reg188 = value;
30729 8'd189: prev_reg189 = value;
30730 8'd190: prev_reg190 = value;
30731 8'd191: prev_reg191 = value;
30732 8'd192: prev_reg192 = value;
30733 8'd193: prev_reg193 = value;
30734 8'd194: prev_reg194 = value;
30735 8'd195: prev_reg195 = value;
30736 8'd196: prev_reg196 = value;
30737 8'd197: prev_reg197 = value;
30738 8'd198: prev_reg198 = value;
30739 8'd199: prev_reg199 = value;
30740 8'd200: prev_reg200 = value;
30741 8'd201: prev_reg201 = value;
30742 8'd202: prev_reg202 = value;
30743 8'd203: prev_reg203 = value;
30744 8'd204: prev_reg204 = value;
30745 8'd205: prev_reg205 = value;
30746 8'd206: prev_reg206 = value;
30747 8'd207: prev_reg207 = value;
30748 8'd208: prev_reg208 = value;
30749 8'd209: prev_reg209 = value;
30750 8'd210: prev_reg210 = value;
30751 8'd211: prev_reg211 = value;
30752 8'd212: prev_reg212 = value;
30753 8'd213: prev_reg213 = value;
30754 8'd214: prev_reg214 = value;
30755 8'd215: prev_reg215 = value;
30756 8'd216: prev_reg216 = value;
30757 8'd217: prev_reg217 = value;
30758 8'd218: prev_reg218 = value;
30759 8'd219: prev_reg219 = value;
30760 8'd220: prev_reg220 = value;
30761 8'd221: prev_reg221 = value;
30762 8'd222: prev_reg222 = value;
30763 8'd223: prev_reg223 = value;
30764 8'd224: prev_reg224 = value;
30765 8'd225: prev_reg225 = value;
30766 8'd226: prev_reg226 = value;
30767 8'd227: prev_reg227 = value;
30768 8'd228: prev_reg228 = value;
30769 8'd229: prev_reg229 = value;
30770 8'd230: prev_reg230 = value;
30771 8'd231: prev_reg231 = value;
30772 8'd232: prev_reg232 = value;
30773 8'd233: prev_reg233 = value;
30774 8'd234: prev_reg234 = value;
30775 8'd235: prev_reg235 = value;
30776 8'd236: prev_reg236 = value;
30777 8'd237: prev_reg237 = value;
30778 8'd238: prev_reg238 = value;
30779 8'd239: prev_reg239 = value;
30780 8'd240: prev_reg240 = value;
30781 8'd241: prev_reg241 = value;
30782 8'd242: prev_reg242 = value;
30783 8'd243: prev_reg243 = value;
30784 8'd244: prev_reg244 = value;
30785 8'd245: prev_reg245 = value;
30786 8'd246: prev_reg246 = value;
30787 8'd247: prev_reg247 = value;
30788 8'd248: prev_reg248 = value;
30789 8'd249: prev_reg249 = value;
30790 8'd250: prev_reg250 = value;
30791 8'd251: prev_reg251 = value;
30792 8'd252: prev_reg252 = value;
30793 8'd253: prev_reg253 = value;
30794 8'd254: prev_reg254 = value;
30795 8'd255: prev_reg255 = value;
30796 endcase
30797
30798 end //}
30799
30800endtask
30801
30802//----------------------------------------------------------
30803// Read value frpm prev_reg using id as index
30804function [63:0] read_prev;
30805 input [7:0] id;
30806
30807 begin // {
30808
30809 case (id)
30810 8'd0: read_prev = prev_reg0;
30811 8'd1: read_prev = prev_reg1;
30812 8'd2: read_prev = prev_reg2;
30813 8'd3: read_prev = prev_reg3;
30814 8'd4: read_prev = prev_reg4;
30815 8'd5: read_prev = prev_reg5;
30816 8'd6: read_prev = prev_reg6;
30817 8'd7: read_prev = prev_reg7;
30818 8'd8: read_prev = prev_reg8;
30819 8'd9: read_prev = prev_reg9;
30820 8'd10: read_prev = prev_reg10;
30821 8'd11: read_prev = prev_reg11;
30822 8'd12: read_prev = prev_reg12;
30823 8'd13: read_prev = prev_reg13;
30824 8'd14: read_prev = prev_reg14;
30825 8'd15: read_prev = prev_reg15;
30826 8'd16: read_prev = prev_reg16;
30827 8'd17: read_prev = prev_reg17;
30828 8'd18: read_prev = prev_reg18;
30829 8'd19: read_prev = prev_reg19;
30830 8'd20: read_prev = prev_reg20;
30831 8'd21: read_prev = prev_reg21;
30832 8'd22: read_prev = prev_reg22;
30833 8'd23: read_prev = prev_reg23;
30834 8'd24: read_prev = prev_reg24;
30835 8'd25: read_prev = prev_reg25;
30836 8'd26: read_prev = prev_reg26;
30837 8'd27: read_prev = prev_reg27;
30838 8'd28: read_prev = prev_reg28;
30839 8'd29: read_prev = prev_reg29;
30840 8'd30: read_prev = prev_reg30;
30841 8'd31: read_prev = prev_reg31;
30842 8'd32: read_prev = prev_reg32;
30843 8'd33: read_prev = prev_reg33;
30844 8'd34: read_prev = prev_reg34;
30845 8'd35: read_prev = prev_reg35;
30846 8'd36: read_prev = prev_reg36;
30847 8'd37: read_prev = prev_reg37;
30848 8'd38: read_prev = prev_reg38;
30849 8'd39: read_prev = prev_reg39;
30850 8'd40: read_prev = prev_reg40;
30851 8'd41: read_prev = prev_reg41;
30852 8'd42: read_prev = prev_reg42;
30853 8'd43: read_prev = prev_reg43;
30854 8'd44: read_prev = prev_reg44;
30855 8'd45: read_prev = prev_reg45;
30856 8'd46: read_prev = prev_reg46;
30857 8'd47: read_prev = prev_reg47;
30858 8'd48: read_prev = prev_reg48;
30859 8'd49: read_prev = prev_reg49;
30860 8'd50: read_prev = prev_reg50;
30861 8'd51: read_prev = prev_reg51;
30862 8'd52: read_prev = prev_reg52;
30863 8'd53: read_prev = prev_reg53;
30864 8'd54: read_prev = prev_reg54;
30865 8'd55: read_prev = prev_reg55;
30866 8'd56: read_prev = prev_reg56;
30867 8'd57: read_prev = prev_reg57;
30868 8'd58: read_prev = prev_reg58;
30869 8'd59: read_prev = prev_reg59;
30870 8'd60: read_prev = prev_reg60;
30871 8'd61: read_prev = prev_reg61;
30872 8'd62: read_prev = prev_reg62;
30873 8'd63: read_prev = prev_reg63;
30874 8'd64: read_prev = prev_reg64;
30875 8'd65: read_prev = prev_reg65;
30876 8'd66: read_prev = prev_reg66;
30877 8'd67: read_prev = prev_reg67;
30878 8'd68: read_prev = prev_reg68;
30879 8'd69: read_prev = prev_reg69;
30880 8'd70: read_prev = prev_reg70;
30881 8'd71: read_prev = prev_reg71;
30882 8'd72: read_prev = prev_reg72;
30883 8'd73: read_prev = prev_reg73;
30884 8'd74: read_prev = prev_reg74;
30885 8'd75: read_prev = prev_reg75;
30886 8'd76: read_prev = prev_reg76;
30887 8'd77: read_prev = prev_reg77;
30888 8'd78: read_prev = prev_reg78;
30889 8'd79: read_prev = prev_reg79;
30890 8'd80: read_prev = prev_reg80;
30891 8'd81: read_prev = prev_reg81;
30892 8'd82: read_prev = prev_reg82;
30893 8'd83: read_prev = prev_reg83;
30894 8'd84: read_prev = prev_reg84;
30895 8'd85: read_prev = prev_reg85;
30896 8'd86: read_prev = prev_reg86;
30897 8'd87: read_prev = prev_reg87;
30898 8'd88: read_prev = prev_reg88;
30899 8'd89: read_prev = prev_reg89;
30900 8'd90: read_prev = prev_reg90;
30901 8'd91: read_prev = prev_reg91;
30902 8'd92: read_prev = prev_reg92;
30903 8'd93: read_prev = prev_reg93;
30904 8'd94: read_prev = prev_reg94;
30905 8'd95: read_prev = prev_reg95;
30906 8'd96: read_prev = prev_reg96;
30907 8'd97: read_prev = prev_reg97;
30908 8'd98: read_prev = prev_reg98;
30909 8'd99: read_prev = prev_reg99;
30910 8'd100: read_prev = prev_reg100;
30911 8'd101: read_prev = prev_reg101;
30912 8'd102: read_prev = prev_reg102;
30913 8'd103: read_prev = prev_reg103;
30914 8'd104: read_prev = prev_reg104;
30915 8'd105: read_prev = prev_reg105;
30916 8'd106: read_prev = prev_reg106;
30917 8'd107: read_prev = prev_reg107;
30918 8'd108: read_prev = prev_reg108;
30919 8'd109: read_prev = prev_reg109;
30920 8'd110: read_prev = prev_reg110;
30921 8'd111: read_prev = prev_reg111;
30922 8'd112: read_prev = prev_reg112;
30923 8'd113: read_prev = prev_reg113;
30924 8'd114: read_prev = prev_reg114;
30925 8'd115: read_prev = prev_reg115;
30926 8'd116: read_prev = prev_reg116;
30927 8'd117: read_prev = prev_reg117;
30928 8'd118: read_prev = prev_reg118;
30929 8'd119: read_prev = prev_reg119;
30930 8'd120: read_prev = prev_reg120;
30931 8'd121: read_prev = prev_reg121;
30932 8'd122: read_prev = prev_reg122;
30933 8'd123: read_prev = prev_reg123;
30934 8'd124: read_prev = prev_reg124;
30935 8'd125: read_prev = prev_reg125;
30936 8'd126: read_prev = prev_reg126;
30937 8'd127: read_prev = prev_reg127;
30938 8'd128: read_prev = prev_reg128;
30939 8'd129: read_prev = prev_reg129;
30940 8'd130: read_prev = prev_reg130;
30941 8'd131: read_prev = prev_reg131;
30942 8'd132: read_prev = prev_reg132;
30943 8'd133: read_prev = prev_reg133;
30944 8'd134: read_prev = prev_reg134;
30945 8'd135: read_prev = prev_reg135;
30946 8'd136: read_prev = prev_reg136;
30947 8'd137: read_prev = prev_reg137;
30948 8'd138: read_prev = prev_reg138;
30949 8'd139: read_prev = prev_reg139;
30950 8'd140: read_prev = prev_reg140;
30951 8'd141: read_prev = prev_reg141;
30952 8'd142: read_prev = prev_reg142;
30953 8'd143: read_prev = prev_reg143;
30954 8'd144: read_prev = prev_reg144;
30955 8'd145: read_prev = prev_reg145;
30956 8'd146: read_prev = prev_reg146;
30957 8'd147: read_prev = prev_reg147;
30958 8'd148: read_prev = prev_reg148;
30959 8'd149: read_prev = prev_reg149;
30960 8'd150: read_prev = prev_reg150;
30961 8'd151: read_prev = prev_reg151;
30962 8'd152: read_prev = prev_reg152;
30963 8'd153: read_prev = prev_reg153;
30964 8'd154: read_prev = prev_reg154;
30965 8'd155: read_prev = prev_reg155;
30966 8'd156: read_prev = prev_reg156;
30967 8'd157: read_prev = prev_reg157;
30968 8'd158: read_prev = prev_reg158;
30969 8'd159: read_prev = prev_reg159;
30970 8'd160: read_prev = prev_reg160;
30971 8'd161: read_prev = prev_reg161;
30972 8'd162: read_prev = prev_reg162;
30973 8'd163: read_prev = prev_reg163;
30974 8'd164: read_prev = prev_reg164;
30975 8'd165: read_prev = prev_reg165;
30976 8'd166: read_prev = prev_reg166;
30977 8'd167: read_prev = prev_reg167;
30978 8'd168: read_prev = prev_reg168;
30979 8'd169: read_prev = prev_reg169;
30980 8'd170: read_prev = prev_reg170;
30981 8'd171: read_prev = prev_reg171;
30982 8'd172: read_prev = prev_reg172;
30983 8'd173: read_prev = prev_reg173;
30984 8'd174: read_prev = prev_reg174;
30985 8'd175: read_prev = prev_reg175;
30986 8'd176: read_prev = prev_reg176;
30987 8'd177: read_prev = prev_reg177;
30988 8'd178: read_prev = prev_reg178;
30989 8'd179: read_prev = prev_reg179;
30990 8'd180: read_prev = prev_reg180;
30991 8'd181: read_prev = prev_reg181;
30992 8'd182: read_prev = prev_reg182;
30993 8'd183: read_prev = prev_reg183;
30994 8'd184: read_prev = prev_reg184;
30995 8'd185: read_prev = prev_reg185;
30996 8'd186: read_prev = prev_reg186;
30997 8'd187: read_prev = prev_reg187;
30998 8'd188: read_prev = prev_reg188;
30999 8'd189: read_prev = prev_reg189;
31000 8'd190: read_prev = prev_reg190;
31001 8'd191: read_prev = prev_reg191;
31002 8'd192: read_prev = prev_reg192;
31003 8'd193: read_prev = prev_reg193;
31004 8'd194: read_prev = prev_reg194;
31005 8'd195: read_prev = prev_reg195;
31006 8'd196: read_prev = prev_reg196;
31007 8'd197: read_prev = prev_reg197;
31008 8'd198: read_prev = prev_reg198;
31009 8'd199: read_prev = prev_reg199;
31010 8'd200: read_prev = prev_reg200;
31011 8'd201: read_prev = prev_reg201;
31012 8'd202: read_prev = prev_reg202;
31013 8'd203: read_prev = prev_reg203;
31014 8'd204: read_prev = prev_reg204;
31015 8'd205: read_prev = prev_reg205;
31016 8'd206: read_prev = prev_reg206;
31017 8'd207: read_prev = prev_reg207;
31018 8'd208: read_prev = prev_reg208;
31019 8'd209: read_prev = prev_reg209;
31020 8'd210: read_prev = prev_reg210;
31021 8'd211: read_prev = prev_reg211;
31022 8'd212: read_prev = prev_reg212;
31023 8'd213: read_prev = prev_reg213;
31024 8'd214: read_prev = prev_reg214;
31025 8'd215: read_prev = prev_reg215;
31026 8'd216: read_prev = prev_reg216;
31027 8'd217: read_prev = prev_reg217;
31028 8'd218: read_prev = prev_reg218;
31029 8'd219: read_prev = prev_reg219;
31030 8'd220: read_prev = prev_reg220;
31031 8'd221: read_prev = prev_reg221;
31032 8'd222: read_prev = prev_reg222;
31033 8'd223: read_prev = prev_reg223;
31034 8'd224: read_prev = prev_reg224;
31035 8'd225: read_prev = prev_reg225;
31036 8'd226: read_prev = prev_reg226;
31037 8'd227: read_prev = prev_reg227;
31038 8'd228: read_prev = prev_reg228;
31039 8'd229: read_prev = prev_reg229;
31040 8'd230: read_prev = prev_reg230;
31041 8'd231: read_prev = prev_reg231;
31042 8'd232: read_prev = prev_reg232;
31043 8'd233: read_prev = prev_reg233;
31044 8'd234: read_prev = prev_reg234;
31045 8'd235: read_prev = prev_reg235;
31046 8'd236: read_prev = prev_reg236;
31047 8'd237: read_prev = prev_reg237;
31048 8'd238: read_prev = prev_reg238;
31049 8'd239: read_prev = prev_reg239;
31050 8'd240: read_prev = prev_reg240;
31051 8'd241: read_prev = prev_reg241;
31052 8'd242: read_prev = prev_reg242;
31053 8'd243: read_prev = prev_reg243;
31054 8'd244: read_prev = prev_reg244;
31055 8'd245: read_prev = prev_reg245;
31056 8'd246: read_prev = prev_reg246;
31057 8'd247: read_prev = prev_reg247;
31058 8'd248: read_prev = prev_reg248;
31059 8'd249: read_prev = prev_reg249;
31060 8'd250: read_prev = prev_reg250;
31061 8'd251: read_prev = prev_reg251;
31062 8'd252: read_prev = prev_reg252;
31063 8'd253: read_prev = prev_reg253;
31064 8'd254: read_prev = prev_reg254;
31065 8'd255: read_prev = prev_reg255;
31066 endcase
31067
31068 end //}
31069
31070endfunction
31071
31072//----------------------------------------------------------
31073function [4:0] remap;
31074 input [4:0] rd;
31075 input oddwin;
31076
31077 begin
31078
31079 remap[4] = rd[4] ^ (rd[3] & oddwin);
31080 remap[3:0] = rd[3:0];
31081
31082 end
31083endfunction
31084
31085//----------------------------------------------------------
31086// Initialize nas_pipe registers
31087initial begin : INIT_BLOCK
31088 integer i;
31089
31090 nas_pipe_enable = 1'b1; // Nas_pipe always enables itself
31091 good_trap_detected = 1'b0;
31092
31093 @ (posedge `BENCH_SPC5_GCLK);
31094 `TOP.th_last_act_cycle[mytnum] = 0;
31095
31096 // Window registers
31097 win0_reg8 = 0;
31098 win1_reg8 = 0;
31099 win2_reg8 = 0;
31100 win3_reg8 = 0;
31101 win4_reg8 = 0;
31102 win5_reg8 = 0;
31103 win6_reg8 = 0;
31104 win7_reg8 = 0;
31105 win0_reg9 = 0;
31106 win1_reg9 = 0;
31107 win2_reg9 = 0;
31108 win3_reg9 = 0;
31109 win4_reg9 = 0;
31110 win5_reg9 = 0;
31111 win6_reg9 = 0;
31112 win7_reg9 = 0;
31113 win0_reg10 = 0;
31114 win1_reg10 = 0;
31115 win2_reg10 = 0;
31116 win3_reg10 = 0;
31117 win4_reg10 = 0;
31118 win5_reg10 = 0;
31119 win6_reg10 = 0;
31120 win7_reg10 = 0;
31121 win0_reg11 = 0;
31122 win1_reg11 = 0;
31123 win2_reg11 = 0;
31124 win3_reg11 = 0;
31125 win4_reg11 = 0;
31126 win5_reg11 = 0;
31127 win6_reg11 = 0;
31128 win7_reg11 = 0;
31129 win0_reg12 = 0;
31130 win1_reg12 = 0;
31131 win2_reg12 = 0;
31132 win3_reg12 = 0;
31133 win4_reg12 = 0;
31134 win5_reg12 = 0;
31135 win6_reg12 = 0;
31136 win7_reg12 = 0;
31137 win0_reg13 = 0;
31138 win1_reg13 = 0;
31139 win2_reg13 = 0;
31140 win3_reg13 = 0;
31141 win4_reg13 = 0;
31142 win5_reg13 = 0;
31143 win6_reg13 = 0;
31144 win7_reg13 = 0;
31145 win0_reg14 = 0;
31146 win1_reg14 = 0;
31147 win2_reg14 = 0;
31148 win3_reg14 = 0;
31149 win4_reg14 = 0;
31150 win5_reg14 = 0;
31151 win6_reg14 = 0;
31152 win7_reg14 = 0;
31153 win0_reg15 = 0;
31154 win1_reg15 = 0;
31155 win2_reg15 = 0;
31156 win3_reg15 = 0;
31157 win4_reg15 = 0;
31158 win5_reg15 = 0;
31159 win6_reg15 = 0;
31160 win7_reg15 = 0;
31161 win0_reg16 = 0;
31162 win1_reg16 = 0;
31163 win2_reg16 = 0;
31164 win3_reg16 = 0;
31165 win4_reg16 = 0;
31166 win5_reg16 = 0;
31167 win6_reg16 = 0;
31168 win7_reg16 = 0;
31169 win0_reg17 = 0;
31170 win1_reg17 = 0;
31171 win2_reg17 = 0;
31172 win3_reg17 = 0;
31173 win4_reg17 = 0;
31174 win5_reg17 = 0;
31175 win6_reg17 = 0;
31176 win7_reg17 = 0;
31177 win0_reg18 = 0;
31178 win1_reg18 = 0;
31179 win2_reg18 = 0;
31180 win3_reg18 = 0;
31181 win4_reg18 = 0;
31182 win5_reg18 = 0;
31183 win6_reg18 = 0;
31184 win7_reg18 = 0;
31185 win0_reg19 = 0;
31186 win1_reg19 = 0;
31187 win2_reg19 = 0;
31188 win3_reg19 = 0;
31189 win4_reg19 = 0;
31190 win5_reg19 = 0;
31191 win6_reg19 = 0;
31192 win7_reg19 = 0;
31193 win0_reg20 = 0;
31194 win1_reg20 = 0;
31195 win2_reg20 = 0;
31196 win3_reg20 = 0;
31197 win4_reg20 = 0;
31198 win5_reg20 = 0;
31199 win6_reg20 = 0;
31200 win7_reg20 = 0;
31201 win0_reg21 = 0;
31202 win1_reg21 = 0;
31203 win2_reg21 = 0;
31204 win3_reg21 = 0;
31205 win4_reg21 = 0;
31206 win5_reg21 = 0;
31207 win6_reg21 = 0;
31208 win7_reg21 = 0;
31209 win0_reg22 = 0;
31210 win1_reg22 = 0;
31211 win2_reg22 = 0;
31212 win3_reg22 = 0;
31213 win4_reg22 = 0;
31214 win5_reg22 = 0;
31215 win6_reg22 = 0;
31216 win7_reg22 = 0;
31217 win0_reg23 = 0;
31218 win1_reg23 = 0;
31219 win2_reg23 = 0;
31220 win3_reg23 = 0;
31221 win4_reg23 = 0;
31222 win5_reg23 = 0;
31223 win6_reg23 = 0;
31224 win7_reg23 = 0;
31225 win0_reg24 = 0;
31226 win1_reg24 = 0;
31227 win2_reg24 = 0;
31228 win3_reg24 = 0;
31229 win4_reg24 = 0;
31230 win5_reg24 = 0;
31231 win6_reg24 = 0;
31232 win7_reg24 = 0;
31233 win0_reg25 = 0;
31234 win1_reg25 = 0;
31235 win2_reg25 = 0;
31236 win3_reg25 = 0;
31237 win4_reg25 = 0;
31238 win5_reg25 = 0;
31239 win6_reg25 = 0;
31240 win7_reg25 = 0;
31241 win0_reg26 = 0;
31242 win1_reg26 = 0;
31243 win2_reg26 = 0;
31244 win3_reg26 = 0;
31245 win4_reg26 = 0;
31246 win5_reg26 = 0;
31247 win6_reg26 = 0;
31248 win7_reg26 = 0;
31249 win0_reg27 = 0;
31250 win1_reg27 = 0;
31251 win2_reg27 = 0;
31252 win3_reg27 = 0;
31253 win4_reg27 = 0;
31254 win5_reg27 = 0;
31255 win6_reg27 = 0;
31256 win7_reg27 = 0;
31257 win0_reg28 = 0;
31258 win1_reg28 = 0;
31259 win2_reg28 = 0;
31260 win3_reg28 = 0;
31261 win4_reg28 = 0;
31262 win5_reg28 = 0;
31263 win6_reg28 = 0;
31264 win7_reg28 = 0;
31265 win0_reg29 = 0;
31266 win1_reg29 = 0;
31267 win2_reg29 = 0;
31268 win3_reg29 = 0;
31269 win4_reg29 = 0;
31270 win5_reg29 = 0;
31271 win6_reg29 = 0;
31272 win7_reg29 = 0;
31273 win0_reg30 = 0;
31274 win1_reg30 = 0;
31275 win2_reg30 = 0;
31276 win3_reg30 = 0;
31277 win4_reg30 = 0;
31278 win5_reg30 = 0;
31279 win6_reg30 = 0;
31280 win7_reg30 = 0;
31281 win0_reg31 = 0;
31282 win1_reg31 = 0;
31283 win2_reg31 = 0;
31284 win3_reg31 = 0;
31285 win4_reg31 = 0;
31286 win5_reg31 = 0;
31287 win6_reg31 = 0;
31288 win7_reg31 = 0;
31289
31290 // Global registers
31291 th_gl = `POR_GL;
31292 gl0_reg0 = 0;
31293 gl1_reg0 = 0;
31294 gl2_reg0 = 0;
31295 gl3_reg0 = 0;
31296 gl0_reg1 = 0;
31297 gl1_reg1 = 0;
31298 gl2_reg1 = 0;
31299 gl3_reg1 = 0;
31300 gl0_reg2 = 0;
31301 gl1_reg2 = 0;
31302 gl2_reg2 = 0;
31303 gl3_reg2 = 0;
31304 gl0_reg3 = 0;
31305 gl1_reg3 = 0;
31306 gl2_reg3 = 0;
31307 gl3_reg3 = 0;
31308 gl0_reg4 = 0;
31309 gl1_reg4 = 0;
31310 gl2_reg4 = 0;
31311 gl3_reg4 = 0;
31312 gl0_reg5 = 0;
31313 gl1_reg5 = 0;
31314 gl2_reg5 = 0;
31315 gl3_reg5 = 0;
31316 gl0_reg6 = 0;
31317 gl1_reg6 = 0;
31318 gl2_reg6 = 0;
31319 gl3_reg6 = 0;
31320 gl0_reg7 = 0;
31321 gl1_reg7 = 0;
31322 gl2_reg7 = 0;
31323 gl3_reg7 = 0;
31324
31325 `PR_INFO ("nas", `INFO, "T%0d Init shadow registers.",mytnum);
31326 prev_reg0 = 0;
31327 prev_reg1 = 0;
31328 prev_reg2 = 0;
31329 prev_reg3 = 0;
31330 prev_reg4 = 0;
31331 prev_reg5 = 0;
31332 prev_reg6 = 0;
31333 prev_reg7 = 0;
31334 prev_reg8 = 0;
31335 prev_reg9 = 0;
31336 prev_reg10 = 0;
31337 prev_reg11 = 0;
31338 prev_reg12 = 0;
31339 prev_reg13 = 0;
31340 prev_reg14 = 0;
31341 prev_reg15 = 0;
31342 prev_reg16 = 0;
31343 prev_reg17 = 0;
31344 prev_reg18 = 0;
31345 prev_reg19 = 0;
31346 prev_reg20 = 0;
31347 prev_reg21 = 0;
31348 prev_reg22 = 0;
31349 prev_reg23 = 0;
31350 prev_reg24 = 0;
31351 prev_reg25 = 0;
31352 prev_reg26 = 0;
31353 prev_reg27 = 0;
31354 prev_reg28 = 0;
31355 prev_reg29 = 0;
31356 prev_reg30 = 0;
31357 prev_reg31 = 0;
31358 prev_reg32 = 0;
31359 prev_reg33 = 0;
31360 prev_reg34 = 0;
31361 prev_reg35 = 0;
31362 prev_reg36 = 0;
31363 prev_reg37 = 0;
31364 prev_reg38 = 0;
31365 prev_reg39 = 0;
31366 prev_reg40 = 0;
31367 prev_reg41 = 0;
31368 prev_reg42 = 0;
31369 prev_reg43 = 0;
31370 prev_reg44 = 0;
31371 prev_reg45 = 0;
31372 prev_reg46 = 0;
31373 prev_reg47 = 0;
31374 prev_reg48 = 0;
31375 prev_reg49 = 0;
31376 prev_reg50 = 0;
31377 prev_reg51 = 0;
31378 prev_reg52 = 0;
31379 prev_reg53 = 0;
31380 prev_reg54 = 0;
31381 prev_reg55 = 0;
31382 prev_reg56 = 0;
31383 prev_reg57 = 0;
31384 prev_reg58 = 0;
31385 prev_reg59 = 0;
31386 prev_reg60 = 0;
31387 prev_reg61 = 0;
31388 prev_reg62 = 0;
31389 prev_reg63 = 0;
31390 prev_reg64 = 0;
31391 prev_reg65 = 0;
31392 prev_reg66 = 0;
31393 prev_reg67 = 0;
31394 prev_reg68 = 0;
31395 prev_reg69 = 0;
31396 prev_reg70 = 0;
31397 prev_reg71 = 0;
31398 prev_reg72 = 0;
31399 prev_reg73 = 0;
31400 prev_reg74 = 0;
31401 prev_reg75 = 0;
31402 prev_reg76 = 0;
31403 prev_reg77 = 0;
31404 prev_reg78 = 0;
31405 prev_reg79 = 0;
31406 prev_reg80 = 0;
31407 prev_reg81 = 0;
31408 prev_reg82 = 0;
31409 prev_reg83 = 0;
31410 prev_reg84 = 0;
31411 prev_reg85 = 0;
31412 prev_reg86 = 0;
31413 prev_reg87 = 0;
31414 prev_reg88 = 0;
31415 prev_reg89 = 0;
31416 prev_reg90 = 0;
31417 prev_reg91 = 0;
31418 prev_reg92 = 0;
31419 prev_reg93 = 0;
31420 prev_reg94 = 0;
31421 prev_reg95 = 0;
31422 prev_reg96 = 0;
31423 prev_reg97 = 0;
31424 prev_reg98 = 0;
31425 prev_reg99 = 0;
31426 prev_reg100 = 0;
31427 prev_reg101 = 0;
31428 prev_reg102 = 0;
31429 prev_reg103 = 0;
31430 prev_reg104 = 0;
31431 prev_reg105 = 0;
31432 prev_reg106 = 0;
31433 prev_reg107 = 0;
31434 prev_reg108 = 0;
31435 prev_reg109 = 0;
31436 prev_reg110 = 0;
31437 prev_reg111 = 0;
31438 prev_reg112 = 0;
31439 prev_reg113 = 0;
31440 prev_reg114 = 0;
31441 prev_reg115 = 0;
31442 prev_reg116 = 0;
31443 prev_reg117 = 0;
31444 prev_reg118 = 0;
31445 prev_reg119 = 0;
31446 prev_reg120 = 0;
31447 prev_reg121 = 0;
31448 prev_reg122 = 0;
31449 prev_reg123 = 0;
31450 prev_reg124 = 0;
31451 prev_reg125 = 0;
31452 prev_reg126 = 0;
31453 prev_reg127 = 0;
31454 prev_reg128 = 0;
31455 prev_reg129 = 0;
31456 prev_reg130 = 0;
31457 prev_reg131 = 0;
31458 prev_reg132 = 0;
31459 prev_reg133 = 0;
31460 prev_reg134 = 0;
31461 prev_reg135 = 0;
31462 prev_reg136 = 0;
31463 prev_reg137 = 0;
31464 prev_reg138 = 0;
31465 prev_reg139 = 0;
31466 prev_reg140 = 0;
31467 prev_reg141 = 0;
31468 prev_reg142 = 0;
31469 prev_reg143 = 0;
31470 prev_reg144 = 0;
31471 prev_reg145 = 0;
31472 prev_reg146 = 0;
31473 prev_reg147 = 0;
31474 prev_reg148 = 0;
31475 prev_reg149 = 0;
31476 prev_reg150 = 0;
31477 prev_reg151 = 0;
31478 prev_reg152 = 0;
31479 prev_reg153 = 0;
31480 prev_reg154 = 0;
31481 prev_reg155 = 0;
31482 prev_reg156 = 0;
31483 prev_reg157 = 0;
31484 prev_reg158 = 0;
31485 prev_reg159 = 0;
31486 prev_reg160 = 0;
31487 prev_reg161 = 0;
31488 prev_reg162 = 0;
31489 prev_reg163 = 0;
31490 prev_reg164 = 0;
31491 prev_reg165 = 0;
31492 prev_reg166 = 0;
31493 prev_reg167 = 0;
31494 prev_reg168 = 0;
31495 prev_reg169 = 0;
31496 prev_reg170 = 0;
31497 prev_reg171 = 0;
31498 prev_reg172 = 0;
31499 prev_reg173 = 0;
31500 prev_reg174 = 0;
31501 prev_reg175 = 0;
31502 prev_reg176 = 0;
31503 prev_reg177 = 0;
31504 prev_reg178 = 0;
31505 prev_reg179 = 0;
31506 prev_reg180 = 0;
31507 prev_reg181 = 0;
31508 prev_reg182 = 0;
31509 prev_reg183 = 0;
31510 prev_reg184 = 0;
31511 prev_reg185 = 0;
31512 prev_reg186 = 0;
31513 prev_reg187 = 0;
31514 prev_reg188 = 0;
31515 prev_reg189 = 0;
31516 prev_reg190 = 0;
31517 prev_reg191 = 0;
31518 prev_reg192 = 0;
31519 prev_reg193 = 0;
31520 prev_reg194 = 0;
31521 prev_reg195 = 0;
31522 prev_reg196 = 0;
31523 prev_reg197 = 0;
31524 prev_reg198 = 0;
31525 prev_reg199 = 0;
31526 prev_reg200 = 0;
31527 prev_reg201 = 0;
31528 prev_reg202 = 0;
31529 prev_reg203 = 0;
31530 prev_reg204 = 0;
31531 prev_reg205 = 0;
31532 prev_reg206 = 0;
31533 prev_reg207 = 0;
31534 prev_reg208 = 0;
31535 prev_reg209 = 0;
31536 prev_reg210 = 0;
31537 prev_reg211 = 0;
31538 prev_reg212 = 0;
31539 prev_reg213 = 0;
31540 prev_reg214 = 0;
31541 prev_reg215 = 0;
31542 prev_reg216 = 0;
31543 prev_reg217 = 0;
31544 prev_reg218 = 0;
31545 prev_reg219 = 0;
31546 prev_reg220 = 0;
31547 prev_reg221 = 0;
31548 prev_reg222 = 0;
31549 prev_reg223 = 0;
31550 prev_reg224 = 0;
31551 prev_reg225 = 0;
31552 prev_reg226 = 0;
31553 prev_reg227 = 0;
31554 prev_reg228 = 0;
31555 prev_reg229 = 0;
31556 prev_reg230 = 0;
31557 prev_reg231 = 0;
31558 prev_reg232 = 0;
31559 prev_reg233 = 0;
31560 prev_reg234 = 0;
31561 prev_reg235 = 0;
31562 prev_reg236 = 0;
31563 prev_reg237 = 0;
31564 prev_reg238 = 0;
31565 prev_reg239 = 0;
31566 prev_reg240 = 0;
31567 prev_reg241 = 0;
31568 prev_reg242 = 0;
31569 prev_reg243 = 0;
31570 prev_reg244 = 0;
31571 prev_reg245 = 0;
31572 prev_reg246 = 0;
31573 prev_reg247 = 0;
31574 prev_reg248 = 0;
31575 prev_reg249 = 0;
31576 prev_reg250 = 0;
31577 prev_reg251 = 0;
31578 prev_reg252 = 0;
31579 prev_reg253 = 0;
31580 prev_reg254 = 0;
31581 prev_reg255 = 0;
31582
31583 // POR for control registers
31584 write_prev(`FPRS +`CTL_OFFSET,3'h4);
31585 write_prev(`CLEANWIN +`CTL_OFFSET,3'h7);
31586 write_prev(`CANSAVE +`CTL_OFFSET,3'h6);
31587
31588 // POR for FPRS = 0x4
31589 write_prev(`FPRS+`CTL_OFFSET,3'h4);
31590
31591 // POR for PSTATE = 0x14 (PEF, PRIV = 1)
31592 write_prev(`PSTATE + `CTL_OFFSET,'h14);
31593
31594 // POR for HPSTATE = 0x4034 (RED, HPRIV = 1)
31595 write_prev(`HPSTATE + `CTL_OFFSET,'h24);
31596
31597 // POR for TL = = 0x6 [MAXTL]
31598 write_prev(`TL + `CTL_OFFSET,'h6);
31599
31600 // POR for TT6 = = 1
31601 write_prev(`TT6 + `CTL_OFFSET,'h1);
31602
31603 // POR for GL = MAXGL = 3
31604 write_prev(`GL + `CTL_OFFSET,`POR_GL);
31605
31606 // POR for VER = {003e, 0024, 01, 0036, 07}
31607 write_prev(`VER + `CTL_OFFSET,{32'h003e0024,VER_reg[31:24],24'h030607});
31608
31609 // POR for *_cmpr registers is INT_DIS = 1
31610 write_prev(`TICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
31611 write_prev(`STICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
31612 write_prev(`HSTICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
31613
31614 // Need to define so that 1st instruction will print correctly
31615 write_prev(`PC+`CTL_OFFSET,`POR_PC);
31616
31617 first_op = 1;
31618 pc_last = `BAD_PC;
31619
31620 `ifndef EMUL_TL
31621 delta_prev[`PC_INDEX] = `BAD_PC;
31622 `endif
31623
31624 irf_offset = (mytid%4)*32;
31625 in_wmr = 0;
31626 wmr <= 0;
31627end
31628
31629//----------------------------------------------------------
31630task wmr_prev;
31631 begin // {
31632
31633 // For WMR, we will set to 0x0, so that initial deltas
31634
31635 //
31636
31637 // WMR for PSTATE = 0x14 (PEF, PRIV = 1)
31638 // write_prev(`PSTATE + `CTL_OFFSET,'h00);
31639
31640 // WMR for HPSTATE = 0x4034 (RED, HPRIV = 1)
31641 // write_prev(`HPSTATE + `CTL_OFFSET,'h00);
31642
31643 // WMR for TL = = 0x6 [MAXTL]
31644 // write_prev(`TL + `CTL_OFFSET,'h0);
31645
31646 // WMR for TT6 = = 1
31647 // write_prev(`TT6 + `CTL_OFFSET,'h1);
31648
31649 // WMR for GL = MAXGL = 3
31650 // write_prev(`GL + `CTL_OFFSET,0);
31651
31652 end // }
31653endtask
31654
31655//----------------------------------------------------------
31656task por_prev;
31657 begin // {
31658
31659 // For POR, we will set to 0x0, so that initial deltas
31660 // and prev state are all consistent with DUT. No values
31661 // are preserved
31662
31663 `PR_ALWAYS ("arg", `ALWAYS,"T%0d Resetting Nas Pipe states for POR ..",mytnum);
31664 delta_fx4[`NEXT_INDEX] <= `FIRST_INDEX;
31665 delta_fx4[`FIRST_INDEX] <= 77'hx;
31666 delta_fx5[`NEXT_INDEX] <= `FIRST_INDEX;
31667 delta_fb[`NEXT_INDEX] <= `FIRST_INDEX;
31668 delta_fw[`NEXT_INDEX] <= `FIRST_INDEX;
31669 delta_fw1[`NEXT_INDEX] <= `FIRST_INDEX;
31670 delta_fw2[`NEXT_INDEX] <= `FIRST_INDEX;
31671 // Window registers
31672 win0_reg8 = 0;
31673 win1_reg8 = 0;
31674 win2_reg8 = 0;
31675 win3_reg8 = 0;
31676 win4_reg8 = 0;
31677 win5_reg8 = 0;
31678 win6_reg8 = 0;
31679 win7_reg8 = 0;
31680 win0_reg9 = 0;
31681 win1_reg9 = 0;
31682 win2_reg9 = 0;
31683 win3_reg9 = 0;
31684 win4_reg9 = 0;
31685 win5_reg9 = 0;
31686 win6_reg9 = 0;
31687 win7_reg9 = 0;
31688 win0_reg10 = 0;
31689 win1_reg10 = 0;
31690 win2_reg10 = 0;
31691 win3_reg10 = 0;
31692 win4_reg10 = 0;
31693 win5_reg10 = 0;
31694 win6_reg10 = 0;
31695 win7_reg10 = 0;
31696 win0_reg11 = 0;
31697 win1_reg11 = 0;
31698 win2_reg11 = 0;
31699 win3_reg11 = 0;
31700 win4_reg11 = 0;
31701 win5_reg11 = 0;
31702 win6_reg11 = 0;
31703 win7_reg11 = 0;
31704 win0_reg12 = 0;
31705 win1_reg12 = 0;
31706 win2_reg12 = 0;
31707 win3_reg12 = 0;
31708 win4_reg12 = 0;
31709 win5_reg12 = 0;
31710 win6_reg12 = 0;
31711 win7_reg12 = 0;
31712 win0_reg13 = 0;
31713 win1_reg13 = 0;
31714 win2_reg13 = 0;
31715 win3_reg13 = 0;
31716 win4_reg13 = 0;
31717 win5_reg13 = 0;
31718 win6_reg13 = 0;
31719 win7_reg13 = 0;
31720 win0_reg14 = 0;
31721 win1_reg14 = 0;
31722 win2_reg14 = 0;
31723 win3_reg14 = 0;
31724 win4_reg14 = 0;
31725 win5_reg14 = 0;
31726 win6_reg14 = 0;
31727 win7_reg14 = 0;
31728 win0_reg15 = 0;
31729 win1_reg15 = 0;
31730 win2_reg15 = 0;
31731 win3_reg15 = 0;
31732 win4_reg15 = 0;
31733 win5_reg15 = 0;
31734 win6_reg15 = 0;
31735 win7_reg15 = 0;
31736 win0_reg16 = 0;
31737 win1_reg16 = 0;
31738 win2_reg16 = 0;
31739 win3_reg16 = 0;
31740 win4_reg16 = 0;
31741 win5_reg16 = 0;
31742 win6_reg16 = 0;
31743 win7_reg16 = 0;
31744 win0_reg17 = 0;
31745 win1_reg17 = 0;
31746 win2_reg17 = 0;
31747 win3_reg17 = 0;
31748 win4_reg17 = 0;
31749 win5_reg17 = 0;
31750 win6_reg17 = 0;
31751 win7_reg17 = 0;
31752 win0_reg18 = 0;
31753 win1_reg18 = 0;
31754 win2_reg18 = 0;
31755 win3_reg18 = 0;
31756 win4_reg18 = 0;
31757 win5_reg18 = 0;
31758 win6_reg18 = 0;
31759 win7_reg18 = 0;
31760 win0_reg19 = 0;
31761 win1_reg19 = 0;
31762 win2_reg19 = 0;
31763 win3_reg19 = 0;
31764 win4_reg19 = 0;
31765 win5_reg19 = 0;
31766 win6_reg19 = 0;
31767 win7_reg19 = 0;
31768 win0_reg20 = 0;
31769 win1_reg20 = 0;
31770 win2_reg20 = 0;
31771 win3_reg20 = 0;
31772 win4_reg20 = 0;
31773 win5_reg20 = 0;
31774 win6_reg20 = 0;
31775 win7_reg20 = 0;
31776 win0_reg21 = 0;
31777 win1_reg21 = 0;
31778 win2_reg21 = 0;
31779 win3_reg21 = 0;
31780 win4_reg21 = 0;
31781 win5_reg21 = 0;
31782 win6_reg21 = 0;
31783 win7_reg21 = 0;
31784 win0_reg22 = 0;
31785 win1_reg22 = 0;
31786 win2_reg22 = 0;
31787 win3_reg22 = 0;
31788 win4_reg22 = 0;
31789 win5_reg22 = 0;
31790 win6_reg22 = 0;
31791 win7_reg22 = 0;
31792 win0_reg23 = 0;
31793 win1_reg23 = 0;
31794 win2_reg23 = 0;
31795 win3_reg23 = 0;
31796 win4_reg23 = 0;
31797 win5_reg23 = 0;
31798 win6_reg23 = 0;
31799 win7_reg23 = 0;
31800 win0_reg24 = 0;
31801 win1_reg24 = 0;
31802 win2_reg24 = 0;
31803 win3_reg24 = 0;
31804 win4_reg24 = 0;
31805 win5_reg24 = 0;
31806 win6_reg24 = 0;
31807 win7_reg24 = 0;
31808 win0_reg25 = 0;
31809 win1_reg25 = 0;
31810 win2_reg25 = 0;
31811 win3_reg25 = 0;
31812 win4_reg25 = 0;
31813 win5_reg25 = 0;
31814 win6_reg25 = 0;
31815 win7_reg25 = 0;
31816 win0_reg26 = 0;
31817 win1_reg26 = 0;
31818 win2_reg26 = 0;
31819 win3_reg26 = 0;
31820 win4_reg26 = 0;
31821 win5_reg26 = 0;
31822 win6_reg26 = 0;
31823 win7_reg26 = 0;
31824 win0_reg27 = 0;
31825 win1_reg27 = 0;
31826 win2_reg27 = 0;
31827 win3_reg27 = 0;
31828 win4_reg27 = 0;
31829 win5_reg27 = 0;
31830 win6_reg27 = 0;
31831 win7_reg27 = 0;
31832 win0_reg28 = 0;
31833 win1_reg28 = 0;
31834 win2_reg28 = 0;
31835 win3_reg28 = 0;
31836 win4_reg28 = 0;
31837 win5_reg28 = 0;
31838 win6_reg28 = 0;
31839 win7_reg28 = 0;
31840 win0_reg29 = 0;
31841 win1_reg29 = 0;
31842 win2_reg29 = 0;
31843 win3_reg29 = 0;
31844 win4_reg29 = 0;
31845 win5_reg29 = 0;
31846 win6_reg29 = 0;
31847 win7_reg29 = 0;
31848 win0_reg30 = 0;
31849 win1_reg30 = 0;
31850 win2_reg30 = 0;
31851 win3_reg30 = 0;
31852 win4_reg30 = 0;
31853 win5_reg30 = 0;
31854 win6_reg30 = 0;
31855 win7_reg30 = 0;
31856 win0_reg31 = 0;
31857 win1_reg31 = 0;
31858 win2_reg31 = 0;
31859 win3_reg31 = 0;
31860 win4_reg31 = 0;
31861 win5_reg31 = 0;
31862 win6_reg31 = 0;
31863 win7_reg31 = 0;
31864
31865 // Global registers
31866 th_gl = `POR_GL;
31867 gl0_reg0 = 0;
31868 gl1_reg0 = 0;
31869 gl2_reg0 = 0;
31870 gl3_reg0 = 0;
31871 gl0_reg1 = 0;
31872 gl1_reg1 = 0;
31873 gl2_reg1 = 0;
31874 gl3_reg1 = 0;
31875 gl0_reg2 = 0;
31876 gl1_reg2 = 0;
31877 gl2_reg2 = 0;
31878 gl3_reg2 = 0;
31879 gl0_reg3 = 0;
31880 gl1_reg3 = 0;
31881 gl2_reg3 = 0;
31882 gl3_reg3 = 0;
31883 gl0_reg4 = 0;
31884 gl1_reg4 = 0;
31885 gl2_reg4 = 0;
31886 gl3_reg4 = 0;
31887 gl0_reg5 = 0;
31888 gl1_reg5 = 0;
31889 gl2_reg5 = 0;
31890 gl3_reg5 = 0;
31891 gl0_reg6 = 0;
31892 gl1_reg6 = 0;
31893 gl2_reg6 = 0;
31894 gl3_reg6 = 0;
31895 gl0_reg7 = 0;
31896 gl1_reg7 = 0;
31897 gl2_reg7 = 0;
31898 gl3_reg7 = 0;
31899
31900 `PR_INFO ("nas", `INFO, "T%0d Init shadow registers.",mytnum);
31901 prev_reg0 = 0;
31902 prev_reg1 = 0;
31903 prev_reg2 = 0;
31904 prev_reg3 = 0;
31905 prev_reg4 = 0;
31906 prev_reg5 = 0;
31907 prev_reg6 = 0;
31908 prev_reg7 = 0;
31909 prev_reg8 = 0;
31910 prev_reg9 = 0;
31911 prev_reg10 = 0;
31912 prev_reg11 = 0;
31913 prev_reg12 = 0;
31914 prev_reg13 = 0;
31915 prev_reg14 = 0;
31916 prev_reg15 = 0;
31917 prev_reg16 = 0;
31918 prev_reg17 = 0;
31919 prev_reg18 = 0;
31920 prev_reg19 = 0;
31921 prev_reg20 = 0;
31922 prev_reg21 = 0;
31923 prev_reg22 = 0;
31924 prev_reg23 = 0;
31925 prev_reg24 = 0;
31926 prev_reg25 = 0;
31927 prev_reg26 = 0;
31928 prev_reg27 = 0;
31929 prev_reg28 = 0;
31930 prev_reg29 = 0;
31931 prev_reg30 = 0;
31932 prev_reg31 = 0;
31933 prev_reg32 = 0;
31934 prev_reg33 = 0;
31935 prev_reg34 = 0;
31936 prev_reg35 = 0;
31937 prev_reg36 = 0;
31938 prev_reg37 = 0;
31939 prev_reg38 = 0;
31940 prev_reg39 = 0;
31941 prev_reg40 = 0;
31942 prev_reg41 = 0;
31943 prev_reg42 = 0;
31944 prev_reg43 = 0;
31945 prev_reg44 = 0;
31946 prev_reg45 = 0;
31947 prev_reg46 = 0;
31948 prev_reg47 = 0;
31949 prev_reg48 = 0;
31950 prev_reg49 = 0;
31951 prev_reg50 = 0;
31952 prev_reg51 = 0;
31953 prev_reg52 = 0;
31954 prev_reg53 = 0;
31955 prev_reg54 = 0;
31956 prev_reg55 = 0;
31957 prev_reg56 = 0;
31958 prev_reg57 = 0;
31959 prev_reg58 = 0;
31960 prev_reg59 = 0;
31961 prev_reg60 = 0;
31962 prev_reg61 = 0;
31963 prev_reg62 = 0;
31964 prev_reg63 = 0;
31965 prev_reg64 = 0;
31966 prev_reg65 = 0;
31967 prev_reg66 = 0;
31968 prev_reg67 = 0;
31969 prev_reg68 = 0;
31970 prev_reg69 = 0;
31971 prev_reg70 = 0;
31972 prev_reg71 = 0;
31973 prev_reg72 = 0;
31974 prev_reg73 = 0;
31975 prev_reg74 = 0;
31976 prev_reg75 = 0;
31977 prev_reg76 = 0;
31978 prev_reg77 = 0;
31979 prev_reg78 = 0;
31980 prev_reg79 = 0;
31981 prev_reg80 = 0;
31982 prev_reg81 = 0;
31983 prev_reg82 = 0;
31984 prev_reg83 = 0;
31985 prev_reg84 = 0;
31986 prev_reg85 = 0;
31987 prev_reg86 = 0;
31988 prev_reg87 = 0;
31989 prev_reg88 = 0;
31990 prev_reg89 = 0;
31991 prev_reg90 = 0;
31992 prev_reg91 = 0;
31993 prev_reg92 = 0;
31994 prev_reg93 = 0;
31995 prev_reg94 = 0;
31996 prev_reg95 = 0;
31997 prev_reg96 = 0;
31998 prev_reg97 = 0;
31999 prev_reg98 = 0;
32000 prev_reg99 = 0;
32001 prev_reg100 = 0;
32002 prev_reg101 = 0;
32003 prev_reg102 = 0;
32004 prev_reg103 = 0;
32005 prev_reg104 = 0;
32006 prev_reg105 = 0;
32007 prev_reg106 = 0;
32008 prev_reg107 = 0;
32009 prev_reg108 = 0;
32010 prev_reg109 = 0;
32011 prev_reg110 = 0;
32012 prev_reg111 = 0;
32013 prev_reg112 = 0;
32014 prev_reg113 = 0;
32015 prev_reg114 = 0;
32016 prev_reg115 = 0;
32017 prev_reg116 = 0;
32018 prev_reg117 = 0;
32019 prev_reg118 = 0;
32020 prev_reg119 = 0;
32021 prev_reg120 = 0;
32022 prev_reg121 = 0;
32023 prev_reg122 = 0;
32024 prev_reg123 = 0;
32025 prev_reg124 = 0;
32026 prev_reg125 = 0;
32027 prev_reg126 = 0;
32028 prev_reg127 = 0;
32029 prev_reg128 = 0;
32030 prev_reg129 = 0;
32031 prev_reg130 = 0;
32032 prev_reg131 = 0;
32033 prev_reg132 = 0;
32034 prev_reg133 = 0;
32035 prev_reg134 = 0;
32036 prev_reg135 = 0;
32037 prev_reg136 = 0;
32038 prev_reg137 = 0;
32039 prev_reg138 = 0;
32040 prev_reg139 = 0;
32041 prev_reg140 = 0;
32042 prev_reg141 = 0;
32043 prev_reg142 = 0;
32044 prev_reg143 = 0;
32045 prev_reg144 = 0;
32046 prev_reg145 = 0;
32047 prev_reg146 = 0;
32048 prev_reg147 = 0;
32049 prev_reg148 = 0;
32050 prev_reg149 = 0;
32051 prev_reg150 = 0;
32052 prev_reg151 = 0;
32053 prev_reg152 = 0;
32054 prev_reg153 = 0;
32055 prev_reg154 = 0;
32056 prev_reg155 = 0;
32057 prev_reg156 = 0;
32058 prev_reg157 = 0;
32059 prev_reg158 = 0;
32060 prev_reg159 = 0;
32061 prev_reg160 = 0;
32062 prev_reg161 = 0;
32063 prev_reg162 = 0;
32064 prev_reg163 = 0;
32065 prev_reg164 = 0;
32066 prev_reg165 = 0;
32067 prev_reg166 = 0;
32068 prev_reg167 = 0;
32069 prev_reg168 = 0;
32070 prev_reg169 = 0;
32071 prev_reg170 = 0;
32072 prev_reg171 = 0;
32073 prev_reg172 = 0;
32074 prev_reg173 = 0;
32075 prev_reg174 = 0;
32076 prev_reg175 = 0;
32077 prev_reg176 = 0;
32078 prev_reg177 = 0;
32079 prev_reg178 = 0;
32080 prev_reg179 = 0;
32081 prev_reg180 = 0;
32082 prev_reg181 = 0;
32083 prev_reg182 = 0;
32084 prev_reg183 = 0;
32085 prev_reg184 = 0;
32086 prev_reg185 = 0;
32087 prev_reg186 = 0;
32088 prev_reg187 = 0;
32089 prev_reg188 = 0;
32090 prev_reg189 = 0;
32091 prev_reg190 = 0;
32092 prev_reg191 = 0;
32093 prev_reg192 = 0;
32094 prev_reg193 = 0;
32095 prev_reg194 = 0;
32096 prev_reg195 = 0;
32097 prev_reg196 = 0;
32098 prev_reg197 = 0;
32099 prev_reg198 = 0;
32100 prev_reg199 = 0;
32101 prev_reg200 = 0;
32102 prev_reg201 = 0;
32103 prev_reg202 = 0;
32104 prev_reg203 = 0;
32105 prev_reg204 = 0;
32106 prev_reg205 = 0;
32107 prev_reg206 = 0;
32108 prev_reg207 = 0;
32109 prev_reg208 = 0;
32110 prev_reg209 = 0;
32111 prev_reg210 = 0;
32112 prev_reg211 = 0;
32113 prev_reg212 = 0;
32114 prev_reg213 = 0;
32115 prev_reg214 = 0;
32116 prev_reg215 = 0;
32117 prev_reg216 = 0;
32118 prev_reg217 = 0;
32119 prev_reg218 = 0;
32120 prev_reg219 = 0;
32121 prev_reg220 = 0;
32122 prev_reg221 = 0;
32123 prev_reg222 = 0;
32124 prev_reg223 = 0;
32125 prev_reg224 = 0;
32126 prev_reg225 = 0;
32127 prev_reg226 = 0;
32128 prev_reg227 = 0;
32129 prev_reg228 = 0;
32130 prev_reg229 = 0;
32131 prev_reg230 = 0;
32132 prev_reg231 = 0;
32133 prev_reg232 = 0;
32134 prev_reg233 = 0;
32135 prev_reg234 = 0;
32136 prev_reg235 = 0;
32137 prev_reg236 = 0;
32138 prev_reg237 = 0;
32139 prev_reg238 = 0;
32140 prev_reg239 = 0;
32141 prev_reg240 = 0;
32142 prev_reg241 = 0;
32143 prev_reg242 = 0;
32144 prev_reg243 = 0;
32145 prev_reg244 = 0;
32146 prev_reg245 = 0;
32147 prev_reg246 = 0;
32148 prev_reg247 = 0;
32149 prev_reg248 = 0;
32150 prev_reg249 = 0;
32151 prev_reg250 = 0;
32152 prev_reg251 = 0;
32153 prev_reg252 = 0;
32154 prev_reg253 = 0;
32155 prev_reg254 = 0;
32156 prev_reg255 = 0;
32157
32158 // POR for control registers
32159 write_prev(`FPRS +`CTL_OFFSET,3'h4);
32160 write_prev(`CLEANWIN +`CTL_OFFSET,3'h7);
32161 write_prev(`CANSAVE +`CTL_OFFSET,3'h6);
32162
32163 // POR for FPRS = 0x4
32164 write_prev(`FPRS+`CTL_OFFSET,3'h4);
32165
32166 // POR for PSTATE = 0x14 (PEF, PRIV = 1)
32167 write_prev(`PSTATE + `CTL_OFFSET,'h14);
32168
32169 // POR for HPSTATE = 0x4034 (RED, HPRIV = 1)
32170 write_prev(`HPSTATE + `CTL_OFFSET,'h24);
32171
32172 // POR for TL = = 0x6 [MAXTL]
32173 write_prev(`TL + `CTL_OFFSET,'h6);
32174
32175 // POR for TT6 = = 1
32176 write_prev(`TT6 + `CTL_OFFSET,'h1);
32177
32178 // POR for GL = MAXGL = 3
32179 write_prev(`GL + `CTL_OFFSET,`POR_GL);
32180
32181 // POR for VER = {003e, 0024, 01, 0036, 07}
32182 write_prev(`VER + `CTL_OFFSET,64'h003e002410030607);
32183
32184 // POR for *_cmpr registers is INT_DIS = 1
32185 write_prev(`TICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
32186 write_prev(`STICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
32187 write_prev(`HSTICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
32188
32189 // Need to define so that 1st instruction will print correctly
32190 write_prev(`PC+`CTL_OFFSET,`POR_PC);
32191
32192 first_op = 1;
32193 pc_last = `BAD_PC;
32194
32195 end // }
32196endtask
32197
32198//----------------------------------------------------------
32199//----------------------------------------------------------
32200 `else // GATESIM
32201
32202// Watch for Good/Bad trap
32203
32204wire [5:0] mytnum = (mycid*8)+mytid;
32205wire mytg = mytid >> 2;
32206integer junk;
32207reg nas_pipe_enable;
32208
32209integer inst_count;
32210
32211 // Delimiter changes whether flat or hierarchical netlist
32212 `ifdef GATES_FLAT
32213 wire myclk = tb_top.cpu.spc5.gclk;
32214 wire dec_inst_valid_m = mytg ? tb_top.cpu.spc5.dec_inst_valid_m[1] : tb_top.cpu.spc5.dec_inst_valid_m[0];
32215 wire [1:0] dec_tid_m = mytg ? tb_top.cpu.spc5.dec_tid1_m : tb_top.cpu.spc5.dec_tid0_m;
32216 wire dec_flush_b = mytg ? tb_top.cpu.spc5.dec_flush_b[1] : tb_top.cpu.spc5.dec_flush_b[0];
32217 wire tlu_flush_ifu = tb_top.cpu.spc5.tlu_flush_ifu[mytid];
32218 wire [47:0] pc_d = mytg ? {tb_top.cpu.spc5.tlu_pc_1_d[47:2],2'b0} : {tb_top.cpu.spc5.tlu_pc_0_d[47:2],2'b0};
32219 wire [31:0] op_d = mytg ? tb_top.cpu.spc5.dec_inst1_d[31:0] : tb_top.cpu.spc5.dec_inst0_d[31:0];
32220 `else
32221 wire myclk = tb_top.cpu.spc5.gclk;
32222 wire dec_inst_valid_m = mytg ? tb_top.cpu.spc5.dec_inst_valid_m[1] : tb_top.cpu.spc5.dec_inst_valid_m[0];
32223 wire [1:0] dec_tid_m = mytg ? tb_top.cpu.spc5.dec_tid1_m : tb_top.cpu.spc5.dec_tid0_m;
32224 wire dec_flush_b = mytg ? tb_top.cpu.spc5.dec_flush_b[1] : tb_top.cpu.spc5.dec_flush_b[0];
32225 wire tlu_flush_ifu = tb_top.cpu.spc5.tlu_flush_ifu[mytid];
32226 wire [47:0] pc_d = mytg ? {tb_top.cpu.spc5.tlu_pc_1_d[47:2],2'b0} : {tb_top.cpu.spc5.tlu_pc_0_d[47:2],2'b0};
32227 wire [31:0] op_d = mytg ? tb_top.cpu.spc5.dec_inst1_d[31:0] : tb_top.cpu.spc5.dec_inst0_d[31:0];
32228 `endif
32229
32230 reg dec_inst_valid_b;
32231 reg [1:0] dec_tid_b;
32232
32233 reg inst_valid_w;
32234 reg inst_valid_fx4;
32235 reg inst_valid_fx5;
32236 reg inst_valid_fb;
32237 reg inst_valid_fw;
32238 reg inst_valid_fw1;
32239 reg inst_valid_fw2;
32240 reg [47:0] pc_e;
32241 reg [47:0] pc_m;
32242 reg [47:0] pc_b;
32243 reg [47:0] pc_w;
32244 reg [47:0] pc_fx4;
32245 reg [47:0] pc_fx5;
32246 reg [47:0] pc_fb;
32247 reg [47:0] pc_fw;
32248 reg [47:0] pc_fw1;
32249 reg [47:0] pc_fw2;
32250 reg [31:0] op_e;
32251 reg [31:0] op_m;
32252 reg [31:0] op_b;
32253 reg [31:0] op_w;
32254 reg [31:0] op_fx4;
32255 reg [31:0] op_fx5;
32256 reg [31:0] op_fb;
32257 reg [31:0] op_fw;
32258 reg [31:0] op_fw1;
32259 reg [31:0] op_fw2;
32260
32261 wire inst_valid_b = dec_inst_valid_b && (dec_tid_b==mytid[1:0]) && !(dec_flush_b || tlu_flush_ifu);
32262
32263initial begin // {
32264 inst_count = 1;
32265 nas_pipe_enable = 1;
32266end // }
32267
32268
32269always @ (posedge myclk) begin // {
32270
32271 dec_inst_valid_b <= dec_inst_valid_m;
32272 dec_tid_b <= dec_tid_m;
32273 op_e <= op_d;
32274 op_m <= op_e;
32275 op_b <= op_m;
32276 op_w <= op_b;
32277 op_fx4 <= op_w;
32278 op_fx5 <= op_fx4;
32279 op_fb <= op_fx5;
32280 op_fw <= op_fb;
32281 op_fw1 <= op_fw;
32282 op_fw2 <= op_fw1;
32283 pc_e <= pc_d;
32284 pc_m <= pc_e;
32285 pc_b <= pc_m;
32286 pc_w <= pc_b;
32287 pc_fx4 <= pc_w;
32288 pc_fx5 <= pc_fx4;
32289 pc_fb <= pc_fx5;
32290 pc_fw <= pc_fb;
32291 pc_fw1 <= pc_fw;
32292 pc_fw2 <= pc_fw1;
32293 inst_valid_w <= inst_valid_b;
32294 inst_valid_fx4 <= inst_valid_w;
32295 inst_valid_fx5 <= inst_valid_fx4;
32296 inst_valid_fb <= inst_valid_fx5;
32297 inst_valid_fw <= inst_valid_fb;
32298 inst_valid_fw1 <= inst_valid_fw;
32299 inst_valid_fw2 <= inst_valid_fw1;
32300
32301 if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable) begin // {
32302
32303 if (inst_valid_fw2) begin // {
32304
32305 // Print PC/opcode for debugging
32306 `PR_NORMAL ("nas", `NORMAL, "@%0d #%0d T%0d %h [%h]", $time, inst_count, mytnum, pc_fw2, op_fw2);
32307 inst_count = inst_count + 1;
32308
32309 //----------
32310 // End detection for GateSim runs
32311 for (junk=0;junk<`PARGS.bad_trap_count;junk=junk+1) begin // {
32312 if (({16'b0,pc_fw2}&`PC_MASK)===(`PARGS.bad_trap_addr[junk]&`PC_MASK)) begin // {
32313 `PR_ERROR ("nas",`ERROR, "T%0d reached Bad Trap [GATESIM]", mytnum);
32314 nas_pipe_enable = 1'b0;
32315 end //}
32316 end //}
32317 for (junk=0;junk<`PARGS.good_trap_count;junk=junk+1) begin // {
32318 if (({16'b0,pc_fw2}&`PC_MASK)===(`PARGS.good_trap_addr[junk]&`PC_MASK)) begin // {
32319 `TOP.finished_tids[mytnum] = 1'b1;
32320 `PARGS.th_check_enable[mytnum] = 1'b0;
32321 nas_pipe_enable = 1'b0;
32322 `PR_NORMAL ("nas", `NORMAL, "T%0d reached Good Trap. Disabling checking for thread %0d [GATESIM]", mytnum,mytnum);
32323 end //}
32324 end //}
32325
32326 end // }
32327 end // }
32328
32329end //}
32330
32331
32332`endif
32333
32334endmodule
32335//----------------------------------------------------------
32336//----------------------------------------------------------
32337
32338`endif
32339
32340
32341`ifdef CORE_6
32342
32343
32344module nas_pipe6 (
32345 mycid,
32346 mytid,
32347
32348 opcode,
32349 PC_reg,
32350 Y_reg,
32351 CCR_reg,
32352 FPRS_reg,
32353 FSR_reg,
32354 ASI_reg,
32355 GSR_reg,
32356 TICK_CMPR_reg,
32357 STICK_CMPR_reg,
32358 HSTICK_CMPR_reg,
32359 PSTATE_reg,
32360 TL_reg,
32361 PIL_reg,
32362 TBA_reg,
32363 VER_reg,
32364 CWP_reg,
32365 CANSAVE_reg,
32366 CANRESTORE_reg,
32367 OTHERWIN_reg,
32368 WSTATE_reg,
32369 CLEANWIN_reg,
32370 SOFTINT_reg,
32371 rd_SOFTINT_reg,
32372 INTR_RECEIVE_reg,
32373 GL_reg,
32374 HPSTATE_reg,
32375 HTBA_reg,
32376 HINTP_reg,
32377
32378 CTXT_PRIM_0_reg,
32379 CTXT_SEC_0_reg,
32380 CTXT_PRIM_1_reg,
32381 CTXT_SEC_1_reg,
32382 LSU_CONTROL_reg,
32383 I_TAG_ACC_reg,
32384 D_TAG_ACC_reg,
32385 WATCHPOINT_ADDR_reg,
32386 DSFAR_reg,
32387
32388 Trap_Entry_1,
32389 Trap_Entry_2,
32390 Trap_Entry_3,
32391 Trap_Entry_4,
32392 Trap_Entry_5,
32393 Trap_Entry_6,
32394
32395 exu_valid,
32396
32397 imul_valid,
32398
32399 frf_w2_valid,
32400 frf_w1_valid,
32401 frf_w1_tid,
32402 frf_w2_tid,
32403 frf_w1_addr,
32404 frf_w2_addr,
32405
32406 asi_valid,
32407 asi_in_progress,
32408
32409 fp_valid,
32410
32411 idiv_valid,
32412
32413 fdiv_valid,
32414
32415 lsu_valid,
32416
32417 tlu_valid
32418);
32419
32420//----------------------------------------------------------
32421input [2:0] mycid;
32422input [2:0] mytid;
32423
32424input [31:0] opcode;
32425input [47:0] PC_reg;
32426input [31:0] Y_reg;
32427input [7:0] CCR_reg;
32428input [2:0] FPRS_reg;
32429input [27:0] FSR_reg;
32430input [7:0] ASI_reg;
32431input [42:0] GSR_reg;
32432input [71:0] TICK_CMPR_reg;
32433input [71:0] STICK_CMPR_reg;
32434input [71:0] HSTICK_CMPR_reg;
32435input [12:0] PSTATE_reg;
32436input [2:0] TL_reg;
32437input [3:0] PIL_reg;
32438input [32:0] TBA_reg;
32439input [63:0] VER_reg;
32440input [2:0] CWP_reg;
32441input [2:0] CANSAVE_reg;
32442input [2:0] CANRESTORE_reg;
32443input [2:0] OTHERWIN_reg;
32444input [5:0] WSTATE_reg;
32445input [2:0] CLEANWIN_reg;
32446input [16:0] SOFTINT_reg;
32447input [16:0] rd_SOFTINT_reg;
32448input [63:0] INTR_RECEIVE_reg;
32449input [1:0] GL_reg;
32450input [12:0] HPSTATE_reg;
32451input [33:0] HTBA_reg;
32452input HINTP_reg;
32453
32454input [63:0] CTXT_PRIM_0_reg;
32455input [63:0] CTXT_SEC_0_reg;
32456input [63:0] CTXT_PRIM_1_reg;
32457input [63:0] CTXT_SEC_1_reg;
32458input [63:0] LSU_CONTROL_reg;
32459input [63:0] I_TAG_ACC_reg;
32460input [63:0] D_TAG_ACC_reg;
32461input [63:0] WATCHPOINT_ADDR_reg;
32462input [47:0] DSFAR_reg;
32463
32464input [151:0] Trap_Entry_1;
32465input [151:0] Trap_Entry_2;
32466input [151:0] Trap_Entry_3;
32467input [151:0] Trap_Entry_4;
32468input [151:0] Trap_Entry_5;
32469input [151:0] Trap_Entry_6;
32470
32471input exu_valid;
32472
32473input imul_valid;
32474
32475input [1:0] frf_w2_valid;
32476input [2:0] frf_w2_tid;
32477input [4:0] frf_w2_addr;
32478
32479input [1:0] frf_w1_valid;
32480input [2:0] frf_w1_tid;
32481input [4:0] frf_w1_addr;
32482
32483input asi_valid; // ASI/ASR/PR writes done ..
32484input asi_in_progress; // ASI/ASR/PR in progess
32485
32486input fp_valid;
32487
32488input idiv_valid;
32489
32490input fdiv_valid;
32491
32492input lsu_valid;
32493
32494input tlu_valid;
32495
32496`ifndef GATESIM
32497
32498//----------------------------------------------------------
32499// Register assignments
32500//----------------------------------------------------------
32501`include "nas_regs.v"
32502//----------------------------------------------------------
32503
32504wire exu_complete;
32505wire imul_complete;
32506wire idiv_complete;
32507wire tlu_complete;
32508wire fp_complete;
32509wire fdiv_complete;
32510wire lsu_complete;
32511wire asi_complete;
32512wire [7:0] complete_w;
32513reg [7:0] complete_fx4;
32514reg [7:0] complete_fx5;
32515reg [7:0] complete_fb;
32516reg [7:0] complete_fw;
32517reg [7:0] complete_fw1;
32518reg [7:0] complete_fw2;
32519
32520`ifndef EMUL_TL
32521// delta_* = {type(2bits),win(3bits),regnum(8bits),value(64bits)}
32522reg [`DELTA_WIDTH:0] delta_fx4 [0:(`MAX_INDEX)];
32523reg [`DELTA_WIDTH:0] delta_fx5 [0:(`MAX_INDEX)];
32524reg [`DELTA_WIDTH:0] delta_fb [0:(`MAX_INDEX)];
32525reg [`DELTA_WIDTH:0] delta_fw [0:(`MAX_INDEX)];
32526reg [`DELTA_WIDTH:0] delta_fw1 [0:(`MAX_INDEX)];
32527reg [`DELTA_WIDTH:0] delta_fw2 [0:(`MAX_INDEX)];
32528reg [`DELTA_WIDTH:0] delta_prev [0:(`MAX_INDEX)];
32529`endif
32530
32531reg [2:0] cwp_fx4;
32532reg [2:0] cwp_fx5;
32533reg [2:0] cwp_fb;
32534reg [2:0] cwp_fw;
32535reg [2:0] cwp_fw1;
32536reg [2:0] cwp_fw2;
32537reg [2:0] cwp_last;
32538
32539
32540// need to change in several places in this file
32541reg [63:0] prev_reg0; // includes G,W,C,F registers
32542reg [63:0] prev_reg1; // includes G,W,C,F registers
32543reg [63:0] prev_reg2; // includes G,W,C,F registers
32544reg [63:0] prev_reg3; // includes G,W,C,F registers
32545reg [63:0] prev_reg4; // includes G,W,C,F registers
32546reg [63:0] prev_reg5; // includes G,W,C,F registers
32547reg [63:0] prev_reg6; // includes G,W,C,F registers
32548reg [63:0] prev_reg7; // includes G,W,C,F registers
32549reg [63:0] prev_reg8; // includes G,W,C,F registers
32550reg [63:0] prev_reg9; // includes G,W,C,F registers
32551reg [63:0] prev_reg10; // includes G,W,C,F registers
32552reg [63:0] prev_reg11; // includes G,W,C,F registers
32553reg [63:0] prev_reg12; // includes G,W,C,F registers
32554reg [63:0] prev_reg13; // includes G,W,C,F registers
32555reg [63:0] prev_reg14; // includes G,W,C,F registers
32556reg [63:0] prev_reg15; // includes G,W,C,F registers
32557reg [63:0] prev_reg16; // includes G,W,C,F registers
32558reg [63:0] prev_reg17; // includes G,W,C,F registers
32559reg [63:0] prev_reg18; // includes G,W,C,F registers
32560reg [63:0] prev_reg19; // includes G,W,C,F registers
32561reg [63:0] prev_reg20; // includes G,W,C,F registers
32562reg [63:0] prev_reg21; // includes G,W,C,F registers
32563reg [63:0] prev_reg22; // includes G,W,C,F registers
32564reg [63:0] prev_reg23; // includes G,W,C,F registers
32565reg [63:0] prev_reg24; // includes G,W,C,F registers
32566reg [63:0] prev_reg25; // includes G,W,C,F registers
32567reg [63:0] prev_reg26; // includes G,W,C,F registers
32568reg [63:0] prev_reg27; // includes G,W,C,F registers
32569reg [63:0] prev_reg28; // includes G,W,C,F registers
32570reg [63:0] prev_reg29; // includes G,W,C,F registers
32571reg [63:0] prev_reg30; // includes G,W,C,F registers
32572reg [63:0] prev_reg31; // includes G,W,C,F registers
32573reg [63:0] prev_reg32; // includes G,W,C,F registers
32574reg [63:0] prev_reg33; // includes G,W,C,F registers
32575reg [63:0] prev_reg34; // includes G,W,C,F registers
32576reg [63:0] prev_reg35; // includes G,W,C,F registers
32577reg [63:0] prev_reg36; // includes G,W,C,F registers
32578reg [63:0] prev_reg37; // includes G,W,C,F registers
32579reg [63:0] prev_reg38; // includes G,W,C,F registers
32580reg [63:0] prev_reg39; // includes G,W,C,F registers
32581reg [63:0] prev_reg40; // includes G,W,C,F registers
32582reg [63:0] prev_reg41; // includes G,W,C,F registers
32583reg [63:0] prev_reg42; // includes G,W,C,F registers
32584reg [63:0] prev_reg43; // includes G,W,C,F registers
32585reg [63:0] prev_reg44; // includes G,W,C,F registers
32586reg [63:0] prev_reg45; // includes G,W,C,F registers
32587reg [63:0] prev_reg46; // includes G,W,C,F registers
32588reg [63:0] prev_reg47; // includes G,W,C,F registers
32589reg [63:0] prev_reg48; // includes G,W,C,F registers
32590reg [63:0] prev_reg49; // includes G,W,C,F registers
32591reg [63:0] prev_reg50; // includes G,W,C,F registers
32592reg [63:0] prev_reg51; // includes G,W,C,F registers
32593reg [63:0] prev_reg52; // includes G,W,C,F registers
32594reg [63:0] prev_reg53; // includes G,W,C,F registers
32595reg [63:0] prev_reg54; // includes G,W,C,F registers
32596reg [63:0] prev_reg55; // includes G,W,C,F registers
32597reg [63:0] prev_reg56; // includes G,W,C,F registers
32598reg [63:0] prev_reg57; // includes G,W,C,F registers
32599reg [63:0] prev_reg58; // includes G,W,C,F registers
32600reg [63:0] prev_reg59; // includes G,W,C,F registers
32601reg [63:0] prev_reg60; // includes G,W,C,F registers
32602reg [63:0] prev_reg61; // includes G,W,C,F registers
32603reg [63:0] prev_reg62; // includes G,W,C,F registers
32604reg [63:0] prev_reg63; // includes G,W,C,F registers
32605reg [63:0] prev_reg64; // includes G,W,C,F registers
32606reg [63:0] prev_reg65; // includes G,W,C,F registers
32607reg [63:0] prev_reg66; // includes G,W,C,F registers
32608reg [63:0] prev_reg67; // includes G,W,C,F registers
32609reg [63:0] prev_reg68; // includes G,W,C,F registers
32610reg [63:0] prev_reg69; // includes G,W,C,F registers
32611reg [63:0] prev_reg70; // includes G,W,C,F registers
32612reg [63:0] prev_reg71; // includes G,W,C,F registers
32613reg [63:0] prev_reg72; // includes G,W,C,F registers
32614reg [63:0] prev_reg73; // includes G,W,C,F registers
32615reg [63:0] prev_reg74; // includes G,W,C,F registers
32616reg [63:0] prev_reg75; // includes G,W,C,F registers
32617reg [63:0] prev_reg76; // includes G,W,C,F registers
32618reg [63:0] prev_reg77; // includes G,W,C,F registers
32619reg [63:0] prev_reg78; // includes G,W,C,F registers
32620reg [63:0] prev_reg79; // includes G,W,C,F registers
32621reg [63:0] prev_reg80; // includes G,W,C,F registers
32622reg [63:0] prev_reg81; // includes G,W,C,F registers
32623reg [63:0] prev_reg82; // includes G,W,C,F registers
32624reg [63:0] prev_reg83; // includes G,W,C,F registers
32625reg [63:0] prev_reg84; // includes G,W,C,F registers
32626reg [63:0] prev_reg85; // includes G,W,C,F registers
32627reg [63:0] prev_reg86; // includes G,W,C,F registers
32628reg [63:0] prev_reg87; // includes G,W,C,F registers
32629reg [63:0] prev_reg88; // includes G,W,C,F registers
32630reg [63:0] prev_reg89; // includes G,W,C,F registers
32631reg [63:0] prev_reg90; // includes G,W,C,F registers
32632reg [63:0] prev_reg91; // includes G,W,C,F registers
32633reg [63:0] prev_reg92; // includes G,W,C,F registers
32634reg [63:0] prev_reg93; // includes G,W,C,F registers
32635reg [63:0] prev_reg94; // includes G,W,C,F registers
32636reg [63:0] prev_reg95; // includes G,W,C,F registers
32637reg [63:0] prev_reg96; // includes G,W,C,F registers
32638reg [63:0] prev_reg97; // includes G,W,C,F registers
32639reg [63:0] prev_reg98; // includes G,W,C,F registers
32640reg [63:0] prev_reg99; // includes G,W,C,F registers
32641reg [63:0] prev_reg100; // includes G,W,C,F registers
32642reg [63:0] prev_reg101; // includes G,W,C,F registers
32643reg [63:0] prev_reg102; // includes G,W,C,F registers
32644reg [63:0] prev_reg103; // includes G,W,C,F registers
32645reg [63:0] prev_reg104; // includes G,W,C,F registers
32646reg [63:0] prev_reg105; // includes G,W,C,F registers
32647reg [63:0] prev_reg106; // includes G,W,C,F registers
32648reg [63:0] prev_reg107; // includes G,W,C,F registers
32649reg [63:0] prev_reg108; // includes G,W,C,F registers
32650reg [63:0] prev_reg109; // includes G,W,C,F registers
32651reg [63:0] prev_reg110; // includes G,W,C,F registers
32652reg [63:0] prev_reg111; // includes G,W,C,F registers
32653reg [63:0] prev_reg112; // includes G,W,C,F registers
32654reg [63:0] prev_reg113; // includes G,W,C,F registers
32655reg [63:0] prev_reg114; // includes G,W,C,F registers
32656reg [63:0] prev_reg115; // includes G,W,C,F registers
32657reg [63:0] prev_reg116; // includes G,W,C,F registers
32658reg [63:0] prev_reg117; // includes G,W,C,F registers
32659reg [63:0] prev_reg118; // includes G,W,C,F registers
32660reg [63:0] prev_reg119; // includes G,W,C,F registers
32661reg [63:0] prev_reg120; // includes G,W,C,F registers
32662reg [63:0] prev_reg121; // includes G,W,C,F registers
32663reg [63:0] prev_reg122; // includes G,W,C,F registers
32664reg [63:0] prev_reg123; // includes G,W,C,F registers
32665reg [63:0] prev_reg124; // includes G,W,C,F registers
32666reg [63:0] prev_reg125; // includes G,W,C,F registers
32667reg [63:0] prev_reg126; // includes G,W,C,F registers
32668reg [63:0] prev_reg127; // includes G,W,C,F registers
32669reg [63:0] prev_reg128; // includes G,W,C,F registers
32670reg [63:0] prev_reg129; // includes G,W,C,F registers
32671reg [63:0] prev_reg130; // includes G,W,C,F registers
32672reg [63:0] prev_reg131; // includes G,W,C,F registers
32673reg [63:0] prev_reg132; // includes G,W,C,F registers
32674reg [63:0] prev_reg133; // includes G,W,C,F registers
32675reg [63:0] prev_reg134; // includes G,W,C,F registers
32676reg [63:0] prev_reg135; // includes G,W,C,F registers
32677reg [63:0] prev_reg136; // includes G,W,C,F registers
32678reg [63:0] prev_reg137; // includes G,W,C,F registers
32679reg [63:0] prev_reg138; // includes G,W,C,F registers
32680reg [63:0] prev_reg139; // includes G,W,C,F registers
32681reg [63:0] prev_reg140; // includes G,W,C,F registers
32682reg [63:0] prev_reg141; // includes G,W,C,F registers
32683reg [63:0] prev_reg142; // includes G,W,C,F registers
32684reg [63:0] prev_reg143; // includes G,W,C,F registers
32685reg [63:0] prev_reg144; // includes G,W,C,F registers
32686reg [63:0] prev_reg145; // includes G,W,C,F registers
32687reg [63:0] prev_reg146; // includes G,W,C,F registers
32688reg [63:0] prev_reg147; // includes G,W,C,F registers
32689reg [63:0] prev_reg148; // includes G,W,C,F registers
32690reg [63:0] prev_reg149; // includes G,W,C,F registers
32691reg [63:0] prev_reg150; // includes G,W,C,F registers
32692reg [63:0] prev_reg151; // includes G,W,C,F registers
32693reg [63:0] prev_reg152; // includes G,W,C,F registers
32694reg [63:0] prev_reg153; // includes G,W,C,F registers
32695reg [63:0] prev_reg154; // includes G,W,C,F registers
32696reg [63:0] prev_reg155; // includes G,W,C,F registers
32697reg [63:0] prev_reg156; // includes G,W,C,F registers
32698reg [63:0] prev_reg157; // includes G,W,C,F registers
32699reg [63:0] prev_reg158; // includes G,W,C,F registers
32700reg [63:0] prev_reg159; // includes G,W,C,F registers
32701reg [63:0] prev_reg160; // includes G,W,C,F registers
32702reg [63:0] prev_reg161; // includes G,W,C,F registers
32703reg [63:0] prev_reg162; // includes G,W,C,F registers
32704reg [63:0] prev_reg163; // includes G,W,C,F registers
32705reg [63:0] prev_reg164; // includes G,W,C,F registers
32706reg [63:0] prev_reg165; // includes G,W,C,F registers
32707reg [63:0] prev_reg166; // includes G,W,C,F registers
32708reg [63:0] prev_reg167; // includes G,W,C,F registers
32709reg [63:0] prev_reg168; // includes G,W,C,F registers
32710reg [63:0] prev_reg169; // includes G,W,C,F registers
32711reg [63:0] prev_reg170; // includes G,W,C,F registers
32712reg [63:0] prev_reg171; // includes G,W,C,F registers
32713reg [63:0] prev_reg172; // includes G,W,C,F registers
32714reg [63:0] prev_reg173; // includes G,W,C,F registers
32715reg [63:0] prev_reg174; // includes G,W,C,F registers
32716reg [63:0] prev_reg175; // includes G,W,C,F registers
32717reg [63:0] prev_reg176; // includes G,W,C,F registers
32718reg [63:0] prev_reg177; // includes G,W,C,F registers
32719reg [63:0] prev_reg178; // includes G,W,C,F registers
32720reg [63:0] prev_reg179; // includes G,W,C,F registers
32721reg [63:0] prev_reg180; // includes G,W,C,F registers
32722reg [63:0] prev_reg181; // includes G,W,C,F registers
32723reg [63:0] prev_reg182; // includes G,W,C,F registers
32724reg [63:0] prev_reg183; // includes G,W,C,F registers
32725reg [63:0] prev_reg184; // includes G,W,C,F registers
32726reg [63:0] prev_reg185; // includes G,W,C,F registers
32727reg [63:0] prev_reg186; // includes G,W,C,F registers
32728reg [63:0] prev_reg187; // includes G,W,C,F registers
32729reg [63:0] prev_reg188; // includes G,W,C,F registers
32730reg [63:0] prev_reg189; // includes G,W,C,F registers
32731reg [63:0] prev_reg190; // includes G,W,C,F registers
32732reg [63:0] prev_reg191; // includes G,W,C,F registers
32733reg [63:0] prev_reg192; // includes G,W,C,F registers
32734reg [63:0] prev_reg193; // includes G,W,C,F registers
32735reg [63:0] prev_reg194; // includes G,W,C,F registers
32736reg [63:0] prev_reg195; // includes G,W,C,F registers
32737reg [63:0] prev_reg196; // includes G,W,C,F registers
32738reg [63:0] prev_reg197; // includes G,W,C,F registers
32739reg [63:0] prev_reg198; // includes G,W,C,F registers
32740reg [63:0] prev_reg199; // includes G,W,C,F registers
32741reg [63:0] prev_reg200; // includes G,W,C,F registers
32742reg [63:0] prev_reg201; // includes G,W,C,F registers
32743reg [63:0] prev_reg202; // includes G,W,C,F registers
32744reg [63:0] prev_reg203; // includes G,W,C,F registers
32745reg [63:0] prev_reg204; // includes G,W,C,F registers
32746reg [63:0] prev_reg205; // includes G,W,C,F registers
32747reg [63:0] prev_reg206; // includes G,W,C,F registers
32748reg [63:0] prev_reg207; // includes G,W,C,F registers
32749reg [63:0] prev_reg208; // includes G,W,C,F registers
32750reg [63:0] prev_reg209; // includes G,W,C,F registers
32751reg [63:0] prev_reg210; // includes G,W,C,F registers
32752reg [63:0] prev_reg211; // includes G,W,C,F registers
32753reg [63:0] prev_reg212; // includes G,W,C,F registers
32754reg [63:0] prev_reg213; // includes G,W,C,F registers
32755reg [63:0] prev_reg214; // includes G,W,C,F registers
32756reg [63:0] prev_reg215; // includes G,W,C,F registers
32757reg [63:0] prev_reg216; // includes G,W,C,F registers
32758reg [63:0] prev_reg217; // includes G,W,C,F registers
32759reg [63:0] prev_reg218; // includes G,W,C,F registers
32760reg [63:0] prev_reg219; // includes G,W,C,F registers
32761reg [63:0] prev_reg220; // includes G,W,C,F registers
32762reg [63:0] prev_reg221; // includes G,W,C,F registers
32763reg [63:0] prev_reg222; // includes G,W,C,F registers
32764reg [63:0] prev_reg223; // includes G,W,C,F registers
32765reg [63:0] prev_reg224; // includes G,W,C,F registers
32766reg [63:0] prev_reg225; // includes G,W,C,F registers
32767reg [63:0] prev_reg226; // includes G,W,C,F registers
32768reg [63:0] prev_reg227; // includes G,W,C,F registers
32769reg [63:0] prev_reg228; // includes G,W,C,F registers
32770reg [63:0] prev_reg229; // includes G,W,C,F registers
32771reg [63:0] prev_reg230; // includes G,W,C,F registers
32772reg [63:0] prev_reg231; // includes G,W,C,F registers
32773reg [63:0] prev_reg232; // includes G,W,C,F registers
32774reg [63:0] prev_reg233; // includes G,W,C,F registers
32775reg [63:0] prev_reg234; // includes G,W,C,F registers
32776reg [63:0] prev_reg235; // includes G,W,C,F registers
32777reg [63:0] prev_reg236; // includes G,W,C,F registers
32778reg [63:0] prev_reg237; // includes G,W,C,F registers
32779reg [63:0] prev_reg238; // includes G,W,C,F registers
32780reg [63:0] prev_reg239; // includes G,W,C,F registers
32781reg [63:0] prev_reg240; // includes G,W,C,F registers
32782reg [63:0] prev_reg241; // includes G,W,C,F registers
32783reg [63:0] prev_reg242; // includes G,W,C,F registers
32784reg [63:0] prev_reg243; // includes G,W,C,F registers
32785reg [63:0] prev_reg244; // includes G,W,C,F registers
32786reg [63:0] prev_reg245; // includes G,W,C,F registers
32787reg [63:0] prev_reg246; // includes G,W,C,F registers
32788reg [63:0] prev_reg247; // includes G,W,C,F registers
32789reg [63:0] prev_reg248; // includes G,W,C,F registers
32790reg [63:0] prev_reg249; // includes G,W,C,F registers
32791reg [63:0] prev_reg250; // includes G,W,C,F registers
32792reg [63:0] prev_reg251; // includes G,W,C,F registers
32793reg [63:0] prev_reg252; // includes G,W,C,F registers
32794reg [63:0] prev_reg253; // includes G,W,C,F registers
32795reg [63:0] prev_reg254; // includes G,W,C,F registers
32796reg [63:0] prev_reg255; // includes G,W,C,F registers
32797
32798reg [1:0] th_gl; // copy of GL_reg
32799
32800reg [63:0] gl0_reg0;
32801reg [63:0] gl1_reg0;
32802reg [63:0] gl2_reg0;
32803reg [63:0] gl3_reg0;
32804reg [63:0] gl0_reg1;
32805reg [63:0] gl1_reg1;
32806reg [63:0] gl2_reg1;
32807reg [63:0] gl3_reg1;
32808reg [63:0] gl0_reg2;
32809reg [63:0] gl1_reg2;
32810reg [63:0] gl2_reg2;
32811reg [63:0] gl3_reg2;
32812reg [63:0] gl0_reg3;
32813reg [63:0] gl1_reg3;
32814reg [63:0] gl2_reg3;
32815reg [63:0] gl3_reg3;
32816reg [63:0] gl0_reg4;
32817reg [63:0] gl1_reg4;
32818reg [63:0] gl2_reg4;
32819reg [63:0] gl3_reg4;
32820reg [63:0] gl0_reg5;
32821reg [63:0] gl1_reg5;
32822reg [63:0] gl2_reg5;
32823reg [63:0] gl3_reg5;
32824reg [63:0] gl0_reg6;
32825reg [63:0] gl1_reg6;
32826reg [63:0] gl2_reg6;
32827reg [63:0] gl3_reg6;
32828reg [63:0] gl0_reg7;
32829reg [63:0] gl1_reg7;
32830reg [63:0] gl2_reg7;
32831reg [63:0] gl3_reg7;
32832
32833reg [63:0] win0_reg8;
32834reg [63:0] win1_reg8;
32835reg [63:0] win2_reg8;
32836reg [63:0] win3_reg8;
32837reg [63:0] win4_reg8;
32838reg [63:0] win5_reg8;
32839reg [63:0] win6_reg8;
32840reg [63:0] win7_reg8;
32841reg [63:0] win0_reg9;
32842reg [63:0] win1_reg9;
32843reg [63:0] win2_reg9;
32844reg [63:0] win3_reg9;
32845reg [63:0] win4_reg9;
32846reg [63:0] win5_reg9;
32847reg [63:0] win6_reg9;
32848reg [63:0] win7_reg9;
32849reg [63:0] win0_reg10;
32850reg [63:0] win1_reg10;
32851reg [63:0] win2_reg10;
32852reg [63:0] win3_reg10;
32853reg [63:0] win4_reg10;
32854reg [63:0] win5_reg10;
32855reg [63:0] win6_reg10;
32856reg [63:0] win7_reg10;
32857reg [63:0] win0_reg11;
32858reg [63:0] win1_reg11;
32859reg [63:0] win2_reg11;
32860reg [63:0] win3_reg11;
32861reg [63:0] win4_reg11;
32862reg [63:0] win5_reg11;
32863reg [63:0] win6_reg11;
32864reg [63:0] win7_reg11;
32865reg [63:0] win0_reg12;
32866reg [63:0] win1_reg12;
32867reg [63:0] win2_reg12;
32868reg [63:0] win3_reg12;
32869reg [63:0] win4_reg12;
32870reg [63:0] win5_reg12;
32871reg [63:0] win6_reg12;
32872reg [63:0] win7_reg12;
32873reg [63:0] win0_reg13;
32874reg [63:0] win1_reg13;
32875reg [63:0] win2_reg13;
32876reg [63:0] win3_reg13;
32877reg [63:0] win4_reg13;
32878reg [63:0] win5_reg13;
32879reg [63:0] win6_reg13;
32880reg [63:0] win7_reg13;
32881reg [63:0] win0_reg14;
32882reg [63:0] win1_reg14;
32883reg [63:0] win2_reg14;
32884reg [63:0] win3_reg14;
32885reg [63:0] win4_reg14;
32886reg [63:0] win5_reg14;
32887reg [63:0] win6_reg14;
32888reg [63:0] win7_reg14;
32889reg [63:0] win0_reg15;
32890reg [63:0] win1_reg15;
32891reg [63:0] win2_reg15;
32892reg [63:0] win3_reg15;
32893reg [63:0] win4_reg15;
32894reg [63:0] win5_reg15;
32895reg [63:0] win6_reg15;
32896reg [63:0] win7_reg15;
32897reg [63:0] win0_reg16;
32898reg [63:0] win1_reg16;
32899reg [63:0] win2_reg16;
32900reg [63:0] win3_reg16;
32901reg [63:0] win4_reg16;
32902reg [63:0] win5_reg16;
32903reg [63:0] win6_reg16;
32904reg [63:0] win7_reg16;
32905reg [63:0] win0_reg17;
32906reg [63:0] win1_reg17;
32907reg [63:0] win2_reg17;
32908reg [63:0] win3_reg17;
32909reg [63:0] win4_reg17;
32910reg [63:0] win5_reg17;
32911reg [63:0] win6_reg17;
32912reg [63:0] win7_reg17;
32913reg [63:0] win0_reg18;
32914reg [63:0] win1_reg18;
32915reg [63:0] win2_reg18;
32916reg [63:0] win3_reg18;
32917reg [63:0] win4_reg18;
32918reg [63:0] win5_reg18;
32919reg [63:0] win6_reg18;
32920reg [63:0] win7_reg18;
32921reg [63:0] win0_reg19;
32922reg [63:0] win1_reg19;
32923reg [63:0] win2_reg19;
32924reg [63:0] win3_reg19;
32925reg [63:0] win4_reg19;
32926reg [63:0] win5_reg19;
32927reg [63:0] win6_reg19;
32928reg [63:0] win7_reg19;
32929reg [63:0] win0_reg20;
32930reg [63:0] win1_reg20;
32931reg [63:0] win2_reg20;
32932reg [63:0] win3_reg20;
32933reg [63:0] win4_reg20;
32934reg [63:0] win5_reg20;
32935reg [63:0] win6_reg20;
32936reg [63:0] win7_reg20;
32937reg [63:0] win0_reg21;
32938reg [63:0] win1_reg21;
32939reg [63:0] win2_reg21;
32940reg [63:0] win3_reg21;
32941reg [63:0] win4_reg21;
32942reg [63:0] win5_reg21;
32943reg [63:0] win6_reg21;
32944reg [63:0] win7_reg21;
32945reg [63:0] win0_reg22;
32946reg [63:0] win1_reg22;
32947reg [63:0] win2_reg22;
32948reg [63:0] win3_reg22;
32949reg [63:0] win4_reg22;
32950reg [63:0] win5_reg22;
32951reg [63:0] win6_reg22;
32952reg [63:0] win7_reg22;
32953reg [63:0] win0_reg23;
32954reg [63:0] win1_reg23;
32955reg [63:0] win2_reg23;
32956reg [63:0] win3_reg23;
32957reg [63:0] win4_reg23;
32958reg [63:0] win5_reg23;
32959reg [63:0] win6_reg23;
32960reg [63:0] win7_reg23;
32961reg [63:0] win0_reg24;
32962reg [63:0] win1_reg24;
32963reg [63:0] win2_reg24;
32964reg [63:0] win3_reg24;
32965reg [63:0] win4_reg24;
32966reg [63:0] win5_reg24;
32967reg [63:0] win6_reg24;
32968reg [63:0] win7_reg24;
32969reg [63:0] win0_reg25;
32970reg [63:0] win1_reg25;
32971reg [63:0] win2_reg25;
32972reg [63:0] win3_reg25;
32973reg [63:0] win4_reg25;
32974reg [63:0] win5_reg25;
32975reg [63:0] win6_reg25;
32976reg [63:0] win7_reg25;
32977reg [63:0] win0_reg26;
32978reg [63:0] win1_reg26;
32979reg [63:0] win2_reg26;
32980reg [63:0] win3_reg26;
32981reg [63:0] win4_reg26;
32982reg [63:0] win5_reg26;
32983reg [63:0] win6_reg26;
32984reg [63:0] win7_reg26;
32985reg [63:0] win0_reg27;
32986reg [63:0] win1_reg27;
32987reg [63:0] win2_reg27;
32988reg [63:0] win3_reg27;
32989reg [63:0] win4_reg27;
32990reg [63:0] win5_reg27;
32991reg [63:0] win6_reg27;
32992reg [63:0] win7_reg27;
32993reg [63:0] win0_reg28;
32994reg [63:0] win1_reg28;
32995reg [63:0] win2_reg28;
32996reg [63:0] win3_reg28;
32997reg [63:0] win4_reg28;
32998reg [63:0] win5_reg28;
32999reg [63:0] win6_reg28;
33000reg [63:0] win7_reg28;
33001reg [63:0] win0_reg29;
33002reg [63:0] win1_reg29;
33003reg [63:0] win2_reg29;
33004reg [63:0] win3_reg29;
33005reg [63:0] win4_reg29;
33006reg [63:0] win5_reg29;
33007reg [63:0] win6_reg29;
33008reg [63:0] win7_reg29;
33009reg [63:0] win0_reg30;
33010reg [63:0] win1_reg30;
33011reg [63:0] win2_reg30;
33012reg [63:0] win3_reg30;
33013reg [63:0] win4_reg30;
33014reg [63:0] win5_reg30;
33015reg [63:0] win6_reg30;
33016reg [63:0] win7_reg30;
33017reg [63:0] win0_reg31;
33018reg [63:0] win1_reg31;
33019reg [63:0] win2_reg31;
33020reg [63:0] win3_reg31;
33021reg [63:0] win4_reg31;
33022reg [63:0] win5_reg31;
33023reg [63:0] win6_reg31;
33024reg [63:0] win7_reg31;
33025
33026reg [63:0] itagacc_fx5;
33027reg [63:0] itagacc_fb;
33028reg [63:0] itagacc_fw;
33029reg [63:0] itagacc_fw1;
33030reg [63:0] itagacc_fw2;
33031
33032reg [63:0] dtagacc_fx5;
33033reg [63:0] dtagacc_fb;
33034reg [63:0] dtagacc_fw;
33035reg [63:0] dtagacc_fw1;
33036reg [63:0] dtagacc_fw2;
33037
33038reg [47:0] dsfar_fb;
33039reg [47:0] dsfar_fw;
33040reg [47:0] dsfar_fw1;
33041reg [47:0] dsfar_fw2;
33042
33043reg [47:0] pc_fx4;
33044reg [47:0] pc_fx5;
33045reg [47:0] pc_fb;
33046reg [47:0] pc_fw;
33047reg [47:0] pc_fw1;
33048reg [47:0] pc_fw2;
33049reg [47:0] pc_last;
33050
33051reg tlu_complete_1;
33052reg tlu_complete_2;
33053reg tlu_complete_3;
33054
33055reg frf_w1_valid_fw1;
33056reg frf_w1_valid_fw2;
33057
33058reg frf_w1_skip_addr4_fw1;
33059reg frf_w1_skip_addr4_fw2;
33060reg [2:0] fprs_fb;
33061reg [2:0] fprs_fw;
33062reg [2:0] fprs_fw1;
33063reg [2:0] fprs_fw2;
33064
33065
33066reg [1:0] frf_w2_valid_fw;
33067reg [1:0] frf_w2_valid_bn;
33068reg [2:0] frf_w2_tid_fw;
33069reg [4:0] frf_w2_addr_fw;
33070
33071reg [1:0] frf_w1_valid_fw;
33072reg [2:0] frf_w1_tid_fw;
33073reg [4:0] frf_w1_addr_fw;
33074
33075reg thread_running;
33076
33077reg in_wmr;
33078reg wmr; // latched to get edge
33079reg por_a; // latched to get edge
33080reg por_b; // latched to get edge
33081
33082reg nas_pipe_enable; // Turns on nas_pipe capture and Riesling SSTEP
33083reg first_op;
33084reg [63:0] mytime;
33085wire [5:0] mytnum;
33086wire mytg;
33087integer junk;
33088integer myindex;
33089integer irf_offset;
33090wire oddwin;
33091wire frf_w1_valid_even;
33092wire frf_w1_valid_odd;
33093wire frf_w2_valid_even;
33094wire frf_w2_valid_odd;
33095wire [4:0] frf_w1_skip_addr;
33096wire [4:0] frf_w2_skip_addr;
33097reg good_trap_detected; // Used for -nosas only.
33098
33099//----------------------------------------------------------
33100`ifdef DEBUG_PIPE
33101
33102wire [63:0] g0;
33103wire [63:0] g1;
33104wire [63:0] g2;
33105wire [63:0] g3;
33106wire [63:0] g4;
33107wire [63:0] g5;
33108wire [63:0] g6;
33109wire [63:0] g7;
33110
33111wire [63:0] o0;
33112wire [63:0] o1;
33113wire [63:0] o2;
33114wire [63:0] o3;
33115wire [63:0] o4;
33116wire [63:0] o5;
33117wire [63:0] o6;
33118wire [63:0] o7;
33119
33120wire [63:0] l0;
33121wire [63:0] l1;
33122wire [63:0] l2;
33123wire [63:0] l3;
33124wire [63:0] l4;
33125wire [63:0] l5;
33126wire [63:0] l6;
33127wire [63:0] l7;
33128
33129wire [63:0] i0;
33130wire [63:0] i1;
33131wire [63:0] i2;
33132wire [63:0] i3;
33133wire [63:0] i4;
33134wire [63:0] i5;
33135wire [63:0] i6;
33136wire [63:0] i7;
33137
33138wire [31:0] frf_0;
33139wire [31:0] frf_1;
33140wire [31:0] frf_2;
33141wire [31:0] frf_3;
33142wire [31:0] frf_4;
33143wire [31:0] frf_5;
33144wire [31:0] frf_6;
33145wire [31:0] frf_7;
33146wire [31:0] frf_8;
33147wire [31:0] frf_9;
33148wire [31:0] frf_10;
33149wire [31:0] frf_11;
33150wire [31:0] frf_12;
33151wire [31:0] frf_13;
33152wire [31:0] frf_14;
33153wire [31:0] frf_15;
33154wire [31:0] frf_16;
33155wire [31:0] frf_17;
33156wire [31:0] frf_18;
33157wire [31:0] frf_19;
33158wire [31:0] frf_20;
33159wire [31:0] frf_21;
33160wire [31:0] frf_22;
33161wire [31:0] frf_23;
33162wire [31:0] frf_24;
33163wire [31:0] frf_25;
33164wire [31:0] frf_26;
33165wire [31:0] frf_27;
33166wire [31:0] frf_28;
33167wire [31:0] frf_29;
33168wire [31:0] frf_30;
33169wire [31:0] frf_31;
33170wire [31:0] frf_32;
33171wire [31:0] frf_33;
33172wire [31:0] frf_34;
33173wire [31:0] frf_35;
33174wire [31:0] frf_36;
33175wire [31:0] frf_37;
33176wire [31:0] frf_38;
33177wire [31:0] frf_39;
33178wire [31:0] frf_40;
33179wire [31:0] frf_41;
33180wire [31:0] frf_42;
33181wire [31:0] frf_43;
33182wire [31:0] frf_44;
33183wire [31:0] frf_45;
33184wire [31:0] frf_46;
33185wire [31:0] frf_47;
33186wire [31:0] frf_48;
33187wire [31:0] frf_49;
33188wire [31:0] frf_50;
33189wire [31:0] frf_51;
33190wire [31:0] frf_52;
33191wire [31:0] frf_53;
33192wire [31:0] frf_54;
33193wire [31:0] frf_55;
33194wire [31:0] frf_56;
33195wire [31:0] frf_57;
33196wire [31:0] frf_58;
33197wire [31:0] frf_59;
33198wire [31:0] frf_60;
33199wire [31:0] frf_61;
33200wire [31:0] frf_62;
33201wire [31:0] frf_63;
33202
33203wire [`DELTA_WIDTH:0] delta_fx4_0;
33204wire [`DELTA_WIDTH:0] delta_fx4_1;
33205wire [`DELTA_WIDTH:0] delta_fx4_2;
33206wire [`DELTA_WIDTH:0] delta_fx4_3;
33207wire [`DELTA_WIDTH:0] delta_fx4_4;
33208wire [`DELTA_WIDTH:0] delta_fx4_5;
33209wire [`DELTA_WIDTH:0] delta_fx4_6;
33210wire [`DELTA_WIDTH:0] delta_fx4_7;
33211
33212wire [`DELTA_WIDTH:0] delta_fx5_0;
33213wire [`DELTA_WIDTH:0] delta_fx5_1;
33214wire [`DELTA_WIDTH:0] delta_fx5_2;
33215wire [`DELTA_WIDTH:0] delta_fx5_3;
33216wire [`DELTA_WIDTH:0] delta_fx5_4;
33217wire [`DELTA_WIDTH:0] delta_fx5_5;
33218wire [`DELTA_WIDTH:0] delta_fx5_6;
33219wire [`DELTA_WIDTH:0] delta_fx5_7;
33220
33221wire [`DELTA_WIDTH:0] delta_fb_0;
33222wire [`DELTA_WIDTH:0] delta_fb_1;
33223wire [`DELTA_WIDTH:0] delta_fb_2;
33224wire [`DELTA_WIDTH:0] delta_fb_3;
33225wire [`DELTA_WIDTH:0] delta_fb_4;
33226wire [`DELTA_WIDTH:0] delta_fb_5;
33227wire [`DELTA_WIDTH:0] delta_fb_6;
33228wire [`DELTA_WIDTH:0] delta_fb_7;
33229
33230wire [`DELTA_WIDTH:0] delta_fw_0;
33231wire [`DELTA_WIDTH:0] delta_fw_1;
33232wire [`DELTA_WIDTH:0] delta_fw_2;
33233wire [`DELTA_WIDTH:0] delta_fw_3;
33234wire [`DELTA_WIDTH:0] delta_fw_4;
33235wire [`DELTA_WIDTH:0] delta_fw_5;
33236wire [`DELTA_WIDTH:0] delta_fw_6;
33237wire [`DELTA_WIDTH:0] delta_fw_7;
33238
33239wire [`DELTA_WIDTH:0] delta_fw1_0;
33240wire [`DELTA_WIDTH:0] delta_fw1_1;
33241wire [`DELTA_WIDTH:0] delta_fw1_2;
33242wire [`DELTA_WIDTH:0] delta_fw1_3;
33243wire [`DELTA_WIDTH:0] delta_fw1_4;
33244wire [`DELTA_WIDTH:0] delta_fw1_5;
33245wire [`DELTA_WIDTH:0] delta_fw1_6;
33246wire [`DELTA_WIDTH:0] delta_fw1_7;
33247
33248wire [`DELTA_WIDTH:0] delta_fw2_0;
33249wire [`DELTA_WIDTH:0] delta_fw2_1;
33250wire [`DELTA_WIDTH:0] delta_fw2_2;
33251wire [`DELTA_WIDTH:0] delta_fw2_3;
33252wire [`DELTA_WIDTH:0] delta_fw2_4;
33253wire [`DELTA_WIDTH:0] delta_fw2_5;
33254wire [`DELTA_WIDTH:0] delta_fw2_6;
33255wire [`DELTA_WIDTH:0] delta_fw2_7;
33256
33257wire [`DELTA_WIDTH:0] delta_prev_0;
33258wire [`DELTA_WIDTH:0] delta_prev_1;
33259wire [`DELTA_WIDTH:0] delta_prev_2;
33260wire [`DELTA_WIDTH:0] delta_prev_3;
33261wire [`DELTA_WIDTH:0] delta_prev_4;
33262wire [`DELTA_WIDTH:0] delta_prev_5;
33263wire [`DELTA_WIDTH:0] delta_prev_6;
33264wire [`DELTA_WIDTH:0] delta_prev_7;
33265
33266initial begin
33267 #0;
33268 `PR_ALWAYS ("arg", `ALWAYS,"T%0d DEBUG_PIPE turned ON",mytnum);
33269end
33270
33271//----------------------------------------------------------
33272// Note: no remap of %g,%o,%l,%i regs based on CWP or GL
33273assign g0 = (mytid<=3) ? `IRF6_EXU0[( 0+irf_offset)] : `IRF6_EXU1[( 0+irf_offset)];
33274assign g1 = (mytid<=3) ? `IRF6_EXU0[( 1+irf_offset)] : `IRF6_EXU1[( 1+irf_offset)];
33275assign g2 = (mytid<=3) ? `IRF6_EXU0[( 2+irf_offset)] : `IRF6_EXU1[( 2+irf_offset)];
33276assign g3 = (mytid<=3) ? `IRF6_EXU0[( 3+irf_offset)] : `IRF6_EXU1[( 3+irf_offset)];
33277assign g4 = (mytid<=3) ? `IRF6_EXU0[( 4+irf_offset)] : `IRF6_EXU1[( 4+irf_offset)];
33278assign g5 = (mytid<=3) ? `IRF6_EXU0[( 5+irf_offset)] : `IRF6_EXU1[( 5+irf_offset)];
33279assign g6 = (mytid<=3) ? `IRF6_EXU0[( 6+irf_offset)] : `IRF6_EXU1[( 6+irf_offset)];
33280assign g7 = (mytid<=3) ? `IRF6_EXU0[( 7+irf_offset)] : `IRF6_EXU1[( 7+irf_offset)];
33281
33282assign o0 = (mytid<=3) ? `IRF6_EXU0[( 8+irf_offset)] : `IRF6_EXU1[( 8+irf_offset)];
33283assign o1 = (mytid<=3) ? `IRF6_EXU0[( 9+irf_offset)] : `IRF6_EXU1[( 9+irf_offset)];
33284assign o2 = (mytid<=3) ? `IRF6_EXU0[(10+irf_offset)] : `IRF6_EXU1[(10+irf_offset)];
33285assign o3 = (mytid<=3) ? `IRF6_EXU0[(11+irf_offset)] : `IRF6_EXU1[(11+irf_offset)];
33286assign o4 = (mytid<=3) ? `IRF6_EXU0[(12+irf_offset)] : `IRF6_EXU1[(12+irf_offset)];
33287assign o5 = (mytid<=3) ? `IRF6_EXU0[(13+irf_offset)] : `IRF6_EXU1[(13+irf_offset)];
33288assign o6 = (mytid<=3) ? `IRF6_EXU0[(14+irf_offset)] : `IRF6_EXU1[(14+irf_offset)];
33289assign o7 = (mytid<=3) ? `IRF6_EXU0[(15+irf_offset)] : `IRF6_EXU1[(15+irf_offset)];
33290
33291assign l0 = (mytid<=3) ? `IRF6_EXU0[(16+irf_offset)] : `IRF6_EXU1[(16+irf_offset)];
33292assign l1 = (mytid<=3) ? `IRF6_EXU0[(17+irf_offset)] : `IRF6_EXU1[(17+irf_offset)];
33293assign l2 = (mytid<=3) ? `IRF6_EXU0[(18+irf_offset)] : `IRF6_EXU1[(18+irf_offset)];
33294assign l3 = (mytid<=3) ? `IRF6_EXU0[(19+irf_offset)] : `IRF6_EXU1[(19+irf_offset)];
33295assign l4 = (mytid<=3) ? `IRF6_EXU0[(20+irf_offset)] : `IRF6_EXU1[(20+irf_offset)];
33296assign l5 = (mytid<=3) ? `IRF6_EXU0[(21+irf_offset)] : `IRF6_EXU1[(21+irf_offset)];
33297assign l6 = (mytid<=3) ? `IRF6_EXU0[(22+irf_offset)] : `IRF6_EXU1[(22+irf_offset)];
33298assign l7 = (mytid<=3) ? `IRF6_EXU0[(23+irf_offset)] : `IRF6_EXU1[(23+irf_offset)];
33299
33300assign i0 = (mytid<=3) ? `IRF6_EXU0[(24+irf_offset)] : `IRF6_EXU1[(24+irf_offset)];
33301assign i1 = (mytid<=3) ? `IRF6_EXU0[(25+irf_offset)] : `IRF6_EXU1[(25+irf_offset)];
33302assign i2 = (mytid<=3) ? `IRF6_EXU0[(26+irf_offset)] : `IRF6_EXU1[(26+irf_offset)];
33303assign i3 = (mytid<=3) ? `IRF6_EXU0[(27+irf_offset)] : `IRF6_EXU1[(27+irf_offset)];
33304assign i4 = (mytid<=3) ? `IRF6_EXU0[(28+irf_offset)] : `IRF6_EXU1[(28+irf_offset)];
33305assign i5 = (mytid<=3) ? `IRF6_EXU0[(29+irf_offset)] : `IRF6_EXU1[(29+irf_offset)];
33306assign i6 = (mytid<=3) ? `IRF6_EXU0[(30+irf_offset)] : `IRF6_EXU1[(30+irf_offset)];
33307assign i7 = (mytid<=3) ? `IRF6_EXU0[(31+irf_offset)] : `IRF6_EXU1[(31+irf_offset)];
33308
33309//----------------------------------------------------------
33310assign frf_0 = `FRF6_EVEN[(mytid*32)+ 0];
33311assign frf_2 = `FRF6_EVEN[(mytid*32)+ 1];
33312assign frf_4 = `FRF6_EVEN[(mytid*32)+ 2];
33313assign frf_6 = `FRF6_EVEN[(mytid*32)+ 3];
33314assign frf_8 = `FRF6_EVEN[(mytid*32)+ 4];
33315assign frf_10 = `FRF6_EVEN[(mytid*32)+ 5];
33316assign frf_12 = `FRF6_EVEN[(mytid*32)+ 6];
33317assign frf_14 = `FRF6_EVEN[(mytid*32)+ 7];
33318assign frf_16 = `FRF6_EVEN[(mytid*32)+ 8];
33319assign frf_18 = `FRF6_EVEN[(mytid*32)+ 9];
33320assign frf_20 = `FRF6_EVEN[(mytid*32)+ 10];
33321assign frf_22 = `FRF6_EVEN[(mytid*32)+ 11];
33322assign frf_24 = `FRF6_EVEN[(mytid*32)+ 12];
33323assign frf_26 = `FRF6_EVEN[(mytid*32)+ 13];
33324assign frf_28 = `FRF6_EVEN[(mytid*32)+ 14];
33325assign frf_30 = `FRF6_EVEN[(mytid*32)+ 15];
33326assign frf_32 = `FRF6_EVEN[(mytid*32)+ 16];
33327assign frf_34 = `FRF6_EVEN[(mytid*32)+ 17];
33328assign frf_36 = `FRF6_EVEN[(mytid*32)+ 18];
33329assign frf_38 = `FRF6_EVEN[(mytid*32)+ 19];
33330assign frf_40 = `FRF6_EVEN[(mytid*32)+ 20];
33331assign frf_42 = `FRF6_EVEN[(mytid*32)+ 21];
33332assign frf_44 = `FRF6_EVEN[(mytid*32)+ 22];
33333assign frf_46 = `FRF6_EVEN[(mytid*32)+ 23];
33334assign frf_48 = `FRF6_EVEN[(mytid*32)+ 24];
33335assign frf_50 = `FRF6_EVEN[(mytid*32)+ 25];
33336assign frf_52 = `FRF6_EVEN[(mytid*32)+ 26];
33337assign frf_54 = `FRF6_EVEN[(mytid*32)+ 27];
33338assign frf_56 = `FRF6_EVEN[(mytid*32)+ 28];
33339assign frf_58 = `FRF6_EVEN[(mytid*32)+ 29];
33340assign frf_60 = `FRF6_EVEN[(mytid*32)+ 30];
33341assign frf_62 = `FRF6_EVEN[(mytid*32)+ 31];
33342
33343assign frf_1 = `FRF6_ODD[(mytid*32)+ 0];
33344assign frf_3 = `FRF6_ODD[(mytid*32)+ 1];
33345assign frf_5 = `FRF6_ODD[(mytid*32)+ 2];
33346assign frf_7 = `FRF6_ODD[(mytid*32)+ 3];
33347assign frf_9 = `FRF6_ODD[(mytid*32)+ 4];
33348assign frf_11 = `FRF6_ODD[(mytid*32)+ 5];
33349assign frf_13 = `FRF6_ODD[(mytid*32)+ 6];
33350assign frf_15 = `FRF6_ODD[(mytid*32)+ 7];
33351assign frf_17 = `FRF6_ODD[(mytid*32)+ 8];
33352assign frf_19 = `FRF6_ODD[(mytid*32)+ 9];
33353assign frf_21 = `FRF6_ODD[(mytid*32)+ 10];
33354assign frf_23 = `FRF6_ODD[(mytid*32)+ 11];
33355assign frf_25 = `FRF6_ODD[(mytid*32)+ 12];
33356assign frf_27 = `FRF6_ODD[(mytid*32)+ 13];
33357assign frf_29 = `FRF6_ODD[(mytid*32)+ 14];
33358assign frf_31 = `FRF6_ODD[(mytid*32)+ 15];
33359assign frf_33 = `FRF6_ODD[(mytid*32)+ 16];
33360assign frf_35 = `FRF6_ODD[(mytid*32)+ 17];
33361assign frf_37 = `FRF6_ODD[(mytid*32)+ 18];
33362assign frf_39 = `FRF6_ODD[(mytid*32)+ 19];
33363assign frf_41 = `FRF6_ODD[(mytid*32)+ 20];
33364assign frf_43 = `FRF6_ODD[(mytid*32)+ 21];
33365assign frf_45 = `FRF6_ODD[(mytid*32)+ 22];
33366assign frf_47 = `FRF6_ODD[(mytid*32)+ 23];
33367assign frf_49 = `FRF6_ODD[(mytid*32)+ 24];
33368assign frf_51 = `FRF6_ODD[(mytid*32)+ 25];
33369assign frf_53 = `FRF6_ODD[(mytid*32)+ 26];
33370assign frf_55 = `FRF6_ODD[(mytid*32)+ 27];
33371assign frf_57 = `FRF6_ODD[(mytid*32)+ 28];
33372assign frf_59 = `FRF6_ODD[(mytid*32)+ 29];
33373assign frf_61 = `FRF6_ODD[(mytid*32)+ 30];
33374assign frf_63 = `FRF6_ODD[(mytid*32)+ 31];
33375
33376//----------------------------------------------------------
33377assign delta_fx4_0 = delta_fx4[0];
33378assign delta_fx4_1 = delta_fx4[1];
33379assign delta_fx4_2 = delta_fx4[2];
33380assign delta_fx4_3 = delta_fx4[3];
33381assign delta_fx4_4 = delta_fx4[4];
33382assign delta_fx4_5 = delta_fx4[5];
33383assign delta_fx4_6 = delta_fx4[6];
33384assign delta_fx4_7 = delta_fx4[7];
33385
33386assign delta_fx5_0 = delta_fx5[0];
33387assign delta_fx5_1 = delta_fx5[1];
33388assign delta_fx5_2 = delta_fx5[2];
33389assign delta_fx5_3 = delta_fx5[3];
33390assign delta_fx5_4 = delta_fx5[4];
33391assign delta_fx5_5 = delta_fx5[5];
33392assign delta_fx5_6 = delta_fx5[6];
33393assign delta_fx5_7 = delta_fx5[7];
33394
33395assign delta_fb_0 = delta_fb[0];
33396assign delta_fb_1 = delta_fb[1];
33397assign delta_fb_2 = delta_fb[2];
33398assign delta_fb_3 = delta_fb[3];
33399assign delta_fb_4 = delta_fb[4];
33400assign delta_fb_5 = delta_fb[5];
33401assign delta_fb_6 = delta_fb[6];
33402assign delta_fb_7 = delta_fb[7];
33403
33404assign delta_fw_0 = delta_fw[0];
33405assign delta_fw_1 = delta_fw[1];
33406assign delta_fw_2 = delta_fw[2];
33407assign delta_fw_3 = delta_fw[3];
33408assign delta_fw_4 = delta_fw[4];
33409assign delta_fw_5 = delta_fw[5];
33410assign delta_fw_6 = delta_fw[6];
33411assign delta_fw_7 = delta_fw[7];
33412
33413assign delta_fw1_0 = delta_fw1[0];
33414assign delta_fw1_1 = delta_fw1[1];
33415assign delta_fw1_2 = delta_fw1[2];
33416assign delta_fw1_3 = delta_fw1[3];
33417assign delta_fw1_4 = delta_fw1[4];
33418assign delta_fw1_5 = delta_fw1[5];
33419assign delta_fw1_6 = delta_fw1[6];
33420assign delta_fw1_7 = delta_fw1[7];
33421
33422assign delta_fw2_0 = delta_fw2[0];
33423assign delta_fw2_1 = delta_fw2[1];
33424assign delta_fw2_2 = delta_fw2[2];
33425assign delta_fw2_3 = delta_fw2[3];
33426assign delta_fw2_4 = delta_fw2[4];
33427assign delta_fw2_5 = delta_fw2[5];
33428assign delta_fw2_6 = delta_fw2[6];
33429assign delta_fw2_7 = delta_fw2[7];
33430
33431assign delta_prev_0 = delta_prev[0];
33432assign delta_prev_1 = delta_prev[1];
33433assign delta_prev_2 = delta_prev[2];
33434assign delta_prev_3 = delta_prev[3];
33435assign delta_prev_4 = delta_prev[4];
33436assign delta_prev_5 = delta_prev[5];
33437assign delta_prev_6 = delta_prev[6];
33438assign delta_prev_7 = delta_prev[7];
33439
33440`endif // DEBUG_PIPE
33441//----------------------------------------------------------
33442
33443//----------------------------------------------------------
33444assign mytnum = (mycid*8)+mytid;
33445assign mytg = mytid >> 2;
33446
33447assign exu_complete = exu_valid & ~(`PROBES6.clkstop_d5|`TOP.in_reset|`SPC6.tcu_scan_en);
33448assign imul_complete = imul_valid & ~(`TOP.in_reset|`SPC6.tcu_scan_en);
33449assign idiv_complete = idiv_valid & ~(`TOP.in_reset|`SPC6.tcu_scan_en);
33450assign tlu_complete = tlu_complete_3 ;
33451assign fp_complete = fp_valid & ~(`TOP.in_reset|`SPC6.tcu_scan_en);
33452assign fdiv_complete = fdiv_valid & ~(`TOP.in_reset|`SPC6.tcu_scan_en);
33453assign lsu_complete = lsu_valid & ~(`TOP.in_reset|`SPC6.tcu_scan_en);
33454assign asi_complete = asi_valid & ~(`TOP.in_reset|`SPC6.tcu_scan_en);
33455
33456assign complete_w = (exu_complete << `EXU_INDEX) |
33457 (lsu_complete << `LSU_INDEX) |
33458 (tlu_complete << `TLU_INDEX) |
33459 (asi_complete << `ASI_INDEX) ;
33460
33461assign oddwin = CWP_reg % 2;
33462
33463assign frf_w1_valid_even = (frf_w1_tid_fw == mytid) & frf_w1_valid_fw[1];
33464assign frf_w1_valid_odd = (frf_w1_tid_fw == mytid) & frf_w1_valid_fw[0];
33465assign frf_w2_valid_even = (frf_w2_tid_fw == mytid) & frf_w2_valid_fw[1];
33466assign frf_w2_valid_odd = (frf_w2_tid_fw == mytid) & frf_w2_valid_fw[0];
33467
33468assign frf_w1_skip_addr = frf_w1_addr_fw;
33469assign frf_w2_skip_addr = frf_w2_addr_fw;
33470
33471//-----------------
33472// ADD_TSB_CFG
33473// NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
33474`ifdef ADD_TSB_CFG
33475wire [63:0] ctxt_z_tsb_cfg0_reg = `PROBES6.ctxt_z_tsb_cfg0_reg[mytid];
33476wire [63:0] ctxt_z_tsb_cfg1_reg = `PROBES6.ctxt_z_tsb_cfg1_reg[mytid];
33477wire [63:0] ctxt_z_tsb_cfg2_reg = `PROBES6.ctxt_z_tsb_cfg2_reg[mytid];
33478wire [63:0] ctxt_z_tsb_cfg3_reg = `PROBES6.ctxt_z_tsb_cfg3_reg[mytid];
33479wire [63:0] ctxt_nz_tsb_cfg0_reg = `PROBES6.ctxt_nz_tsb_cfg0_reg[mytid];
33480wire [63:0] ctxt_nz_tsb_cfg1_reg = `PROBES6.ctxt_nz_tsb_cfg1_reg[mytid];
33481wire [63:0] ctxt_nz_tsb_cfg2_reg = `PROBES6.ctxt_nz_tsb_cfg2_reg[mytid];
33482wire [63:0] ctxt_nz_tsb_cfg3_reg = `PROBES6.ctxt_nz_tsb_cfg3_reg[mytid];
33483`endif
33484
33485//----------------------------------------------------------
33486// Pipelined Signals
33487always @ (posedge `BENCH_SPC6_GCLK) begin // {
33488
33489 // TLU is async to the execution pipeline
33490 // but needs to be delayed to allow CWP, etc to update and be stable
33491 // before arch state is captured and diff_reg is called.
33492 // Done for FLUSHW
33493
33494 // FDIV was moved from fw1 to fw to allow FPRS to be stable before capture
33495 tlu_complete_1 <= tlu_valid & ~(`TOP.in_reset|`SPC6.tcu_scan_en);
33496 tlu_complete_2 <= tlu_complete_1;
33497 tlu_complete_3 <= tlu_complete_2;
33498
33499 itagacc_fx5 <= I_TAG_ACC_reg; // Signal changes in W so need to pipeline to fw2
33500 itagacc_fb <= itagacc_fx5;
33501 itagacc_fw <= itagacc_fb;
33502 itagacc_fw1 <= itagacc_fw;
33503 itagacc_fw2 <= itagacc_fw1;
33504
33505 dtagacc_fx5 <= D_TAG_ACC_reg; // Signal changes in W so need to pipeline to fw2
33506 dtagacc_fb <= dtagacc_fx5;
33507 dtagacc_fw <= dtagacc_fb;
33508 dtagacc_fw1 <= dtagacc_fw;
33509 dtagacc_fw2 <= dtagacc_fw1;
33510
33511 dsfar_fb <= DSFAR_reg; // Signal changes in W+1 so need to pipeline to fw2
33512 dsfar_fw <= dsfar_fb;
33513 dsfar_fw1 <= dsfar_fw;
33514 dsfar_fw2 <= dsfar_fw1;
33515
33516 pc_fx4 <= PC_reg;
33517 pc_fx5 <= pc_fx4;
33518 pc_fb <= pc_fx5;
33519 pc_fw <= pc_fb;
33520 pc_fw1 <= pc_fw;
33521 pc_fw2 <= pc_fw1;
33522
33523 cwp_fx4 <= CWP_reg;
33524 cwp_fx5 <= cwp_fx4;
33525 cwp_fb <= cwp_fx5;
33526 cwp_fw <= cwp_fb;
33527 cwp_fw1 <= cwp_fw;
33528 cwp_fw2 <= cwp_fw1;
33529
33530 complete_fx4 <= complete_w;
33531 complete_fx5 <= complete_fx4 ;
33532 complete_fb <= complete_fx5 |
33533 (idiv_complete << `IDIV_INDEX);
33534 complete_fw <= complete_fb |
33535 (fdiv_complete << `FDIV_INDEX) |
33536 (imul_complete << `IMUL_INDEX);
33537 complete_fw1 <= complete_fw |
33538 (fp_complete << `FP_INDEX);
33539
33540 complete_fw2 <= complete_fw1;
33541
33542 frf_w1_valid_fw1 <= (frf_w1_valid_odd | frf_w1_valid_even) & fp_complete;
33543 frf_w1_valid_fw2 <= frf_w1_valid_fw1;
33544
33545 frf_w1_skip_addr4_fw1 <= frf_w1_skip_addr[4];
33546 frf_w1_skip_addr4_fw2 <= frf_w1_skip_addr4_fw1;
33547
33548 fprs_fb <= FPRS_reg;
33549 fprs_fw <= fprs_fb;
33550 fprs_fw1 <= fprs_fw;
33551 fprs_fw2 <= fprs_fw1;
33552
33553 frf_w2_valid_fw <= frf_w2_valid_bn;
33554 frf_w2_tid_fw <= frf_w2_tid;
33555 frf_w2_addr_fw <= frf_w2_addr;
33556
33557 frf_w1_valid_fw <= frf_w1_valid;
33558 frf_w1_tid_fw <= frf_w1_tid;
33559 frf_w1_addr_fw <= frf_w1_addr;
33560
33561 // Thread running
33562
33563 if (~thread_running & `SPC6.tcu_core_running[mytid])
33564 `TOP.th_last_act_cycle[mytnum] = `TOP.core_cycle_cnt;
33565
33566 thread_running <= `SPC6.tcu_core_running[mytid];
33567
33568 // Reset some register prev state on wmr negation
33569 if (`SPC6.rst_wmr_protect && ~wmr)
33570 wmr_prev;
33571
33572 if (por_a && ~por_b)
33573 por_prev;
33574
33575 wmr <= `SPC6.rst_wmr_protect;
33576 por_a <= `TOP.in_por;
33577 por_b <= por_a;
33578
33579 if (`SPC6.rst_wmr_protect)
33580 in_wmr <= 1;
33581
33582end // }
33583
33584//----------------------------------------------------------
33585// Holding state for registers that may be updated asynchronously
33586// after synchronous update, but before capture/step. Also for reads,
33587// when register is read and modified before capture/step ..
33588// We capture the value /write time, and use that for sstep,
33589// ignoring any async updates, which are sent in the NEXT sstep ..
33590//
33591reg [63:0] asi_updated_int_rec;
33592reg asi_rdwr_int_rec;
33593reg asi_wr_int_rec_delay;
33594
33595reg asi_updated_hintp;
33596reg asi_rdwr_hintp;
33597reg asi_wr_hintp_delay;
33598
33599reg [16:0] asi_updated_softint;
33600reg asi_rdwr_softint;
33601reg asi_wr_softint_delay;
33602reg [16:0] asi_softint_wrdata;
33603
33604always @(posedge `BENCH_SPC6_GCLK) begin // {
33605
33606 // Corner case : If async and sync wr occur in same clock, then the async
33607 // update takes place. In this case we have to capture the
33608 // value of the write WITHOUT async bit being set, so that
33609 // we can sync with Riesling's sync write ..
33610
33611 asi_wr_int_rec_delay <= ( `SPC6.tlu.cth.asi_wr_int_rec[mytid] |
33612 `SPC6.tlu.asi_rd_inc_vec_2[mytid]);
33613
33614 if (`SPC6.tlu.cth.asi_wr_int_rec[mytid] |
33615 ((`SPC6.tlu.asi.rd_inc_vec) &&
33616 (`SPC6.tlu.asi.rd_tid_dec[mytid])) |
33617 (`SPC6.tlu.asi_rd_int_rec &
33618 `SPC6.tlu.cth.int_rec_mux_sel==mytid))
33619 begin // {
33620
33621 if (`SPC6.tlu.cth.asi_wr_int_rec[mytid])
33622 asi_updated_int_rec <= `SPC6.tlu.cth.int_rec ;
33623 else if ( (`SPC6.tlu.asi.rd_inc_vec) &&
33624 (`SPC6.tlu.asi.rd_tid_dec[mytid]) )
33625 if (`SPC6.tlu.cth.cxi_wr_int_dis[mytid]) begin
33626 asi_updated_int_rec <= INTR_RECEIVE_reg & `SPC6.tlu.cth.int_rec_muxed_;
33627 asi_updated_int_rec[`SPC6.tlu.cth.incoming_vector_in] <= 1'b0 ;
33628 end
33629 else
33630 begin
33631 asi_updated_int_rec <= `SPC6.tlu.cth.int_rec_muxed ;
33632 asi_updated_int_rec[`SPC6.tlu.cth.incoming_vector_in] <= 1'b0 ;
33633 end
33634 else
33635 asi_updated_int_rec <= INTR_RECEIVE_reg;
33636 asi_rdwr_int_rec <= 1'b1;
33637 end //}
33638 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
33639 asi_rdwr_int_rec <= 1'b0;
33640
33641 asi_wr_hintp_delay <= `SPC6.tlu.asi_wr_hintp[mytid];
33642
33643 if (`SPC6.tlu.asi_wr_hintp[mytid] |
33644 `SPC6.tlu.asi_rd_hintp[mytid])
33645 begin // {
33646 if (`SPC6.tlu.asi_wr_hintp[mytid])
33647 asi_updated_hintp <= `SPC6.tlu.asi_wr_data_0[0] ;
33648 else
33649 asi_updated_hintp <= HINTP_reg;
33650 asi_rdwr_hintp <= 1'b1;
33651 end //}
33652 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
33653 asi_rdwr_hintp <= 1'b0;
33654
33655 asi_wr_softint_delay <= (`SPC6.tlu.asi_wr_softint[mytid] |
33656 `SPC6.tlu.asi_wr_clear_softint[mytid] |
33657 `SPC6.tlu.asi_wr_set_softint[mytid]);
33658
33659 if (`SPC6.tlu.asi_wr_clear_softint[mytid])
33660 asi_softint_wrdata <= ~`SPC6.tlu.asi_wr_data_0[16:0] & rd_SOFTINT_reg;
33661 else if (`SPC6.tlu.asi_wr_set_softint[mytid])
33662 asi_softint_wrdata <= `SPC6.tlu.asi_wr_data_0[16:0] | rd_SOFTINT_reg;
33663 else
33664 asi_softint_wrdata <= `SPC6.tlu.asi_wr_data_0[16:0];
33665
33666 if (asi_wr_softint_delay | `SPC6.tlu.asi_rd_softint[mytid])
33667 begin // {
33668 if (asi_wr_softint_delay)
33669 asi_updated_softint <= asi_softint_wrdata ;
33670 else
33671 asi_updated_softint <= rd_SOFTINT_reg ;
33672 asi_rdwr_softint <= 1'b1;
33673 end //}
33674 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
33675 asi_rdwr_softint <= 1'b0;
33676end //}
33677
33678//----------------------------------------------------------
33679// Negedge sampling to avoid race on specific signals ..
33680//
33681always @ (negedge `BENCH_SPC6_GCLK) begin // {
33682 frf_w2_valid_bn <= frf_w2_valid;
33683end //}
33684
33685//----------------------------------------------------------
33686// When instruction completes,
33687// Push differences to simics
33688
33689always @ (posedge `BENCH_SPC6_GCLK) begin // {
33690
33691 if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable && ~`SPC6.tcu_scan_en && ~`TOP.in_por) begin // {
33692
33693
33694 //----------
33695 // Update window registers
33696 if (CWP_reg != `NASTOP.th_cwp[mytnum]) begin // {
33697 copy_win (CWP_reg,`NASTOP.th_cwp[mytnum]);
33698 `NASTOP.th_cwp[mytnum] = CWP_reg;
33699 end // }
33700
33701 //----------
33702 // Update global registers
33703 // Wait for warm-reset flush related toggling to settle
33704 if (GL_reg != th_gl) begin // {
33705 if (`SPC6.spc_core_running_status[mytid] &
33706 ~`SPC6.rst_wmr_protect) begin // {
33707 copy_global (GL_reg,th_gl);
33708 th_gl = GL_reg;
33709 end // }
33710 end // }
33711
33712 //----------
33713 // Check for bad signal values
33714 check_values;
33715
33716 //----------
33717 // Step Simics
33718 //
33719 // if NASTOP.sstep_sent[tid]=1,
33720 // then SSTEP was set by another module (i.e. tlb_sync)
33721
33722 if (`PARGS.nas_check_on) begin // {
33723 mytime = `TOP.core_cycle_cnt-1;
33724 if (complete_fw2 && (`NASTOP.sstep_sent[mytnum]==1'b0)) begin // {
33725 `PR_INFO ("pli_nas", `INFO, " C%0d T%0d PLI_SSTEP tid=%d pc=%h ts=%0d ",
33726 mycid,mytid,mytnum,pc_fw2,mytime);
33727 junk = $sim_send(`PLI_SSTEP, mytnum);
33728 // Always clear sstep_early
33729 // In case tlb_sync asserted it too late for complete_fw2
33730 `NASTOP.sstep_early[mytnum] <= 1'b0;
33731 end //}
33732 else if (complete_fw2) begin // {
33733 `NASTOP.sstep_sent[mytnum] <= 1'b0; // re-arm SSTEP
33734 `NASTOP.sstep_early[mytnum] <= 1'b0;
33735 `PR_INFO ("pli_nas", `INFO, " C%0d T%0d PLI_SSTEP tid=%d pc=%h ts=%0d (nas_pipe: skip sstep. rearm sstep. sstep_sent=0)",
33736 mycid,mytid,mytnum,pc_fw2,mytime);
33737 end //}
33738 end //}
33739
33740 //----------
33741 // Only capture if something completes and not first instruction
33742 if (complete_fw2 && !first_op) begin // {
33743 update_pc;
33744 push_simics; // Use with AXIS to keep from getting timeout
33745 end // }
33746
33747 // Pipeline runs continuously
33748 // Other than when in POR ..
33749 update_fx4;
33750 update_fx5;
33751 update_fb;
33752 update_fw;
33753 update_fw1;
33754 update_fw2;
33755 // Only save to delta_prev when something completes
33756 if (complete_fw2) begin
33757 update_fw2_async;
33758 update_prev;
33759 first_op = 0;
33760 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
33761 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
33762 end
33763
33764
33765`ifndef EMUL_TL
33766 //----------
33767 // If something was captured but no instruction is in the pipeline
33768 if ((delta_fw2[`NEXT_INDEX]!=`FIRST_INDEX) && (complete_fw2 == 0))
33769 begin // {
33770
33771 for (myindex=`FIRST_INDEX; myindex<delta_fw2[`NEXT_INDEX]; myindex=myindex+1)
33772 begin // {
33773 print_entry (delta_fw2[myindex]);
33774 end //}
33775 `PR_ERROR ("nas",`ERROR, "T%0d Unexpected Reg change in DUT. Special case - no instruction retired.", mytnum);
33776
33777 end // }
33778`endif
33779
33780
33781 //----------
33782 // End detection for non-sas runs ..
33783
33784 for (junk=0;junk<`PARGS.bad_trap_count;junk=junk+1)
33785 if (({16'b0,pc_fw2}&`PC_MASK) ===
33786 (`PARGS.bad_trap_addr[junk]&`PC_MASK)) begin // {
33787 // Disable nas_pipe processing (capture & SSTEP)
33788 // to speed up simulation (minimize socket traffic,etc)
33789 nas_pipe_enable=1'b0;
33790 if (! `PARGS.nas_check_on) begin //{
33791 `PR_ERROR ("nas",`ERROR, "T%0d reached Bad Trap", mytnum);
33792 end //}
33793 end //}
33794
33795 for (junk=0;junk<`PARGS.good_trap_count;junk=junk+1)
33796 if ((|complete_fw2) && (({16'b0,pc_fw2}&`PC_MASK) ===
33797 (`PARGS.good_trap_addr[junk]&`PC_MASK))) begin // {
33798 // Disable nas_pipe processing (capture & SSTEP)
33799 // to speed up simulation (minimize socket traffic,etc)
33800 nas_pipe_enable=1'b0;
33801 if (! `PARGS.nas_check_on) begin //{
33802 good_trap_detected = 1'b1;
33803 end //}
33804 end //}
33805
33806 // Check Thread level timeout
33807 if (thread_running &&
33808 (`TOP.core_cycle_cnt - `TOP.th_last_act_cycle[mytnum]) > `PARGS.th_timeout)
33809 begin // {
33810 // Note: Do not change this message because regreport parses it for certain words.
33811 `PR_ALWAYS ("nas",`ALWAYS, "ERROR: Thread T%0d No Activity for %0d Cycles - Thread TIMEOUT!",
33812 mytnum, `PARGS.th_timeout);
33813 junk = incErr(9999); // must exceed users max error setting to force exit.
33814 end //}
33815
33816 end // if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable ...)}
33817
33818 // if -nosas only,
33819 // Need to make sure Store Buffer is empty before turning off th_check_enable.
33820 //global chkr requires to wait for all outstanding pending I
33821 if ((! `PARGS.nas_check_on) &&
33822 (good_trap_detected==1'b1) &&
33823 (`TOP.nas_top.lsu_stb_empty[mytnum]) && `TOP.nas_top.ireq_pending[mytnum]) begin // {
33824 `PARGS.th_check_enable[mytnum] = 1'b0;
33825 `TOP.finished_tids[mytnum] = 1'b1;
33826 good_trap_detected = 1'b0;
33827 `PR_NORMAL ("nas", `NORMAL, "T%0d reached Good Trap. Disabling checking for thread %0d", mytnum,mytnum);
33828 end // }
33829end // always }
33830
33831//----------------------------------------------------------
33832//----------------------------------------------------------
33833// Stage FX4 of delta pipeline
33834task update_fx4;
33835
33836 integer i;
33837 reg [7:0] index;
33838
33839 begin // {
33840
33841 `ifndef EMUL_TL
33842 index = `FIRST_INDEX;
33843
33844 //--------------------
33845 // Init delta_fx4
33846 delta_fx4[`NEXT_INDEX] <= `FIRST_INDEX;
33847 delta_fx4[`TIME_INDEX] <= 0;
33848 delta_fx4[`PC_INDEX] <= {16'b0,PC_reg};
33849 delta_fx4[`GL_INDEX] <= GL_reg;
33850 delta_fx4[`CWP_INDEX] <= CWP_reg;
33851 delta_fx4[`OPCODE_INDEX] <= opcode;
33852 delta_fx4[`FIRST_INDEX] <= 77'hx;
33853 `else
33854 index = 0;
33855 `endif
33856
33857 end // }
33858endtask
33859
33860//----------------------------------------------------------
33861// Stage FX5 of delta pipeline
33862task update_fx5;
33863
33864 integer i;
33865 reg [7:0] index;
33866 reg [38:0] frf_tmp;
33867
33868 begin // {
33869
33870 `ifndef EMUL_TL
33871 index = delta_fx4[`NEXT_INDEX];
33872
33873 //--------------------
33874 // Pipeline previous stage
33875 for (i=0; i<=delta_fx4[`NEXT_INDEX]; i=i+1) begin // {
33876 delta_fx5[i] <= delta_fx4[i];
33877 end
33878 `else
33879 index = 0;
33880 `endif
33881
33882 //-------------------
33883 // Control Registers
33884 if (complete_fx4) begin // LSU | EXU | TLU
33885 push_delta_fx5 (`CCR+`CTL_OFFSET,CCR_reg,index);
33886 end
33887
33888 //-------------------
33889 // Update IRF6
33890`ifndef NAS_NO_IRFFRF
33891 if (complete_fx4[`LSU_INDEX] |
33892 complete_fx4[`EXU_INDEX]) begin
33893 if (mytid <= 3) begin // {
33894 for (i=0; i<=31; i=i+1) begin // {
33895 push_delta_fx5 (i,`IRF6_EXU0[(remap(i,oddwin)+irf_offset)],index);
33896 end // }
33897 end // }
33898 else begin // {
33899 for (i=0; i<=31; i=i+1) begin // {
33900 push_delta_fx5 (i,`IRF6_EXU1[(remap(i,oddwin)+irf_offset)],index);
33901 end // }
33902 end // }
33903 end
33904`endif
33905
33906 //--------------------
33907 // Update FRF6 - Loads use W2 Port.
33908`ifndef NAS_NO_IRFFRF
33909 if (complete_fx4[`LSU_INDEX]) begin // {
33910 // IF W1 port is also being written, ignore that address
33911 for (i=0; i<=31; i=i+1) begin // {
33912 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
33913 frf_tmp = `FRF6_EVEN[(mytid*32)+i];
33914 push_delta_fx5 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
33915 end // }
33916 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
33917 frf_tmp = `FRF6_ODD[(mytid*32)+i];
33918 push_delta_fx5 (`FP_OFFSET + (i*2)+1, frf_tmp[31:0], index);
33919 end // }
33920 end //}
33921 end // }
33922`endif
33923
33924 // Update ASR/ASI registers
33925 if (complete_fx4) begin // {
33926 push_delta_fx5 (`PSTATE + `CTL_OFFSET,PSTATE_reg,index);
33927 push_delta_fx5 (`HPSTATE + `CTL_OFFSET,HPSTATE_reg,index);
33928 push_delta_fx5 (`PIL + `CTL_OFFSET,PIL_reg,index);
33929 push_delta_fx5 (`TBA + `CTL_OFFSET,{TBA_reg,15'b0},index);
33930 push_delta_fx5 (`GL + `CTL_OFFSET,GL_reg,index);
33931 push_delta_fx5 (`HTBA + `CTL_OFFSET,{HTBA_reg,14'b0},index);
33932 push_delta_fx5 (`VER + `CTL_OFFSET,VER_reg,index);
33933 push_delta_fx5 (`Y + `CTL_OFFSET,Y_reg,index);
33934 push_delta_fx5 (`ASI + `CTL_OFFSET,ASI_reg,index);
33935 push_delta_fx5 (`STICK_CMPR + `CTL_OFFSET,STICK_CMPR_wire,index);
33936 push_delta_fx5 (`HSTICK_CMPR + `CTL_OFFSET,HSTICK_CMPR_wire,index);
33937 push_delta_fx5 (`TICK_CMPR + `CTL_OFFSET,TICK_CMPR_wire,index);
33938 push_delta_fx5 (`CWP + `CTL_OFFSET,CWP_reg,index);
33939 push_delta_fx5 (`CANSAVE + `CTL_OFFSET,CANSAVE_reg,index);
33940 push_delta_fx5 (`CANRESTORE + `CTL_OFFSET,CANRESTORE_reg,index);
33941 push_delta_fx5 (`CLEANWIN + `CTL_OFFSET,CLEANWIN_reg,index);
33942 push_delta_fx5 (`OTHERWIN + `CTL_OFFSET,OTHERWIN_reg,index);
33943 push_delta_fx5 (`WSTATE + `CTL_OFFSET,WSTATE_reg,index);
33944
33945 push_delta_fx5 (`CTXT_PRIM_0+`CTL_OFFSET,CTXT_PRIM_0_reg,index);
33946 push_delta_fx5 (`CTXT_SEC_0+`CTL_OFFSET,CTXT_SEC_0_reg,index);
33947 push_delta_fx5 (`CTXT_PRIM_1+`CTL_OFFSET,CTXT_PRIM_1_reg,index);
33948 push_delta_fx5 (`CTXT_SEC_1+`CTL_OFFSET,CTXT_SEC_1_reg,index);
33949 push_delta_fx5 (`LSU_CONTROL+`CTL_OFFSET,LSU_CONTROL_reg,index);
33950 push_delta_fx5 (`WATCHPOINT_ADDR+`CTL_OFFSET,WATCHPOINT_ADDR_reg,index);
33951
33952 // NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
33953 // ADD_TSB_CFG
33954 `ifdef ADD_TSB_CFG
33955 push_delta_fx5 (`CTXT_Z_TSB_CFG0+`CTL_OFFSET,ctxt_z_tsb_cfg0_reg,index);
33956 push_delta_fx5 (`CTXT_Z_TSB_CFG1+`CTL_OFFSET,ctxt_z_tsb_cfg1_reg,index);
33957 push_delta_fx5 (`CTXT_Z_TSB_CFG2+`CTL_OFFSET,ctxt_z_tsb_cfg2_reg,index);
33958 push_delta_fx5 (`CTXT_Z_TSB_CFG3+`CTL_OFFSET,ctxt_z_tsb_cfg3_reg,index);
33959 push_delta_fx5 (`CTXT_NZ_TSB_CFG0+`CTL_OFFSET,ctxt_nz_tsb_cfg0_reg,index);
33960 push_delta_fx5 (`CTXT_NZ_TSB_CFG1+`CTL_OFFSET,ctxt_nz_tsb_cfg1_reg,index);
33961 push_delta_fx5 (`CTXT_NZ_TSB_CFG2+`CTL_OFFSET,ctxt_nz_tsb_cfg2_reg,index);
33962 push_delta_fx5 (`CTXT_NZ_TSB_CFG3+`CTL_OFFSET,ctxt_nz_tsb_cfg3_reg,index);
33963 `endif
33964
33965 end //}
33966
33967 // Update GSR for all except write ASR in progess
33968 if (!asi_in_progress) begin // {
33969 push_delta_fx5 (`GSR + `CTL_OFFSET,GSR_wire, index);
33970 end // }
33971
33972 // If lsu_complete & fp_complete assert at same time,
33973 // then the fp_complete is the one that will modify the FSR
33974 if (complete_fx4[`LSU_INDEX] & !complete_fw1[`FP_INDEX]) begin
33975 push_delta_fx5 (`FSR+`CTL_OFFSET,FSR_wire,index);
33976 end
33977
33978 // Non Trap updates of Trap stack & level
33979 if (complete_fx4 && !complete_fx4[`TLU_INDEX]) begin // {
33980 push_delta_fx5 (`TL + `CTL_OFFSET,TL_reg,index);
33981 push_delta_fx5 (`TPC1 + `CTL_OFFSET, TPC1_wire, index);
33982 push_delta_fx5 (`TPC2 + `CTL_OFFSET, TPC2_wire, index);
33983 push_delta_fx5 (`TPC3 + `CTL_OFFSET, TPC3_wire, index);
33984 push_delta_fx5 (`TPC4 + `CTL_OFFSET, TPC4_wire, index);
33985 push_delta_fx5 (`TPC5 + `CTL_OFFSET, TPC5_wire, index);
33986 push_delta_fx5 (`TPC6 + `CTL_OFFSET, TPC6_wire, index);
33987 push_delta_fx5 (`TNPC1 + `CTL_OFFSET, TNPC1_wire, index);
33988 push_delta_fx5 (`TNPC2 + `CTL_OFFSET, TNPC2_wire, index);
33989 push_delta_fx5 (`TNPC3 + `CTL_OFFSET, TNPC3_wire, index);
33990 push_delta_fx5 (`TNPC4 + `CTL_OFFSET, TNPC4_wire, index);
33991 push_delta_fx5 (`TNPC5 + `CTL_OFFSET, TNPC5_wire, index);
33992 push_delta_fx5 (`TNPC6 + `CTL_OFFSET, TNPC6_wire, index);
33993 push_delta_fx5 (`TSTATE1 + `CTL_OFFSET, TSTATE1_wire, index);
33994 push_delta_fx5 (`TSTATE2 + `CTL_OFFSET, TSTATE2_wire, index);
33995 push_delta_fx5 (`TSTATE3 + `CTL_OFFSET, TSTATE3_wire, index);
33996 push_delta_fx5 (`TSTATE4 + `CTL_OFFSET, TSTATE4_wire, index);
33997 push_delta_fx5 (`TSTATE5 + `CTL_OFFSET, TSTATE5_wire, index);
33998 push_delta_fx5 (`TSTATE6 + `CTL_OFFSET, TSTATE6_wire, index);
33999 push_delta_fx5 (`HTSTATE1 + `CTL_OFFSET, HTSTATE1_wire, index);
34000 push_delta_fx5 (`HTSTATE2 + `CTL_OFFSET, HTSTATE2_wire, index);
34001 push_delta_fx5 (`HTSTATE3 + `CTL_OFFSET, HTSTATE3_wire, index);
34002 push_delta_fx5 (`HTSTATE4 + `CTL_OFFSET, HTSTATE4_wire, index);
34003 push_delta_fx5 (`HTSTATE5 + `CTL_OFFSET, HTSTATE5_wire, index);
34004 push_delta_fx5 (`HTSTATE6 + `CTL_OFFSET, HTSTATE6_wire, index);
34005 push_delta_fx5 (`TT1 + `CTL_OFFSET, TT1_wire, index);
34006 push_delta_fx5 (`TT2 + `CTL_OFFSET, TT2_wire, index);
34007 push_delta_fx5 (`TT3 + `CTL_OFFSET, TT3_wire, index);
34008 push_delta_fx5 (`TT4 + `CTL_OFFSET, TT4_wire, index);
34009 push_delta_fx5 (`TT5 + `CTL_OFFSET, TT5_wire, index);
34010 push_delta_fx5 (`TT6 + `CTL_OFFSET, TT6_wire, index);
34011 end //}
34012
34013 end // }
34014endtask
34015
34016//----------------------------------------------------------
34017// Stage FB of delta pipeline
34018task update_fb;
34019
34020 integer i;
34021 reg [7:0] index;
34022
34023 begin // {
34024
34025 `ifndef EMUL_TL
34026 index = delta_fx5[`NEXT_INDEX];
34027
34028 //--------------------
34029 // Pipeline previous stage
34030 for (i=0; i<=delta_fx5[`NEXT_INDEX]; i=i+1) begin // {
34031 delta_fb[i] <= delta_fx5[i];
34032 end
34033 `else
34034 index = 0;
34035 `endif
34036
34037 // ASI/ASR ONLY updates
34038 if (complete_fx5[`ASI_INDEX]) begin // {
34039 push_delta_fb (`GSR + `CTL_OFFSET,GSR_wire, index);
34040 end //}
34041
34042 end // }
34043endtask
34044
34045//----------------------------------------------------------
34046// Stage FW of delta pipeline
34047task update_fw;
34048
34049 integer i;
34050 reg [7:0] index;
34051 reg [38:0] frf_tmp;
34052
34053 begin // {
34054
34055 `ifndef EMUL_TL
34056 index = delta_fb[`NEXT_INDEX];
34057
34058 //--------------------
34059 // Pipeline previous stage
34060 for (i=0; i<=delta_fb[`NEXT_INDEX]; i=i+1) begin // {
34061 delta_fw[i] <= delta_fb[i];
34062 end
34063
34064 // Capture CWP_reg for SAVE/RESTORE
34065 if (imul_complete) begin
34066 delta_fw[`CWP_INDEX] <= CWP_reg;
34067 end
34068 `else
34069 index = 0;
34070 `endif
34071
34072 //-------------------
34073 // Update IRF6
34074`ifndef NAS_NO_IRFFRF
34075 if (complete_fb[`TLU_INDEX]) begin
34076 if (mytid <= 3) begin // {
34077 for (i=0; i<=31; i=i+1) begin // {
34078 push_delta_fw (i,`IRF6_EXU0[(remap(i,oddwin)+irf_offset)],index);
34079 end // }
34080 end // }
34081 else begin // {
34082 for (i=0; i<=31; i=i+1) begin // {
34083 push_delta_fw (i,`IRF6_EXU1[(remap(i,oddwin)+irf_offset)],index);
34084 end // }
34085 end // }
34086 end
34087`endif
34088
34089 //--------------------
34090 // Update FRF6 - Idivs use W2.
34091`ifndef NAS_NO_IRFFRF
34092 if (complete_fb[`IDIV_INDEX]) begin // {
34093 // IF W1 port is also being written, ignore that address
34094 for (i=0; i<=31; i=i+1) begin // {
34095 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
34096 frf_tmp = `FRF6_EVEN[(mytid*32)+i];
34097 push_delta_fw (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
34098 end // }
34099 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
34100 frf_tmp = `FRF6_ODD[(mytid*32)+i];
34101 push_delta_fw (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
34102 end // }
34103 end //}
34104 end // }
34105`endif
34106
34107 end // }
34108
34109endtask
34110
34111//----------------------------------------------------------
34112// Stage FW1 of delta pipeline
34113task update_fw1;
34114
34115 integer i;
34116 reg [7:0] index;
34117
34118 reg [4:0] rdnum;
34119 reg [38:0] frf_tmp;
34120
34121 begin // {
34122
34123 `ifndef EMUL_TL
34124 index = delta_fw[`NEXT_INDEX];
34125
34126 //--------------------
34127 // Pipeline previous stage
34128 for (i=0; i<=delta_fw[`NEXT_INDEX]; i=i+1) begin // {
34129 delta_fw1[i] <= delta_fw[i];
34130 end
34131 `else
34132 index = 0;
34133 `endif
34134
34135 //--------------------
34136 // Update FRF6 - FPops use W1 port.
34137`ifndef NAS_NO_IRFFRF
34138 if (fp_complete) begin // {
34139 // IF W2 port is also being written, ignore that address
34140 for (i=0; i<=31; i=i+1) begin // {
34141 if (!((i == frf_w2_skip_addr) && frf_w2_valid_even)) begin // {
34142 frf_tmp = `FRF6_EVEN[(mytid*32)+i];
34143 push_delta_fw1 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
34144 end // }
34145 if (!((i == frf_w2_skip_addr) && frf_w2_valid_odd)) begin // {
34146 frf_tmp = `FRF6_ODD[(mytid*32)+i];
34147 push_delta_fw1 (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
34148 end // }
34149 end //}
34150 end // }
34151`endif
34152
34153 //-------------------
34154 // Control Registers
34155 if (complete_fw[`IMUL_INDEX]|complete_fw[`IDIV_INDEX]) begin
34156 push_delta_fw1 (`CCR+`CTL_OFFSET,CCR_reg,index);
34157 push_delta_fw1 (`Y+`CTL_OFFSET,Y_reg,index);
34158 push_delta_fw1 (`CWP+`CTL_OFFSET,CWP_reg,index);
34159 push_delta_fw1 (`CANSAVE+`CTL_OFFSET,CANSAVE_reg,index);
34160 push_delta_fw1 (`CANRESTORE+`CTL_OFFSET,CANRESTORE_reg,index);
34161 push_delta_fw1 (`CLEANWIN+`CTL_OFFSET,CLEANWIN_reg,index);
34162 push_delta_fw1 (`OTHERWIN+`CTL_OFFSET,OTHERWIN_reg,index);
34163 push_delta_fw1 (`WSTATE+`CTL_OFFSET,WSTATE_reg,index);
34164 end
34165
34166 // Update Trap Stack now
34167 if (complete_fw[`TLU_INDEX]) begin // {
34168 push_delta_fw1 (`TL + `CTL_OFFSET,TL_reg,index);
34169 push_delta_fw1 (`TPC1 + `CTL_OFFSET, TPC1_wire, index);
34170 push_delta_fw1 (`TPC2 + `CTL_OFFSET, TPC2_wire, index);
34171 push_delta_fw1 (`TPC3 + `CTL_OFFSET, TPC3_wire, index);
34172 push_delta_fw1 (`TPC4 + `CTL_OFFSET, TPC4_wire, index);
34173 push_delta_fw1 (`TPC5 + `CTL_OFFSET, TPC5_wire, index);
34174 push_delta_fw1 (`TPC6 + `CTL_OFFSET, TPC6_wire, index);
34175 push_delta_fw1 (`TNPC1 + `CTL_OFFSET, TNPC1_wire, index);
34176 push_delta_fw1 (`TNPC2 + `CTL_OFFSET, TNPC2_wire, index);
34177 push_delta_fw1 (`TNPC3 + `CTL_OFFSET, TNPC3_wire, index);
34178 push_delta_fw1 (`TNPC4 + `CTL_OFFSET, TNPC4_wire, index);
34179 push_delta_fw1 (`TNPC5 + `CTL_OFFSET, TNPC5_wire, index);
34180 push_delta_fw1 (`TNPC6 + `CTL_OFFSET, TNPC6_wire, index);
34181 push_delta_fw1 (`TSTATE1 + `CTL_OFFSET, TSTATE1_wire, index);
34182 push_delta_fw1 (`TSTATE2 + `CTL_OFFSET, TSTATE2_wire, index);
34183 push_delta_fw1 (`TSTATE3 + `CTL_OFFSET, TSTATE3_wire, index);
34184 push_delta_fw1 (`TSTATE4 + `CTL_OFFSET, TSTATE4_wire, index);
34185 push_delta_fw1 (`TSTATE5 + `CTL_OFFSET, TSTATE5_wire, index);
34186 push_delta_fw1 (`TSTATE6 + `CTL_OFFSET, TSTATE6_wire, index);
34187 push_delta_fw1 (`HTSTATE1 + `CTL_OFFSET, HTSTATE1_wire, index);
34188 push_delta_fw1 (`HTSTATE2 + `CTL_OFFSET, HTSTATE2_wire, index);
34189 push_delta_fw1 (`HTSTATE3 + `CTL_OFFSET, HTSTATE3_wire, index);
34190 push_delta_fw1 (`HTSTATE4 + `CTL_OFFSET, HTSTATE4_wire, index);
34191 push_delta_fw1 (`HTSTATE5 + `CTL_OFFSET, HTSTATE5_wire, index);
34192 push_delta_fw1 (`HTSTATE6 + `CTL_OFFSET, HTSTATE6_wire, index);
34193 push_delta_fw1 (`TT1 + `CTL_OFFSET, TT1_wire, index);
34194 push_delta_fw1 (`TT2 + `CTL_OFFSET, TT2_wire, index);
34195 push_delta_fw1 (`TT3 + `CTL_OFFSET, TT3_wire, index);
34196 push_delta_fw1 (`TT4 + `CTL_OFFSET, TT4_wire, index);
34197 push_delta_fw1 (`TT5 + `CTL_OFFSET, TT5_wire, index);
34198 push_delta_fw1 (`TT6 + `CTL_OFFSET, TT6_wire, index);
34199 end //}
34200
34201 end // }
34202endtask
34203
34204//----------------------------------------------------------
34205// Stage FW2 of delta pipeline
34206task update_fw2;
34207
34208 integer i;
34209 reg [7:0] index;
34210 reg [38:0] frf_tmp;
34211
34212 begin // {
34213
34214 `ifndef EMUL_TL
34215 index = delta_fw1[`NEXT_INDEX];
34216
34217 //--------------------
34218 // Pipeline previous stage
34219 for (i=0; i<=delta_fw1[`NEXT_INDEX]; i=i+1) begin // {
34220 delta_fw2[i] <= delta_fw1[i];
34221 end
34222
34223 delta_fw2[`TIME_INDEX] <= $time;
34224 `else
34225 index = 0;
34226 `endif
34227
34228 // Update Registers that may change asynchronously
34229 // If sstep was already sent by another module,
34230 // don't capture until the next sstep
34231 if (complete_fw1 && !`NASTOP.sstep_early[mytnum]) begin // {
34232 if ((complete_fw1[`ASI_INDEX]|complete_fw1[`LSU_INDEX]) & asi_rdwr_hintp)
34233 push_delta_fw2 (`HINTP + `CTL_OFFSET,asi_updated_hintp,index);
34234 else
34235 push_delta_fw2 (`HINTP + `CTL_OFFSET,HINTP_reg,index);
34236 if ((complete_fw1[`ASI_INDEX]|complete_fw1[`LSU_INDEX]) & asi_rdwr_softint)
34237 push_delta_fw2 (`SOFTINT + `CTL_OFFSET,asi_updated_softint,index);
34238 else
34239 push_delta_fw2 (`SOFTINT + `CTL_OFFSET,rd_SOFTINT_reg,index);
34240 end // }
34241
34242 //-------------------
34243 // Update IRF6
34244`ifndef NAS_NO_IRFFRF
34245 if (complete_fw1[`IMUL_INDEX] |
34246 complete_fw1[`IDIV_INDEX]) begin // {
34247 if (mytid <= 3) begin // {
34248 for (i=0; i<=31; i=i+1) begin // {
34249 push_delta_fw2 (i,`IRF6_EXU0[(remap(i,oddwin)+irf_offset)],index);
34250 end // }
34251 end // }
34252 else begin // {
34253 for (i=0; i<=31; i=i+1) begin // {
34254 push_delta_fw2 (i,`IRF6_EXU1[(remap(i,oddwin)+irf_offset)],index);
34255 end // }
34256 end // }
34257 end // }
34258`endif
34259
34260 //--------------------
34261 // Update FRF6 - fdivs and Imuls use W2 port
34262`ifndef NAS_NO_IRFFRF
34263 if (complete_fw1[`IMUL_INDEX] |
34264 complete_fw1[`FDIV_INDEX] ) begin // {
34265 // IF W1 port is also being written, ignore that address
34266 for (i=0; i<=31; i=i+1) begin // {
34267 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
34268 frf_tmp = `FRF6_EVEN[(mytid*32)+i];
34269 push_delta_fw2 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
34270 end // }
34271 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
34272 frf_tmp = `FRF6_ODD[(mytid*32)+i];
34273 push_delta_fw2 (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
34274 end // }
34275 end //}
34276 end // }
34277`endif
34278
34279 if (complete_fw1[`FP_INDEX] |
34280 complete_fw1[`TLU_INDEX] |
34281 complete_fw1[`FDIV_INDEX]) begin
34282 push_delta_fw2 (`FSR+`CTL_OFFSET,FSR_wire,index);
34283 end
34284
34285 if (complete_fw1) begin
34286 push_delta_fw2 (`I_TAG_ACC+`CTL_OFFSET,itagacc_fw2,index);
34287 push_delta_fw2 (`D_TAG_ACC+`CTL_OFFSET,dtagacc_fw2,index);
34288 push_delta_fw2 (`DSFAR+`CTL_OFFSET,dsfar_fw2,index);
34289 end
34290
34291 end // }
34292endtask
34293
34294//----------------------------------------------------------
34295// Stage FW2 of delta pipeline - for signals that change FW+2 !!
34296task update_fw2_async;
34297
34298 integer i;
34299 reg [7:0] index;
34300 reg [2:0] dummy_fprs;
34301
34302 begin // {
34303
34304 `ifndef EMUL_TL
34305 index = delta_fw2[`NEXT_INDEX];
34306 `else
34307 index = 0;
34308 `endif
34309
34310 // Since FPRS for FPops may have been corrupted by o-o-o loads:
34311 // If fprs_fw2 is != fprs_reg & there are loads in the pipeline
34312 // then assume loads have already updated fprs.
34313 // In that case, create our own fprs_reg by using the valids and
34314 // skip_addr and copy of fprs for this op..
34315 if (complete_fw2[`FP_INDEX] && frf_w1_valid_fw2) begin // {
34316 // o-o-o load has changed fprs already - use dummy
34317 if ((fprs_fw2 != FPRS_reg) && (complete_fw1[`LSU_INDEX] |
34318 complete_fw[`LSU_INDEX] | complete_fb[`LSU_INDEX] |
34319 complete_fx5[`LSU_INDEX] )) begin // {
34320 dummy_fprs = read_prev(`FPRS + `CTL_OFFSET);
34321 dummy_fprs = dummy_fprs |
34322 {1'b0, frf_w1_skip_addr4_fw2, ~frf_w1_skip_addr4_fw2};
34323 push_delta_fw2_async (`FPRS + `CTL_OFFSET,dummy_fprs,index);
34324 end //}
34325 // o-o-o load has NOT changed fprs already - use it
34326 else begin // {
34327 push_delta_fw2_async (`FPRS + `CTL_OFFSET,FPRS_reg,index);
34328 end //}
34329 end //}
34330 // Load FPRS for loads/reads as prev|fprs_fb ..
34331 // since loads may only 'set' bits, not clear ...
34332 else if (complete_fw2[`LSU_INDEX]) begin // {
34333 dummy_fprs = read_prev(`FPRS + `CTL_OFFSET);
34334 dummy_fprs = dummy_fprs | fprs_fw1;
34335 push_delta_fw2_async (`FPRS +`CTL_OFFSET,dummy_fprs,index);
34336 end // }
34337 // Load FPRS for store ASI or FDIV
34338 // FDIV can update FPRS on w1 or w2,
34339 // but the pipe is stalled behind it so no o-o-o loads.
34340 else if ((complete_fw2[`ASI_INDEX]) ||
34341 (complete_fw2[`FDIV_INDEX])) begin // {
34342 push_delta_fw2_async (`FPRS + `CTL_OFFSET,FPRS_reg,index);
34343 end //}
34344
34345 end // }
34346endtask
34347
34348//----------------------------------------------------------
34349// Store latest values into delta
34350// Capture of next PC
34351task update_pc;
34352 reg [7:0] index;
34353 begin
34354 `ifndef EMUL_TL
34355 index = delta_prev[`NEXT_INDEX];
34356 `else
34357 index = 0;
34358 `endif
34359
34360 if (in_wmr & ~`SPC6.rst_wmr_protect) begin // {
34361 push_delta_prev_async ( `PC+`CTL_OFFSET,{16'b0,pc_fw2|1},index);
34362 in_wmr <= 0;
34363 end // }
34364 else
34365 push_delta_prev_async ( `PC+`CTL_OFFSET,{16'b0,pc_fw2},index);
34366 pc_last <= pc_fw2;
34367 cwp_last <= cwp_fw2;
34368 end
34369endtask
34370
34371//----------------------------------------------------------
34372//----------------------------------------------------------
34373// Compare with current state and capture if different
34374task push_delta_fx4;
34375
34376 input [7:0] id;
34377 input [63:0] act_value;
34378 inout [7:0] next;
34379 reg [2:0] win;
34380 reg [1:0] type;
34381
34382 begin // {
34383 if (act_value != read_prev(id)) begin // { // Diff vs prev
34384 calc_cwp(CWP_reg,id,win,type); // special case for 1st stage
34385 write_prev(id,act_value);
34386
34387 `ifndef EMUL_TL
34388 delta_fx4[next] <= {type,win,id,act_value};
34389 next = next+1;
34390 delta_fx4[next] <= 77'hx;
34391 delta_fx4[`NEXT_INDEX] <= next;
34392 if (`PARGS.axis_debug_on) begin
34393 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
34394 mytnum,PC_reg,id,type,win,act_value,$time);
34395 end
34396 `else
34397 if (`PARGS.axis_debug_on) begin
34398 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
34399 mytnum,PC_reg,id,type,win,act_value,$time);
34400 end
34401 `endif
34402 end //}
34403 end //}
34404
34405endtask
34406
34407//----------------------------------------------------------
34408// Compare with current state and capture if different
34409task push_delta_fx5;
34410
34411 input [7:0] id;
34412 input [63:0] act_value;
34413 inout [7:0] next;
34414 reg [2:0] win;
34415 reg [1:0] type;
34416
34417 begin // {
34418 if (act_value != read_prev(id)) begin // { // Diff vs prev
34419 `ifndef EMUL_TL
34420 calc_cwp(delta_fx4[`CWP_INDEX],id,win,type);
34421 write_prev(id,act_value);
34422 delta_fx5[next] <= {type,win,id,act_value};
34423 next = next+1;
34424 delta_fx5[next] <= 77'hx;
34425 delta_fx5[`NEXT_INDEX] <= next;
34426 if (`PARGS.axis_debug_on) begin
34427 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
34428 mytnum,pc_fx4,id,type,win,act_value,$time);
34429 end
34430 `else
34431 calc_cwp(cwp_fx4,id,win,type);
34432 if (`PARGS.axis_debug_on) begin
34433 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
34434 mytnum,pc_fx4,id,type,win,act_value,$time);
34435 end
34436 `endif
34437 end //}
34438 end //}
34439
34440endtask
34441
34442//----------------------------------------------------------
34443// Compare with current state and capture if different
34444task push_delta_fb;
34445
34446 input [7:0] id;
34447 input [63:0] act_value;
34448 inout [7:0] next;
34449 reg [2:0] win;
34450 reg [1:0] type;
34451
34452 begin // {
34453 if (act_value != read_prev(id)) begin // { // Diff vs prev
34454 `ifndef EMUL_TL
34455 calc_cwp(delta_fx5[`CWP_INDEX],id,win,type);
34456 write_prev(id,act_value);
34457 delta_fb[next] <= {type,win,id,act_value};
34458 next = next+1;
34459 delta_fb[next] <= 77'hx;
34460 delta_fb[`NEXT_INDEX] <= next;
34461 if (`PARGS.axis_debug_on) begin
34462 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
34463 mytnum,pc_fx5,id,type,win,act_value,$time);
34464 end
34465 `else
34466 calc_cwp(cwp_fx5,id,win,type);
34467 if (`PARGS.axis_debug_on) begin
34468 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
34469 mytnum,pc_fx5,id,type,win,act_value,$time);
34470 end
34471 `endif
34472 end //}
34473 end //}
34474
34475endtask
34476
34477//----------------------------------------------------------
34478// Compare with current state and capture if different
34479task push_delta_fw;
34480
34481 input [7:0] id;
34482 input [63:0] act_value;
34483 inout [7:0] next;
34484 reg [2:0] win;
34485 reg [1:0] type;
34486
34487 begin // {
34488 if (act_value != read_prev(id)) begin // { // Diff vs prev
34489
34490 `ifndef EMUL_TL
34491 calc_cwp(delta_fb[`CWP_INDEX],id,win,type);
34492 write_prev(id,act_value);
34493 delta_fw[next] <= {type,win,id,act_value};
34494 next = next+1;
34495 delta_fw[next] <= 77'hx;
34496 delta_fw[`NEXT_INDEX] <= next;
34497 if (`PARGS.axis_debug_on) begin
34498 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
34499 mytnum,pc_fb,id,type,win,act_value,$time);
34500 end
34501 `else
34502 calc_cwp(cwp_fb[`CWP_INDEX],id,win,type);
34503 if (`PARGS.axis_debug_on) begin
34504 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
34505 mytnum,pc_fb,id,type,win,act_value,$time);
34506 end
34507 `endif
34508 end //}
34509 end //}
34510
34511endtask
34512
34513//----------------------------------------------------------
34514// Compare with current state and capture if different
34515task push_delta_fw1;
34516
34517 input [7:0] id;
34518 input [63:0] act_value;
34519 inout [7:0] next;
34520 reg [2:0] win;
34521 reg [1:0] type;
34522
34523 begin // {
34524 if (act_value != read_prev(id)) begin // { // Diff vs prev
34525
34526 `ifndef EMUL_TL
34527 calc_cwp(delta_fw[`CWP_INDEX],id,win,type);
34528 write_prev(id,act_value);
34529 delta_fw1[next] <= {type,win,id,act_value};
34530 next = next+1;
34531 delta_fw1[next] <= 77'hx;
34532 delta_fw1[`NEXT_INDEX] <= next;
34533 if (`PARGS.axis_debug_on) begin
34534 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
34535 mytnum,pc_fw,id,type,win,act_value,$time);
34536 end
34537 `else
34538 calc_cwp(cwp_fw,id,win,type);
34539 if (`PARGS.axis_debug_on) begin
34540 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
34541 mytnum,pc_fw,id,type,win,act_value,$time);
34542 end
34543 `endif
34544 end //}
34545 end //}
34546
34547endtask
34548
34549//----------------------------------------------------------
34550// Compare with current state and capture if different
34551task push_delta_fw2;
34552
34553 input [7:0] id;
34554 input [63:0] act_value;
34555 inout [7:0] next;
34556 reg [2:0] win;
34557 reg [1:0] type;
34558
34559 begin // {
34560 if (act_value != read_prev(id)) begin // { // Diff vs prev
34561
34562 `ifndef EMUL_TL
34563 calc_cwp(delta_fw1[`CWP_INDEX],id,win,type);
34564 write_prev(id,act_value);
34565 delta_fw2[next] <= {type,win,id,act_value};
34566 next = next+1;
34567 delta_fw2[next] <= 77'hx;
34568 delta_fw2[`NEXT_INDEX] <= next;
34569 if (`PARGS.axis_debug_on) begin
34570 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
34571 mytnum,pc_fw1,id,type,win,act_value,$time);
34572 end
34573 `else
34574 calc_cwp(cwp_fw1,id,win,type);
34575 if (`PARGS.axis_debug_on) begin
34576 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
34577 mytnum,pc_fw1,id,type,win,act_value,$time);
34578 end
34579 `endif
34580 end //}
34581 end //}
34582
34583endtask
34584
34585//----------------------------------------------------------
34586// Compare with current state and capture if different
34587// This is for late changing registers
34588// Use blocking assignments.
34589task push_delta_fw2_async;
34590
34591 input [7:0] id;
34592 input [63:0] act_value;
34593 inout [7:0] next;
34594 reg [2:0] win;
34595 reg [1:0] type;
34596
34597 begin // {
34598 if (act_value != read_prev(id)) begin // { // Diff vs prev
34599
34600 `ifndef EMUL_TL
34601 calc_cwp(delta_fw2[`CWP_INDEX],id,win,type);
34602 write_prev_async(id,act_value);
34603 delta_fw2[next] = {type,win,id,act_value};
34604 next = next+1;
34605 delta_fw2[next] = 77'hx;
34606 delta_fw2[`NEXT_INDEX] = next;
34607 if (`PARGS.axis_debug_on) begin
34608 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
34609 mytnum,pc_fw1,id,type,win,act_value,$time);
34610 end
34611 `else
34612 calc_cwp(cwp_fw2,id,win,type);
34613 if (`PARGS.axis_debug_on) begin
34614 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
34615 mytnum,pc_fw1,id,type,win,act_value,$time);
34616 end
34617 `endif
34618 end //}
34619 end //}
34620
34621endtask
34622
34623
34624//----------------------------------------------------------
34625// Compare with current state and capture if different
34626// Use blocking assignments so that push_simics will work
34627task push_delta_prev_async;
34628
34629 input [7:0] id;
34630 input [63:0] act_value;
34631 inout [7:0] next;
34632 reg [2:0] win;
34633 reg [1:0] type;
34634
34635 begin // {
34636
34637 if (act_value != read_prev(id)) begin // { // Diff vs prev
34638
34639 `ifndef EMUL_TL
34640 calc_cwp(delta_prev[`CWP_INDEX],id,win,type);
34641 write_prev_async(id,act_value);
34642 delta_prev[next] = {type,win,id,act_value};
34643 next = next+1;
34644 delta_prev[next] = 77'hx;
34645 delta_prev[`NEXT_INDEX] = next;
34646 if (`PARGS.axis_debug_on) begin
34647 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
34648 mytnum,pc_last,id,type,win,act_value,$time);
34649 end
34650 `else
34651 if (`PARGS.axis_debug_on) begin
34652 calc_cwp(cwp_last,id,win,type);
34653 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
34654 mytnum,pc_last,id,type,win,act_value,$time);
34655 end
34656 `endif
34657 end //}
34658 end //}
34659
34660endtask
34661
34662//----------------------------------------------------------
34663// prev of delta pipeline
34664task update_prev;
34665 integer i;
34666
34667 begin // {
34668 `ifndef EMUL_TL
34669 //--------------------
34670 // Pipeline previous stage
34671 for (i=0; i<=delta_fw2[`NEXT_INDEX]; i=i+1) begin // {
34672 delta_prev[i] <= delta_fw2[i];
34673 end
34674 `endif
34675 end //}
34676
34677endtask
34678
34679//----------------------------------------------------------
34680//----------------------------------------------------------
34681// Sort delta list in register ID order, then push to simics
34682// Or print deltas if sas check disabled ..
34683task push_simics;
34684
34685integer i;
34686reg [7:0] act_type;
34687integer act_level;
34688reg [7:0] regnum;
34689reg [2:0] win;
34690reg [1:0] type;
34691reg [63:0] value;
34692reg [63:0] pc;
34693reg [63:0] time_fw2;
34694
34695 begin // {
34696
34697 `ifndef EMUL_TL
34698 `NASTOP.delta_cnt = 0;
34699 sort_delta;
34700
34701 //--------------------
34702 // Order of registers reported to simics must be:
34703 // Global 0-7 aka prev_reg[0:7]
34704 // Window 8-23 aka prev_reg[8:23]
34705 // Floating 0-63 aka prev_reg[200:263]
34706 // Control 32-143 aka prev_reg[32:143]
34707
34708 act_level = delta_prev[`GL_INDEX]; // GL
34709 time_fw2 = delta_prev[`TIME_INDEX]; // Finish time
34710
34711
34712 //--------------------
34713 for (i=`FIRST_INDEX; i<delta_prev[`NEXT_INDEX]; i=i+1) begin // {
34714 {type,win,regnum,value} = delta_prev[i];
34715
34716 if (regnum<=7) begin // {
34717 act_type = "G";
34718 if (`PARGS.nas_check_on) begin // {
34719 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
34720 act_level, regnum, value);
34721 end // }
34722 else if (`PARGS.show_delta_on) begin // {
34723 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
34724 end //}
34725 end // }
34726 else if (regnum<=23) begin // { %o0-%l7, %l0-%l7
34727 act_type = "W";
34728 if (`PARGS.nas_check_on) begin // {
34729 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
34730 win, regnum, value);
34731 end // }
34732 else if (`PARGS.show_delta_on) begin // {
34733 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
34734 end //}
34735 end // }
34736 else if (regnum<=31) begin // { %i0-%i7
34737 act_type = "W";
34738 if (`PARGS.nas_check_on) begin // {
34739 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
34740 win, (regnum-16), value);
34741 end // }
34742 else if (`PARGS.show_delta_on) begin // {
34743 `NASTOP.print_delta (mytnum,act_type,win,(regnum-16),value);
34744 end //}
34745 end // }
34746 else if (regnum<=(64+`FP_OFFSET)) begin // {
34747 act_type = "F";
34748 if (`PARGS.nas_check_on) begin // {
34749 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
34750 (regnum-`FP_OFFSET), value);
34751 end // }
34752 else if (`PARGS.show_delta_on) begin // {
34753 `NASTOP.print_delta (mytnum,act_type,win,(regnum-`FP_OFFSET),value);
34754 end //}
34755 end // }
34756 else if ((regnum>=(32+`CTL_OFFSET))&(regnum<=(143+`CTL_OFFSET))) begin // {
34757 act_type = "C";
34758 if (`PARGS.nas_check_on) begin // {
34759 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
34760 (regnum-`CTL_OFFSET), value);
34761 end //}
34762 else if (`PARGS.show_delta_on) begin // {
34763 `NASTOP.print_delta (mytnum,act_type,win,(regnum-`CTL_OFFSET),value);
34764 end //}
34765 end // }
34766 else begin // {
34767 `PR_ERROR ("nas", `ERROR, " - T%0d Bench problem. push_simics has bad regnum", mytnum);
34768 end // }
34769 end // }
34770
34771 //--------------------
34772 // Push Opcode
34773 act_type = "C";
34774 regnum = `OPCODE;
34775 value = delta_prev[`OPCODE_INDEX];
34776 if (`PARGS.nas_check_on) begin // {
34777 `ifdef OPCODE_COMPARE
34778 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
34779 regnum, value);
34780 `endif
34781 end //}
34782 else if (`PARGS.show_delta_on) begin // {
34783 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
34784 end //}
34785
34786
34787 //--------------------
34788 // Push End of Instruction Delimiter
34789 // The value field for this PUSH equals the PC for this instruction.
34790 // so that printing to the logfile works correctly.
34791 // prev_reg[`PC] = current instruction PC
34792 // delta_reg[`PC] = PC at end of current instruction
34793 act_type = "X";
34794 pc = delta_prev[`PC_INDEX];
34795 if (`PARGS.nas_check_on) begin // {
34796 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
34797 delta_fw2[`CWP_INDEX], `END_INSTR, pc);
34798 end // }
34799 else if (`PARGS.show_delta_on) begin // {
34800 `NASTOP.print_delta (mytnum,act_type,delta_fw2[`CWP_INDEX],`END_INSTR,0);
34801 end //}
34802 if (! `PARGS.nas_check_on) begin // {
34803 `PR_NORMAL ("nas", `NORMAL, "@%0d T%0d %h (Unchecked..)",
34804 $time, mytnum, {16'b0,pc});
34805 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
34806 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
34807 end //}
34808
34809 `else
34810 if (! `PARGS.nas_check_on) begin // {
34811 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
34812 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
34813 end //}
34814 `endif
34815 end // }
34816endtask
34817
34818
34819//----------------------------------------------------------
34820// Save current window to previous window, then copy new window to current window
34821task copy_win;
34822 input [2:0] new_cwp;
34823 input [2:0] old_cwp;
34824 integer i;
34825
34826 begin // {
34827
34828 // Save current window to Old window
34829 case (old_cwp)
34830 0: begin // {
34831 win0_reg8 = prev_reg8;
34832 win1_reg24 = prev_reg8;
34833 win0_reg9 = prev_reg9;
34834 win1_reg25 = prev_reg9;
34835 win0_reg10 = prev_reg10;
34836 win1_reg26 = prev_reg10;
34837 win0_reg11 = prev_reg11;
34838 win1_reg27 = prev_reg11;
34839 win0_reg12 = prev_reg12;
34840 win1_reg28 = prev_reg12;
34841 win0_reg13 = prev_reg13;
34842 win1_reg29 = prev_reg13;
34843 win0_reg14 = prev_reg14;
34844 win1_reg30 = prev_reg14;
34845 win0_reg15 = prev_reg15;
34846 win1_reg31 = prev_reg15;
34847 win0_reg16 = prev_reg16;
34848 win0_reg17 = prev_reg17;
34849 win0_reg18 = prev_reg18;
34850 win0_reg19 = prev_reg19;
34851 win0_reg20 = prev_reg20;
34852 win0_reg21 = prev_reg21;
34853 win0_reg22 = prev_reg22;
34854 win0_reg23 = prev_reg23;
34855 win0_reg24 = prev_reg24;
34856 win7_reg8 = prev_reg24;
34857 win0_reg25 = prev_reg25;
34858 win7_reg9 = prev_reg25;
34859 win0_reg26 = prev_reg26;
34860 win7_reg10 = prev_reg26;
34861 win0_reg27 = prev_reg27;
34862 win7_reg11 = prev_reg27;
34863 win0_reg28 = prev_reg28;
34864 win7_reg12 = prev_reg28;
34865 win0_reg29 = prev_reg29;
34866 win7_reg13 = prev_reg29;
34867 win0_reg30 = prev_reg30;
34868 win7_reg14 = prev_reg30;
34869 win0_reg31 = prev_reg31;
34870 win7_reg15 = prev_reg31;
34871 end // }
34872 1: begin // {
34873 win1_reg8 = prev_reg8;
34874 win2_reg24 = prev_reg8;
34875 win1_reg9 = prev_reg9;
34876 win2_reg25 = prev_reg9;
34877 win1_reg10 = prev_reg10;
34878 win2_reg26 = prev_reg10;
34879 win1_reg11 = prev_reg11;
34880 win2_reg27 = prev_reg11;
34881 win1_reg12 = prev_reg12;
34882 win2_reg28 = prev_reg12;
34883 win1_reg13 = prev_reg13;
34884 win2_reg29 = prev_reg13;
34885 win1_reg14 = prev_reg14;
34886 win2_reg30 = prev_reg14;
34887 win1_reg15 = prev_reg15;
34888 win2_reg31 = prev_reg15;
34889 win1_reg16 = prev_reg16;
34890 win1_reg17 = prev_reg17;
34891 win1_reg18 = prev_reg18;
34892 win1_reg19 = prev_reg19;
34893 win1_reg20 = prev_reg20;
34894 win1_reg21 = prev_reg21;
34895 win1_reg22 = prev_reg22;
34896 win1_reg23 = prev_reg23;
34897 win1_reg24 = prev_reg24;
34898 win0_reg8 = prev_reg24;
34899 win1_reg25 = prev_reg25;
34900 win0_reg9 = prev_reg25;
34901 win1_reg26 = prev_reg26;
34902 win0_reg10 = prev_reg26;
34903 win1_reg27 = prev_reg27;
34904 win0_reg11 = prev_reg27;
34905 win1_reg28 = prev_reg28;
34906 win0_reg12 = prev_reg28;
34907 win1_reg29 = prev_reg29;
34908 win0_reg13 = prev_reg29;
34909 win1_reg30 = prev_reg30;
34910 win0_reg14 = prev_reg30;
34911 win1_reg31 = prev_reg31;
34912 win0_reg15 = prev_reg31;
34913 end // }
34914 2: begin // {
34915 win2_reg8 = prev_reg8;
34916 win3_reg24 = prev_reg8;
34917 win2_reg9 = prev_reg9;
34918 win3_reg25 = prev_reg9;
34919 win2_reg10 = prev_reg10;
34920 win3_reg26 = prev_reg10;
34921 win2_reg11 = prev_reg11;
34922 win3_reg27 = prev_reg11;
34923 win2_reg12 = prev_reg12;
34924 win3_reg28 = prev_reg12;
34925 win2_reg13 = prev_reg13;
34926 win3_reg29 = prev_reg13;
34927 win2_reg14 = prev_reg14;
34928 win3_reg30 = prev_reg14;
34929 win2_reg15 = prev_reg15;
34930 win3_reg31 = prev_reg15;
34931 win2_reg16 = prev_reg16;
34932 win2_reg17 = prev_reg17;
34933 win2_reg18 = prev_reg18;
34934 win2_reg19 = prev_reg19;
34935 win2_reg20 = prev_reg20;
34936 win2_reg21 = prev_reg21;
34937 win2_reg22 = prev_reg22;
34938 win2_reg23 = prev_reg23;
34939 win2_reg24 = prev_reg24;
34940 win1_reg8 = prev_reg24;
34941 win2_reg25 = prev_reg25;
34942 win1_reg9 = prev_reg25;
34943 win2_reg26 = prev_reg26;
34944 win1_reg10 = prev_reg26;
34945 win2_reg27 = prev_reg27;
34946 win1_reg11 = prev_reg27;
34947 win2_reg28 = prev_reg28;
34948 win1_reg12 = prev_reg28;
34949 win2_reg29 = prev_reg29;
34950 win1_reg13 = prev_reg29;
34951 win2_reg30 = prev_reg30;
34952 win1_reg14 = prev_reg30;
34953 win2_reg31 = prev_reg31;
34954 win1_reg15 = prev_reg31;
34955 end // }
34956 3: begin // {
34957 win3_reg8 = prev_reg8;
34958 win4_reg24 = prev_reg8;
34959 win3_reg9 = prev_reg9;
34960 win4_reg25 = prev_reg9;
34961 win3_reg10 = prev_reg10;
34962 win4_reg26 = prev_reg10;
34963 win3_reg11 = prev_reg11;
34964 win4_reg27 = prev_reg11;
34965 win3_reg12 = prev_reg12;
34966 win4_reg28 = prev_reg12;
34967 win3_reg13 = prev_reg13;
34968 win4_reg29 = prev_reg13;
34969 win3_reg14 = prev_reg14;
34970 win4_reg30 = prev_reg14;
34971 win3_reg15 = prev_reg15;
34972 win4_reg31 = prev_reg15;
34973 win3_reg16 = prev_reg16;
34974 win3_reg17 = prev_reg17;
34975 win3_reg18 = prev_reg18;
34976 win3_reg19 = prev_reg19;
34977 win3_reg20 = prev_reg20;
34978 win3_reg21 = prev_reg21;
34979 win3_reg22 = prev_reg22;
34980 win3_reg23 = prev_reg23;
34981 win3_reg24 = prev_reg24;
34982 win2_reg8 = prev_reg24;
34983 win3_reg25 = prev_reg25;
34984 win2_reg9 = prev_reg25;
34985 win3_reg26 = prev_reg26;
34986 win2_reg10 = prev_reg26;
34987 win3_reg27 = prev_reg27;
34988 win2_reg11 = prev_reg27;
34989 win3_reg28 = prev_reg28;
34990 win2_reg12 = prev_reg28;
34991 win3_reg29 = prev_reg29;
34992 win2_reg13 = prev_reg29;
34993 win3_reg30 = prev_reg30;
34994 win2_reg14 = prev_reg30;
34995 win3_reg31 = prev_reg31;
34996 win2_reg15 = prev_reg31;
34997 end // }
34998 4: begin // {
34999 win4_reg8 = prev_reg8;
35000 win5_reg24 = prev_reg8;
35001 win4_reg9 = prev_reg9;
35002 win5_reg25 = prev_reg9;
35003 win4_reg10 = prev_reg10;
35004 win5_reg26 = prev_reg10;
35005 win4_reg11 = prev_reg11;
35006 win5_reg27 = prev_reg11;
35007 win4_reg12 = prev_reg12;
35008 win5_reg28 = prev_reg12;
35009 win4_reg13 = prev_reg13;
35010 win5_reg29 = prev_reg13;
35011 win4_reg14 = prev_reg14;
35012 win5_reg30 = prev_reg14;
35013 win4_reg15 = prev_reg15;
35014 win5_reg31 = prev_reg15;
35015 win4_reg16 = prev_reg16;
35016 win4_reg17 = prev_reg17;
35017 win4_reg18 = prev_reg18;
35018 win4_reg19 = prev_reg19;
35019 win4_reg20 = prev_reg20;
35020 win4_reg21 = prev_reg21;
35021 win4_reg22 = prev_reg22;
35022 win4_reg23 = prev_reg23;
35023 win4_reg24 = prev_reg24;
35024 win3_reg8 = prev_reg24;
35025 win4_reg25 = prev_reg25;
35026 win3_reg9 = prev_reg25;
35027 win4_reg26 = prev_reg26;
35028 win3_reg10 = prev_reg26;
35029 win4_reg27 = prev_reg27;
35030 win3_reg11 = prev_reg27;
35031 win4_reg28 = prev_reg28;
35032 win3_reg12 = prev_reg28;
35033 win4_reg29 = prev_reg29;
35034 win3_reg13 = prev_reg29;
35035 win4_reg30 = prev_reg30;
35036 win3_reg14 = prev_reg30;
35037 win4_reg31 = prev_reg31;
35038 win3_reg15 = prev_reg31;
35039 end // }
35040 5: begin // {
35041 win5_reg8 = prev_reg8;
35042 win6_reg24 = prev_reg8;
35043 win5_reg9 = prev_reg9;
35044 win6_reg25 = prev_reg9;
35045 win5_reg10 = prev_reg10;
35046 win6_reg26 = prev_reg10;
35047 win5_reg11 = prev_reg11;
35048 win6_reg27 = prev_reg11;
35049 win5_reg12 = prev_reg12;
35050 win6_reg28 = prev_reg12;
35051 win5_reg13 = prev_reg13;
35052 win6_reg29 = prev_reg13;
35053 win5_reg14 = prev_reg14;
35054 win6_reg30 = prev_reg14;
35055 win5_reg15 = prev_reg15;
35056 win6_reg31 = prev_reg15;
35057 win5_reg16 = prev_reg16;
35058 win5_reg17 = prev_reg17;
35059 win5_reg18 = prev_reg18;
35060 win5_reg19 = prev_reg19;
35061 win5_reg20 = prev_reg20;
35062 win5_reg21 = prev_reg21;
35063 win5_reg22 = prev_reg22;
35064 win5_reg23 = prev_reg23;
35065 win5_reg24 = prev_reg24;
35066 win4_reg8 = prev_reg24;
35067 win5_reg25 = prev_reg25;
35068 win4_reg9 = prev_reg25;
35069 win5_reg26 = prev_reg26;
35070 win4_reg10 = prev_reg26;
35071 win5_reg27 = prev_reg27;
35072 win4_reg11 = prev_reg27;
35073 win5_reg28 = prev_reg28;
35074 win4_reg12 = prev_reg28;
35075 win5_reg29 = prev_reg29;
35076 win4_reg13 = prev_reg29;
35077 win5_reg30 = prev_reg30;
35078 win4_reg14 = prev_reg30;
35079 win5_reg31 = prev_reg31;
35080 win4_reg15 = prev_reg31;
35081 end // }
35082 6: begin // {
35083 win6_reg8 = prev_reg8;
35084 win7_reg24 = prev_reg8;
35085 win6_reg9 = prev_reg9;
35086 win7_reg25 = prev_reg9;
35087 win6_reg10 = prev_reg10;
35088 win7_reg26 = prev_reg10;
35089 win6_reg11 = prev_reg11;
35090 win7_reg27 = prev_reg11;
35091 win6_reg12 = prev_reg12;
35092 win7_reg28 = prev_reg12;
35093 win6_reg13 = prev_reg13;
35094 win7_reg29 = prev_reg13;
35095 win6_reg14 = prev_reg14;
35096 win7_reg30 = prev_reg14;
35097 win6_reg15 = prev_reg15;
35098 win7_reg31 = prev_reg15;
35099 win6_reg16 = prev_reg16;
35100 win6_reg17 = prev_reg17;
35101 win6_reg18 = prev_reg18;
35102 win6_reg19 = prev_reg19;
35103 win6_reg20 = prev_reg20;
35104 win6_reg21 = prev_reg21;
35105 win6_reg22 = prev_reg22;
35106 win6_reg23 = prev_reg23;
35107 win6_reg24 = prev_reg24;
35108 win5_reg8 = prev_reg24;
35109 win6_reg25 = prev_reg25;
35110 win5_reg9 = prev_reg25;
35111 win6_reg26 = prev_reg26;
35112 win5_reg10 = prev_reg26;
35113 win6_reg27 = prev_reg27;
35114 win5_reg11 = prev_reg27;
35115 win6_reg28 = prev_reg28;
35116 win5_reg12 = prev_reg28;
35117 win6_reg29 = prev_reg29;
35118 win5_reg13 = prev_reg29;
35119 win6_reg30 = prev_reg30;
35120 win5_reg14 = prev_reg30;
35121 win6_reg31 = prev_reg31;
35122 win5_reg15 = prev_reg31;
35123 end // }
35124 7: begin // {
35125 win7_reg8 = prev_reg8;
35126 win0_reg24 = prev_reg8;
35127 win7_reg9 = prev_reg9;
35128 win0_reg25 = prev_reg9;
35129 win7_reg10 = prev_reg10;
35130 win0_reg26 = prev_reg10;
35131 win7_reg11 = prev_reg11;
35132 win0_reg27 = prev_reg11;
35133 win7_reg12 = prev_reg12;
35134 win0_reg28 = prev_reg12;
35135 win7_reg13 = prev_reg13;
35136 win0_reg29 = prev_reg13;
35137 win7_reg14 = prev_reg14;
35138 win0_reg30 = prev_reg14;
35139 win7_reg15 = prev_reg15;
35140 win0_reg31 = prev_reg15;
35141 win7_reg16 = prev_reg16;
35142 win7_reg17 = prev_reg17;
35143 win7_reg18 = prev_reg18;
35144 win7_reg19 = prev_reg19;
35145 win7_reg20 = prev_reg20;
35146 win7_reg21 = prev_reg21;
35147 win7_reg22 = prev_reg22;
35148 win7_reg23 = prev_reg23;
35149 win7_reg24 = prev_reg24;
35150 win6_reg8 = prev_reg24;
35151 win7_reg25 = prev_reg25;
35152 win6_reg9 = prev_reg25;
35153 win7_reg26 = prev_reg26;
35154 win6_reg10 = prev_reg26;
35155 win7_reg27 = prev_reg27;
35156 win6_reg11 = prev_reg27;
35157 win7_reg28 = prev_reg28;
35158 win6_reg12 = prev_reg28;
35159 win7_reg29 = prev_reg29;
35160 win6_reg13 = prev_reg29;
35161 win7_reg30 = prev_reg30;
35162 win6_reg14 = prev_reg30;
35163 win7_reg31 = prev_reg31;
35164 win6_reg15 = prev_reg31;
35165 end // }
35166
35167 endcase
35168
35169 // Copy New window to current window
35170 case (new_cwp)
35171 0: begin // {
35172 prev_reg8 = win0_reg8;
35173 prev_reg9 = win0_reg9;
35174 prev_reg10 = win0_reg10;
35175 prev_reg11 = win0_reg11;
35176 prev_reg12 = win0_reg12;
35177 prev_reg13 = win0_reg13;
35178 prev_reg14 = win0_reg14;
35179 prev_reg15 = win0_reg15;
35180 prev_reg16 = win0_reg16;
35181 prev_reg17 = win0_reg17;
35182 prev_reg18 = win0_reg18;
35183 prev_reg19 = win0_reg19;
35184 prev_reg20 = win0_reg20;
35185 prev_reg21 = win0_reg21;
35186 prev_reg22 = win0_reg22;
35187 prev_reg23 = win0_reg23;
35188 prev_reg24 = win0_reg24;
35189 prev_reg25 = win0_reg25;
35190 prev_reg26 = win0_reg26;
35191 prev_reg27 = win0_reg27;
35192 prev_reg28 = win0_reg28;
35193 prev_reg29 = win0_reg29;
35194 prev_reg30 = win0_reg30;
35195 prev_reg31 = win0_reg31;
35196 end // }
35197
35198 1: begin // {
35199 prev_reg8 = win1_reg8;
35200 prev_reg9 = win1_reg9;
35201 prev_reg10 = win1_reg10;
35202 prev_reg11 = win1_reg11;
35203 prev_reg12 = win1_reg12;
35204 prev_reg13 = win1_reg13;
35205 prev_reg14 = win1_reg14;
35206 prev_reg15 = win1_reg15;
35207 prev_reg16 = win1_reg16;
35208 prev_reg17 = win1_reg17;
35209 prev_reg18 = win1_reg18;
35210 prev_reg19 = win1_reg19;
35211 prev_reg20 = win1_reg20;
35212 prev_reg21 = win1_reg21;
35213 prev_reg22 = win1_reg22;
35214 prev_reg23 = win1_reg23;
35215 prev_reg24 = win1_reg24;
35216 prev_reg25 = win1_reg25;
35217 prev_reg26 = win1_reg26;
35218 prev_reg27 = win1_reg27;
35219 prev_reg28 = win1_reg28;
35220 prev_reg29 = win1_reg29;
35221 prev_reg30 = win1_reg30;
35222 prev_reg31 = win1_reg31;
35223 end // }
35224
35225 2: begin // {
35226 prev_reg8 = win2_reg8;
35227 prev_reg9 = win2_reg9;
35228 prev_reg10 = win2_reg10;
35229 prev_reg11 = win2_reg11;
35230 prev_reg12 = win2_reg12;
35231 prev_reg13 = win2_reg13;
35232 prev_reg14 = win2_reg14;
35233 prev_reg15 = win2_reg15;
35234 prev_reg16 = win2_reg16;
35235 prev_reg17 = win2_reg17;
35236 prev_reg18 = win2_reg18;
35237 prev_reg19 = win2_reg19;
35238 prev_reg20 = win2_reg20;
35239 prev_reg21 = win2_reg21;
35240 prev_reg22 = win2_reg22;
35241 prev_reg23 = win2_reg23;
35242 prev_reg24 = win2_reg24;
35243 prev_reg25 = win2_reg25;
35244 prev_reg26 = win2_reg26;
35245 prev_reg27 = win2_reg27;
35246 prev_reg28 = win2_reg28;
35247 prev_reg29 = win2_reg29;
35248 prev_reg30 = win2_reg30;
35249 prev_reg31 = win2_reg31;
35250 end // }
35251
35252 3: begin // {
35253 prev_reg8 = win3_reg8;
35254 prev_reg9 = win3_reg9;
35255 prev_reg10 = win3_reg10;
35256 prev_reg11 = win3_reg11;
35257 prev_reg12 = win3_reg12;
35258 prev_reg13 = win3_reg13;
35259 prev_reg14 = win3_reg14;
35260 prev_reg15 = win3_reg15;
35261 prev_reg16 = win3_reg16;
35262 prev_reg17 = win3_reg17;
35263 prev_reg18 = win3_reg18;
35264 prev_reg19 = win3_reg19;
35265 prev_reg20 = win3_reg20;
35266 prev_reg21 = win3_reg21;
35267 prev_reg22 = win3_reg22;
35268 prev_reg23 = win3_reg23;
35269 prev_reg24 = win3_reg24;
35270 prev_reg25 = win3_reg25;
35271 prev_reg26 = win3_reg26;
35272 prev_reg27 = win3_reg27;
35273 prev_reg28 = win3_reg28;
35274 prev_reg29 = win3_reg29;
35275 prev_reg30 = win3_reg30;
35276 prev_reg31 = win3_reg31;
35277 end // }
35278
35279 4: begin // {
35280 prev_reg8 = win4_reg8;
35281 prev_reg9 = win4_reg9;
35282 prev_reg10 = win4_reg10;
35283 prev_reg11 = win4_reg11;
35284 prev_reg12 = win4_reg12;
35285 prev_reg13 = win4_reg13;
35286 prev_reg14 = win4_reg14;
35287 prev_reg15 = win4_reg15;
35288 prev_reg16 = win4_reg16;
35289 prev_reg17 = win4_reg17;
35290 prev_reg18 = win4_reg18;
35291 prev_reg19 = win4_reg19;
35292 prev_reg20 = win4_reg20;
35293 prev_reg21 = win4_reg21;
35294 prev_reg22 = win4_reg22;
35295 prev_reg23 = win4_reg23;
35296 prev_reg24 = win4_reg24;
35297 prev_reg25 = win4_reg25;
35298 prev_reg26 = win4_reg26;
35299 prev_reg27 = win4_reg27;
35300 prev_reg28 = win4_reg28;
35301 prev_reg29 = win4_reg29;
35302 prev_reg30 = win4_reg30;
35303 prev_reg31 = win4_reg31;
35304 end // }
35305
35306 5: begin // {
35307 prev_reg8 = win5_reg8;
35308 prev_reg9 = win5_reg9;
35309 prev_reg10 = win5_reg10;
35310 prev_reg11 = win5_reg11;
35311 prev_reg12 = win5_reg12;
35312 prev_reg13 = win5_reg13;
35313 prev_reg14 = win5_reg14;
35314 prev_reg15 = win5_reg15;
35315 prev_reg16 = win5_reg16;
35316 prev_reg17 = win5_reg17;
35317 prev_reg18 = win5_reg18;
35318 prev_reg19 = win5_reg19;
35319 prev_reg20 = win5_reg20;
35320 prev_reg21 = win5_reg21;
35321 prev_reg22 = win5_reg22;
35322 prev_reg23 = win5_reg23;
35323 prev_reg24 = win5_reg24;
35324 prev_reg25 = win5_reg25;
35325 prev_reg26 = win5_reg26;
35326 prev_reg27 = win5_reg27;
35327 prev_reg28 = win5_reg28;
35328 prev_reg29 = win5_reg29;
35329 prev_reg30 = win5_reg30;
35330 prev_reg31 = win5_reg31;
35331 end // }
35332
35333 6: begin // {
35334 prev_reg8 = win6_reg8;
35335 prev_reg9 = win6_reg9;
35336 prev_reg10 = win6_reg10;
35337 prev_reg11 = win6_reg11;
35338 prev_reg12 = win6_reg12;
35339 prev_reg13 = win6_reg13;
35340 prev_reg14 = win6_reg14;
35341 prev_reg15 = win6_reg15;
35342 prev_reg16 = win6_reg16;
35343 prev_reg17 = win6_reg17;
35344 prev_reg18 = win6_reg18;
35345 prev_reg19 = win6_reg19;
35346 prev_reg20 = win6_reg20;
35347 prev_reg21 = win6_reg21;
35348 prev_reg22 = win6_reg22;
35349 prev_reg23 = win6_reg23;
35350 prev_reg24 = win6_reg24;
35351 prev_reg25 = win6_reg25;
35352 prev_reg26 = win6_reg26;
35353 prev_reg27 = win6_reg27;
35354 prev_reg28 = win6_reg28;
35355 prev_reg29 = win6_reg29;
35356 prev_reg30 = win6_reg30;
35357 prev_reg31 = win6_reg31;
35358 end // }
35359
35360 7: begin // {
35361 prev_reg8 = win7_reg8;
35362 prev_reg9 = win7_reg9;
35363 prev_reg10 = win7_reg10;
35364 prev_reg11 = win7_reg11;
35365 prev_reg12 = win7_reg12;
35366 prev_reg13 = win7_reg13;
35367 prev_reg14 = win7_reg14;
35368 prev_reg15 = win7_reg15;
35369 prev_reg16 = win7_reg16;
35370 prev_reg17 = win7_reg17;
35371 prev_reg18 = win7_reg18;
35372 prev_reg19 = win7_reg19;
35373 prev_reg20 = win7_reg20;
35374 prev_reg21 = win7_reg21;
35375 prev_reg22 = win7_reg22;
35376 prev_reg23 = win7_reg23;
35377 prev_reg24 = win7_reg24;
35378 prev_reg25 = win7_reg25;
35379 prev_reg26 = win7_reg26;
35380 prev_reg27 = win7_reg27;
35381 prev_reg28 = win7_reg28;
35382 prev_reg29 = win7_reg29;
35383 prev_reg30 = win7_reg30;
35384 prev_reg31 = win7_reg31;
35385 end // }
35386
35387 endcase
35388 end // }
35389endtask
35390
35391//----------------------------------------------------------
35392// Save current global to previous global, then copy new global to current global
35393task copy_global;
35394 input [2:0] new_gl;
35395 input [2:0] old_gl;
35396 integer i;
35397
35398 begin // {
35399
35400 // Save current global to Old global
35401 case (old_gl)
35402 0: begin // {
35403 gl0_reg0 = prev_reg0;
35404 gl0_reg1 = prev_reg1;
35405 gl0_reg2 = prev_reg2;
35406 gl0_reg3 = prev_reg3;
35407 gl0_reg4 = prev_reg4;
35408 gl0_reg5 = prev_reg5;
35409 gl0_reg6 = prev_reg6;
35410 gl0_reg7 = prev_reg7;
35411 end // }
35412 1: begin // {
35413 gl1_reg0 = prev_reg0;
35414 gl1_reg1 = prev_reg1;
35415 gl1_reg2 = prev_reg2;
35416 gl1_reg3 = prev_reg3;
35417 gl1_reg4 = prev_reg4;
35418 gl1_reg5 = prev_reg5;
35419 gl1_reg6 = prev_reg6;
35420 gl1_reg7 = prev_reg7;
35421 end // }
35422 2: begin // {
35423 gl2_reg0 = prev_reg0;
35424 gl2_reg1 = prev_reg1;
35425 gl2_reg2 = prev_reg2;
35426 gl2_reg3 = prev_reg3;
35427 gl2_reg4 = prev_reg4;
35428 gl2_reg5 = prev_reg5;
35429 gl2_reg6 = prev_reg6;
35430 gl2_reg7 = prev_reg7;
35431 end // }
35432 3: begin // {
35433 gl3_reg0 = prev_reg0;
35434 gl3_reg1 = prev_reg1;
35435 gl3_reg2 = prev_reg2;
35436 gl3_reg3 = prev_reg3;
35437 gl3_reg4 = prev_reg4;
35438 gl3_reg5 = prev_reg5;
35439 gl3_reg6 = prev_reg6;
35440 gl3_reg7 = prev_reg7;
35441 end // }
35442 endcase
35443
35444 // Copy New global current global
35445 case (new_gl)
35446 0: begin // {
35447 prev_reg0 = gl0_reg0;
35448 prev_reg1 = gl0_reg1;
35449 prev_reg2 = gl0_reg2;
35450 prev_reg3 = gl0_reg3;
35451 prev_reg4 = gl0_reg4;
35452 prev_reg5 = gl0_reg5;
35453 prev_reg6 = gl0_reg6;
35454 prev_reg7 = gl0_reg7;
35455 end // }
35456
35457 1: begin // {
35458 prev_reg0 = gl1_reg0;
35459 prev_reg1 = gl1_reg1;
35460 prev_reg2 = gl1_reg2;
35461 prev_reg3 = gl1_reg3;
35462 prev_reg4 = gl1_reg4;
35463 prev_reg5 = gl1_reg5;
35464 prev_reg6 = gl1_reg6;
35465 prev_reg7 = gl1_reg7;
35466 end // }
35467
35468 2: begin // {
35469 prev_reg0 = gl2_reg0;
35470 prev_reg1 = gl2_reg1;
35471 prev_reg2 = gl2_reg2;
35472 prev_reg3 = gl2_reg3;
35473 prev_reg4 = gl2_reg4;
35474 prev_reg5 = gl2_reg5;
35475 prev_reg6 = gl2_reg6;
35476 prev_reg7 = gl2_reg7;
35477 end // }
35478
35479 3: begin // {
35480 prev_reg0 = gl3_reg0;
35481 prev_reg1 = gl3_reg1;
35482 prev_reg2 = gl3_reg2;
35483 prev_reg3 = gl3_reg3;
35484 prev_reg4 = gl3_reg4;
35485 prev_reg5 = gl3_reg5;
35486 prev_reg6 = gl3_reg6;
35487 prev_reg7 = gl3_reg7;
35488 end // }
35489
35490 endcase
35491 end // }
35492endtask
35493
35494//----------------------------------------------------------
35495// Return window number and register type based on cwp and regnum as input
35496task calc_cwp;
35497 input [2:0] cwp;
35498 input [7:0] id;
35499 output [2:0] win;
35500 output [1:0] type;
35501
35502 begin // {
35503 if (id<=7) begin // {
35504 type = `G_TYPE;
35505 win = cwp;
35506 end // }
35507 else if (id<=23) begin // {
35508 type = `W_TYPE;
35509 win = cwp;
35510 end // }
35511 else if (id<=31) begin // {
35512 type = `W_TYPE;
35513 if (cwp == 0) begin // {
35514 win = 7;
35515 end // }
35516 else begin // {
35517 win = cwp-1;
35518 end // }
35519 end // }
35520 else if (id<=(64+`FP_OFFSET)) begin // {
35521 type = `F_TYPE;
35522 win = cwp;
35523 end // }
35524 else begin // {
35525 type = `C_TYPE;
35526 win = cwp;
35527 end // }
35528 end // }
35529endtask
35530
35531//----------------------------------------------------------
35532// Check for bad signal values
35533task check_values;
35534
35535 begin // {
35536
35537 //--------------------
35538 casex (complete_fw2)
35539 8'b00000000,
35540 8'b00000001,
35541 8'b00000010,
35542 8'b00000100,
35543 8'b00001000,
35544 8'b00010000,
35545 8'b00100000,
35546 8'b01000000,
35547 8'b10000000: ; // good value
35548 default: begin // {
35549 `PR_ERROR ("nas", `ERROR, " - T%0d More than one instruction retired in a single cycle for this thread.",
35550 mytnum);
35551 $write("\t\t\t\t Instructions - ");
35552 if (complete_fw2[`EXU_INDEX]) $write("EXU op, ");
35553 if (complete_fw2[`FP_INDEX]) $write("FP op, ");
35554 if (complete_fw2[`LSU_INDEX]) $write("LSU op, ");
35555 if (complete_fw2[`IMUL_INDEX]) $write("IMUL op, ");
35556 if (complete_fw2[`IDIV_INDEX]) $write("IDIV op, ");
35557 if (complete_fw2[`FDIV_INDEX]) $write("FDIV op, ");
35558 if (complete_fw2[`TLU_INDEX]) $write("TLU op, ");
35559 if (complete_fw2[`ASI_INDEX]) $write("ASI op, ");
35560 $write(" complete_fw2 = %b \n",complete_fw2);
35561 $display("");
35562 end // }
35563 endcase
35564
35565 // This check only works if diags are written properly.
35566 // For example, if a diag writes to one of these registers using wrpr,
35567 // then this check must be disabled using plusarg.
35568 //--------------------
35569 // CANSAVE + CANRESTORE + OTHERWIN = NWINDOWS-2 (per Sparc V9)
35570 if (`PARGS.win_check_on) begin // {
35571 if (complete_fw2 & ((CANSAVE_reg + CANRESTORE_reg + OTHERWIN_reg) != 6)) begin // {
35572 `PR_ERROR ("nas", `ERROR, "ERROR - T%0d Bad Values for window registers.", mytnum);
35573 `PR_ERROR ("nas", `ERROR, "- CANSAVE = %0d CANRESTORE = %0d OTHERWIN = %0d",
35574 CANSAVE_reg, CANRESTORE_reg,OTHERWIN_reg);
35575 end // }
35576 end // }
35577
35578 end // }
35579endtask
35580
35581//----------------------------------------------------------
35582//----------------------------------------------------------
35583`ifndef EMUL_TL
35584task sort_delta;
35585 reg [5:0] i, j, last;
35586 reg [`DELTA_WIDTH:0] temp1, temp2;
35587 begin // {
35588 last = delta_prev[`NEXT_INDEX]-1;
35589 for (i=`FIRST_INDEX; i <= last; i=i+1) begin // {
35590 for (j=`FIRST_INDEX; j < last; j=j+1) begin // {
35591 temp1 = delta_prev[j]; temp2 = delta_prev[j+1];
35592 if (temp1[76:64] > temp2[76:64]) begin // {
35593 delta_prev[j] = temp2; delta_prev [j+1] = temp1;
35594 end //}
35595 end // }
35596 end // }
35597 end // }
35598endtask
35599`endif
35600
35601//----------------------------------------------------------
35602//----------------------------------------------------------
35603// Print one entry in delta_* array
35604`ifndef EMUL_TL
35605task print_entry;
35606
35607 input [`DELTA_WIDTH:0] delta_entry;
35608
35609 reg [1:0] type;
35610 reg [2:0] win;
35611 reg [7:0] id;
35612 reg [63:0] act_value;
35613 reg [(20*8)-1:0] type_str;
35614 reg [(20*8)-1:0] regname;
35615
35616 begin // {
35617 {type,win,id,act_value} = delta_entry;
35618
35619 case (type)
35620 `G_TYPE: begin
35621 type_str="G";
35622 end
35623 `W_TYPE: begin
35624 type_str="W";
35625 end
35626 `F_TYPE: begin
35627 type_str="F";
35628 id = id - `FP_OFFSET;
35629 end
35630 `C_TYPE: begin
35631 type_str="C";
35632 id = id - `CTL_OFFSET;
35633 end
35634 endcase
35635
35636 `NASTOP.get_regname(mytnum,type_str,win,id,regname);
35637 `PR_NORMAL ("nas", `NORMAL, "type=%0s win=%0d RegID=%0d %0s=%h",
35638 type_str,win,id,regname,act_value);
35639 end //}
35640
35641endtask
35642`endif
35643
35644//----------------------------------------------------------
35645// Write Value to prev_reg using id as index (non-blocking)
35646task write_prev;
35647 input [7:0] id;
35648 input [63:0] value;
35649
35650 begin // {
35651
35652 case (id)
35653 8'd0: prev_reg0 <= value;
35654 8'd1: prev_reg1 <= value;
35655 8'd2: prev_reg2 <= value;
35656 8'd3: prev_reg3 <= value;
35657 8'd4: prev_reg4 <= value;
35658 8'd5: prev_reg5 <= value;
35659 8'd6: prev_reg6 <= value;
35660 8'd7: prev_reg7 <= value;
35661 8'd8: prev_reg8 <= value;
35662 8'd9: prev_reg9 <= value;
35663 8'd10: prev_reg10 <= value;
35664 8'd11: prev_reg11 <= value;
35665 8'd12: prev_reg12 <= value;
35666 8'd13: prev_reg13 <= value;
35667 8'd14: prev_reg14 <= value;
35668 8'd15: prev_reg15 <= value;
35669 8'd16: prev_reg16 <= value;
35670 8'd17: prev_reg17 <= value;
35671 8'd18: prev_reg18 <= value;
35672 8'd19: prev_reg19 <= value;
35673 8'd20: prev_reg20 <= value;
35674 8'd21: prev_reg21 <= value;
35675 8'd22: prev_reg22 <= value;
35676 8'd23: prev_reg23 <= value;
35677 8'd24: prev_reg24 <= value;
35678 8'd25: prev_reg25 <= value;
35679 8'd26: prev_reg26 <= value;
35680 8'd27: prev_reg27 <= value;
35681 8'd28: prev_reg28 <= value;
35682 8'd29: prev_reg29 <= value;
35683 8'd30: prev_reg30 <= value;
35684 8'd31: prev_reg31 <= value;
35685 8'd32: prev_reg32 <= value;
35686 8'd33: prev_reg33 <= value;
35687 8'd34: prev_reg34 <= value;
35688 8'd35: prev_reg35 <= value;
35689 8'd36: prev_reg36 <= value;
35690 8'd37: prev_reg37 <= value;
35691 8'd38: prev_reg38 <= value;
35692 8'd39: prev_reg39 <= value;
35693 8'd40: prev_reg40 <= value;
35694 8'd41: prev_reg41 <= value;
35695 8'd42: prev_reg42 <= value;
35696 8'd43: prev_reg43 <= value;
35697 8'd44: prev_reg44 <= value;
35698 8'd45: prev_reg45 <= value;
35699 8'd46: prev_reg46 <= value;
35700 8'd47: prev_reg47 <= value;
35701 8'd48: prev_reg48 <= value;
35702 8'd49: prev_reg49 <= value;
35703 8'd50: prev_reg50 <= value;
35704 8'd51: prev_reg51 <= value;
35705 8'd52: prev_reg52 <= value;
35706 8'd53: prev_reg53 <= value;
35707 8'd54: prev_reg54 <= value;
35708 8'd55: prev_reg55 <= value;
35709 8'd56: prev_reg56 <= value;
35710 8'd57: prev_reg57 <= value;
35711 8'd58: prev_reg58 <= value;
35712 8'd59: prev_reg59 <= value;
35713 8'd60: prev_reg60 <= value;
35714 8'd61: prev_reg61 <= value;
35715 8'd62: prev_reg62 <= value;
35716 8'd63: prev_reg63 <= value;
35717 8'd64: prev_reg64 <= value;
35718 8'd65: prev_reg65 <= value;
35719 8'd66: prev_reg66 <= value;
35720 8'd67: prev_reg67 <= value;
35721 8'd68: prev_reg68 <= value;
35722 8'd69: prev_reg69 <= value;
35723 8'd70: prev_reg70 <= value;
35724 8'd71: prev_reg71 <= value;
35725 8'd72: prev_reg72 <= value;
35726 8'd73: prev_reg73 <= value;
35727 8'd74: prev_reg74 <= value;
35728 8'd75: prev_reg75 <= value;
35729 8'd76: prev_reg76 <= value;
35730 8'd77: prev_reg77 <= value;
35731 8'd78: prev_reg78 <= value;
35732 8'd79: prev_reg79 <= value;
35733 8'd80: prev_reg80 <= value;
35734 8'd81: prev_reg81 <= value;
35735 8'd82: prev_reg82 <= value;
35736 8'd83: prev_reg83 <= value;
35737 8'd84: prev_reg84 <= value;
35738 8'd85: prev_reg85 <= value;
35739 8'd86: prev_reg86 <= value;
35740 8'd87: prev_reg87 <= value;
35741 8'd88: prev_reg88 <= value;
35742 8'd89: prev_reg89 <= value;
35743 8'd90: prev_reg90 <= value;
35744 8'd91: prev_reg91 <= value;
35745 8'd92: prev_reg92 <= value;
35746 8'd93: prev_reg93 <= value;
35747 8'd94: prev_reg94 <= value;
35748 8'd95: prev_reg95 <= value;
35749 8'd96: prev_reg96 <= value;
35750 8'd97: prev_reg97 <= value;
35751 8'd98: prev_reg98 <= value;
35752 8'd99: prev_reg99 <= value;
35753 8'd100: prev_reg100 <= value;
35754 8'd101: prev_reg101 <= value;
35755 8'd102: prev_reg102 <= value;
35756 8'd103: prev_reg103 <= value;
35757 8'd104: prev_reg104 <= value;
35758 8'd105: prev_reg105 <= value;
35759 8'd106: prev_reg106 <= value;
35760 8'd107: prev_reg107 <= value;
35761 8'd108: prev_reg108 <= value;
35762 8'd109: prev_reg109 <= value;
35763 8'd110: prev_reg110 <= value;
35764 8'd111: prev_reg111 <= value;
35765 8'd112: prev_reg112 <= value;
35766 8'd113: prev_reg113 <= value;
35767 8'd114: prev_reg114 <= value;
35768 8'd115: prev_reg115 <= value;
35769 8'd116: prev_reg116 <= value;
35770 8'd117: prev_reg117 <= value;
35771 8'd118: prev_reg118 <= value;
35772 8'd119: prev_reg119 <= value;
35773 8'd120: prev_reg120 <= value;
35774 8'd121: prev_reg121 <= value;
35775 8'd122: prev_reg122 <= value;
35776 8'd123: prev_reg123 <= value;
35777 8'd124: prev_reg124 <= value;
35778 8'd125: prev_reg125 <= value;
35779 8'd126: prev_reg126 <= value;
35780 8'd127: prev_reg127 <= value;
35781 8'd128: prev_reg128 <= value;
35782 8'd129: prev_reg129 <= value;
35783 8'd130: prev_reg130 <= value;
35784 8'd131: prev_reg131 <= value;
35785 8'd132: prev_reg132 <= value;
35786 8'd133: prev_reg133 <= value;
35787 8'd134: prev_reg134 <= value;
35788 8'd135: prev_reg135 <= value;
35789 8'd136: prev_reg136 <= value;
35790 8'd137: prev_reg137 <= value;
35791 8'd138: prev_reg138 <= value;
35792 8'd139: prev_reg139 <= value;
35793 8'd140: prev_reg140 <= value;
35794 8'd141: prev_reg141 <= value;
35795 8'd142: prev_reg142 <= value;
35796 8'd143: prev_reg143 <= value;
35797 8'd144: prev_reg144 <= value;
35798 8'd145: prev_reg145 <= value;
35799 8'd146: prev_reg146 <= value;
35800 8'd147: prev_reg147 <= value;
35801 8'd148: prev_reg148 <= value;
35802 8'd149: prev_reg149 <= value;
35803 8'd150: prev_reg150 <= value;
35804 8'd151: prev_reg151 <= value;
35805 8'd152: prev_reg152 <= value;
35806 8'd153: prev_reg153 <= value;
35807 8'd154: prev_reg154 <= value;
35808 8'd155: prev_reg155 <= value;
35809 8'd156: prev_reg156 <= value;
35810 8'd157: prev_reg157 <= value;
35811 8'd158: prev_reg158 <= value;
35812 8'd159: prev_reg159 <= value;
35813 8'd160: prev_reg160 <= value;
35814 8'd161: prev_reg161 <= value;
35815 8'd162: prev_reg162 <= value;
35816 8'd163: prev_reg163 <= value;
35817 8'd164: prev_reg164 <= value;
35818 8'd165: prev_reg165 <= value;
35819 8'd166: prev_reg166 <= value;
35820 8'd167: prev_reg167 <= value;
35821 8'd168: prev_reg168 <= value;
35822 8'd169: prev_reg169 <= value;
35823 8'd170: prev_reg170 <= value;
35824 8'd171: prev_reg171 <= value;
35825 8'd172: prev_reg172 <= value;
35826 8'd173: prev_reg173 <= value;
35827 8'd174: prev_reg174 <= value;
35828 8'd175: prev_reg175 <= value;
35829 8'd176: prev_reg176 <= value;
35830 8'd177: prev_reg177 <= value;
35831 8'd178: prev_reg178 <= value;
35832 8'd179: prev_reg179 <= value;
35833 8'd180: prev_reg180 <= value;
35834 8'd181: prev_reg181 <= value;
35835 8'd182: prev_reg182 <= value;
35836 8'd183: prev_reg183 <= value;
35837 8'd184: prev_reg184 <= value;
35838 8'd185: prev_reg185 <= value;
35839 8'd186: prev_reg186 <= value;
35840 8'd187: prev_reg187 <= value;
35841 8'd188: prev_reg188 <= value;
35842 8'd189: prev_reg189 <= value;
35843 8'd190: prev_reg190 <= value;
35844 8'd191: prev_reg191 <= value;
35845 8'd192: prev_reg192 <= value;
35846 8'd193: prev_reg193 <= value;
35847 8'd194: prev_reg194 <= value;
35848 8'd195: prev_reg195 <= value;
35849 8'd196: prev_reg196 <= value;
35850 8'd197: prev_reg197 <= value;
35851 8'd198: prev_reg198 <= value;
35852 8'd199: prev_reg199 <= value;
35853 8'd200: prev_reg200 <= value;
35854 8'd201: prev_reg201 <= value;
35855 8'd202: prev_reg202 <= value;
35856 8'd203: prev_reg203 <= value;
35857 8'd204: prev_reg204 <= value;
35858 8'd205: prev_reg205 <= value;
35859 8'd206: prev_reg206 <= value;
35860 8'd207: prev_reg207 <= value;
35861 8'd208: prev_reg208 <= value;
35862 8'd209: prev_reg209 <= value;
35863 8'd210: prev_reg210 <= value;
35864 8'd211: prev_reg211 <= value;
35865 8'd212: prev_reg212 <= value;
35866 8'd213: prev_reg213 <= value;
35867 8'd214: prev_reg214 <= value;
35868 8'd215: prev_reg215 <= value;
35869 8'd216: prev_reg216 <= value;
35870 8'd217: prev_reg217 <= value;
35871 8'd218: prev_reg218 <= value;
35872 8'd219: prev_reg219 <= value;
35873 8'd220: prev_reg220 <= value;
35874 8'd221: prev_reg221 <= value;
35875 8'd222: prev_reg222 <= value;
35876 8'd223: prev_reg223 <= value;
35877 8'd224: prev_reg224 <= value;
35878 8'd225: prev_reg225 <= value;
35879 8'd226: prev_reg226 <= value;
35880 8'd227: prev_reg227 <= value;
35881 8'd228: prev_reg228 <= value;
35882 8'd229: prev_reg229 <= value;
35883 8'd230: prev_reg230 <= value;
35884 8'd231: prev_reg231 <= value;
35885 8'd232: prev_reg232 <= value;
35886 8'd233: prev_reg233 <= value;
35887 8'd234: prev_reg234 <= value;
35888 8'd235: prev_reg235 <= value;
35889 8'd236: prev_reg236 <= value;
35890 8'd237: prev_reg237 <= value;
35891 8'd238: prev_reg238 <= value;
35892 8'd239: prev_reg239 <= value;
35893 8'd240: prev_reg240 <= value;
35894 8'd241: prev_reg241 <= value;
35895 8'd242: prev_reg242 <= value;
35896 8'd243: prev_reg243 <= value;
35897 8'd244: prev_reg244 <= value;
35898 8'd245: prev_reg245 <= value;
35899 8'd246: prev_reg246 <= value;
35900 8'd247: prev_reg247 <= value;
35901 8'd248: prev_reg248 <= value;
35902 8'd249: prev_reg249 <= value;
35903 8'd250: prev_reg250 <= value;
35904 8'd251: prev_reg251 <= value;
35905 8'd252: prev_reg252 <= value;
35906 8'd253: prev_reg253 <= value;
35907 8'd254: prev_reg254 <= value;
35908 8'd255: prev_reg255 <= value;
35909 endcase
35910
35911 end //}
35912
35913endtask
35914
35915//----------------------------------------------------------
35916// Write Value to prev_reg using id as index (blocking)
35917task write_prev_async;
35918 input [7:0] id;
35919 input [63:0] value;
35920
35921 begin // {
35922
35923 case (id)
35924 8'd0: prev_reg0 = value;
35925 8'd1: prev_reg1 = value;
35926 8'd2: prev_reg2 = value;
35927 8'd3: prev_reg3 = value;
35928 8'd4: prev_reg4 = value;
35929 8'd5: prev_reg5 = value;
35930 8'd6: prev_reg6 = value;
35931 8'd7: prev_reg7 = value;
35932 8'd8: prev_reg8 = value;
35933 8'd9: prev_reg9 = value;
35934 8'd10: prev_reg10 = value;
35935 8'd11: prev_reg11 = value;
35936 8'd12: prev_reg12 = value;
35937 8'd13: prev_reg13 = value;
35938 8'd14: prev_reg14 = value;
35939 8'd15: prev_reg15 = value;
35940 8'd16: prev_reg16 = value;
35941 8'd17: prev_reg17 = value;
35942 8'd18: prev_reg18 = value;
35943 8'd19: prev_reg19 = value;
35944 8'd20: prev_reg20 = value;
35945 8'd21: prev_reg21 = value;
35946 8'd22: prev_reg22 = value;
35947 8'd23: prev_reg23 = value;
35948 8'd24: prev_reg24 = value;
35949 8'd25: prev_reg25 = value;
35950 8'd26: prev_reg26 = value;
35951 8'd27: prev_reg27 = value;
35952 8'd28: prev_reg28 = value;
35953 8'd29: prev_reg29 = value;
35954 8'd30: prev_reg30 = value;
35955 8'd31: prev_reg31 = value;
35956 8'd32: prev_reg32 = value;
35957 8'd33: prev_reg33 = value;
35958 8'd34: prev_reg34 = value;
35959 8'd35: prev_reg35 = value;
35960 8'd36: prev_reg36 = value;
35961 8'd37: prev_reg37 = value;
35962 8'd38: prev_reg38 = value;
35963 8'd39: prev_reg39 = value;
35964 8'd40: prev_reg40 = value;
35965 8'd41: prev_reg41 = value;
35966 8'd42: prev_reg42 = value;
35967 8'd43: prev_reg43 = value;
35968 8'd44: prev_reg44 = value;
35969 8'd45: prev_reg45 = value;
35970 8'd46: prev_reg46 = value;
35971 8'd47: prev_reg47 = value;
35972 8'd48: prev_reg48 = value;
35973 8'd49: prev_reg49 = value;
35974 8'd50: prev_reg50 = value;
35975 8'd51: prev_reg51 = value;
35976 8'd52: prev_reg52 = value;
35977 8'd53: prev_reg53 = value;
35978 8'd54: prev_reg54 = value;
35979 8'd55: prev_reg55 = value;
35980 8'd56: prev_reg56 = value;
35981 8'd57: prev_reg57 = value;
35982 8'd58: prev_reg58 = value;
35983 8'd59: prev_reg59 = value;
35984 8'd60: prev_reg60 = value;
35985 8'd61: prev_reg61 = value;
35986 8'd62: prev_reg62 = value;
35987 8'd63: prev_reg63 = value;
35988 8'd64: prev_reg64 = value;
35989 8'd65: prev_reg65 = value;
35990 8'd66: prev_reg66 = value;
35991 8'd67: prev_reg67 = value;
35992 8'd68: prev_reg68 = value;
35993 8'd69: prev_reg69 = value;
35994 8'd70: prev_reg70 = value;
35995 8'd71: prev_reg71 = value;
35996 8'd72: prev_reg72 = value;
35997 8'd73: prev_reg73 = value;
35998 8'd74: prev_reg74 = value;
35999 8'd75: prev_reg75 = value;
36000 8'd76: prev_reg76 = value;
36001 8'd77: prev_reg77 = value;
36002 8'd78: prev_reg78 = value;
36003 8'd79: prev_reg79 = value;
36004 8'd80: prev_reg80 = value;
36005 8'd81: prev_reg81 = value;
36006 8'd82: prev_reg82 = value;
36007 8'd83: prev_reg83 = value;
36008 8'd84: prev_reg84 = value;
36009 8'd85: prev_reg85 = value;
36010 8'd86: prev_reg86 = value;
36011 8'd87: prev_reg87 = value;
36012 8'd88: prev_reg88 = value;
36013 8'd89: prev_reg89 = value;
36014 8'd90: prev_reg90 = value;
36015 8'd91: prev_reg91 = value;
36016 8'd92: prev_reg92 = value;
36017 8'd93: prev_reg93 = value;
36018 8'd94: prev_reg94 = value;
36019 8'd95: prev_reg95 = value;
36020 8'd96: prev_reg96 = value;
36021 8'd97: prev_reg97 = value;
36022 8'd98: prev_reg98 = value;
36023 8'd99: prev_reg99 = value;
36024 8'd100: prev_reg100 = value;
36025 8'd101: prev_reg101 = value;
36026 8'd102: prev_reg102 = value;
36027 8'd103: prev_reg103 = value;
36028 8'd104: prev_reg104 = value;
36029 8'd105: prev_reg105 = value;
36030 8'd106: prev_reg106 = value;
36031 8'd107: prev_reg107 = value;
36032 8'd108: prev_reg108 = value;
36033 8'd109: prev_reg109 = value;
36034 8'd110: prev_reg110 = value;
36035 8'd111: prev_reg111 = value;
36036 8'd112: prev_reg112 = value;
36037 8'd113: prev_reg113 = value;
36038 8'd114: prev_reg114 = value;
36039 8'd115: prev_reg115 = value;
36040 8'd116: prev_reg116 = value;
36041 8'd117: prev_reg117 = value;
36042 8'd118: prev_reg118 = value;
36043 8'd119: prev_reg119 = value;
36044 8'd120: prev_reg120 = value;
36045 8'd121: prev_reg121 = value;
36046 8'd122: prev_reg122 = value;
36047 8'd123: prev_reg123 = value;
36048 8'd124: prev_reg124 = value;
36049 8'd125: prev_reg125 = value;
36050 8'd126: prev_reg126 = value;
36051 8'd127: prev_reg127 = value;
36052 8'd128: prev_reg128 = value;
36053 8'd129: prev_reg129 = value;
36054 8'd130: prev_reg130 = value;
36055 8'd131: prev_reg131 = value;
36056 8'd132: prev_reg132 = value;
36057 8'd133: prev_reg133 = value;
36058 8'd134: prev_reg134 = value;
36059 8'd135: prev_reg135 = value;
36060 8'd136: prev_reg136 = value;
36061 8'd137: prev_reg137 = value;
36062 8'd138: prev_reg138 = value;
36063 8'd139: prev_reg139 = value;
36064 8'd140: prev_reg140 = value;
36065 8'd141: prev_reg141 = value;
36066 8'd142: prev_reg142 = value;
36067 8'd143: prev_reg143 = value;
36068 8'd144: prev_reg144 = value;
36069 8'd145: prev_reg145 = value;
36070 8'd146: prev_reg146 = value;
36071 8'd147: prev_reg147 = value;
36072 8'd148: prev_reg148 = value;
36073 8'd149: prev_reg149 = value;
36074 8'd150: prev_reg150 = value;
36075 8'd151: prev_reg151 = value;
36076 8'd152: prev_reg152 = value;
36077 8'd153: prev_reg153 = value;
36078 8'd154: prev_reg154 = value;
36079 8'd155: prev_reg155 = value;
36080 8'd156: prev_reg156 = value;
36081 8'd157: prev_reg157 = value;
36082 8'd158: prev_reg158 = value;
36083 8'd159: prev_reg159 = value;
36084 8'd160: prev_reg160 = value;
36085 8'd161: prev_reg161 = value;
36086 8'd162: prev_reg162 = value;
36087 8'd163: prev_reg163 = value;
36088 8'd164: prev_reg164 = value;
36089 8'd165: prev_reg165 = value;
36090 8'd166: prev_reg166 = value;
36091 8'd167: prev_reg167 = value;
36092 8'd168: prev_reg168 = value;
36093 8'd169: prev_reg169 = value;
36094 8'd170: prev_reg170 = value;
36095 8'd171: prev_reg171 = value;
36096 8'd172: prev_reg172 = value;
36097 8'd173: prev_reg173 = value;
36098 8'd174: prev_reg174 = value;
36099 8'd175: prev_reg175 = value;
36100 8'd176: prev_reg176 = value;
36101 8'd177: prev_reg177 = value;
36102 8'd178: prev_reg178 = value;
36103 8'd179: prev_reg179 = value;
36104 8'd180: prev_reg180 = value;
36105 8'd181: prev_reg181 = value;
36106 8'd182: prev_reg182 = value;
36107 8'd183: prev_reg183 = value;
36108 8'd184: prev_reg184 = value;
36109 8'd185: prev_reg185 = value;
36110 8'd186: prev_reg186 = value;
36111 8'd187: prev_reg187 = value;
36112 8'd188: prev_reg188 = value;
36113 8'd189: prev_reg189 = value;
36114 8'd190: prev_reg190 = value;
36115 8'd191: prev_reg191 = value;
36116 8'd192: prev_reg192 = value;
36117 8'd193: prev_reg193 = value;
36118 8'd194: prev_reg194 = value;
36119 8'd195: prev_reg195 = value;
36120 8'd196: prev_reg196 = value;
36121 8'd197: prev_reg197 = value;
36122 8'd198: prev_reg198 = value;
36123 8'd199: prev_reg199 = value;
36124 8'd200: prev_reg200 = value;
36125 8'd201: prev_reg201 = value;
36126 8'd202: prev_reg202 = value;
36127 8'd203: prev_reg203 = value;
36128 8'd204: prev_reg204 = value;
36129 8'd205: prev_reg205 = value;
36130 8'd206: prev_reg206 = value;
36131 8'd207: prev_reg207 = value;
36132 8'd208: prev_reg208 = value;
36133 8'd209: prev_reg209 = value;
36134 8'd210: prev_reg210 = value;
36135 8'd211: prev_reg211 = value;
36136 8'd212: prev_reg212 = value;
36137 8'd213: prev_reg213 = value;
36138 8'd214: prev_reg214 = value;
36139 8'd215: prev_reg215 = value;
36140 8'd216: prev_reg216 = value;
36141 8'd217: prev_reg217 = value;
36142 8'd218: prev_reg218 = value;
36143 8'd219: prev_reg219 = value;
36144 8'd220: prev_reg220 = value;
36145 8'd221: prev_reg221 = value;
36146 8'd222: prev_reg222 = value;
36147 8'd223: prev_reg223 = value;
36148 8'd224: prev_reg224 = value;
36149 8'd225: prev_reg225 = value;
36150 8'd226: prev_reg226 = value;
36151 8'd227: prev_reg227 = value;
36152 8'd228: prev_reg228 = value;
36153 8'd229: prev_reg229 = value;
36154 8'd230: prev_reg230 = value;
36155 8'd231: prev_reg231 = value;
36156 8'd232: prev_reg232 = value;
36157 8'd233: prev_reg233 = value;
36158 8'd234: prev_reg234 = value;
36159 8'd235: prev_reg235 = value;
36160 8'd236: prev_reg236 = value;
36161 8'd237: prev_reg237 = value;
36162 8'd238: prev_reg238 = value;
36163 8'd239: prev_reg239 = value;
36164 8'd240: prev_reg240 = value;
36165 8'd241: prev_reg241 = value;
36166 8'd242: prev_reg242 = value;
36167 8'd243: prev_reg243 = value;
36168 8'd244: prev_reg244 = value;
36169 8'd245: prev_reg245 = value;
36170 8'd246: prev_reg246 = value;
36171 8'd247: prev_reg247 = value;
36172 8'd248: prev_reg248 = value;
36173 8'd249: prev_reg249 = value;
36174 8'd250: prev_reg250 = value;
36175 8'd251: prev_reg251 = value;
36176 8'd252: prev_reg252 = value;
36177 8'd253: prev_reg253 = value;
36178 8'd254: prev_reg254 = value;
36179 8'd255: prev_reg255 = value;
36180 endcase
36181
36182 end //}
36183
36184endtask
36185
36186//----------------------------------------------------------
36187// Read value frpm prev_reg using id as index
36188function [63:0] read_prev;
36189 input [7:0] id;
36190
36191 begin // {
36192
36193 case (id)
36194 8'd0: read_prev = prev_reg0;
36195 8'd1: read_prev = prev_reg1;
36196 8'd2: read_prev = prev_reg2;
36197 8'd3: read_prev = prev_reg3;
36198 8'd4: read_prev = prev_reg4;
36199 8'd5: read_prev = prev_reg5;
36200 8'd6: read_prev = prev_reg6;
36201 8'd7: read_prev = prev_reg7;
36202 8'd8: read_prev = prev_reg8;
36203 8'd9: read_prev = prev_reg9;
36204 8'd10: read_prev = prev_reg10;
36205 8'd11: read_prev = prev_reg11;
36206 8'd12: read_prev = prev_reg12;
36207 8'd13: read_prev = prev_reg13;
36208 8'd14: read_prev = prev_reg14;
36209 8'd15: read_prev = prev_reg15;
36210 8'd16: read_prev = prev_reg16;
36211 8'd17: read_prev = prev_reg17;
36212 8'd18: read_prev = prev_reg18;
36213 8'd19: read_prev = prev_reg19;
36214 8'd20: read_prev = prev_reg20;
36215 8'd21: read_prev = prev_reg21;
36216 8'd22: read_prev = prev_reg22;
36217 8'd23: read_prev = prev_reg23;
36218 8'd24: read_prev = prev_reg24;
36219 8'd25: read_prev = prev_reg25;
36220 8'd26: read_prev = prev_reg26;
36221 8'd27: read_prev = prev_reg27;
36222 8'd28: read_prev = prev_reg28;
36223 8'd29: read_prev = prev_reg29;
36224 8'd30: read_prev = prev_reg30;
36225 8'd31: read_prev = prev_reg31;
36226 8'd32: read_prev = prev_reg32;
36227 8'd33: read_prev = prev_reg33;
36228 8'd34: read_prev = prev_reg34;
36229 8'd35: read_prev = prev_reg35;
36230 8'd36: read_prev = prev_reg36;
36231 8'd37: read_prev = prev_reg37;
36232 8'd38: read_prev = prev_reg38;
36233 8'd39: read_prev = prev_reg39;
36234 8'd40: read_prev = prev_reg40;
36235 8'd41: read_prev = prev_reg41;
36236 8'd42: read_prev = prev_reg42;
36237 8'd43: read_prev = prev_reg43;
36238 8'd44: read_prev = prev_reg44;
36239 8'd45: read_prev = prev_reg45;
36240 8'd46: read_prev = prev_reg46;
36241 8'd47: read_prev = prev_reg47;
36242 8'd48: read_prev = prev_reg48;
36243 8'd49: read_prev = prev_reg49;
36244 8'd50: read_prev = prev_reg50;
36245 8'd51: read_prev = prev_reg51;
36246 8'd52: read_prev = prev_reg52;
36247 8'd53: read_prev = prev_reg53;
36248 8'd54: read_prev = prev_reg54;
36249 8'd55: read_prev = prev_reg55;
36250 8'd56: read_prev = prev_reg56;
36251 8'd57: read_prev = prev_reg57;
36252 8'd58: read_prev = prev_reg58;
36253 8'd59: read_prev = prev_reg59;
36254 8'd60: read_prev = prev_reg60;
36255 8'd61: read_prev = prev_reg61;
36256 8'd62: read_prev = prev_reg62;
36257 8'd63: read_prev = prev_reg63;
36258 8'd64: read_prev = prev_reg64;
36259 8'd65: read_prev = prev_reg65;
36260 8'd66: read_prev = prev_reg66;
36261 8'd67: read_prev = prev_reg67;
36262 8'd68: read_prev = prev_reg68;
36263 8'd69: read_prev = prev_reg69;
36264 8'd70: read_prev = prev_reg70;
36265 8'd71: read_prev = prev_reg71;
36266 8'd72: read_prev = prev_reg72;
36267 8'd73: read_prev = prev_reg73;
36268 8'd74: read_prev = prev_reg74;
36269 8'd75: read_prev = prev_reg75;
36270 8'd76: read_prev = prev_reg76;
36271 8'd77: read_prev = prev_reg77;
36272 8'd78: read_prev = prev_reg78;
36273 8'd79: read_prev = prev_reg79;
36274 8'd80: read_prev = prev_reg80;
36275 8'd81: read_prev = prev_reg81;
36276 8'd82: read_prev = prev_reg82;
36277 8'd83: read_prev = prev_reg83;
36278 8'd84: read_prev = prev_reg84;
36279 8'd85: read_prev = prev_reg85;
36280 8'd86: read_prev = prev_reg86;
36281 8'd87: read_prev = prev_reg87;
36282 8'd88: read_prev = prev_reg88;
36283 8'd89: read_prev = prev_reg89;
36284 8'd90: read_prev = prev_reg90;
36285 8'd91: read_prev = prev_reg91;
36286 8'd92: read_prev = prev_reg92;
36287 8'd93: read_prev = prev_reg93;
36288 8'd94: read_prev = prev_reg94;
36289 8'd95: read_prev = prev_reg95;
36290 8'd96: read_prev = prev_reg96;
36291 8'd97: read_prev = prev_reg97;
36292 8'd98: read_prev = prev_reg98;
36293 8'd99: read_prev = prev_reg99;
36294 8'd100: read_prev = prev_reg100;
36295 8'd101: read_prev = prev_reg101;
36296 8'd102: read_prev = prev_reg102;
36297 8'd103: read_prev = prev_reg103;
36298 8'd104: read_prev = prev_reg104;
36299 8'd105: read_prev = prev_reg105;
36300 8'd106: read_prev = prev_reg106;
36301 8'd107: read_prev = prev_reg107;
36302 8'd108: read_prev = prev_reg108;
36303 8'd109: read_prev = prev_reg109;
36304 8'd110: read_prev = prev_reg110;
36305 8'd111: read_prev = prev_reg111;
36306 8'd112: read_prev = prev_reg112;
36307 8'd113: read_prev = prev_reg113;
36308 8'd114: read_prev = prev_reg114;
36309 8'd115: read_prev = prev_reg115;
36310 8'd116: read_prev = prev_reg116;
36311 8'd117: read_prev = prev_reg117;
36312 8'd118: read_prev = prev_reg118;
36313 8'd119: read_prev = prev_reg119;
36314 8'd120: read_prev = prev_reg120;
36315 8'd121: read_prev = prev_reg121;
36316 8'd122: read_prev = prev_reg122;
36317 8'd123: read_prev = prev_reg123;
36318 8'd124: read_prev = prev_reg124;
36319 8'd125: read_prev = prev_reg125;
36320 8'd126: read_prev = prev_reg126;
36321 8'd127: read_prev = prev_reg127;
36322 8'd128: read_prev = prev_reg128;
36323 8'd129: read_prev = prev_reg129;
36324 8'd130: read_prev = prev_reg130;
36325 8'd131: read_prev = prev_reg131;
36326 8'd132: read_prev = prev_reg132;
36327 8'd133: read_prev = prev_reg133;
36328 8'd134: read_prev = prev_reg134;
36329 8'd135: read_prev = prev_reg135;
36330 8'd136: read_prev = prev_reg136;
36331 8'd137: read_prev = prev_reg137;
36332 8'd138: read_prev = prev_reg138;
36333 8'd139: read_prev = prev_reg139;
36334 8'd140: read_prev = prev_reg140;
36335 8'd141: read_prev = prev_reg141;
36336 8'd142: read_prev = prev_reg142;
36337 8'd143: read_prev = prev_reg143;
36338 8'd144: read_prev = prev_reg144;
36339 8'd145: read_prev = prev_reg145;
36340 8'd146: read_prev = prev_reg146;
36341 8'd147: read_prev = prev_reg147;
36342 8'd148: read_prev = prev_reg148;
36343 8'd149: read_prev = prev_reg149;
36344 8'd150: read_prev = prev_reg150;
36345 8'd151: read_prev = prev_reg151;
36346 8'd152: read_prev = prev_reg152;
36347 8'd153: read_prev = prev_reg153;
36348 8'd154: read_prev = prev_reg154;
36349 8'd155: read_prev = prev_reg155;
36350 8'd156: read_prev = prev_reg156;
36351 8'd157: read_prev = prev_reg157;
36352 8'd158: read_prev = prev_reg158;
36353 8'd159: read_prev = prev_reg159;
36354 8'd160: read_prev = prev_reg160;
36355 8'd161: read_prev = prev_reg161;
36356 8'd162: read_prev = prev_reg162;
36357 8'd163: read_prev = prev_reg163;
36358 8'd164: read_prev = prev_reg164;
36359 8'd165: read_prev = prev_reg165;
36360 8'd166: read_prev = prev_reg166;
36361 8'd167: read_prev = prev_reg167;
36362 8'd168: read_prev = prev_reg168;
36363 8'd169: read_prev = prev_reg169;
36364 8'd170: read_prev = prev_reg170;
36365 8'd171: read_prev = prev_reg171;
36366 8'd172: read_prev = prev_reg172;
36367 8'd173: read_prev = prev_reg173;
36368 8'd174: read_prev = prev_reg174;
36369 8'd175: read_prev = prev_reg175;
36370 8'd176: read_prev = prev_reg176;
36371 8'd177: read_prev = prev_reg177;
36372 8'd178: read_prev = prev_reg178;
36373 8'd179: read_prev = prev_reg179;
36374 8'd180: read_prev = prev_reg180;
36375 8'd181: read_prev = prev_reg181;
36376 8'd182: read_prev = prev_reg182;
36377 8'd183: read_prev = prev_reg183;
36378 8'd184: read_prev = prev_reg184;
36379 8'd185: read_prev = prev_reg185;
36380 8'd186: read_prev = prev_reg186;
36381 8'd187: read_prev = prev_reg187;
36382 8'd188: read_prev = prev_reg188;
36383 8'd189: read_prev = prev_reg189;
36384 8'd190: read_prev = prev_reg190;
36385 8'd191: read_prev = prev_reg191;
36386 8'd192: read_prev = prev_reg192;
36387 8'd193: read_prev = prev_reg193;
36388 8'd194: read_prev = prev_reg194;
36389 8'd195: read_prev = prev_reg195;
36390 8'd196: read_prev = prev_reg196;
36391 8'd197: read_prev = prev_reg197;
36392 8'd198: read_prev = prev_reg198;
36393 8'd199: read_prev = prev_reg199;
36394 8'd200: read_prev = prev_reg200;
36395 8'd201: read_prev = prev_reg201;
36396 8'd202: read_prev = prev_reg202;
36397 8'd203: read_prev = prev_reg203;
36398 8'd204: read_prev = prev_reg204;
36399 8'd205: read_prev = prev_reg205;
36400 8'd206: read_prev = prev_reg206;
36401 8'd207: read_prev = prev_reg207;
36402 8'd208: read_prev = prev_reg208;
36403 8'd209: read_prev = prev_reg209;
36404 8'd210: read_prev = prev_reg210;
36405 8'd211: read_prev = prev_reg211;
36406 8'd212: read_prev = prev_reg212;
36407 8'd213: read_prev = prev_reg213;
36408 8'd214: read_prev = prev_reg214;
36409 8'd215: read_prev = prev_reg215;
36410 8'd216: read_prev = prev_reg216;
36411 8'd217: read_prev = prev_reg217;
36412 8'd218: read_prev = prev_reg218;
36413 8'd219: read_prev = prev_reg219;
36414 8'd220: read_prev = prev_reg220;
36415 8'd221: read_prev = prev_reg221;
36416 8'd222: read_prev = prev_reg222;
36417 8'd223: read_prev = prev_reg223;
36418 8'd224: read_prev = prev_reg224;
36419 8'd225: read_prev = prev_reg225;
36420 8'd226: read_prev = prev_reg226;
36421 8'd227: read_prev = prev_reg227;
36422 8'd228: read_prev = prev_reg228;
36423 8'd229: read_prev = prev_reg229;
36424 8'd230: read_prev = prev_reg230;
36425 8'd231: read_prev = prev_reg231;
36426 8'd232: read_prev = prev_reg232;
36427 8'd233: read_prev = prev_reg233;
36428 8'd234: read_prev = prev_reg234;
36429 8'd235: read_prev = prev_reg235;
36430 8'd236: read_prev = prev_reg236;
36431 8'd237: read_prev = prev_reg237;
36432 8'd238: read_prev = prev_reg238;
36433 8'd239: read_prev = prev_reg239;
36434 8'd240: read_prev = prev_reg240;
36435 8'd241: read_prev = prev_reg241;
36436 8'd242: read_prev = prev_reg242;
36437 8'd243: read_prev = prev_reg243;
36438 8'd244: read_prev = prev_reg244;
36439 8'd245: read_prev = prev_reg245;
36440 8'd246: read_prev = prev_reg246;
36441 8'd247: read_prev = prev_reg247;
36442 8'd248: read_prev = prev_reg248;
36443 8'd249: read_prev = prev_reg249;
36444 8'd250: read_prev = prev_reg250;
36445 8'd251: read_prev = prev_reg251;
36446 8'd252: read_prev = prev_reg252;
36447 8'd253: read_prev = prev_reg253;
36448 8'd254: read_prev = prev_reg254;
36449 8'd255: read_prev = prev_reg255;
36450 endcase
36451
36452 end //}
36453
36454endfunction
36455
36456//----------------------------------------------------------
36457function [4:0] remap;
36458 input [4:0] rd;
36459 input oddwin;
36460
36461 begin
36462
36463 remap[4] = rd[4] ^ (rd[3] & oddwin);
36464 remap[3:0] = rd[3:0];
36465
36466 end
36467endfunction
36468
36469//----------------------------------------------------------
36470// Initialize nas_pipe registers
36471initial begin : INIT_BLOCK
36472 integer i;
36473
36474 nas_pipe_enable = 1'b1; // Nas_pipe always enables itself
36475 good_trap_detected = 1'b0;
36476
36477 @ (posedge `BENCH_SPC6_GCLK);
36478 `TOP.th_last_act_cycle[mytnum] = 0;
36479
36480 // Window registers
36481 win0_reg8 = 0;
36482 win1_reg8 = 0;
36483 win2_reg8 = 0;
36484 win3_reg8 = 0;
36485 win4_reg8 = 0;
36486 win5_reg8 = 0;
36487 win6_reg8 = 0;
36488 win7_reg8 = 0;
36489 win0_reg9 = 0;
36490 win1_reg9 = 0;
36491 win2_reg9 = 0;
36492 win3_reg9 = 0;
36493 win4_reg9 = 0;
36494 win5_reg9 = 0;
36495 win6_reg9 = 0;
36496 win7_reg9 = 0;
36497 win0_reg10 = 0;
36498 win1_reg10 = 0;
36499 win2_reg10 = 0;
36500 win3_reg10 = 0;
36501 win4_reg10 = 0;
36502 win5_reg10 = 0;
36503 win6_reg10 = 0;
36504 win7_reg10 = 0;
36505 win0_reg11 = 0;
36506 win1_reg11 = 0;
36507 win2_reg11 = 0;
36508 win3_reg11 = 0;
36509 win4_reg11 = 0;
36510 win5_reg11 = 0;
36511 win6_reg11 = 0;
36512 win7_reg11 = 0;
36513 win0_reg12 = 0;
36514 win1_reg12 = 0;
36515 win2_reg12 = 0;
36516 win3_reg12 = 0;
36517 win4_reg12 = 0;
36518 win5_reg12 = 0;
36519 win6_reg12 = 0;
36520 win7_reg12 = 0;
36521 win0_reg13 = 0;
36522 win1_reg13 = 0;
36523 win2_reg13 = 0;
36524 win3_reg13 = 0;
36525 win4_reg13 = 0;
36526 win5_reg13 = 0;
36527 win6_reg13 = 0;
36528 win7_reg13 = 0;
36529 win0_reg14 = 0;
36530 win1_reg14 = 0;
36531 win2_reg14 = 0;
36532 win3_reg14 = 0;
36533 win4_reg14 = 0;
36534 win5_reg14 = 0;
36535 win6_reg14 = 0;
36536 win7_reg14 = 0;
36537 win0_reg15 = 0;
36538 win1_reg15 = 0;
36539 win2_reg15 = 0;
36540 win3_reg15 = 0;
36541 win4_reg15 = 0;
36542 win5_reg15 = 0;
36543 win6_reg15 = 0;
36544 win7_reg15 = 0;
36545 win0_reg16 = 0;
36546 win1_reg16 = 0;
36547 win2_reg16 = 0;
36548 win3_reg16 = 0;
36549 win4_reg16 = 0;
36550 win5_reg16 = 0;
36551 win6_reg16 = 0;
36552 win7_reg16 = 0;
36553 win0_reg17 = 0;
36554 win1_reg17 = 0;
36555 win2_reg17 = 0;
36556 win3_reg17 = 0;
36557 win4_reg17 = 0;
36558 win5_reg17 = 0;
36559 win6_reg17 = 0;
36560 win7_reg17 = 0;
36561 win0_reg18 = 0;
36562 win1_reg18 = 0;
36563 win2_reg18 = 0;
36564 win3_reg18 = 0;
36565 win4_reg18 = 0;
36566 win5_reg18 = 0;
36567 win6_reg18 = 0;
36568 win7_reg18 = 0;
36569 win0_reg19 = 0;
36570 win1_reg19 = 0;
36571 win2_reg19 = 0;
36572 win3_reg19 = 0;
36573 win4_reg19 = 0;
36574 win5_reg19 = 0;
36575 win6_reg19 = 0;
36576 win7_reg19 = 0;
36577 win0_reg20 = 0;
36578 win1_reg20 = 0;
36579 win2_reg20 = 0;
36580 win3_reg20 = 0;
36581 win4_reg20 = 0;
36582 win5_reg20 = 0;
36583 win6_reg20 = 0;
36584 win7_reg20 = 0;
36585 win0_reg21 = 0;
36586 win1_reg21 = 0;
36587 win2_reg21 = 0;
36588 win3_reg21 = 0;
36589 win4_reg21 = 0;
36590 win5_reg21 = 0;
36591 win6_reg21 = 0;
36592 win7_reg21 = 0;
36593 win0_reg22 = 0;
36594 win1_reg22 = 0;
36595 win2_reg22 = 0;
36596 win3_reg22 = 0;
36597 win4_reg22 = 0;
36598 win5_reg22 = 0;
36599 win6_reg22 = 0;
36600 win7_reg22 = 0;
36601 win0_reg23 = 0;
36602 win1_reg23 = 0;
36603 win2_reg23 = 0;
36604 win3_reg23 = 0;
36605 win4_reg23 = 0;
36606 win5_reg23 = 0;
36607 win6_reg23 = 0;
36608 win7_reg23 = 0;
36609 win0_reg24 = 0;
36610 win1_reg24 = 0;
36611 win2_reg24 = 0;
36612 win3_reg24 = 0;
36613 win4_reg24 = 0;
36614 win5_reg24 = 0;
36615 win6_reg24 = 0;
36616 win7_reg24 = 0;
36617 win0_reg25 = 0;
36618 win1_reg25 = 0;
36619 win2_reg25 = 0;
36620 win3_reg25 = 0;
36621 win4_reg25 = 0;
36622 win5_reg25 = 0;
36623 win6_reg25 = 0;
36624 win7_reg25 = 0;
36625 win0_reg26 = 0;
36626 win1_reg26 = 0;
36627 win2_reg26 = 0;
36628 win3_reg26 = 0;
36629 win4_reg26 = 0;
36630 win5_reg26 = 0;
36631 win6_reg26 = 0;
36632 win7_reg26 = 0;
36633 win0_reg27 = 0;
36634 win1_reg27 = 0;
36635 win2_reg27 = 0;
36636 win3_reg27 = 0;
36637 win4_reg27 = 0;
36638 win5_reg27 = 0;
36639 win6_reg27 = 0;
36640 win7_reg27 = 0;
36641 win0_reg28 = 0;
36642 win1_reg28 = 0;
36643 win2_reg28 = 0;
36644 win3_reg28 = 0;
36645 win4_reg28 = 0;
36646 win5_reg28 = 0;
36647 win6_reg28 = 0;
36648 win7_reg28 = 0;
36649 win0_reg29 = 0;
36650 win1_reg29 = 0;
36651 win2_reg29 = 0;
36652 win3_reg29 = 0;
36653 win4_reg29 = 0;
36654 win5_reg29 = 0;
36655 win6_reg29 = 0;
36656 win7_reg29 = 0;
36657 win0_reg30 = 0;
36658 win1_reg30 = 0;
36659 win2_reg30 = 0;
36660 win3_reg30 = 0;
36661 win4_reg30 = 0;
36662 win5_reg30 = 0;
36663 win6_reg30 = 0;
36664 win7_reg30 = 0;
36665 win0_reg31 = 0;
36666 win1_reg31 = 0;
36667 win2_reg31 = 0;
36668 win3_reg31 = 0;
36669 win4_reg31 = 0;
36670 win5_reg31 = 0;
36671 win6_reg31 = 0;
36672 win7_reg31 = 0;
36673
36674 // Global registers
36675 th_gl = `POR_GL;
36676 gl0_reg0 = 0;
36677 gl1_reg0 = 0;
36678 gl2_reg0 = 0;
36679 gl3_reg0 = 0;
36680 gl0_reg1 = 0;
36681 gl1_reg1 = 0;
36682 gl2_reg1 = 0;
36683 gl3_reg1 = 0;
36684 gl0_reg2 = 0;
36685 gl1_reg2 = 0;
36686 gl2_reg2 = 0;
36687 gl3_reg2 = 0;
36688 gl0_reg3 = 0;
36689 gl1_reg3 = 0;
36690 gl2_reg3 = 0;
36691 gl3_reg3 = 0;
36692 gl0_reg4 = 0;
36693 gl1_reg4 = 0;
36694 gl2_reg4 = 0;
36695 gl3_reg4 = 0;
36696 gl0_reg5 = 0;
36697 gl1_reg5 = 0;
36698 gl2_reg5 = 0;
36699 gl3_reg5 = 0;
36700 gl0_reg6 = 0;
36701 gl1_reg6 = 0;
36702 gl2_reg6 = 0;
36703 gl3_reg6 = 0;
36704 gl0_reg7 = 0;
36705 gl1_reg7 = 0;
36706 gl2_reg7 = 0;
36707 gl3_reg7 = 0;
36708
36709 `PR_INFO ("nas", `INFO, "T%0d Init shadow registers.",mytnum);
36710 prev_reg0 = 0;
36711 prev_reg1 = 0;
36712 prev_reg2 = 0;
36713 prev_reg3 = 0;
36714 prev_reg4 = 0;
36715 prev_reg5 = 0;
36716 prev_reg6 = 0;
36717 prev_reg7 = 0;
36718 prev_reg8 = 0;
36719 prev_reg9 = 0;
36720 prev_reg10 = 0;
36721 prev_reg11 = 0;
36722 prev_reg12 = 0;
36723 prev_reg13 = 0;
36724 prev_reg14 = 0;
36725 prev_reg15 = 0;
36726 prev_reg16 = 0;
36727 prev_reg17 = 0;
36728 prev_reg18 = 0;
36729 prev_reg19 = 0;
36730 prev_reg20 = 0;
36731 prev_reg21 = 0;
36732 prev_reg22 = 0;
36733 prev_reg23 = 0;
36734 prev_reg24 = 0;
36735 prev_reg25 = 0;
36736 prev_reg26 = 0;
36737 prev_reg27 = 0;
36738 prev_reg28 = 0;
36739 prev_reg29 = 0;
36740 prev_reg30 = 0;
36741 prev_reg31 = 0;
36742 prev_reg32 = 0;
36743 prev_reg33 = 0;
36744 prev_reg34 = 0;
36745 prev_reg35 = 0;
36746 prev_reg36 = 0;
36747 prev_reg37 = 0;
36748 prev_reg38 = 0;
36749 prev_reg39 = 0;
36750 prev_reg40 = 0;
36751 prev_reg41 = 0;
36752 prev_reg42 = 0;
36753 prev_reg43 = 0;
36754 prev_reg44 = 0;
36755 prev_reg45 = 0;
36756 prev_reg46 = 0;
36757 prev_reg47 = 0;
36758 prev_reg48 = 0;
36759 prev_reg49 = 0;
36760 prev_reg50 = 0;
36761 prev_reg51 = 0;
36762 prev_reg52 = 0;
36763 prev_reg53 = 0;
36764 prev_reg54 = 0;
36765 prev_reg55 = 0;
36766 prev_reg56 = 0;
36767 prev_reg57 = 0;
36768 prev_reg58 = 0;
36769 prev_reg59 = 0;
36770 prev_reg60 = 0;
36771 prev_reg61 = 0;
36772 prev_reg62 = 0;
36773 prev_reg63 = 0;
36774 prev_reg64 = 0;
36775 prev_reg65 = 0;
36776 prev_reg66 = 0;
36777 prev_reg67 = 0;
36778 prev_reg68 = 0;
36779 prev_reg69 = 0;
36780 prev_reg70 = 0;
36781 prev_reg71 = 0;
36782 prev_reg72 = 0;
36783 prev_reg73 = 0;
36784 prev_reg74 = 0;
36785 prev_reg75 = 0;
36786 prev_reg76 = 0;
36787 prev_reg77 = 0;
36788 prev_reg78 = 0;
36789 prev_reg79 = 0;
36790 prev_reg80 = 0;
36791 prev_reg81 = 0;
36792 prev_reg82 = 0;
36793 prev_reg83 = 0;
36794 prev_reg84 = 0;
36795 prev_reg85 = 0;
36796 prev_reg86 = 0;
36797 prev_reg87 = 0;
36798 prev_reg88 = 0;
36799 prev_reg89 = 0;
36800 prev_reg90 = 0;
36801 prev_reg91 = 0;
36802 prev_reg92 = 0;
36803 prev_reg93 = 0;
36804 prev_reg94 = 0;
36805 prev_reg95 = 0;
36806 prev_reg96 = 0;
36807 prev_reg97 = 0;
36808 prev_reg98 = 0;
36809 prev_reg99 = 0;
36810 prev_reg100 = 0;
36811 prev_reg101 = 0;
36812 prev_reg102 = 0;
36813 prev_reg103 = 0;
36814 prev_reg104 = 0;
36815 prev_reg105 = 0;
36816 prev_reg106 = 0;
36817 prev_reg107 = 0;
36818 prev_reg108 = 0;
36819 prev_reg109 = 0;
36820 prev_reg110 = 0;
36821 prev_reg111 = 0;
36822 prev_reg112 = 0;
36823 prev_reg113 = 0;
36824 prev_reg114 = 0;
36825 prev_reg115 = 0;
36826 prev_reg116 = 0;
36827 prev_reg117 = 0;
36828 prev_reg118 = 0;
36829 prev_reg119 = 0;
36830 prev_reg120 = 0;
36831 prev_reg121 = 0;
36832 prev_reg122 = 0;
36833 prev_reg123 = 0;
36834 prev_reg124 = 0;
36835 prev_reg125 = 0;
36836 prev_reg126 = 0;
36837 prev_reg127 = 0;
36838 prev_reg128 = 0;
36839 prev_reg129 = 0;
36840 prev_reg130 = 0;
36841 prev_reg131 = 0;
36842 prev_reg132 = 0;
36843 prev_reg133 = 0;
36844 prev_reg134 = 0;
36845 prev_reg135 = 0;
36846 prev_reg136 = 0;
36847 prev_reg137 = 0;
36848 prev_reg138 = 0;
36849 prev_reg139 = 0;
36850 prev_reg140 = 0;
36851 prev_reg141 = 0;
36852 prev_reg142 = 0;
36853 prev_reg143 = 0;
36854 prev_reg144 = 0;
36855 prev_reg145 = 0;
36856 prev_reg146 = 0;
36857 prev_reg147 = 0;
36858 prev_reg148 = 0;
36859 prev_reg149 = 0;
36860 prev_reg150 = 0;
36861 prev_reg151 = 0;
36862 prev_reg152 = 0;
36863 prev_reg153 = 0;
36864 prev_reg154 = 0;
36865 prev_reg155 = 0;
36866 prev_reg156 = 0;
36867 prev_reg157 = 0;
36868 prev_reg158 = 0;
36869 prev_reg159 = 0;
36870 prev_reg160 = 0;
36871 prev_reg161 = 0;
36872 prev_reg162 = 0;
36873 prev_reg163 = 0;
36874 prev_reg164 = 0;
36875 prev_reg165 = 0;
36876 prev_reg166 = 0;
36877 prev_reg167 = 0;
36878 prev_reg168 = 0;
36879 prev_reg169 = 0;
36880 prev_reg170 = 0;
36881 prev_reg171 = 0;
36882 prev_reg172 = 0;
36883 prev_reg173 = 0;
36884 prev_reg174 = 0;
36885 prev_reg175 = 0;
36886 prev_reg176 = 0;
36887 prev_reg177 = 0;
36888 prev_reg178 = 0;
36889 prev_reg179 = 0;
36890 prev_reg180 = 0;
36891 prev_reg181 = 0;
36892 prev_reg182 = 0;
36893 prev_reg183 = 0;
36894 prev_reg184 = 0;
36895 prev_reg185 = 0;
36896 prev_reg186 = 0;
36897 prev_reg187 = 0;
36898 prev_reg188 = 0;
36899 prev_reg189 = 0;
36900 prev_reg190 = 0;
36901 prev_reg191 = 0;
36902 prev_reg192 = 0;
36903 prev_reg193 = 0;
36904 prev_reg194 = 0;
36905 prev_reg195 = 0;
36906 prev_reg196 = 0;
36907 prev_reg197 = 0;
36908 prev_reg198 = 0;
36909 prev_reg199 = 0;
36910 prev_reg200 = 0;
36911 prev_reg201 = 0;
36912 prev_reg202 = 0;
36913 prev_reg203 = 0;
36914 prev_reg204 = 0;
36915 prev_reg205 = 0;
36916 prev_reg206 = 0;
36917 prev_reg207 = 0;
36918 prev_reg208 = 0;
36919 prev_reg209 = 0;
36920 prev_reg210 = 0;
36921 prev_reg211 = 0;
36922 prev_reg212 = 0;
36923 prev_reg213 = 0;
36924 prev_reg214 = 0;
36925 prev_reg215 = 0;
36926 prev_reg216 = 0;
36927 prev_reg217 = 0;
36928 prev_reg218 = 0;
36929 prev_reg219 = 0;
36930 prev_reg220 = 0;
36931 prev_reg221 = 0;
36932 prev_reg222 = 0;
36933 prev_reg223 = 0;
36934 prev_reg224 = 0;
36935 prev_reg225 = 0;
36936 prev_reg226 = 0;
36937 prev_reg227 = 0;
36938 prev_reg228 = 0;
36939 prev_reg229 = 0;
36940 prev_reg230 = 0;
36941 prev_reg231 = 0;
36942 prev_reg232 = 0;
36943 prev_reg233 = 0;
36944 prev_reg234 = 0;
36945 prev_reg235 = 0;
36946 prev_reg236 = 0;
36947 prev_reg237 = 0;
36948 prev_reg238 = 0;
36949 prev_reg239 = 0;
36950 prev_reg240 = 0;
36951 prev_reg241 = 0;
36952 prev_reg242 = 0;
36953 prev_reg243 = 0;
36954 prev_reg244 = 0;
36955 prev_reg245 = 0;
36956 prev_reg246 = 0;
36957 prev_reg247 = 0;
36958 prev_reg248 = 0;
36959 prev_reg249 = 0;
36960 prev_reg250 = 0;
36961 prev_reg251 = 0;
36962 prev_reg252 = 0;
36963 prev_reg253 = 0;
36964 prev_reg254 = 0;
36965 prev_reg255 = 0;
36966
36967 // POR for control registers
36968 write_prev(`FPRS +`CTL_OFFSET,3'h4);
36969 write_prev(`CLEANWIN +`CTL_OFFSET,3'h7);
36970 write_prev(`CANSAVE +`CTL_OFFSET,3'h6);
36971
36972 // POR for FPRS = 0x4
36973 write_prev(`FPRS+`CTL_OFFSET,3'h4);
36974
36975 // POR for PSTATE = 0x14 (PEF, PRIV = 1)
36976 write_prev(`PSTATE + `CTL_OFFSET,'h14);
36977
36978 // POR for HPSTATE = 0x4034 (RED, HPRIV = 1)
36979 write_prev(`HPSTATE + `CTL_OFFSET,'h24);
36980
36981 // POR for TL = = 0x6 [MAXTL]
36982 write_prev(`TL + `CTL_OFFSET,'h6);
36983
36984 // POR for TT6 = = 1
36985 write_prev(`TT6 + `CTL_OFFSET,'h1);
36986
36987 // POR for GL = MAXGL = 3
36988 write_prev(`GL + `CTL_OFFSET,`POR_GL);
36989
36990 // POR for VER = {003e, 0024, 01, 0036, 07}
36991 write_prev(`VER + `CTL_OFFSET,{32'h003e0024,VER_reg[31:24],24'h030607});
36992
36993 // POR for *_cmpr registers is INT_DIS = 1
36994 write_prev(`TICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
36995 write_prev(`STICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
36996 write_prev(`HSTICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
36997
36998 // Need to define so that 1st instruction will print correctly
36999 write_prev(`PC+`CTL_OFFSET,`POR_PC);
37000
37001 first_op = 1;
37002 pc_last = `BAD_PC;
37003
37004 `ifndef EMUL_TL
37005 delta_prev[`PC_INDEX] = `BAD_PC;
37006 `endif
37007
37008 irf_offset = (mytid%4)*32;
37009 in_wmr = 0;
37010 wmr <= 0;
37011end
37012
37013//----------------------------------------------------------
37014task wmr_prev;
37015 begin // {
37016
37017 // For WMR, we will set to 0x0, so that initial deltas
37018
37019 //
37020
37021 // WMR for PSTATE = 0x14 (PEF, PRIV = 1)
37022 // write_prev(`PSTATE + `CTL_OFFSET,'h00);
37023
37024 // WMR for HPSTATE = 0x4034 (RED, HPRIV = 1)
37025 // write_prev(`HPSTATE + `CTL_OFFSET,'h00);
37026
37027 // WMR for TL = = 0x6 [MAXTL]
37028 // write_prev(`TL + `CTL_OFFSET,'h0);
37029
37030 // WMR for TT6 = = 1
37031 // write_prev(`TT6 + `CTL_OFFSET,'h1);
37032
37033 // WMR for GL = MAXGL = 3
37034 // write_prev(`GL + `CTL_OFFSET,0);
37035
37036 end // }
37037endtask
37038
37039//----------------------------------------------------------
37040task por_prev;
37041 begin // {
37042
37043 // For POR, we will set to 0x0, so that initial deltas
37044 // and prev state are all consistent with DUT. No values
37045 // are preserved
37046
37047 `PR_ALWAYS ("arg", `ALWAYS,"T%0d Resetting Nas Pipe states for POR ..",mytnum);
37048 delta_fx4[`NEXT_INDEX] <= `FIRST_INDEX;
37049 delta_fx4[`FIRST_INDEX] <= 77'hx;
37050 delta_fx5[`NEXT_INDEX] <= `FIRST_INDEX;
37051 delta_fb[`NEXT_INDEX] <= `FIRST_INDEX;
37052 delta_fw[`NEXT_INDEX] <= `FIRST_INDEX;
37053 delta_fw1[`NEXT_INDEX] <= `FIRST_INDEX;
37054 delta_fw2[`NEXT_INDEX] <= `FIRST_INDEX;
37055 // Window registers
37056 win0_reg8 = 0;
37057 win1_reg8 = 0;
37058 win2_reg8 = 0;
37059 win3_reg8 = 0;
37060 win4_reg8 = 0;
37061 win5_reg8 = 0;
37062 win6_reg8 = 0;
37063 win7_reg8 = 0;
37064 win0_reg9 = 0;
37065 win1_reg9 = 0;
37066 win2_reg9 = 0;
37067 win3_reg9 = 0;
37068 win4_reg9 = 0;
37069 win5_reg9 = 0;
37070 win6_reg9 = 0;
37071 win7_reg9 = 0;
37072 win0_reg10 = 0;
37073 win1_reg10 = 0;
37074 win2_reg10 = 0;
37075 win3_reg10 = 0;
37076 win4_reg10 = 0;
37077 win5_reg10 = 0;
37078 win6_reg10 = 0;
37079 win7_reg10 = 0;
37080 win0_reg11 = 0;
37081 win1_reg11 = 0;
37082 win2_reg11 = 0;
37083 win3_reg11 = 0;
37084 win4_reg11 = 0;
37085 win5_reg11 = 0;
37086 win6_reg11 = 0;
37087 win7_reg11 = 0;
37088 win0_reg12 = 0;
37089 win1_reg12 = 0;
37090 win2_reg12 = 0;
37091 win3_reg12 = 0;
37092 win4_reg12 = 0;
37093 win5_reg12 = 0;
37094 win6_reg12 = 0;
37095 win7_reg12 = 0;
37096 win0_reg13 = 0;
37097 win1_reg13 = 0;
37098 win2_reg13 = 0;
37099 win3_reg13 = 0;
37100 win4_reg13 = 0;
37101 win5_reg13 = 0;
37102 win6_reg13 = 0;
37103 win7_reg13 = 0;
37104 win0_reg14 = 0;
37105 win1_reg14 = 0;
37106 win2_reg14 = 0;
37107 win3_reg14 = 0;
37108 win4_reg14 = 0;
37109 win5_reg14 = 0;
37110 win6_reg14 = 0;
37111 win7_reg14 = 0;
37112 win0_reg15 = 0;
37113 win1_reg15 = 0;
37114 win2_reg15 = 0;
37115 win3_reg15 = 0;
37116 win4_reg15 = 0;
37117 win5_reg15 = 0;
37118 win6_reg15 = 0;
37119 win7_reg15 = 0;
37120 win0_reg16 = 0;
37121 win1_reg16 = 0;
37122 win2_reg16 = 0;
37123 win3_reg16 = 0;
37124 win4_reg16 = 0;
37125 win5_reg16 = 0;
37126 win6_reg16 = 0;
37127 win7_reg16 = 0;
37128 win0_reg17 = 0;
37129 win1_reg17 = 0;
37130 win2_reg17 = 0;
37131 win3_reg17 = 0;
37132 win4_reg17 = 0;
37133 win5_reg17 = 0;
37134 win6_reg17 = 0;
37135 win7_reg17 = 0;
37136 win0_reg18 = 0;
37137 win1_reg18 = 0;
37138 win2_reg18 = 0;
37139 win3_reg18 = 0;
37140 win4_reg18 = 0;
37141 win5_reg18 = 0;
37142 win6_reg18 = 0;
37143 win7_reg18 = 0;
37144 win0_reg19 = 0;
37145 win1_reg19 = 0;
37146 win2_reg19 = 0;
37147 win3_reg19 = 0;
37148 win4_reg19 = 0;
37149 win5_reg19 = 0;
37150 win6_reg19 = 0;
37151 win7_reg19 = 0;
37152 win0_reg20 = 0;
37153 win1_reg20 = 0;
37154 win2_reg20 = 0;
37155 win3_reg20 = 0;
37156 win4_reg20 = 0;
37157 win5_reg20 = 0;
37158 win6_reg20 = 0;
37159 win7_reg20 = 0;
37160 win0_reg21 = 0;
37161 win1_reg21 = 0;
37162 win2_reg21 = 0;
37163 win3_reg21 = 0;
37164 win4_reg21 = 0;
37165 win5_reg21 = 0;
37166 win6_reg21 = 0;
37167 win7_reg21 = 0;
37168 win0_reg22 = 0;
37169 win1_reg22 = 0;
37170 win2_reg22 = 0;
37171 win3_reg22 = 0;
37172 win4_reg22 = 0;
37173 win5_reg22 = 0;
37174 win6_reg22 = 0;
37175 win7_reg22 = 0;
37176 win0_reg23 = 0;
37177 win1_reg23 = 0;
37178 win2_reg23 = 0;
37179 win3_reg23 = 0;
37180 win4_reg23 = 0;
37181 win5_reg23 = 0;
37182 win6_reg23 = 0;
37183 win7_reg23 = 0;
37184 win0_reg24 = 0;
37185 win1_reg24 = 0;
37186 win2_reg24 = 0;
37187 win3_reg24 = 0;
37188 win4_reg24 = 0;
37189 win5_reg24 = 0;
37190 win6_reg24 = 0;
37191 win7_reg24 = 0;
37192 win0_reg25 = 0;
37193 win1_reg25 = 0;
37194 win2_reg25 = 0;
37195 win3_reg25 = 0;
37196 win4_reg25 = 0;
37197 win5_reg25 = 0;
37198 win6_reg25 = 0;
37199 win7_reg25 = 0;
37200 win0_reg26 = 0;
37201 win1_reg26 = 0;
37202 win2_reg26 = 0;
37203 win3_reg26 = 0;
37204 win4_reg26 = 0;
37205 win5_reg26 = 0;
37206 win6_reg26 = 0;
37207 win7_reg26 = 0;
37208 win0_reg27 = 0;
37209 win1_reg27 = 0;
37210 win2_reg27 = 0;
37211 win3_reg27 = 0;
37212 win4_reg27 = 0;
37213 win5_reg27 = 0;
37214 win6_reg27 = 0;
37215 win7_reg27 = 0;
37216 win0_reg28 = 0;
37217 win1_reg28 = 0;
37218 win2_reg28 = 0;
37219 win3_reg28 = 0;
37220 win4_reg28 = 0;
37221 win5_reg28 = 0;
37222 win6_reg28 = 0;
37223 win7_reg28 = 0;
37224 win0_reg29 = 0;
37225 win1_reg29 = 0;
37226 win2_reg29 = 0;
37227 win3_reg29 = 0;
37228 win4_reg29 = 0;
37229 win5_reg29 = 0;
37230 win6_reg29 = 0;
37231 win7_reg29 = 0;
37232 win0_reg30 = 0;
37233 win1_reg30 = 0;
37234 win2_reg30 = 0;
37235 win3_reg30 = 0;
37236 win4_reg30 = 0;
37237 win5_reg30 = 0;
37238 win6_reg30 = 0;
37239 win7_reg30 = 0;
37240 win0_reg31 = 0;
37241 win1_reg31 = 0;
37242 win2_reg31 = 0;
37243 win3_reg31 = 0;
37244 win4_reg31 = 0;
37245 win5_reg31 = 0;
37246 win6_reg31 = 0;
37247 win7_reg31 = 0;
37248
37249 // Global registers
37250 th_gl = `POR_GL;
37251 gl0_reg0 = 0;
37252 gl1_reg0 = 0;
37253 gl2_reg0 = 0;
37254 gl3_reg0 = 0;
37255 gl0_reg1 = 0;
37256 gl1_reg1 = 0;
37257 gl2_reg1 = 0;
37258 gl3_reg1 = 0;
37259 gl0_reg2 = 0;
37260 gl1_reg2 = 0;
37261 gl2_reg2 = 0;
37262 gl3_reg2 = 0;
37263 gl0_reg3 = 0;
37264 gl1_reg3 = 0;
37265 gl2_reg3 = 0;
37266 gl3_reg3 = 0;
37267 gl0_reg4 = 0;
37268 gl1_reg4 = 0;
37269 gl2_reg4 = 0;
37270 gl3_reg4 = 0;
37271 gl0_reg5 = 0;
37272 gl1_reg5 = 0;
37273 gl2_reg5 = 0;
37274 gl3_reg5 = 0;
37275 gl0_reg6 = 0;
37276 gl1_reg6 = 0;
37277 gl2_reg6 = 0;
37278 gl3_reg6 = 0;
37279 gl0_reg7 = 0;
37280 gl1_reg7 = 0;
37281 gl2_reg7 = 0;
37282 gl3_reg7 = 0;
37283
37284 `PR_INFO ("nas", `INFO, "T%0d Init shadow registers.",mytnum);
37285 prev_reg0 = 0;
37286 prev_reg1 = 0;
37287 prev_reg2 = 0;
37288 prev_reg3 = 0;
37289 prev_reg4 = 0;
37290 prev_reg5 = 0;
37291 prev_reg6 = 0;
37292 prev_reg7 = 0;
37293 prev_reg8 = 0;
37294 prev_reg9 = 0;
37295 prev_reg10 = 0;
37296 prev_reg11 = 0;
37297 prev_reg12 = 0;
37298 prev_reg13 = 0;
37299 prev_reg14 = 0;
37300 prev_reg15 = 0;
37301 prev_reg16 = 0;
37302 prev_reg17 = 0;
37303 prev_reg18 = 0;
37304 prev_reg19 = 0;
37305 prev_reg20 = 0;
37306 prev_reg21 = 0;
37307 prev_reg22 = 0;
37308 prev_reg23 = 0;
37309 prev_reg24 = 0;
37310 prev_reg25 = 0;
37311 prev_reg26 = 0;
37312 prev_reg27 = 0;
37313 prev_reg28 = 0;
37314 prev_reg29 = 0;
37315 prev_reg30 = 0;
37316 prev_reg31 = 0;
37317 prev_reg32 = 0;
37318 prev_reg33 = 0;
37319 prev_reg34 = 0;
37320 prev_reg35 = 0;
37321 prev_reg36 = 0;
37322 prev_reg37 = 0;
37323 prev_reg38 = 0;
37324 prev_reg39 = 0;
37325 prev_reg40 = 0;
37326 prev_reg41 = 0;
37327 prev_reg42 = 0;
37328 prev_reg43 = 0;
37329 prev_reg44 = 0;
37330 prev_reg45 = 0;
37331 prev_reg46 = 0;
37332 prev_reg47 = 0;
37333 prev_reg48 = 0;
37334 prev_reg49 = 0;
37335 prev_reg50 = 0;
37336 prev_reg51 = 0;
37337 prev_reg52 = 0;
37338 prev_reg53 = 0;
37339 prev_reg54 = 0;
37340 prev_reg55 = 0;
37341 prev_reg56 = 0;
37342 prev_reg57 = 0;
37343 prev_reg58 = 0;
37344 prev_reg59 = 0;
37345 prev_reg60 = 0;
37346 prev_reg61 = 0;
37347 prev_reg62 = 0;
37348 prev_reg63 = 0;
37349 prev_reg64 = 0;
37350 prev_reg65 = 0;
37351 prev_reg66 = 0;
37352 prev_reg67 = 0;
37353 prev_reg68 = 0;
37354 prev_reg69 = 0;
37355 prev_reg70 = 0;
37356 prev_reg71 = 0;
37357 prev_reg72 = 0;
37358 prev_reg73 = 0;
37359 prev_reg74 = 0;
37360 prev_reg75 = 0;
37361 prev_reg76 = 0;
37362 prev_reg77 = 0;
37363 prev_reg78 = 0;
37364 prev_reg79 = 0;
37365 prev_reg80 = 0;
37366 prev_reg81 = 0;
37367 prev_reg82 = 0;
37368 prev_reg83 = 0;
37369 prev_reg84 = 0;
37370 prev_reg85 = 0;
37371 prev_reg86 = 0;
37372 prev_reg87 = 0;
37373 prev_reg88 = 0;
37374 prev_reg89 = 0;
37375 prev_reg90 = 0;
37376 prev_reg91 = 0;
37377 prev_reg92 = 0;
37378 prev_reg93 = 0;
37379 prev_reg94 = 0;
37380 prev_reg95 = 0;
37381 prev_reg96 = 0;
37382 prev_reg97 = 0;
37383 prev_reg98 = 0;
37384 prev_reg99 = 0;
37385 prev_reg100 = 0;
37386 prev_reg101 = 0;
37387 prev_reg102 = 0;
37388 prev_reg103 = 0;
37389 prev_reg104 = 0;
37390 prev_reg105 = 0;
37391 prev_reg106 = 0;
37392 prev_reg107 = 0;
37393 prev_reg108 = 0;
37394 prev_reg109 = 0;
37395 prev_reg110 = 0;
37396 prev_reg111 = 0;
37397 prev_reg112 = 0;
37398 prev_reg113 = 0;
37399 prev_reg114 = 0;
37400 prev_reg115 = 0;
37401 prev_reg116 = 0;
37402 prev_reg117 = 0;
37403 prev_reg118 = 0;
37404 prev_reg119 = 0;
37405 prev_reg120 = 0;
37406 prev_reg121 = 0;
37407 prev_reg122 = 0;
37408 prev_reg123 = 0;
37409 prev_reg124 = 0;
37410 prev_reg125 = 0;
37411 prev_reg126 = 0;
37412 prev_reg127 = 0;
37413 prev_reg128 = 0;
37414 prev_reg129 = 0;
37415 prev_reg130 = 0;
37416 prev_reg131 = 0;
37417 prev_reg132 = 0;
37418 prev_reg133 = 0;
37419 prev_reg134 = 0;
37420 prev_reg135 = 0;
37421 prev_reg136 = 0;
37422 prev_reg137 = 0;
37423 prev_reg138 = 0;
37424 prev_reg139 = 0;
37425 prev_reg140 = 0;
37426 prev_reg141 = 0;
37427 prev_reg142 = 0;
37428 prev_reg143 = 0;
37429 prev_reg144 = 0;
37430 prev_reg145 = 0;
37431 prev_reg146 = 0;
37432 prev_reg147 = 0;
37433 prev_reg148 = 0;
37434 prev_reg149 = 0;
37435 prev_reg150 = 0;
37436 prev_reg151 = 0;
37437 prev_reg152 = 0;
37438 prev_reg153 = 0;
37439 prev_reg154 = 0;
37440 prev_reg155 = 0;
37441 prev_reg156 = 0;
37442 prev_reg157 = 0;
37443 prev_reg158 = 0;
37444 prev_reg159 = 0;
37445 prev_reg160 = 0;
37446 prev_reg161 = 0;
37447 prev_reg162 = 0;
37448 prev_reg163 = 0;
37449 prev_reg164 = 0;
37450 prev_reg165 = 0;
37451 prev_reg166 = 0;
37452 prev_reg167 = 0;
37453 prev_reg168 = 0;
37454 prev_reg169 = 0;
37455 prev_reg170 = 0;
37456 prev_reg171 = 0;
37457 prev_reg172 = 0;
37458 prev_reg173 = 0;
37459 prev_reg174 = 0;
37460 prev_reg175 = 0;
37461 prev_reg176 = 0;
37462 prev_reg177 = 0;
37463 prev_reg178 = 0;
37464 prev_reg179 = 0;
37465 prev_reg180 = 0;
37466 prev_reg181 = 0;
37467 prev_reg182 = 0;
37468 prev_reg183 = 0;
37469 prev_reg184 = 0;
37470 prev_reg185 = 0;
37471 prev_reg186 = 0;
37472 prev_reg187 = 0;
37473 prev_reg188 = 0;
37474 prev_reg189 = 0;
37475 prev_reg190 = 0;
37476 prev_reg191 = 0;
37477 prev_reg192 = 0;
37478 prev_reg193 = 0;
37479 prev_reg194 = 0;
37480 prev_reg195 = 0;
37481 prev_reg196 = 0;
37482 prev_reg197 = 0;
37483 prev_reg198 = 0;
37484 prev_reg199 = 0;
37485 prev_reg200 = 0;
37486 prev_reg201 = 0;
37487 prev_reg202 = 0;
37488 prev_reg203 = 0;
37489 prev_reg204 = 0;
37490 prev_reg205 = 0;
37491 prev_reg206 = 0;
37492 prev_reg207 = 0;
37493 prev_reg208 = 0;
37494 prev_reg209 = 0;
37495 prev_reg210 = 0;
37496 prev_reg211 = 0;
37497 prev_reg212 = 0;
37498 prev_reg213 = 0;
37499 prev_reg214 = 0;
37500 prev_reg215 = 0;
37501 prev_reg216 = 0;
37502 prev_reg217 = 0;
37503 prev_reg218 = 0;
37504 prev_reg219 = 0;
37505 prev_reg220 = 0;
37506 prev_reg221 = 0;
37507 prev_reg222 = 0;
37508 prev_reg223 = 0;
37509 prev_reg224 = 0;
37510 prev_reg225 = 0;
37511 prev_reg226 = 0;
37512 prev_reg227 = 0;
37513 prev_reg228 = 0;
37514 prev_reg229 = 0;
37515 prev_reg230 = 0;
37516 prev_reg231 = 0;
37517 prev_reg232 = 0;
37518 prev_reg233 = 0;
37519 prev_reg234 = 0;
37520 prev_reg235 = 0;
37521 prev_reg236 = 0;
37522 prev_reg237 = 0;
37523 prev_reg238 = 0;
37524 prev_reg239 = 0;
37525 prev_reg240 = 0;
37526 prev_reg241 = 0;
37527 prev_reg242 = 0;
37528 prev_reg243 = 0;
37529 prev_reg244 = 0;
37530 prev_reg245 = 0;
37531 prev_reg246 = 0;
37532 prev_reg247 = 0;
37533 prev_reg248 = 0;
37534 prev_reg249 = 0;
37535 prev_reg250 = 0;
37536 prev_reg251 = 0;
37537 prev_reg252 = 0;
37538 prev_reg253 = 0;
37539 prev_reg254 = 0;
37540 prev_reg255 = 0;
37541
37542 // POR for control registers
37543 write_prev(`FPRS +`CTL_OFFSET,3'h4);
37544 write_prev(`CLEANWIN +`CTL_OFFSET,3'h7);
37545 write_prev(`CANSAVE +`CTL_OFFSET,3'h6);
37546
37547 // POR for FPRS = 0x4
37548 write_prev(`FPRS+`CTL_OFFSET,3'h4);
37549
37550 // POR for PSTATE = 0x14 (PEF, PRIV = 1)
37551 write_prev(`PSTATE + `CTL_OFFSET,'h14);
37552
37553 // POR for HPSTATE = 0x4034 (RED, HPRIV = 1)
37554 write_prev(`HPSTATE + `CTL_OFFSET,'h24);
37555
37556 // POR for TL = = 0x6 [MAXTL]
37557 write_prev(`TL + `CTL_OFFSET,'h6);
37558
37559 // POR for TT6 = = 1
37560 write_prev(`TT6 + `CTL_OFFSET,'h1);
37561
37562 // POR for GL = MAXGL = 3
37563 write_prev(`GL + `CTL_OFFSET,`POR_GL);
37564
37565 // POR for VER = {003e, 0024, 01, 0036, 07}
37566 write_prev(`VER + `CTL_OFFSET,64'h003e002410030607);
37567
37568 // POR for *_cmpr registers is INT_DIS = 1
37569 write_prev(`TICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
37570 write_prev(`STICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
37571 write_prev(`HSTICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
37572
37573 // Need to define so that 1st instruction will print correctly
37574 write_prev(`PC+`CTL_OFFSET,`POR_PC);
37575
37576 first_op = 1;
37577 pc_last = `BAD_PC;
37578
37579 end // }
37580endtask
37581
37582//----------------------------------------------------------
37583//----------------------------------------------------------
37584 `else // GATESIM
37585
37586// Watch for Good/Bad trap
37587
37588wire [5:0] mytnum = (mycid*8)+mytid;
37589wire mytg = mytid >> 2;
37590integer junk;
37591reg nas_pipe_enable;
37592
37593integer inst_count;
37594
37595 // Delimiter changes whether flat or hierarchical netlist
37596 `ifdef GATES_FLAT
37597 wire myclk = tb_top.cpu.spc6.gclk;
37598 wire dec_inst_valid_m = mytg ? tb_top.cpu.spc6.dec_inst_valid_m[1] : tb_top.cpu.spc6.dec_inst_valid_m[0];
37599 wire [1:0] dec_tid_m = mytg ? tb_top.cpu.spc6.dec_tid1_m : tb_top.cpu.spc6.dec_tid0_m;
37600 wire dec_flush_b = mytg ? tb_top.cpu.spc6.dec_flush_b[1] : tb_top.cpu.spc6.dec_flush_b[0];
37601 wire tlu_flush_ifu = tb_top.cpu.spc6.tlu_flush_ifu[mytid];
37602 wire [47:0] pc_d = mytg ? {tb_top.cpu.spc6.tlu_pc_1_d[47:2],2'b0} : {tb_top.cpu.spc6.tlu_pc_0_d[47:2],2'b0};
37603 wire [31:0] op_d = mytg ? tb_top.cpu.spc6.dec_inst1_d[31:0] : tb_top.cpu.spc6.dec_inst0_d[31:0];
37604 `else
37605 wire myclk = tb_top.cpu.spc6.gclk;
37606 wire dec_inst_valid_m = mytg ? tb_top.cpu.spc6.dec_inst_valid_m[1] : tb_top.cpu.spc6.dec_inst_valid_m[0];
37607 wire [1:0] dec_tid_m = mytg ? tb_top.cpu.spc6.dec_tid1_m : tb_top.cpu.spc6.dec_tid0_m;
37608 wire dec_flush_b = mytg ? tb_top.cpu.spc6.dec_flush_b[1] : tb_top.cpu.spc6.dec_flush_b[0];
37609 wire tlu_flush_ifu = tb_top.cpu.spc6.tlu_flush_ifu[mytid];
37610 wire [47:0] pc_d = mytg ? {tb_top.cpu.spc6.tlu_pc_1_d[47:2],2'b0} : {tb_top.cpu.spc6.tlu_pc_0_d[47:2],2'b0};
37611 wire [31:0] op_d = mytg ? tb_top.cpu.spc6.dec_inst1_d[31:0] : tb_top.cpu.spc6.dec_inst0_d[31:0];
37612 `endif
37613
37614 reg dec_inst_valid_b;
37615 reg [1:0] dec_tid_b;
37616
37617 reg inst_valid_w;
37618 reg inst_valid_fx4;
37619 reg inst_valid_fx5;
37620 reg inst_valid_fb;
37621 reg inst_valid_fw;
37622 reg inst_valid_fw1;
37623 reg inst_valid_fw2;
37624 reg [47:0] pc_e;
37625 reg [47:0] pc_m;
37626 reg [47:0] pc_b;
37627 reg [47:0] pc_w;
37628 reg [47:0] pc_fx4;
37629 reg [47:0] pc_fx5;
37630 reg [47:0] pc_fb;
37631 reg [47:0] pc_fw;
37632 reg [47:0] pc_fw1;
37633 reg [47:0] pc_fw2;
37634 reg [31:0] op_e;
37635 reg [31:0] op_m;
37636 reg [31:0] op_b;
37637 reg [31:0] op_w;
37638 reg [31:0] op_fx4;
37639 reg [31:0] op_fx5;
37640 reg [31:0] op_fb;
37641 reg [31:0] op_fw;
37642 reg [31:0] op_fw1;
37643 reg [31:0] op_fw2;
37644
37645 wire inst_valid_b = dec_inst_valid_b && (dec_tid_b==mytid[1:0]) && !(dec_flush_b || tlu_flush_ifu);
37646
37647initial begin // {
37648 inst_count = 1;
37649 nas_pipe_enable = 1;
37650end // }
37651
37652
37653always @ (posedge myclk) begin // {
37654
37655 dec_inst_valid_b <= dec_inst_valid_m;
37656 dec_tid_b <= dec_tid_m;
37657 op_e <= op_d;
37658 op_m <= op_e;
37659 op_b <= op_m;
37660 op_w <= op_b;
37661 op_fx4 <= op_w;
37662 op_fx5 <= op_fx4;
37663 op_fb <= op_fx5;
37664 op_fw <= op_fb;
37665 op_fw1 <= op_fw;
37666 op_fw2 <= op_fw1;
37667 pc_e <= pc_d;
37668 pc_m <= pc_e;
37669 pc_b <= pc_m;
37670 pc_w <= pc_b;
37671 pc_fx4 <= pc_w;
37672 pc_fx5 <= pc_fx4;
37673 pc_fb <= pc_fx5;
37674 pc_fw <= pc_fb;
37675 pc_fw1 <= pc_fw;
37676 pc_fw2 <= pc_fw1;
37677 inst_valid_w <= inst_valid_b;
37678 inst_valid_fx4 <= inst_valid_w;
37679 inst_valid_fx5 <= inst_valid_fx4;
37680 inst_valid_fb <= inst_valid_fx5;
37681 inst_valid_fw <= inst_valid_fb;
37682 inst_valid_fw1 <= inst_valid_fw;
37683 inst_valid_fw2 <= inst_valid_fw1;
37684
37685 if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable) begin // {
37686
37687 if (inst_valid_fw2) begin // {
37688
37689 // Print PC/opcode for debugging
37690 `PR_NORMAL ("nas", `NORMAL, "@%0d #%0d T%0d %h [%h]", $time, inst_count, mytnum, pc_fw2, op_fw2);
37691 inst_count = inst_count + 1;
37692
37693 //----------
37694 // End detection for GateSim runs
37695 for (junk=0;junk<`PARGS.bad_trap_count;junk=junk+1) begin // {
37696 if (({16'b0,pc_fw2}&`PC_MASK)===(`PARGS.bad_trap_addr[junk]&`PC_MASK)) begin // {
37697 `PR_ERROR ("nas",`ERROR, "T%0d reached Bad Trap [GATESIM]", mytnum);
37698 nas_pipe_enable = 1'b0;
37699 end //}
37700 end //}
37701 for (junk=0;junk<`PARGS.good_trap_count;junk=junk+1) begin // {
37702 if (({16'b0,pc_fw2}&`PC_MASK)===(`PARGS.good_trap_addr[junk]&`PC_MASK)) begin // {
37703 `TOP.finished_tids[mytnum] = 1'b1;
37704 `PARGS.th_check_enable[mytnum] = 1'b0;
37705 nas_pipe_enable = 1'b0;
37706 `PR_NORMAL ("nas", `NORMAL, "T%0d reached Good Trap. Disabling checking for thread %0d [GATESIM]", mytnum,mytnum);
37707 end //}
37708 end //}
37709
37710 end // }
37711 end // }
37712
37713end //}
37714
37715
37716`endif
37717
37718endmodule
37719//----------------------------------------------------------
37720//----------------------------------------------------------
37721
37722`endif
37723
37724
37725`ifdef CORE_7
37726
37727
37728module nas_pipe7 (
37729 mycid,
37730 mytid,
37731
37732 opcode,
37733 PC_reg,
37734 Y_reg,
37735 CCR_reg,
37736 FPRS_reg,
37737 FSR_reg,
37738 ASI_reg,
37739 GSR_reg,
37740 TICK_CMPR_reg,
37741 STICK_CMPR_reg,
37742 HSTICK_CMPR_reg,
37743 PSTATE_reg,
37744 TL_reg,
37745 PIL_reg,
37746 TBA_reg,
37747 VER_reg,
37748 CWP_reg,
37749 CANSAVE_reg,
37750 CANRESTORE_reg,
37751 OTHERWIN_reg,
37752 WSTATE_reg,
37753 CLEANWIN_reg,
37754 SOFTINT_reg,
37755 rd_SOFTINT_reg,
37756 INTR_RECEIVE_reg,
37757 GL_reg,
37758 HPSTATE_reg,
37759 HTBA_reg,
37760 HINTP_reg,
37761
37762 CTXT_PRIM_0_reg,
37763 CTXT_SEC_0_reg,
37764 CTXT_PRIM_1_reg,
37765 CTXT_SEC_1_reg,
37766 LSU_CONTROL_reg,
37767 I_TAG_ACC_reg,
37768 D_TAG_ACC_reg,
37769 WATCHPOINT_ADDR_reg,
37770 DSFAR_reg,
37771
37772 Trap_Entry_1,
37773 Trap_Entry_2,
37774 Trap_Entry_3,
37775 Trap_Entry_4,
37776 Trap_Entry_5,
37777 Trap_Entry_6,
37778
37779 exu_valid,
37780
37781 imul_valid,
37782
37783 frf_w2_valid,
37784 frf_w1_valid,
37785 frf_w1_tid,
37786 frf_w2_tid,
37787 frf_w1_addr,
37788 frf_w2_addr,
37789
37790 asi_valid,
37791 asi_in_progress,
37792
37793 fp_valid,
37794
37795 idiv_valid,
37796
37797 fdiv_valid,
37798
37799 lsu_valid,
37800
37801 tlu_valid
37802);
37803
37804//----------------------------------------------------------
37805input [2:0] mycid;
37806input [2:0] mytid;
37807
37808input [31:0] opcode;
37809input [47:0] PC_reg;
37810input [31:0] Y_reg;
37811input [7:0] CCR_reg;
37812input [2:0] FPRS_reg;
37813input [27:0] FSR_reg;
37814input [7:0] ASI_reg;
37815input [42:0] GSR_reg;
37816input [71:0] TICK_CMPR_reg;
37817input [71:0] STICK_CMPR_reg;
37818input [71:0] HSTICK_CMPR_reg;
37819input [12:0] PSTATE_reg;
37820input [2:0] TL_reg;
37821input [3:0] PIL_reg;
37822input [32:0] TBA_reg;
37823input [63:0] VER_reg;
37824input [2:0] CWP_reg;
37825input [2:0] CANSAVE_reg;
37826input [2:0] CANRESTORE_reg;
37827input [2:0] OTHERWIN_reg;
37828input [5:0] WSTATE_reg;
37829input [2:0] CLEANWIN_reg;
37830input [16:0] SOFTINT_reg;
37831input [16:0] rd_SOFTINT_reg;
37832input [63:0] INTR_RECEIVE_reg;
37833input [1:0] GL_reg;
37834input [12:0] HPSTATE_reg;
37835input [33:0] HTBA_reg;
37836input HINTP_reg;
37837
37838input [63:0] CTXT_PRIM_0_reg;
37839input [63:0] CTXT_SEC_0_reg;
37840input [63:0] CTXT_PRIM_1_reg;
37841input [63:0] CTXT_SEC_1_reg;
37842input [63:0] LSU_CONTROL_reg;
37843input [63:0] I_TAG_ACC_reg;
37844input [63:0] D_TAG_ACC_reg;
37845input [63:0] WATCHPOINT_ADDR_reg;
37846input [47:0] DSFAR_reg;
37847
37848input [151:0] Trap_Entry_1;
37849input [151:0] Trap_Entry_2;
37850input [151:0] Trap_Entry_3;
37851input [151:0] Trap_Entry_4;
37852input [151:0] Trap_Entry_5;
37853input [151:0] Trap_Entry_6;
37854
37855input exu_valid;
37856
37857input imul_valid;
37858
37859input [1:0] frf_w2_valid;
37860input [2:0] frf_w2_tid;
37861input [4:0] frf_w2_addr;
37862
37863input [1:0] frf_w1_valid;
37864input [2:0] frf_w1_tid;
37865input [4:0] frf_w1_addr;
37866
37867input asi_valid; // ASI/ASR/PR writes done ..
37868input asi_in_progress; // ASI/ASR/PR in progess
37869
37870input fp_valid;
37871
37872input idiv_valid;
37873
37874input fdiv_valid;
37875
37876input lsu_valid;
37877
37878input tlu_valid;
37879
37880`ifndef GATESIM
37881
37882//----------------------------------------------------------
37883// Register assignments
37884//----------------------------------------------------------
37885`include "nas_regs.v"
37886//----------------------------------------------------------
37887
37888wire exu_complete;
37889wire imul_complete;
37890wire idiv_complete;
37891wire tlu_complete;
37892wire fp_complete;
37893wire fdiv_complete;
37894wire lsu_complete;
37895wire asi_complete;
37896wire [7:0] complete_w;
37897reg [7:0] complete_fx4;
37898reg [7:0] complete_fx5;
37899reg [7:0] complete_fb;
37900reg [7:0] complete_fw;
37901reg [7:0] complete_fw1;
37902reg [7:0] complete_fw2;
37903
37904`ifndef EMUL_TL
37905// delta_* = {type(2bits),win(3bits),regnum(8bits),value(64bits)}
37906reg [`DELTA_WIDTH:0] delta_fx4 [0:(`MAX_INDEX)];
37907reg [`DELTA_WIDTH:0] delta_fx5 [0:(`MAX_INDEX)];
37908reg [`DELTA_WIDTH:0] delta_fb [0:(`MAX_INDEX)];
37909reg [`DELTA_WIDTH:0] delta_fw [0:(`MAX_INDEX)];
37910reg [`DELTA_WIDTH:0] delta_fw1 [0:(`MAX_INDEX)];
37911reg [`DELTA_WIDTH:0] delta_fw2 [0:(`MAX_INDEX)];
37912reg [`DELTA_WIDTH:0] delta_prev [0:(`MAX_INDEX)];
37913`endif
37914
37915reg [2:0] cwp_fx4;
37916reg [2:0] cwp_fx5;
37917reg [2:0] cwp_fb;
37918reg [2:0] cwp_fw;
37919reg [2:0] cwp_fw1;
37920reg [2:0] cwp_fw2;
37921reg [2:0] cwp_last;
37922
37923
37924// need to change in several places in this file
37925reg [63:0] prev_reg0; // includes G,W,C,F registers
37926reg [63:0] prev_reg1; // includes G,W,C,F registers
37927reg [63:0] prev_reg2; // includes G,W,C,F registers
37928reg [63:0] prev_reg3; // includes G,W,C,F registers
37929reg [63:0] prev_reg4; // includes G,W,C,F registers
37930reg [63:0] prev_reg5; // includes G,W,C,F registers
37931reg [63:0] prev_reg6; // includes G,W,C,F registers
37932reg [63:0] prev_reg7; // includes G,W,C,F registers
37933reg [63:0] prev_reg8; // includes G,W,C,F registers
37934reg [63:0] prev_reg9; // includes G,W,C,F registers
37935reg [63:0] prev_reg10; // includes G,W,C,F registers
37936reg [63:0] prev_reg11; // includes G,W,C,F registers
37937reg [63:0] prev_reg12; // includes G,W,C,F registers
37938reg [63:0] prev_reg13; // includes G,W,C,F registers
37939reg [63:0] prev_reg14; // includes G,W,C,F registers
37940reg [63:0] prev_reg15; // includes G,W,C,F registers
37941reg [63:0] prev_reg16; // includes G,W,C,F registers
37942reg [63:0] prev_reg17; // includes G,W,C,F registers
37943reg [63:0] prev_reg18; // includes G,W,C,F registers
37944reg [63:0] prev_reg19; // includes G,W,C,F registers
37945reg [63:0] prev_reg20; // includes G,W,C,F registers
37946reg [63:0] prev_reg21; // includes G,W,C,F registers
37947reg [63:0] prev_reg22; // includes G,W,C,F registers
37948reg [63:0] prev_reg23; // includes G,W,C,F registers
37949reg [63:0] prev_reg24; // includes G,W,C,F registers
37950reg [63:0] prev_reg25; // includes G,W,C,F registers
37951reg [63:0] prev_reg26; // includes G,W,C,F registers
37952reg [63:0] prev_reg27; // includes G,W,C,F registers
37953reg [63:0] prev_reg28; // includes G,W,C,F registers
37954reg [63:0] prev_reg29; // includes G,W,C,F registers
37955reg [63:0] prev_reg30; // includes G,W,C,F registers
37956reg [63:0] prev_reg31; // includes G,W,C,F registers
37957reg [63:0] prev_reg32; // includes G,W,C,F registers
37958reg [63:0] prev_reg33; // includes G,W,C,F registers
37959reg [63:0] prev_reg34; // includes G,W,C,F registers
37960reg [63:0] prev_reg35; // includes G,W,C,F registers
37961reg [63:0] prev_reg36; // includes G,W,C,F registers
37962reg [63:0] prev_reg37; // includes G,W,C,F registers
37963reg [63:0] prev_reg38; // includes G,W,C,F registers
37964reg [63:0] prev_reg39; // includes G,W,C,F registers
37965reg [63:0] prev_reg40; // includes G,W,C,F registers
37966reg [63:0] prev_reg41; // includes G,W,C,F registers
37967reg [63:0] prev_reg42; // includes G,W,C,F registers
37968reg [63:0] prev_reg43; // includes G,W,C,F registers
37969reg [63:0] prev_reg44; // includes G,W,C,F registers
37970reg [63:0] prev_reg45; // includes G,W,C,F registers
37971reg [63:0] prev_reg46; // includes G,W,C,F registers
37972reg [63:0] prev_reg47; // includes G,W,C,F registers
37973reg [63:0] prev_reg48; // includes G,W,C,F registers
37974reg [63:0] prev_reg49; // includes G,W,C,F registers
37975reg [63:0] prev_reg50; // includes G,W,C,F registers
37976reg [63:0] prev_reg51; // includes G,W,C,F registers
37977reg [63:0] prev_reg52; // includes G,W,C,F registers
37978reg [63:0] prev_reg53; // includes G,W,C,F registers
37979reg [63:0] prev_reg54; // includes G,W,C,F registers
37980reg [63:0] prev_reg55; // includes G,W,C,F registers
37981reg [63:0] prev_reg56; // includes G,W,C,F registers
37982reg [63:0] prev_reg57; // includes G,W,C,F registers
37983reg [63:0] prev_reg58; // includes G,W,C,F registers
37984reg [63:0] prev_reg59; // includes G,W,C,F registers
37985reg [63:0] prev_reg60; // includes G,W,C,F registers
37986reg [63:0] prev_reg61; // includes G,W,C,F registers
37987reg [63:0] prev_reg62; // includes G,W,C,F registers
37988reg [63:0] prev_reg63; // includes G,W,C,F registers
37989reg [63:0] prev_reg64; // includes G,W,C,F registers
37990reg [63:0] prev_reg65; // includes G,W,C,F registers
37991reg [63:0] prev_reg66; // includes G,W,C,F registers
37992reg [63:0] prev_reg67; // includes G,W,C,F registers
37993reg [63:0] prev_reg68; // includes G,W,C,F registers
37994reg [63:0] prev_reg69; // includes G,W,C,F registers
37995reg [63:0] prev_reg70; // includes G,W,C,F registers
37996reg [63:0] prev_reg71; // includes G,W,C,F registers
37997reg [63:0] prev_reg72; // includes G,W,C,F registers
37998reg [63:0] prev_reg73; // includes G,W,C,F registers
37999reg [63:0] prev_reg74; // includes G,W,C,F registers
38000reg [63:0] prev_reg75; // includes G,W,C,F registers
38001reg [63:0] prev_reg76; // includes G,W,C,F registers
38002reg [63:0] prev_reg77; // includes G,W,C,F registers
38003reg [63:0] prev_reg78; // includes G,W,C,F registers
38004reg [63:0] prev_reg79; // includes G,W,C,F registers
38005reg [63:0] prev_reg80; // includes G,W,C,F registers
38006reg [63:0] prev_reg81; // includes G,W,C,F registers
38007reg [63:0] prev_reg82; // includes G,W,C,F registers
38008reg [63:0] prev_reg83; // includes G,W,C,F registers
38009reg [63:0] prev_reg84; // includes G,W,C,F registers
38010reg [63:0] prev_reg85; // includes G,W,C,F registers
38011reg [63:0] prev_reg86; // includes G,W,C,F registers
38012reg [63:0] prev_reg87; // includes G,W,C,F registers
38013reg [63:0] prev_reg88; // includes G,W,C,F registers
38014reg [63:0] prev_reg89; // includes G,W,C,F registers
38015reg [63:0] prev_reg90; // includes G,W,C,F registers
38016reg [63:0] prev_reg91; // includes G,W,C,F registers
38017reg [63:0] prev_reg92; // includes G,W,C,F registers
38018reg [63:0] prev_reg93; // includes G,W,C,F registers
38019reg [63:0] prev_reg94; // includes G,W,C,F registers
38020reg [63:0] prev_reg95; // includes G,W,C,F registers
38021reg [63:0] prev_reg96; // includes G,W,C,F registers
38022reg [63:0] prev_reg97; // includes G,W,C,F registers
38023reg [63:0] prev_reg98; // includes G,W,C,F registers
38024reg [63:0] prev_reg99; // includes G,W,C,F registers
38025reg [63:0] prev_reg100; // includes G,W,C,F registers
38026reg [63:0] prev_reg101; // includes G,W,C,F registers
38027reg [63:0] prev_reg102; // includes G,W,C,F registers
38028reg [63:0] prev_reg103; // includes G,W,C,F registers
38029reg [63:0] prev_reg104; // includes G,W,C,F registers
38030reg [63:0] prev_reg105; // includes G,W,C,F registers
38031reg [63:0] prev_reg106; // includes G,W,C,F registers
38032reg [63:0] prev_reg107; // includes G,W,C,F registers
38033reg [63:0] prev_reg108; // includes G,W,C,F registers
38034reg [63:0] prev_reg109; // includes G,W,C,F registers
38035reg [63:0] prev_reg110; // includes G,W,C,F registers
38036reg [63:0] prev_reg111; // includes G,W,C,F registers
38037reg [63:0] prev_reg112; // includes G,W,C,F registers
38038reg [63:0] prev_reg113; // includes G,W,C,F registers
38039reg [63:0] prev_reg114; // includes G,W,C,F registers
38040reg [63:0] prev_reg115; // includes G,W,C,F registers
38041reg [63:0] prev_reg116; // includes G,W,C,F registers
38042reg [63:0] prev_reg117; // includes G,W,C,F registers
38043reg [63:0] prev_reg118; // includes G,W,C,F registers
38044reg [63:0] prev_reg119; // includes G,W,C,F registers
38045reg [63:0] prev_reg120; // includes G,W,C,F registers
38046reg [63:0] prev_reg121; // includes G,W,C,F registers
38047reg [63:0] prev_reg122; // includes G,W,C,F registers
38048reg [63:0] prev_reg123; // includes G,W,C,F registers
38049reg [63:0] prev_reg124; // includes G,W,C,F registers
38050reg [63:0] prev_reg125; // includes G,W,C,F registers
38051reg [63:0] prev_reg126; // includes G,W,C,F registers
38052reg [63:0] prev_reg127; // includes G,W,C,F registers
38053reg [63:0] prev_reg128; // includes G,W,C,F registers
38054reg [63:0] prev_reg129; // includes G,W,C,F registers
38055reg [63:0] prev_reg130; // includes G,W,C,F registers
38056reg [63:0] prev_reg131; // includes G,W,C,F registers
38057reg [63:0] prev_reg132; // includes G,W,C,F registers
38058reg [63:0] prev_reg133; // includes G,W,C,F registers
38059reg [63:0] prev_reg134; // includes G,W,C,F registers
38060reg [63:0] prev_reg135; // includes G,W,C,F registers
38061reg [63:0] prev_reg136; // includes G,W,C,F registers
38062reg [63:0] prev_reg137; // includes G,W,C,F registers
38063reg [63:0] prev_reg138; // includes G,W,C,F registers
38064reg [63:0] prev_reg139; // includes G,W,C,F registers
38065reg [63:0] prev_reg140; // includes G,W,C,F registers
38066reg [63:0] prev_reg141; // includes G,W,C,F registers
38067reg [63:0] prev_reg142; // includes G,W,C,F registers
38068reg [63:0] prev_reg143; // includes G,W,C,F registers
38069reg [63:0] prev_reg144; // includes G,W,C,F registers
38070reg [63:0] prev_reg145; // includes G,W,C,F registers
38071reg [63:0] prev_reg146; // includes G,W,C,F registers
38072reg [63:0] prev_reg147; // includes G,W,C,F registers
38073reg [63:0] prev_reg148; // includes G,W,C,F registers
38074reg [63:0] prev_reg149; // includes G,W,C,F registers
38075reg [63:0] prev_reg150; // includes G,W,C,F registers
38076reg [63:0] prev_reg151; // includes G,W,C,F registers
38077reg [63:0] prev_reg152; // includes G,W,C,F registers
38078reg [63:0] prev_reg153; // includes G,W,C,F registers
38079reg [63:0] prev_reg154; // includes G,W,C,F registers
38080reg [63:0] prev_reg155; // includes G,W,C,F registers
38081reg [63:0] prev_reg156; // includes G,W,C,F registers
38082reg [63:0] prev_reg157; // includes G,W,C,F registers
38083reg [63:0] prev_reg158; // includes G,W,C,F registers
38084reg [63:0] prev_reg159; // includes G,W,C,F registers
38085reg [63:0] prev_reg160; // includes G,W,C,F registers
38086reg [63:0] prev_reg161; // includes G,W,C,F registers
38087reg [63:0] prev_reg162; // includes G,W,C,F registers
38088reg [63:0] prev_reg163; // includes G,W,C,F registers
38089reg [63:0] prev_reg164; // includes G,W,C,F registers
38090reg [63:0] prev_reg165; // includes G,W,C,F registers
38091reg [63:0] prev_reg166; // includes G,W,C,F registers
38092reg [63:0] prev_reg167; // includes G,W,C,F registers
38093reg [63:0] prev_reg168; // includes G,W,C,F registers
38094reg [63:0] prev_reg169; // includes G,W,C,F registers
38095reg [63:0] prev_reg170; // includes G,W,C,F registers
38096reg [63:0] prev_reg171; // includes G,W,C,F registers
38097reg [63:0] prev_reg172; // includes G,W,C,F registers
38098reg [63:0] prev_reg173; // includes G,W,C,F registers
38099reg [63:0] prev_reg174; // includes G,W,C,F registers
38100reg [63:0] prev_reg175; // includes G,W,C,F registers
38101reg [63:0] prev_reg176; // includes G,W,C,F registers
38102reg [63:0] prev_reg177; // includes G,W,C,F registers
38103reg [63:0] prev_reg178; // includes G,W,C,F registers
38104reg [63:0] prev_reg179; // includes G,W,C,F registers
38105reg [63:0] prev_reg180; // includes G,W,C,F registers
38106reg [63:0] prev_reg181; // includes G,W,C,F registers
38107reg [63:0] prev_reg182; // includes G,W,C,F registers
38108reg [63:0] prev_reg183; // includes G,W,C,F registers
38109reg [63:0] prev_reg184; // includes G,W,C,F registers
38110reg [63:0] prev_reg185; // includes G,W,C,F registers
38111reg [63:0] prev_reg186; // includes G,W,C,F registers
38112reg [63:0] prev_reg187; // includes G,W,C,F registers
38113reg [63:0] prev_reg188; // includes G,W,C,F registers
38114reg [63:0] prev_reg189; // includes G,W,C,F registers
38115reg [63:0] prev_reg190; // includes G,W,C,F registers
38116reg [63:0] prev_reg191; // includes G,W,C,F registers
38117reg [63:0] prev_reg192; // includes G,W,C,F registers
38118reg [63:0] prev_reg193; // includes G,W,C,F registers
38119reg [63:0] prev_reg194; // includes G,W,C,F registers
38120reg [63:0] prev_reg195; // includes G,W,C,F registers
38121reg [63:0] prev_reg196; // includes G,W,C,F registers
38122reg [63:0] prev_reg197; // includes G,W,C,F registers
38123reg [63:0] prev_reg198; // includes G,W,C,F registers
38124reg [63:0] prev_reg199; // includes G,W,C,F registers
38125reg [63:0] prev_reg200; // includes G,W,C,F registers
38126reg [63:0] prev_reg201; // includes G,W,C,F registers
38127reg [63:0] prev_reg202; // includes G,W,C,F registers
38128reg [63:0] prev_reg203; // includes G,W,C,F registers
38129reg [63:0] prev_reg204; // includes G,W,C,F registers
38130reg [63:0] prev_reg205; // includes G,W,C,F registers
38131reg [63:0] prev_reg206; // includes G,W,C,F registers
38132reg [63:0] prev_reg207; // includes G,W,C,F registers
38133reg [63:0] prev_reg208; // includes G,W,C,F registers
38134reg [63:0] prev_reg209; // includes G,W,C,F registers
38135reg [63:0] prev_reg210; // includes G,W,C,F registers
38136reg [63:0] prev_reg211; // includes G,W,C,F registers
38137reg [63:0] prev_reg212; // includes G,W,C,F registers
38138reg [63:0] prev_reg213; // includes G,W,C,F registers
38139reg [63:0] prev_reg214; // includes G,W,C,F registers
38140reg [63:0] prev_reg215; // includes G,W,C,F registers
38141reg [63:0] prev_reg216; // includes G,W,C,F registers
38142reg [63:0] prev_reg217; // includes G,W,C,F registers
38143reg [63:0] prev_reg218; // includes G,W,C,F registers
38144reg [63:0] prev_reg219; // includes G,W,C,F registers
38145reg [63:0] prev_reg220; // includes G,W,C,F registers
38146reg [63:0] prev_reg221; // includes G,W,C,F registers
38147reg [63:0] prev_reg222; // includes G,W,C,F registers
38148reg [63:0] prev_reg223; // includes G,W,C,F registers
38149reg [63:0] prev_reg224; // includes G,W,C,F registers
38150reg [63:0] prev_reg225; // includes G,W,C,F registers
38151reg [63:0] prev_reg226; // includes G,W,C,F registers
38152reg [63:0] prev_reg227; // includes G,W,C,F registers
38153reg [63:0] prev_reg228; // includes G,W,C,F registers
38154reg [63:0] prev_reg229; // includes G,W,C,F registers
38155reg [63:0] prev_reg230; // includes G,W,C,F registers
38156reg [63:0] prev_reg231; // includes G,W,C,F registers
38157reg [63:0] prev_reg232; // includes G,W,C,F registers
38158reg [63:0] prev_reg233; // includes G,W,C,F registers
38159reg [63:0] prev_reg234; // includes G,W,C,F registers
38160reg [63:0] prev_reg235; // includes G,W,C,F registers
38161reg [63:0] prev_reg236; // includes G,W,C,F registers
38162reg [63:0] prev_reg237; // includes G,W,C,F registers
38163reg [63:0] prev_reg238; // includes G,W,C,F registers
38164reg [63:0] prev_reg239; // includes G,W,C,F registers
38165reg [63:0] prev_reg240; // includes G,W,C,F registers
38166reg [63:0] prev_reg241; // includes G,W,C,F registers
38167reg [63:0] prev_reg242; // includes G,W,C,F registers
38168reg [63:0] prev_reg243; // includes G,W,C,F registers
38169reg [63:0] prev_reg244; // includes G,W,C,F registers
38170reg [63:0] prev_reg245; // includes G,W,C,F registers
38171reg [63:0] prev_reg246; // includes G,W,C,F registers
38172reg [63:0] prev_reg247; // includes G,W,C,F registers
38173reg [63:0] prev_reg248; // includes G,W,C,F registers
38174reg [63:0] prev_reg249; // includes G,W,C,F registers
38175reg [63:0] prev_reg250; // includes G,W,C,F registers
38176reg [63:0] prev_reg251; // includes G,W,C,F registers
38177reg [63:0] prev_reg252; // includes G,W,C,F registers
38178reg [63:0] prev_reg253; // includes G,W,C,F registers
38179reg [63:0] prev_reg254; // includes G,W,C,F registers
38180reg [63:0] prev_reg255; // includes G,W,C,F registers
38181
38182reg [1:0] th_gl; // copy of GL_reg
38183
38184reg [63:0] gl0_reg0;
38185reg [63:0] gl1_reg0;
38186reg [63:0] gl2_reg0;
38187reg [63:0] gl3_reg0;
38188reg [63:0] gl0_reg1;
38189reg [63:0] gl1_reg1;
38190reg [63:0] gl2_reg1;
38191reg [63:0] gl3_reg1;
38192reg [63:0] gl0_reg2;
38193reg [63:0] gl1_reg2;
38194reg [63:0] gl2_reg2;
38195reg [63:0] gl3_reg2;
38196reg [63:0] gl0_reg3;
38197reg [63:0] gl1_reg3;
38198reg [63:0] gl2_reg3;
38199reg [63:0] gl3_reg3;
38200reg [63:0] gl0_reg4;
38201reg [63:0] gl1_reg4;
38202reg [63:0] gl2_reg4;
38203reg [63:0] gl3_reg4;
38204reg [63:0] gl0_reg5;
38205reg [63:0] gl1_reg5;
38206reg [63:0] gl2_reg5;
38207reg [63:0] gl3_reg5;
38208reg [63:0] gl0_reg6;
38209reg [63:0] gl1_reg6;
38210reg [63:0] gl2_reg6;
38211reg [63:0] gl3_reg6;
38212reg [63:0] gl0_reg7;
38213reg [63:0] gl1_reg7;
38214reg [63:0] gl2_reg7;
38215reg [63:0] gl3_reg7;
38216
38217reg [63:0] win0_reg8;
38218reg [63:0] win1_reg8;
38219reg [63:0] win2_reg8;
38220reg [63:0] win3_reg8;
38221reg [63:0] win4_reg8;
38222reg [63:0] win5_reg8;
38223reg [63:0] win6_reg8;
38224reg [63:0] win7_reg8;
38225reg [63:0] win0_reg9;
38226reg [63:0] win1_reg9;
38227reg [63:0] win2_reg9;
38228reg [63:0] win3_reg9;
38229reg [63:0] win4_reg9;
38230reg [63:0] win5_reg9;
38231reg [63:0] win6_reg9;
38232reg [63:0] win7_reg9;
38233reg [63:0] win0_reg10;
38234reg [63:0] win1_reg10;
38235reg [63:0] win2_reg10;
38236reg [63:0] win3_reg10;
38237reg [63:0] win4_reg10;
38238reg [63:0] win5_reg10;
38239reg [63:0] win6_reg10;
38240reg [63:0] win7_reg10;
38241reg [63:0] win0_reg11;
38242reg [63:0] win1_reg11;
38243reg [63:0] win2_reg11;
38244reg [63:0] win3_reg11;
38245reg [63:0] win4_reg11;
38246reg [63:0] win5_reg11;
38247reg [63:0] win6_reg11;
38248reg [63:0] win7_reg11;
38249reg [63:0] win0_reg12;
38250reg [63:0] win1_reg12;
38251reg [63:0] win2_reg12;
38252reg [63:0] win3_reg12;
38253reg [63:0] win4_reg12;
38254reg [63:0] win5_reg12;
38255reg [63:0] win6_reg12;
38256reg [63:0] win7_reg12;
38257reg [63:0] win0_reg13;
38258reg [63:0] win1_reg13;
38259reg [63:0] win2_reg13;
38260reg [63:0] win3_reg13;
38261reg [63:0] win4_reg13;
38262reg [63:0] win5_reg13;
38263reg [63:0] win6_reg13;
38264reg [63:0] win7_reg13;
38265reg [63:0] win0_reg14;
38266reg [63:0] win1_reg14;
38267reg [63:0] win2_reg14;
38268reg [63:0] win3_reg14;
38269reg [63:0] win4_reg14;
38270reg [63:0] win5_reg14;
38271reg [63:0] win6_reg14;
38272reg [63:0] win7_reg14;
38273reg [63:0] win0_reg15;
38274reg [63:0] win1_reg15;
38275reg [63:0] win2_reg15;
38276reg [63:0] win3_reg15;
38277reg [63:0] win4_reg15;
38278reg [63:0] win5_reg15;
38279reg [63:0] win6_reg15;
38280reg [63:0] win7_reg15;
38281reg [63:0] win0_reg16;
38282reg [63:0] win1_reg16;
38283reg [63:0] win2_reg16;
38284reg [63:0] win3_reg16;
38285reg [63:0] win4_reg16;
38286reg [63:0] win5_reg16;
38287reg [63:0] win6_reg16;
38288reg [63:0] win7_reg16;
38289reg [63:0] win0_reg17;
38290reg [63:0] win1_reg17;
38291reg [63:0] win2_reg17;
38292reg [63:0] win3_reg17;
38293reg [63:0] win4_reg17;
38294reg [63:0] win5_reg17;
38295reg [63:0] win6_reg17;
38296reg [63:0] win7_reg17;
38297reg [63:0] win0_reg18;
38298reg [63:0] win1_reg18;
38299reg [63:0] win2_reg18;
38300reg [63:0] win3_reg18;
38301reg [63:0] win4_reg18;
38302reg [63:0] win5_reg18;
38303reg [63:0] win6_reg18;
38304reg [63:0] win7_reg18;
38305reg [63:0] win0_reg19;
38306reg [63:0] win1_reg19;
38307reg [63:0] win2_reg19;
38308reg [63:0] win3_reg19;
38309reg [63:0] win4_reg19;
38310reg [63:0] win5_reg19;
38311reg [63:0] win6_reg19;
38312reg [63:0] win7_reg19;
38313reg [63:0] win0_reg20;
38314reg [63:0] win1_reg20;
38315reg [63:0] win2_reg20;
38316reg [63:0] win3_reg20;
38317reg [63:0] win4_reg20;
38318reg [63:0] win5_reg20;
38319reg [63:0] win6_reg20;
38320reg [63:0] win7_reg20;
38321reg [63:0] win0_reg21;
38322reg [63:0] win1_reg21;
38323reg [63:0] win2_reg21;
38324reg [63:0] win3_reg21;
38325reg [63:0] win4_reg21;
38326reg [63:0] win5_reg21;
38327reg [63:0] win6_reg21;
38328reg [63:0] win7_reg21;
38329reg [63:0] win0_reg22;
38330reg [63:0] win1_reg22;
38331reg [63:0] win2_reg22;
38332reg [63:0] win3_reg22;
38333reg [63:0] win4_reg22;
38334reg [63:0] win5_reg22;
38335reg [63:0] win6_reg22;
38336reg [63:0] win7_reg22;
38337reg [63:0] win0_reg23;
38338reg [63:0] win1_reg23;
38339reg [63:0] win2_reg23;
38340reg [63:0] win3_reg23;
38341reg [63:0] win4_reg23;
38342reg [63:0] win5_reg23;
38343reg [63:0] win6_reg23;
38344reg [63:0] win7_reg23;
38345reg [63:0] win0_reg24;
38346reg [63:0] win1_reg24;
38347reg [63:0] win2_reg24;
38348reg [63:0] win3_reg24;
38349reg [63:0] win4_reg24;
38350reg [63:0] win5_reg24;
38351reg [63:0] win6_reg24;
38352reg [63:0] win7_reg24;
38353reg [63:0] win0_reg25;
38354reg [63:0] win1_reg25;
38355reg [63:0] win2_reg25;
38356reg [63:0] win3_reg25;
38357reg [63:0] win4_reg25;
38358reg [63:0] win5_reg25;
38359reg [63:0] win6_reg25;
38360reg [63:0] win7_reg25;
38361reg [63:0] win0_reg26;
38362reg [63:0] win1_reg26;
38363reg [63:0] win2_reg26;
38364reg [63:0] win3_reg26;
38365reg [63:0] win4_reg26;
38366reg [63:0] win5_reg26;
38367reg [63:0] win6_reg26;
38368reg [63:0] win7_reg26;
38369reg [63:0] win0_reg27;
38370reg [63:0] win1_reg27;
38371reg [63:0] win2_reg27;
38372reg [63:0] win3_reg27;
38373reg [63:0] win4_reg27;
38374reg [63:0] win5_reg27;
38375reg [63:0] win6_reg27;
38376reg [63:0] win7_reg27;
38377reg [63:0] win0_reg28;
38378reg [63:0] win1_reg28;
38379reg [63:0] win2_reg28;
38380reg [63:0] win3_reg28;
38381reg [63:0] win4_reg28;
38382reg [63:0] win5_reg28;
38383reg [63:0] win6_reg28;
38384reg [63:0] win7_reg28;
38385reg [63:0] win0_reg29;
38386reg [63:0] win1_reg29;
38387reg [63:0] win2_reg29;
38388reg [63:0] win3_reg29;
38389reg [63:0] win4_reg29;
38390reg [63:0] win5_reg29;
38391reg [63:0] win6_reg29;
38392reg [63:0] win7_reg29;
38393reg [63:0] win0_reg30;
38394reg [63:0] win1_reg30;
38395reg [63:0] win2_reg30;
38396reg [63:0] win3_reg30;
38397reg [63:0] win4_reg30;
38398reg [63:0] win5_reg30;
38399reg [63:0] win6_reg30;
38400reg [63:0] win7_reg30;
38401reg [63:0] win0_reg31;
38402reg [63:0] win1_reg31;
38403reg [63:0] win2_reg31;
38404reg [63:0] win3_reg31;
38405reg [63:0] win4_reg31;
38406reg [63:0] win5_reg31;
38407reg [63:0] win6_reg31;
38408reg [63:0] win7_reg31;
38409
38410reg [63:0] itagacc_fx5;
38411reg [63:0] itagacc_fb;
38412reg [63:0] itagacc_fw;
38413reg [63:0] itagacc_fw1;
38414reg [63:0] itagacc_fw2;
38415
38416reg [63:0] dtagacc_fx5;
38417reg [63:0] dtagacc_fb;
38418reg [63:0] dtagacc_fw;
38419reg [63:0] dtagacc_fw1;
38420reg [63:0] dtagacc_fw2;
38421
38422reg [47:0] dsfar_fb;
38423reg [47:0] dsfar_fw;
38424reg [47:0] dsfar_fw1;
38425reg [47:0] dsfar_fw2;
38426
38427reg [47:0] pc_fx4;
38428reg [47:0] pc_fx5;
38429reg [47:0] pc_fb;
38430reg [47:0] pc_fw;
38431reg [47:0] pc_fw1;
38432reg [47:0] pc_fw2;
38433reg [47:0] pc_last;
38434
38435reg tlu_complete_1;
38436reg tlu_complete_2;
38437reg tlu_complete_3;
38438
38439reg frf_w1_valid_fw1;
38440reg frf_w1_valid_fw2;
38441
38442reg frf_w1_skip_addr4_fw1;
38443reg frf_w1_skip_addr4_fw2;
38444reg [2:0] fprs_fb;
38445reg [2:0] fprs_fw;
38446reg [2:0] fprs_fw1;
38447reg [2:0] fprs_fw2;
38448
38449
38450reg [1:0] frf_w2_valid_fw;
38451reg [1:0] frf_w2_valid_bn;
38452reg [2:0] frf_w2_tid_fw;
38453reg [4:0] frf_w2_addr_fw;
38454
38455reg [1:0] frf_w1_valid_fw;
38456reg [2:0] frf_w1_tid_fw;
38457reg [4:0] frf_w1_addr_fw;
38458
38459reg thread_running;
38460
38461reg in_wmr;
38462reg wmr; // latched to get edge
38463reg por_a; // latched to get edge
38464reg por_b; // latched to get edge
38465
38466reg nas_pipe_enable; // Turns on nas_pipe capture and Riesling SSTEP
38467reg first_op;
38468reg [63:0] mytime;
38469wire [5:0] mytnum;
38470wire mytg;
38471integer junk;
38472integer myindex;
38473integer irf_offset;
38474wire oddwin;
38475wire frf_w1_valid_even;
38476wire frf_w1_valid_odd;
38477wire frf_w2_valid_even;
38478wire frf_w2_valid_odd;
38479wire [4:0] frf_w1_skip_addr;
38480wire [4:0] frf_w2_skip_addr;
38481reg good_trap_detected; // Used for -nosas only.
38482
38483//----------------------------------------------------------
38484`ifdef DEBUG_PIPE
38485
38486wire [63:0] g0;
38487wire [63:0] g1;
38488wire [63:0] g2;
38489wire [63:0] g3;
38490wire [63:0] g4;
38491wire [63:0] g5;
38492wire [63:0] g6;
38493wire [63:0] g7;
38494
38495wire [63:0] o0;
38496wire [63:0] o1;
38497wire [63:0] o2;
38498wire [63:0] o3;
38499wire [63:0] o4;
38500wire [63:0] o5;
38501wire [63:0] o6;
38502wire [63:0] o7;
38503
38504wire [63:0] l0;
38505wire [63:0] l1;
38506wire [63:0] l2;
38507wire [63:0] l3;
38508wire [63:0] l4;
38509wire [63:0] l5;
38510wire [63:0] l6;
38511wire [63:0] l7;
38512
38513wire [63:0] i0;
38514wire [63:0] i1;
38515wire [63:0] i2;
38516wire [63:0] i3;
38517wire [63:0] i4;
38518wire [63:0] i5;
38519wire [63:0] i6;
38520wire [63:0] i7;
38521
38522wire [31:0] frf_0;
38523wire [31:0] frf_1;
38524wire [31:0] frf_2;
38525wire [31:0] frf_3;
38526wire [31:0] frf_4;
38527wire [31:0] frf_5;
38528wire [31:0] frf_6;
38529wire [31:0] frf_7;
38530wire [31:0] frf_8;
38531wire [31:0] frf_9;
38532wire [31:0] frf_10;
38533wire [31:0] frf_11;
38534wire [31:0] frf_12;
38535wire [31:0] frf_13;
38536wire [31:0] frf_14;
38537wire [31:0] frf_15;
38538wire [31:0] frf_16;
38539wire [31:0] frf_17;
38540wire [31:0] frf_18;
38541wire [31:0] frf_19;
38542wire [31:0] frf_20;
38543wire [31:0] frf_21;
38544wire [31:0] frf_22;
38545wire [31:0] frf_23;
38546wire [31:0] frf_24;
38547wire [31:0] frf_25;
38548wire [31:0] frf_26;
38549wire [31:0] frf_27;
38550wire [31:0] frf_28;
38551wire [31:0] frf_29;
38552wire [31:0] frf_30;
38553wire [31:0] frf_31;
38554wire [31:0] frf_32;
38555wire [31:0] frf_33;
38556wire [31:0] frf_34;
38557wire [31:0] frf_35;
38558wire [31:0] frf_36;
38559wire [31:0] frf_37;
38560wire [31:0] frf_38;
38561wire [31:0] frf_39;
38562wire [31:0] frf_40;
38563wire [31:0] frf_41;
38564wire [31:0] frf_42;
38565wire [31:0] frf_43;
38566wire [31:0] frf_44;
38567wire [31:0] frf_45;
38568wire [31:0] frf_46;
38569wire [31:0] frf_47;
38570wire [31:0] frf_48;
38571wire [31:0] frf_49;
38572wire [31:0] frf_50;
38573wire [31:0] frf_51;
38574wire [31:0] frf_52;
38575wire [31:0] frf_53;
38576wire [31:0] frf_54;
38577wire [31:0] frf_55;
38578wire [31:0] frf_56;
38579wire [31:0] frf_57;
38580wire [31:0] frf_58;
38581wire [31:0] frf_59;
38582wire [31:0] frf_60;
38583wire [31:0] frf_61;
38584wire [31:0] frf_62;
38585wire [31:0] frf_63;
38586
38587wire [`DELTA_WIDTH:0] delta_fx4_0;
38588wire [`DELTA_WIDTH:0] delta_fx4_1;
38589wire [`DELTA_WIDTH:0] delta_fx4_2;
38590wire [`DELTA_WIDTH:0] delta_fx4_3;
38591wire [`DELTA_WIDTH:0] delta_fx4_4;
38592wire [`DELTA_WIDTH:0] delta_fx4_5;
38593wire [`DELTA_WIDTH:0] delta_fx4_6;
38594wire [`DELTA_WIDTH:0] delta_fx4_7;
38595
38596wire [`DELTA_WIDTH:0] delta_fx5_0;
38597wire [`DELTA_WIDTH:0] delta_fx5_1;
38598wire [`DELTA_WIDTH:0] delta_fx5_2;
38599wire [`DELTA_WIDTH:0] delta_fx5_3;
38600wire [`DELTA_WIDTH:0] delta_fx5_4;
38601wire [`DELTA_WIDTH:0] delta_fx5_5;
38602wire [`DELTA_WIDTH:0] delta_fx5_6;
38603wire [`DELTA_WIDTH:0] delta_fx5_7;
38604
38605wire [`DELTA_WIDTH:0] delta_fb_0;
38606wire [`DELTA_WIDTH:0] delta_fb_1;
38607wire [`DELTA_WIDTH:0] delta_fb_2;
38608wire [`DELTA_WIDTH:0] delta_fb_3;
38609wire [`DELTA_WIDTH:0] delta_fb_4;
38610wire [`DELTA_WIDTH:0] delta_fb_5;
38611wire [`DELTA_WIDTH:0] delta_fb_6;
38612wire [`DELTA_WIDTH:0] delta_fb_7;
38613
38614wire [`DELTA_WIDTH:0] delta_fw_0;
38615wire [`DELTA_WIDTH:0] delta_fw_1;
38616wire [`DELTA_WIDTH:0] delta_fw_2;
38617wire [`DELTA_WIDTH:0] delta_fw_3;
38618wire [`DELTA_WIDTH:0] delta_fw_4;
38619wire [`DELTA_WIDTH:0] delta_fw_5;
38620wire [`DELTA_WIDTH:0] delta_fw_6;
38621wire [`DELTA_WIDTH:0] delta_fw_7;
38622
38623wire [`DELTA_WIDTH:0] delta_fw1_0;
38624wire [`DELTA_WIDTH:0] delta_fw1_1;
38625wire [`DELTA_WIDTH:0] delta_fw1_2;
38626wire [`DELTA_WIDTH:0] delta_fw1_3;
38627wire [`DELTA_WIDTH:0] delta_fw1_4;
38628wire [`DELTA_WIDTH:0] delta_fw1_5;
38629wire [`DELTA_WIDTH:0] delta_fw1_6;
38630wire [`DELTA_WIDTH:0] delta_fw1_7;
38631
38632wire [`DELTA_WIDTH:0] delta_fw2_0;
38633wire [`DELTA_WIDTH:0] delta_fw2_1;
38634wire [`DELTA_WIDTH:0] delta_fw2_2;
38635wire [`DELTA_WIDTH:0] delta_fw2_3;
38636wire [`DELTA_WIDTH:0] delta_fw2_4;
38637wire [`DELTA_WIDTH:0] delta_fw2_5;
38638wire [`DELTA_WIDTH:0] delta_fw2_6;
38639wire [`DELTA_WIDTH:0] delta_fw2_7;
38640
38641wire [`DELTA_WIDTH:0] delta_prev_0;
38642wire [`DELTA_WIDTH:0] delta_prev_1;
38643wire [`DELTA_WIDTH:0] delta_prev_2;
38644wire [`DELTA_WIDTH:0] delta_prev_3;
38645wire [`DELTA_WIDTH:0] delta_prev_4;
38646wire [`DELTA_WIDTH:0] delta_prev_5;
38647wire [`DELTA_WIDTH:0] delta_prev_6;
38648wire [`DELTA_WIDTH:0] delta_prev_7;
38649
38650initial begin
38651 #0;
38652 `PR_ALWAYS ("arg", `ALWAYS,"T%0d DEBUG_PIPE turned ON",mytnum);
38653end
38654
38655//----------------------------------------------------------
38656// Note: no remap of %g,%o,%l,%i regs based on CWP or GL
38657assign g0 = (mytid<=3) ? `IRF7_EXU0[( 0+irf_offset)] : `IRF7_EXU1[( 0+irf_offset)];
38658assign g1 = (mytid<=3) ? `IRF7_EXU0[( 1+irf_offset)] : `IRF7_EXU1[( 1+irf_offset)];
38659assign g2 = (mytid<=3) ? `IRF7_EXU0[( 2+irf_offset)] : `IRF7_EXU1[( 2+irf_offset)];
38660assign g3 = (mytid<=3) ? `IRF7_EXU0[( 3+irf_offset)] : `IRF7_EXU1[( 3+irf_offset)];
38661assign g4 = (mytid<=3) ? `IRF7_EXU0[( 4+irf_offset)] : `IRF7_EXU1[( 4+irf_offset)];
38662assign g5 = (mytid<=3) ? `IRF7_EXU0[( 5+irf_offset)] : `IRF7_EXU1[( 5+irf_offset)];
38663assign g6 = (mytid<=3) ? `IRF7_EXU0[( 6+irf_offset)] : `IRF7_EXU1[( 6+irf_offset)];
38664assign g7 = (mytid<=3) ? `IRF7_EXU0[( 7+irf_offset)] : `IRF7_EXU1[( 7+irf_offset)];
38665
38666assign o0 = (mytid<=3) ? `IRF7_EXU0[( 8+irf_offset)] : `IRF7_EXU1[( 8+irf_offset)];
38667assign o1 = (mytid<=3) ? `IRF7_EXU0[( 9+irf_offset)] : `IRF7_EXU1[( 9+irf_offset)];
38668assign o2 = (mytid<=3) ? `IRF7_EXU0[(10+irf_offset)] : `IRF7_EXU1[(10+irf_offset)];
38669assign o3 = (mytid<=3) ? `IRF7_EXU0[(11+irf_offset)] : `IRF7_EXU1[(11+irf_offset)];
38670assign o4 = (mytid<=3) ? `IRF7_EXU0[(12+irf_offset)] : `IRF7_EXU1[(12+irf_offset)];
38671assign o5 = (mytid<=3) ? `IRF7_EXU0[(13+irf_offset)] : `IRF7_EXU1[(13+irf_offset)];
38672assign o6 = (mytid<=3) ? `IRF7_EXU0[(14+irf_offset)] : `IRF7_EXU1[(14+irf_offset)];
38673assign o7 = (mytid<=3) ? `IRF7_EXU0[(15+irf_offset)] : `IRF7_EXU1[(15+irf_offset)];
38674
38675assign l0 = (mytid<=3) ? `IRF7_EXU0[(16+irf_offset)] : `IRF7_EXU1[(16+irf_offset)];
38676assign l1 = (mytid<=3) ? `IRF7_EXU0[(17+irf_offset)] : `IRF7_EXU1[(17+irf_offset)];
38677assign l2 = (mytid<=3) ? `IRF7_EXU0[(18+irf_offset)] : `IRF7_EXU1[(18+irf_offset)];
38678assign l3 = (mytid<=3) ? `IRF7_EXU0[(19+irf_offset)] : `IRF7_EXU1[(19+irf_offset)];
38679assign l4 = (mytid<=3) ? `IRF7_EXU0[(20+irf_offset)] : `IRF7_EXU1[(20+irf_offset)];
38680assign l5 = (mytid<=3) ? `IRF7_EXU0[(21+irf_offset)] : `IRF7_EXU1[(21+irf_offset)];
38681assign l6 = (mytid<=3) ? `IRF7_EXU0[(22+irf_offset)] : `IRF7_EXU1[(22+irf_offset)];
38682assign l7 = (mytid<=3) ? `IRF7_EXU0[(23+irf_offset)] : `IRF7_EXU1[(23+irf_offset)];
38683
38684assign i0 = (mytid<=3) ? `IRF7_EXU0[(24+irf_offset)] : `IRF7_EXU1[(24+irf_offset)];
38685assign i1 = (mytid<=3) ? `IRF7_EXU0[(25+irf_offset)] : `IRF7_EXU1[(25+irf_offset)];
38686assign i2 = (mytid<=3) ? `IRF7_EXU0[(26+irf_offset)] : `IRF7_EXU1[(26+irf_offset)];
38687assign i3 = (mytid<=3) ? `IRF7_EXU0[(27+irf_offset)] : `IRF7_EXU1[(27+irf_offset)];
38688assign i4 = (mytid<=3) ? `IRF7_EXU0[(28+irf_offset)] : `IRF7_EXU1[(28+irf_offset)];
38689assign i5 = (mytid<=3) ? `IRF7_EXU0[(29+irf_offset)] : `IRF7_EXU1[(29+irf_offset)];
38690assign i6 = (mytid<=3) ? `IRF7_EXU0[(30+irf_offset)] : `IRF7_EXU1[(30+irf_offset)];
38691assign i7 = (mytid<=3) ? `IRF7_EXU0[(31+irf_offset)] : `IRF7_EXU1[(31+irf_offset)];
38692
38693//----------------------------------------------------------
38694assign frf_0 = `FRF7_EVEN[(mytid*32)+ 0];
38695assign frf_2 = `FRF7_EVEN[(mytid*32)+ 1];
38696assign frf_4 = `FRF7_EVEN[(mytid*32)+ 2];
38697assign frf_6 = `FRF7_EVEN[(mytid*32)+ 3];
38698assign frf_8 = `FRF7_EVEN[(mytid*32)+ 4];
38699assign frf_10 = `FRF7_EVEN[(mytid*32)+ 5];
38700assign frf_12 = `FRF7_EVEN[(mytid*32)+ 6];
38701assign frf_14 = `FRF7_EVEN[(mytid*32)+ 7];
38702assign frf_16 = `FRF7_EVEN[(mytid*32)+ 8];
38703assign frf_18 = `FRF7_EVEN[(mytid*32)+ 9];
38704assign frf_20 = `FRF7_EVEN[(mytid*32)+ 10];
38705assign frf_22 = `FRF7_EVEN[(mytid*32)+ 11];
38706assign frf_24 = `FRF7_EVEN[(mytid*32)+ 12];
38707assign frf_26 = `FRF7_EVEN[(mytid*32)+ 13];
38708assign frf_28 = `FRF7_EVEN[(mytid*32)+ 14];
38709assign frf_30 = `FRF7_EVEN[(mytid*32)+ 15];
38710assign frf_32 = `FRF7_EVEN[(mytid*32)+ 16];
38711assign frf_34 = `FRF7_EVEN[(mytid*32)+ 17];
38712assign frf_36 = `FRF7_EVEN[(mytid*32)+ 18];
38713assign frf_38 = `FRF7_EVEN[(mytid*32)+ 19];
38714assign frf_40 = `FRF7_EVEN[(mytid*32)+ 20];
38715assign frf_42 = `FRF7_EVEN[(mytid*32)+ 21];
38716assign frf_44 = `FRF7_EVEN[(mytid*32)+ 22];
38717assign frf_46 = `FRF7_EVEN[(mytid*32)+ 23];
38718assign frf_48 = `FRF7_EVEN[(mytid*32)+ 24];
38719assign frf_50 = `FRF7_EVEN[(mytid*32)+ 25];
38720assign frf_52 = `FRF7_EVEN[(mytid*32)+ 26];
38721assign frf_54 = `FRF7_EVEN[(mytid*32)+ 27];
38722assign frf_56 = `FRF7_EVEN[(mytid*32)+ 28];
38723assign frf_58 = `FRF7_EVEN[(mytid*32)+ 29];
38724assign frf_60 = `FRF7_EVEN[(mytid*32)+ 30];
38725assign frf_62 = `FRF7_EVEN[(mytid*32)+ 31];
38726
38727assign frf_1 = `FRF7_ODD[(mytid*32)+ 0];
38728assign frf_3 = `FRF7_ODD[(mytid*32)+ 1];
38729assign frf_5 = `FRF7_ODD[(mytid*32)+ 2];
38730assign frf_7 = `FRF7_ODD[(mytid*32)+ 3];
38731assign frf_9 = `FRF7_ODD[(mytid*32)+ 4];
38732assign frf_11 = `FRF7_ODD[(mytid*32)+ 5];
38733assign frf_13 = `FRF7_ODD[(mytid*32)+ 6];
38734assign frf_15 = `FRF7_ODD[(mytid*32)+ 7];
38735assign frf_17 = `FRF7_ODD[(mytid*32)+ 8];
38736assign frf_19 = `FRF7_ODD[(mytid*32)+ 9];
38737assign frf_21 = `FRF7_ODD[(mytid*32)+ 10];
38738assign frf_23 = `FRF7_ODD[(mytid*32)+ 11];
38739assign frf_25 = `FRF7_ODD[(mytid*32)+ 12];
38740assign frf_27 = `FRF7_ODD[(mytid*32)+ 13];
38741assign frf_29 = `FRF7_ODD[(mytid*32)+ 14];
38742assign frf_31 = `FRF7_ODD[(mytid*32)+ 15];
38743assign frf_33 = `FRF7_ODD[(mytid*32)+ 16];
38744assign frf_35 = `FRF7_ODD[(mytid*32)+ 17];
38745assign frf_37 = `FRF7_ODD[(mytid*32)+ 18];
38746assign frf_39 = `FRF7_ODD[(mytid*32)+ 19];
38747assign frf_41 = `FRF7_ODD[(mytid*32)+ 20];
38748assign frf_43 = `FRF7_ODD[(mytid*32)+ 21];
38749assign frf_45 = `FRF7_ODD[(mytid*32)+ 22];
38750assign frf_47 = `FRF7_ODD[(mytid*32)+ 23];
38751assign frf_49 = `FRF7_ODD[(mytid*32)+ 24];
38752assign frf_51 = `FRF7_ODD[(mytid*32)+ 25];
38753assign frf_53 = `FRF7_ODD[(mytid*32)+ 26];
38754assign frf_55 = `FRF7_ODD[(mytid*32)+ 27];
38755assign frf_57 = `FRF7_ODD[(mytid*32)+ 28];
38756assign frf_59 = `FRF7_ODD[(mytid*32)+ 29];
38757assign frf_61 = `FRF7_ODD[(mytid*32)+ 30];
38758assign frf_63 = `FRF7_ODD[(mytid*32)+ 31];
38759
38760//----------------------------------------------------------
38761assign delta_fx4_0 = delta_fx4[0];
38762assign delta_fx4_1 = delta_fx4[1];
38763assign delta_fx4_2 = delta_fx4[2];
38764assign delta_fx4_3 = delta_fx4[3];
38765assign delta_fx4_4 = delta_fx4[4];
38766assign delta_fx4_5 = delta_fx4[5];
38767assign delta_fx4_6 = delta_fx4[6];
38768assign delta_fx4_7 = delta_fx4[7];
38769
38770assign delta_fx5_0 = delta_fx5[0];
38771assign delta_fx5_1 = delta_fx5[1];
38772assign delta_fx5_2 = delta_fx5[2];
38773assign delta_fx5_3 = delta_fx5[3];
38774assign delta_fx5_4 = delta_fx5[4];
38775assign delta_fx5_5 = delta_fx5[5];
38776assign delta_fx5_6 = delta_fx5[6];
38777assign delta_fx5_7 = delta_fx5[7];
38778
38779assign delta_fb_0 = delta_fb[0];
38780assign delta_fb_1 = delta_fb[1];
38781assign delta_fb_2 = delta_fb[2];
38782assign delta_fb_3 = delta_fb[3];
38783assign delta_fb_4 = delta_fb[4];
38784assign delta_fb_5 = delta_fb[5];
38785assign delta_fb_6 = delta_fb[6];
38786assign delta_fb_7 = delta_fb[7];
38787
38788assign delta_fw_0 = delta_fw[0];
38789assign delta_fw_1 = delta_fw[1];
38790assign delta_fw_2 = delta_fw[2];
38791assign delta_fw_3 = delta_fw[3];
38792assign delta_fw_4 = delta_fw[4];
38793assign delta_fw_5 = delta_fw[5];
38794assign delta_fw_6 = delta_fw[6];
38795assign delta_fw_7 = delta_fw[7];
38796
38797assign delta_fw1_0 = delta_fw1[0];
38798assign delta_fw1_1 = delta_fw1[1];
38799assign delta_fw1_2 = delta_fw1[2];
38800assign delta_fw1_3 = delta_fw1[3];
38801assign delta_fw1_4 = delta_fw1[4];
38802assign delta_fw1_5 = delta_fw1[5];
38803assign delta_fw1_6 = delta_fw1[6];
38804assign delta_fw1_7 = delta_fw1[7];
38805
38806assign delta_fw2_0 = delta_fw2[0];
38807assign delta_fw2_1 = delta_fw2[1];
38808assign delta_fw2_2 = delta_fw2[2];
38809assign delta_fw2_3 = delta_fw2[3];
38810assign delta_fw2_4 = delta_fw2[4];
38811assign delta_fw2_5 = delta_fw2[5];
38812assign delta_fw2_6 = delta_fw2[6];
38813assign delta_fw2_7 = delta_fw2[7];
38814
38815assign delta_prev_0 = delta_prev[0];
38816assign delta_prev_1 = delta_prev[1];
38817assign delta_prev_2 = delta_prev[2];
38818assign delta_prev_3 = delta_prev[3];
38819assign delta_prev_4 = delta_prev[4];
38820assign delta_prev_5 = delta_prev[5];
38821assign delta_prev_6 = delta_prev[6];
38822assign delta_prev_7 = delta_prev[7];
38823
38824`endif // DEBUG_PIPE
38825//----------------------------------------------------------
38826
38827//----------------------------------------------------------
38828assign mytnum = (mycid*8)+mytid;
38829assign mytg = mytid >> 2;
38830
38831assign exu_complete = exu_valid & ~(`PROBES7.clkstop_d5|`TOP.in_reset|`SPC7.tcu_scan_en);
38832assign imul_complete = imul_valid & ~(`TOP.in_reset|`SPC7.tcu_scan_en);
38833assign idiv_complete = idiv_valid & ~(`TOP.in_reset|`SPC7.tcu_scan_en);
38834assign tlu_complete = tlu_complete_3 ;
38835assign fp_complete = fp_valid & ~(`TOP.in_reset|`SPC7.tcu_scan_en);
38836assign fdiv_complete = fdiv_valid & ~(`TOP.in_reset|`SPC7.tcu_scan_en);
38837assign lsu_complete = lsu_valid & ~(`TOP.in_reset|`SPC7.tcu_scan_en);
38838assign asi_complete = asi_valid & ~(`TOP.in_reset|`SPC7.tcu_scan_en);
38839
38840assign complete_w = (exu_complete << `EXU_INDEX) |
38841 (lsu_complete << `LSU_INDEX) |
38842 (tlu_complete << `TLU_INDEX) |
38843 (asi_complete << `ASI_INDEX) ;
38844
38845assign oddwin = CWP_reg % 2;
38846
38847assign frf_w1_valid_even = (frf_w1_tid_fw == mytid) & frf_w1_valid_fw[1];
38848assign frf_w1_valid_odd = (frf_w1_tid_fw == mytid) & frf_w1_valid_fw[0];
38849assign frf_w2_valid_even = (frf_w2_tid_fw == mytid) & frf_w2_valid_fw[1];
38850assign frf_w2_valid_odd = (frf_w2_tid_fw == mytid) & frf_w2_valid_fw[0];
38851
38852assign frf_w1_skip_addr = frf_w1_addr_fw;
38853assign frf_w2_skip_addr = frf_w2_addr_fw;
38854
38855//-----------------
38856// ADD_TSB_CFG
38857// NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
38858`ifdef ADD_TSB_CFG
38859wire [63:0] ctxt_z_tsb_cfg0_reg = `PROBES7.ctxt_z_tsb_cfg0_reg[mytid];
38860wire [63:0] ctxt_z_tsb_cfg1_reg = `PROBES7.ctxt_z_tsb_cfg1_reg[mytid];
38861wire [63:0] ctxt_z_tsb_cfg2_reg = `PROBES7.ctxt_z_tsb_cfg2_reg[mytid];
38862wire [63:0] ctxt_z_tsb_cfg3_reg = `PROBES7.ctxt_z_tsb_cfg3_reg[mytid];
38863wire [63:0] ctxt_nz_tsb_cfg0_reg = `PROBES7.ctxt_nz_tsb_cfg0_reg[mytid];
38864wire [63:0] ctxt_nz_tsb_cfg1_reg = `PROBES7.ctxt_nz_tsb_cfg1_reg[mytid];
38865wire [63:0] ctxt_nz_tsb_cfg2_reg = `PROBES7.ctxt_nz_tsb_cfg2_reg[mytid];
38866wire [63:0] ctxt_nz_tsb_cfg3_reg = `PROBES7.ctxt_nz_tsb_cfg3_reg[mytid];
38867`endif
38868
38869//----------------------------------------------------------
38870// Pipelined Signals
38871always @ (posedge `BENCH_SPC7_GCLK) begin // {
38872
38873 // TLU is async to the execution pipeline
38874 // but needs to be delayed to allow CWP, etc to update and be stable
38875 // before arch state is captured and diff_reg is called.
38876 // Done for FLUSHW
38877
38878 // FDIV was moved from fw1 to fw to allow FPRS to be stable before capture
38879 tlu_complete_1 <= tlu_valid & ~(`TOP.in_reset|`SPC7.tcu_scan_en);
38880 tlu_complete_2 <= tlu_complete_1;
38881 tlu_complete_3 <= tlu_complete_2;
38882
38883 itagacc_fx5 <= I_TAG_ACC_reg; // Signal changes in W so need to pipeline to fw2
38884 itagacc_fb <= itagacc_fx5;
38885 itagacc_fw <= itagacc_fb;
38886 itagacc_fw1 <= itagacc_fw;
38887 itagacc_fw2 <= itagacc_fw1;
38888
38889 dtagacc_fx5 <= D_TAG_ACC_reg; // Signal changes in W so need to pipeline to fw2
38890 dtagacc_fb <= dtagacc_fx5;
38891 dtagacc_fw <= dtagacc_fb;
38892 dtagacc_fw1 <= dtagacc_fw;
38893 dtagacc_fw2 <= dtagacc_fw1;
38894
38895 dsfar_fb <= DSFAR_reg; // Signal changes in W+1 so need to pipeline to fw2
38896 dsfar_fw <= dsfar_fb;
38897 dsfar_fw1 <= dsfar_fw;
38898 dsfar_fw2 <= dsfar_fw1;
38899
38900 pc_fx4 <= PC_reg;
38901 pc_fx5 <= pc_fx4;
38902 pc_fb <= pc_fx5;
38903 pc_fw <= pc_fb;
38904 pc_fw1 <= pc_fw;
38905 pc_fw2 <= pc_fw1;
38906
38907 cwp_fx4 <= CWP_reg;
38908 cwp_fx5 <= cwp_fx4;
38909 cwp_fb <= cwp_fx5;
38910 cwp_fw <= cwp_fb;
38911 cwp_fw1 <= cwp_fw;
38912 cwp_fw2 <= cwp_fw1;
38913
38914 complete_fx4 <= complete_w;
38915 complete_fx5 <= complete_fx4 ;
38916 complete_fb <= complete_fx5 |
38917 (idiv_complete << `IDIV_INDEX);
38918 complete_fw <= complete_fb |
38919 (fdiv_complete << `FDIV_INDEX) |
38920 (imul_complete << `IMUL_INDEX);
38921 complete_fw1 <= complete_fw |
38922 (fp_complete << `FP_INDEX);
38923
38924 complete_fw2 <= complete_fw1;
38925
38926 frf_w1_valid_fw1 <= (frf_w1_valid_odd | frf_w1_valid_even) & fp_complete;
38927 frf_w1_valid_fw2 <= frf_w1_valid_fw1;
38928
38929 frf_w1_skip_addr4_fw1 <= frf_w1_skip_addr[4];
38930 frf_w1_skip_addr4_fw2 <= frf_w1_skip_addr4_fw1;
38931
38932 fprs_fb <= FPRS_reg;
38933 fprs_fw <= fprs_fb;
38934 fprs_fw1 <= fprs_fw;
38935 fprs_fw2 <= fprs_fw1;
38936
38937 frf_w2_valid_fw <= frf_w2_valid_bn;
38938 frf_w2_tid_fw <= frf_w2_tid;
38939 frf_w2_addr_fw <= frf_w2_addr;
38940
38941 frf_w1_valid_fw <= frf_w1_valid;
38942 frf_w1_tid_fw <= frf_w1_tid;
38943 frf_w1_addr_fw <= frf_w1_addr;
38944
38945 // Thread running
38946
38947 if (~thread_running & `SPC7.tcu_core_running[mytid])
38948 `TOP.th_last_act_cycle[mytnum] = `TOP.core_cycle_cnt;
38949
38950 thread_running <= `SPC7.tcu_core_running[mytid];
38951
38952 // Reset some register prev state on wmr negation
38953 if (`SPC7.rst_wmr_protect && ~wmr)
38954 wmr_prev;
38955
38956 if (por_a && ~por_b)
38957 por_prev;
38958
38959 wmr <= `SPC7.rst_wmr_protect;
38960 por_a <= `TOP.in_por;
38961 por_b <= por_a;
38962
38963 if (`SPC7.rst_wmr_protect)
38964 in_wmr <= 1;
38965
38966end // }
38967
38968//----------------------------------------------------------
38969// Holding state for registers that may be updated asynchronously
38970// after synchronous update, but before capture/step. Also for reads,
38971// when register is read and modified before capture/step ..
38972// We capture the value /write time, and use that for sstep,
38973// ignoring any async updates, which are sent in the NEXT sstep ..
38974//
38975reg [63:0] asi_updated_int_rec;
38976reg asi_rdwr_int_rec;
38977reg asi_wr_int_rec_delay;
38978
38979reg asi_updated_hintp;
38980reg asi_rdwr_hintp;
38981reg asi_wr_hintp_delay;
38982
38983reg [16:0] asi_updated_softint;
38984reg asi_rdwr_softint;
38985reg asi_wr_softint_delay;
38986reg [16:0] asi_softint_wrdata;
38987
38988always @(posedge `BENCH_SPC7_GCLK) begin // {
38989
38990 // Corner case : If async and sync wr occur in same clock, then the async
38991 // update takes place. In this case we have to capture the
38992 // value of the write WITHOUT async bit being set, so that
38993 // we can sync with Riesling's sync write ..
38994
38995 asi_wr_int_rec_delay <= ( `SPC7.tlu.cth.asi_wr_int_rec[mytid] |
38996 `SPC7.tlu.asi_rd_inc_vec_2[mytid]);
38997
38998 if (`SPC7.tlu.cth.asi_wr_int_rec[mytid] |
38999 ((`SPC7.tlu.asi.rd_inc_vec) &&
39000 (`SPC7.tlu.asi.rd_tid_dec[mytid])) |
39001 (`SPC7.tlu.asi_rd_int_rec &
39002 `SPC7.tlu.cth.int_rec_mux_sel==mytid))
39003 begin // {
39004
39005 if (`SPC7.tlu.cth.asi_wr_int_rec[mytid])
39006 asi_updated_int_rec <= `SPC7.tlu.cth.int_rec ;
39007 else if ( (`SPC7.tlu.asi.rd_inc_vec) &&
39008 (`SPC7.tlu.asi.rd_tid_dec[mytid]) )
39009 if (`SPC7.tlu.cth.cxi_wr_int_dis[mytid]) begin
39010 asi_updated_int_rec <= INTR_RECEIVE_reg & `SPC7.tlu.cth.int_rec_muxed_;
39011 asi_updated_int_rec[`SPC7.tlu.cth.incoming_vector_in] <= 1'b0 ;
39012 end
39013 else
39014 begin
39015 asi_updated_int_rec <= `SPC7.tlu.cth.int_rec_muxed ;
39016 asi_updated_int_rec[`SPC7.tlu.cth.incoming_vector_in] <= 1'b0 ;
39017 end
39018 else
39019 asi_updated_int_rec <= INTR_RECEIVE_reg;
39020 asi_rdwr_int_rec <= 1'b1;
39021 end //}
39022 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
39023 asi_rdwr_int_rec <= 1'b0;
39024
39025 asi_wr_hintp_delay <= `SPC7.tlu.asi_wr_hintp[mytid];
39026
39027 if (`SPC7.tlu.asi_wr_hintp[mytid] |
39028 `SPC7.tlu.asi_rd_hintp[mytid])
39029 begin // {
39030 if (`SPC7.tlu.asi_wr_hintp[mytid])
39031 asi_updated_hintp <= `SPC7.tlu.asi_wr_data_0[0] ;
39032 else
39033 asi_updated_hintp <= HINTP_reg;
39034 asi_rdwr_hintp <= 1'b1;
39035 end //}
39036 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
39037 asi_rdwr_hintp <= 1'b0;
39038
39039 asi_wr_softint_delay <= (`SPC7.tlu.asi_wr_softint[mytid] |
39040 `SPC7.tlu.asi_wr_clear_softint[mytid] |
39041 `SPC7.tlu.asi_wr_set_softint[mytid]);
39042
39043 if (`SPC7.tlu.asi_wr_clear_softint[mytid])
39044 asi_softint_wrdata <= ~`SPC7.tlu.asi_wr_data_0[16:0] & rd_SOFTINT_reg;
39045 else if (`SPC7.tlu.asi_wr_set_softint[mytid])
39046 asi_softint_wrdata <= `SPC7.tlu.asi_wr_data_0[16:0] | rd_SOFTINT_reg;
39047 else
39048 asi_softint_wrdata <= `SPC7.tlu.asi_wr_data_0[16:0];
39049
39050 if (asi_wr_softint_delay | `SPC7.tlu.asi_rd_softint[mytid])
39051 begin // {
39052 if (asi_wr_softint_delay)
39053 asi_updated_softint <= asi_softint_wrdata ;
39054 else
39055 asi_updated_softint <= rd_SOFTINT_reg ;
39056 asi_rdwr_softint <= 1'b1;
39057 end //}
39058 else if (complete_fw1 && !`NASTOP.sstep_early[mytnum])
39059 asi_rdwr_softint <= 1'b0;
39060end //}
39061
39062//----------------------------------------------------------
39063// Negedge sampling to avoid race on specific signals ..
39064//
39065always @ (negedge `BENCH_SPC7_GCLK) begin // {
39066 frf_w2_valid_bn <= frf_w2_valid;
39067end //}
39068
39069//----------------------------------------------------------
39070// When instruction completes,
39071// Push differences to simics
39072
39073always @ (posedge `BENCH_SPC7_GCLK) begin // {
39074
39075 if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable && ~`SPC7.tcu_scan_en && ~`TOP.in_por) begin // {
39076
39077
39078 //----------
39079 // Update window registers
39080 if (CWP_reg != `NASTOP.th_cwp[mytnum]) begin // {
39081 copy_win (CWP_reg,`NASTOP.th_cwp[mytnum]);
39082 `NASTOP.th_cwp[mytnum] = CWP_reg;
39083 end // }
39084
39085 //----------
39086 // Update global registers
39087 // Wait for warm-reset flush related toggling to settle
39088 if (GL_reg != th_gl) begin // {
39089 if (`SPC7.spc_core_running_status[mytid] &
39090 ~`SPC7.rst_wmr_protect) begin // {
39091 copy_global (GL_reg,th_gl);
39092 th_gl = GL_reg;
39093 end // }
39094 end // }
39095
39096 //----------
39097 // Check for bad signal values
39098 check_values;
39099
39100 //----------
39101 // Step Simics
39102 //
39103 // if NASTOP.sstep_sent[tid]=1,
39104 // then SSTEP was set by another module (i.e. tlb_sync)
39105
39106 if (`PARGS.nas_check_on) begin // {
39107 mytime = `TOP.core_cycle_cnt-1;
39108 if (complete_fw2 && (`NASTOP.sstep_sent[mytnum]==1'b0)) begin // {
39109 `PR_INFO ("pli_nas", `INFO, " C%0d T%0d PLI_SSTEP tid=%d pc=%h ts=%0d ",
39110 mycid,mytid,mytnum,pc_fw2,mytime);
39111 junk = $sim_send(`PLI_SSTEP, mytnum);
39112 // Always clear sstep_early
39113 // In case tlb_sync asserted it too late for complete_fw2
39114 `NASTOP.sstep_early[mytnum] <= 1'b0;
39115 end //}
39116 else if (complete_fw2) begin // {
39117 `NASTOP.sstep_sent[mytnum] <= 1'b0; // re-arm SSTEP
39118 `NASTOP.sstep_early[mytnum] <= 1'b0;
39119 `PR_INFO ("pli_nas", `INFO, " C%0d T%0d PLI_SSTEP tid=%d pc=%h ts=%0d (nas_pipe: skip sstep. rearm sstep. sstep_sent=0)",
39120 mycid,mytid,mytnum,pc_fw2,mytime);
39121 end //}
39122 end //}
39123
39124 //----------
39125 // Only capture if something completes and not first instruction
39126 if (complete_fw2 && !first_op) begin // {
39127 update_pc;
39128 push_simics; // Use with AXIS to keep from getting timeout
39129 end // }
39130
39131 // Pipeline runs continuously
39132 // Other than when in POR ..
39133 update_fx4;
39134 update_fx5;
39135 update_fb;
39136 update_fw;
39137 update_fw1;
39138 update_fw2;
39139 // Only save to delta_prev when something completes
39140 if (complete_fw2) begin
39141 update_fw2_async;
39142 update_prev;
39143 first_op = 0;
39144 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
39145 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
39146 end
39147
39148
39149`ifndef EMUL_TL
39150 //----------
39151 // If something was captured but no instruction is in the pipeline
39152 if ((delta_fw2[`NEXT_INDEX]!=`FIRST_INDEX) && (complete_fw2 == 0))
39153 begin // {
39154
39155 for (myindex=`FIRST_INDEX; myindex<delta_fw2[`NEXT_INDEX]; myindex=myindex+1)
39156 begin // {
39157 print_entry (delta_fw2[myindex]);
39158 end //}
39159 `PR_ERROR ("nas",`ERROR, "T%0d Unexpected Reg change in DUT. Special case - no instruction retired.", mytnum);
39160
39161 end // }
39162`endif
39163
39164
39165 //----------
39166 // End detection for non-sas runs ..
39167
39168 for (junk=0;junk<`PARGS.bad_trap_count;junk=junk+1)
39169 if (({16'b0,pc_fw2}&`PC_MASK) ===
39170 (`PARGS.bad_trap_addr[junk]&`PC_MASK)) begin // {
39171 // Disable nas_pipe processing (capture & SSTEP)
39172 // to speed up simulation (minimize socket traffic,etc)
39173 nas_pipe_enable=1'b0;
39174 if (! `PARGS.nas_check_on) begin //{
39175 `PR_ERROR ("nas",`ERROR, "T%0d reached Bad Trap", mytnum);
39176 end //}
39177 end //}
39178
39179 for (junk=0;junk<`PARGS.good_trap_count;junk=junk+1)
39180 if ((|complete_fw2) && (({16'b0,pc_fw2}&`PC_MASK) ===
39181 (`PARGS.good_trap_addr[junk]&`PC_MASK))) begin // {
39182 // Disable nas_pipe processing (capture & SSTEP)
39183 // to speed up simulation (minimize socket traffic,etc)
39184 nas_pipe_enable=1'b0;
39185 if (! `PARGS.nas_check_on) begin //{
39186 good_trap_detected = 1'b1;
39187 end //}
39188 end //}
39189
39190 // Check Thread level timeout
39191 if (thread_running &&
39192 (`TOP.core_cycle_cnt - `TOP.th_last_act_cycle[mytnum]) > `PARGS.th_timeout)
39193 begin // {
39194 // Note: Do not change this message because regreport parses it for certain words.
39195 `PR_ALWAYS ("nas",`ALWAYS, "ERROR: Thread T%0d No Activity for %0d Cycles - Thread TIMEOUT!",
39196 mytnum, `PARGS.th_timeout);
39197 junk = incErr(9999); // must exceed users max error setting to force exit.
39198 end //}
39199
39200 end // if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable ...)}
39201
39202 // if -nosas only,
39203 // Need to make sure Store Buffer is empty before turning off th_check_enable.
39204 //global chkr requires to wait for all outstanding pending I
39205 if ((! `PARGS.nas_check_on) &&
39206 (good_trap_detected==1'b1) &&
39207 (`TOP.nas_top.lsu_stb_empty[mytnum]) && `TOP.nas_top.ireq_pending[mytnum]) begin // {
39208 `PARGS.th_check_enable[mytnum] = 1'b0;
39209 `TOP.finished_tids[mytnum] = 1'b1;
39210 good_trap_detected = 1'b0;
39211 `PR_NORMAL ("nas", `NORMAL, "T%0d reached Good Trap. Disabling checking for thread %0d", mytnum,mytnum);
39212 end // }
39213end // always }
39214
39215//----------------------------------------------------------
39216//----------------------------------------------------------
39217// Stage FX4 of delta pipeline
39218task update_fx4;
39219
39220 integer i;
39221 reg [7:0] index;
39222
39223 begin // {
39224
39225 `ifndef EMUL_TL
39226 index = `FIRST_INDEX;
39227
39228 //--------------------
39229 // Init delta_fx4
39230 delta_fx4[`NEXT_INDEX] <= `FIRST_INDEX;
39231 delta_fx4[`TIME_INDEX] <= 0;
39232 delta_fx4[`PC_INDEX] <= {16'b0,PC_reg};
39233 delta_fx4[`GL_INDEX] <= GL_reg;
39234 delta_fx4[`CWP_INDEX] <= CWP_reg;
39235 delta_fx4[`OPCODE_INDEX] <= opcode;
39236 delta_fx4[`FIRST_INDEX] <= 77'hx;
39237 `else
39238 index = 0;
39239 `endif
39240
39241 end // }
39242endtask
39243
39244//----------------------------------------------------------
39245// Stage FX5 of delta pipeline
39246task update_fx5;
39247
39248 integer i;
39249 reg [7:0] index;
39250 reg [38:0] frf_tmp;
39251
39252 begin // {
39253
39254 `ifndef EMUL_TL
39255 index = delta_fx4[`NEXT_INDEX];
39256
39257 //--------------------
39258 // Pipeline previous stage
39259 for (i=0; i<=delta_fx4[`NEXT_INDEX]; i=i+1) begin // {
39260 delta_fx5[i] <= delta_fx4[i];
39261 end
39262 `else
39263 index = 0;
39264 `endif
39265
39266 //-------------------
39267 // Control Registers
39268 if (complete_fx4) begin // LSU | EXU | TLU
39269 push_delta_fx5 (`CCR+`CTL_OFFSET,CCR_reg,index);
39270 end
39271
39272 //-------------------
39273 // Update IRF7
39274`ifndef NAS_NO_IRFFRF
39275 if (complete_fx4[`LSU_INDEX] |
39276 complete_fx4[`EXU_INDEX]) begin
39277 if (mytid <= 3) begin // {
39278 for (i=0; i<=31; i=i+1) begin // {
39279 push_delta_fx5 (i,`IRF7_EXU0[(remap(i,oddwin)+irf_offset)],index);
39280 end // }
39281 end // }
39282 else begin // {
39283 for (i=0; i<=31; i=i+1) begin // {
39284 push_delta_fx5 (i,`IRF7_EXU1[(remap(i,oddwin)+irf_offset)],index);
39285 end // }
39286 end // }
39287 end
39288`endif
39289
39290 //--------------------
39291 // Update FRF7 - Loads use W2 Port.
39292`ifndef NAS_NO_IRFFRF
39293 if (complete_fx4[`LSU_INDEX]) begin // {
39294 // IF W1 port is also being written, ignore that address
39295 for (i=0; i<=31; i=i+1) begin // {
39296 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
39297 frf_tmp = `FRF7_EVEN[(mytid*32)+i];
39298 push_delta_fx5 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
39299 end // }
39300 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
39301 frf_tmp = `FRF7_ODD[(mytid*32)+i];
39302 push_delta_fx5 (`FP_OFFSET + (i*2)+1, frf_tmp[31:0], index);
39303 end // }
39304 end //}
39305 end // }
39306`endif
39307
39308 // Update ASR/ASI registers
39309 if (complete_fx4) begin // {
39310 push_delta_fx5 (`PSTATE + `CTL_OFFSET,PSTATE_reg,index);
39311 push_delta_fx5 (`HPSTATE + `CTL_OFFSET,HPSTATE_reg,index);
39312 push_delta_fx5 (`PIL + `CTL_OFFSET,PIL_reg,index);
39313 push_delta_fx5 (`TBA + `CTL_OFFSET,{TBA_reg,15'b0},index);
39314 push_delta_fx5 (`GL + `CTL_OFFSET,GL_reg,index);
39315 push_delta_fx5 (`HTBA + `CTL_OFFSET,{HTBA_reg,14'b0},index);
39316 push_delta_fx5 (`VER + `CTL_OFFSET,VER_reg,index);
39317 push_delta_fx5 (`Y + `CTL_OFFSET,Y_reg,index);
39318 push_delta_fx5 (`ASI + `CTL_OFFSET,ASI_reg,index);
39319 push_delta_fx5 (`STICK_CMPR + `CTL_OFFSET,STICK_CMPR_wire,index);
39320 push_delta_fx5 (`HSTICK_CMPR + `CTL_OFFSET,HSTICK_CMPR_wire,index);
39321 push_delta_fx5 (`TICK_CMPR + `CTL_OFFSET,TICK_CMPR_wire,index);
39322 push_delta_fx5 (`CWP + `CTL_OFFSET,CWP_reg,index);
39323 push_delta_fx5 (`CANSAVE + `CTL_OFFSET,CANSAVE_reg,index);
39324 push_delta_fx5 (`CANRESTORE + `CTL_OFFSET,CANRESTORE_reg,index);
39325 push_delta_fx5 (`CLEANWIN + `CTL_OFFSET,CLEANWIN_reg,index);
39326 push_delta_fx5 (`OTHERWIN + `CTL_OFFSET,OTHERWIN_reg,index);
39327 push_delta_fx5 (`WSTATE + `CTL_OFFSET,WSTATE_reg,index);
39328
39329 push_delta_fx5 (`CTXT_PRIM_0+`CTL_OFFSET,CTXT_PRIM_0_reg,index);
39330 push_delta_fx5 (`CTXT_SEC_0+`CTL_OFFSET,CTXT_SEC_0_reg,index);
39331 push_delta_fx5 (`CTXT_PRIM_1+`CTL_OFFSET,CTXT_PRIM_1_reg,index);
39332 push_delta_fx5 (`CTXT_SEC_1+`CTL_OFFSET,CTXT_SEC_1_reg,index);
39333 push_delta_fx5 (`LSU_CONTROL+`CTL_OFFSET,LSU_CONTROL_reg,index);
39334 push_delta_fx5 (`WATCHPOINT_ADDR+`CTL_OFFSET,WATCHPOINT_ADDR_reg,index);
39335
39336 // NOTE - ADD_TSB_CFG will never be used for Axis or Tharas
39337 // ADD_TSB_CFG
39338 `ifdef ADD_TSB_CFG
39339 push_delta_fx5 (`CTXT_Z_TSB_CFG0+`CTL_OFFSET,ctxt_z_tsb_cfg0_reg,index);
39340 push_delta_fx5 (`CTXT_Z_TSB_CFG1+`CTL_OFFSET,ctxt_z_tsb_cfg1_reg,index);
39341 push_delta_fx5 (`CTXT_Z_TSB_CFG2+`CTL_OFFSET,ctxt_z_tsb_cfg2_reg,index);
39342 push_delta_fx5 (`CTXT_Z_TSB_CFG3+`CTL_OFFSET,ctxt_z_tsb_cfg3_reg,index);
39343 push_delta_fx5 (`CTXT_NZ_TSB_CFG0+`CTL_OFFSET,ctxt_nz_tsb_cfg0_reg,index);
39344 push_delta_fx5 (`CTXT_NZ_TSB_CFG1+`CTL_OFFSET,ctxt_nz_tsb_cfg1_reg,index);
39345 push_delta_fx5 (`CTXT_NZ_TSB_CFG2+`CTL_OFFSET,ctxt_nz_tsb_cfg2_reg,index);
39346 push_delta_fx5 (`CTXT_NZ_TSB_CFG3+`CTL_OFFSET,ctxt_nz_tsb_cfg3_reg,index);
39347 `endif
39348
39349 end //}
39350
39351 // Update GSR for all except write ASR in progess
39352 if (!asi_in_progress) begin // {
39353 push_delta_fx5 (`GSR + `CTL_OFFSET,GSR_wire, index);
39354 end // }
39355
39356 // If lsu_complete & fp_complete assert at same time,
39357 // then the fp_complete is the one that will modify the FSR
39358 if (complete_fx4[`LSU_INDEX] & !complete_fw1[`FP_INDEX]) begin
39359 push_delta_fx5 (`FSR+`CTL_OFFSET,FSR_wire,index);
39360 end
39361
39362 // Non Trap updates of Trap stack & level
39363 if (complete_fx4 && !complete_fx4[`TLU_INDEX]) begin // {
39364 push_delta_fx5 (`TL + `CTL_OFFSET,TL_reg,index);
39365 push_delta_fx5 (`TPC1 + `CTL_OFFSET, TPC1_wire, index);
39366 push_delta_fx5 (`TPC2 + `CTL_OFFSET, TPC2_wire, index);
39367 push_delta_fx5 (`TPC3 + `CTL_OFFSET, TPC3_wire, index);
39368 push_delta_fx5 (`TPC4 + `CTL_OFFSET, TPC4_wire, index);
39369 push_delta_fx5 (`TPC5 + `CTL_OFFSET, TPC5_wire, index);
39370 push_delta_fx5 (`TPC6 + `CTL_OFFSET, TPC6_wire, index);
39371 push_delta_fx5 (`TNPC1 + `CTL_OFFSET, TNPC1_wire, index);
39372 push_delta_fx5 (`TNPC2 + `CTL_OFFSET, TNPC2_wire, index);
39373 push_delta_fx5 (`TNPC3 + `CTL_OFFSET, TNPC3_wire, index);
39374 push_delta_fx5 (`TNPC4 + `CTL_OFFSET, TNPC4_wire, index);
39375 push_delta_fx5 (`TNPC5 + `CTL_OFFSET, TNPC5_wire, index);
39376 push_delta_fx5 (`TNPC6 + `CTL_OFFSET, TNPC6_wire, index);
39377 push_delta_fx5 (`TSTATE1 + `CTL_OFFSET, TSTATE1_wire, index);
39378 push_delta_fx5 (`TSTATE2 + `CTL_OFFSET, TSTATE2_wire, index);
39379 push_delta_fx5 (`TSTATE3 + `CTL_OFFSET, TSTATE3_wire, index);
39380 push_delta_fx5 (`TSTATE4 + `CTL_OFFSET, TSTATE4_wire, index);
39381 push_delta_fx5 (`TSTATE5 + `CTL_OFFSET, TSTATE5_wire, index);
39382 push_delta_fx5 (`TSTATE6 + `CTL_OFFSET, TSTATE6_wire, index);
39383 push_delta_fx5 (`HTSTATE1 + `CTL_OFFSET, HTSTATE1_wire, index);
39384 push_delta_fx5 (`HTSTATE2 + `CTL_OFFSET, HTSTATE2_wire, index);
39385 push_delta_fx5 (`HTSTATE3 + `CTL_OFFSET, HTSTATE3_wire, index);
39386 push_delta_fx5 (`HTSTATE4 + `CTL_OFFSET, HTSTATE4_wire, index);
39387 push_delta_fx5 (`HTSTATE5 + `CTL_OFFSET, HTSTATE5_wire, index);
39388 push_delta_fx5 (`HTSTATE6 + `CTL_OFFSET, HTSTATE6_wire, index);
39389 push_delta_fx5 (`TT1 + `CTL_OFFSET, TT1_wire, index);
39390 push_delta_fx5 (`TT2 + `CTL_OFFSET, TT2_wire, index);
39391 push_delta_fx5 (`TT3 + `CTL_OFFSET, TT3_wire, index);
39392 push_delta_fx5 (`TT4 + `CTL_OFFSET, TT4_wire, index);
39393 push_delta_fx5 (`TT5 + `CTL_OFFSET, TT5_wire, index);
39394 push_delta_fx5 (`TT6 + `CTL_OFFSET, TT6_wire, index);
39395 end //}
39396
39397 end // }
39398endtask
39399
39400//----------------------------------------------------------
39401// Stage FB of delta pipeline
39402task update_fb;
39403
39404 integer i;
39405 reg [7:0] index;
39406
39407 begin // {
39408
39409 `ifndef EMUL_TL
39410 index = delta_fx5[`NEXT_INDEX];
39411
39412 //--------------------
39413 // Pipeline previous stage
39414 for (i=0; i<=delta_fx5[`NEXT_INDEX]; i=i+1) begin // {
39415 delta_fb[i] <= delta_fx5[i];
39416 end
39417 `else
39418 index = 0;
39419 `endif
39420
39421 // ASI/ASR ONLY updates
39422 if (complete_fx5[`ASI_INDEX]) begin // {
39423 push_delta_fb (`GSR + `CTL_OFFSET,GSR_wire, index);
39424 end //}
39425
39426 end // }
39427endtask
39428
39429//----------------------------------------------------------
39430// Stage FW of delta pipeline
39431task update_fw;
39432
39433 integer i;
39434 reg [7:0] index;
39435 reg [38:0] frf_tmp;
39436
39437 begin // {
39438
39439 `ifndef EMUL_TL
39440 index = delta_fb[`NEXT_INDEX];
39441
39442 //--------------------
39443 // Pipeline previous stage
39444 for (i=0; i<=delta_fb[`NEXT_INDEX]; i=i+1) begin // {
39445 delta_fw[i] <= delta_fb[i];
39446 end
39447
39448 // Capture CWP_reg for SAVE/RESTORE
39449 if (imul_complete) begin
39450 delta_fw[`CWP_INDEX] <= CWP_reg;
39451 end
39452 `else
39453 index = 0;
39454 `endif
39455
39456 //-------------------
39457 // Update IRF7
39458`ifndef NAS_NO_IRFFRF
39459 if (complete_fb[`TLU_INDEX]) begin
39460 if (mytid <= 3) begin // {
39461 for (i=0; i<=31; i=i+1) begin // {
39462 push_delta_fw (i,`IRF7_EXU0[(remap(i,oddwin)+irf_offset)],index);
39463 end // }
39464 end // }
39465 else begin // {
39466 for (i=0; i<=31; i=i+1) begin // {
39467 push_delta_fw (i,`IRF7_EXU1[(remap(i,oddwin)+irf_offset)],index);
39468 end // }
39469 end // }
39470 end
39471`endif
39472
39473 //--------------------
39474 // Update FRF7 - Idivs use W2.
39475`ifndef NAS_NO_IRFFRF
39476 if (complete_fb[`IDIV_INDEX]) begin // {
39477 // IF W1 port is also being written, ignore that address
39478 for (i=0; i<=31; i=i+1) begin // {
39479 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
39480 frf_tmp = `FRF7_EVEN[(mytid*32)+i];
39481 push_delta_fw (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
39482 end // }
39483 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
39484 frf_tmp = `FRF7_ODD[(mytid*32)+i];
39485 push_delta_fw (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
39486 end // }
39487 end //}
39488 end // }
39489`endif
39490
39491 end // }
39492
39493endtask
39494
39495//----------------------------------------------------------
39496// Stage FW1 of delta pipeline
39497task update_fw1;
39498
39499 integer i;
39500 reg [7:0] index;
39501
39502 reg [4:0] rdnum;
39503 reg [38:0] frf_tmp;
39504
39505 begin // {
39506
39507 `ifndef EMUL_TL
39508 index = delta_fw[`NEXT_INDEX];
39509
39510 //--------------------
39511 // Pipeline previous stage
39512 for (i=0; i<=delta_fw[`NEXT_INDEX]; i=i+1) begin // {
39513 delta_fw1[i] <= delta_fw[i];
39514 end
39515 `else
39516 index = 0;
39517 `endif
39518
39519 //--------------------
39520 // Update FRF7 - FPops use W1 port.
39521`ifndef NAS_NO_IRFFRF
39522 if (fp_complete) begin // {
39523 // IF W2 port is also being written, ignore that address
39524 for (i=0; i<=31; i=i+1) begin // {
39525 if (!((i == frf_w2_skip_addr) && frf_w2_valid_even)) begin // {
39526 frf_tmp = `FRF7_EVEN[(mytid*32)+i];
39527 push_delta_fw1 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
39528 end // }
39529 if (!((i == frf_w2_skip_addr) && frf_w2_valid_odd)) begin // {
39530 frf_tmp = `FRF7_ODD[(mytid*32)+i];
39531 push_delta_fw1 (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
39532 end // }
39533 end //}
39534 end // }
39535`endif
39536
39537 //-------------------
39538 // Control Registers
39539 if (complete_fw[`IMUL_INDEX]|complete_fw[`IDIV_INDEX]) begin
39540 push_delta_fw1 (`CCR+`CTL_OFFSET,CCR_reg,index);
39541 push_delta_fw1 (`Y+`CTL_OFFSET,Y_reg,index);
39542 push_delta_fw1 (`CWP+`CTL_OFFSET,CWP_reg,index);
39543 push_delta_fw1 (`CANSAVE+`CTL_OFFSET,CANSAVE_reg,index);
39544 push_delta_fw1 (`CANRESTORE+`CTL_OFFSET,CANRESTORE_reg,index);
39545 push_delta_fw1 (`CLEANWIN+`CTL_OFFSET,CLEANWIN_reg,index);
39546 push_delta_fw1 (`OTHERWIN+`CTL_OFFSET,OTHERWIN_reg,index);
39547 push_delta_fw1 (`WSTATE+`CTL_OFFSET,WSTATE_reg,index);
39548 end
39549
39550 // Update Trap Stack now
39551 if (complete_fw[`TLU_INDEX]) begin // {
39552 push_delta_fw1 (`TL + `CTL_OFFSET,TL_reg,index);
39553 push_delta_fw1 (`TPC1 + `CTL_OFFSET, TPC1_wire, index);
39554 push_delta_fw1 (`TPC2 + `CTL_OFFSET, TPC2_wire, index);
39555 push_delta_fw1 (`TPC3 + `CTL_OFFSET, TPC3_wire, index);
39556 push_delta_fw1 (`TPC4 + `CTL_OFFSET, TPC4_wire, index);
39557 push_delta_fw1 (`TPC5 + `CTL_OFFSET, TPC5_wire, index);
39558 push_delta_fw1 (`TPC6 + `CTL_OFFSET, TPC6_wire, index);
39559 push_delta_fw1 (`TNPC1 + `CTL_OFFSET, TNPC1_wire, index);
39560 push_delta_fw1 (`TNPC2 + `CTL_OFFSET, TNPC2_wire, index);
39561 push_delta_fw1 (`TNPC3 + `CTL_OFFSET, TNPC3_wire, index);
39562 push_delta_fw1 (`TNPC4 + `CTL_OFFSET, TNPC4_wire, index);
39563 push_delta_fw1 (`TNPC5 + `CTL_OFFSET, TNPC5_wire, index);
39564 push_delta_fw1 (`TNPC6 + `CTL_OFFSET, TNPC6_wire, index);
39565 push_delta_fw1 (`TSTATE1 + `CTL_OFFSET, TSTATE1_wire, index);
39566 push_delta_fw1 (`TSTATE2 + `CTL_OFFSET, TSTATE2_wire, index);
39567 push_delta_fw1 (`TSTATE3 + `CTL_OFFSET, TSTATE3_wire, index);
39568 push_delta_fw1 (`TSTATE4 + `CTL_OFFSET, TSTATE4_wire, index);
39569 push_delta_fw1 (`TSTATE5 + `CTL_OFFSET, TSTATE5_wire, index);
39570 push_delta_fw1 (`TSTATE6 + `CTL_OFFSET, TSTATE6_wire, index);
39571 push_delta_fw1 (`HTSTATE1 + `CTL_OFFSET, HTSTATE1_wire, index);
39572 push_delta_fw1 (`HTSTATE2 + `CTL_OFFSET, HTSTATE2_wire, index);
39573 push_delta_fw1 (`HTSTATE3 + `CTL_OFFSET, HTSTATE3_wire, index);
39574 push_delta_fw1 (`HTSTATE4 + `CTL_OFFSET, HTSTATE4_wire, index);
39575 push_delta_fw1 (`HTSTATE5 + `CTL_OFFSET, HTSTATE5_wire, index);
39576 push_delta_fw1 (`HTSTATE6 + `CTL_OFFSET, HTSTATE6_wire, index);
39577 push_delta_fw1 (`TT1 + `CTL_OFFSET, TT1_wire, index);
39578 push_delta_fw1 (`TT2 + `CTL_OFFSET, TT2_wire, index);
39579 push_delta_fw1 (`TT3 + `CTL_OFFSET, TT3_wire, index);
39580 push_delta_fw1 (`TT4 + `CTL_OFFSET, TT4_wire, index);
39581 push_delta_fw1 (`TT5 + `CTL_OFFSET, TT5_wire, index);
39582 push_delta_fw1 (`TT6 + `CTL_OFFSET, TT6_wire, index);
39583 end //}
39584
39585 end // }
39586endtask
39587
39588//----------------------------------------------------------
39589// Stage FW2 of delta pipeline
39590task update_fw2;
39591
39592 integer i;
39593 reg [7:0] index;
39594 reg [38:0] frf_tmp;
39595
39596 begin // {
39597
39598 `ifndef EMUL_TL
39599 index = delta_fw1[`NEXT_INDEX];
39600
39601 //--------------------
39602 // Pipeline previous stage
39603 for (i=0; i<=delta_fw1[`NEXT_INDEX]; i=i+1) begin // {
39604 delta_fw2[i] <= delta_fw1[i];
39605 end
39606
39607 delta_fw2[`TIME_INDEX] <= $time;
39608 `else
39609 index = 0;
39610 `endif
39611
39612 // Update Registers that may change asynchronously
39613 // If sstep was already sent by another module,
39614 // don't capture until the next sstep
39615 if (complete_fw1 && !`NASTOP.sstep_early[mytnum]) begin // {
39616 if ((complete_fw1[`ASI_INDEX]|complete_fw1[`LSU_INDEX]) & asi_rdwr_hintp)
39617 push_delta_fw2 (`HINTP + `CTL_OFFSET,asi_updated_hintp,index);
39618 else
39619 push_delta_fw2 (`HINTP + `CTL_OFFSET,HINTP_reg,index);
39620 if ((complete_fw1[`ASI_INDEX]|complete_fw1[`LSU_INDEX]) & asi_rdwr_softint)
39621 push_delta_fw2 (`SOFTINT + `CTL_OFFSET,asi_updated_softint,index);
39622 else
39623 push_delta_fw2 (`SOFTINT + `CTL_OFFSET,rd_SOFTINT_reg,index);
39624 end // }
39625
39626 //-------------------
39627 // Update IRF7
39628`ifndef NAS_NO_IRFFRF
39629 if (complete_fw1[`IMUL_INDEX] |
39630 complete_fw1[`IDIV_INDEX]) begin // {
39631 if (mytid <= 3) begin // {
39632 for (i=0; i<=31; i=i+1) begin // {
39633 push_delta_fw2 (i,`IRF7_EXU0[(remap(i,oddwin)+irf_offset)],index);
39634 end // }
39635 end // }
39636 else begin // {
39637 for (i=0; i<=31; i=i+1) begin // {
39638 push_delta_fw2 (i,`IRF7_EXU1[(remap(i,oddwin)+irf_offset)],index);
39639 end // }
39640 end // }
39641 end // }
39642`endif
39643
39644 //--------------------
39645 // Update FRF7 - fdivs and Imuls use W2 port
39646`ifndef NAS_NO_IRFFRF
39647 if (complete_fw1[`IMUL_INDEX] |
39648 complete_fw1[`FDIV_INDEX] ) begin // {
39649 // IF W1 port is also being written, ignore that address
39650 for (i=0; i<=31; i=i+1) begin // {
39651 if (!((i == frf_w1_skip_addr) && frf_w1_valid_even)) begin // {
39652 frf_tmp = `FRF7_EVEN[(mytid*32)+i];
39653 push_delta_fw2 (`FP_OFFSET + (i*2), frf_tmp[31:0], index);
39654 end // }
39655 if (!((i == frf_w1_skip_addr) && frf_w1_valid_odd)) begin // {
39656 frf_tmp = `FRF7_ODD[(mytid*32)+i];
39657 push_delta_fw2 (`FP_OFFSET + (i*2)+1,frf_tmp[31:0], index);
39658 end // }
39659 end //}
39660 end // }
39661`endif
39662
39663 if (complete_fw1[`FP_INDEX] |
39664 complete_fw1[`TLU_INDEX] |
39665 complete_fw1[`FDIV_INDEX]) begin
39666 push_delta_fw2 (`FSR+`CTL_OFFSET,FSR_wire,index);
39667 end
39668
39669 if (complete_fw1) begin
39670 push_delta_fw2 (`I_TAG_ACC+`CTL_OFFSET,itagacc_fw2,index);
39671 push_delta_fw2 (`D_TAG_ACC+`CTL_OFFSET,dtagacc_fw2,index);
39672 push_delta_fw2 (`DSFAR+`CTL_OFFSET,dsfar_fw2,index);
39673 end
39674
39675 end // }
39676endtask
39677
39678//----------------------------------------------------------
39679// Stage FW2 of delta pipeline - for signals that change FW+2 !!
39680task update_fw2_async;
39681
39682 integer i;
39683 reg [7:0] index;
39684 reg [2:0] dummy_fprs;
39685
39686 begin // {
39687
39688 `ifndef EMUL_TL
39689 index = delta_fw2[`NEXT_INDEX];
39690 `else
39691 index = 0;
39692 `endif
39693
39694 // Since FPRS for FPops may have been corrupted by o-o-o loads:
39695 // If fprs_fw2 is != fprs_reg & there are loads in the pipeline
39696 // then assume loads have already updated fprs.
39697 // In that case, create our own fprs_reg by using the valids and
39698 // skip_addr and copy of fprs for this op..
39699 if (complete_fw2[`FP_INDEX] && frf_w1_valid_fw2) begin // {
39700 // o-o-o load has changed fprs already - use dummy
39701 if ((fprs_fw2 != FPRS_reg) && (complete_fw1[`LSU_INDEX] |
39702 complete_fw[`LSU_INDEX] | complete_fb[`LSU_INDEX] |
39703 complete_fx5[`LSU_INDEX] )) begin // {
39704 dummy_fprs = read_prev(`FPRS + `CTL_OFFSET);
39705 dummy_fprs = dummy_fprs |
39706 {1'b0, frf_w1_skip_addr4_fw2, ~frf_w1_skip_addr4_fw2};
39707 push_delta_fw2_async (`FPRS + `CTL_OFFSET,dummy_fprs,index);
39708 end //}
39709 // o-o-o load has NOT changed fprs already - use it
39710 else begin // {
39711 push_delta_fw2_async (`FPRS + `CTL_OFFSET,FPRS_reg,index);
39712 end //}
39713 end //}
39714 // Load FPRS for loads/reads as prev|fprs_fb ..
39715 // since loads may only 'set' bits, not clear ...
39716 else if (complete_fw2[`LSU_INDEX]) begin // {
39717 dummy_fprs = read_prev(`FPRS + `CTL_OFFSET);
39718 dummy_fprs = dummy_fprs | fprs_fw1;
39719 push_delta_fw2_async (`FPRS +`CTL_OFFSET,dummy_fprs,index);
39720 end // }
39721 // Load FPRS for store ASI or FDIV
39722 // FDIV can update FPRS on w1 or w2,
39723 // but the pipe is stalled behind it so no o-o-o loads.
39724 else if ((complete_fw2[`ASI_INDEX]) ||
39725 (complete_fw2[`FDIV_INDEX])) begin // {
39726 push_delta_fw2_async (`FPRS + `CTL_OFFSET,FPRS_reg,index);
39727 end //}
39728
39729 end // }
39730endtask
39731
39732//----------------------------------------------------------
39733// Store latest values into delta
39734// Capture of next PC
39735task update_pc;
39736 reg [7:0] index;
39737 begin
39738 `ifndef EMUL_TL
39739 index = delta_prev[`NEXT_INDEX];
39740 `else
39741 index = 0;
39742 `endif
39743
39744 if (in_wmr & ~`SPC7.rst_wmr_protect) begin // {
39745 push_delta_prev_async ( `PC+`CTL_OFFSET,{16'b0,pc_fw2|1},index);
39746 in_wmr <= 0;
39747 end // }
39748 else
39749 push_delta_prev_async ( `PC+`CTL_OFFSET,{16'b0,pc_fw2},index);
39750 pc_last <= pc_fw2;
39751 cwp_last <= cwp_fw2;
39752 end
39753endtask
39754
39755//----------------------------------------------------------
39756//----------------------------------------------------------
39757// Compare with current state and capture if different
39758task push_delta_fx4;
39759
39760 input [7:0] id;
39761 input [63:0] act_value;
39762 inout [7:0] next;
39763 reg [2:0] win;
39764 reg [1:0] type;
39765
39766 begin // {
39767 if (act_value != read_prev(id)) begin // { // Diff vs prev
39768 calc_cwp(CWP_reg,id,win,type); // special case for 1st stage
39769 write_prev(id,act_value);
39770
39771 `ifndef EMUL_TL
39772 delta_fx4[next] <= {type,win,id,act_value};
39773 next = next+1;
39774 delta_fx4[next] <= 77'hx;
39775 delta_fx4[`NEXT_INDEX] <= next;
39776 if (`PARGS.axis_debug_on) begin
39777 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
39778 mytnum,PC_reg,id,type,win,act_value,$time);
39779 end
39780 `else
39781 if (`PARGS.axis_debug_on) begin
39782 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
39783 mytnum,PC_reg,id,type,win,act_value,$time);
39784 end
39785 `endif
39786 end //}
39787 end //}
39788
39789endtask
39790
39791//----------------------------------------------------------
39792// Compare with current state and capture if different
39793task push_delta_fx5;
39794
39795 input [7:0] id;
39796 input [63:0] act_value;
39797 inout [7:0] next;
39798 reg [2:0] win;
39799 reg [1:0] type;
39800
39801 begin // {
39802 if (act_value != read_prev(id)) begin // { // Diff vs prev
39803 `ifndef EMUL_TL
39804 calc_cwp(delta_fx4[`CWP_INDEX],id,win,type);
39805 write_prev(id,act_value);
39806 delta_fx5[next] <= {type,win,id,act_value};
39807 next = next+1;
39808 delta_fx5[next] <= 77'hx;
39809 delta_fx5[`NEXT_INDEX] <= next;
39810 if (`PARGS.axis_debug_on) begin
39811 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
39812 mytnum,pc_fx4,id,type,win,act_value,$time);
39813 end
39814 `else
39815 calc_cwp(cwp_fx4,id,win,type);
39816 if (`PARGS.axis_debug_on) begin
39817 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
39818 mytnum,pc_fx4,id,type,win,act_value,$time);
39819 end
39820 `endif
39821 end //}
39822 end //}
39823
39824endtask
39825
39826//----------------------------------------------------------
39827// Compare with current state and capture if different
39828task push_delta_fb;
39829
39830 input [7:0] id;
39831 input [63:0] act_value;
39832 inout [7:0] next;
39833 reg [2:0] win;
39834 reg [1:0] type;
39835
39836 begin // {
39837 if (act_value != read_prev(id)) begin // { // Diff vs prev
39838 `ifndef EMUL_TL
39839 calc_cwp(delta_fx5[`CWP_INDEX],id,win,type);
39840 write_prev(id,act_value);
39841 delta_fb[next] <= {type,win,id,act_value};
39842 next = next+1;
39843 delta_fb[next] <= 77'hx;
39844 delta_fb[`NEXT_INDEX] <= next;
39845 if (`PARGS.axis_debug_on) begin
39846 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
39847 mytnum,pc_fx5,id,type,win,act_value,$time);
39848 end
39849 `else
39850 calc_cwp(cwp_fx5,id,win,type);
39851 if (`PARGS.axis_debug_on) begin
39852 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
39853 mytnum,pc_fx5,id,type,win,act_value,$time);
39854 end
39855 `endif
39856 end //}
39857 end //}
39858
39859endtask
39860
39861//----------------------------------------------------------
39862// Compare with current state and capture if different
39863task push_delta_fw;
39864
39865 input [7:0] id;
39866 input [63:0] act_value;
39867 inout [7:0] next;
39868 reg [2:0] win;
39869 reg [1:0] type;
39870
39871 begin // {
39872 if (act_value != read_prev(id)) begin // { // Diff vs prev
39873
39874 `ifndef EMUL_TL
39875 calc_cwp(delta_fb[`CWP_INDEX],id,win,type);
39876 write_prev(id,act_value);
39877 delta_fw[next] <= {type,win,id,act_value};
39878 next = next+1;
39879 delta_fw[next] <= 77'hx;
39880 delta_fw[`NEXT_INDEX] <= next;
39881 if (`PARGS.axis_debug_on) begin
39882 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
39883 mytnum,pc_fb,id,type,win,act_value,$time);
39884 end
39885 `else
39886 calc_cwp(cwp_fb[`CWP_INDEX],id,win,type);
39887 if (`PARGS.axis_debug_on) begin
39888 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
39889 mytnum,pc_fb,id,type,win,act_value,$time);
39890 end
39891 `endif
39892 end //}
39893 end //}
39894
39895endtask
39896
39897//----------------------------------------------------------
39898// Compare with current state and capture if different
39899task push_delta_fw1;
39900
39901 input [7:0] id;
39902 input [63:0] act_value;
39903 inout [7:0] next;
39904 reg [2:0] win;
39905 reg [1:0] type;
39906
39907 begin // {
39908 if (act_value != read_prev(id)) begin // { // Diff vs prev
39909
39910 `ifndef EMUL_TL
39911 calc_cwp(delta_fw[`CWP_INDEX],id,win,type);
39912 write_prev(id,act_value);
39913 delta_fw1[next] <= {type,win,id,act_value};
39914 next = next+1;
39915 delta_fw1[next] <= 77'hx;
39916 delta_fw1[`NEXT_INDEX] <= next;
39917 if (`PARGS.axis_debug_on) begin
39918 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
39919 mytnum,pc_fw,id,type,win,act_value,$time);
39920 end
39921 `else
39922 calc_cwp(cwp_fw,id,win,type);
39923 if (`PARGS.axis_debug_on) begin
39924 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
39925 mytnum,pc_fw,id,type,win,act_value,$time);
39926 end
39927 `endif
39928 end //}
39929 end //}
39930
39931endtask
39932
39933//----------------------------------------------------------
39934// Compare with current state and capture if different
39935task push_delta_fw2;
39936
39937 input [7:0] id;
39938 input [63:0] act_value;
39939 inout [7:0] next;
39940 reg [2:0] win;
39941 reg [1:0] type;
39942
39943 begin // {
39944 if (act_value != read_prev(id)) begin // { // Diff vs prev
39945
39946 `ifndef EMUL_TL
39947 calc_cwp(delta_fw1[`CWP_INDEX],id,win,type);
39948 write_prev(id,act_value);
39949 delta_fw2[next] <= {type,win,id,act_value};
39950 next = next+1;
39951 delta_fw2[next] <= 77'hx;
39952 delta_fw2[`NEXT_INDEX] <= next;
39953 if (`PARGS.axis_debug_on) begin
39954 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
39955 mytnum,pc_fw1,id,type,win,act_value,$time);
39956 end
39957 `else
39958 calc_cwp(cwp_fw1,id,win,type);
39959 if (`PARGS.axis_debug_on) begin
39960 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
39961 mytnum,pc_fw1,id,type,win,act_value,$time);
39962 end
39963 `endif
39964 end //}
39965 end //}
39966
39967endtask
39968
39969//----------------------------------------------------------
39970// Compare with current state and capture if different
39971// This is for late changing registers
39972// Use blocking assignments.
39973task push_delta_fw2_async;
39974
39975 input [7:0] id;
39976 input [63:0] act_value;
39977 inout [7:0] next;
39978 reg [2:0] win;
39979 reg [1:0] type;
39980
39981 begin // {
39982 if (act_value != read_prev(id)) begin // { // Diff vs prev
39983
39984 `ifndef EMUL_TL
39985 calc_cwp(delta_fw2[`CWP_INDEX],id,win,type);
39986 write_prev_async(id,act_value);
39987 delta_fw2[next] = {type,win,id,act_value};
39988 next = next+1;
39989 delta_fw2[next] = 77'hx;
39990 delta_fw2[`NEXT_INDEX] = next;
39991 if (`PARGS.axis_debug_on) begin
39992 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
39993 mytnum,pc_fw1,id,type,win,act_value,$time);
39994 end
39995 `else
39996 calc_cwp(cwp_fw2,id,win,type);
39997 if (`PARGS.axis_debug_on) begin
39998 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
39999 mytnum,pc_fw1,id,type,win,act_value,$time);
40000 end
40001 `endif
40002 end //}
40003 end //}
40004
40005endtask
40006
40007
40008//----------------------------------------------------------
40009// Compare with current state and capture if different
40010// Use blocking assignments so that push_simics will work
40011task push_delta_prev_async;
40012
40013 input [7:0] id;
40014 input [63:0] act_value;
40015 inout [7:0] next;
40016 reg [2:0] win;
40017 reg [1:0] type;
40018
40019 begin // {
40020
40021 if (act_value != read_prev(id)) begin // { // Diff vs prev
40022
40023 `ifndef EMUL_TL
40024 calc_cwp(delta_prev[`CWP_INDEX],id,win,type);
40025 write_prev_async(id,act_value);
40026 delta_prev[next] = {type,win,id,act_value};
40027 next = next+1;
40028 delta_prev[next] = 77'hx;
40029 delta_prev[`NEXT_INDEX] = next;
40030 if (`PARGS.axis_debug_on) begin
40031 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
40032 mytnum,pc_last,id,type,win,act_value,$time);
40033 end
40034 `else
40035 if (`PARGS.axis_debug_on) begin
40036 calc_cwp(cwp_last,id,win,type);
40037 $display("AXIS: T%0d pc=%h id=%0d type=%0h win=%0h value=%h ts=%0d",
40038 mytnum,pc_last,id,type,win,act_value,$time);
40039 end
40040 `endif
40041 end //}
40042 end //}
40043
40044endtask
40045
40046//----------------------------------------------------------
40047// prev of delta pipeline
40048task update_prev;
40049 integer i;
40050
40051 begin // {
40052 `ifndef EMUL_TL
40053 //--------------------
40054 // Pipeline previous stage
40055 for (i=0; i<=delta_fw2[`NEXT_INDEX]; i=i+1) begin // {
40056 delta_prev[i] <= delta_fw2[i];
40057 end
40058 `endif
40059 end //}
40060
40061endtask
40062
40063//----------------------------------------------------------
40064//----------------------------------------------------------
40065// Sort delta list in register ID order, then push to simics
40066// Or print deltas if sas check disabled ..
40067task push_simics;
40068
40069integer i;
40070reg [7:0] act_type;
40071integer act_level;
40072reg [7:0] regnum;
40073reg [2:0] win;
40074reg [1:0] type;
40075reg [63:0] value;
40076reg [63:0] pc;
40077reg [63:0] time_fw2;
40078
40079 begin // {
40080
40081 `ifndef EMUL_TL
40082 `NASTOP.delta_cnt = 0;
40083 sort_delta;
40084
40085 //--------------------
40086 // Order of registers reported to simics must be:
40087 // Global 0-7 aka prev_reg[0:7]
40088 // Window 8-23 aka prev_reg[8:23]
40089 // Floating 0-63 aka prev_reg[200:263]
40090 // Control 32-143 aka prev_reg[32:143]
40091
40092 act_level = delta_prev[`GL_INDEX]; // GL
40093 time_fw2 = delta_prev[`TIME_INDEX]; // Finish time
40094
40095
40096 //--------------------
40097 for (i=`FIRST_INDEX; i<delta_prev[`NEXT_INDEX]; i=i+1) begin // {
40098 {type,win,regnum,value} = delta_prev[i];
40099
40100 if (regnum<=7) begin // {
40101 act_type = "G";
40102 if (`PARGS.nas_check_on) begin // {
40103 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
40104 act_level, regnum, value);
40105 end // }
40106 else if (`PARGS.show_delta_on) begin // {
40107 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
40108 end //}
40109 end // }
40110 else if (regnum<=23) begin // { %o0-%l7, %l0-%l7
40111 act_type = "W";
40112 if (`PARGS.nas_check_on) begin // {
40113 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
40114 win, regnum, value);
40115 end // }
40116 else if (`PARGS.show_delta_on) begin // {
40117 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
40118 end //}
40119 end // }
40120 else if (regnum<=31) begin // { %i0-%i7
40121 act_type = "W";
40122 if (`PARGS.nas_check_on) begin // {
40123 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
40124 win, (regnum-16), value);
40125 end // }
40126 else if (`PARGS.show_delta_on) begin // {
40127 `NASTOP.print_delta (mytnum,act_type,win,(regnum-16),value);
40128 end //}
40129 end // }
40130 else if (regnum<=(64+`FP_OFFSET)) begin // {
40131 act_type = "F";
40132 if (`PARGS.nas_check_on) begin // {
40133 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
40134 (regnum-`FP_OFFSET), value);
40135 end // }
40136 else if (`PARGS.show_delta_on) begin // {
40137 `NASTOP.print_delta (mytnum,act_type,win,(regnum-`FP_OFFSET),value);
40138 end //}
40139 end // }
40140 else if ((regnum>=(32+`CTL_OFFSET))&(regnum<=(143+`CTL_OFFSET))) begin // {
40141 act_type = "C";
40142 if (`PARGS.nas_check_on) begin // {
40143 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
40144 (regnum-`CTL_OFFSET), value);
40145 end //}
40146 else if (`PARGS.show_delta_on) begin // {
40147 `NASTOP.print_delta (mytnum,act_type,win,(regnum-`CTL_OFFSET),value);
40148 end //}
40149 end // }
40150 else begin // {
40151 `PR_ERROR ("nas", `ERROR, " - T%0d Bench problem. push_simics has bad regnum", mytnum);
40152 end // }
40153 end // }
40154
40155 //--------------------
40156 // Push Opcode
40157 act_type = "C";
40158 regnum = `OPCODE;
40159 value = delta_prev[`OPCODE_INDEX];
40160 if (`PARGS.nas_check_on) begin // {
40161 `ifdef OPCODE_COMPARE
40162 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
40163 regnum, value);
40164 `endif
40165 end //}
40166 else if (`PARGS.show_delta_on) begin // {
40167 `NASTOP.print_delta (mytnum,act_type,win,regnum,value);
40168 end //}
40169
40170
40171 //--------------------
40172 // Push End of Instruction Delimiter
40173 // The value field for this PUSH equals the PC for this instruction.
40174 // so that printing to the logfile works correctly.
40175 // prev_reg[`PC] = current instruction PC
40176 // delta_reg[`PC] = PC at end of current instruction
40177 act_type = "X";
40178 pc = delta_prev[`PC_INDEX];
40179 if (`PARGS.nas_check_on) begin // {
40180 `ACT_STATUS = $queue(`ACT_QUEUE, `PUSH_Q, mytnum, time_fw2, act_type,
40181 delta_fw2[`CWP_INDEX], `END_INSTR, pc);
40182 end // }
40183 else if (`PARGS.show_delta_on) begin // {
40184 `NASTOP.print_delta (mytnum,act_type,delta_fw2[`CWP_INDEX],`END_INSTR,0);
40185 end //}
40186 if (! `PARGS.nas_check_on) begin // {
40187 `PR_NORMAL ("nas", `NORMAL, "@%0d T%0d %h (Unchecked..)",
40188 $time, mytnum, {16'b0,pc});
40189 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
40190 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
40191 end //}
40192
40193 `else
40194 if (! `PARGS.nas_check_on) begin // {
40195 `TOP.last_act_cycle = `TOP.core_cycle_cnt; //$time;
40196 `TOP.th_last_act_cycle[mytnum] = `TOP.last_act_cycle;
40197 end //}
40198 `endif
40199 end // }
40200endtask
40201
40202
40203//----------------------------------------------------------
40204// Save current window to previous window, then copy new window to current window
40205task copy_win;
40206 input [2:0] new_cwp;
40207 input [2:0] old_cwp;
40208 integer i;
40209
40210 begin // {
40211
40212 // Save current window to Old window
40213 case (old_cwp)
40214 0: begin // {
40215 win0_reg8 = prev_reg8;
40216 win1_reg24 = prev_reg8;
40217 win0_reg9 = prev_reg9;
40218 win1_reg25 = prev_reg9;
40219 win0_reg10 = prev_reg10;
40220 win1_reg26 = prev_reg10;
40221 win0_reg11 = prev_reg11;
40222 win1_reg27 = prev_reg11;
40223 win0_reg12 = prev_reg12;
40224 win1_reg28 = prev_reg12;
40225 win0_reg13 = prev_reg13;
40226 win1_reg29 = prev_reg13;
40227 win0_reg14 = prev_reg14;
40228 win1_reg30 = prev_reg14;
40229 win0_reg15 = prev_reg15;
40230 win1_reg31 = prev_reg15;
40231 win0_reg16 = prev_reg16;
40232 win0_reg17 = prev_reg17;
40233 win0_reg18 = prev_reg18;
40234 win0_reg19 = prev_reg19;
40235 win0_reg20 = prev_reg20;
40236 win0_reg21 = prev_reg21;
40237 win0_reg22 = prev_reg22;
40238 win0_reg23 = prev_reg23;
40239 win0_reg24 = prev_reg24;
40240 win7_reg8 = prev_reg24;
40241 win0_reg25 = prev_reg25;
40242 win7_reg9 = prev_reg25;
40243 win0_reg26 = prev_reg26;
40244 win7_reg10 = prev_reg26;
40245 win0_reg27 = prev_reg27;
40246 win7_reg11 = prev_reg27;
40247 win0_reg28 = prev_reg28;
40248 win7_reg12 = prev_reg28;
40249 win0_reg29 = prev_reg29;
40250 win7_reg13 = prev_reg29;
40251 win0_reg30 = prev_reg30;
40252 win7_reg14 = prev_reg30;
40253 win0_reg31 = prev_reg31;
40254 win7_reg15 = prev_reg31;
40255 end // }
40256 1: begin // {
40257 win1_reg8 = prev_reg8;
40258 win2_reg24 = prev_reg8;
40259 win1_reg9 = prev_reg9;
40260 win2_reg25 = prev_reg9;
40261 win1_reg10 = prev_reg10;
40262 win2_reg26 = prev_reg10;
40263 win1_reg11 = prev_reg11;
40264 win2_reg27 = prev_reg11;
40265 win1_reg12 = prev_reg12;
40266 win2_reg28 = prev_reg12;
40267 win1_reg13 = prev_reg13;
40268 win2_reg29 = prev_reg13;
40269 win1_reg14 = prev_reg14;
40270 win2_reg30 = prev_reg14;
40271 win1_reg15 = prev_reg15;
40272 win2_reg31 = prev_reg15;
40273 win1_reg16 = prev_reg16;
40274 win1_reg17 = prev_reg17;
40275 win1_reg18 = prev_reg18;
40276 win1_reg19 = prev_reg19;
40277 win1_reg20 = prev_reg20;
40278 win1_reg21 = prev_reg21;
40279 win1_reg22 = prev_reg22;
40280 win1_reg23 = prev_reg23;
40281 win1_reg24 = prev_reg24;
40282 win0_reg8 = prev_reg24;
40283 win1_reg25 = prev_reg25;
40284 win0_reg9 = prev_reg25;
40285 win1_reg26 = prev_reg26;
40286 win0_reg10 = prev_reg26;
40287 win1_reg27 = prev_reg27;
40288 win0_reg11 = prev_reg27;
40289 win1_reg28 = prev_reg28;
40290 win0_reg12 = prev_reg28;
40291 win1_reg29 = prev_reg29;
40292 win0_reg13 = prev_reg29;
40293 win1_reg30 = prev_reg30;
40294 win0_reg14 = prev_reg30;
40295 win1_reg31 = prev_reg31;
40296 win0_reg15 = prev_reg31;
40297 end // }
40298 2: begin // {
40299 win2_reg8 = prev_reg8;
40300 win3_reg24 = prev_reg8;
40301 win2_reg9 = prev_reg9;
40302 win3_reg25 = prev_reg9;
40303 win2_reg10 = prev_reg10;
40304 win3_reg26 = prev_reg10;
40305 win2_reg11 = prev_reg11;
40306 win3_reg27 = prev_reg11;
40307 win2_reg12 = prev_reg12;
40308 win3_reg28 = prev_reg12;
40309 win2_reg13 = prev_reg13;
40310 win3_reg29 = prev_reg13;
40311 win2_reg14 = prev_reg14;
40312 win3_reg30 = prev_reg14;
40313 win2_reg15 = prev_reg15;
40314 win3_reg31 = prev_reg15;
40315 win2_reg16 = prev_reg16;
40316 win2_reg17 = prev_reg17;
40317 win2_reg18 = prev_reg18;
40318 win2_reg19 = prev_reg19;
40319 win2_reg20 = prev_reg20;
40320 win2_reg21 = prev_reg21;
40321 win2_reg22 = prev_reg22;
40322 win2_reg23 = prev_reg23;
40323 win2_reg24 = prev_reg24;
40324 win1_reg8 = prev_reg24;
40325 win2_reg25 = prev_reg25;
40326 win1_reg9 = prev_reg25;
40327 win2_reg26 = prev_reg26;
40328 win1_reg10 = prev_reg26;
40329 win2_reg27 = prev_reg27;
40330 win1_reg11 = prev_reg27;
40331 win2_reg28 = prev_reg28;
40332 win1_reg12 = prev_reg28;
40333 win2_reg29 = prev_reg29;
40334 win1_reg13 = prev_reg29;
40335 win2_reg30 = prev_reg30;
40336 win1_reg14 = prev_reg30;
40337 win2_reg31 = prev_reg31;
40338 win1_reg15 = prev_reg31;
40339 end // }
40340 3: begin // {
40341 win3_reg8 = prev_reg8;
40342 win4_reg24 = prev_reg8;
40343 win3_reg9 = prev_reg9;
40344 win4_reg25 = prev_reg9;
40345 win3_reg10 = prev_reg10;
40346 win4_reg26 = prev_reg10;
40347 win3_reg11 = prev_reg11;
40348 win4_reg27 = prev_reg11;
40349 win3_reg12 = prev_reg12;
40350 win4_reg28 = prev_reg12;
40351 win3_reg13 = prev_reg13;
40352 win4_reg29 = prev_reg13;
40353 win3_reg14 = prev_reg14;
40354 win4_reg30 = prev_reg14;
40355 win3_reg15 = prev_reg15;
40356 win4_reg31 = prev_reg15;
40357 win3_reg16 = prev_reg16;
40358 win3_reg17 = prev_reg17;
40359 win3_reg18 = prev_reg18;
40360 win3_reg19 = prev_reg19;
40361 win3_reg20 = prev_reg20;
40362 win3_reg21 = prev_reg21;
40363 win3_reg22 = prev_reg22;
40364 win3_reg23 = prev_reg23;
40365 win3_reg24 = prev_reg24;
40366 win2_reg8 = prev_reg24;
40367 win3_reg25 = prev_reg25;
40368 win2_reg9 = prev_reg25;
40369 win3_reg26 = prev_reg26;
40370 win2_reg10 = prev_reg26;
40371 win3_reg27 = prev_reg27;
40372 win2_reg11 = prev_reg27;
40373 win3_reg28 = prev_reg28;
40374 win2_reg12 = prev_reg28;
40375 win3_reg29 = prev_reg29;
40376 win2_reg13 = prev_reg29;
40377 win3_reg30 = prev_reg30;
40378 win2_reg14 = prev_reg30;
40379 win3_reg31 = prev_reg31;
40380 win2_reg15 = prev_reg31;
40381 end // }
40382 4: begin // {
40383 win4_reg8 = prev_reg8;
40384 win5_reg24 = prev_reg8;
40385 win4_reg9 = prev_reg9;
40386 win5_reg25 = prev_reg9;
40387 win4_reg10 = prev_reg10;
40388 win5_reg26 = prev_reg10;
40389 win4_reg11 = prev_reg11;
40390 win5_reg27 = prev_reg11;
40391 win4_reg12 = prev_reg12;
40392 win5_reg28 = prev_reg12;
40393 win4_reg13 = prev_reg13;
40394 win5_reg29 = prev_reg13;
40395 win4_reg14 = prev_reg14;
40396 win5_reg30 = prev_reg14;
40397 win4_reg15 = prev_reg15;
40398 win5_reg31 = prev_reg15;
40399 win4_reg16 = prev_reg16;
40400 win4_reg17 = prev_reg17;
40401 win4_reg18 = prev_reg18;
40402 win4_reg19 = prev_reg19;
40403 win4_reg20 = prev_reg20;
40404 win4_reg21 = prev_reg21;
40405 win4_reg22 = prev_reg22;
40406 win4_reg23 = prev_reg23;
40407 win4_reg24 = prev_reg24;
40408 win3_reg8 = prev_reg24;
40409 win4_reg25 = prev_reg25;
40410 win3_reg9 = prev_reg25;
40411 win4_reg26 = prev_reg26;
40412 win3_reg10 = prev_reg26;
40413 win4_reg27 = prev_reg27;
40414 win3_reg11 = prev_reg27;
40415 win4_reg28 = prev_reg28;
40416 win3_reg12 = prev_reg28;
40417 win4_reg29 = prev_reg29;
40418 win3_reg13 = prev_reg29;
40419 win4_reg30 = prev_reg30;
40420 win3_reg14 = prev_reg30;
40421 win4_reg31 = prev_reg31;
40422 win3_reg15 = prev_reg31;
40423 end // }
40424 5: begin // {
40425 win5_reg8 = prev_reg8;
40426 win6_reg24 = prev_reg8;
40427 win5_reg9 = prev_reg9;
40428 win6_reg25 = prev_reg9;
40429 win5_reg10 = prev_reg10;
40430 win6_reg26 = prev_reg10;
40431 win5_reg11 = prev_reg11;
40432 win6_reg27 = prev_reg11;
40433 win5_reg12 = prev_reg12;
40434 win6_reg28 = prev_reg12;
40435 win5_reg13 = prev_reg13;
40436 win6_reg29 = prev_reg13;
40437 win5_reg14 = prev_reg14;
40438 win6_reg30 = prev_reg14;
40439 win5_reg15 = prev_reg15;
40440 win6_reg31 = prev_reg15;
40441 win5_reg16 = prev_reg16;
40442 win5_reg17 = prev_reg17;
40443 win5_reg18 = prev_reg18;
40444 win5_reg19 = prev_reg19;
40445 win5_reg20 = prev_reg20;
40446 win5_reg21 = prev_reg21;
40447 win5_reg22 = prev_reg22;
40448 win5_reg23 = prev_reg23;
40449 win5_reg24 = prev_reg24;
40450 win4_reg8 = prev_reg24;
40451 win5_reg25 = prev_reg25;
40452 win4_reg9 = prev_reg25;
40453 win5_reg26 = prev_reg26;
40454 win4_reg10 = prev_reg26;
40455 win5_reg27 = prev_reg27;
40456 win4_reg11 = prev_reg27;
40457 win5_reg28 = prev_reg28;
40458 win4_reg12 = prev_reg28;
40459 win5_reg29 = prev_reg29;
40460 win4_reg13 = prev_reg29;
40461 win5_reg30 = prev_reg30;
40462 win4_reg14 = prev_reg30;
40463 win5_reg31 = prev_reg31;
40464 win4_reg15 = prev_reg31;
40465 end // }
40466 6: begin // {
40467 win6_reg8 = prev_reg8;
40468 win7_reg24 = prev_reg8;
40469 win6_reg9 = prev_reg9;
40470 win7_reg25 = prev_reg9;
40471 win6_reg10 = prev_reg10;
40472 win7_reg26 = prev_reg10;
40473 win6_reg11 = prev_reg11;
40474 win7_reg27 = prev_reg11;
40475 win6_reg12 = prev_reg12;
40476 win7_reg28 = prev_reg12;
40477 win6_reg13 = prev_reg13;
40478 win7_reg29 = prev_reg13;
40479 win6_reg14 = prev_reg14;
40480 win7_reg30 = prev_reg14;
40481 win6_reg15 = prev_reg15;
40482 win7_reg31 = prev_reg15;
40483 win6_reg16 = prev_reg16;
40484 win6_reg17 = prev_reg17;
40485 win6_reg18 = prev_reg18;
40486 win6_reg19 = prev_reg19;
40487 win6_reg20 = prev_reg20;
40488 win6_reg21 = prev_reg21;
40489 win6_reg22 = prev_reg22;
40490 win6_reg23 = prev_reg23;
40491 win6_reg24 = prev_reg24;
40492 win5_reg8 = prev_reg24;
40493 win6_reg25 = prev_reg25;
40494 win5_reg9 = prev_reg25;
40495 win6_reg26 = prev_reg26;
40496 win5_reg10 = prev_reg26;
40497 win6_reg27 = prev_reg27;
40498 win5_reg11 = prev_reg27;
40499 win6_reg28 = prev_reg28;
40500 win5_reg12 = prev_reg28;
40501 win6_reg29 = prev_reg29;
40502 win5_reg13 = prev_reg29;
40503 win6_reg30 = prev_reg30;
40504 win5_reg14 = prev_reg30;
40505 win6_reg31 = prev_reg31;
40506 win5_reg15 = prev_reg31;
40507 end // }
40508 7: begin // {
40509 win7_reg8 = prev_reg8;
40510 win0_reg24 = prev_reg8;
40511 win7_reg9 = prev_reg9;
40512 win0_reg25 = prev_reg9;
40513 win7_reg10 = prev_reg10;
40514 win0_reg26 = prev_reg10;
40515 win7_reg11 = prev_reg11;
40516 win0_reg27 = prev_reg11;
40517 win7_reg12 = prev_reg12;
40518 win0_reg28 = prev_reg12;
40519 win7_reg13 = prev_reg13;
40520 win0_reg29 = prev_reg13;
40521 win7_reg14 = prev_reg14;
40522 win0_reg30 = prev_reg14;
40523 win7_reg15 = prev_reg15;
40524 win0_reg31 = prev_reg15;
40525 win7_reg16 = prev_reg16;
40526 win7_reg17 = prev_reg17;
40527 win7_reg18 = prev_reg18;
40528 win7_reg19 = prev_reg19;
40529 win7_reg20 = prev_reg20;
40530 win7_reg21 = prev_reg21;
40531 win7_reg22 = prev_reg22;
40532 win7_reg23 = prev_reg23;
40533 win7_reg24 = prev_reg24;
40534 win6_reg8 = prev_reg24;
40535 win7_reg25 = prev_reg25;
40536 win6_reg9 = prev_reg25;
40537 win7_reg26 = prev_reg26;
40538 win6_reg10 = prev_reg26;
40539 win7_reg27 = prev_reg27;
40540 win6_reg11 = prev_reg27;
40541 win7_reg28 = prev_reg28;
40542 win6_reg12 = prev_reg28;
40543 win7_reg29 = prev_reg29;
40544 win6_reg13 = prev_reg29;
40545 win7_reg30 = prev_reg30;
40546 win6_reg14 = prev_reg30;
40547 win7_reg31 = prev_reg31;
40548 win6_reg15 = prev_reg31;
40549 end // }
40550
40551 endcase
40552
40553 // Copy New window to current window
40554 case (new_cwp)
40555 0: begin // {
40556 prev_reg8 = win0_reg8;
40557 prev_reg9 = win0_reg9;
40558 prev_reg10 = win0_reg10;
40559 prev_reg11 = win0_reg11;
40560 prev_reg12 = win0_reg12;
40561 prev_reg13 = win0_reg13;
40562 prev_reg14 = win0_reg14;
40563 prev_reg15 = win0_reg15;
40564 prev_reg16 = win0_reg16;
40565 prev_reg17 = win0_reg17;
40566 prev_reg18 = win0_reg18;
40567 prev_reg19 = win0_reg19;
40568 prev_reg20 = win0_reg20;
40569 prev_reg21 = win0_reg21;
40570 prev_reg22 = win0_reg22;
40571 prev_reg23 = win0_reg23;
40572 prev_reg24 = win0_reg24;
40573 prev_reg25 = win0_reg25;
40574 prev_reg26 = win0_reg26;
40575 prev_reg27 = win0_reg27;
40576 prev_reg28 = win0_reg28;
40577 prev_reg29 = win0_reg29;
40578 prev_reg30 = win0_reg30;
40579 prev_reg31 = win0_reg31;
40580 end // }
40581
40582 1: begin // {
40583 prev_reg8 = win1_reg8;
40584 prev_reg9 = win1_reg9;
40585 prev_reg10 = win1_reg10;
40586 prev_reg11 = win1_reg11;
40587 prev_reg12 = win1_reg12;
40588 prev_reg13 = win1_reg13;
40589 prev_reg14 = win1_reg14;
40590 prev_reg15 = win1_reg15;
40591 prev_reg16 = win1_reg16;
40592 prev_reg17 = win1_reg17;
40593 prev_reg18 = win1_reg18;
40594 prev_reg19 = win1_reg19;
40595 prev_reg20 = win1_reg20;
40596 prev_reg21 = win1_reg21;
40597 prev_reg22 = win1_reg22;
40598 prev_reg23 = win1_reg23;
40599 prev_reg24 = win1_reg24;
40600 prev_reg25 = win1_reg25;
40601 prev_reg26 = win1_reg26;
40602 prev_reg27 = win1_reg27;
40603 prev_reg28 = win1_reg28;
40604 prev_reg29 = win1_reg29;
40605 prev_reg30 = win1_reg30;
40606 prev_reg31 = win1_reg31;
40607 end // }
40608
40609 2: begin // {
40610 prev_reg8 = win2_reg8;
40611 prev_reg9 = win2_reg9;
40612 prev_reg10 = win2_reg10;
40613 prev_reg11 = win2_reg11;
40614 prev_reg12 = win2_reg12;
40615 prev_reg13 = win2_reg13;
40616 prev_reg14 = win2_reg14;
40617 prev_reg15 = win2_reg15;
40618 prev_reg16 = win2_reg16;
40619 prev_reg17 = win2_reg17;
40620 prev_reg18 = win2_reg18;
40621 prev_reg19 = win2_reg19;
40622 prev_reg20 = win2_reg20;
40623 prev_reg21 = win2_reg21;
40624 prev_reg22 = win2_reg22;
40625 prev_reg23 = win2_reg23;
40626 prev_reg24 = win2_reg24;
40627 prev_reg25 = win2_reg25;
40628 prev_reg26 = win2_reg26;
40629 prev_reg27 = win2_reg27;
40630 prev_reg28 = win2_reg28;
40631 prev_reg29 = win2_reg29;
40632 prev_reg30 = win2_reg30;
40633 prev_reg31 = win2_reg31;
40634 end // }
40635
40636 3: begin // {
40637 prev_reg8 = win3_reg8;
40638 prev_reg9 = win3_reg9;
40639 prev_reg10 = win3_reg10;
40640 prev_reg11 = win3_reg11;
40641 prev_reg12 = win3_reg12;
40642 prev_reg13 = win3_reg13;
40643 prev_reg14 = win3_reg14;
40644 prev_reg15 = win3_reg15;
40645 prev_reg16 = win3_reg16;
40646 prev_reg17 = win3_reg17;
40647 prev_reg18 = win3_reg18;
40648 prev_reg19 = win3_reg19;
40649 prev_reg20 = win3_reg20;
40650 prev_reg21 = win3_reg21;
40651 prev_reg22 = win3_reg22;
40652 prev_reg23 = win3_reg23;
40653 prev_reg24 = win3_reg24;
40654 prev_reg25 = win3_reg25;
40655 prev_reg26 = win3_reg26;
40656 prev_reg27 = win3_reg27;
40657 prev_reg28 = win3_reg28;
40658 prev_reg29 = win3_reg29;
40659 prev_reg30 = win3_reg30;
40660 prev_reg31 = win3_reg31;
40661 end // }
40662
40663 4: begin // {
40664 prev_reg8 = win4_reg8;
40665 prev_reg9 = win4_reg9;
40666 prev_reg10 = win4_reg10;
40667 prev_reg11 = win4_reg11;
40668 prev_reg12 = win4_reg12;
40669 prev_reg13 = win4_reg13;
40670 prev_reg14 = win4_reg14;
40671 prev_reg15 = win4_reg15;
40672 prev_reg16 = win4_reg16;
40673 prev_reg17 = win4_reg17;
40674 prev_reg18 = win4_reg18;
40675 prev_reg19 = win4_reg19;
40676 prev_reg20 = win4_reg20;
40677 prev_reg21 = win4_reg21;
40678 prev_reg22 = win4_reg22;
40679 prev_reg23 = win4_reg23;
40680 prev_reg24 = win4_reg24;
40681 prev_reg25 = win4_reg25;
40682 prev_reg26 = win4_reg26;
40683 prev_reg27 = win4_reg27;
40684 prev_reg28 = win4_reg28;
40685 prev_reg29 = win4_reg29;
40686 prev_reg30 = win4_reg30;
40687 prev_reg31 = win4_reg31;
40688 end // }
40689
40690 5: begin // {
40691 prev_reg8 = win5_reg8;
40692 prev_reg9 = win5_reg9;
40693 prev_reg10 = win5_reg10;
40694 prev_reg11 = win5_reg11;
40695 prev_reg12 = win5_reg12;
40696 prev_reg13 = win5_reg13;
40697 prev_reg14 = win5_reg14;
40698 prev_reg15 = win5_reg15;
40699 prev_reg16 = win5_reg16;
40700 prev_reg17 = win5_reg17;
40701 prev_reg18 = win5_reg18;
40702 prev_reg19 = win5_reg19;
40703 prev_reg20 = win5_reg20;
40704 prev_reg21 = win5_reg21;
40705 prev_reg22 = win5_reg22;
40706 prev_reg23 = win5_reg23;
40707 prev_reg24 = win5_reg24;
40708 prev_reg25 = win5_reg25;
40709 prev_reg26 = win5_reg26;
40710 prev_reg27 = win5_reg27;
40711 prev_reg28 = win5_reg28;
40712 prev_reg29 = win5_reg29;
40713 prev_reg30 = win5_reg30;
40714 prev_reg31 = win5_reg31;
40715 end // }
40716
40717 6: begin // {
40718 prev_reg8 = win6_reg8;
40719 prev_reg9 = win6_reg9;
40720 prev_reg10 = win6_reg10;
40721 prev_reg11 = win6_reg11;
40722 prev_reg12 = win6_reg12;
40723 prev_reg13 = win6_reg13;
40724 prev_reg14 = win6_reg14;
40725 prev_reg15 = win6_reg15;
40726 prev_reg16 = win6_reg16;
40727 prev_reg17 = win6_reg17;
40728 prev_reg18 = win6_reg18;
40729 prev_reg19 = win6_reg19;
40730 prev_reg20 = win6_reg20;
40731 prev_reg21 = win6_reg21;
40732 prev_reg22 = win6_reg22;
40733 prev_reg23 = win6_reg23;
40734 prev_reg24 = win6_reg24;
40735 prev_reg25 = win6_reg25;
40736 prev_reg26 = win6_reg26;
40737 prev_reg27 = win6_reg27;
40738 prev_reg28 = win6_reg28;
40739 prev_reg29 = win6_reg29;
40740 prev_reg30 = win6_reg30;
40741 prev_reg31 = win6_reg31;
40742 end // }
40743
40744 7: begin // {
40745 prev_reg8 = win7_reg8;
40746 prev_reg9 = win7_reg9;
40747 prev_reg10 = win7_reg10;
40748 prev_reg11 = win7_reg11;
40749 prev_reg12 = win7_reg12;
40750 prev_reg13 = win7_reg13;
40751 prev_reg14 = win7_reg14;
40752 prev_reg15 = win7_reg15;
40753 prev_reg16 = win7_reg16;
40754 prev_reg17 = win7_reg17;
40755 prev_reg18 = win7_reg18;
40756 prev_reg19 = win7_reg19;
40757 prev_reg20 = win7_reg20;
40758 prev_reg21 = win7_reg21;
40759 prev_reg22 = win7_reg22;
40760 prev_reg23 = win7_reg23;
40761 prev_reg24 = win7_reg24;
40762 prev_reg25 = win7_reg25;
40763 prev_reg26 = win7_reg26;
40764 prev_reg27 = win7_reg27;
40765 prev_reg28 = win7_reg28;
40766 prev_reg29 = win7_reg29;
40767 prev_reg30 = win7_reg30;
40768 prev_reg31 = win7_reg31;
40769 end // }
40770
40771 endcase
40772 end // }
40773endtask
40774
40775//----------------------------------------------------------
40776// Save current global to previous global, then copy new global to current global
40777task copy_global;
40778 input [2:0] new_gl;
40779 input [2:0] old_gl;
40780 integer i;
40781
40782 begin // {
40783
40784 // Save current global to Old global
40785 case (old_gl)
40786 0: begin // {
40787 gl0_reg0 = prev_reg0;
40788 gl0_reg1 = prev_reg1;
40789 gl0_reg2 = prev_reg2;
40790 gl0_reg3 = prev_reg3;
40791 gl0_reg4 = prev_reg4;
40792 gl0_reg5 = prev_reg5;
40793 gl0_reg6 = prev_reg6;
40794 gl0_reg7 = prev_reg7;
40795 end // }
40796 1: begin // {
40797 gl1_reg0 = prev_reg0;
40798 gl1_reg1 = prev_reg1;
40799 gl1_reg2 = prev_reg2;
40800 gl1_reg3 = prev_reg3;
40801 gl1_reg4 = prev_reg4;
40802 gl1_reg5 = prev_reg5;
40803 gl1_reg6 = prev_reg6;
40804 gl1_reg7 = prev_reg7;
40805 end // }
40806 2: begin // {
40807 gl2_reg0 = prev_reg0;
40808 gl2_reg1 = prev_reg1;
40809 gl2_reg2 = prev_reg2;
40810 gl2_reg3 = prev_reg3;
40811 gl2_reg4 = prev_reg4;
40812 gl2_reg5 = prev_reg5;
40813 gl2_reg6 = prev_reg6;
40814 gl2_reg7 = prev_reg7;
40815 end // }
40816 3: begin // {
40817 gl3_reg0 = prev_reg0;
40818 gl3_reg1 = prev_reg1;
40819 gl3_reg2 = prev_reg2;
40820 gl3_reg3 = prev_reg3;
40821 gl3_reg4 = prev_reg4;
40822 gl3_reg5 = prev_reg5;
40823 gl3_reg6 = prev_reg6;
40824 gl3_reg7 = prev_reg7;
40825 end // }
40826 endcase
40827
40828 // Copy New global current global
40829 case (new_gl)
40830 0: begin // {
40831 prev_reg0 = gl0_reg0;
40832 prev_reg1 = gl0_reg1;
40833 prev_reg2 = gl0_reg2;
40834 prev_reg3 = gl0_reg3;
40835 prev_reg4 = gl0_reg4;
40836 prev_reg5 = gl0_reg5;
40837 prev_reg6 = gl0_reg6;
40838 prev_reg7 = gl0_reg7;
40839 end // }
40840
40841 1: begin // {
40842 prev_reg0 = gl1_reg0;
40843 prev_reg1 = gl1_reg1;
40844 prev_reg2 = gl1_reg2;
40845 prev_reg3 = gl1_reg3;
40846 prev_reg4 = gl1_reg4;
40847 prev_reg5 = gl1_reg5;
40848 prev_reg6 = gl1_reg6;
40849 prev_reg7 = gl1_reg7;
40850 end // }
40851
40852 2: begin // {
40853 prev_reg0 = gl2_reg0;
40854 prev_reg1 = gl2_reg1;
40855 prev_reg2 = gl2_reg2;
40856 prev_reg3 = gl2_reg3;
40857 prev_reg4 = gl2_reg4;
40858 prev_reg5 = gl2_reg5;
40859 prev_reg6 = gl2_reg6;
40860 prev_reg7 = gl2_reg7;
40861 end // }
40862
40863 3: begin // {
40864 prev_reg0 = gl3_reg0;
40865 prev_reg1 = gl3_reg1;
40866 prev_reg2 = gl3_reg2;
40867 prev_reg3 = gl3_reg3;
40868 prev_reg4 = gl3_reg4;
40869 prev_reg5 = gl3_reg5;
40870 prev_reg6 = gl3_reg6;
40871 prev_reg7 = gl3_reg7;
40872 end // }
40873
40874 endcase
40875 end // }
40876endtask
40877
40878//----------------------------------------------------------
40879// Return window number and register type based on cwp and regnum as input
40880task calc_cwp;
40881 input [2:0] cwp;
40882 input [7:0] id;
40883 output [2:0] win;
40884 output [1:0] type;
40885
40886 begin // {
40887 if (id<=7) begin // {
40888 type = `G_TYPE;
40889 win = cwp;
40890 end // }
40891 else if (id<=23) begin // {
40892 type = `W_TYPE;
40893 win = cwp;
40894 end // }
40895 else if (id<=31) begin // {
40896 type = `W_TYPE;
40897 if (cwp == 0) begin // {
40898 win = 7;
40899 end // }
40900 else begin // {
40901 win = cwp-1;
40902 end // }
40903 end // }
40904 else if (id<=(64+`FP_OFFSET)) begin // {
40905 type = `F_TYPE;
40906 win = cwp;
40907 end // }
40908 else begin // {
40909 type = `C_TYPE;
40910 win = cwp;
40911 end // }
40912 end // }
40913endtask
40914
40915//----------------------------------------------------------
40916// Check for bad signal values
40917task check_values;
40918
40919 begin // {
40920
40921 //--------------------
40922 casex (complete_fw2)
40923 8'b00000000,
40924 8'b00000001,
40925 8'b00000010,
40926 8'b00000100,
40927 8'b00001000,
40928 8'b00010000,
40929 8'b00100000,
40930 8'b01000000,
40931 8'b10000000: ; // good value
40932 default: begin // {
40933 `PR_ERROR ("nas", `ERROR, " - T%0d More than one instruction retired in a single cycle for this thread.",
40934 mytnum);
40935 $write("\t\t\t\t Instructions - ");
40936 if (complete_fw2[`EXU_INDEX]) $write("EXU op, ");
40937 if (complete_fw2[`FP_INDEX]) $write("FP op, ");
40938 if (complete_fw2[`LSU_INDEX]) $write("LSU op, ");
40939 if (complete_fw2[`IMUL_INDEX]) $write("IMUL op, ");
40940 if (complete_fw2[`IDIV_INDEX]) $write("IDIV op, ");
40941 if (complete_fw2[`FDIV_INDEX]) $write("FDIV op, ");
40942 if (complete_fw2[`TLU_INDEX]) $write("TLU op, ");
40943 if (complete_fw2[`ASI_INDEX]) $write("ASI op, ");
40944 $write(" complete_fw2 = %b \n",complete_fw2);
40945 $display("");
40946 end // }
40947 endcase
40948
40949 // This check only works if diags are written properly.
40950 // For example, if a diag writes to one of these registers using wrpr,
40951 // then this check must be disabled using plusarg.
40952 //--------------------
40953 // CANSAVE + CANRESTORE + OTHERWIN = NWINDOWS-2 (per Sparc V9)
40954 if (`PARGS.win_check_on) begin // {
40955 if (complete_fw2 & ((CANSAVE_reg + CANRESTORE_reg + OTHERWIN_reg) != 6)) begin // {
40956 `PR_ERROR ("nas", `ERROR, "ERROR - T%0d Bad Values for window registers.", mytnum);
40957 `PR_ERROR ("nas", `ERROR, "- CANSAVE = %0d CANRESTORE = %0d OTHERWIN = %0d",
40958 CANSAVE_reg, CANRESTORE_reg,OTHERWIN_reg);
40959 end // }
40960 end // }
40961
40962 end // }
40963endtask
40964
40965//----------------------------------------------------------
40966//----------------------------------------------------------
40967`ifndef EMUL_TL
40968task sort_delta;
40969 reg [5:0] i, j, last;
40970 reg [`DELTA_WIDTH:0] temp1, temp2;
40971 begin // {
40972 last = delta_prev[`NEXT_INDEX]-1;
40973 for (i=`FIRST_INDEX; i <= last; i=i+1) begin // {
40974 for (j=`FIRST_INDEX; j < last; j=j+1) begin // {
40975 temp1 = delta_prev[j]; temp2 = delta_prev[j+1];
40976 if (temp1[76:64] > temp2[76:64]) begin // {
40977 delta_prev[j] = temp2; delta_prev [j+1] = temp1;
40978 end //}
40979 end // }
40980 end // }
40981 end // }
40982endtask
40983`endif
40984
40985//----------------------------------------------------------
40986//----------------------------------------------------------
40987// Print one entry in delta_* array
40988`ifndef EMUL_TL
40989task print_entry;
40990
40991 input [`DELTA_WIDTH:0] delta_entry;
40992
40993 reg [1:0] type;
40994 reg [2:0] win;
40995 reg [7:0] id;
40996 reg [63:0] act_value;
40997 reg [(20*8)-1:0] type_str;
40998 reg [(20*8)-1:0] regname;
40999
41000 begin // {
41001 {type,win,id,act_value} = delta_entry;
41002
41003 case (type)
41004 `G_TYPE: begin
41005 type_str="G";
41006 end
41007 `W_TYPE: begin
41008 type_str="W";
41009 end
41010 `F_TYPE: begin
41011 type_str="F";
41012 id = id - `FP_OFFSET;
41013 end
41014 `C_TYPE: begin
41015 type_str="C";
41016 id = id - `CTL_OFFSET;
41017 end
41018 endcase
41019
41020 `NASTOP.get_regname(mytnum,type_str,win,id,regname);
41021 `PR_NORMAL ("nas", `NORMAL, "type=%0s win=%0d RegID=%0d %0s=%h",
41022 type_str,win,id,regname,act_value);
41023 end //}
41024
41025endtask
41026`endif
41027
41028//----------------------------------------------------------
41029// Write Value to prev_reg using id as index (non-blocking)
41030task write_prev;
41031 input [7:0] id;
41032 input [63:0] value;
41033
41034 begin // {
41035
41036 case (id)
41037 8'd0: prev_reg0 <= value;
41038 8'd1: prev_reg1 <= value;
41039 8'd2: prev_reg2 <= value;
41040 8'd3: prev_reg3 <= value;
41041 8'd4: prev_reg4 <= value;
41042 8'd5: prev_reg5 <= value;
41043 8'd6: prev_reg6 <= value;
41044 8'd7: prev_reg7 <= value;
41045 8'd8: prev_reg8 <= value;
41046 8'd9: prev_reg9 <= value;
41047 8'd10: prev_reg10 <= value;
41048 8'd11: prev_reg11 <= value;
41049 8'd12: prev_reg12 <= value;
41050 8'd13: prev_reg13 <= value;
41051 8'd14: prev_reg14 <= value;
41052 8'd15: prev_reg15 <= value;
41053 8'd16: prev_reg16 <= value;
41054 8'd17: prev_reg17 <= value;
41055 8'd18: prev_reg18 <= value;
41056 8'd19: prev_reg19 <= value;
41057 8'd20: prev_reg20 <= value;
41058 8'd21: prev_reg21 <= value;
41059 8'd22: prev_reg22 <= value;
41060 8'd23: prev_reg23 <= value;
41061 8'd24: prev_reg24 <= value;
41062 8'd25: prev_reg25 <= value;
41063 8'd26: prev_reg26 <= value;
41064 8'd27: prev_reg27 <= value;
41065 8'd28: prev_reg28 <= value;
41066 8'd29: prev_reg29 <= value;
41067 8'd30: prev_reg30 <= value;
41068 8'd31: prev_reg31 <= value;
41069 8'd32: prev_reg32 <= value;
41070 8'd33: prev_reg33 <= value;
41071 8'd34: prev_reg34 <= value;
41072 8'd35: prev_reg35 <= value;
41073 8'd36: prev_reg36 <= value;
41074 8'd37: prev_reg37 <= value;
41075 8'd38: prev_reg38 <= value;
41076 8'd39: prev_reg39 <= value;
41077 8'd40: prev_reg40 <= value;
41078 8'd41: prev_reg41 <= value;
41079 8'd42: prev_reg42 <= value;
41080 8'd43: prev_reg43 <= value;
41081 8'd44: prev_reg44 <= value;
41082 8'd45: prev_reg45 <= value;
41083 8'd46: prev_reg46 <= value;
41084 8'd47: prev_reg47 <= value;
41085 8'd48: prev_reg48 <= value;
41086 8'd49: prev_reg49 <= value;
41087 8'd50: prev_reg50 <= value;
41088 8'd51: prev_reg51 <= value;
41089 8'd52: prev_reg52 <= value;
41090 8'd53: prev_reg53 <= value;
41091 8'd54: prev_reg54 <= value;
41092 8'd55: prev_reg55 <= value;
41093 8'd56: prev_reg56 <= value;
41094 8'd57: prev_reg57 <= value;
41095 8'd58: prev_reg58 <= value;
41096 8'd59: prev_reg59 <= value;
41097 8'd60: prev_reg60 <= value;
41098 8'd61: prev_reg61 <= value;
41099 8'd62: prev_reg62 <= value;
41100 8'd63: prev_reg63 <= value;
41101 8'd64: prev_reg64 <= value;
41102 8'd65: prev_reg65 <= value;
41103 8'd66: prev_reg66 <= value;
41104 8'd67: prev_reg67 <= value;
41105 8'd68: prev_reg68 <= value;
41106 8'd69: prev_reg69 <= value;
41107 8'd70: prev_reg70 <= value;
41108 8'd71: prev_reg71 <= value;
41109 8'd72: prev_reg72 <= value;
41110 8'd73: prev_reg73 <= value;
41111 8'd74: prev_reg74 <= value;
41112 8'd75: prev_reg75 <= value;
41113 8'd76: prev_reg76 <= value;
41114 8'd77: prev_reg77 <= value;
41115 8'd78: prev_reg78 <= value;
41116 8'd79: prev_reg79 <= value;
41117 8'd80: prev_reg80 <= value;
41118 8'd81: prev_reg81 <= value;
41119 8'd82: prev_reg82 <= value;
41120 8'd83: prev_reg83 <= value;
41121 8'd84: prev_reg84 <= value;
41122 8'd85: prev_reg85 <= value;
41123 8'd86: prev_reg86 <= value;
41124 8'd87: prev_reg87 <= value;
41125 8'd88: prev_reg88 <= value;
41126 8'd89: prev_reg89 <= value;
41127 8'd90: prev_reg90 <= value;
41128 8'd91: prev_reg91 <= value;
41129 8'd92: prev_reg92 <= value;
41130 8'd93: prev_reg93 <= value;
41131 8'd94: prev_reg94 <= value;
41132 8'd95: prev_reg95 <= value;
41133 8'd96: prev_reg96 <= value;
41134 8'd97: prev_reg97 <= value;
41135 8'd98: prev_reg98 <= value;
41136 8'd99: prev_reg99 <= value;
41137 8'd100: prev_reg100 <= value;
41138 8'd101: prev_reg101 <= value;
41139 8'd102: prev_reg102 <= value;
41140 8'd103: prev_reg103 <= value;
41141 8'd104: prev_reg104 <= value;
41142 8'd105: prev_reg105 <= value;
41143 8'd106: prev_reg106 <= value;
41144 8'd107: prev_reg107 <= value;
41145 8'd108: prev_reg108 <= value;
41146 8'd109: prev_reg109 <= value;
41147 8'd110: prev_reg110 <= value;
41148 8'd111: prev_reg111 <= value;
41149 8'd112: prev_reg112 <= value;
41150 8'd113: prev_reg113 <= value;
41151 8'd114: prev_reg114 <= value;
41152 8'd115: prev_reg115 <= value;
41153 8'd116: prev_reg116 <= value;
41154 8'd117: prev_reg117 <= value;
41155 8'd118: prev_reg118 <= value;
41156 8'd119: prev_reg119 <= value;
41157 8'd120: prev_reg120 <= value;
41158 8'd121: prev_reg121 <= value;
41159 8'd122: prev_reg122 <= value;
41160 8'd123: prev_reg123 <= value;
41161 8'd124: prev_reg124 <= value;
41162 8'd125: prev_reg125 <= value;
41163 8'd126: prev_reg126 <= value;
41164 8'd127: prev_reg127 <= value;
41165 8'd128: prev_reg128 <= value;
41166 8'd129: prev_reg129 <= value;
41167 8'd130: prev_reg130 <= value;
41168 8'd131: prev_reg131 <= value;
41169 8'd132: prev_reg132 <= value;
41170 8'd133: prev_reg133 <= value;
41171 8'd134: prev_reg134 <= value;
41172 8'd135: prev_reg135 <= value;
41173 8'd136: prev_reg136 <= value;
41174 8'd137: prev_reg137 <= value;
41175 8'd138: prev_reg138 <= value;
41176 8'd139: prev_reg139 <= value;
41177 8'd140: prev_reg140 <= value;
41178 8'd141: prev_reg141 <= value;
41179 8'd142: prev_reg142 <= value;
41180 8'd143: prev_reg143 <= value;
41181 8'd144: prev_reg144 <= value;
41182 8'd145: prev_reg145 <= value;
41183 8'd146: prev_reg146 <= value;
41184 8'd147: prev_reg147 <= value;
41185 8'd148: prev_reg148 <= value;
41186 8'd149: prev_reg149 <= value;
41187 8'd150: prev_reg150 <= value;
41188 8'd151: prev_reg151 <= value;
41189 8'd152: prev_reg152 <= value;
41190 8'd153: prev_reg153 <= value;
41191 8'd154: prev_reg154 <= value;
41192 8'd155: prev_reg155 <= value;
41193 8'd156: prev_reg156 <= value;
41194 8'd157: prev_reg157 <= value;
41195 8'd158: prev_reg158 <= value;
41196 8'd159: prev_reg159 <= value;
41197 8'd160: prev_reg160 <= value;
41198 8'd161: prev_reg161 <= value;
41199 8'd162: prev_reg162 <= value;
41200 8'd163: prev_reg163 <= value;
41201 8'd164: prev_reg164 <= value;
41202 8'd165: prev_reg165 <= value;
41203 8'd166: prev_reg166 <= value;
41204 8'd167: prev_reg167 <= value;
41205 8'd168: prev_reg168 <= value;
41206 8'd169: prev_reg169 <= value;
41207 8'd170: prev_reg170 <= value;
41208 8'd171: prev_reg171 <= value;
41209 8'd172: prev_reg172 <= value;
41210 8'd173: prev_reg173 <= value;
41211 8'd174: prev_reg174 <= value;
41212 8'd175: prev_reg175 <= value;
41213 8'd176: prev_reg176 <= value;
41214 8'd177: prev_reg177 <= value;
41215 8'd178: prev_reg178 <= value;
41216 8'd179: prev_reg179 <= value;
41217 8'd180: prev_reg180 <= value;
41218 8'd181: prev_reg181 <= value;
41219 8'd182: prev_reg182 <= value;
41220 8'd183: prev_reg183 <= value;
41221 8'd184: prev_reg184 <= value;
41222 8'd185: prev_reg185 <= value;
41223 8'd186: prev_reg186 <= value;
41224 8'd187: prev_reg187 <= value;
41225 8'd188: prev_reg188 <= value;
41226 8'd189: prev_reg189 <= value;
41227 8'd190: prev_reg190 <= value;
41228 8'd191: prev_reg191 <= value;
41229 8'd192: prev_reg192 <= value;
41230 8'd193: prev_reg193 <= value;
41231 8'd194: prev_reg194 <= value;
41232 8'd195: prev_reg195 <= value;
41233 8'd196: prev_reg196 <= value;
41234 8'd197: prev_reg197 <= value;
41235 8'd198: prev_reg198 <= value;
41236 8'd199: prev_reg199 <= value;
41237 8'd200: prev_reg200 <= value;
41238 8'd201: prev_reg201 <= value;
41239 8'd202: prev_reg202 <= value;
41240 8'd203: prev_reg203 <= value;
41241 8'd204: prev_reg204 <= value;
41242 8'd205: prev_reg205 <= value;
41243 8'd206: prev_reg206 <= value;
41244 8'd207: prev_reg207 <= value;
41245 8'd208: prev_reg208 <= value;
41246 8'd209: prev_reg209 <= value;
41247 8'd210: prev_reg210 <= value;
41248 8'd211: prev_reg211 <= value;
41249 8'd212: prev_reg212 <= value;
41250 8'd213: prev_reg213 <= value;
41251 8'd214: prev_reg214 <= value;
41252 8'd215: prev_reg215 <= value;
41253 8'd216: prev_reg216 <= value;
41254 8'd217: prev_reg217 <= value;
41255 8'd218: prev_reg218 <= value;
41256 8'd219: prev_reg219 <= value;
41257 8'd220: prev_reg220 <= value;
41258 8'd221: prev_reg221 <= value;
41259 8'd222: prev_reg222 <= value;
41260 8'd223: prev_reg223 <= value;
41261 8'd224: prev_reg224 <= value;
41262 8'd225: prev_reg225 <= value;
41263 8'd226: prev_reg226 <= value;
41264 8'd227: prev_reg227 <= value;
41265 8'd228: prev_reg228 <= value;
41266 8'd229: prev_reg229 <= value;
41267 8'd230: prev_reg230 <= value;
41268 8'd231: prev_reg231 <= value;
41269 8'd232: prev_reg232 <= value;
41270 8'd233: prev_reg233 <= value;
41271 8'd234: prev_reg234 <= value;
41272 8'd235: prev_reg235 <= value;
41273 8'd236: prev_reg236 <= value;
41274 8'd237: prev_reg237 <= value;
41275 8'd238: prev_reg238 <= value;
41276 8'd239: prev_reg239 <= value;
41277 8'd240: prev_reg240 <= value;
41278 8'd241: prev_reg241 <= value;
41279 8'd242: prev_reg242 <= value;
41280 8'd243: prev_reg243 <= value;
41281 8'd244: prev_reg244 <= value;
41282 8'd245: prev_reg245 <= value;
41283 8'd246: prev_reg246 <= value;
41284 8'd247: prev_reg247 <= value;
41285 8'd248: prev_reg248 <= value;
41286 8'd249: prev_reg249 <= value;
41287 8'd250: prev_reg250 <= value;
41288 8'd251: prev_reg251 <= value;
41289 8'd252: prev_reg252 <= value;
41290 8'd253: prev_reg253 <= value;
41291 8'd254: prev_reg254 <= value;
41292 8'd255: prev_reg255 <= value;
41293 endcase
41294
41295 end //}
41296
41297endtask
41298
41299//----------------------------------------------------------
41300// Write Value to prev_reg using id as index (blocking)
41301task write_prev_async;
41302 input [7:0] id;
41303 input [63:0] value;
41304
41305 begin // {
41306
41307 case (id)
41308 8'd0: prev_reg0 = value;
41309 8'd1: prev_reg1 = value;
41310 8'd2: prev_reg2 = value;
41311 8'd3: prev_reg3 = value;
41312 8'd4: prev_reg4 = value;
41313 8'd5: prev_reg5 = value;
41314 8'd6: prev_reg6 = value;
41315 8'd7: prev_reg7 = value;
41316 8'd8: prev_reg8 = value;
41317 8'd9: prev_reg9 = value;
41318 8'd10: prev_reg10 = value;
41319 8'd11: prev_reg11 = value;
41320 8'd12: prev_reg12 = value;
41321 8'd13: prev_reg13 = value;
41322 8'd14: prev_reg14 = value;
41323 8'd15: prev_reg15 = value;
41324 8'd16: prev_reg16 = value;
41325 8'd17: prev_reg17 = value;
41326 8'd18: prev_reg18 = value;
41327 8'd19: prev_reg19 = value;
41328 8'd20: prev_reg20 = value;
41329 8'd21: prev_reg21 = value;
41330 8'd22: prev_reg22 = value;
41331 8'd23: prev_reg23 = value;
41332 8'd24: prev_reg24 = value;
41333 8'd25: prev_reg25 = value;
41334 8'd26: prev_reg26 = value;
41335 8'd27: prev_reg27 = value;
41336 8'd28: prev_reg28 = value;
41337 8'd29: prev_reg29 = value;
41338 8'd30: prev_reg30 = value;
41339 8'd31: prev_reg31 = value;
41340 8'd32: prev_reg32 = value;
41341 8'd33: prev_reg33 = value;
41342 8'd34: prev_reg34 = value;
41343 8'd35: prev_reg35 = value;
41344 8'd36: prev_reg36 = value;
41345 8'd37: prev_reg37 = value;
41346 8'd38: prev_reg38 = value;
41347 8'd39: prev_reg39 = value;
41348 8'd40: prev_reg40 = value;
41349 8'd41: prev_reg41 = value;
41350 8'd42: prev_reg42 = value;
41351 8'd43: prev_reg43 = value;
41352 8'd44: prev_reg44 = value;
41353 8'd45: prev_reg45 = value;
41354 8'd46: prev_reg46 = value;
41355 8'd47: prev_reg47 = value;
41356 8'd48: prev_reg48 = value;
41357 8'd49: prev_reg49 = value;
41358 8'd50: prev_reg50 = value;
41359 8'd51: prev_reg51 = value;
41360 8'd52: prev_reg52 = value;
41361 8'd53: prev_reg53 = value;
41362 8'd54: prev_reg54 = value;
41363 8'd55: prev_reg55 = value;
41364 8'd56: prev_reg56 = value;
41365 8'd57: prev_reg57 = value;
41366 8'd58: prev_reg58 = value;
41367 8'd59: prev_reg59 = value;
41368 8'd60: prev_reg60 = value;
41369 8'd61: prev_reg61 = value;
41370 8'd62: prev_reg62 = value;
41371 8'd63: prev_reg63 = value;
41372 8'd64: prev_reg64 = value;
41373 8'd65: prev_reg65 = value;
41374 8'd66: prev_reg66 = value;
41375 8'd67: prev_reg67 = value;
41376 8'd68: prev_reg68 = value;
41377 8'd69: prev_reg69 = value;
41378 8'd70: prev_reg70 = value;
41379 8'd71: prev_reg71 = value;
41380 8'd72: prev_reg72 = value;
41381 8'd73: prev_reg73 = value;
41382 8'd74: prev_reg74 = value;
41383 8'd75: prev_reg75 = value;
41384 8'd76: prev_reg76 = value;
41385 8'd77: prev_reg77 = value;
41386 8'd78: prev_reg78 = value;
41387 8'd79: prev_reg79 = value;
41388 8'd80: prev_reg80 = value;
41389 8'd81: prev_reg81 = value;
41390 8'd82: prev_reg82 = value;
41391 8'd83: prev_reg83 = value;
41392 8'd84: prev_reg84 = value;
41393 8'd85: prev_reg85 = value;
41394 8'd86: prev_reg86 = value;
41395 8'd87: prev_reg87 = value;
41396 8'd88: prev_reg88 = value;
41397 8'd89: prev_reg89 = value;
41398 8'd90: prev_reg90 = value;
41399 8'd91: prev_reg91 = value;
41400 8'd92: prev_reg92 = value;
41401 8'd93: prev_reg93 = value;
41402 8'd94: prev_reg94 = value;
41403 8'd95: prev_reg95 = value;
41404 8'd96: prev_reg96 = value;
41405 8'd97: prev_reg97 = value;
41406 8'd98: prev_reg98 = value;
41407 8'd99: prev_reg99 = value;
41408 8'd100: prev_reg100 = value;
41409 8'd101: prev_reg101 = value;
41410 8'd102: prev_reg102 = value;
41411 8'd103: prev_reg103 = value;
41412 8'd104: prev_reg104 = value;
41413 8'd105: prev_reg105 = value;
41414 8'd106: prev_reg106 = value;
41415 8'd107: prev_reg107 = value;
41416 8'd108: prev_reg108 = value;
41417 8'd109: prev_reg109 = value;
41418 8'd110: prev_reg110 = value;
41419 8'd111: prev_reg111 = value;
41420 8'd112: prev_reg112 = value;
41421 8'd113: prev_reg113 = value;
41422 8'd114: prev_reg114 = value;
41423 8'd115: prev_reg115 = value;
41424 8'd116: prev_reg116 = value;
41425 8'd117: prev_reg117 = value;
41426 8'd118: prev_reg118 = value;
41427 8'd119: prev_reg119 = value;
41428 8'd120: prev_reg120 = value;
41429 8'd121: prev_reg121 = value;
41430 8'd122: prev_reg122 = value;
41431 8'd123: prev_reg123 = value;
41432 8'd124: prev_reg124 = value;
41433 8'd125: prev_reg125 = value;
41434 8'd126: prev_reg126 = value;
41435 8'd127: prev_reg127 = value;
41436 8'd128: prev_reg128 = value;
41437 8'd129: prev_reg129 = value;
41438 8'd130: prev_reg130 = value;
41439 8'd131: prev_reg131 = value;
41440 8'd132: prev_reg132 = value;
41441 8'd133: prev_reg133 = value;
41442 8'd134: prev_reg134 = value;
41443 8'd135: prev_reg135 = value;
41444 8'd136: prev_reg136 = value;
41445 8'd137: prev_reg137 = value;
41446 8'd138: prev_reg138 = value;
41447 8'd139: prev_reg139 = value;
41448 8'd140: prev_reg140 = value;
41449 8'd141: prev_reg141 = value;
41450 8'd142: prev_reg142 = value;
41451 8'd143: prev_reg143 = value;
41452 8'd144: prev_reg144 = value;
41453 8'd145: prev_reg145 = value;
41454 8'd146: prev_reg146 = value;
41455 8'd147: prev_reg147 = value;
41456 8'd148: prev_reg148 = value;
41457 8'd149: prev_reg149 = value;
41458 8'd150: prev_reg150 = value;
41459 8'd151: prev_reg151 = value;
41460 8'd152: prev_reg152 = value;
41461 8'd153: prev_reg153 = value;
41462 8'd154: prev_reg154 = value;
41463 8'd155: prev_reg155 = value;
41464 8'd156: prev_reg156 = value;
41465 8'd157: prev_reg157 = value;
41466 8'd158: prev_reg158 = value;
41467 8'd159: prev_reg159 = value;
41468 8'd160: prev_reg160 = value;
41469 8'd161: prev_reg161 = value;
41470 8'd162: prev_reg162 = value;
41471 8'd163: prev_reg163 = value;
41472 8'd164: prev_reg164 = value;
41473 8'd165: prev_reg165 = value;
41474 8'd166: prev_reg166 = value;
41475 8'd167: prev_reg167 = value;
41476 8'd168: prev_reg168 = value;
41477 8'd169: prev_reg169 = value;
41478 8'd170: prev_reg170 = value;
41479 8'd171: prev_reg171 = value;
41480 8'd172: prev_reg172 = value;
41481 8'd173: prev_reg173 = value;
41482 8'd174: prev_reg174 = value;
41483 8'd175: prev_reg175 = value;
41484 8'd176: prev_reg176 = value;
41485 8'd177: prev_reg177 = value;
41486 8'd178: prev_reg178 = value;
41487 8'd179: prev_reg179 = value;
41488 8'd180: prev_reg180 = value;
41489 8'd181: prev_reg181 = value;
41490 8'd182: prev_reg182 = value;
41491 8'd183: prev_reg183 = value;
41492 8'd184: prev_reg184 = value;
41493 8'd185: prev_reg185 = value;
41494 8'd186: prev_reg186 = value;
41495 8'd187: prev_reg187 = value;
41496 8'd188: prev_reg188 = value;
41497 8'd189: prev_reg189 = value;
41498 8'd190: prev_reg190 = value;
41499 8'd191: prev_reg191 = value;
41500 8'd192: prev_reg192 = value;
41501 8'd193: prev_reg193 = value;
41502 8'd194: prev_reg194 = value;
41503 8'd195: prev_reg195 = value;
41504 8'd196: prev_reg196 = value;
41505 8'd197: prev_reg197 = value;
41506 8'd198: prev_reg198 = value;
41507 8'd199: prev_reg199 = value;
41508 8'd200: prev_reg200 = value;
41509 8'd201: prev_reg201 = value;
41510 8'd202: prev_reg202 = value;
41511 8'd203: prev_reg203 = value;
41512 8'd204: prev_reg204 = value;
41513 8'd205: prev_reg205 = value;
41514 8'd206: prev_reg206 = value;
41515 8'd207: prev_reg207 = value;
41516 8'd208: prev_reg208 = value;
41517 8'd209: prev_reg209 = value;
41518 8'd210: prev_reg210 = value;
41519 8'd211: prev_reg211 = value;
41520 8'd212: prev_reg212 = value;
41521 8'd213: prev_reg213 = value;
41522 8'd214: prev_reg214 = value;
41523 8'd215: prev_reg215 = value;
41524 8'd216: prev_reg216 = value;
41525 8'd217: prev_reg217 = value;
41526 8'd218: prev_reg218 = value;
41527 8'd219: prev_reg219 = value;
41528 8'd220: prev_reg220 = value;
41529 8'd221: prev_reg221 = value;
41530 8'd222: prev_reg222 = value;
41531 8'd223: prev_reg223 = value;
41532 8'd224: prev_reg224 = value;
41533 8'd225: prev_reg225 = value;
41534 8'd226: prev_reg226 = value;
41535 8'd227: prev_reg227 = value;
41536 8'd228: prev_reg228 = value;
41537 8'd229: prev_reg229 = value;
41538 8'd230: prev_reg230 = value;
41539 8'd231: prev_reg231 = value;
41540 8'd232: prev_reg232 = value;
41541 8'd233: prev_reg233 = value;
41542 8'd234: prev_reg234 = value;
41543 8'd235: prev_reg235 = value;
41544 8'd236: prev_reg236 = value;
41545 8'd237: prev_reg237 = value;
41546 8'd238: prev_reg238 = value;
41547 8'd239: prev_reg239 = value;
41548 8'd240: prev_reg240 = value;
41549 8'd241: prev_reg241 = value;
41550 8'd242: prev_reg242 = value;
41551 8'd243: prev_reg243 = value;
41552 8'd244: prev_reg244 = value;
41553 8'd245: prev_reg245 = value;
41554 8'd246: prev_reg246 = value;
41555 8'd247: prev_reg247 = value;
41556 8'd248: prev_reg248 = value;
41557 8'd249: prev_reg249 = value;
41558 8'd250: prev_reg250 = value;
41559 8'd251: prev_reg251 = value;
41560 8'd252: prev_reg252 = value;
41561 8'd253: prev_reg253 = value;
41562 8'd254: prev_reg254 = value;
41563 8'd255: prev_reg255 = value;
41564 endcase
41565
41566 end //}
41567
41568endtask
41569
41570//----------------------------------------------------------
41571// Read value frpm prev_reg using id as index
41572function [63:0] read_prev;
41573 input [7:0] id;
41574
41575 begin // {
41576
41577 case (id)
41578 8'd0: read_prev = prev_reg0;
41579 8'd1: read_prev = prev_reg1;
41580 8'd2: read_prev = prev_reg2;
41581 8'd3: read_prev = prev_reg3;
41582 8'd4: read_prev = prev_reg4;
41583 8'd5: read_prev = prev_reg5;
41584 8'd6: read_prev = prev_reg6;
41585 8'd7: read_prev = prev_reg7;
41586 8'd8: read_prev = prev_reg8;
41587 8'd9: read_prev = prev_reg9;
41588 8'd10: read_prev = prev_reg10;
41589 8'd11: read_prev = prev_reg11;
41590 8'd12: read_prev = prev_reg12;
41591 8'd13: read_prev = prev_reg13;
41592 8'd14: read_prev = prev_reg14;
41593 8'd15: read_prev = prev_reg15;
41594 8'd16: read_prev = prev_reg16;
41595 8'd17: read_prev = prev_reg17;
41596 8'd18: read_prev = prev_reg18;
41597 8'd19: read_prev = prev_reg19;
41598 8'd20: read_prev = prev_reg20;
41599 8'd21: read_prev = prev_reg21;
41600 8'd22: read_prev = prev_reg22;
41601 8'd23: read_prev = prev_reg23;
41602 8'd24: read_prev = prev_reg24;
41603 8'd25: read_prev = prev_reg25;
41604 8'd26: read_prev = prev_reg26;
41605 8'd27: read_prev = prev_reg27;
41606 8'd28: read_prev = prev_reg28;
41607 8'd29: read_prev = prev_reg29;
41608 8'd30: read_prev = prev_reg30;
41609 8'd31: read_prev = prev_reg31;
41610 8'd32: read_prev = prev_reg32;
41611 8'd33: read_prev = prev_reg33;
41612 8'd34: read_prev = prev_reg34;
41613 8'd35: read_prev = prev_reg35;
41614 8'd36: read_prev = prev_reg36;
41615 8'd37: read_prev = prev_reg37;
41616 8'd38: read_prev = prev_reg38;
41617 8'd39: read_prev = prev_reg39;
41618 8'd40: read_prev = prev_reg40;
41619 8'd41: read_prev = prev_reg41;
41620 8'd42: read_prev = prev_reg42;
41621 8'd43: read_prev = prev_reg43;
41622 8'd44: read_prev = prev_reg44;
41623 8'd45: read_prev = prev_reg45;
41624 8'd46: read_prev = prev_reg46;
41625 8'd47: read_prev = prev_reg47;
41626 8'd48: read_prev = prev_reg48;
41627 8'd49: read_prev = prev_reg49;
41628 8'd50: read_prev = prev_reg50;
41629 8'd51: read_prev = prev_reg51;
41630 8'd52: read_prev = prev_reg52;
41631 8'd53: read_prev = prev_reg53;
41632 8'd54: read_prev = prev_reg54;
41633 8'd55: read_prev = prev_reg55;
41634 8'd56: read_prev = prev_reg56;
41635 8'd57: read_prev = prev_reg57;
41636 8'd58: read_prev = prev_reg58;
41637 8'd59: read_prev = prev_reg59;
41638 8'd60: read_prev = prev_reg60;
41639 8'd61: read_prev = prev_reg61;
41640 8'd62: read_prev = prev_reg62;
41641 8'd63: read_prev = prev_reg63;
41642 8'd64: read_prev = prev_reg64;
41643 8'd65: read_prev = prev_reg65;
41644 8'd66: read_prev = prev_reg66;
41645 8'd67: read_prev = prev_reg67;
41646 8'd68: read_prev = prev_reg68;
41647 8'd69: read_prev = prev_reg69;
41648 8'd70: read_prev = prev_reg70;
41649 8'd71: read_prev = prev_reg71;
41650 8'd72: read_prev = prev_reg72;
41651 8'd73: read_prev = prev_reg73;
41652 8'd74: read_prev = prev_reg74;
41653 8'd75: read_prev = prev_reg75;
41654 8'd76: read_prev = prev_reg76;
41655 8'd77: read_prev = prev_reg77;
41656 8'd78: read_prev = prev_reg78;
41657 8'd79: read_prev = prev_reg79;
41658 8'd80: read_prev = prev_reg80;
41659 8'd81: read_prev = prev_reg81;
41660 8'd82: read_prev = prev_reg82;
41661 8'd83: read_prev = prev_reg83;
41662 8'd84: read_prev = prev_reg84;
41663 8'd85: read_prev = prev_reg85;
41664 8'd86: read_prev = prev_reg86;
41665 8'd87: read_prev = prev_reg87;
41666 8'd88: read_prev = prev_reg88;
41667 8'd89: read_prev = prev_reg89;
41668 8'd90: read_prev = prev_reg90;
41669 8'd91: read_prev = prev_reg91;
41670 8'd92: read_prev = prev_reg92;
41671 8'd93: read_prev = prev_reg93;
41672 8'd94: read_prev = prev_reg94;
41673 8'd95: read_prev = prev_reg95;
41674 8'd96: read_prev = prev_reg96;
41675 8'd97: read_prev = prev_reg97;
41676 8'd98: read_prev = prev_reg98;
41677 8'd99: read_prev = prev_reg99;
41678 8'd100: read_prev = prev_reg100;
41679 8'd101: read_prev = prev_reg101;
41680 8'd102: read_prev = prev_reg102;
41681 8'd103: read_prev = prev_reg103;
41682 8'd104: read_prev = prev_reg104;
41683 8'd105: read_prev = prev_reg105;
41684 8'd106: read_prev = prev_reg106;
41685 8'd107: read_prev = prev_reg107;
41686 8'd108: read_prev = prev_reg108;
41687 8'd109: read_prev = prev_reg109;
41688 8'd110: read_prev = prev_reg110;
41689 8'd111: read_prev = prev_reg111;
41690 8'd112: read_prev = prev_reg112;
41691 8'd113: read_prev = prev_reg113;
41692 8'd114: read_prev = prev_reg114;
41693 8'd115: read_prev = prev_reg115;
41694 8'd116: read_prev = prev_reg116;
41695 8'd117: read_prev = prev_reg117;
41696 8'd118: read_prev = prev_reg118;
41697 8'd119: read_prev = prev_reg119;
41698 8'd120: read_prev = prev_reg120;
41699 8'd121: read_prev = prev_reg121;
41700 8'd122: read_prev = prev_reg122;
41701 8'd123: read_prev = prev_reg123;
41702 8'd124: read_prev = prev_reg124;
41703 8'd125: read_prev = prev_reg125;
41704 8'd126: read_prev = prev_reg126;
41705 8'd127: read_prev = prev_reg127;
41706 8'd128: read_prev = prev_reg128;
41707 8'd129: read_prev = prev_reg129;
41708 8'd130: read_prev = prev_reg130;
41709 8'd131: read_prev = prev_reg131;
41710 8'd132: read_prev = prev_reg132;
41711 8'd133: read_prev = prev_reg133;
41712 8'd134: read_prev = prev_reg134;
41713 8'd135: read_prev = prev_reg135;
41714 8'd136: read_prev = prev_reg136;
41715 8'd137: read_prev = prev_reg137;
41716 8'd138: read_prev = prev_reg138;
41717 8'd139: read_prev = prev_reg139;
41718 8'd140: read_prev = prev_reg140;
41719 8'd141: read_prev = prev_reg141;
41720 8'd142: read_prev = prev_reg142;
41721 8'd143: read_prev = prev_reg143;
41722 8'd144: read_prev = prev_reg144;
41723 8'd145: read_prev = prev_reg145;
41724 8'd146: read_prev = prev_reg146;
41725 8'd147: read_prev = prev_reg147;
41726 8'd148: read_prev = prev_reg148;
41727 8'd149: read_prev = prev_reg149;
41728 8'd150: read_prev = prev_reg150;
41729 8'd151: read_prev = prev_reg151;
41730 8'd152: read_prev = prev_reg152;
41731 8'd153: read_prev = prev_reg153;
41732 8'd154: read_prev = prev_reg154;
41733 8'd155: read_prev = prev_reg155;
41734 8'd156: read_prev = prev_reg156;
41735 8'd157: read_prev = prev_reg157;
41736 8'd158: read_prev = prev_reg158;
41737 8'd159: read_prev = prev_reg159;
41738 8'd160: read_prev = prev_reg160;
41739 8'd161: read_prev = prev_reg161;
41740 8'd162: read_prev = prev_reg162;
41741 8'd163: read_prev = prev_reg163;
41742 8'd164: read_prev = prev_reg164;
41743 8'd165: read_prev = prev_reg165;
41744 8'd166: read_prev = prev_reg166;
41745 8'd167: read_prev = prev_reg167;
41746 8'd168: read_prev = prev_reg168;
41747 8'd169: read_prev = prev_reg169;
41748 8'd170: read_prev = prev_reg170;
41749 8'd171: read_prev = prev_reg171;
41750 8'd172: read_prev = prev_reg172;
41751 8'd173: read_prev = prev_reg173;
41752 8'd174: read_prev = prev_reg174;
41753 8'd175: read_prev = prev_reg175;
41754 8'd176: read_prev = prev_reg176;
41755 8'd177: read_prev = prev_reg177;
41756 8'd178: read_prev = prev_reg178;
41757 8'd179: read_prev = prev_reg179;
41758 8'd180: read_prev = prev_reg180;
41759 8'd181: read_prev = prev_reg181;
41760 8'd182: read_prev = prev_reg182;
41761 8'd183: read_prev = prev_reg183;
41762 8'd184: read_prev = prev_reg184;
41763 8'd185: read_prev = prev_reg185;
41764 8'd186: read_prev = prev_reg186;
41765 8'd187: read_prev = prev_reg187;
41766 8'd188: read_prev = prev_reg188;
41767 8'd189: read_prev = prev_reg189;
41768 8'd190: read_prev = prev_reg190;
41769 8'd191: read_prev = prev_reg191;
41770 8'd192: read_prev = prev_reg192;
41771 8'd193: read_prev = prev_reg193;
41772 8'd194: read_prev = prev_reg194;
41773 8'd195: read_prev = prev_reg195;
41774 8'd196: read_prev = prev_reg196;
41775 8'd197: read_prev = prev_reg197;
41776 8'd198: read_prev = prev_reg198;
41777 8'd199: read_prev = prev_reg199;
41778 8'd200: read_prev = prev_reg200;
41779 8'd201: read_prev = prev_reg201;
41780 8'd202: read_prev = prev_reg202;
41781 8'd203: read_prev = prev_reg203;
41782 8'd204: read_prev = prev_reg204;
41783 8'd205: read_prev = prev_reg205;
41784 8'd206: read_prev = prev_reg206;
41785 8'd207: read_prev = prev_reg207;
41786 8'd208: read_prev = prev_reg208;
41787 8'd209: read_prev = prev_reg209;
41788 8'd210: read_prev = prev_reg210;
41789 8'd211: read_prev = prev_reg211;
41790 8'd212: read_prev = prev_reg212;
41791 8'd213: read_prev = prev_reg213;
41792 8'd214: read_prev = prev_reg214;
41793 8'd215: read_prev = prev_reg215;
41794 8'd216: read_prev = prev_reg216;
41795 8'd217: read_prev = prev_reg217;
41796 8'd218: read_prev = prev_reg218;
41797 8'd219: read_prev = prev_reg219;
41798 8'd220: read_prev = prev_reg220;
41799 8'd221: read_prev = prev_reg221;
41800 8'd222: read_prev = prev_reg222;
41801 8'd223: read_prev = prev_reg223;
41802 8'd224: read_prev = prev_reg224;
41803 8'd225: read_prev = prev_reg225;
41804 8'd226: read_prev = prev_reg226;
41805 8'd227: read_prev = prev_reg227;
41806 8'd228: read_prev = prev_reg228;
41807 8'd229: read_prev = prev_reg229;
41808 8'd230: read_prev = prev_reg230;
41809 8'd231: read_prev = prev_reg231;
41810 8'd232: read_prev = prev_reg232;
41811 8'd233: read_prev = prev_reg233;
41812 8'd234: read_prev = prev_reg234;
41813 8'd235: read_prev = prev_reg235;
41814 8'd236: read_prev = prev_reg236;
41815 8'd237: read_prev = prev_reg237;
41816 8'd238: read_prev = prev_reg238;
41817 8'd239: read_prev = prev_reg239;
41818 8'd240: read_prev = prev_reg240;
41819 8'd241: read_prev = prev_reg241;
41820 8'd242: read_prev = prev_reg242;
41821 8'd243: read_prev = prev_reg243;
41822 8'd244: read_prev = prev_reg244;
41823 8'd245: read_prev = prev_reg245;
41824 8'd246: read_prev = prev_reg246;
41825 8'd247: read_prev = prev_reg247;
41826 8'd248: read_prev = prev_reg248;
41827 8'd249: read_prev = prev_reg249;
41828 8'd250: read_prev = prev_reg250;
41829 8'd251: read_prev = prev_reg251;
41830 8'd252: read_prev = prev_reg252;
41831 8'd253: read_prev = prev_reg253;
41832 8'd254: read_prev = prev_reg254;
41833 8'd255: read_prev = prev_reg255;
41834 endcase
41835
41836 end //}
41837
41838endfunction
41839
41840//----------------------------------------------------------
41841function [4:0] remap;
41842 input [4:0] rd;
41843 input oddwin;
41844
41845 begin
41846
41847 remap[4] = rd[4] ^ (rd[3] & oddwin);
41848 remap[3:0] = rd[3:0];
41849
41850 end
41851endfunction
41852
41853//----------------------------------------------------------
41854// Initialize nas_pipe registers
41855initial begin : INIT_BLOCK
41856 integer i;
41857
41858 nas_pipe_enable = 1'b1; // Nas_pipe always enables itself
41859 good_trap_detected = 1'b0;
41860
41861 @ (posedge `BENCH_SPC7_GCLK);
41862 `TOP.th_last_act_cycle[mytnum] = 0;
41863
41864 // Window registers
41865 win0_reg8 = 0;
41866 win1_reg8 = 0;
41867 win2_reg8 = 0;
41868 win3_reg8 = 0;
41869 win4_reg8 = 0;
41870 win5_reg8 = 0;
41871 win6_reg8 = 0;
41872 win7_reg8 = 0;
41873 win0_reg9 = 0;
41874 win1_reg9 = 0;
41875 win2_reg9 = 0;
41876 win3_reg9 = 0;
41877 win4_reg9 = 0;
41878 win5_reg9 = 0;
41879 win6_reg9 = 0;
41880 win7_reg9 = 0;
41881 win0_reg10 = 0;
41882 win1_reg10 = 0;
41883 win2_reg10 = 0;
41884 win3_reg10 = 0;
41885 win4_reg10 = 0;
41886 win5_reg10 = 0;
41887 win6_reg10 = 0;
41888 win7_reg10 = 0;
41889 win0_reg11 = 0;
41890 win1_reg11 = 0;
41891 win2_reg11 = 0;
41892 win3_reg11 = 0;
41893 win4_reg11 = 0;
41894 win5_reg11 = 0;
41895 win6_reg11 = 0;
41896 win7_reg11 = 0;
41897 win0_reg12 = 0;
41898 win1_reg12 = 0;
41899 win2_reg12 = 0;
41900 win3_reg12 = 0;
41901 win4_reg12 = 0;
41902 win5_reg12 = 0;
41903 win6_reg12 = 0;
41904 win7_reg12 = 0;
41905 win0_reg13 = 0;
41906 win1_reg13 = 0;
41907 win2_reg13 = 0;
41908 win3_reg13 = 0;
41909 win4_reg13 = 0;
41910 win5_reg13 = 0;
41911 win6_reg13 = 0;
41912 win7_reg13 = 0;
41913 win0_reg14 = 0;
41914 win1_reg14 = 0;
41915 win2_reg14 = 0;
41916 win3_reg14 = 0;
41917 win4_reg14 = 0;
41918 win5_reg14 = 0;
41919 win6_reg14 = 0;
41920 win7_reg14 = 0;
41921 win0_reg15 = 0;
41922 win1_reg15 = 0;
41923 win2_reg15 = 0;
41924 win3_reg15 = 0;
41925 win4_reg15 = 0;
41926 win5_reg15 = 0;
41927 win6_reg15 = 0;
41928 win7_reg15 = 0;
41929 win0_reg16 = 0;
41930 win1_reg16 = 0;
41931 win2_reg16 = 0;
41932 win3_reg16 = 0;
41933 win4_reg16 = 0;
41934 win5_reg16 = 0;
41935 win6_reg16 = 0;
41936 win7_reg16 = 0;
41937 win0_reg17 = 0;
41938 win1_reg17 = 0;
41939 win2_reg17 = 0;
41940 win3_reg17 = 0;
41941 win4_reg17 = 0;
41942 win5_reg17 = 0;
41943 win6_reg17 = 0;
41944 win7_reg17 = 0;
41945 win0_reg18 = 0;
41946 win1_reg18 = 0;
41947 win2_reg18 = 0;
41948 win3_reg18 = 0;
41949 win4_reg18 = 0;
41950 win5_reg18 = 0;
41951 win6_reg18 = 0;
41952 win7_reg18 = 0;
41953 win0_reg19 = 0;
41954 win1_reg19 = 0;
41955 win2_reg19 = 0;
41956 win3_reg19 = 0;
41957 win4_reg19 = 0;
41958 win5_reg19 = 0;
41959 win6_reg19 = 0;
41960 win7_reg19 = 0;
41961 win0_reg20 = 0;
41962 win1_reg20 = 0;
41963 win2_reg20 = 0;
41964 win3_reg20 = 0;
41965 win4_reg20 = 0;
41966 win5_reg20 = 0;
41967 win6_reg20 = 0;
41968 win7_reg20 = 0;
41969 win0_reg21 = 0;
41970 win1_reg21 = 0;
41971 win2_reg21 = 0;
41972 win3_reg21 = 0;
41973 win4_reg21 = 0;
41974 win5_reg21 = 0;
41975 win6_reg21 = 0;
41976 win7_reg21 = 0;
41977 win0_reg22 = 0;
41978 win1_reg22 = 0;
41979 win2_reg22 = 0;
41980 win3_reg22 = 0;
41981 win4_reg22 = 0;
41982 win5_reg22 = 0;
41983 win6_reg22 = 0;
41984 win7_reg22 = 0;
41985 win0_reg23 = 0;
41986 win1_reg23 = 0;
41987 win2_reg23 = 0;
41988 win3_reg23 = 0;
41989 win4_reg23 = 0;
41990 win5_reg23 = 0;
41991 win6_reg23 = 0;
41992 win7_reg23 = 0;
41993 win0_reg24 = 0;
41994 win1_reg24 = 0;
41995 win2_reg24 = 0;
41996 win3_reg24 = 0;
41997 win4_reg24 = 0;
41998 win5_reg24 = 0;
41999 win6_reg24 = 0;
42000 win7_reg24 = 0;
42001 win0_reg25 = 0;
42002 win1_reg25 = 0;
42003 win2_reg25 = 0;
42004 win3_reg25 = 0;
42005 win4_reg25 = 0;
42006 win5_reg25 = 0;
42007 win6_reg25 = 0;
42008 win7_reg25 = 0;
42009 win0_reg26 = 0;
42010 win1_reg26 = 0;
42011 win2_reg26 = 0;
42012 win3_reg26 = 0;
42013 win4_reg26 = 0;
42014 win5_reg26 = 0;
42015 win6_reg26 = 0;
42016 win7_reg26 = 0;
42017 win0_reg27 = 0;
42018 win1_reg27 = 0;
42019 win2_reg27 = 0;
42020 win3_reg27 = 0;
42021 win4_reg27 = 0;
42022 win5_reg27 = 0;
42023 win6_reg27 = 0;
42024 win7_reg27 = 0;
42025 win0_reg28 = 0;
42026 win1_reg28 = 0;
42027 win2_reg28 = 0;
42028 win3_reg28 = 0;
42029 win4_reg28 = 0;
42030 win5_reg28 = 0;
42031 win6_reg28 = 0;
42032 win7_reg28 = 0;
42033 win0_reg29 = 0;
42034 win1_reg29 = 0;
42035 win2_reg29 = 0;
42036 win3_reg29 = 0;
42037 win4_reg29 = 0;
42038 win5_reg29 = 0;
42039 win6_reg29 = 0;
42040 win7_reg29 = 0;
42041 win0_reg30 = 0;
42042 win1_reg30 = 0;
42043 win2_reg30 = 0;
42044 win3_reg30 = 0;
42045 win4_reg30 = 0;
42046 win5_reg30 = 0;
42047 win6_reg30 = 0;
42048 win7_reg30 = 0;
42049 win0_reg31 = 0;
42050 win1_reg31 = 0;
42051 win2_reg31 = 0;
42052 win3_reg31 = 0;
42053 win4_reg31 = 0;
42054 win5_reg31 = 0;
42055 win6_reg31 = 0;
42056 win7_reg31 = 0;
42057
42058 // Global registers
42059 th_gl = `POR_GL;
42060 gl0_reg0 = 0;
42061 gl1_reg0 = 0;
42062 gl2_reg0 = 0;
42063 gl3_reg0 = 0;
42064 gl0_reg1 = 0;
42065 gl1_reg1 = 0;
42066 gl2_reg1 = 0;
42067 gl3_reg1 = 0;
42068 gl0_reg2 = 0;
42069 gl1_reg2 = 0;
42070 gl2_reg2 = 0;
42071 gl3_reg2 = 0;
42072 gl0_reg3 = 0;
42073 gl1_reg3 = 0;
42074 gl2_reg3 = 0;
42075 gl3_reg3 = 0;
42076 gl0_reg4 = 0;
42077 gl1_reg4 = 0;
42078 gl2_reg4 = 0;
42079 gl3_reg4 = 0;
42080 gl0_reg5 = 0;
42081 gl1_reg5 = 0;
42082 gl2_reg5 = 0;
42083 gl3_reg5 = 0;
42084 gl0_reg6 = 0;
42085 gl1_reg6 = 0;
42086 gl2_reg6 = 0;
42087 gl3_reg6 = 0;
42088 gl0_reg7 = 0;
42089 gl1_reg7 = 0;
42090 gl2_reg7 = 0;
42091 gl3_reg7 = 0;
42092
42093 `PR_INFO ("nas", `INFO, "T%0d Init shadow registers.",mytnum);
42094 prev_reg0 = 0;
42095 prev_reg1 = 0;
42096 prev_reg2 = 0;
42097 prev_reg3 = 0;
42098 prev_reg4 = 0;
42099 prev_reg5 = 0;
42100 prev_reg6 = 0;
42101 prev_reg7 = 0;
42102 prev_reg8 = 0;
42103 prev_reg9 = 0;
42104 prev_reg10 = 0;
42105 prev_reg11 = 0;
42106 prev_reg12 = 0;
42107 prev_reg13 = 0;
42108 prev_reg14 = 0;
42109 prev_reg15 = 0;
42110 prev_reg16 = 0;
42111 prev_reg17 = 0;
42112 prev_reg18 = 0;
42113 prev_reg19 = 0;
42114 prev_reg20 = 0;
42115 prev_reg21 = 0;
42116 prev_reg22 = 0;
42117 prev_reg23 = 0;
42118 prev_reg24 = 0;
42119 prev_reg25 = 0;
42120 prev_reg26 = 0;
42121 prev_reg27 = 0;
42122 prev_reg28 = 0;
42123 prev_reg29 = 0;
42124 prev_reg30 = 0;
42125 prev_reg31 = 0;
42126 prev_reg32 = 0;
42127 prev_reg33 = 0;
42128 prev_reg34 = 0;
42129 prev_reg35 = 0;
42130 prev_reg36 = 0;
42131 prev_reg37 = 0;
42132 prev_reg38 = 0;
42133 prev_reg39 = 0;
42134 prev_reg40 = 0;
42135 prev_reg41 = 0;
42136 prev_reg42 = 0;
42137 prev_reg43 = 0;
42138 prev_reg44 = 0;
42139 prev_reg45 = 0;
42140 prev_reg46 = 0;
42141 prev_reg47 = 0;
42142 prev_reg48 = 0;
42143 prev_reg49 = 0;
42144 prev_reg50 = 0;
42145 prev_reg51 = 0;
42146 prev_reg52 = 0;
42147 prev_reg53 = 0;
42148 prev_reg54 = 0;
42149 prev_reg55 = 0;
42150 prev_reg56 = 0;
42151 prev_reg57 = 0;
42152 prev_reg58 = 0;
42153 prev_reg59 = 0;
42154 prev_reg60 = 0;
42155 prev_reg61 = 0;
42156 prev_reg62 = 0;
42157 prev_reg63 = 0;
42158 prev_reg64 = 0;
42159 prev_reg65 = 0;
42160 prev_reg66 = 0;
42161 prev_reg67 = 0;
42162 prev_reg68 = 0;
42163 prev_reg69 = 0;
42164 prev_reg70 = 0;
42165 prev_reg71 = 0;
42166 prev_reg72 = 0;
42167 prev_reg73 = 0;
42168 prev_reg74 = 0;
42169 prev_reg75 = 0;
42170 prev_reg76 = 0;
42171 prev_reg77 = 0;
42172 prev_reg78 = 0;
42173 prev_reg79 = 0;
42174 prev_reg80 = 0;
42175 prev_reg81 = 0;
42176 prev_reg82 = 0;
42177 prev_reg83 = 0;
42178 prev_reg84 = 0;
42179 prev_reg85 = 0;
42180 prev_reg86 = 0;
42181 prev_reg87 = 0;
42182 prev_reg88 = 0;
42183 prev_reg89 = 0;
42184 prev_reg90 = 0;
42185 prev_reg91 = 0;
42186 prev_reg92 = 0;
42187 prev_reg93 = 0;
42188 prev_reg94 = 0;
42189 prev_reg95 = 0;
42190 prev_reg96 = 0;
42191 prev_reg97 = 0;
42192 prev_reg98 = 0;
42193 prev_reg99 = 0;
42194 prev_reg100 = 0;
42195 prev_reg101 = 0;
42196 prev_reg102 = 0;
42197 prev_reg103 = 0;
42198 prev_reg104 = 0;
42199 prev_reg105 = 0;
42200 prev_reg106 = 0;
42201 prev_reg107 = 0;
42202 prev_reg108 = 0;
42203 prev_reg109 = 0;
42204 prev_reg110 = 0;
42205 prev_reg111 = 0;
42206 prev_reg112 = 0;
42207 prev_reg113 = 0;
42208 prev_reg114 = 0;
42209 prev_reg115 = 0;
42210 prev_reg116 = 0;
42211 prev_reg117 = 0;
42212 prev_reg118 = 0;
42213 prev_reg119 = 0;
42214 prev_reg120 = 0;
42215 prev_reg121 = 0;
42216 prev_reg122 = 0;
42217 prev_reg123 = 0;
42218 prev_reg124 = 0;
42219 prev_reg125 = 0;
42220 prev_reg126 = 0;
42221 prev_reg127 = 0;
42222 prev_reg128 = 0;
42223 prev_reg129 = 0;
42224 prev_reg130 = 0;
42225 prev_reg131 = 0;
42226 prev_reg132 = 0;
42227 prev_reg133 = 0;
42228 prev_reg134 = 0;
42229 prev_reg135 = 0;
42230 prev_reg136 = 0;
42231 prev_reg137 = 0;
42232 prev_reg138 = 0;
42233 prev_reg139 = 0;
42234 prev_reg140 = 0;
42235 prev_reg141 = 0;
42236 prev_reg142 = 0;
42237 prev_reg143 = 0;
42238 prev_reg144 = 0;
42239 prev_reg145 = 0;
42240 prev_reg146 = 0;
42241 prev_reg147 = 0;
42242 prev_reg148 = 0;
42243 prev_reg149 = 0;
42244 prev_reg150 = 0;
42245 prev_reg151 = 0;
42246 prev_reg152 = 0;
42247 prev_reg153 = 0;
42248 prev_reg154 = 0;
42249 prev_reg155 = 0;
42250 prev_reg156 = 0;
42251 prev_reg157 = 0;
42252 prev_reg158 = 0;
42253 prev_reg159 = 0;
42254 prev_reg160 = 0;
42255 prev_reg161 = 0;
42256 prev_reg162 = 0;
42257 prev_reg163 = 0;
42258 prev_reg164 = 0;
42259 prev_reg165 = 0;
42260 prev_reg166 = 0;
42261 prev_reg167 = 0;
42262 prev_reg168 = 0;
42263 prev_reg169 = 0;
42264 prev_reg170 = 0;
42265 prev_reg171 = 0;
42266 prev_reg172 = 0;
42267 prev_reg173 = 0;
42268 prev_reg174 = 0;
42269 prev_reg175 = 0;
42270 prev_reg176 = 0;
42271 prev_reg177 = 0;
42272 prev_reg178 = 0;
42273 prev_reg179 = 0;
42274 prev_reg180 = 0;
42275 prev_reg181 = 0;
42276 prev_reg182 = 0;
42277 prev_reg183 = 0;
42278 prev_reg184 = 0;
42279 prev_reg185 = 0;
42280 prev_reg186 = 0;
42281 prev_reg187 = 0;
42282 prev_reg188 = 0;
42283 prev_reg189 = 0;
42284 prev_reg190 = 0;
42285 prev_reg191 = 0;
42286 prev_reg192 = 0;
42287 prev_reg193 = 0;
42288 prev_reg194 = 0;
42289 prev_reg195 = 0;
42290 prev_reg196 = 0;
42291 prev_reg197 = 0;
42292 prev_reg198 = 0;
42293 prev_reg199 = 0;
42294 prev_reg200 = 0;
42295 prev_reg201 = 0;
42296 prev_reg202 = 0;
42297 prev_reg203 = 0;
42298 prev_reg204 = 0;
42299 prev_reg205 = 0;
42300 prev_reg206 = 0;
42301 prev_reg207 = 0;
42302 prev_reg208 = 0;
42303 prev_reg209 = 0;
42304 prev_reg210 = 0;
42305 prev_reg211 = 0;
42306 prev_reg212 = 0;
42307 prev_reg213 = 0;
42308 prev_reg214 = 0;
42309 prev_reg215 = 0;
42310 prev_reg216 = 0;
42311 prev_reg217 = 0;
42312 prev_reg218 = 0;
42313 prev_reg219 = 0;
42314 prev_reg220 = 0;
42315 prev_reg221 = 0;
42316 prev_reg222 = 0;
42317 prev_reg223 = 0;
42318 prev_reg224 = 0;
42319 prev_reg225 = 0;
42320 prev_reg226 = 0;
42321 prev_reg227 = 0;
42322 prev_reg228 = 0;
42323 prev_reg229 = 0;
42324 prev_reg230 = 0;
42325 prev_reg231 = 0;
42326 prev_reg232 = 0;
42327 prev_reg233 = 0;
42328 prev_reg234 = 0;
42329 prev_reg235 = 0;
42330 prev_reg236 = 0;
42331 prev_reg237 = 0;
42332 prev_reg238 = 0;
42333 prev_reg239 = 0;
42334 prev_reg240 = 0;
42335 prev_reg241 = 0;
42336 prev_reg242 = 0;
42337 prev_reg243 = 0;
42338 prev_reg244 = 0;
42339 prev_reg245 = 0;
42340 prev_reg246 = 0;
42341 prev_reg247 = 0;
42342 prev_reg248 = 0;
42343 prev_reg249 = 0;
42344 prev_reg250 = 0;
42345 prev_reg251 = 0;
42346 prev_reg252 = 0;
42347 prev_reg253 = 0;
42348 prev_reg254 = 0;
42349 prev_reg255 = 0;
42350
42351 // POR for control registers
42352 write_prev(`FPRS +`CTL_OFFSET,3'h4);
42353 write_prev(`CLEANWIN +`CTL_OFFSET,3'h7);
42354 write_prev(`CANSAVE +`CTL_OFFSET,3'h6);
42355
42356 // POR for FPRS = 0x4
42357 write_prev(`FPRS+`CTL_OFFSET,3'h4);
42358
42359 // POR for PSTATE = 0x14 (PEF, PRIV = 1)
42360 write_prev(`PSTATE + `CTL_OFFSET,'h14);
42361
42362 // POR for HPSTATE = 0x4034 (RED, HPRIV = 1)
42363 write_prev(`HPSTATE + `CTL_OFFSET,'h24);
42364
42365 // POR for TL = = 0x6 [MAXTL]
42366 write_prev(`TL + `CTL_OFFSET,'h6);
42367
42368 // POR for TT6 = = 1
42369 write_prev(`TT6 + `CTL_OFFSET,'h1);
42370
42371 // POR for GL = MAXGL = 3
42372 write_prev(`GL + `CTL_OFFSET,`POR_GL);
42373
42374 // POR for VER = {003e, 0024, 01, 0036, 07}
42375 write_prev(`VER + `CTL_OFFSET,{32'h003e0024,VER_reg[31:24],24'h030607});
42376
42377 // POR for *_cmpr registers is INT_DIS = 1
42378 write_prev(`TICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
42379 write_prev(`STICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
42380 write_prev(`HSTICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
42381
42382 // Need to define so that 1st instruction will print correctly
42383 write_prev(`PC+`CTL_OFFSET,`POR_PC);
42384
42385 first_op = 1;
42386 pc_last = `BAD_PC;
42387
42388 `ifndef EMUL_TL
42389 delta_prev[`PC_INDEX] = `BAD_PC;
42390 `endif
42391
42392 irf_offset = (mytid%4)*32;
42393 in_wmr = 0;
42394 wmr <= 0;
42395end
42396
42397//----------------------------------------------------------
42398task wmr_prev;
42399 begin // {
42400
42401 // For WMR, we will set to 0x0, so that initial deltas
42402
42403 //
42404
42405 // WMR for PSTATE = 0x14 (PEF, PRIV = 1)
42406 // write_prev(`PSTATE + `CTL_OFFSET,'h00);
42407
42408 // WMR for HPSTATE = 0x4034 (RED, HPRIV = 1)
42409 // write_prev(`HPSTATE + `CTL_OFFSET,'h00);
42410
42411 // WMR for TL = = 0x6 [MAXTL]
42412 // write_prev(`TL + `CTL_OFFSET,'h0);
42413
42414 // WMR for TT6 = = 1
42415 // write_prev(`TT6 + `CTL_OFFSET,'h1);
42416
42417 // WMR for GL = MAXGL = 3
42418 // write_prev(`GL + `CTL_OFFSET,0);
42419
42420 end // }
42421endtask
42422
42423//----------------------------------------------------------
42424task por_prev;
42425 begin // {
42426
42427 // For POR, we will set to 0x0, so that initial deltas
42428 // and prev state are all consistent with DUT. No values
42429 // are preserved
42430
42431 `PR_ALWAYS ("arg", `ALWAYS,"T%0d Resetting Nas Pipe states for POR ..",mytnum);
42432 delta_fx4[`NEXT_INDEX] <= `FIRST_INDEX;
42433 delta_fx4[`FIRST_INDEX] <= 77'hx;
42434 delta_fx5[`NEXT_INDEX] <= `FIRST_INDEX;
42435 delta_fb[`NEXT_INDEX] <= `FIRST_INDEX;
42436 delta_fw[`NEXT_INDEX] <= `FIRST_INDEX;
42437 delta_fw1[`NEXT_INDEX] <= `FIRST_INDEX;
42438 delta_fw2[`NEXT_INDEX] <= `FIRST_INDEX;
42439 // Window registers
42440 win0_reg8 = 0;
42441 win1_reg8 = 0;
42442 win2_reg8 = 0;
42443 win3_reg8 = 0;
42444 win4_reg8 = 0;
42445 win5_reg8 = 0;
42446 win6_reg8 = 0;
42447 win7_reg8 = 0;
42448 win0_reg9 = 0;
42449 win1_reg9 = 0;
42450 win2_reg9 = 0;
42451 win3_reg9 = 0;
42452 win4_reg9 = 0;
42453 win5_reg9 = 0;
42454 win6_reg9 = 0;
42455 win7_reg9 = 0;
42456 win0_reg10 = 0;
42457 win1_reg10 = 0;
42458 win2_reg10 = 0;
42459 win3_reg10 = 0;
42460 win4_reg10 = 0;
42461 win5_reg10 = 0;
42462 win6_reg10 = 0;
42463 win7_reg10 = 0;
42464 win0_reg11 = 0;
42465 win1_reg11 = 0;
42466 win2_reg11 = 0;
42467 win3_reg11 = 0;
42468 win4_reg11 = 0;
42469 win5_reg11 = 0;
42470 win6_reg11 = 0;
42471 win7_reg11 = 0;
42472 win0_reg12 = 0;
42473 win1_reg12 = 0;
42474 win2_reg12 = 0;
42475 win3_reg12 = 0;
42476 win4_reg12 = 0;
42477 win5_reg12 = 0;
42478 win6_reg12 = 0;
42479 win7_reg12 = 0;
42480 win0_reg13 = 0;
42481 win1_reg13 = 0;
42482 win2_reg13 = 0;
42483 win3_reg13 = 0;
42484 win4_reg13 = 0;
42485 win5_reg13 = 0;
42486 win6_reg13 = 0;
42487 win7_reg13 = 0;
42488 win0_reg14 = 0;
42489 win1_reg14 = 0;
42490 win2_reg14 = 0;
42491 win3_reg14 = 0;
42492 win4_reg14 = 0;
42493 win5_reg14 = 0;
42494 win6_reg14 = 0;
42495 win7_reg14 = 0;
42496 win0_reg15 = 0;
42497 win1_reg15 = 0;
42498 win2_reg15 = 0;
42499 win3_reg15 = 0;
42500 win4_reg15 = 0;
42501 win5_reg15 = 0;
42502 win6_reg15 = 0;
42503 win7_reg15 = 0;
42504 win0_reg16 = 0;
42505 win1_reg16 = 0;
42506 win2_reg16 = 0;
42507 win3_reg16 = 0;
42508 win4_reg16 = 0;
42509 win5_reg16 = 0;
42510 win6_reg16 = 0;
42511 win7_reg16 = 0;
42512 win0_reg17 = 0;
42513 win1_reg17 = 0;
42514 win2_reg17 = 0;
42515 win3_reg17 = 0;
42516 win4_reg17 = 0;
42517 win5_reg17 = 0;
42518 win6_reg17 = 0;
42519 win7_reg17 = 0;
42520 win0_reg18 = 0;
42521 win1_reg18 = 0;
42522 win2_reg18 = 0;
42523 win3_reg18 = 0;
42524 win4_reg18 = 0;
42525 win5_reg18 = 0;
42526 win6_reg18 = 0;
42527 win7_reg18 = 0;
42528 win0_reg19 = 0;
42529 win1_reg19 = 0;
42530 win2_reg19 = 0;
42531 win3_reg19 = 0;
42532 win4_reg19 = 0;
42533 win5_reg19 = 0;
42534 win6_reg19 = 0;
42535 win7_reg19 = 0;
42536 win0_reg20 = 0;
42537 win1_reg20 = 0;
42538 win2_reg20 = 0;
42539 win3_reg20 = 0;
42540 win4_reg20 = 0;
42541 win5_reg20 = 0;
42542 win6_reg20 = 0;
42543 win7_reg20 = 0;
42544 win0_reg21 = 0;
42545 win1_reg21 = 0;
42546 win2_reg21 = 0;
42547 win3_reg21 = 0;
42548 win4_reg21 = 0;
42549 win5_reg21 = 0;
42550 win6_reg21 = 0;
42551 win7_reg21 = 0;
42552 win0_reg22 = 0;
42553 win1_reg22 = 0;
42554 win2_reg22 = 0;
42555 win3_reg22 = 0;
42556 win4_reg22 = 0;
42557 win5_reg22 = 0;
42558 win6_reg22 = 0;
42559 win7_reg22 = 0;
42560 win0_reg23 = 0;
42561 win1_reg23 = 0;
42562 win2_reg23 = 0;
42563 win3_reg23 = 0;
42564 win4_reg23 = 0;
42565 win5_reg23 = 0;
42566 win6_reg23 = 0;
42567 win7_reg23 = 0;
42568 win0_reg24 = 0;
42569 win1_reg24 = 0;
42570 win2_reg24 = 0;
42571 win3_reg24 = 0;
42572 win4_reg24 = 0;
42573 win5_reg24 = 0;
42574 win6_reg24 = 0;
42575 win7_reg24 = 0;
42576 win0_reg25 = 0;
42577 win1_reg25 = 0;
42578 win2_reg25 = 0;
42579 win3_reg25 = 0;
42580 win4_reg25 = 0;
42581 win5_reg25 = 0;
42582 win6_reg25 = 0;
42583 win7_reg25 = 0;
42584 win0_reg26 = 0;
42585 win1_reg26 = 0;
42586 win2_reg26 = 0;
42587 win3_reg26 = 0;
42588 win4_reg26 = 0;
42589 win5_reg26 = 0;
42590 win6_reg26 = 0;
42591 win7_reg26 = 0;
42592 win0_reg27 = 0;
42593 win1_reg27 = 0;
42594 win2_reg27 = 0;
42595 win3_reg27 = 0;
42596 win4_reg27 = 0;
42597 win5_reg27 = 0;
42598 win6_reg27 = 0;
42599 win7_reg27 = 0;
42600 win0_reg28 = 0;
42601 win1_reg28 = 0;
42602 win2_reg28 = 0;
42603 win3_reg28 = 0;
42604 win4_reg28 = 0;
42605 win5_reg28 = 0;
42606 win6_reg28 = 0;
42607 win7_reg28 = 0;
42608 win0_reg29 = 0;
42609 win1_reg29 = 0;
42610 win2_reg29 = 0;
42611 win3_reg29 = 0;
42612 win4_reg29 = 0;
42613 win5_reg29 = 0;
42614 win6_reg29 = 0;
42615 win7_reg29 = 0;
42616 win0_reg30 = 0;
42617 win1_reg30 = 0;
42618 win2_reg30 = 0;
42619 win3_reg30 = 0;
42620 win4_reg30 = 0;
42621 win5_reg30 = 0;
42622 win6_reg30 = 0;
42623 win7_reg30 = 0;
42624 win0_reg31 = 0;
42625 win1_reg31 = 0;
42626 win2_reg31 = 0;
42627 win3_reg31 = 0;
42628 win4_reg31 = 0;
42629 win5_reg31 = 0;
42630 win6_reg31 = 0;
42631 win7_reg31 = 0;
42632
42633 // Global registers
42634 th_gl = `POR_GL;
42635 gl0_reg0 = 0;
42636 gl1_reg0 = 0;
42637 gl2_reg0 = 0;
42638 gl3_reg0 = 0;
42639 gl0_reg1 = 0;
42640 gl1_reg1 = 0;
42641 gl2_reg1 = 0;
42642 gl3_reg1 = 0;
42643 gl0_reg2 = 0;
42644 gl1_reg2 = 0;
42645 gl2_reg2 = 0;
42646 gl3_reg2 = 0;
42647 gl0_reg3 = 0;
42648 gl1_reg3 = 0;
42649 gl2_reg3 = 0;
42650 gl3_reg3 = 0;
42651 gl0_reg4 = 0;
42652 gl1_reg4 = 0;
42653 gl2_reg4 = 0;
42654 gl3_reg4 = 0;
42655 gl0_reg5 = 0;
42656 gl1_reg5 = 0;
42657 gl2_reg5 = 0;
42658 gl3_reg5 = 0;
42659 gl0_reg6 = 0;
42660 gl1_reg6 = 0;
42661 gl2_reg6 = 0;
42662 gl3_reg6 = 0;
42663 gl0_reg7 = 0;
42664 gl1_reg7 = 0;
42665 gl2_reg7 = 0;
42666 gl3_reg7 = 0;
42667
42668 `PR_INFO ("nas", `INFO, "T%0d Init shadow registers.",mytnum);
42669 prev_reg0 = 0;
42670 prev_reg1 = 0;
42671 prev_reg2 = 0;
42672 prev_reg3 = 0;
42673 prev_reg4 = 0;
42674 prev_reg5 = 0;
42675 prev_reg6 = 0;
42676 prev_reg7 = 0;
42677 prev_reg8 = 0;
42678 prev_reg9 = 0;
42679 prev_reg10 = 0;
42680 prev_reg11 = 0;
42681 prev_reg12 = 0;
42682 prev_reg13 = 0;
42683 prev_reg14 = 0;
42684 prev_reg15 = 0;
42685 prev_reg16 = 0;
42686 prev_reg17 = 0;
42687 prev_reg18 = 0;
42688 prev_reg19 = 0;
42689 prev_reg20 = 0;
42690 prev_reg21 = 0;
42691 prev_reg22 = 0;
42692 prev_reg23 = 0;
42693 prev_reg24 = 0;
42694 prev_reg25 = 0;
42695 prev_reg26 = 0;
42696 prev_reg27 = 0;
42697 prev_reg28 = 0;
42698 prev_reg29 = 0;
42699 prev_reg30 = 0;
42700 prev_reg31 = 0;
42701 prev_reg32 = 0;
42702 prev_reg33 = 0;
42703 prev_reg34 = 0;
42704 prev_reg35 = 0;
42705 prev_reg36 = 0;
42706 prev_reg37 = 0;
42707 prev_reg38 = 0;
42708 prev_reg39 = 0;
42709 prev_reg40 = 0;
42710 prev_reg41 = 0;
42711 prev_reg42 = 0;
42712 prev_reg43 = 0;
42713 prev_reg44 = 0;
42714 prev_reg45 = 0;
42715 prev_reg46 = 0;
42716 prev_reg47 = 0;
42717 prev_reg48 = 0;
42718 prev_reg49 = 0;
42719 prev_reg50 = 0;
42720 prev_reg51 = 0;
42721 prev_reg52 = 0;
42722 prev_reg53 = 0;
42723 prev_reg54 = 0;
42724 prev_reg55 = 0;
42725 prev_reg56 = 0;
42726 prev_reg57 = 0;
42727 prev_reg58 = 0;
42728 prev_reg59 = 0;
42729 prev_reg60 = 0;
42730 prev_reg61 = 0;
42731 prev_reg62 = 0;
42732 prev_reg63 = 0;
42733 prev_reg64 = 0;
42734 prev_reg65 = 0;
42735 prev_reg66 = 0;
42736 prev_reg67 = 0;
42737 prev_reg68 = 0;
42738 prev_reg69 = 0;
42739 prev_reg70 = 0;
42740 prev_reg71 = 0;
42741 prev_reg72 = 0;
42742 prev_reg73 = 0;
42743 prev_reg74 = 0;
42744 prev_reg75 = 0;
42745 prev_reg76 = 0;
42746 prev_reg77 = 0;
42747 prev_reg78 = 0;
42748 prev_reg79 = 0;
42749 prev_reg80 = 0;
42750 prev_reg81 = 0;
42751 prev_reg82 = 0;
42752 prev_reg83 = 0;
42753 prev_reg84 = 0;
42754 prev_reg85 = 0;
42755 prev_reg86 = 0;
42756 prev_reg87 = 0;
42757 prev_reg88 = 0;
42758 prev_reg89 = 0;
42759 prev_reg90 = 0;
42760 prev_reg91 = 0;
42761 prev_reg92 = 0;
42762 prev_reg93 = 0;
42763 prev_reg94 = 0;
42764 prev_reg95 = 0;
42765 prev_reg96 = 0;
42766 prev_reg97 = 0;
42767 prev_reg98 = 0;
42768 prev_reg99 = 0;
42769 prev_reg100 = 0;
42770 prev_reg101 = 0;
42771 prev_reg102 = 0;
42772 prev_reg103 = 0;
42773 prev_reg104 = 0;
42774 prev_reg105 = 0;
42775 prev_reg106 = 0;
42776 prev_reg107 = 0;
42777 prev_reg108 = 0;
42778 prev_reg109 = 0;
42779 prev_reg110 = 0;
42780 prev_reg111 = 0;
42781 prev_reg112 = 0;
42782 prev_reg113 = 0;
42783 prev_reg114 = 0;
42784 prev_reg115 = 0;
42785 prev_reg116 = 0;
42786 prev_reg117 = 0;
42787 prev_reg118 = 0;
42788 prev_reg119 = 0;
42789 prev_reg120 = 0;
42790 prev_reg121 = 0;
42791 prev_reg122 = 0;
42792 prev_reg123 = 0;
42793 prev_reg124 = 0;
42794 prev_reg125 = 0;
42795 prev_reg126 = 0;
42796 prev_reg127 = 0;
42797 prev_reg128 = 0;
42798 prev_reg129 = 0;
42799 prev_reg130 = 0;
42800 prev_reg131 = 0;
42801 prev_reg132 = 0;
42802 prev_reg133 = 0;
42803 prev_reg134 = 0;
42804 prev_reg135 = 0;
42805 prev_reg136 = 0;
42806 prev_reg137 = 0;
42807 prev_reg138 = 0;
42808 prev_reg139 = 0;
42809 prev_reg140 = 0;
42810 prev_reg141 = 0;
42811 prev_reg142 = 0;
42812 prev_reg143 = 0;
42813 prev_reg144 = 0;
42814 prev_reg145 = 0;
42815 prev_reg146 = 0;
42816 prev_reg147 = 0;
42817 prev_reg148 = 0;
42818 prev_reg149 = 0;
42819 prev_reg150 = 0;
42820 prev_reg151 = 0;
42821 prev_reg152 = 0;
42822 prev_reg153 = 0;
42823 prev_reg154 = 0;
42824 prev_reg155 = 0;
42825 prev_reg156 = 0;
42826 prev_reg157 = 0;
42827 prev_reg158 = 0;
42828 prev_reg159 = 0;
42829 prev_reg160 = 0;
42830 prev_reg161 = 0;
42831 prev_reg162 = 0;
42832 prev_reg163 = 0;
42833 prev_reg164 = 0;
42834 prev_reg165 = 0;
42835 prev_reg166 = 0;
42836 prev_reg167 = 0;
42837 prev_reg168 = 0;
42838 prev_reg169 = 0;
42839 prev_reg170 = 0;
42840 prev_reg171 = 0;
42841 prev_reg172 = 0;
42842 prev_reg173 = 0;
42843 prev_reg174 = 0;
42844 prev_reg175 = 0;
42845 prev_reg176 = 0;
42846 prev_reg177 = 0;
42847 prev_reg178 = 0;
42848 prev_reg179 = 0;
42849 prev_reg180 = 0;
42850 prev_reg181 = 0;
42851 prev_reg182 = 0;
42852 prev_reg183 = 0;
42853 prev_reg184 = 0;
42854 prev_reg185 = 0;
42855 prev_reg186 = 0;
42856 prev_reg187 = 0;
42857 prev_reg188 = 0;
42858 prev_reg189 = 0;
42859 prev_reg190 = 0;
42860 prev_reg191 = 0;
42861 prev_reg192 = 0;
42862 prev_reg193 = 0;
42863 prev_reg194 = 0;
42864 prev_reg195 = 0;
42865 prev_reg196 = 0;
42866 prev_reg197 = 0;
42867 prev_reg198 = 0;
42868 prev_reg199 = 0;
42869 prev_reg200 = 0;
42870 prev_reg201 = 0;
42871 prev_reg202 = 0;
42872 prev_reg203 = 0;
42873 prev_reg204 = 0;
42874 prev_reg205 = 0;
42875 prev_reg206 = 0;
42876 prev_reg207 = 0;
42877 prev_reg208 = 0;
42878 prev_reg209 = 0;
42879 prev_reg210 = 0;
42880 prev_reg211 = 0;
42881 prev_reg212 = 0;
42882 prev_reg213 = 0;
42883 prev_reg214 = 0;
42884 prev_reg215 = 0;
42885 prev_reg216 = 0;
42886 prev_reg217 = 0;
42887 prev_reg218 = 0;
42888 prev_reg219 = 0;
42889 prev_reg220 = 0;
42890 prev_reg221 = 0;
42891 prev_reg222 = 0;
42892 prev_reg223 = 0;
42893 prev_reg224 = 0;
42894 prev_reg225 = 0;
42895 prev_reg226 = 0;
42896 prev_reg227 = 0;
42897 prev_reg228 = 0;
42898 prev_reg229 = 0;
42899 prev_reg230 = 0;
42900 prev_reg231 = 0;
42901 prev_reg232 = 0;
42902 prev_reg233 = 0;
42903 prev_reg234 = 0;
42904 prev_reg235 = 0;
42905 prev_reg236 = 0;
42906 prev_reg237 = 0;
42907 prev_reg238 = 0;
42908 prev_reg239 = 0;
42909 prev_reg240 = 0;
42910 prev_reg241 = 0;
42911 prev_reg242 = 0;
42912 prev_reg243 = 0;
42913 prev_reg244 = 0;
42914 prev_reg245 = 0;
42915 prev_reg246 = 0;
42916 prev_reg247 = 0;
42917 prev_reg248 = 0;
42918 prev_reg249 = 0;
42919 prev_reg250 = 0;
42920 prev_reg251 = 0;
42921 prev_reg252 = 0;
42922 prev_reg253 = 0;
42923 prev_reg254 = 0;
42924 prev_reg255 = 0;
42925
42926 // POR for control registers
42927 write_prev(`FPRS +`CTL_OFFSET,3'h4);
42928 write_prev(`CLEANWIN +`CTL_OFFSET,3'h7);
42929 write_prev(`CANSAVE +`CTL_OFFSET,3'h6);
42930
42931 // POR for FPRS = 0x4
42932 write_prev(`FPRS+`CTL_OFFSET,3'h4);
42933
42934 // POR for PSTATE = 0x14 (PEF, PRIV = 1)
42935 write_prev(`PSTATE + `CTL_OFFSET,'h14);
42936
42937 // POR for HPSTATE = 0x4034 (RED, HPRIV = 1)
42938 write_prev(`HPSTATE + `CTL_OFFSET,'h24);
42939
42940 // POR for TL = = 0x6 [MAXTL]
42941 write_prev(`TL + `CTL_OFFSET,'h6);
42942
42943 // POR for TT6 = = 1
42944 write_prev(`TT6 + `CTL_OFFSET,'h1);
42945
42946 // POR for GL = MAXGL = 3
42947 write_prev(`GL + `CTL_OFFSET,`POR_GL);
42948
42949 // POR for VER = {003e, 0024, 01, 0036, 07}
42950 write_prev(`VER + `CTL_OFFSET,64'h003e002410030607);
42951
42952 // POR for *_cmpr registers is INT_DIS = 1
42953 write_prev(`TICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
42954 write_prev(`STICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
42955 write_prev(`HSTICK_CMPR + `CTL_OFFSET,64'h8000000000000000);
42956
42957 // Need to define so that 1st instruction will print correctly
42958 write_prev(`PC+`CTL_OFFSET,`POR_PC);
42959
42960 first_op = 1;
42961 pc_last = `BAD_PC;
42962
42963 end // }
42964endtask
42965
42966//----------------------------------------------------------
42967//----------------------------------------------------------
42968 `else // GATESIM
42969
42970// Watch for Good/Bad trap
42971
42972wire [5:0] mytnum = (mycid*8)+mytid;
42973wire mytg = mytid >> 2;
42974integer junk;
42975reg nas_pipe_enable;
42976
42977integer inst_count;
42978
42979 // Delimiter changes whether flat or hierarchical netlist
42980 `ifdef GATES_FLAT
42981 wire myclk = tb_top.cpu.spc7.gclk;
42982 wire dec_inst_valid_m = mytg ? tb_top.cpu.spc7.dec_inst_valid_m[1] : tb_top.cpu.spc7.dec_inst_valid_m[0];
42983 wire [1:0] dec_tid_m = mytg ? tb_top.cpu.spc7.dec_tid1_m : tb_top.cpu.spc7.dec_tid0_m;
42984 wire dec_flush_b = mytg ? tb_top.cpu.spc7.dec_flush_b[1] : tb_top.cpu.spc7.dec_flush_b[0];
42985 wire tlu_flush_ifu = tb_top.cpu.spc7.tlu_flush_ifu[mytid];
42986 wire [47:0] pc_d = mytg ? {tb_top.cpu.spc7.tlu_pc_1_d[47:2],2'b0} : {tb_top.cpu.spc7.tlu_pc_0_d[47:2],2'b0};
42987 wire [31:0] op_d = mytg ? tb_top.cpu.spc7.dec_inst1_d[31:0] : tb_top.cpu.spc7.dec_inst0_d[31:0];
42988 `else
42989 wire myclk = tb_top.cpu.spc7.gclk;
42990 wire dec_inst_valid_m = mytg ? tb_top.cpu.spc7.dec_inst_valid_m[1] : tb_top.cpu.spc7.dec_inst_valid_m[0];
42991 wire [1:0] dec_tid_m = mytg ? tb_top.cpu.spc7.dec_tid1_m : tb_top.cpu.spc7.dec_tid0_m;
42992 wire dec_flush_b = mytg ? tb_top.cpu.spc7.dec_flush_b[1] : tb_top.cpu.spc7.dec_flush_b[0];
42993 wire tlu_flush_ifu = tb_top.cpu.spc7.tlu_flush_ifu[mytid];
42994 wire [47:0] pc_d = mytg ? {tb_top.cpu.spc7.tlu_pc_1_d[47:2],2'b0} : {tb_top.cpu.spc7.tlu_pc_0_d[47:2],2'b0};
42995 wire [31:0] op_d = mytg ? tb_top.cpu.spc7.dec_inst1_d[31:0] : tb_top.cpu.spc7.dec_inst0_d[31:0];
42996 `endif
42997
42998 reg dec_inst_valid_b;
42999 reg [1:0] dec_tid_b;
43000
43001 reg inst_valid_w;
43002 reg inst_valid_fx4;
43003 reg inst_valid_fx5;
43004 reg inst_valid_fb;
43005 reg inst_valid_fw;
43006 reg inst_valid_fw1;
43007 reg inst_valid_fw2;
43008 reg [47:0] pc_e;
43009 reg [47:0] pc_m;
43010 reg [47:0] pc_b;
43011 reg [47:0] pc_w;
43012 reg [47:0] pc_fx4;
43013 reg [47:0] pc_fx5;
43014 reg [47:0] pc_fb;
43015 reg [47:0] pc_fw;
43016 reg [47:0] pc_fw1;
43017 reg [47:0] pc_fw2;
43018 reg [31:0] op_e;
43019 reg [31:0] op_m;
43020 reg [31:0] op_b;
43021 reg [31:0] op_w;
43022 reg [31:0] op_fx4;
43023 reg [31:0] op_fx5;
43024 reg [31:0] op_fb;
43025 reg [31:0] op_fw;
43026 reg [31:0] op_fw1;
43027 reg [31:0] op_fw2;
43028
43029 wire inst_valid_b = dec_inst_valid_b && (dec_tid_b==mytid[1:0]) && !(dec_flush_b || tlu_flush_ifu);
43030
43031initial begin // {
43032 inst_count = 1;
43033 nas_pipe_enable = 1;
43034end // }
43035
43036
43037always @ (posedge myclk) begin // {
43038
43039 dec_inst_valid_b <= dec_inst_valid_m;
43040 dec_tid_b <= dec_tid_m;
43041 op_e <= op_d;
43042 op_m <= op_e;
43043 op_b <= op_m;
43044 op_w <= op_b;
43045 op_fx4 <= op_w;
43046 op_fx5 <= op_fx4;
43047 op_fb <= op_fx5;
43048 op_fw <= op_fb;
43049 op_fw1 <= op_fw;
43050 op_fw2 <= op_fw1;
43051 pc_e <= pc_d;
43052 pc_m <= pc_e;
43053 pc_b <= pc_m;
43054 pc_w <= pc_b;
43055 pc_fx4 <= pc_w;
43056 pc_fx5 <= pc_fx4;
43057 pc_fb <= pc_fx5;
43058 pc_fw <= pc_fb;
43059 pc_fw1 <= pc_fw;
43060 pc_fw2 <= pc_fw1;
43061 inst_valid_w <= inst_valid_b;
43062 inst_valid_fx4 <= inst_valid_w;
43063 inst_valid_fx5 <= inst_valid_fx4;
43064 inst_valid_fb <= inst_valid_fx5;
43065 inst_valid_fw <= inst_valid_fb;
43066 inst_valid_fw1 <= inst_valid_fw;
43067 inst_valid_fw2 <= inst_valid_fw1;
43068
43069 if (`PARGS.th_check_enable[mytnum] && nas_pipe_enable) begin // {
43070
43071 if (inst_valid_fw2) begin // {
43072
43073 // Print PC/opcode for debugging
43074 `PR_NORMAL ("nas", `NORMAL, "@%0d #%0d T%0d %h [%h]", $time, inst_count, mytnum, pc_fw2, op_fw2);
43075 inst_count = inst_count + 1;
43076
43077 //----------
43078 // End detection for GateSim runs
43079 for (junk=0;junk<`PARGS.bad_trap_count;junk=junk+1) begin // {
43080 if (({16'b0,pc_fw2}&`PC_MASK)===(`PARGS.bad_trap_addr[junk]&`PC_MASK)) begin // {
43081 `PR_ERROR ("nas",`ERROR, "T%0d reached Bad Trap [GATESIM]", mytnum);
43082 nas_pipe_enable = 1'b0;
43083 end //}
43084 end //}
43085 for (junk=0;junk<`PARGS.good_trap_count;junk=junk+1) begin // {
43086 if (({16'b0,pc_fw2}&`PC_MASK)===(`PARGS.good_trap_addr[junk]&`PC_MASK)) begin // {
43087 `TOP.finished_tids[mytnum] = 1'b1;
43088 `PARGS.th_check_enable[mytnum] = 1'b0;
43089 nas_pipe_enable = 1'b0;
43090 `PR_NORMAL ("nas", `NORMAL, "T%0d reached Good Trap. Disabling checking for thread %0d [GATESIM]", mytnum,mytnum);
43091 end //}
43092 end //}
43093
43094 end // }
43095 end // }
43096
43097end //}
43098
43099
43100`endif
43101
43102endmodule
43103//----------------------------------------------------------
43104//----------------------------------------------------------
43105
43106`endif
43107
43108