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

Subversion Repositories sgmii

[/] [sgmii/] [trunk/] [src/] [mSGMII.v] - Blame information for rev 23

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 jefflieu
/*
2 16 jefflieu
Copyright � 2012 JeffLieu-jefflieu@fpga-ipcores.com
3 15 jefflieu
 
4
        This file is part of SGMII-IP-Core.
5
    SGMII-IP-Core is free software: you can redistribute it and/or modify
6
    it under the terms of the GNU General Public License as published by
7
    the Free Software Foundation, either version 3 of the License, or
8
    (at your option) any later version.
9
 
10
    SGMII-IP-Core is distributed in the hope that it will be useful,
11
    but WITHOUT ANY WARRANTY; without even the implied warranty of
12
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
    GNU General Public License for more details.
14
 
15
    You should have received a copy of the GNU General Public License
16
    along with SGMII-IP-Core.  If not, see <http://www.gnu.org/licenses/>.
17
 
18 2 jefflieu
File            :
19
Description     :
20
        This core implements:
21
        B1000-X Standard
22
        PCS/PMA of SGMII MAC Side
23
Remarks         :
24
Revision        :
25
        Date    Author          Description
26
02/09/12        Jefflieu
27
*/
28
 
29
`timescale 1ns/10ps
30
`include "SGMIIDefs.v"
31
 
32
module mSGMII
33
(
34
        //Tranceiver Interface
35
        input   i_SerRx,
36
        output  o_SerTx,
37
        input   i_CalClk,
38
        input   i_RefClk125M,
39
        input   i_ARstHardware_L,
40
 
41
        //Local BUS interface
42
        //Wishbonebus, single transaction mode (non-pipeline slave)
43
        input   i_Cyc,
44
        input   i_Stb,
45
        input   i_WEn,
46
        input   [31:00]         i32_WrData,
47
        input   [07:00]         iv_Addr,
48
        output  [31:00]         o32_RdData,
49
        output  o_Ack,
50
 
51
        input   i_Mdc,
52
        inout   io_Mdio,
53
 
54
        output  o_Linkup,
55
        output  o_ANDone,
56 5 jefflieu
        //This is used in Phy-Side SGMII 
57
        input   i_PhyLink,
58
        input   i_PhyDuplex,
59
        input   [1:0] i2_PhySpeed,
60 2 jefflieu
 
61 5 jefflieu
 
62 2 jefflieu
        output  [1:0] o2_SGMIISpeed,
63
        output  o_SGMIIDuplex,
64
 
65
        //GMII Interface
66 23 jefflieu
        output  o_TxClk,
67
        output  o_RxClk,
68 2 jefflieu
        input   [07:00] i8_TxD,
69
        input   i_TxEN,
70
        input   i_TxER,
71
        output  [07:00] o8_RxD,
72
        output  o_RxDV,
73
        output  o_RxER,
74
        output  o_GMIIClk,
75
        output  o_MIIClk,
76
        output  o_Col,
77
        output  o_Crs);
78
 
79 23 jefflieu
        wire    w_ClkTx,w_ClkRx;
80 2 jefflieu
        wire    w_ClkSys;
81
        wire    w_Loopback;
82
        reg             r_RestartAN;
83
        wire    w_ANEnable;
84
        wire    [15:00] w16_Status;
85
        wire    w_MIIRst_L;
86
        wire    w_ANComplete;
87
 
88
        wire    [07:00] w8_RxCG_SyncToRxver;
89
        wire    w_RxCGInv_SyncToRxver;
90
        wire    w_RxCGCtrl_SyncToRxver;
91
        wire    w_SyncStatus,w_RxEven,w_IsComma,w_OSValid;
92
        wire    w_IsI1Set,w_IsI2Set,w_IsC1Set,w_IsC2Set,w_IsTSet,w_IsVSet,w_IsSSet,w_IsRSet;
93
 
94
        wire    w_Receiving;
95
        wire    w_Transmitting;
96
        wire    w_CheckEndKDK,w_CheckEndKD21_5D0_0,w_CheckEndKD2_2D0_0,w_CheckEndTRK,w_CheckEndTRR,w_CheckEndRRR,w_CheckEndRRK,w_CheckEndRRS;
97
        reg             r_CheckEndKDK,r_CheckEndKD21_5D0_0,r_CheckEndKD2_2D0_0,r_CheckEndTRK,r_CheckEndTRR,r_CheckEndRRR,r_CheckEndRRK,r_CheckEndRRS;
98
 
99
        wire    [2:0] w3_XmitState;
100
        wire    [16:01] w16_TxConfigReg;
101
        wire    [15:00] w16_RxConfigReg;
102
        wire    [15:00] w16_LcAdvAbility;
103
        wire    [15:00] w16_LpAdvAbility;
104
        wire    w_RUDIConfig;
105
        wire    w_RUDIIdle;
106
        wire    w_RUDIInvalid;
107
        wire    w_ARstLogic_L;
108
        wire    w_MIIReset_L;
109
        wire    w_ANRestart;
110
        //This delay stage is for the function checkend
111
        reg     [07:00] r8_RxCodeGroup[0:2];
112
        reg     r_RxCgInvalid[0:2];
113
        reg     r_RxCgCtrl[0:2];
114
        wire    [2:0] w3_PreCheckIsSSet;
115
        wire    [2:0] w3_PreCheckIsTSet;
116
        wire    [2:0] w3_PreCheckIsRSet;
117
        wire    [2:0] w3_PreCheckIsComma;
118
        wire    [2:0] w3_PreCheckIsD21_5;
119
        wire    [2:0] w3_PreCheckIsD2_2;
120
        wire    [2:0] w3_PreCheckIsD;
121
        wire    [2:0] w3_PreCheckIsD0_0;
122
        wire    w_GxBPowerDown;
123
        wire    w_TxCodeCtrl, w_TxCodeValid, w_RxCodeInvalid, w_RxCodeCtrl;
124
        wire    [07:00] w8_TxCode, w8_RxCode;
125
        wire    w_SignalDetect;
126
        wire    w_TxForceNegDisp;
127
        wire    w_PllLocked;
128
        wire    [20:00] w21_LinkTimer;
129
        wire    w_TxEN,w_TxER,w_RxER, w_RxDV;
130
        wire    [07:00] w8_RxD, w8_TxD;
131 15 jefflieu
        wire    w_BitSlip;
132
        wire    w_Invalid;//Not Used
133
        wire    w_TxEven;//Not Used
134
        wire    w_CurrentParity;
135 2 jefflieu
 
136
        //MII Clock Gen
137
        reg [6:0]        r7_Cntr;
138
        reg r_MIIClk;
139
        reg r_MIIClk_D;
140
        wire w_SamplingClk;
141
 
142
        integer DELAY;
143
 
144
        assign o_Linkup = w_SyncStatus;
145
        assign o_ANDone = w_ANComplete;
146 23 jefflieu
        assign o_TxClk = w_ClkTx;
147
        assign o_RxClk = w_ClkRx;
148 2 jefflieu
 
149
        mRateAdapter    u0RateAdapter(
150
        //MAC Side signal
151
        .i_TxClk                (o_MIIClk),
152
        .i_TxEN                 (i_TxEN ),
153
        .i_TxER                 (i_TxER ),
154
        .i8_TxD                 (i8_TxD ),
155
        .i_RxClk                (o_MIIClk),
156
        .o_RxEN                 (o_RxDV),
157
        .o_RxER                 (o_RxER),
158
        .o8_RxD                 (o8_RxD),
159
        .i2_Speed               (o2_SGMIISpeed),
160
        //SGMII PHY side
161
        .i_SamplingClk  (w_SamplingClk),
162
        .i_GClk                 (w_ClkSys),
163
        .o_TxEN                 (w_TxEN),
164
        .o_TxER                 (w_TxER),
165
        .o8_TxD                 (w8_TxD),
166
        .i_RxEN                 (w_RxDV),
167
        .i_RxER                 (w_RxER),
168
        .i8_RxD                 (w8_RxD));
169
 
170
        generate
171
                genvar STAGE;
172
                for(STAGE=0;STAGE<3;STAGE=STAGE+1)
173 15 jefflieu
                begin:PreCheck
174 2 jefflieu
                        assign w3_PreCheckIsComma[STAGE]        = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b1 && r8_RxCodeGroup[STAGE]==`K28_5)?1'b1:1'b0;
175
                        assign w3_PreCheckIsTSet[STAGE]         = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b1 && r8_RxCodeGroup[STAGE]==`K29_7)?1'b1:1'b0;
176
                        assign w3_PreCheckIsRSet[STAGE]         = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b1 && r8_RxCodeGroup[STAGE]==`K23_7)?1'b1:1'b0;
177
                        assign w3_PreCheckIsD21_5[STAGE]        = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b0 && r8_RxCodeGroup[STAGE]==`D21_5)?1'b1:1'b0;
178
                        assign w3_PreCheckIsD2_2[STAGE]         = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b0 && r8_RxCodeGroup[STAGE]==`D2_2)?1'b1:1'b0;
179
                        assign w3_PreCheckIsD[STAGE]            = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b0)?1'b1:1'b0;
180
                        assign w3_PreCheckIsD0_0[STAGE]         = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b0 && r8_RxCodeGroup[STAGE]==`D0_0)?1'b1:1'b0;
181
                        assign w3_PreCheckIsSSet[STAGE]         = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b1 && r8_RxCodeGroup[STAGE]==`K27_7)?1'b1:1'b0;
182
                end
183
        endgenerate
184
 
185
        assign w_CheckEndKDK            = w3_PreCheckIsComma[2] & w3_PreCheckIsD[1]&w3_PreCheckIsComma[0];
186
        assign w_CheckEndRRR            = &(w3_PreCheckIsRSet);
187
        assign w_CheckEndTRK            = w3_PreCheckIsTSet[2] & w3_PreCheckIsRSet[1] & w3_PreCheckIsComma[0];
188
        assign w_CheckEndTRR            = w3_PreCheckIsTSet[2] & w3_PreCheckIsRSet[1] & w3_PreCheckIsRSet[0];
189
        assign w_CheckEndKD21_5D0_0     = w3_PreCheckIsComma[2] & w3_PreCheckIsD21_5[1] & w3_PreCheckIsD2_2[0];
190
        assign w_CheckEndKD2_2D0_0      = w3_PreCheckIsComma[2] & w3_PreCheckIsD2_2[1] & w3_PreCheckIsD2_2[0];
191
        assign w_CheckEndRRK            = w3_PreCheckIsRSet[2] & w3_PreCheckIsRSet[1] & w3_PreCheckIsComma[0];
192
        assign w_CheckEndRRS            = w3_PreCheckIsRSet[2] & w3_PreCheckIsRSet[1] & w3_PreCheckIsSSet[0];
193
 
194 23 jefflieu
        always@(posedge w_ClkRx)
195 2 jefflieu
                begin
196
                        r8_RxCodeGroup[0]        <= w8_RxCode;
197
                        r_RxCgCtrl[0]            <= w_RxCodeCtrl;
198
                        r_RxCgInvalid[0]         <= w_RxCodeInvalid;
199
                        for(DELAY=1;DELAY<3;DELAY=DELAY+1)
200
                                begin
201
                                r8_RxCodeGroup[DELAY]   <= r8_RxCodeGroup[DELAY-1];
202
                                r_RxCgInvalid[DELAY]    <= r_RxCgInvalid[DELAY-1];
203
                                r_RxCgCtrl[DELAY]               <= r_RxCgCtrl[DELAY-1];
204
                                end
205
                end
206
 
207
        assign o_Col = w_Transmitting & w_Receiving;
208
        assign o_Crs = 1'b0;
209
        assign w_ARstLogic_L    = w_PllLocked & i_ARstHardware_L & (w_MIIRst_L);
210
        mRegisters      u0Registers(
211
        .w_ARstLogic_L  (w_ARstLogic_L),
212
        .i_Clk                  (w_ClkSys),
213
        .i_Cyc                  (i_Cyc),
214
        .i_Stb                  (i_Stb),
215
        .i_WEn                  (i_WEn),
216
        .i8_Addr                (iv_Addr),
217
        .i32_WrData             (i32_WrData),
218
        .o32_RdData             (o32_RdData),
219
        .o_Ack                  (o_Ack),
220 15 jefflieu
        .o_Stall                (),
221 2 jefflieu
 
222
        .io_Mdio                (io_Mdio),
223
        .i_Mdc                  (i_Mdc),
224
 
225
        //Register in and out,
226
 
227
        //MAC-Side SGMII
228
        .o2_SGMIISpeed          (o2_SGMIISpeed),
229
        .o_SGMIIDuplex          (o_SGMIIDuplex),
230
 
231
        //Phy-Side SGMII
232
        .i_PhyLink                      (i_PhyLink      ),
233
        .i_PhyDuplex            (i_PhyDuplex),
234
        .i2_PhySpeed            (i2_PhySpeed),
235
        .o21_LinkTimer          (w21_LinkTimer),
236
 
237
        .i16_TxConfigReg        (w16_TxConfigReg),
238
        .o_MIIRst_L                     (w_MIIRst_L),
239
        .o_ANEnable                     (w_ANEnable),
240
        .o_ANRestart            (w_ANRestart),
241
        .o_Loopback                     (w_Loopback),
242
        .o_GXBPowerDown         (w_GxBPowerDown),
243
        .o16_LcAdvAbility       (w16_LcAdvAbility),
244
        .i3_XmitState           (w3_XmitState),
245
        .i_SyncStatus           (w_SyncStatus),
246
        .i_ANComplete           (w_ANComplete),
247
        .i16_LpAdvAbility       (w16_LpAdvAbility));
248
 
249
         mSyncCtrl u0SyncCtrl(
250 23 jefflieu
        .i_Clk                          (w_ClkRx                ),
251 2 jefflieu
        .i_Cke                          ((~w_GxBPowerDown)      ),
252
        .i_ARst_L                       (w_ARstLogic_L  ),
253
        .i_CtrlLoopBack         (w_Loopback             ),
254
 
255
        .i8_RxCodeGroupIn       (r8_RxCodeGroup[2]      ),
256
        .i_RxCodeInvalid        (r_RxCgInvalid[2]       ),
257
        .i_RxCodeCtrl           (r_RxCgCtrl[2]          ),
258
        .i_SignalDetect         (w_SignalDetect         ),
259
 
260
        .o8_RxCodeGroupOut      (w8_RxCG_SyncToRxver    ),
261
        .o_RxCodeInvalid        (w_RxCGInv_SyncToRxver  ),
262
        .o_RxCodeCtrl           (w_RxCGCtrl_SyncToRxver ),
263
        .o_RxEven                       (w_RxEven                               ),
264
        .o_SyncStatus           (w_SyncStatus                   ),
265 13 jefflieu
        .o_BitSlip                      (w_BitSlip),
266 2 jefflieu
        .o_IsComma                      (w_IsComma      ),
267
        .o_OrderedSetValid      (w_OSValid      ),
268
        .o_IsI1Set                      (w_IsI1Set      ),
269
        .o_IsI2Set                      (w_IsI2Set      ),
270
        .o_IsC1Set                      (w_IsC1Set      ),
271
        .o_IsC2Set                      (w_IsC2Set      ),
272
        .o_IsTSet                       (w_IsTSet       ),
273
        .o_IsVSet                       (w_IsVSet       ),
274
        .o_IsSSet                       (w_IsSSet       ),
275
        .o_IsRSet                       (w_IsRSet       ));
276
 
277 23 jefflieu
        always@(posedge w_ClkRx)
278 2 jefflieu
        begin
279
        r_CheckEndKDK                   <= w_CheckEndKDK;
280
        r_CheckEndKD21_5D0_0    <= w_CheckEndKD21_5D0_0;
281
        r_CheckEndKD2_2D0_0         <= w_CheckEndKD2_2D0_0;
282
        r_CheckEndTRK                   <= w_CheckEndTRK;
283
        r_CheckEndTRR                   <= w_CheckEndTRR;
284
        r_CheckEndRRR                   <= w_CheckEndRRR;
285
        r_CheckEndRRK                   <= w_CheckEndRRK;
286
        r_CheckEndRRS                   <= w_CheckEndRRS;
287
        end
288
 
289
        mReceive        u0Receive(
290
        .i8_RxCodeGroupIn               (w8_RxCG_SyncToRxver    ),
291
        .i_RxCodeInvalid        (w_RxCGInv_SyncToRxver  ),
292
        .i_RxCodeCtrl           (w_RxCGCtrl_SyncToRxver ),
293
        .i_RxEven                       (w_RxEven                               ),
294
 
295
        .i3_Xmit                                (w3_XmitState),
296
 
297
        .i_IsComma                              (w_IsComma      ),
298
        .i_OrderedSetValid      (w_OSValid      ),
299
        .i_IsI1Set              (w_IsI1Set      ),
300
        .i_IsI2Set              (w_IsI2Set      ),
301
        .i_IsC1Set              (w_IsC1Set      ),
302
        .i_IsC2Set              (w_IsC2Set      ),
303
        .i_IsTSet               (w_IsTSet       ),
304
        .i_IsVSet               (w_IsVSet       ),
305
        .i_IsSSet               (w_IsSSet       ),
306
        .i_IsRSet               (w_IsRSet       ),
307
 
308
        .i_CheckEndKDK                  (r_CheckEndKDK                  ),
309
        .i_CheckEndKD21_5D0_0   (r_CheckEndKD21_5D0_0   ),
310
        .i_CheckEndKD2_2D0_0    (r_CheckEndKD2_2D0_0    ),
311
        .i_CheckEndTRK                  (r_CheckEndTRK                  ),
312
        .i_CheckEndTRR                  (r_CheckEndTRR                  ),
313
        .i_CheckEndRRR                  (r_CheckEndRRR                  ),
314
        .i_CheckEndRRK                  (r_CheckEndRRK                  ),
315
        .i_CheckEndRRS                  (r_CheckEndRRS                  ),
316
 
317
        .o16_RxConfigReg        (w16_RxConfigReg),
318
        .o_RUDIConfig           (w_RUDIConfig),
319
        .o_RUDIIdle                     (w_RUDIIdle),
320
        .o_RUDIInvalid          (w_RUDIInvalid),
321
 
322
        .o_RxDV                         (w_RxDV ),
323
        .o_RxER                         (w_RxER ),
324
        .o8_RxD                         (w8_RxD ),
325 15 jefflieu
        .o_Invalid                      (w_Invalid),
326 2 jefflieu
        .o_Receiving            (w_Receiving),
327 23 jefflieu
        .i_Clk                          (w_ClkRx),
328 2 jefflieu
        .i_ARst_L                       (w_ARstLogic_L));
329
 
330
        mANCtrl u0ANCtrl(
331 23 jefflieu
        .i_Clk                          (w_ClkRx                        ),
332 2 jefflieu
        .i_ARst_L                       (w_ARstLogic_L          ),
333 13 jefflieu
        .i_Cke                          ((~w_GxBPowerDown)              ),
334 2 jefflieu
        .i_RestartAN            (w_ANRestart            ),
335
        .i_SyncStatus           (w_SyncStatus           ),
336
        .i_ANEnable                     (w_ANEnable                     ),
337
        .i21_LinkTimer          (w21_LinkTimer          ),
338
        .i16_LcAdvAbility       (w16_LcAdvAbility       ),
339
        .o16_LpAdvAbility       (w16_LpAdvAbility       ),
340
        .o_ANComplete           (w_ANComplete           ),
341
        .i16_RxConfigReg        (w16_RxConfigReg        ),
342
        .i_RUDIConfig           (w_RUDIConfig           ),
343
        .i_RUDIIdle                     (w_RUDIIdle                     ),
344
        .i_RUDIInvalid          (w_RUDIInvalid          ),
345
        .o3_Xmit                        (w3_XmitState           ),
346
        .o16_TxConfigReg        (w16_TxConfigReg        ));
347
 
348
        mTransmit       u0Transmit(
349
        .i3_Xmit                        (w3_XmitState           ),
350
        .i16_ConfigReg          (w16_TxConfigReg        ),
351
 
352
        .i_TxEN                         (w_TxEN                         ),
353
        .i_TxER                         (w_TxER                         ),
354
        .i8_TxD                         (w8_TxD                         ),
355
 
356
 
357
        .o_Xmitting                     (w_Transmitting         ),
358
        .o_TxEven                       (w_TxEven                       ),
359
        .o8_TxCodeGroupOut      (w8_TxCode                      ),
360
        .o_TxCodeValid          (w_TxCodeValid          ),
361
        .o_TxCodeCtrl           (w_TxCodeCtrl           ),
362
        .i_CurrentParity        (w_CurrentParity        ),
363
 
364 23 jefflieu
        .i_Clk                          (w_ClkTx                        ),
365 2 jefflieu
        .i_ARst_L                       (w_ARstLogic_L          ));
366
 
367 3 jefflieu
        assign w_SignalDetect=~w_RxCodeInvalid;
368 2 jefflieu
 
369 16 jefflieu
        /*mXcver #(.pXcverName("AltArriaV"))u0Xcver(
370 2 jefflieu
 
371
        .i_SerRx                        (i_SerRx                        ),
372
        .o_SerTx                        (o_SerTx                        ),
373
 
374
        .i_RefClk125M           (i_RefClk125M           ),
375
        .o_TxClk                        (w_ClkSys                       ),
376 16 jefflieu
        .i_CalClk                       (i_RefClk125M           ),
377 2 jefflieu
        .i_GxBPwrDwn            (w_GxBPowerDown         ),
378
        .i_XcverDigitalRst      (~w_ARstLogic_L         ),
379
        .o_PllLocked            (w_PllLocked            ),
380
 
381 3 jefflieu
        .o_SignalDetect         (),
382 2 jefflieu
        .o8_RxCodeGroup         (w8_RxCode                      ),
383
        .o_RxCodeInvalid        (w_RxCodeInvalid        ),
384
        .o_RxCodeCtrl           (w_RxCodeCtrl           ),
385
 
386
        .i8_TxCodeGroup         (w8_TxCode                      ),
387
        .i_TxCodeValid          (w_TxCodeValid          ),
388
        .i_TxCodeCtrl           (w_TxCodeCtrl           ),
389
        .i_TxForceNegDisp       (w_TxForceNegDisp       ),
390 13 jefflieu
        .o_RunningDisparity     (w_CurrentParity));*/
391
 
392 23 jefflieu
 
393 13 jefflieu
        mAltA5GXlvds u0Xcverlvds(
394
        .i_SerRx                        (i_SerRx                        ),
395
        .o_SerTx                        (o_SerTx                        ),
396
 
397
        .i_RefClk125M           (i_RefClk125M           ),
398 23 jefflieu
        .o_TxClk                        (w_ClkTx                        ),
399
        .o_RxClk                        (w_ClkRx                        ),
400 13 jefflieu
        .i_GxBPwrDwn            (w_GxBPowerDown         ),
401 15 jefflieu
        .i_XcverDigitalRst      (~i_ARstHardware_L      ),
402 13 jefflieu
        .o_PllLocked            (w_PllLocked            ),
403
        .i_RxBitSlip            (w_BitSlip                      ),
404
 
405
        .o_SignalDetect         (),
406
        .o8_RxCodeGroup         (w8_RxCode                      ),
407
        .o_RxCodeInvalid        (w_RxCodeInvalid        ),
408
        .o_RxCodeCtrl           (w_RxCodeCtrl           ),
409
 
410
        .i8_TxCodeGroup         (w8_TxCode                      ),
411
        .i_TxCodeValid          (w_TxCodeValid          ),
412
        .i_TxCodeCtrl           (w_TxCodeCtrl           ),
413 15 jefflieu
        .i_TxForceNegDisp       (1'b0   ),
414 2 jefflieu
        .o_RunningDisparity     (w_CurrentParity));
415
 
416 23 jefflieu
        assign w_ClkSys  = w_ClkTx;
417 2 jefflieu
        assign o_GMIIClk = w_ClkSys;
418
 
419 11 jefflieu
        always@(posedge w_ClkSys or negedge i_ARstHardware_L )
420
        if(~i_ARstHardware_L)
421 2 jefflieu
        begin
422 11 jefflieu
                r7_Cntr         <= 7'h0;
423
                r_MIIClk        <= 1'b0;
424
        end else
425
        begin
426 2 jefflieu
                if(o2_SGMIISpeed==2'b01)
427
                        begin
428
                        if(r7_Cntr==7'h4) r7_Cntr<=7'h0; else r7_Cntr<=r7_Cntr+7'h1;
429
                        if(r7_Cntr==7'h4) r_MIIClk<=1'b1; else if(r7_Cntr==7'h1) r_MIIClk<=1'b0;
430
                        end
431
                else if(o2_SGMIISpeed==2'b00)
432
                        begin
433
                        if(r7_Cntr==7'h49) r7_Cntr<=7'h0; else r7_Cntr<=r7_Cntr+7'h1;
434
                        if(r7_Cntr==7'h49) r_MIIClk<=1'b1; else if(r7_Cntr==7'h24) r_MIIClk<=1'b0;
435
                        end
436
                r_MIIClk_D <= r_MIIClk;
437
        end
438
        assign w_SamplingClk = (r_MIIClk_D & (~r_MIIClk));
439
 
440
        //Insert Clock Buffer or PLL if necessary
441
        mClkBuf u0ClkBuf(.i_Clk(r_MIIClk),.o_Clk(o_MIIClk));
442
 
443
endmodule
444
 
445
 
446
 
447
 
448
 

powered by: WebSVN 2.1.0

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