Initial commit of OpenSPARC T2 design and verification files.
[OpenSPARC-T2-DV] / verif / env / ilu_peu / vera / context / ilupeuEgressContext.vr
CommitLineData
86530b38
AT
1// ========== Copyright Header Begin ==========================================
2//
3// OpenSPARC T2 Processor File: ilupeuEgressContext.vr
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 ============================================
35class ilupeuEgressContext extends ilupeuContextBase {
36
37
38 //Inherited from CTContextBase
39 //integer NumStrat;
40 //string Name = "";
41 //protected CTTransactionID ID = new;
42
43
44 // Strategy Type Encoding
45 protected integer strat_type_tlp_enc;
46 protected integer strat_type_dllp_enc;
47
48 local bit HangDetect = 0;
49 local integer WaitCount;
50
51 // Constructor
52 task new ( ReportClass _Report,
53 CSRCollection _CSR,
54 ilupeuPodClass _Pod, //Xactors
55 ilupeuScenario _Scenario ); //Xactors
56
57 // Public Methods
58 task Execute();
59
60
61 function CTStrategyBase ProvideTlpStrategy();
62 function CTStrategyBase ProvideDllpStrategy();
63 function CTStrategyBase FinalizeTlpParms( CTStrategyBase FinalStrategy );
64 function CTStrategyBase FinalizeDllpParms( CTStrategyBase FinalStrategy );
65
66} //End ilupeuEgressContext extends CTContextBase
67
68task ilupeuEgressContext::new ( ReportClass _Report,
69 CSRCollection _CSR,
70 ilupeuPodClass _Pod,
71 ilupeuScenario _Scenario)
72{
73
74 string Name = "ilupeuEgressContext" ;
75
76 super.new ( _Report,
77 _CSR,
78 _Pod,
79 _Scenario,
80 Name );
81
82
83} //End ilupeuEgressContext::new
84
85function CTStrategyBase ilupeuEgressContext::ProvideTlpStrategy()
86{
87 // All Supported TLP Strategies Should Be Listed Here
88 ilupeuEgressTlpStrategy TlpStrat;
89
90 //Provide the strategy based on test parameters
91 randcase{
92
93 Scenario.EgrTlpWt: {
94
95 strat_type_tlp_enc = ILUPEU_TLP_STRAT_ENC;
96 TlpStrat = new ( Report,
97 CSR,
98 Pod,
99 Scenario ) ;
100
101 ProvideTlpStrategy = TlpStrat;
102 }
103 }
104} //End ilupeuEgressContext::ProvideTlpStrategy()
105
106
107function CTStrategyBase ilupeuEgressContext::ProvideDllpStrategy()
108{
109/* review
110 // All Supported DLLP Strategies Should Be Listed Here
111 ilupeuEgressDllpFCStrategy DllpFCStrat;
112// ilupeuEgressDllpPMStrategy DllpPMStrat;
113
114 //Provide the strategy based on test parameters
115 randcase{
116 Scenario.EgrDllpFCWt: {
117
118 strat_type_dllp_enc = ILUPEU_DLLP_FC_STRAT_ENC;
119 DllpFCStrat = new ( Report,
120 CSR,
121 Pod,
122 Scenario ) ;
123
124 ProvideDllpStrategy = DllpFCStrat;
125 }
126
127 Scenario.EgrDllpPMWt: {
128
129 strat_type_dllp_enc = ILUPEU_DLLP_PM_STRAT_ENC;
130 DllpPMStrat = new ( Report,
131 CSR,
132 Pod,
133 Scenario ) ;
134
135 ProvideDllpStrategy = DllpPMStrat;
136 }
137 }
138*/
139} //End ilupeuEgressContext::ProvideDllpStrategy()
140
141function CTStrategyBase ilupeuEgressContext::FinalizeTlpParms( CTStrategyBase FinalStrategy )
142{
143
144 // All Supported TLP Strategies Should Be Listed Here
145 ilupeuEgressTlpStrategy TlpStrat;
146
147 //Cast assign to the correct Type
148 case( strat_type_tlp_enc ){
149 ILUPEU_TLP_STRAT_ENC : cast_assign( TlpStrat, FinalStrategy );
150
151 default : QuickReport( Report, RTYP_TEST_ERROR,
152 "ilupeuEgressContext FinalizeTlpParms() -> hit default case strat_type_tlp_enc=%0d",
153 strat_type_tlp_enc );
154 }
155
156 //Set up Necessary Parameters
157 case( strat_type_tlp_enc ){
158 ILUPEU_TLP_STRAT_ENC : FinalizeTlpParms = TlpStrat;
159 }
160
161} //End ilupeuEgressContext::FinalizeParms
162
163
164function CTStrategyBase ilupeuEgressContext::FinalizeDllpParms( CTStrategyBase FinalStrategy )
165{
166/*
167 // All Supported DLLP Strategies Should Be Listed Here
168//review - Will allow ilupeu and denali to handle all flow control
169 ilupeuEgressDllpFCStrategy DllpFCStrat;
170// ilupeuEgressDllpPMStrategy DllpPMStrat;
171
172 //Cast assign to the correct Type
173 case( strat_type_dllp_enc ){
174 ILUPEU_DLLP_FC_STRAT_ENC : cast_assign( DllpFCStrat, FinalStrategy );
175// ILUPEU_DLLP_PM_STRAT_ENC : cast_assign( DllpPMStrat, FinalStrategy );
176
177 default : QuickReport( Report, RTYP_TEST_ERROR,
178 "ilupeuEgressContext FinalizeDllpParms() -> hit default case strat_type_dllp_enc=%0d",
179 strat_type_dllp_enc );
180 }
181
182 //Set up Necessary Parameters
183 case( strat_type_dllp_enc ){
184 ILUPEU_DLLP_FC_STRAT_ENC : FinalizeDllpParms = DllpFCStrat;
185// ILUPEU_DLLP_PM_STRAT_ENC : FinalizeDllpParms = DllpPMStrat;
186 }
187*/
188} //End ilupeuEgressContext::FinalizeDllpParms
189
190task ilupeuEgressContext::Execute() {
191
192 //Determine the number of strategies for each type
193 tlpNumStrat = RandUtil.Rand32( Scenario.EgrTlpMinStrats, Scenario.EgrTlpMaxStrats );
194 dllpNumStrat = RandUtil.Rand32( Scenario.EgrDllpMinStrats, Scenario.EgrDllpMaxStrats );
195
196 //Set the min and max issue delay values
197 tlpMinDelay = Scenario.EgrTlpMinIssueDly;
198 tlpMaxDelay = Scenario.EgrTlpMaxIssueDly;
199 dllpMinDelay = Scenario.EgrDllpMinIssueDly;
200 dllpMaxDelay = Scenario.EgrDllpMaxIssueDly;
201
202 //Set the min and max active strats values
203 tlpMinActiveStrats = Scenario.EgrTlpMinActiveStrats;
204 tlpMaxActiveStrats = Scenario.EgrTlpMaxActiveStrats;
205 dllpMinActiveStrats = Scenario.EgrDllpMinActiveStrats;
206 dllpMaxActiveStrats = Scenario.EgrDllpMaxActiveStrats;
207
208 QuickReport( Report,RTYP_INFO, "Starting Context %s ID = %0d tlpNumStrat=%0d dllpNumStrat=%0d",
209 Name, ID.GetContextID(), tlpNumStrat,dllpNumStrat );
210
211 //Fork off a seperate thread for TLP's and DLLP's for better control
212 fork
213 {
214 if( tlpNumStrat > 0 && Scenario.EgrTlpWt > 0 ){
215 ExecuteTlp();
216 }
217 }
218 {
219 if( dllpNumStrat > 0 && ( Scenario.EgrDllpFCWt > 0 || Scenario.EgrDllpPMWt > 0 ) ){
220 ExecuteDllp();
221 }
222 }
223 join
224
225 //Delay to let any Report Errors filter through
226 repeat(20) @(posedge CLOCK);
227
228 QuickReport( Report,RTYP_INFO, "Finishing Context %s ID = %0d",
229 Name,
230 ID.GetContextID() );
231
232}
233
234