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

Subversion Repositories sgmii

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

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 jefflieu
/*
2 15 jefflieu
Copyright � 2012 JeffLieu-lieumychuong@gmail.com
3
 
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
        input   [07:00] i8_TxD,
67
        input   i_TxEN,
68
        input   i_TxER,
69
        output  [07:00] o8_RxD,
70
        output  o_RxDV,
71
        output  o_RxER,
72
        output  o_GMIIClk,
73
        output  o_MIIClk,
74
        output  o_Col,
75
        output  o_Crs);
76
 
77
        wire    w_ClkSys;
78
        wire    w_Loopback;
79
        reg             r_RestartAN;
80
        wire    w_ANEnable;
81
        wire    [15:00] w16_Status;
82
        wire    w_MIIRst_L;
83
        wire    w_ANComplete;
84
 
85
        wire    [07:00] w8_RxCG_SyncToRxver;
86
        wire    w_RxCGInv_SyncToRxver;
87
        wire    w_RxCGCtrl_SyncToRxver;
88
        wire    w_SyncStatus,w_RxEven,w_IsComma,w_OSValid;
89
        wire    w_IsI1Set,w_IsI2Set,w_IsC1Set,w_IsC2Set,w_IsTSet,w_IsVSet,w_IsSSet,w_IsRSet;
90
 
91
        wire    w_Receiving;
92
        wire    w_Transmitting;
93
        wire    w_CheckEndKDK,w_CheckEndKD21_5D0_0,w_CheckEndKD2_2D0_0,w_CheckEndTRK,w_CheckEndTRR,w_CheckEndRRR,w_CheckEndRRK,w_CheckEndRRS;
94
        reg             r_CheckEndKDK,r_CheckEndKD21_5D0_0,r_CheckEndKD2_2D0_0,r_CheckEndTRK,r_CheckEndTRR,r_CheckEndRRR,r_CheckEndRRK,r_CheckEndRRS;
95
 
96
        wire    [2:0] w3_XmitState;
97
        wire    [16:01] w16_TxConfigReg;
98
        wire    [15:00] w16_RxConfigReg;
99
        wire    [15:00] w16_LcAdvAbility;
100
        wire    [15:00] w16_LpAdvAbility;
101
        wire    w_RUDIConfig;
102
        wire    w_RUDIIdle;
103
        wire    w_RUDIInvalid;
104
        wire    w_ARstLogic_L;
105
        wire    w_MIIReset_L;
106
        wire    w_ANRestart;
107
        //This delay stage is for the function checkend
108
        reg     [07:00] r8_RxCodeGroup[0:2];
109
        reg     r_RxCgInvalid[0:2];
110
        reg     r_RxCgCtrl[0:2];
111
        wire    [2:0] w3_PreCheckIsSSet;
112
        wire    [2:0] w3_PreCheckIsTSet;
113
        wire    [2:0] w3_PreCheckIsRSet;
114
        wire    [2:0] w3_PreCheckIsComma;
115
        wire    [2:0] w3_PreCheckIsD21_5;
116
        wire    [2:0] w3_PreCheckIsD2_2;
117
        wire    [2:0] w3_PreCheckIsD;
118
        wire    [2:0] w3_PreCheckIsD0_0;
119
        wire    w_GxBPowerDown;
120
        wire    w_TxCodeCtrl, w_TxCodeValid, w_RxCodeInvalid, w_RxCodeCtrl;
121
        wire    [07:00] w8_TxCode, w8_RxCode;
122
        wire    w_SignalDetect;
123
        wire    w_TxForceNegDisp;
124
        wire    w_PllLocked;
125
        wire    [20:00] w21_LinkTimer;
126
        wire    w_TxEN,w_TxER,w_RxER, w_RxDV;
127
        wire    [07:00] w8_RxD, w8_TxD;
128 15 jefflieu
        wire    w_BitSlip;
129
        wire    w_Invalid;//Not Used
130
        wire    w_TxEven;//Not Used
131
        wire    w_CurrentParity;
132 2 jefflieu
 
133
        //MII Clock Gen
134
        reg [6:0]        r7_Cntr;
135
        reg r_MIIClk;
136
        reg r_MIIClk_D;
137
        wire w_SamplingClk;
138
 
139
        integer DELAY;
140
 
141
        assign o_Linkup = w_SyncStatus;
142
        assign o_ANDone = w_ANComplete;
143
 
144
        mRateAdapter    u0RateAdapter(
145
        //MAC Side signal
146
        .i_TxClk                (o_MIIClk),
147
        .i_TxEN                 (i_TxEN ),
148
        .i_TxER                 (i_TxER ),
149
        .i8_TxD                 (i8_TxD ),
150
        .i_RxClk                (o_MIIClk),
151
        .o_RxEN                 (o_RxDV),
152
        .o_RxER                 (o_RxER),
153
        .o8_RxD                 (o8_RxD),
154
        .i2_Speed               (o2_SGMIISpeed),
155
        //SGMII PHY side
156
        .i_SamplingClk  (w_SamplingClk),
157
        .i_GClk                 (w_ClkSys),
158
        .o_TxEN                 (w_TxEN),
159
        .o_TxER                 (w_TxER),
160
        .o8_TxD                 (w8_TxD),
161
        .i_RxEN                 (w_RxDV),
162
        .i_RxER                 (w_RxER),
163
        .i8_RxD                 (w8_RxD));
164
 
165
        generate
166
                genvar STAGE;
167
                for(STAGE=0;STAGE<3;STAGE=STAGE+1)
168 15 jefflieu
                begin:PreCheck
169 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;
170
                        assign w3_PreCheckIsTSet[STAGE]         = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b1 && r8_RxCodeGroup[STAGE]==`K29_7)?1'b1:1'b0;
171
                        assign w3_PreCheckIsRSet[STAGE]         = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b1 && r8_RxCodeGroup[STAGE]==`K23_7)?1'b1:1'b0;
172
                        assign w3_PreCheckIsD21_5[STAGE]        = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b0 && r8_RxCodeGroup[STAGE]==`D21_5)?1'b1:1'b0;
173
                        assign w3_PreCheckIsD2_2[STAGE]         = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b0 && r8_RxCodeGroup[STAGE]==`D2_2)?1'b1:1'b0;
174
                        assign w3_PreCheckIsD[STAGE]            = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b0)?1'b1:1'b0;
175
                        assign w3_PreCheckIsD0_0[STAGE]         = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b0 && r8_RxCodeGroup[STAGE]==`D0_0)?1'b1:1'b0;
176
                        assign w3_PreCheckIsSSet[STAGE]         = (r_RxCgInvalid[STAGE]==1'b0 && r_RxCgCtrl[STAGE]==1'b1 && r8_RxCodeGroup[STAGE]==`K27_7)?1'b1:1'b0;
177
                end
178
        endgenerate
179
 
180
        assign w_CheckEndKDK            = w3_PreCheckIsComma[2] & w3_PreCheckIsD[1]&w3_PreCheckIsComma[0];
181
        assign w_CheckEndRRR            = &(w3_PreCheckIsRSet);
182
        assign w_CheckEndTRK            = w3_PreCheckIsTSet[2] & w3_PreCheckIsRSet[1] & w3_PreCheckIsComma[0];
183
        assign w_CheckEndTRR            = w3_PreCheckIsTSet[2] & w3_PreCheckIsRSet[1] & w3_PreCheckIsRSet[0];
184
        assign w_CheckEndKD21_5D0_0     = w3_PreCheckIsComma[2] & w3_PreCheckIsD21_5[1] & w3_PreCheckIsD2_2[0];
185
        assign w_CheckEndKD2_2D0_0      = w3_PreCheckIsComma[2] & w3_PreCheckIsD2_2[1] & w3_PreCheckIsD2_2[0];
186
        assign w_CheckEndRRK            = w3_PreCheckIsRSet[2] & w3_PreCheckIsRSet[1] & w3_PreCheckIsComma[0];
187
        assign w_CheckEndRRS            = w3_PreCheckIsRSet[2] & w3_PreCheckIsRSet[1] & w3_PreCheckIsSSet[0];
188
 
189
        always@(posedge w_ClkSys)
190
                begin
191
                        r8_RxCodeGroup[0]        <= w8_RxCode;
192
                        r_RxCgCtrl[0]            <= w_RxCodeCtrl;
193
                        r_RxCgInvalid[0]         <= w_RxCodeInvalid;
194
                        for(DELAY=1;DELAY<3;DELAY=DELAY+1)
195
                                begin
196
                                r8_RxCodeGroup[DELAY]   <= r8_RxCodeGroup[DELAY-1];
197
                                r_RxCgInvalid[DELAY]    <= r_RxCgInvalid[DELAY-1];
198
                                r_RxCgCtrl[DELAY]               <= r_RxCgCtrl[DELAY-1];
199
                                end
200
                end
201
 
202
        assign o_Col = w_Transmitting & w_Receiving;
203
        assign o_Crs = 1'b0;
204
        assign w_ARstLogic_L    = w_PllLocked & i_ARstHardware_L & (w_MIIRst_L);
205
        mRegisters      u0Registers(
206
        .w_ARstLogic_L  (w_ARstLogic_L),
207
        .i_Clk                  (w_ClkSys),
208
        .i_Cyc                  (i_Cyc),
209
        .i_Stb                  (i_Stb),
210
        .i_WEn                  (i_WEn),
211
        .i8_Addr                (iv_Addr),
212
        .i32_WrData             (i32_WrData),
213
        .o32_RdData             (o32_RdData),
214
        .o_Ack                  (o_Ack),
215 15 jefflieu
        .o_Stall                (),
216 2 jefflieu
 
217
        .io_Mdio                (io_Mdio),
218
        .i_Mdc                  (i_Mdc),
219
 
220
        //Register in and out,
221
 
222
        //MAC-Side SGMII
223
        .o2_SGMIISpeed          (o2_SGMIISpeed),
224
        .o_SGMIIDuplex          (o_SGMIIDuplex),
225
 
226
        //Phy-Side SGMII
227
        .i_PhyLink                      (i_PhyLink      ),
228
        .i_PhyDuplex            (i_PhyDuplex),
229
        .i2_PhySpeed            (i2_PhySpeed),
230
        .o21_LinkTimer          (w21_LinkTimer),
231
 
232
        .i16_TxConfigReg        (w16_TxConfigReg),
233
        .o_MIIRst_L                     (w_MIIRst_L),
234
        .o_ANEnable                     (w_ANEnable),
235
        .o_ANRestart            (w_ANRestart),
236
        .o_Loopback                     (w_Loopback),
237
        .o_GXBPowerDown         (w_GxBPowerDown),
238
        .o16_LcAdvAbility       (w16_LcAdvAbility),
239
        .i3_XmitState           (w3_XmitState),
240
        .i_SyncStatus           (w_SyncStatus),
241
        .i_ANComplete           (w_ANComplete),
242
        .i16_LpAdvAbility       (w16_LpAdvAbility));
243
 
244
         mSyncCtrl u0SyncCtrl(
245
        .i_Clk                          (w_ClkSys               ),
246
        .i_Cke                          ((~w_GxBPowerDown)      ),
247
        .i_ARst_L                       (w_ARstLogic_L  ),
248
        .i_CtrlLoopBack         (w_Loopback             ),
249
 
250
        .i8_RxCodeGroupIn       (r8_RxCodeGroup[2]      ),
251
        .i_RxCodeInvalid        (r_RxCgInvalid[2]       ),
252
        .i_RxCodeCtrl           (r_RxCgCtrl[2]          ),
253
        .i_SignalDetect         (w_SignalDetect         ),
254
 
255
        .o8_RxCodeGroupOut      (w8_RxCG_SyncToRxver    ),
256
        .o_RxCodeInvalid        (w_RxCGInv_SyncToRxver  ),
257
        .o_RxCodeCtrl           (w_RxCGCtrl_SyncToRxver ),
258
        .o_RxEven                       (w_RxEven                               ),
259
        .o_SyncStatus           (w_SyncStatus                   ),
260 13 jefflieu
        .o_BitSlip                      (w_BitSlip),
261 2 jefflieu
        .o_IsComma                      (w_IsComma      ),
262
        .o_OrderedSetValid      (w_OSValid      ),
263
        .o_IsI1Set                      (w_IsI1Set      ),
264
        .o_IsI2Set                      (w_IsI2Set      ),
265
        .o_IsC1Set                      (w_IsC1Set      ),
266
        .o_IsC2Set                      (w_IsC2Set      ),
267
        .o_IsTSet                       (w_IsTSet       ),
268
        .o_IsVSet                       (w_IsVSet       ),
269
        .o_IsSSet                       (w_IsSSet       ),
270
        .o_IsRSet                       (w_IsRSet       ));
271
 
272
        always@(posedge w_ClkSys)
273
        begin
274
        r_CheckEndKDK                   <= w_CheckEndKDK;
275
        r_CheckEndKD21_5D0_0    <= w_CheckEndKD21_5D0_0;
276
        r_CheckEndKD2_2D0_0         <= w_CheckEndKD2_2D0_0;
277
        r_CheckEndTRK                   <= w_CheckEndTRK;
278
        r_CheckEndTRR                   <= w_CheckEndTRR;
279
        r_CheckEndRRR                   <= w_CheckEndRRR;
280
        r_CheckEndRRK                   <= w_CheckEndRRK;
281
        r_CheckEndRRS                   <= w_CheckEndRRS;
282
        end
283
 
284
        mReceive        u0Receive(
285
        .i8_RxCodeGroupIn               (w8_RxCG_SyncToRxver    ),
286
        .i_RxCodeInvalid        (w_RxCGInv_SyncToRxver  ),
287
        .i_RxCodeCtrl           (w_RxCGCtrl_SyncToRxver ),
288
        .i_RxEven                       (w_RxEven                               ),
289
 
290
        .i3_Xmit                                (w3_XmitState),
291
 
292
        .i_IsComma                              (w_IsComma      ),
293
        .i_OrderedSetValid      (w_OSValid      ),
294
        .i_IsI1Set              (w_IsI1Set      ),
295
        .i_IsI2Set              (w_IsI2Set      ),
296
        .i_IsC1Set              (w_IsC1Set      ),
297
        .i_IsC2Set              (w_IsC2Set      ),
298
        .i_IsTSet               (w_IsTSet       ),
299
        .i_IsVSet               (w_IsVSet       ),
300
        .i_IsSSet               (w_IsSSet       ),
301
        .i_IsRSet               (w_IsRSet       ),
302
 
303
        .i_CheckEndKDK                  (r_CheckEndKDK                  ),
304
        .i_CheckEndKD21_5D0_0   (r_CheckEndKD21_5D0_0   ),
305
        .i_CheckEndKD2_2D0_0    (r_CheckEndKD2_2D0_0    ),
306
        .i_CheckEndTRK                  (r_CheckEndTRK                  ),
307
        .i_CheckEndTRR                  (r_CheckEndTRR                  ),
308
        .i_CheckEndRRR                  (r_CheckEndRRR                  ),
309
        .i_CheckEndRRK                  (r_CheckEndRRK                  ),
310
        .i_CheckEndRRS                  (r_CheckEndRRS                  ),
311
 
312
        .o16_RxConfigReg        (w16_RxConfigReg),
313
        .o_RUDIConfig           (w_RUDIConfig),
314
        .o_RUDIIdle                     (w_RUDIIdle),
315
        .o_RUDIInvalid          (w_RUDIInvalid),
316
 
317
        .o_RxDV                         (w_RxDV ),
318
        .o_RxER                         (w_RxER ),
319
        .o8_RxD                         (w8_RxD ),
320 15 jefflieu
        .o_Invalid                      (w_Invalid),
321 2 jefflieu
        .o_Receiving            (w_Receiving),
322
        .i_Clk                          (w_ClkSys),
323
        .i_ARst_L                       (w_ARstLogic_L));
324
 
325
        mANCtrl u0ANCtrl(
326
        .i_Clk                          (w_ClkSys                       ),
327
        .i_ARst_L                       (w_ARstLogic_L          ),
328 13 jefflieu
        .i_Cke                          ((~w_GxBPowerDown)              ),
329 2 jefflieu
        .i_RestartAN            (w_ANRestart            ),
330
        .i_SyncStatus           (w_SyncStatus           ),
331
        .i_ANEnable                     (w_ANEnable                     ),
332
        .i21_LinkTimer          (w21_LinkTimer          ),
333
        .i16_LcAdvAbility       (w16_LcAdvAbility       ),
334
        .o16_LpAdvAbility       (w16_LpAdvAbility       ),
335
        .o_ANComplete           (w_ANComplete           ),
336
        .i16_RxConfigReg        (w16_RxConfigReg        ),
337
        .i_RUDIConfig           (w_RUDIConfig           ),
338
        .i_RUDIIdle                     (w_RUDIIdle                     ),
339
        .i_RUDIInvalid          (w_RUDIInvalid          ),
340
        .o3_Xmit                        (w3_XmitState           ),
341
        .o16_TxConfigReg        (w16_TxConfigReg        ));
342
 
343
        mTransmit       u0Transmit(
344
        .i3_Xmit                        (w3_XmitState           ),
345
        .i16_ConfigReg          (w16_TxConfigReg        ),
346
 
347
        .i_TxEN                         (w_TxEN                         ),
348
        .i_TxER                         (w_TxER                         ),
349
        .i8_TxD                         (w8_TxD                         ),
350
 
351
 
352
        .o_Xmitting                     (w_Transmitting         ),
353
        .o_TxEven                       (w_TxEven                       ),
354
        .o8_TxCodeGroupOut      (w8_TxCode                      ),
355
        .o_TxCodeValid          (w_TxCodeValid          ),
356
        .o_TxCodeCtrl           (w_TxCodeCtrl           ),
357
        .i_CurrentParity        (w_CurrentParity        ),
358
 
359
        .i_Clk                          (w_ClkSys                       ),
360
        .i_ARst_L                       (w_ARstLogic_L          ));
361
 
362 3 jefflieu
        assign w_SignalDetect=~w_RxCodeInvalid;
363 2 jefflieu
 
364 13 jefflieu
        /*mXcver u0Xcver(
365 2 jefflieu
 
366
        .i_SerRx                        (i_SerRx                        ),
367
        .o_SerTx                        (o_SerTx                        ),
368
 
369
        .i_RefClk125M           (i_RefClk125M           ),
370
        .o_TxClk                        (w_ClkSys                       ),
371
        .i_CalClk                       (i_CalClk                       ),
372
        .i_GxBPwrDwn            (w_GxBPowerDown         ),
373
        .i_XcverDigitalRst      (~w_ARstLogic_L         ),
374
        .o_PllLocked            (w_PllLocked            ),
375
 
376 3 jefflieu
        .o_SignalDetect         (),
377 2 jefflieu
        .o8_RxCodeGroup         (w8_RxCode                      ),
378
        .o_RxCodeInvalid        (w_RxCodeInvalid        ),
379
        .o_RxCodeCtrl           (w_RxCodeCtrl           ),
380
 
381
        .i8_TxCodeGroup         (w8_TxCode                      ),
382
        .i_TxCodeValid          (w_TxCodeValid          ),
383
        .i_TxCodeCtrl           (w_TxCodeCtrl           ),
384
        .i_TxForceNegDisp       (w_TxForceNegDisp       ),
385 13 jefflieu
        .o_RunningDisparity     (w_CurrentParity));*/
386
 
387
        mAltA5GXlvds u0Xcverlvds(
388
        .i_SerRx                        (i_SerRx                        ),
389
        .o_SerTx                        (o_SerTx                        ),
390
 
391
        .i_RefClk125M           (i_RefClk125M           ),
392
        .o_CoreClk                      (w_ClkSys                       ),
393
        .i_GxBPwrDwn            (w_GxBPowerDown         ),
394 15 jefflieu
        .i_XcverDigitalRst      (~i_ARstHardware_L      ),
395 13 jefflieu
        .o_PllLocked            (w_PllLocked            ),
396
        .i_RxBitSlip            (w_BitSlip                      ),
397
 
398
        .o_SignalDetect         (),
399
        .o8_RxCodeGroup         (w8_RxCode                      ),
400
        .o_RxCodeInvalid        (w_RxCodeInvalid        ),
401
        .o_RxCodeCtrl           (w_RxCodeCtrl           ),
402
 
403
        .i8_TxCodeGroup         (w8_TxCode                      ),
404
        .i_TxCodeValid          (w_TxCodeValid          ),
405
        .i_TxCodeCtrl           (w_TxCodeCtrl           ),
406 15 jefflieu
        .i_TxForceNegDisp       (1'b0   ),
407 2 jefflieu
        .o_RunningDisparity     (w_CurrentParity));
408
 
409
        assign o_GMIIClk = w_ClkSys;
410
 
411 11 jefflieu
        always@(posedge w_ClkSys or negedge i_ARstHardware_L )
412
        if(~i_ARstHardware_L)
413 2 jefflieu
        begin
414 11 jefflieu
                r7_Cntr         <= 7'h0;
415
                r_MIIClk        <= 1'b0;
416
        end else
417
        begin
418 2 jefflieu
                if(o2_SGMIISpeed==2'b01)
419
                        begin
420
                        if(r7_Cntr==7'h4) r7_Cntr<=7'h0; else r7_Cntr<=r7_Cntr+7'h1;
421
                        if(r7_Cntr==7'h4) r_MIIClk<=1'b1; else if(r7_Cntr==7'h1) r_MIIClk<=1'b0;
422
                        end
423
                else if(o2_SGMIISpeed==2'b00)
424
                        begin
425
                        if(r7_Cntr==7'h49) r7_Cntr<=7'h0; else r7_Cntr<=r7_Cntr+7'h1;
426
                        if(r7_Cntr==7'h49) r_MIIClk<=1'b1; else if(r7_Cntr==7'h24) r_MIIClk<=1'b0;
427
                        end
428
                r_MIIClk_D <= r_MIIClk;
429
        end
430
        assign w_SamplingClk = (r_MIIClk_D & (~r_MIIClk));
431
 
432
        //Insert Clock Buffer or PLL if necessary
433
        mClkBuf u0ClkBuf(.i_Clk(r_MIIClk),.o_Clk(o_MIIClk));
434
 
435
endmodule
436
 
437
 
438
 
439
 
440
 

powered by: WebSVN 2.1.0

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