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

Subversion Repositories pcie_ds_dma

[/] [pcie_ds_dma/] [trunk/] [core/] [ds_dma64/] [pcie_src/] [pcie_core64_m1/] [source_artix7/] [cl_a7pcie_x4_pipe_reset.v] - Blame information for rev 49

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 46 dsmv
//-----------------------------------------------------------------------------
2
//
3
// (c) Copyright 2010-2011 Xilinx, Inc. All rights reserved.
4
//
5
// This file contains confidential and proprietary information
6
// of Xilinx, Inc. and is protected under U.S. and
7
// international copyright and other intellectual property
8
// laws.
9
//
10
// DISCLAIMER
11
// This disclaimer is not a license and does not grant any
12
// rights to the materials distributed herewith. Except as
13
// otherwise provided in a valid license issued to you by
14
// Xilinx, and to the maximum extent permitted by applicable
15
// law: (1) THESE MATERIALS ARE MADE AVAILABLE "AS IS" AND
16
// WITH ALL FAULTS, AND XILINX HEREBY DISCLAIMS ALL WARRANTIES
17
// AND CONDITIONS, EXPRESS, IMPLIED, OR STATUTORY, INCLUDING
18
// BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, NON-
19
// INFRINGEMENT, OR FITNESS FOR ANY PARTICULAR PURPOSE; and
20
// (2) Xilinx shall not be liable (whether in contract or tort,
21
// including negligence, or under any other theory of
22
// liability) for any loss or damage of any kind or nature
23
// related to, arising under or in connection with these
24
// materials, including for any direct, or any indirect,
25
// special, incidental, or consequential loss or damage
26
// (including loss of data, profits, goodwill, or any type of
27
// loss or damage suffered as a result of any action brought
28
// by a third party) even if such damage or loss was
29
// reasonably foreseeable or Xilinx had been advised of the
30
// possibility of the same.
31
//
32
// CRITICAL APPLICATIONS
33
// Xilinx products are not designed or intended to be fail-
34
// safe, or for use in any application requiring fail-safe
35
// performance, such as life-support or safety devices or
36
// systems, Class III medical devices, nuclear facilities,
37
// applications related to the deployment of airbags, or any
38
// other applications that could lead to death, personal
39
// injury, or severe property or environmental damage
40
// (individually and collectively, "Critical
41
// Applications"). Customer assumes the sole risk and
42
// liability of any use of Xilinx products in Critical
43
// Applications, subject only to applicable laws and
44
// regulations governing limitations on product liability.
45
//
46
// THIS COPYRIGHT NOTICE AND DISCLAIMER MUST BE RETAINED AS
47
// PART OF THIS FILE AT ALL TIMES.
48
//
49
//-----------------------------------------------------------------------------
50
// Project    : Series-7 Integrated Block for PCI Express
51
// File       : cl_a7pcie_x4_pipe_reset.v
52 49 dsmv
// Version    : 1.11
53 46 dsmv
//------------------------------------------------------------------------------
54
//  Filename     :  pipe_reset.v
55
//  Description  :  PIPE Reset Module for 7 Series Transceiver
56 48 dsmv
//  Version      :  20.2
57 46 dsmv
//------------------------------------------------------------------------------
58
 
59
 
60
 
61
`timescale 1ns / 1ps
62
 
63
 
64
 
65
//---------- PIPE Reset Module -------------------------------------------------
66
module cl_a7pcie_x4_pipe_reset #
67
(
68
 
69
    //---------- Global ------------------------------------
70
    parameter PCIE_SIM_SPEEDUP  = "FALSE",                  // PCIe sim speedup
71
    parameter PCIE_GT_DEVICE    = "GTX",
72
    parameter PCIE_PLL_SEL      = "CPLL",                   // PCIe PLL select for Gen1/Gen2 only
73
    parameter PCIE_POWER_SAVING = "TRUE",                   // PCIe power saving
74
    parameter PCIE_TXBUF_EN     = "FALSE",                  // PCIe TX buffer enable
75
    parameter PCIE_LANE         = 1,                        // PCIe number of lanes
76
    //---------- Local -------------------------------------
77
    parameter CFG_WAIT_MAX      = 6'd63,                    // Configuration wait max
78
    parameter BYPASS_RXCDRLOCK  = 1                         // Bypass RXCDRLOCK
79
 
80
)
81
 
82
(
83
 
84
    //---------- Input -------------------------------------
85
    input                           RST_CLK,
86
    input                           RST_RXUSRCLK,
87
    input                           RST_DCLK,
88
    input                           RST_RST_N,
89
    input       [PCIE_LANE-1:0]     RST_DRP_DONE,
90
    input       [PCIE_LANE-1:0]     RST_RXPMARESETDONE,
91
    input       [PCIE_LANE-1:0]     RST_CPLLLOCK,
92
    input                           RST_QPLL_IDLE,
93
    input       [PCIE_LANE-1:0]     RST_RATE_IDLE,
94
    input       [PCIE_LANE-1:0]     RST_RXCDRLOCK,
95
    input                           RST_MMCM_LOCK,
96
    input       [PCIE_LANE-1:0]     RST_RESETDONE,
97
    input       [PCIE_LANE-1:0]     RST_PHYSTATUS,
98
    input       [PCIE_LANE-1:0]     RST_TXSYNC_DONE,
99
 
100
    //---------- Output ------------------------------------
101
    output                          RST_CPLLRESET,
102
    output                          RST_CPLLPD,
103 48 dsmv
    output reg                      RST_DRP_START,
104
    output reg                      RST_DRP_X16X20_MODE,
105
    output reg                      RST_DRP_X16,
106 46 dsmv
    output                          RST_RXUSRCLK_RESET,
107
    output                          RST_DCLK_RESET,
108
    output                          RST_GTRESET,
109
    output                          RST_USERRDY,
110
    output                          RST_TXSYNC_START,
111
    output                          RST_IDLE,
112 48 dsmv
    output      [4:0]               RST_FSM
113 46 dsmv
 
114
);
115
 
116
    //---------- Input Register ----------------------------
117 48 dsmv
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg         [PCIE_LANE-1:0]     drp_done_reg1;
118
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg         [PCIE_LANE-1:0]     rxpmaresetdone_reg1;
119
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg         [PCIE_LANE-1:0]     cplllock_reg1;
120
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg                             qpll_idle_reg1;
121
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg         [PCIE_LANE-1:0]     rate_idle_reg1;
122
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg         [PCIE_LANE-1:0]     rxcdrlock_reg1;
123
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg                             mmcm_lock_reg1;
124
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg         [PCIE_LANE-1:0]     resetdone_reg1;
125
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg         [PCIE_LANE-1:0]     phystatus_reg1;
126
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg         [PCIE_LANE-1:0]     txsync_done_reg1;
127 46 dsmv
 
128 48 dsmv
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg         [PCIE_LANE-1:0]     drp_done_reg2;
129
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg         [PCIE_LANE-1:0]     rxpmaresetdone_reg2;
130
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg         [PCIE_LANE-1:0]     cplllock_reg2;
131
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg                             qpll_idle_reg2;
132
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg         [PCIE_LANE-1:0]     rate_idle_reg2;
133
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg         [PCIE_LANE-1:0]     rxcdrlock_reg2;
134
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg                             mmcm_lock_reg2;
135
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg         [PCIE_LANE-1:0]     resetdone_reg2;
136
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg         [PCIE_LANE-1:0]     phystatus_reg2;
137
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg         [PCIE_LANE-1:0]     txsync_done_reg2;
138 46 dsmv
 
139
    //---------- Internal Signal ---------------------------
140
    reg         [ 5:0]              cfg_wait_cnt      =  6'd0;
141
 
142
    //---------- Output Register ---------------------------
143
    reg                             cpllreset         =  1'd0;
144
    reg                             cpllpd            =  1'd0;
145 48 dsmv
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg                             rxusrclk_rst_reg1 =  1'd0;
146
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg                             rxusrclk_rst_reg2 =  1'd0;
147
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg                             dclk_rst_reg1     =  1'd0;
148
(* ASYNC_REG = "TRUE", SHIFT_EXTRACT = "NO" *)    reg                             dclk_rst_reg2     =  1'd0;
149 46 dsmv
    reg                             gtreset           =  1'd0;
150
    reg                             userrdy           =  1'd0;
151 48 dsmv
    reg         [4:0]               fsm               =  5'h2;
152 46 dsmv
 
153
    //---------- FSM ---------------------------------------                                         
154 48 dsmv
    localparam                      FSM_IDLE             = 5'h0;
155
    localparam                      FSM_CFG_WAIT         = 5'h1;
156
    localparam                      FSM_CPLLRESET        = 5'h2;
157
    localparam                      FSM_DRP_X16_START    = 5'h3;
158
    localparam                      FSM_DRP_X16_DONE     = 5'h4;
159
    localparam                      FSM_CPLLLOCK         = 5'h5;
160
    localparam                      FSM_DRP              = 5'h6;
161
    localparam                      FSM_GTRESET          = 5'h7;
162
    localparam                      FSM_RXPMARESETDONE_1 = 5'h8;
163
    localparam                      FSM_RXPMARESETDONE_2 = 5'h9;
164
    localparam                      FSM_DRP_X20_START    = 5'hA;
165
    localparam                      FSM_DRP_X20_DONE     = 5'hB;
166
    localparam                      FSM_MMCM_LOCK        = 5'hC;
167
    localparam                      FSM_RESETDONE        = 5'hD;
168
    localparam                      FSM_CPLL_PD          = 5'hE;
169
    localparam                      FSM_TXSYNC_START     = 5'hF;
170
    localparam                      FSM_TXSYNC_DONE      = 5'h10;
171 46 dsmv
 
172
 
173
 
174
//---------- Input FF ----------------------------------------------------------
175
always @ (posedge RST_CLK)
176
begin
177
 
178
    if (!RST_RST_N)
179
        begin
180
        //---------- 1st Stage FF --------------------------    
181
        drp_done_reg1       <= {PCIE_LANE{1'd0}};
182
        rxpmaresetdone_reg1 <= {PCIE_LANE{1'd0}};
183
        cplllock_reg1       <= {PCIE_LANE{1'd0}};
184
        qpll_idle_reg1      <= 1'd0;
185
        rate_idle_reg1      <= {PCIE_LANE{1'd0}};
186
        rxcdrlock_reg1      <= {PCIE_LANE{1'd0}};
187
        mmcm_lock_reg1      <= 1'd0;
188
        resetdone_reg1      <= {PCIE_LANE{1'd0}};
189
        phystatus_reg1      <= {PCIE_LANE{1'd0}};
190
        txsync_done_reg1    <= {PCIE_LANE{1'd0}};
191
        //---------- 2nd Stage FF --------------------------
192
        drp_done_reg2       <= {PCIE_LANE{1'd0}};
193
        rxpmaresetdone_reg2 <= {PCIE_LANE{1'd0}};
194
        cplllock_reg2       <= {PCIE_LANE{1'd0}};
195
        qpll_idle_reg2      <= 1'd0;
196
        rate_idle_reg2      <= {PCIE_LANE{1'd0}};
197
        rxcdrlock_reg2      <= {PCIE_LANE{1'd0}};
198
        mmcm_lock_reg2      <= 1'd0;
199
        resetdone_reg2      <= {PCIE_LANE{1'd0}};
200
        phystatus_reg2      <= {PCIE_LANE{1'd0}};
201
        txsync_done_reg2    <= {PCIE_LANE{1'd0}};
202
        end
203
    else
204
        begin
205
        //---------- 1st Stage FF --------------------------  
206
        drp_done_reg1       <= RST_DRP_DONE;
207
        rxpmaresetdone_reg1 <= RST_RXPMARESETDONE;
208
        cplllock_reg1       <= RST_CPLLLOCK;
209
        qpll_idle_reg1      <= RST_QPLL_IDLE;
210
        rate_idle_reg1      <= RST_RATE_IDLE;
211
        rxcdrlock_reg1      <= RST_RXCDRLOCK;
212
        mmcm_lock_reg1      <= RST_MMCM_LOCK;
213
        resetdone_reg1      <= RST_RESETDONE;
214
        phystatus_reg1      <= RST_PHYSTATUS;
215
        txsync_done_reg1    <= RST_TXSYNC_DONE;
216
        //---------- 2nd Stage FF --------------------------
217
        drp_done_reg2       <= drp_done_reg1;
218
        rxpmaresetdone_reg2 <= rxpmaresetdone_reg1;
219
        cplllock_reg2       <= cplllock_reg1;
220
        qpll_idle_reg2      <= qpll_idle_reg1;
221
        rate_idle_reg2      <= rate_idle_reg1;
222
        rxcdrlock_reg2      <= rxcdrlock_reg1;
223
        mmcm_lock_reg2      <= mmcm_lock_reg1;
224
        resetdone_reg2      <= resetdone_reg1;
225
        phystatus_reg2      <= phystatus_reg1;
226
        txsync_done_reg2    <= txsync_done_reg1;
227
        end
228
 
229
end
230
 
231
 
232
 
233
//---------- Configuration Reset Wait Counter ----------------------------------
234
always @ (posedge RST_CLK)
235
begin
236
 
237
    if (!RST_RST_N)
238
        cfg_wait_cnt <= 6'd0;
239
    else
240
 
241
        //---------- Increment Configuration Reset Wait Counter
242
        if ((fsm == FSM_CFG_WAIT) && (cfg_wait_cnt < CFG_WAIT_MAX))
243
            cfg_wait_cnt <= cfg_wait_cnt + 6'd1;
244
 
245
        //---------- Hold Configuration Reset Wait Counter -
246
        else if ((fsm == FSM_CFG_WAIT) && (cfg_wait_cnt == CFG_WAIT_MAX))
247
            cfg_wait_cnt <= cfg_wait_cnt;
248
 
249
        //---------- Reset Configuration Reset Wait Counter 
250
        else
251
            cfg_wait_cnt <= 6'd0;
252
 
253
end
254
 
255
 
256
 
257
//---------- PIPE Reset FSM ----------------------------------------------------
258
always @ (posedge RST_CLK)
259
begin
260
 
261
    if (!RST_RST_N)
262
        begin
263
        fsm       <= FSM_CFG_WAIT;
264
        cpllreset <= 1'd0;
265
        cpllpd    <= 1'd0;
266
        gtreset   <= 1'd0;
267
        userrdy   <= 1'd0;
268
        end
269
    else
270
        begin
271
 
272
        case (fsm)
273
 
274
        //---------- Idle State ----------------------------
275
        FSM_IDLE :
276
 
277
            begin
278
            if (!RST_RST_N)
279
                begin
280
                fsm       <= FSM_CFG_WAIT;
281
                cpllreset <= 1'd0;
282
                cpllpd    <= 1'd0;
283
                gtreset   <= 1'd0;
284
                userrdy   <= 1'd0;
285
                end
286
            else
287
                begin
288
                fsm       <= FSM_IDLE;
289
                cpllreset <= cpllreset;
290
                cpllpd    <= cpllpd;
291
                gtreset   <= gtreset;
292
                userrdy   <= userrdy;
293
                end
294
            end
295
 
296
        //----------  Wait for Configuration Reset Delay ---
297
        FSM_CFG_WAIT :
298
 
299
            begin
300
            fsm       <= ((cfg_wait_cnt == CFG_WAIT_MAX) ? FSM_CPLLRESET : FSM_CFG_WAIT);
301
            cpllreset <= cpllreset;
302
            cpllpd    <= cpllpd;
303
            gtreset   <= gtreset;
304
            userrdy   <= userrdy;
305
            end
306
 
307
        //---------- Hold CPLL and GTX Channel in Reset ----
308
        FSM_CPLLRESET :
309
 
310
            begin
311
            fsm       <= ((&(~cplllock_reg2) && (&(~resetdone_reg2))) ?  FSM_CPLLLOCK : FSM_CPLLRESET);
312
            cpllreset <= 1'd1;
313
            cpllpd    <= cpllpd;
314
            gtreset   <= 1'd1;
315
            userrdy   <= userrdy;
316
            end
317
 
318
        //---------- Wait for CPLL Lock --------------------
319
        FSM_CPLLLOCK :
320
 
321
            begin
322
            fsm       <= (&cplllock_reg2 ? FSM_DRP : FSM_CPLLLOCK);
323
            cpllreset <= 1'd0;
324
            cpllpd    <= cpllpd;
325
            gtreset   <= gtreset;
326
            userrdy   <= userrdy;
327
            end
328
 
329
        //---------- Wait for DRP Done to Setup Gen1 -------
330
        FSM_DRP :
331
 
332
            begin
333
            fsm       <= (&rate_idle_reg2 ? ((PCIE_GT_DEVICE == "GTX") ? FSM_GTRESET : FSM_DRP_X16_START) : FSM_DRP);
334
            cpllreset <= cpllreset;
335
            cpllpd    <= cpllpd;
336
            gtreset   <= gtreset;
337
            userrdy   <= userrdy;
338
            end
339
 
340
        //---------- Start DRP x16 -------------------------
341
        FSM_DRP_X16_START :
342
 
343
            begin
344
            fsm       <= &(~drp_done_reg2) ? FSM_DRP_X16_DONE : FSM_DRP_X16_START;
345
            cpllreset <= cpllreset;
346
            cpllpd    <= cpllpd;
347
            gtreset   <= gtreset;
348
            userrdy   <= userrdy;
349
            end
350
 
351
        //---------- Wait for DRP x16 Done -----------------    
352
        FSM_DRP_X16_DONE :
353
 
354
            begin
355
            fsm       <= (&drp_done_reg2) ? FSM_GTRESET : FSM_DRP_X16_DONE;
356
            cpllreset <= cpllreset;
357
            cpllpd    <= cpllpd;
358
            gtreset   <= gtreset;
359
            userrdy   <= userrdy;
360
            end
361
 
362
        //---------- Release GTX Channel Reset -------------
363
        FSM_GTRESET :
364
 
365
            begin
366
            fsm       <= (PCIE_GT_DEVICE == "GTX") ? FSM_MMCM_LOCK : FSM_RXPMARESETDONE_1;
367
            cpllreset <= cpllreset;
368
            cpllpd    <= cpllpd;
369
            gtreset   <= 1'b0;
370
            userrdy   <= userrdy;
371
            end
372
 
373
        //---------- Wait for RXPMARESETDONE Assertion -----
374
        FSM_RXPMARESETDONE_1 :
375
 
376
            begin
377
            fsm       <= (&rxpmaresetdone_reg2 || (PCIE_SIM_SPEEDUP == "TRUE")) ? FSM_RXPMARESETDONE_2 : FSM_RXPMARESETDONE_1;
378
            cpllreset <= cpllreset;
379
            cpllpd    <= cpllpd;
380
            gtreset   <= gtreset;
381
            userrdy   <= userrdy;
382
            end
383
 
384
        //---------- Wait for RXPMARESETDONE De-assertion --
385
        FSM_RXPMARESETDONE_2 :
386
 
387
            begin
388
            fsm       <= (&(~rxpmaresetdone_reg2) || (PCIE_SIM_SPEEDUP == "TRUE")) ? FSM_DRP_X20_START : FSM_RXPMARESETDONE_2;
389
            cpllreset <= cpllreset;
390
            cpllpd    <= cpllpd;
391
            gtreset   <= gtreset;
392
            userrdy   <= userrdy;
393
            end
394
 
395
        //---------- Start DRP x20 -------------------------
396
        FSM_DRP_X20_START :
397
 
398
            begin
399
            fsm       <= &(~drp_done_reg2) ? FSM_DRP_X20_DONE : FSM_DRP_X20_START;
400
            cpllreset <= cpllreset;
401
            cpllpd    <= cpllpd;
402
            gtreset   <= gtreset;
403
            userrdy   <= userrdy;
404
            end
405
 
406
        //---------- Wait for DRP x20 Done -----------------    
407
        FSM_DRP_X20_DONE :
408
 
409
            begin
410
            fsm       <= (&drp_done_reg2) ? FSM_MMCM_LOCK : FSM_DRP_X20_DONE;
411
            cpllreset <= cpllreset;
412
            cpllpd    <= cpllpd;
413
            gtreset   <= gtreset;
414
            userrdy   <= userrdy;
415
            end
416
 
417
        //---------- Wait for MMCM and RX CDR Lock ---------
418
        FSM_MMCM_LOCK :
419
 
420
            begin
421
            if (mmcm_lock_reg2 && (&rxcdrlock_reg2 || (BYPASS_RXCDRLOCK == 1)) && (qpll_idle_reg2 || (PCIE_PLL_SEL == "CPLL")))
422
                begin
423
                fsm       <= FSM_RESETDONE;
424
                cpllreset <= cpllreset;
425
                cpllpd    <= cpllpd;
426
                gtreset   <= gtreset;
427
                userrdy   <= 1'd1;
428
                end
429
            else
430
                begin
431
                fsm       <= FSM_MMCM_LOCK;
432
                cpllreset <= cpllreset;
433
                cpllpd    <= cpllpd;
434
                gtreset   <= gtreset;
435
                userrdy   <= 1'd0;
436
                end
437
            end
438
 
439
        //---------- Wait for [TX/RX]RESETDONE and PHYSTATUS 
440
        FSM_RESETDONE :
441
 
442
            begin
443
            fsm       <= (&resetdone_reg2 && (&(~phystatus_reg2)) ? FSM_CPLL_PD : FSM_RESETDONE);
444
            cpllreset <= cpllreset;
445
            cpllpd    <= cpllpd;
446
            gtreset   <= gtreset;
447
            userrdy   <= userrdy;
448
            end
449
 
450
        //---------- Power-Down CPLL if QPLL is Used for Gen1/Gen2
451
        FSM_CPLL_PD :
452
 
453
            begin
454
            fsm       <= ((PCIE_TXBUF_EN == "TRUE") ? FSM_IDLE : FSM_TXSYNC_START);
455
            cpllreset <= cpllreset;
456
            cpllpd    <= (PCIE_PLL_SEL == "QPLL");
457
            gtreset   <= gtreset;
458
            userrdy   <= userrdy;
459
            end
460
 
461
        //---------- Start TX Sync -------------------------
462
        FSM_TXSYNC_START :
463
 
464
            begin
465
            fsm       <= (&(~txsync_done_reg2) ? FSM_TXSYNC_DONE : FSM_TXSYNC_START);
466
            cpllreset <= cpllreset;
467
            cpllpd    <= cpllpd;
468
            gtreset   <= gtreset;
469
            userrdy   <= userrdy;
470
            end
471
 
472
        //---------- Wait for TX Sync Done -----------------
473
        FSM_TXSYNC_DONE :
474
 
475
            begin
476
            fsm       <= (&txsync_done_reg2 ? FSM_IDLE : FSM_TXSYNC_DONE);
477
            cpllreset <= cpllreset;
478
            cpllpd    <= cpllpd;
479
            gtreset   <= gtreset;
480
            userrdy   <= userrdy;
481
            end
482
 
483
        //---------- Default State -------------------------
484
        default :
485
 
486
            begin
487
            fsm       <= FSM_CFG_WAIT;
488
            cpllreset <= 1'd0;
489
            cpllpd    <= 1'd0;
490
            gtreset   <= 1'd0;
491
            userrdy   <= 1'd0;
492
            end
493
 
494
        endcase
495
 
496
        end
497
 
498
end
499
 
500
 
501
 
502
//---------- RXUSRCLK Reset Synchronizer ---------------------------------------
503
always @ (posedge RST_RXUSRCLK)
504
begin
505
 
506
    if (cpllreset)
507
        begin
508
        rxusrclk_rst_reg1 <= 1'd1;
509
        rxusrclk_rst_reg2 <= 1'd1;
510
        end
511
    else
512
        begin
513
        rxusrclk_rst_reg1 <= 1'd0;
514
        rxusrclk_rst_reg2 <= rxusrclk_rst_reg1;
515
        end
516
 
517
end
518
 
519
 
520
 
521
//---------- DCLK Reset Synchronizer -------------------------------------------
522
always @ (posedge RST_DCLK)
523
begin
524
 
525
    if (fsm == FSM_CFG_WAIT)
526
        begin
527
        dclk_rst_reg1 <= 1'd1;
528 48 dsmv
        dclk_rst_reg2 <= dclk_rst_reg1;
529 46 dsmv
        end
530
    else
531
        begin
532
        dclk_rst_reg1 <= 1'd0;
533
        dclk_rst_reg2 <= dclk_rst_reg1;
534
        end
535
 
536
end
537
 
538
 
539
 
540
//---------- PIPE Reset Output -------------------------------------------------
541
assign RST_CPLLRESET       = cpllreset;
542
assign RST_CPLLPD          = ((PCIE_POWER_SAVING == "FALSE") ? 1'd0 : cpllpd);
543
assign RST_RXUSRCLK_RESET  = rxusrclk_rst_reg2;
544
assign RST_DCLK_RESET      = dclk_rst_reg2;
545
assign RST_GTRESET         = gtreset;
546
assign RST_USERRDY         = userrdy;
547
assign RST_TXSYNC_START    = (fsm == FSM_TXSYNC_START);
548
assign RST_IDLE            = (fsm == FSM_IDLE);
549
assign RST_FSM             = fsm;
550
 
551
 
552
 
553 48 dsmv
 
554
//--------------------------------------------------------------------------------------------------
555
//  Register Output
556
//--------------------------------------------------------------------------------------------------
557
always @ (posedge RST_CLK)
558
begin
559
 
560
    if (!RST_RST_N)
561
        begin
562
        RST_DRP_START       <= 1'd0;
563
        RST_DRP_X16X20_MODE <= 1'd0;
564
        RST_DRP_X16         <= 1'd0;
565
        end
566
    else
567
        begin
568
        RST_DRP_START       <= (fsm == FSM_DRP_X16_START) || (fsm == FSM_DRP_X20_START);
569
        RST_DRP_X16X20_MODE <= (fsm == FSM_DRP_X16_START) || (fsm == FSM_DRP_X16_DONE) || (fsm == FSM_DRP_X20_START) || (fsm == FSM_DRP_X20_DONE);
570
        RST_DRP_X16         <= (fsm == FSM_DRP_X16_START) || (fsm == FSM_DRP_X16_DONE);
571
        end
572
 
573
end
574
 
575
 
576
 
577 46 dsmv
endmodule

powered by: WebSVN 2.1.0

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