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

Subversion Repositories sgmii

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

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 13 jefflieu
 
2
 
3
module mAltA5GXlvds (
4
        input   i_SerRx,
5
        output  o_SerTx,
6
 
7
        input   i_RefClk125M,
8 23 jefflieu
        output  o_RxClk,
9
        output  o_TxClk,
10 13 jefflieu
        input   i_GxBPwrDwn,
11
        input   i_XcverDigitalRst,
12
    output      o_PllLocked,
13
 
14
        output o_SignalDetect,
15
        output [7:0] o8_RxCodeGroup,
16
        output  o_RxCodeInvalid,
17
        output  o_RxCodeCtrl,
18
        input   i_RxBitSlip,
19
 
20
        input [7:0] i8_TxCodeGroup,
21
        input   i_TxCodeValid,
22
        input   i_TxCodeCtrl,
23
        input   i_TxForceNegDisp,
24
    output      o_RunningDisparity);
25
 
26
        wire [9:0]       w10_txdata;
27
        wire [9:0]       w10_rxdata;
28
        wire [9:0]       w10_txdatalocal;
29
        wire [9:0]       w10_rxdatalocal;
30 15 jefflieu
        wire w_RxKErr,w_RxRdErr;
31 16 jefflieu
        wire w_TxClk,w_RxClk;
32
        wire w_BitSlip;
33 13 jefflieu
 
34 16 jefflieu
 
35 15 jefflieu
        mEnc8b10bMem u8b10bEnc(
36
        .i8_Din                         (i8_TxCodeGroup),               //HGFEDCBA
37
        .i_Kin                          (i_TxCodeCtrl),
38
        .i_ForceDisparity       (i_TxForceNegDisp),
39 16 jefflieu
        .i_Disparity            (~i_TxForceNegDisp),    //1 is positive, 0 is negative
40
        .o10_Dout                       (w10_txdata),                   //abcdeifghj
41 15 jefflieu
        .o_Rd                           (o_RunningDisparity),
42
        .o_KErr                         (),
43 23 jefflieu
        .i_Clk                          (w_TxClk),
44 16 jefflieu
        .i_ARst_L                       (~i_XcverDigitalRst));
45 13 jefflieu
 
46 15 jefflieu
        mDec8b10bMem u8b10bDec(
47
        .o8_Dout                        (o8_RxCodeGroup),               //HGFEDCBA
48
        .o_Kout                         (o_RxCodeCtrl),
49
        .o_DErr                         (),
50
        .o_KErr                         (w_RxKErr),
51
        .o_DpErr                        (w_RxRdErr),
52
        .i_ForceDisparity       (1'b0),
53
        .i_Disparity            (1'b0),
54 16 jefflieu
        .i10_Din                        (w10_rxdata),                   //abcdeifghj
55 15 jefflieu
        .o_Rd                           (),
56 16 jefflieu
        .i_Clk                          (w_RxClk),
57 15 jefflieu
        .i_ARst_L                       (~i_XcverDigitalRst));
58
 
59 13 jefflieu
        assign o_RxCodeInvalid = w_RxKErr|w_RxRdErr;
60 15 jefflieu
        assign o_SignalDetect = (~o_RxCodeInvalid)|o_RxCodeCtrl;
61 13 jefflieu
 
62
        mAltArriaVlvdsRx ulvdsrx (
63 16 jefflieu
        .rx_cda_reset                   (w_RxCdaReset),
64
        .rx_channel_data_align  (i_RxBitSlip),
65
        .rx_in                                  (i_SerRx),
66
        .rx_inclock                             (i_RefClk125M),
67
        .rx_out                                 (w10_rxdata),
68
        .rx_locked                              (o_PllLocked),
69
        .rx_reset                               (w_RxReset),
70
        .rx_divfwdclk                   (w_RxClk));
71 13 jefflieu
 
72 16 jefflieu
        /////////////////////////////////////////////////
73
        //Hold In Reset Until Stable
74
        /////////////////////////////////////////////////
75
        reg [11:0] r12_LockCnt;
76 17 jefflieu
        always@(posedge w_RxClk or negedge o_PllLocked)
77 16 jefflieu
                if((~o_PllLocked))
78
                        r12_LockCnt<=12'h0;
79
                else begin
80
                        if(~(&r12_LockCnt))
81
                                r12_LockCnt<=r12_LockCnt+12'h1;
82
                end
83
 
84
        assign w_RxReset        = ~r12_LockCnt[11];
85
        assign w_RxCdaReset = (r12_LockCnt[11:10]==2'b11)?1'b0:1'b1;
86
 
87
        reg [9:0] r10_txdata;
88 13 jefflieu
        mAltArriaVlvdsTx ulvdstx(
89 16 jefflieu
        .tx_in                  (r10_txdata),
90
        .tx_inclock             (w_TxSerClk),
91
        .tx_enable              (w_TxEnClk),
92
        .tx_out                 (o_SerTx));
93 13 jefflieu
 
94 16 jefflieu
        mAltLvdsPll uAltTxPll(
95 23 jefflieu
                .refclk         (i_RefClk125M), // refclk.clk
96 16 jefflieu
                .rst            (w_PorRst),     // reset.reset
97
                .outclk_0       (w_TxSerClk),   // outclk0.clk
98
                .outclk_1       (w_TxEnClk),    // outclk1.clk
99
                .outclk_2       (w_TxClk),              // outclk2.clk
100
                .locked         (w_TxLocked)    // locked.export
101
        );
102 13 jefflieu
 
103 23 jefflieu
        reg [9:0] r10_txdata0;
104 16 jefflieu
        always@(posedge w_TxClk)
105 23 jefflieu
                r10_txdata <= w10_txdata;
106 13 jefflieu
 
107 23 jefflieu
        assign o_RxClk = w_RxClk;
108
        assign o_TxClk = w_TxClk;
109 16 jefflieu
 
110
        reg [7:0] r8_PorTmr;
111
        assign w_PorRst = ~(&r8_PorTmr);
112
        always@(posedge i_RefClk125M)
113
        begin
114
                if(w_PorRst)
115
                        r8_PorTmr <= r8_PorTmr+8'h1;
116
        end
117 13 jefflieu
 
118
endmodule

powered by: WebSVN 2.1.0

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