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

Subversion Repositories sgmii

[/] [sgmii/] [trunk/] [build/] [OpenCore_MAC/] [TECH/] [xilinx/] [RGMII2GMII.v] - Blame information for rev 26

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 26 jefflieu
`timescale 1ns / 1ps
2
//////////////////////////////////////////////////////////////////////////////////
3
// Company: 
4
// Engineer: 
5
// 
6
// Create Date:    15:20:11 06/01/2010 
7
// Design Name: 
8
// Module Name:    RGMII2GMII 
9
// Project Name: 
10
// Target Devices: 
11
// Tool versions: 
12
// Description: 
13
//
14
// Dependencies: 
15
//
16
// Revision: 
17
// Revision 0.01 - File Created
18
// Additional Comments: 
19
//
20
//////////////////////////////////////////////////////////////////////////////////
21
module RGMII2GMII(
22
    input [3:0] RGMII_RxD,
23
    input RGMII_RxCtl,
24
    input RGMII_RxClk,
25
    output reg [7:0] RxD,
26
    output reg RxDV,
27
    output reg RxER,
28
    output RxClk,
29
         input ClkEN,
30
         input rst
31
    );
32
 
33
wire [3:0] RxDH;
34
wire [3:0] RxDL;
35
wire DV, ER;
36
reg DV1,ERR1;
37
reg DV2,ERR2;
38
wire [7:0] RxD1;
39
reg [3:0] RxD1H;
40
reg [3:0] RxD1L;
41
reg [7:0] RxD2;
42
 
43
        assign RxClk = RGMII_RxClk;
44
 
45
        genvar I;
46
        generate
47
        for(I=0;I<4;I=I+1)
48
        begin: genddr
49
        IDDR #(
50
      .DDR_CLK_EDGE("OPPOSITE_EDGE"), // "OPPOSITE_EDGE", "SAME_EDGE" 
51
                                      //    or "SAME_EDGE_PIPELINED" 
52
      .INIT_Q1(1'b0), // Initial value of Q1: 1'b0 or 1'b1
53
      .INIT_Q2(1'b0), // Initial value of Q2: 1'b0 or 1'b1
54
      .SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC" 
55
   ) IDDR_inst (
56
      .Q1(RxDL[I]), // 1-bit output for positive edge of clock 
57
      .Q2(RxDH[I]), // 1-bit output for negative edge of clock
58
      .C(RGMII_RxClk),   // 1-bit clock input
59
      .CE(ClkEN), // 1-bit clock enable input
60
      .D(RGMII_RxD[I]),   // 1-bit DDR data input
61
      .R(rst),   // 1-bit reset
62
      .S(1'b0)    // 1-bit set
63
   );
64
        end
65
        endgenerate
66
 
67
        IDDR #(
68
      .DDR_CLK_EDGE("OPPOSITE_EDGE"), // "OPPOSITE_EDGE", "SAME_EDGE" 
69
                                      //    or "SAME_EDGE_PIPELINED" 
70
      .INIT_Q1(1'b0), // Initial value of Q1: 1'b0 or 1'b1
71
      .INIT_Q2(1'b0), // Initial value of Q2: 1'b0 or 1'b1
72
      .SRTYPE("SYNC") // Set/Reset type: "SYNC" or "ASYNC" 
73
   ) IDDR_inst (
74
      .Q1(DV), // 1-bit output for positive edge of clock 
75
      .Q2(ER), // 1-bit output for negative edge of clock
76
      .C(RGMII_RxClk),   // 1-bit clock input
77
      .CE(ClkEN), // 1-bit clock enable input
78
      .D(RGMII_RxCtl),   // 1-bit DDR data input
79
      .R(rst),   // 1-bit reset
80
      .S(1'b0)    // 1-bit set
81
   );
82
 
83
        always@(posedge RGMII_RxClk)
84
        begin
85
                RxD1L<=RxDL;
86
        end
87
 
88
        always@(negedge RGMII_RxClk)
89
        begin
90
                RxD1H<=RxDH;
91
        end
92
 
93
        assign RxD1 = {RxD1H, RxD1L};
94
 
95
        always@(posedge(RGMII_RxClk))
96
        begin
97
                        RxD2 <= RxD1;
98
                        RxD <= RxD2;
99
        end
100
 
101
        always@(posedge(RGMII_RxClk))
102
        begin
103
                DV1 <= DV;
104
        end
105
        always@(negedge(RGMII_RxClk))
106
        begin
107
                ERR1<= ER;
108
        end
109
        always@(posedge(RGMII_RxClk))
110
        begin
111
                        ERR2 <= ERR1;
112
                        DV2 <= DV1;
113
                        RxDV <= DV2;
114
                        RxER <= (DV2^ERR2);
115
        end
116
endmodule

powered by: WebSVN 2.1.0

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