OpenCores
URL https://opencores.org/ocsvn/pcie_vera_tb/pcie_vera_tb/trunk

Subversion Repositories pcie_vera_tb

[/] [pcie_vera_tb/] [trunk/] [InitFC1.vri] - Blame information for rev 8

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 cmagleby
// ===========================================================================
2
// File    : InitFC1.vri
3
// Author  : cwinward
4
// Date    : Mon Dec 3 11:03:46 MST 2007
5
// Project : TI PHY design
6
//
7
// Copyright (c) notice
8
// This code adheres to the GNU public license
9
//
10
// ===========================================================================
11
//
12
// $Id: InitFC1.vri,v 1.1.1.1 2007-12-05 18:37:07 cmagleby Exp $
13
//
14
// ===========================================================================
15
//
16
// $Log: not supported by cvs2svn $
17
//
18
// ===========================================================================
19
// Function : This file performs the initial flow control sequence.
20
//
21
// ===========================================================================
22
// ===========================================================================
23
 
24
#include 
25
 
26
task InitFC1(var bit [7:0] ph_cl, var bit [11:0] pd_cl, var bit [7:0] cplh_cl,var bit [11:0] cpld_cl,var bit [7:0] nph_cl,var bit [11:0] npd_cl,var bit INITFC_DONE){
27
  integer index;
28
  string dllp_type;
29
  bit fc1_p_rcvd = 1'b0;
30
  bit fc1_np_rcvd = 1'b0;
31
  bit fc1_cpl_rcvd = 1'b0;
32
  bit fc2_p_rcvd = 1'b0;
33
  bit fc2_np_rcvd = 1'b0;
34
  bit fc2_cpl_rcvd = 1'b0;
35
 
36
  bit fc1_completed = 1'b0;
37
  bit fc2_completed = 1'b0;
38
 
39
  //****************************************************************************************
40
  //new task to read out the dllp's
41
  //
42
 
43
  while(fc1_completed == 1'b0){
44
    fc1_completed = fc1_p_rcvd & fc1_np_rcvd & fc1_cpl_rcvd;
45
    printf("FC1_completed <= %d.\n",fc1_completed);
46
    receive_fc1_dllp(fc1_p_rcvd,fc1_np_rcvd,fc1_cpl_rcvd,ph_cl,pd_cl,cplh_cl,cpld_cl,nph_cl,npd_cl);
47
    dllp_type = "initfc1_p";
48
    printf("Sending out an InitFC1_P packet.\n");
49
    flowcntrl_1 = new(*,*,*,*);
50
    flowcntrl_1.build_packet(dllp_type);
51
    if (!semaphore_get(WAIT,my_semaphore,1))
52
      error ("Semaphore_get returned 0\n");
53
    for(index=0; index <= 3; index ++)
54
    {
55
      @ (posedge CLOCK);
56
      if(index==0){
57
        //ti_phy_top.rxdatak16 = 2'b01;
58
        //ti_phy_top.rxdata16  = {flowcntrl_1.temp_packet[0][7:0],8'h5C};
59
        //adding mailbox
60
        mailbox_put (rx_data_mailbox, {2'b01,flowcntrl_1.temp_packet[0][7:0],8'h5C});
61
        printf("DLLP bytes SDB & DLL_TYPE %h%h.\n",flowcntrl_1.temp_packet[0][7:0],8'h5C);
62
      }
63
      else if(index==1){
64
        //ti_phy_top.rxdatak16 = 2'b00;
65
        //ti_phy_top.rxdata16  = {flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]};
66
        //adding mailbox
67
        mailbox_put (rx_data_mailbox, {2'b00,flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]});
68
        printf("DLLP bytes 2 & 1 %h%h.\n",flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]);
69
      }
70
      else if(index==2){
71
        //ti_phy_top.rxdatak16 = 2'b00;
72
        //ti_phy_top.rxdata16  = {flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]};
73
        //adding mailbox
74
        mailbox_put (rx_data_mailbox, {2'b00,flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]});
75
        printf("DLLP CRC and byte 3 %h%h.\n",flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]);
76
      }
77
      else if(index==3){
78
        //ti_phy_top.rxdatak16 = 2'b10;
79
        //ti_phy_top.rxdata16  = {8'hFD,flowcntrl_1.temp_packet[1][15:8]};
80
        //adding mailbox
81
        mailbox_put (rx_data_mailbox, {2'b10,8'hFD,flowcntrl_1.temp_packet[1][15:8]});
82
        printf("DLLP STP and CRC %h%h.\n",8'hFD,flowcntrl_1.temp_packet[1][15:8]);
83
      }
84
    }
85
 
86
    @ (posedge CLOCK);
87
    //ti_phy_top.rxdatak16 = 2'b00;
88
    //ti_phy_top.rxdata16  = 1'b0;
89
    semaphore_put (my_semaphore, 1);
90
 
91
    dllp_type = "initfc1_np";
92
    printf("Sending out an InitFC1_NP packet.\n");
93
    flowcntrl_1 = new(8'h00,8'h00,8'h01,8'b01010000);
94
    flowcntrl_1.build_packet(dllp_type);
95
    if (!semaphore_get(WAIT,my_semaphore,1))
96
      error ("Semaphore_get returned 0\n");
97
    for(index=0; index <= 3; index ++)
98
    {
99
      @ (posedge CLOCK);
100
      if(index==0){
101
        //ti_phy_top.rxdatak16 = 2'b01;
102
        //ti_phy_top.rxdata16  = {flowcntrl_1.temp_packet[0][7:0],8'h5C};
103
        //adding mailbox
104
        mailbox_put (rx_data_mailbox, {2'b01,flowcntrl_1.temp_packet[0][7:0],8'h5C});
105
        printf("DLLP bytes SDB & DLL_TYPE %h%h.\n",flowcntrl_1.temp_packet[0][7:0],8'h5C);
106
      }
107
      else if(index==1){
108
        //ti_phy_top.rxdatak16 = 2'b00;
109
        //ti_phy_top.rxdata16  = {flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]};
110
        //adding mailbox
111
        mailbox_put (rx_data_mailbox, {2'b00,flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]});
112
        printf("DLLP bytes 2 & 1 %h%h.\n",flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]);
113
      }
114
      else if(index==2){
115
        //ti_phy_top.rxdatak16 = 2'b00;
116
        //ti_phy_top.rxdata16  = {flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]};
117
        //adding mailbox
118
        mailbox_put (rx_data_mailbox, {2'b00,flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]});
119
        printf("DLLP CRC and byte 3 %h%h.\n",flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]);
120
      }
121
      else if(index==3){
122
        //ti_phy_top.rxdatak16 = 2'b10;
123
        //ti_phy_top.rxdata16  = {8'hFD,flowcntrl_1.temp_packet[1][15:8]};
124
        //adding mailbox
125
        mailbox_put (rx_data_mailbox, {2'b10,8'hFD,flowcntrl_1.temp_packet[1][15:8]});
126
        printf("DLLP STP and CRC %h%h.\n",8'hFD,flowcntrl_1.temp_packet[1][15:8]);
127
      }
128
    }
129
 
130
    @ (posedge CLOCK);
131
    //ti_phy_top.rxdatak16 = 2'b00;
132
    //ti_phy_top.rxdata16  = 1'b0;
133
    semaphore_put (my_semaphore, 1);
134
 
135
    dllp_type = "initfc1_cpl";
136
    printf("Sending out an InitFC1_NP packet.\n");
137
    flowcntrl_1 = new(8'h40,8'h00,8'h01,8'b01100000);
138
    flowcntrl_1.build_packet(dllp_type);
139
    if (!semaphore_get(WAIT,my_semaphore,1))
140
      error ("Semaphore_get returned 0\n");
141
    for(index=0; index <= 3; index ++)
142
    {
143
      @ (posedge CLOCK);
144
      if(index==0){
145
        //ti_phy_top.rxdatak16 = 2'b01;
146
        //ti_phy_top.rxdata16  = {flowcntrl_1.temp_packet[0][7:0],8'h5C};
147
        //adding mailbox
148
        mailbox_put (rx_data_mailbox, {2'b01,flowcntrl_1.temp_packet[0][7:0],8'h5C});
149
        printf("DLLP bytes SDB & DLL_TYPE %h%h.\n",flowcntrl_1.temp_packet[0][7:0],8'h5C);
150
      }
151
      else if(index==1){
152
        //ti_phy_top.rxdatak16 = 2'b00;
153
        //ti_phy_top.rxdata16  = {flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]};
154
        //adding mailbox
155
        mailbox_put (rx_data_mailbox, {2'b00,flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]});
156
        printf("DLLP bytes 2 & 1 %h%h.\n",flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]);
157
      }
158
      else if(index==2){
159
        //ti_phy_top.rxdatak16 = 2'b00;
160
        //ti_phy_top.rxdata16  = {flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]};
161
        //adding mailbox
162
        mailbox_put (rx_data_mailbox, {2'b00,flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]});
163
        printf("DLLP CRC and byte 3 %h%h.\n",flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]);
164
      }
165
      else if(index==3){
166
        //ti_phy_top.rxdatak16 = 2'b10;
167
        //ti_phy_top.rxdata16  = {8'hFD,flowcntrl_1.temp_packet[1][15:8]};
168
        //adding mailbox
169
        mailbox_put (rx_data_mailbox, {2'b10,8'hFD,flowcntrl_1.temp_packet[1][15:8]});
170
        printf("DLLP STP and CRC %h%h.\n",8'hFD,flowcntrl_1.temp_packet[1][15:8]);
171
      }
172
    }
173
 
174
    @ (posedge CLOCK);
175
    //ti_phy_top.rxdatak16 = 2'b00;
176
    //ti_phy_top.rxdata16  = 1'b0;
177
    semaphore_put (my_semaphore, 1);
178
  }
179
 
180
  while(fc2_completed == 1'b0){
181
    fc2_completed = fc2_p_rcvd | fc2_np_rcvd | fc2_cpl_rcvd;
182
    printf("FC2_completed <= %d.\n",fc2_completed);
183
    receive_fc2_dllp(fc2_p_rcvd,fc2_np_rcvd,fc2_cpl_rcvd);
184
    dllp_type = "initfc1_p";
185
    printf("Sending out an InitFC2_P packet.\n");
186
    flowcntrl_1 = new(*,*,*,8'b11000000);
187
    flowcntrl_1.build_packet(dllp_type);
188
    if (!semaphore_get(WAIT,my_semaphore,1))
189
      error ("Semaphore_get returned 0\n");
190
    for(index=0; index <= 3; index ++)
191
    {
192
      @ (posedge CLOCK);
193
      if(index==0){
194
        //ti_phy_top.rxdatak16 = 2'b01;
195
        //ti_phy_top.rxdata16  = {flowcntrl_1.temp_packet[0][7:0],8'h5C};
196
        //adding mailbox
197
        mailbox_put (rx_data_mailbox, {2'b01,flowcntrl_1.temp_packet[0][7:0],8'h5C});
198
        printf("DLLP bytes SDB & DLL_TYPE %h%h.\n",flowcntrl_1.temp_packet[0][7:0],8'h5C);
199
      }
200
      else if(index==1){
201
        //ti_phy_top.rxdatak16 = 2'b00;
202
        //ti_phy_top.rxdata16  = {flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]};
203
        //adding mailbox
204
        mailbox_put (rx_data_mailbox, {2'b00,flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]});
205
        printf("DLLP bytes 2 & 1 %h%h.\n",flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]);
206
      }
207
      else if(index==2){
208
        //ti_phy_top.rxdatak16 = 2'b00;
209
        //ti_phy_top.rxdata16  = {flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]};
210
        //adding mailbox
211
        mailbox_put (rx_data_mailbox, {2'b00,flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]});
212
        printf("DLLP CRC and byte 3 %h%h.\n",flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]);
213
      }
214
      else if(index==3){
215
        //ti_phy_top.rxdatak16 = 2'b10;
216
        //ti_phy_top.rxdata16  = {8'hFD,flowcntrl_1.temp_packet[1][15:8]};
217
        //adding mailbox
218
        mailbox_put (rx_data_mailbox, {2'b10,8'hFD,flowcntrl_1.temp_packet[1][15:8]});
219
        printf("DLLP STP and CRC %h%h.\n",8'hFD,flowcntrl_1.temp_packet[1][15:8]);
220
      }
221
    }
222
 
223
    @ (posedge CLOCK);
224
    //ti_phy_top.rxdatak16 = 2'b00;
225
    //ti_phy_top.rxdata16  = 1'b0;
226
    semaphore_put (my_semaphore, 1);
227
 
228
    dllp_type = "initfc1_np";
229
    printf("Sending out an InitFC2_NP packet.\n");
230
    flowcntrl_1 = new(8'h00,8'h00,8'h01,8'b11010000);
231
    flowcntrl_1.build_packet(dllp_type);
232
    if (!semaphore_get(WAIT,my_semaphore,1))
233
      error ("Semaphore_get returned 0\n");
234
    for(index=0; index <= 3; index ++)
235
    {
236
      @ (posedge CLOCK);
237
      if(index==0){
238
        //ti_phy_top.rxdatak16 = 2'b01;
239
        //ti_phy_top.rxdata16  = {flowcntrl_1.temp_packet[0][7:0],8'h5C};
240
        //adding mailbox
241
        mailbox_put (rx_data_mailbox, {2'b01,flowcntrl_1.temp_packet[0][7:0],8'h5C});
242
        printf("DLLP bytes SDB & DLL_TYPE %h%h.\n",flowcntrl_1.temp_packet[0][7:0],8'h5C);
243
      }
244
      else if(index==1){
245
        //ti_phy_top.rxdatak16 = 2'b00;
246
        //ti_phy_top.rxdata16  = {flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]};
247
        //adding mailbox
248
        mailbox_put (rx_data_mailbox, {2'b00,flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]});
249
        printf("DLLP bytes 2 & 1 %h%h.\n",flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]);
250
      }
251
      else if(index==2){
252
        //ti_phy_top.rxdatak16 = 2'b00;
253
        //ti_phy_top.rxdata16  = {flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]};
254
        //adding mailbox
255
        mailbox_put (rx_data_mailbox, {2'b00,flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]});
256
        printf("DLLP CRC and byte 3 %h%h.\n",flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]);
257
      }
258
      else if(index==3){
259
        //ti_phy_top.rxdatak16 = 2'b10;
260
        //ti_phy_top.rxdata16  = {8'hFD,flowcntrl_1.temp_packet[1][15:8]};
261
        //adding mailbox
262
        mailbox_put (rx_data_mailbox, {2'b10,8'hFD,flowcntrl_1.temp_packet[1][15:8]});
263
        printf("DLLP STP and CRC %h%h.\n",8'hFD,flowcntrl_1.temp_packet[1][15:8]);
264
      }
265
    }
266
 
267
    @ (posedge CLOCK);
268
    //ti_phy_top.rxdatak16 = 2'b00;
269
    //ti_phy_top.rxdata16  = 1'b0;
270
    semaphore_put (my_semaphore, 1);
271
 
272
    dllp_type = "initfc1_cpl";
273
    printf("Sending out an InitFC2_NP packet.\n");
274
    flowcntrl_1 = new(8'h40,8'h00,8'h01,8'b11100000);
275
    flowcntrl_1.build_packet(dllp_type);
276
    if (!semaphore_get(WAIT,my_semaphore,1))
277
      error ("Semaphore_get returned 0\n");
278
    for(index=0; index <= 3; index ++)
279
    {
280
      @ (posedge CLOCK);
281
      if(index==0){
282
        //ti_phy_top.rxdatak16 = 2'b01;
283
        //ti_phy_top.rxdata16  = {flowcntrl_1.temp_packet[0][7:0],8'h5C};
284
        //adding mailbox
285
        mailbox_put (rx_data_mailbox, {2'b01,flowcntrl_1.temp_packet[0][7:0],8'h5C});
286
        printf("DLLP bytes SDB & DLL_TYPE %h%h.\n",flowcntrl_1.temp_packet[0][7:0],8'h5C);
287
      }
288
      else if(index==1){
289
        //ti_phy_top.rxdatak16 = 2'b00;
290
        //ti_phy_top.rxdata16  = {flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]};
291
        //adding mailbox
292
        mailbox_put (rx_data_mailbox, {2'b00,flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]});
293
        printf("DLLP bytes 2 & 1 %h%h.\n",flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]);
294
      }
295
      else if(index==2){
296
        //ti_phy_top.rxdatak16 = 2'b00;
297
        //ti_phy_top.rxdata16  = {flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]};
298
        //adding mailbox
299
        mailbox_put (rx_data_mailbox, {2'b00,flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]});
300
        printf("DLLP CRC and byte 3 %h%h.\n",flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]);
301
      }
302
      else if(index==3){
303
        //ti_phy_top.rxdatak16 = 2'b10;
304
        //ti_phy_top.rxdata16  = {8'hFD,flowcntrl_1.temp_packet[1][15:8]};
305
        //adding mailbox
306
        mailbox_put (rx_data_mailbox, {2'b10,8'hFD,flowcntrl_1.temp_packet[1][15:8]});
307
        printf("DLLP STP and CRC %h%h.\n",8'hFD,flowcntrl_1.temp_packet[1][15:8]);
308
      }
309
    }
310
 
311
    @ (posedge CLOCK);
312
    INITFC_DONE = fc1_completed & fc2_completed;
313
    //ti_phy_top.rxdatak16 = 2'b00;
314
    //ti_phy_top.rxdata16  = 1'b0;
315
    semaphore_put (my_semaphore, 1);
316
  }
317
 
318
}
319
 
320
task receive_fc1_dllp (var bit fc1_p_rcvd, var bit fc1_np_rcvd, var bit fc1_cpl_rcvd,var bit [7:0] ph_cl, var bit [11:0] pd_cl, var bit [7:0] cplh_cl,var bit [11:0] cpld_cl,var bit [7:0] nph_cl,var bit [11:0] npd_cl) {
321
  integer ret;
322
  bit [47:0] receive_dll_packet;
323
 
324
  while (~(fc1_p_rcvd & fc1_np_rcvd & fc1_cpl_rcvd)) {
325
    ret = mailbox_get (WAIT,dllp_mailbox,receive_dll_packet,CHECK);
326
    if(receive_dll_packet[7:0] == 8'h40){
327
      fc1_p_rcvd = 1'b1;
328
      ph_cl = {receive_dll_packet[13:8],receive_dll_packet[23:22]};
329
      pd_cl = {receive_dll_packet[19:16],receive_dll_packet[31:24]};
330
    }
331
    else if(receive_dll_packet[7:0] == 8'h50){
332
      fc1_np_rcvd = 1'b1;
333
      nph_cl = {receive_dll_packet[13:8],receive_dll_packet[23:22]};
334
      npd_cl = {receive_dll_packet[19:16],receive_dll_packet[31:24]};
335
    }
336
    else if(receive_dll_packet[7:0] == 8'h60){
337
      fc1_cpl_rcvd = 1'b1;
338
      cplh_cl = {receive_dll_packet[13:8],receive_dll_packet[23:22]};
339
      cpld_cl = {receive_dll_packet[19:16],receive_dll_packet[31:24]};
340
    }
341
    printf ("InitFC1 DLL PACKET (%0h) taken out of dll mailbox\n",receive_dll_packet);
342
  }
343
}
344
 
345
task receive_fc2_dllp (var bit fc2_p_rcvd, var bit fc2_np_rcvd, var bit fc2_cpl_rcvd) {
346
  integer ret;
347
  bit [47:0] receive_dll_packet;
348
 
349
  while (~(fc2_p_rcvd | fc2_np_rcvd | fc2_cpl_rcvd)) {
350
    ret = mailbox_get (WAIT,dllp_mailbox,receive_dll_packet,CHECK);
351
    if(receive_dll_packet[7:0] == 8'hC0){
352
      fc2_p_rcvd = 1'b1;
353
    }
354
    else if(receive_dll_packet[7:0] == 8'hD0){
355
      fc2_np_rcvd = 1'b1;
356
    }
357
    else if(receive_dll_packet[7:0] == 8'hE0){
358
      fc2_cpl_rcvd = 1'b1;
359
    }
360
    printf ("InitFC2 DLL PACKET (%0h) taken out of dll mailbox\n",receive_dll_packet);
361
  }
362
}
363
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.