Commit | Line | Data |
---|---|---|
86530b38 AT |
1 | // ========== Copyright Header Begin ========================================== |
2 | // | |
3 | // OpenSPARC T2 Processor File: FNXPCIEXactorTransaction.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 ============================================ | |
35 | #include <vera_defines.vrh> | |
36 | #include "XactorUtilities.vrh" | |
37 | #include "XactorBaseTransaction.vrh" | |
38 | #include "XactorBaseBuilder.vrh" | |
39 | #include "XactorClk.port.vri" | |
40 | ||
41 | class FNXPCIEXactorTransaction extends XactorBaseTransaction { | |
42 | ||
43 | // inherited members | |
44 | // string XactorName | |
45 | // XactorBasePacket Packet | |
46 | // XactorBaseManager Manager | |
47 | // XactorBaseSignalInterface SignalInterface | |
48 | // ReportClass MyReport | |
49 | ||
50 | // Base Class and Method Names For QR Macros | |
51 | local string ClassName = "FNXPCIEXactorTransaction"; | |
52 | local string MethodName = null; | |
53 | ||
54 | FNXPCIEXactorPacket MyPacket; | |
55 | ||
56 | protected FNXPCIEXactorSignalInterface MySignalInterface; | |
57 | protected FNXPCIEXactorManager MyManager; | |
58 | protected FNXPCIEXactorUtilities Util; | |
59 | protected FNXPCIEXactorFCEngine FCEngine; | |
60 | protected XactorClk clock; | |
61 | ||
62 | // SelfExpect members | |
63 | bit SelfExpectEnable = 1'b0; | |
64 | integer MinSelfExpectDly = 0; | |
65 | integer MaxSelfExpectDly = 50; | |
66 | ||
67 | ||
68 | // constructor | |
69 | task new( FNXPCIEXactorBuilder Builder ); | |
70 | ||
71 | virtual task SetID( CTTransactionID XactionID ); | |
72 | virtual function CTTransactionID GetID(); | |
73 | virtual task SetPacket( string FieldType, bit [ XACT_FIELD_WIDTH-1:0 ] FieldValue ); | |
74 | virtual task EnableExpects(); | |
75 | virtual task DisableExpects(); | |
76 | virtual task DisableExpectsTimeout(); | |
77 | virtual task EnableExpectsTimeout(); | |
78 | virtual task EnableTlpDiscard(); | |
79 | virtual task DisableTlpDiscard(); | |
80 | virtual task EnableReplayMonitor(); | |
81 | virtual task DisableReplayMonitor(); | |
82 | virtual function bit [ XACT_FIELD_WIDTH-1:0 ] GetPacket( string FieldType ); | |
83 | virtual task ResetPacket(); | |
84 | virtual task ZeroPacket(); | |
85 | virtual task CopyPacket( FNXPCIEXactorTransaction PktTrans ); | |
86 | virtual task Display( string msg = "" ); | |
87 | virtual function string Name(); | |
88 | virtual task DumpExpectList(); | |
89 | virtual function bit IsExpectPending(); | |
90 | virtual function integer ExpectCount(); | |
91 | virtual function integer TlpExpectCount(); | |
92 | virtual function integer DllpExpectCount(); | |
93 | virtual function bit ExpectExpire( integer Window ); | |
94 | virtual function bit Expect( integer Window ); | |
95 | virtual task Sample( XactorBasePacket Pkt, integer Window = 50000 ); | |
96 | virtual task SampleTlp( XactorBasePacket Pkt, integer Window = 50000 ); | |
97 | virtual task SampleDllp( XactorBasePacket Pkt, integer Window = 50000 ); | |
98 | virtual function bit Remove(); | |
99 | virtual task Drive( integer D = 0 ); | |
100 | virtual task Enable(); | |
101 | virtual task Disable(); | |
102 | virtual task Reset(); | |
103 | virtual task WriteDenaliReg( integer iDenReg, bit [FNX_PCIE_XTR_REG_DEN_WIDTH-1:0] data ); | |
104 | virtual function bit [FNX_PCIE_XTR_REG_DEN_WIDTH-1:0] ReadDenaliReg( integer iDenReg ); | |
105 | virtual task SuppressDenaliErr( denaliPcieErrorTypeT denErr ); | |
106 | virtual task tempSuppressDenaliErr( denaliPcieErrorTypeT denErr ); | |
107 | virtual task unSuppressDenaliErr( denaliPcieErrorTypeT denErr ); | |
108 | virtual task SetPyld( bit [7:0] pyld[ * ] ); | |
109 | virtual task GetPyld( var bit [7:0] pyld[ * ] ); | |
110 | virtual task SetupBAR32( integer denReg, | |
111 | integer addrWidth, | |
112 | bit [FNX_PCIE_XTR_PCI_BAR_WIDTH-1:0] baseAddr ); | |
113 | virtual task SetupBAR64( integer denRegLower, | |
114 | integer denRegUpper, | |
115 | integer addrWidth, | |
116 | bit [FNX_PCIE_XTR_PCI_BAR_WIDTH*2-1:0] baseAddr ); | |
117 | virtual task SetReqID( bit [FNX_PCIE_XTR_REQ_BUS_NUM_WIDTH-1:0] busNum, | |
118 | bit [FNX_PCIE_XTR_REQ_DEVICE_NUM_WIDTH-1:0] devNum, | |
119 | bit [FNX_PCIE_XTR_REQ_FUNC_NUM_WIDTH-1:0] funcNum, | |
120 | integer regOffset = 0 ); | |
121 | virtual task SetFCUpdateFreq( denaliPcieFcTypeT denFcType, | |
122 | integer fcTimerVal ); | |
123 | virtual function integer GetFCUpdateFreq( denaliPcieFcTypeT denFcType ); | |
124 | virtual task SetFCData( denaliPcieFcTypeT denFcType, | |
125 | denaliPcieFcIdT denFcId, | |
126 | bit [FNX_PCIE_XTR_REG_DEN_FC_CTRL_DATA_VAL_WIDTH-1:0] fcData ); | |
127 | virtual function bit[FNX_PCIE_XTR_REG_DEN_FC_CTRL_DATA_VAL_WIDTH-1:0] GetFCData( denaliPcieFcTypeT denFcType, | |
128 | denaliPcieFcIdT denFcId ); | |
129 | virtual task SetAckNakUpdateFreq( integer ackNakTimerVal ); | |
130 | virtual function integer GetAckNakUpdateFreq(); | |
131 | virtual task SetReplayTimer( integer replayTimerVal ); | |
132 | virtual function integer GetReplayTimer(); | |
133 | virtual task SetFCCredit( denaliPcieFcTypeT denFcType, | |
134 | integer fcCredit ); | |
135 | virtual task SetFCUpdateRange( denaliPcieFcTypeT denFcType, | |
136 | integer fcUpdateMin, | |
137 | integer fcUpdateMax ); | |
138 | virtual task WaitLinkUp(); | |
139 | virtual task WaitDLLActive(); | |
140 | virtual task SyncDriveStart(); | |
141 | virtual task SyncDriveEnd(); | |
142 | ||
143 | // Added to allow Vera 6.1 to compile | |
144 | task SetSignalInterface(string FieldType, bit [XACT_FIELD_WIDTH-1:0] FieldValue) {} | |
145 | function bit [XACT_FIELD_WIDTH-1:0] GetSignalInterface(string FieldType) {} | |
146 | ||
147 | // 3/4/04 | |
148 | virtual task SetRcvDetMode( bit _rcvDetMode ); | |
149 | virtual task SetRcvDetLanes( bit[FNX_PCIE_XTR_RCV_DET_LANES_WIDTH-1:0] _rcvDetLanes ); | |
150 | virtual task SetElecIdleLanes( bit[FNX_PCIE_XTR_RCV_DET_LANES_WIDTH-1:0] _elecIdleLanes ); | |
151 | virtual task SetDenaliReset( bit _denaliReset ); | |
152 | virtual task ResetReplayMonitor(); | |
153 | virtual task EnableSampleIngressDllp(); | |
154 | virtual task DisableSampleIngressDllp(); | |
155 | virtual task SampleIngressDllp( XactorBasePacket Pkt, integer Window = 50000 ); | |
156 | virtual task EnableAckDiscard(); | |
157 | virtual task DisableAckDiscard(); | |
158 | ||
159 | virtual task EnableFCDiscard(); | |
160 | virtual task EnableFCPostDiscard(); | |
161 | virtual task EnableFCNonPostDiscard(); | |
162 | virtual task EnableFCCplDiscard(); | |
163 | virtual task DisableFCDiscard(); | |
164 | virtual task DisableFCPostDiscard(); | |
165 | virtual task DisableFCNonPostDiscard(); | |
166 | virtual task DisableFCCplDiscard(); | |
167 | virtual task SetLinkNumberTS1( bit[8:0] linkNumber ); | |
168 | virtual task SetLinkNumberTS2( bit[8:0] linkNumber ); | |
169 | virtual task SetLaneNumberTS1( bit[8:0] laneNumber ); | |
170 | virtual task SetLaneNumberTS2( bit[8:0] laneNumber ); | |
171 | virtual task TransmitFTSToLink( integer nmbrFts ); | |
172 | virtual task TransmitSKPToLink( integer nmbrSkp ); | |
173 | virtual task ExpectNullPkt(); //Set expect for a Null packet(EDB & inverted CRC) | |
174 | virtual task Transmit_symbol_ToLink( integer nmbrSymbol, bit [8:0] symbol ); | |
175 | // virtual task TransmitOrdersetToLink( integer nmbrFts, bit [31:0] orderset ); | |
176 | // virtual task TransmitOrdersetToLink( integer nmbrFts, denaliPcieOrderedSet orderset ); | |
177 | virtual task TransmitTS1ToLink( integer nmbrTS1 ); | |
178 | virtual task Enable_count_4096FTS_1SKP(); | |
179 | virtual task Disable_count_4096FTS_1SKP(); | |
180 | virtual task Enable_blunt_end(); | |
181 | ||
182 | ||
183 | } | |
184 | ||
185 | task FNXPCIEXactorTransaction::new( FNXPCIEXactorBuilder Builder ) | |
186 | { | |
187 | Util = Builder.Util; | |
188 | XactorName = Builder.CreateName(); | |
189 | MyReport = Builder.CreateReport(); | |
190 | SelfExpectEnable = Builder.SelfExpectEnable; | |
191 | MinSelfExpectDly = Builder.MinSelfExpectDly; | |
192 | MaxSelfExpectDly = Builder.MaxSelfExpectDly; | |
193 | cast_assign( MyPacket, Builder.CreatePacket() ); | |
194 | cast_assign( MyManager, Builder.CreateManager() ); | |
195 | cast_assign( MySignalInterface, Builder.CreateSignalInterface() ); | |
196 | FCEngine = Builder.FCEngine; | |
197 | clock = Builder.CreateClock(); | |
198 | } | |
199 | ||
200 | task FNXPCIEXactorTransaction::SetID( CTTransactionID XactionID ) | |
201 | { | |
202 | MyPacket.SetID( XactionID ); | |
203 | } | |
204 | ||
205 | function CTTransactionID FNXPCIEXactorTransaction::GetID() | |
206 | { | |
207 | GetID = MyPacket.GetID(); | |
208 | } | |
209 | ||
210 | task FNXPCIEXactorTransaction::SetPacket( string FieldType, | |
211 | bit [ XACT_FIELD_WIDTH-1:0 ] FieldValue ) | |
212 | { | |
213 | MyPacket.Set( FieldType, FieldValue ); | |
214 | } | |
215 | ||
216 | function bit [ XACT_FIELD_WIDTH-1:0 ] FNXPCIEXactorTransaction::GetPacket( string FieldType ) | |
217 | { | |
218 | GetPacket = MyPacket.Get( FieldType ); | |
219 | } | |
220 | ||
221 | task FNXPCIEXactorTransaction::ResetPacket() | |
222 | { | |
223 | MyPacket.PktReset(); | |
224 | } | |
225 | ||
226 | task FNXPCIEXactorTransaction::ZeroPacket() | |
227 | { | |
228 | MyPacket.PktZero(); | |
229 | } | |
230 | ||
231 | task FNXPCIEXactorTransaction::CopyPacket( FNXPCIEXactorTransaction PktTrans ) | |
232 | { | |
233 | MyPacket.PktCopy( PktTrans.MyPacket ); | |
234 | } | |
235 | ||
236 | task FNXPCIEXactorTransaction::Display( string msg = "" ) | |
237 | { | |
238 | MyPacket.PktDisplay( RTYP_FNX_PCIE_XTR_INFO, msg ); | |
239 | } | |
240 | ||
241 | function string FNXPCIEXactorTransaction::Name() | |
242 | { | |
243 | Name = XactorName; | |
244 | } | |
245 | ||
246 | task FNXPCIEXactorTransaction::DumpExpectList() | |
247 | { | |
248 | string MethodName = "DumpExpectList"; | |
249 | ||
250 | PCIEX_QR_D1( "%s -> Dumping Expects", XactorName ); | |
251 | MyManager.DumpExpects(); | |
252 | } | |
253 | ||
254 | function bit FNXPCIEXactorTransaction::IsExpectPending() | |
255 | { | |
256 | IsExpectPending = MyManager.ExpectPending( MyPacket ); | |
257 | } | |
258 | ||
259 | function integer FNXPCIEXactorTransaction::ExpectCount() | |
260 | { | |
261 | ExpectCount = MyManager.NumExpects(); | |
262 | } | |
263 | ||
264 | function integer FNXPCIEXactorTransaction::TlpExpectCount() | |
265 | { | |
266 | TlpExpectCount = MyManager.NumTlpExpects(); | |
267 | } | |
268 | ||
269 | function integer FNXPCIEXactorTransaction::DllpExpectCount() | |
270 | { | |
271 | DllpExpectCount = MyManager.NumDllpExpects(); | |
272 | } | |
273 | ||
274 | function bit FNXPCIEXactorTransaction::ExpectExpire( integer Window ) | |
275 | { | |
276 | // Status[1] = 1'b0 Expect not removed | |
277 | // Status[1] = 1'b1 Expect removed | |
278 | // Status[0] = 1'b0 Expect removed by transactor | |
279 | // Status[0] = 1'b1 Expect removed by user | |
280 | bit [1:0] TransactionRemovedStatus = 2'b00; | |
281 | bit success; | |
282 | string MethodName = "ExpectExpire"; | |
283 | ||
284 | if (!SelfExpectEnable) { | |
285 | MyPacket.PktDisplay( RTYP_FNX_PCIE_XTR_DEBUG_1, psprintf("%s %s -> Launching Expect Expire", PCIEX_QR_PREFIX, XactorName ) ); | |
286 | MyManager.ExpectPkt( MyPacket, Window, TransactionRemovedStatus ); | |
287 | ||
288 | if( TransactionRemovedStatus === 2'b10 ) { | |
289 | // Expect Expire removed by transactor | |
290 | success = 1'b1; | |
291 | MyPacket.PktDisplay( RTYP_FNX_PCIE_XTR_INFO, psprintf("%s %s -> Expect Expire Satisfied", PCIEX_QR_PREFIX, XactorName ) ); | |
292 | } | |
293 | else { | |
294 | if( TransactionRemovedStatus === 2'b11 ) { | |
295 | // Expect Expire removed by user | |
296 | success = 1'b0; | |
297 | MyPacket.PktDisplay( RTYP_XACTOR_FMWORK_EXPECT_REMOVED_BY_USER, | |
298 | psprintf("%s %s -> Expect Expire Removed by User", PCIEX_QR_PREFIX, XactorName ) ); | |
299 | } | |
300 | else { | |
301 | // Expect Expire expired | |
302 | success = 1'b0; | |
303 | MyPacket.PktDisplay( RTYP_XACTOR_FMWORK_EXPECT_TIMEOUT_ERR, | |
304 | psprintf("%s %s -> Expect Expire Expired", PCIEX_QR_PREFIX, XactorName ) ); | |
305 | } | |
306 | } | |
307 | } else { | |
308 | MyPacket.PktDisplay( RTYP_FNX_PCIE_XTR_INFO, psprintf("%s %s -> Launching SelfExpectExpire", PCIEX_QR_PREFIX, XactorName ) ); | |
309 | repeat((urandom() % (MaxSelfExpectDly-MinSelfExpectDly+1)) + MinSelfExpectDly) @(posedge clock.$XClk); | |
310 | MyPacket.PktDisplay(RTYP_FNX_PCIE_XTR_INFO, "SelfExpectExpire satisfied"); | |
311 | success = 1'b1; | |
312 | } | |
313 | ||
314 | ExpectExpire = success; | |
315 | } | |
316 | ||
317 | function bit FNXPCIEXactorTransaction::Expect( integer Window ) | |
318 | { | |
319 | bit [1:0] TransactionRemovedStatus; | |
320 | bit success; | |
321 | string MethodName = "Expect"; | |
322 | ||
323 | if (!SelfExpectEnable) { | |
324 | MyPacket.PktDisplay( RTYP_FNX_PCIE_XTR_INFO, psprintf("at time %d, %s %s -> Launching Expect", get_time(LO), PCIEX_QR_PREFIX, XactorName ) ); | |
325 | MyManager.ExpectPkt( MyPacket, Window, TransactionRemovedStatus ); | |
326 | if( TransactionRemovedStatus === 2'b10 ) { | |
327 | // Expect removed by transactor | |
328 | success = 1'b1; | |
329 | MyPacket.PktDisplay( RTYP_FNX_PCIE_XTR_INFO, psprintf("at time %d, %s %s -> Expect Satisfied", get_time(LO), PCIEX_QR_PREFIX, XactorName ) ); | |
330 | } | |
331 | else { | |
332 | if( TransactionRemovedStatus === 2'b11 ) { | |
333 | // Expect removed by user | |
334 | success = 1'b0; | |
335 | MyPacket.PktDisplay( RTYP_XACTOR_FMWORK_EXPECT_REMOVED_BY_USER, | |
336 | psprintf("at time %d, %s %s -> Expect Removed by User", get_time(LO), PCIEX_QR_PREFIX, XactorName ) ); | |
337 | ||
338 | } | |
339 | else { | |
340 | // Expect timeout | |
341 | success = 1'b0; | |
342 | MyPacket.PktDisplay( RTYP_XACTOR_FMWORK_EXPECT_TIMEOUT_ERR, | |
343 | psprintf("%d, %s %s -> Expect Expired", get_time(LO), PCIEX_QR_PREFIX, XactorName ) ); | |
344 | ||
345 | } | |
346 | } | |
347 | } else { | |
348 | MyPacket.PktDisplay( RTYP_FNX_PCIE_XTR_INFO, psprintf("%s %s -> Launching SelfExpect", PCIEX_QR_PREFIX, XactorName ) ); | |
349 | repeat((urandom() % (MaxSelfExpectDly-MinSelfExpectDly+1)) + MinSelfExpectDly) @(posedge clock.$XClk); | |
350 | MyPacket.PktDisplay(RTYP_FNX_PCIE_XTR_INFO, "SelfExpect satisfied"); | |
351 | success = 1'b1; | |
352 | } | |
353 | ||
354 | Expect = success; | |
355 | } | |
356 | ||
357 | task FNXPCIEXactorTransaction::Sample( XactorBasePacket Pkt, integer Window = 50000 ) | |
358 | { | |
359 | string MethodName = "Sample"; | |
360 | PCIEX_QR_I( "%s-> Waiting to Receive Next Packet", XactorName ); | |
361 | MyManager.SamplePkt( Pkt, Window ); | |
362 | } | |
363 | ||
364 | task FNXPCIEXactorTransaction::SampleTlp( XactorBasePacket Pkt, integer Window = 50000 ) | |
365 | { | |
366 | string MethodName = "SampleTlp"; | |
367 | PCIEX_QR_I( "%s-> Waiting to Receive Next TLP Packet", XactorName ); | |
368 | MyManager.SampleTlpPkt( Pkt, Window ); | |
369 | } | |
370 | ||
371 | task FNXPCIEXactorTransaction::SampleDllp( XactorBasePacket Pkt, integer Window = 50000 ) | |
372 | { | |
373 | string MethodName = "SampleDllp"; | |
374 | PCIEX_QR_I( "%s-> Waiting to Receive Next DLLP Packet", XactorName ); | |
375 | MyManager.SampleDllpPkt( Pkt, Window ); | |
376 | } | |
377 | ||
378 | function bit FNXPCIEXactorTransaction::Remove() | |
379 | { | |
380 | string MethodName = "Remove"; | |
381 | ||
382 | Remove = MyManager.Remove( MyPacket ); | |
383 | if ( Remove ) | |
384 | MyPacket.PktDisplay( RTYP_FNX_PCIE_XTR_INFO, psprintf("%s %s -> Packet Successfully Removed", PCIEX_QR_PREFIX, XactorName ) ); | |
385 | else | |
386 | MyPacket.PktDisplay( RTYP_FNX_PCIE_XTR_INFO, psprintf("%s %s -> Failed to Remove Packet", PCIEX_QR_PREFIX, XactorName ) ); | |
387 | } | |
388 | ||
389 | task FNXPCIEXactorTransaction::Drive( integer D = 0 ) | |
390 | { | |
391 | if (!SelfExpectEnable) { | |
392 | MyManager.DrivePkt( MyPacket.FormDriven(), D ); | |
393 | } else { | |
394 | MyPacket.PktDisplay(RTYP_FNX_PCIE_XTR_INFO, "SelfDrive issued"); | |
395 | repeat(D) @(posedge clock.$XClk); | |
396 | MyPacket.PktDisplay(RTYP_FNX_PCIE_XTR_INFO, "SelfDrive completed"); | |
397 | } | |
398 | } | |
399 | ||
400 | task FNXPCIEXactorTransaction::Enable() | |
401 | { | |
402 | string MethodName = "Enable"; | |
403 | ||
404 | MyManager.EnableManager(); | |
405 | PCIEX_QR_I( "%s -> Manager Enabled", XactorName ); | |
406 | } | |
407 | ||
408 | task FNXPCIEXactorTransaction::Disable() | |
409 | { | |
410 | string MethodName = "Disable"; | |
411 | ||
412 | MyManager.DisableManager(); | |
413 | PCIEX_QR_I( "%s -> Manager Disabled", XactorName ); | |
414 | } | |
415 | ||
416 | task FNXPCIEXactorTransaction::Reset() | |
417 | { | |
418 | string MethodName = "Reset"; | |
419 | ||
420 | PCIEX_QR_I( "%s -> Resetting Manager", XactorName ); | |
421 | MyPacket.PktReset(); | |
422 | MyManager.ResetManager(); | |
423 | } | |
424 | ||
425 | task FNXPCIEXactorTransaction::SetPyld( bit [7:0] pyld[ * ] ) | |
426 | { | |
427 | MyPacket.SetPyld( pyld ); | |
428 | } | |
429 | ||
430 | task FNXPCIEXactorTransaction::GetPyld( var bit [7:0] pyld[ * ] ) | |
431 | { | |
432 | MyPacket.GetPyld( pyld ); | |
433 | } | |
434 | ||
435 | task FNXPCIEXactorTransaction::EnableExpects() | |
436 | { | |
437 | string MethodName = "EnableExpects"; | |
438 | ||
439 | MyManager.ExpectsOn = 1; | |
440 | PCIEX_QR_I( "%s -> Expects Enabled.", XactorName ); | |
441 | } | |
442 | ||
443 | task FNXPCIEXactorTransaction::DisableExpects() | |
444 | { | |
445 | string MethodName = "DisableExpects"; | |
446 | ||
447 | MyManager.ExpectsOn = 0; | |
448 | PCIEX_QR_I( "%s -> Expects Disabled. Sampling Only", XactorName ); | |
449 | } | |
450 | ||
451 | task FNXPCIEXactorTransaction::EnableTlpDiscard() | |
452 | { | |
453 | string MethodName = "EnableTlpDiscard"; | |
454 | ||
455 | MySignalInterface.TlpDiscardOn = 1; | |
456 | PCIEX_QR_I( psprintf("%s -> TLP Discard Enabled. TLPs Generated By Denali Memory Model Will NOT Be Transmitted.", XactorName) ); | |
457 | } | |
458 | ||
459 | task FNXPCIEXactorTransaction::DisableTlpDiscard() | |
460 | { | |
461 | string MethodName = "DisableTlpDiscard"; | |
462 | ||
463 | MySignalInterface.TlpDiscardOn = 0; | |
464 | PCIEX_QR_I( psprintf("%s -> TLP Discard Disabled. TLPs Generated By Denali Memory Model Will Be Transmitted.", XactorName) ); | |
465 | } | |
466 | ||
467 | task FNXPCIEXactorTransaction::EnableReplayMonitor() | |
468 | { | |
469 | string MethodName = "EnableReplayMonitor"; | |
470 | ||
471 | MySignalInterface.ReplayMonitorOn = 1; | |
472 | PCIEX_QR_I( psprintf("%s -> Replayed TLP Checking Enabled.", XactorName) ); | |
473 | } | |
474 | ||
475 | task FNXPCIEXactorTransaction::DisableReplayMonitor() | |
476 | { | |
477 | string MethodName = "DisableReplayMonitor"; | |
478 | ||
479 | MySignalInterface.ReplayMonitorOn = 0; | |
480 | PCIEX_QR_I( psprintf("%s -> Replayed TLP Checking Disabled.", XactorName) ); | |
481 | } | |
482 | ||
483 | task FNXPCIEXactorTransaction::WriteDenaliReg( integer iDenReg, bit [FNX_PCIE_XTR_REG_DEN_WIDTH-1:0] data ) | |
484 | { | |
485 | MySignalInterface.WriteDenaliReg( iDenReg, data ); | |
486 | } | |
487 | ||
488 | function bit [FNX_PCIE_XTR_REG_DEN_WIDTH-1:0] FNXPCIEXactorTransaction::ReadDenaliReg( integer iDenReg ) | |
489 | { | |
490 | ReadDenaliReg = MySignalInterface.ReadDenaliReg( iDenReg ); | |
491 | } | |
492 | ||
493 | task FNXPCIEXactorTransaction::SuppressDenaliErr( denaliPcieErrorTypeT denErr ) | |
494 | { | |
495 | MySignalInterface.SuppressDenaliErr( denErr ); | |
496 | } | |
497 | ||
498 | task FNXPCIEXactorTransaction::tempSuppressDenaliErr( denaliPcieErrorTypeT denErr ) | |
499 | { | |
500 | MySignalInterface.tempSuppressDenaliErr( denErr ); | |
501 | } | |
502 | ||
503 | task FNXPCIEXactorTransaction::unSuppressDenaliErr( denaliPcieErrorTypeT denErr ) | |
504 | { | |
505 | // MySignalInterface.unSuppressDenaliErr( denErr ); | |
506 | } | |
507 | ||
508 | task FNXPCIEXactorTransaction::SetupBAR32( integer denReg, | |
509 | integer addrWidth, | |
510 | bit [FNX_PCIE_XTR_PCI_BAR_WIDTH-1:0] baseAddr ) | |
511 | { | |
512 | MySignalInterface.SetupBAR32( denReg, addrWidth, baseAddr ); | |
513 | } | |
514 | ||
515 | task FNXPCIEXactorTransaction::SetupBAR64( integer denRegLower, | |
516 | integer denRegUpper, | |
517 | integer addrWidth, | |
518 | bit [FNX_PCIE_XTR_PCI_BAR_WIDTH*2-1:0] baseAddr ) | |
519 | { | |
520 | MySignalInterface.SetupBAR64( denRegLower, denRegUpper, addrWidth, baseAddr ); | |
521 | } | |
522 | ||
523 | task FNXPCIEXactorTransaction::SetReqID( bit [FNX_PCIE_XTR_REQ_BUS_NUM_WIDTH-1:0] busNum, | |
524 | bit [FNX_PCIE_XTR_REQ_DEVICE_NUM_WIDTH-1:0] devNum, | |
525 | bit [FNX_PCIE_XTR_REQ_FUNC_NUM_WIDTH-1:0] funcNum, | |
526 | integer regOffset = 0 ) | |
527 | { | |
528 | MySignalInterface.SetReqID( busNum, devNum, funcNum, regOffset ); | |
529 | } | |
530 | ||
531 | task FNXPCIEXactorTransaction::SetFCUpdateFreq( denaliPcieFcTypeT denFcType, | |
532 | integer fcTimerVal ) | |
533 | { | |
534 | bit [FNX_PCIE_XTR_REG_DEN_WIDTH-1:0] fcRegVal; | |
535 | integer idenFcType, iFcOp, iVc; | |
536 | ||
537 | // Disable Generation of Denali FC Updates For This Credit Type | |
538 | SetFCCredit( denFcType, 0 ); | |
539 | ||
540 | // Set Denali FC Update Timer | |
541 | idenFcType = denFcType; | |
542 | iFcOp = PCIE_FCCTRL_set_timer; | |
543 | iVc = PCIE_VCID_VC0; // FNX Only Implements VC 0 | |
544 | fcRegVal = 0; | |
545 | fcRegVal[FNX_PCIE_XTR_REG_DEN_FC_CTRL_TIMER_VAL_SLC] = fcTimerVal; | |
546 | fcRegVal[FNX_PCIE_XTR_REG_DEN_FC_CTRL_FC_TYPE_SLC] = idenFcType; | |
547 | fcRegVal[FNX_PCIE_XTR_REG_DEN_FC_CTRL_VC_SLC] = iVc; | |
548 | fcRegVal[FNX_PCIE_XTR_REG_DEN_FC_CTRL_FC_CMD_SLC] = iFcOp; | |
549 | WriteDenaliReg( PCIE_REG_DEN_FC_CTRL, fcRegVal ); | |
550 | ||
551 | // Enable FC Timer Updates in FC Engine | |
552 | FCEngine.EnableFCTimer( denFcType ); | |
553 | FCEngine.SetFCTimerMax( denFcType, fcTimerVal ); | |
554 | } | |
555 | ||
556 | function integer FNXPCIEXactorTransaction::GetFCUpdateFreq( denaliPcieFcTypeT denFcType ) | |
557 | { | |
558 | bit [FNX_PCIE_XTR_REG_DEN_WIDTH-1:0] fcRegVal; | |
559 | integer idenFcType, iFcOp, iVc; | |
560 | ||
561 | idenFcType = denFcType; | |
562 | iFcOp = PCIE_FCCTRL_get_timer_limit; | |
563 | iVc = PCIE_VCID_VC0; // FNX Only Implements VC 0 | |
564 | fcRegVal = 0; | |
565 | fcRegVal[FNX_PCIE_XTR_REG_DEN_FC_CTRL_FC_TYPE_SLC] = idenFcType; | |
566 | fcRegVal[FNX_PCIE_XTR_REG_DEN_FC_CTRL_VC_SLC] = iVc; | |
567 | fcRegVal[FNX_PCIE_XTR_REG_DEN_FC_CTRL_FC_CMD_SLC] = iFcOp; | |
568 | WriteDenaliReg( PCIE_REG_DEN_FC_CTRL, fcRegVal ); | |
569 | ||
570 | fcRegVal = ReadDenaliReg( PCIE_REG_DEN_FC_CTRL ); | |
571 | GetFCUpdateFreq = fcRegVal[FNX_PCIE_XTR_REG_DEN_FC_CTRL_TIMER_VAL_SLC]; | |
572 | } | |
573 | ||
574 | task FNXPCIEXactorTransaction::SetFCUpdateRange( denaliPcieFcTypeT denFcType, | |
575 | integer fcUpdateMin, | |
576 | integer fcUpdateMax ) { | |
577 | FCEngine.SetFCUpdateRange( denFcType, fcUpdateMin, fcUpdateMax ); | |
578 | } | |
579 | ||
580 | task FNXPCIEXactorTransaction::SetFCData( denaliPcieFcTypeT denFcType, | |
581 | denaliPcieFcIdT denFcId, | |
582 | bit [FNX_PCIE_XTR_REG_DEN_FC_CTRL_DATA_VAL_WIDTH-1:0] fcData ) | |
583 | { | |
584 | FCEngine.SetFCData( denFcType, denFcId, fcData ); | |
585 | } | |
586 | ||
587 | function bit[FNX_PCIE_XTR_REG_DEN_FC_CTRL_DATA_VAL_WIDTH-1:0] FNXPCIEXactorTransaction::GetFCData( denaliPcieFcTypeT denFcType, | |
588 | denaliPcieFcIdT denFcId ) | |
589 | { | |
590 | GetFCData = FCEngine.GetFCData( denFcType, denFcId ); | |
591 | } | |
592 | ||
593 | task FNXPCIEXactorTransaction::SetAckNakUpdateFreq( integer ackNakTimerVal ) | |
594 | { | |
595 | WriteDenaliReg( PCIE_REG_DEN_ACK_NAK_FREQ_TIMER, ackNakTimerVal ); | |
596 | } | |
597 | ||
598 | function integer FNXPCIEXactorTransaction::GetAckNakUpdateFreq() | |
599 | { | |
600 | GetAckNakUpdateFreq = ReadDenaliReg( PCIE_REG_DEN_ACK_NAK_FREQ_TIMER ); | |
601 | } | |
602 | ||
603 | task FNXPCIEXactorTransaction::SetReplayTimer( integer replayTimerVal ) | |
604 | { | |
605 | WriteDenaliReg( PCIE_REG_DEN_REPLAY_TIMER, replayTimerVal ); | |
606 | } | |
607 | ||
608 | function integer FNXPCIEXactorTransaction::GetReplayTimer() | |
609 | { | |
610 | GetReplayTimer = ReadDenaliReg( PCIE_REG_DEN_REPLAY_TIMER ); | |
611 | } | |
612 | ||
613 | task FNXPCIEXactorTransaction::SetFCCredit( denaliPcieFcTypeT denFcType, | |
614 | integer fcCredit ) | |
615 | { | |
616 | bit [FNX_PCIE_XTR_REG_DEN_WIDTH-1:0] fcRegVal; | |
617 | ||
618 | // Negative fcCredit Interpreted as Infinite, Postive as Actual Value | |
619 | if (fcCredit < 0) | |
620 | fcRegVal = { FNX_PCIE_XTR_REG_DEN_WIDTH {1'b1} }; // Denali Defines Infinite as 32'hfffffff | |
621 | else | |
622 | fcRegVal = fcCredit; | |
623 | ||
624 | case (denFcType) { | |
625 | PCIE_FCTYPE_PH : WriteDenaliReg( PCIE_REG_DEN_FC0_PH, fcRegVal ); | |
626 | PCIE_FCTYPE_PD : WriteDenaliReg( PCIE_REG_DEN_FC0_PD, fcRegVal ); | |
627 | PCIE_FCTYPE_NPH : WriteDenaliReg( PCIE_REG_DEN_FC0_NPH, fcRegVal ); | |
628 | PCIE_FCTYPE_NPD : WriteDenaliReg( PCIE_REG_DEN_FC0_NPD, fcRegVal ); | |
629 | PCIE_FCTYPE_CPLH : WriteDenaliReg( PCIE_REG_DEN_FC0_CPLH, fcRegVal ); | |
630 | PCIE_FCTYPE_CPLD : WriteDenaliReg( PCIE_REG_DEN_FC0_CPLD, fcRegVal ); | |
631 | PCIE_FCTYPE_TOTAL : { | |
632 | WriteDenaliReg( PCIE_REG_DEN_FC0_PH, fcRegVal ); | |
633 | WriteDenaliReg( PCIE_REG_DEN_FC0_PD, fcRegVal ); | |
634 | WriteDenaliReg( PCIE_REG_DEN_FC0_NPH, fcRegVal ); | |
635 | WriteDenaliReg( PCIE_REG_DEN_FC0_NPD, fcRegVal ); | |
636 | WriteDenaliReg( PCIE_REG_DEN_FC0_CPLH, fcRegVal ); | |
637 | WriteDenaliReg( PCIE_REG_DEN_FC0_CPLD, fcRegVal ); | |
638 | } | |
639 | default : PCIEX_QR_ERR( "%s-> Hit Default Case Element denFcType=%0d", | |
640 | XactorName, denFcType ); | |
641 | } | |
642 | } | |
643 | ||
644 | task FNXPCIEXactorTransaction::WaitLinkUp() | |
645 | { | |
646 | MySignalInterface.WaitLinkUp(); | |
647 | } | |
648 | ||
649 | task FNXPCIEXactorTransaction::WaitDLLActive() | |
650 | { | |
651 | MySignalInterface.WaitDLLActive(); | |
652 | } | |
653 | ||
654 | task FNXPCIEXactorTransaction::SyncDriveStart() | |
655 | { | |
656 | MyPacket.SyncDriveStart(); | |
657 | } | |
658 | ||
659 | task FNXPCIEXactorTransaction::SyncDriveEnd() | |
660 | { | |
661 | MyPacket.SyncDriveEnd(); | |
662 | } | |
663 | ||
664 | task FNXPCIEXactorTransaction::SetRcvDetMode( bit _rcvDetMode ) | |
665 | { | |
666 | string MethodName = "SetRcvDetMode"; | |
667 | ||
668 | MySignalInterface.SetRcvDetMode( _rcvDetMode ); | |
669 | PCIEX_QR_I( psprintf("%s -> Drive rcvDetMode = %b : 0=fast receive detect 1=slow receive detect", XactorName,_rcvDetMode) ); | |
670 | } | |
671 | ||
672 | task FNXPCIEXactorTransaction::SetRcvDetLanes( bit[FNX_PCIE_XTR_RCV_DET_LANES_WIDTH-1:0] _rcvDetLanes ) | |
673 | { | |
674 | string MethodName = "SetRcvDetLanes"; | |
675 | ||
676 | MySignalInterface.SetRcvDetLanes( _rcvDetLanes ); | |
677 | PCIEX_QR_I( psprintf("%s -> Drive rcvDetLanes = %b ", XactorName,_rcvDetLanes) ); | |
678 | } | |
679 | ||
680 | task FNXPCIEXactorTransaction::SetElecIdleLanes( bit[FNX_PCIE_XTR_RCV_DET_LANES_WIDTH-1:0] _elecIdleLanes ) | |
681 | { | |
682 | string MethodName = "SetElecIdleLanes"; | |
683 | ||
684 | MySignalInterface.SetElecIdleLanes( _elecIdleLanes ); | |
685 | PCIEX_QR_I( psprintf("%s -> Drive elecIdleLanes = %b ", XactorName,_elecIdleLanes) ); | |
686 | } | |
687 | ||
688 | task FNXPCIEXactorTransaction::SetDenaliReset( bit _denaliReset ) | |
689 | { | |
690 | string MethodName = "SetDenaliReset"; | |
691 | ||
692 | MySignalInterface.SetDenaliReset( _denaliReset ); | |
693 | PCIEX_QR_I( psprintf("%s -> Drive denaliReset = %b ", XactorName,_denaliReset) ); | |
694 | } | |
695 | ||
696 | task FNXPCIEXactorTransaction::ResetReplayMonitor() | |
697 | { | |
698 | string MethodName = "ResetReplayMonitor"; | |
699 | ||
700 | MySignalInterface.ResetReplayMonitor(); | |
701 | PCIEX_QR_I( psprintf("%s -> Reset FNXPCIEXtr Replay Monitor ", XactorName) ); | |
702 | } | |
703 | ||
704 | ||
705 | task FNXPCIEXactorTransaction::EnableSampleIngressDllp() | |
706 | { | |
707 | string MethodName = "EnableSampleIngressDllp"; | |
708 | ||
709 | MySignalInterface.EnableSampleDllpToLink(); | |
710 | PCIEX_QR_I( psprintf("%s -> EnableSampleIngressDllp allows Ingress(xtr to dut) DLLPs to be passed to the testbench.", XactorName) ); | |
711 | } | |
712 | ||
713 | task FNXPCIEXactorTransaction::DisableSampleIngressDllp() | |
714 | { | |
715 | string MethodName = "DisableSampleIngressDllp"; | |
716 | ||
717 | MySignalInterface.DisableSampleDllpToLink(); | |
718 | PCIEX_QR_I( psprintf("%s -> DisableSampleIngressDllp will NOT pass Ingress(xtr to dut) DLLPs to the testbench.", XactorName) ); | |
719 | } | |
720 | ||
721 | task FNXPCIEXactorTransaction::SampleIngressDllp( XactorBasePacket Pkt, integer Window = 50000 ) | |
722 | { | |
723 | string MethodName = "SampleIngressDllp"; | |
724 | PCIEX_QR_D3( "%s-> Waiting to Receive Next Ingress DLLP Packet", XactorName ); | |
725 | MySignalInterface.SampleDllpPktToLink( Pkt, Window ); | |
726 | } | |
727 | ||
728 | task FNXPCIEXactorTransaction::EnableAckDiscard() | |
729 | { | |
730 | string MethodName = "EnableAckDiscard"; | |
731 | ||
732 | MySignalInterface.AckDiscardOn = 1; | |
733 | PCIEX_QR_I( psprintf("%s -> ACK Discard Enabled. DLLP ACKs Generated By Denali Model Will NOT Be Transmitted.", XactorName) ); | |
734 | } | |
735 | ||
736 | task FNXPCIEXactorTransaction::DisableAckDiscard() | |
737 | { | |
738 | string MethodName = "DisableAckDiscard"; | |
739 | ||
740 | MySignalInterface.AckDiscardOn = 0; | |
741 | PCIEX_QR_I( psprintf("%s -> ACK Discard Disabled. DLLP ACKs Generated By Denali Model Will Be Transmitted.", XactorName) ); | |
742 | } | |
743 | ||
744 | task FNXPCIEXactorTransaction::EnableFCDiscard() | |
745 | { | |
746 | string MethodName = "EnableFCDiscard"; | |
747 | ||
748 | MySignalInterface.FCDiscardOn = 1; | |
749 | PCIEX_QR_I( psprintf("%s -> Denali FC Discard Enabled. DLLP FCs Generated By Denali Model Will NOT Be Transmitted.", XactorName) ); | |
750 | } | |
751 | ||
752 | task FNXPCIEXactorTransaction::EnableFCPostDiscard() | |
753 | { | |
754 | string MethodName = "EnableFCPostDiscard"; | |
755 | ||
756 | MySignalInterface.FCPostDiscardOn = 1; | |
757 | PCIEX_QR_I( psprintf("%s -> Denali FC Post Discard Enabled. DLLP Posted FCs Generated By Denali Model Will NOT Be Transmitted.", XactorName) ); | |
758 | } | |
759 | ||
760 | task FNXPCIEXactorTransaction::EnableFCNonPostDiscard() | |
761 | { | |
762 | string MethodName = "EnableFCNonPostDiscard"; | |
763 | ||
764 | MySignalInterface.FCNonPostDiscardOn = 1; | |
765 | PCIEX_QR_I( psprintf("%s -> Denali FC Non-Post Discard Enabled. DLLP Non-Posted FCs Generated By Denali Model Will NOT Be Transmitted.", XactorName) ); | |
766 | } | |
767 | ||
768 | task FNXPCIEXactorTransaction::EnableFCCplDiscard() | |
769 | { | |
770 | string MethodName = "EnableFCCplDiscard"; | |
771 | ||
772 | MySignalInterface.FCCplDiscardOn = 1; | |
773 | PCIEX_QR_I( psprintf("%s -> Denali FC Completion Discard Enabled. DLLP COmpletion FCs Generated By Denali Model Will NOT Be Transmitted.", XactorName) ); | |
774 | } | |
775 | ||
776 | task FNXPCIEXactorTransaction::DisableFCDiscard() | |
777 | { | |
778 | string MethodName = "DisableFCDiscard"; | |
779 | ||
780 | MySignalInterface.FCDiscardOn = 0; | |
781 | PCIEX_QR_I( psprintf("%s -> Denali FC Discard Disabled. DLLP FCs Generated By Denali Model Will Be Transmitted.", XactorName) ); | |
782 | } | |
783 | ||
784 | task FNXPCIEXactorTransaction::DisableFCPostDiscard() | |
785 | { | |
786 | string MethodName = "DisableFCPostDiscard"; | |
787 | ||
788 | MySignalInterface.FCPostDiscardOn = 0; | |
789 | PCIEX_QR_I( psprintf("%s -> Denali FC Post Discard Disabled. DLLP Posted FCs Generated By Denali Model Will Be Transmitted.", XactorName) ); | |
790 | } | |
791 | ||
792 | task FNXPCIEXactorTransaction::DisableFCNonPostDiscard() | |
793 | { | |
794 | string MethodName = "DisableFCNonPostDiscard"; | |
795 | ||
796 | MySignalInterface.FCNonPostDiscardOn = 0; | |
797 | PCIEX_QR_I( psprintf("%s -> Denali FC Non-Post Discard Disabled. DLLP NonPosted FCs Generated By Denali Model Will Be Transmitted.", XactorName) ); | |
798 | } | |
799 | ||
800 | task FNXPCIEXactorTransaction::DisableFCCplDiscard() | |
801 | { | |
802 | string MethodName = "DisableFCCplDiscard"; | |
803 | ||
804 | MySignalInterface.FCCplDiscardOn = 0; | |
805 | PCIEX_QR_I( psprintf("%s -> Denali FC Completion Discard Disabled. DLLP Completion FCs Generated By Denali Model Will Be Transmitted.", XactorName) ); | |
806 | } | |
807 | ||
808 | task FNXPCIEXactorTransaction::SetLinkNumberTS1( bit[8:0] linkNumber ) | |
809 | { | |
810 | string MethodName = "SetLinkNumberTS1"; | |
811 | ||
812 | MySignalInterface.linkNmbrTS1 = linkNumber; | |
813 | PCIEX_QR_I( psprintf("%s:%s -> Link Number for TS1s will be set to %0h.", XactorName,MethodName,linkNumber) ); | |
814 | } | |
815 | ||
816 | task FNXPCIEXactorTransaction::SetLinkNumberTS2( bit[8:0] linkNumber ) | |
817 | { | |
818 | string MethodName = "SetLinkNumberTS2"; | |
819 | ||
820 | MySignalInterface.linkNmbrTS2 = linkNumber; | |
821 | PCIEX_QR_I( psprintf("%s:%s -> Link Number for TS2s will be set to %0h.", XactorName,MethodName,linkNumber) ); | |
822 | } | |
823 | ||
824 | task FNXPCIEXactorTransaction::SetLaneNumberTS1( bit[8:0] laneNumber ) | |
825 | { | |
826 | string MethodName = "SetLaneNumberTS1"; | |
827 | ||
828 | MySignalInterface.laneNmbrTS1 = laneNumber; | |
829 | PCIEX_QR_I( psprintf("%s:%s -> Lane Number for TS1s will be set to %0h.", XactorName,MethodName,laneNumber) ); | |
830 | } | |
831 | ||
832 | task FNXPCIEXactorTransaction::SetLaneNumberTS2( bit[8:0] laneNumber ) | |
833 | { | |
834 | string MethodName = "SetLaneNumberTS2"; | |
835 | ||
836 | MySignalInterface.laneNmbrTS2 = laneNumber; | |
837 | PCIEX_QR_I( psprintf("%s:%s -> Lane Number for TS2s will be set to %0h.", XactorName,MethodName,laneNumber) ); | |
838 | } | |
839 | ||
840 | task FNXPCIEXactorTransaction::TransmitFTSToLink( integer nmbrFts ) | |
841 | { | |
842 | string MethodName = "TransmitFTSToLink"; | |
843 | ||
844 | MySignalInterface.TransmitFTSToLink( nmbrFts ); | |
845 | PCIEX_QR_I( psprintf("%s:%s -> Transmit %0d FTS Ordered Sets to Link.", XactorName,MethodName,nmbrFts) ); | |
846 | } | |
847 | ||
848 | task FNXPCIEXactorTransaction::TransmitSKPToLink( integer nmbrSkp ) | |
849 | { | |
850 | string MethodName = "TransmitSKPToLink"; | |
851 | ||
852 | MySignalInterface.TransmitSKPToLink( nmbrSkp ); | |
853 | PCIEX_QR_I( psprintf("%s:%s -> Transmit %0d SKP Ordered Sets to Link.", XactorName,MethodName,nmbrSkp) ); | |
854 | } | |
855 | ||
856 | task FNXPCIEXactorTransaction::ExpectNullPkt( ) | |
857 | { | |
858 | string MethodName = "ExpectNullPkt"; | |
859 | ||
860 | MySignalInterface.expectNullPkt += 1; | |
861 | PCIEX_QR_I( psprintf("%s:%s -> %0d total NULL Packets expected", XactorName,MethodName,MySignalInterface.expectNullPkt) ); | |
862 | } | |
863 | ||
864 | task FNXPCIEXactorTransaction::Transmit_symbol_ToLink( integer nmbrSymbol, bit [8:0] symbol ) | |
865 | { | |
866 | string MethodName = "Transmit_symbol_ToLink"; | |
867 | ||
868 | MySignalInterface.Transmit_symbol_ToLink( nmbrSymbol, symbol ); | |
869 | PCIEX_QR_I( psprintf("AC: %s:%s -> Transmit %0d %x sympbol to Link.", XactorName,MethodName,nmbrSymbol, symbol) ); | |
870 | } | |
871 | ||
872 | // task FNXPCIEXactorTransaction::TransmitOrdersetToLink( integer nmbrFts, bit [31:0] orderset ) | |
873 | // task FNXPCIEXactorTransaction::TransmitTS1ToLink( integer nmbrTS1, denaliPcieOrderedSet orderset ) | |
874 | task FNXPCIEXactorTransaction::TransmitTS1ToLink( integer nmbrTS1) | |
875 | { | |
876 | string MethodName = "TransmitOrdersetToLink"; | |
877 | ||
878 | // MySignalInterface.TransmitOrdersetToLink( nmbrTS1, orderset ); | |
879 | MySignalInterface.TransmitTS1ToLink( nmbrTS1 ); | |
880 | PCIEX_QR_I( psprintf("%s:%s -> Transmit %0d Ordered Sets to Link.", XactorName,MethodName,nmbrTS1) ); | |
881 | } | |
882 | ||
883 | // For extended sync | |
884 | task FNXPCIEXactorTransaction::Enable_blunt_end() | |
885 | { | |
886 | string MethodName = "Enable_blunt_end"; | |
887 | ||
888 | MySignalInterface.blunt_end = 1; | |
889 | PCIEX_QR_I( psprintf("%s:%s -> blunt end Enabled. blunt_end = %d", XactorName,MethodName, | |
890 | MySignalInterface.blunt_end ) ); | |
891 | } | |
892 | ||
893 | // For extended sync | |
894 | task FNXPCIEXactorTransaction::Enable_count_4096FTS_1SKP() | |
895 | { | |
896 | string MethodName = "Enable_count_4096FTS_1SKP"; | |
897 | ||
898 | MySignalInterface.count_4096FTS_1SKP = 1; | |
899 | PCIEX_QR_I( psprintf("%s:%s -> count_4096FTS_1SKP Enabled. count_4096FTS_1SKP = %d", XactorName,MethodName, | |
900 | MySignalInterface.count_4096FTS_1SKP ) ); | |
901 | } | |
902 | ||
903 | task FNXPCIEXactorTransaction::Disable_count_4096FTS_1SKP() | |
904 | { | |
905 | string MethodName = "Disable_count_4096FTS_1SKP"; | |
906 | ||
907 | MySignalInterface.count_4096FTS_1SKP = 0; | |
908 | PCIEX_QR_I( psprintf("%s:%s -> count_4096FTS_1SKP Disabled. count_4096FTS_1SKP = %d", XactorName,MethodName, | |
909 | MySignalInterface.count_4096FTS_1SKP ) ); | |
910 | } | |
911 | ||
912 | task FNXPCIEXactorTransaction::DisableExpectsTimeout() | |
913 | { | |
914 | string MethodName = "DisableExpectsTimeout"; | |
915 | ||
916 | MyManager.disablteTlpExpectTimeout = 1; | |
917 | PCIEX_QR_I( "%s -> Expects Timeouts Disabled.", XactorName ); | |
918 | } | |
919 | ||
920 | task FNXPCIEXactorTransaction::EnableExpectsTimeout() | |
921 | { | |
922 | string MethodName = "EnableExpectsTimeout"; | |
923 | ||
924 | MyManager.disablteTlpExpectTimeout = 0; | |
925 | PCIEX_QR_I( "%s -> Expects Timeouts Enabled.", XactorName ); | |
926 | } | |
927 |