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

Subversion Repositories gbiteth

[/] [gbiteth/] [trunk/] [rtl/] [rgmii/] [rgmii100_io.vhd] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 axuan25268
-------------------------------------------------------------------------------
2
-- Title      : 
3
-- Project    : 
4
-------------------------------------------------------------------------------
5
-- File       : rgmii_io.vhd
6
-- Author     : liyi  <alxiuyain@foxmail.com>
7
-- Company    : OE@HUST
8
-- Created    : 2012-10-26
9
-- Last update: 2013-05-11
10
-- Platform   : 
11
-- Standard   : VHDL'93/02
12
-------------------------------------------------------------------------------
13
-- Description: 
14
-------------------------------------------------------------------------------
15
-- Copyright (c) 2012 OE@HUST
16
-------------------------------------------------------------------------------
17
-- Revisions  :
18
-- Date        Version  Author  Description
19
-- 2012-10-26  1.0      liyi    Created
20
-------------------------------------------------------------------------------
21
LIBRARY ieee;
22
USE ieee.std_logic_1164.ALL;
23
USE ieee.numeric_std.ALL;
24
-------------------------------------------------------------------------------
25
ENTITY rgmii100_io IS
26
 
27
  PORT (
28
    iRst_n : IN  STD_LOGIC;
29
    ---------------------------------------------------------------------------
30
    -- RGMII Interface
31
    ---------------------------------------------------------------------------
32
    TXC    : OUT STD_LOGIC;
33
    TX_CTL : OUT STD_LOGIC;
34
    TD     : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
35
    RXC    : IN  STD_LOGIC;
36
    RX_CTL : IN  STD_LOGIC;
37
    RD     : IN  STD_LOGIC_VECTOR(3 DOWNTO 0);
38
 
39
    ---------------------------------------------------------------------------
40
    -- data to PHY 
41
    ---------------------------------------------------------------------------
42
    iTxData : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
43
    iTxEn   : IN STD_LOGIC;
44
    iTxErr  : IN STD_LOGIC;
45
 
46
    ---------------------------------------------------------------------------
47
    -- data from PHY
48
    ---------------------------------------------------------------------------
49
    oRxData : OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
50
    oRxDV   : OUT STD_LOGIC;
51
    oRxErr  : OUT STD_LOGIC;
52
 
53
    ---------------------------------------------------------------------------
54
    -- clock for MAC controller
55
    ---------------------------------------------------------------------------
56
    oEthClk      : OUT STD_LOGIC
57
    );
58
 
59
END ENTITY rgmii100_io;
60
-------------------------------------------------------------------------------
61
ARCHITECTURE rtl OF rgmii100_io IS
62
 
63
  SIGNAL ethIOClk : STD_LOGIC;
64
 
65
  SIGNAL outDataH, outDataL, outData : STD_LOGIC_VECTOR(4 DOWNTO 0);
66
  SIGNAL inDataH, inDataL, inData    : STD_LOGIC_VECTOR(4 DOWNTO 0);
67
 
68
  SIGNAL pllLock : STD_LOGIC;
69
  SIGNAL rstSync : STD_LOGIC_VECTOR(1 DOWNTO 0);
70
  SIGNAL rst_n   : STD_LOGIC;
71
 
72
  SIGNAL bufClk : STD_LOGIC;
73
 
74
  SIGNAL ripple      : BOOLEAN;
75
  TYPE rxState_t IS (IDLE, RECEIVE);
76
  SIGNAL rxState     : rxState_t;
77
  SIGNAL rxData      : STD_LOGIC_VECTOR(7 DOWNTO 0);
78
  SIGNAL rxErr, rxDV : STD_LOGIC;
79
  SIGNAL tmp         : STD_LOGIC;
80
 
81
  SIGNAL rxData2       : STD_LOGIC_VECTOR(7 DOWNTO 0);
82
  SIGNAL rxErr2, rxDV2 : STD_LOGIC;
83
 
84
  SIGNAL rdreq,wrreq : STD_LOGIC;
85
  SIGNAL rdempty : STD_LOGIC;
86
  SIGNAL din,dout : STD_LOGIC_VECTOR(9 DOWNTO 0);
87
 
88
BEGIN  -- ARCHITECTURE rtl
89
 
90
  oEthClk <= ethIOClk;
91
  --oEthClk <= RXC;
92
  TXC     <= RXC;
93
 
94
    rgmii_pll : ENTITY work.rgmii100_pll
95
      PORT MAP (
96
        inclk0       => RXC,
97
        c0           => ethIOClk);
98
 
99
  TD       <= outData(3 DOWNTO 0);
100
  TX_CTL   <= outData(4);
101
  outDataH <= iTxEn & iTxData(3 DOWNTO 0);
102
  outDataL <= (iTxEn XOR iTxErr) & iTxData(7 DOWNTO 4);
103
  eth_ddr_out_1 : ENTITY work.eth_ddr_out
104
    PORT MAP (
105
      datain_h => outDataH,
106
      datain_l => outDataL,
107
      outclock => ethIOClk,
108
      dataout  => outData);
109
 
110
  oRxDV   <= dout(9);
111
  oRxErr  <= dout(8);
112
  oRxData <= dout(7 DOWNTO 0);
113
 
114
  rdreq <= NOT rdempty;
115
  din <= rxDV&rxErr&rxData;
116
  rgmii100_io_fifo_1: ENTITY work.rgmii100_io_fifo
117
    PORT MAP (
118
      data    => din,
119
      rdclk   => ethIOClk,
120
      rdreq   => rdreq,
121
      wrclk   => RXC,
122
      wrreq   => wrreq,
123
      q       => dout,
124
      rdempty => rdempty,
125
      wrfull  => OPEN);
126
 
127
  PROCESS (RXC, iRst_n) IS
128
  BEGIN
129
    IF iRst_n = '0' THEN
130
      ripple  <= FALSE;
131
      rxState <= IDLE;
132
      rxData  <= (OTHERS => '0');
133
      rxErr   <= '0';
134
      rxDV    <= '0';
135
      tmp     <= '0';
136
      wrreq <= '0';
137
    ELSIF rising_edge(RXC) THEN
138
      tmp <= RX_CTL;
139
      wrreq <= '0';
140
      CASE rxState IS
141
        WHEN IDLE =>
142
          rxData(3 DOWNTO 0) <= RD;
143
          IF tmp = '0' AND RX_CTL = '1' AND RD = X"F" THEN
144
            rxState <= RECEIVE;
145
            ripple  <= FALSE;
146
            rxErr   <= '1';
147
            wrreq <= '1';
148
          END IF;
149
        WHEN RECEIVE =>
150
          ripple <= NOT ripple;
151
          IF ripple THEN
152
            rxErr              <= tmp XOR RX_CTL;
153
            rxData(7 DOWNTO 4) <= RD;
154
            wrreq <= '1';
155
          ELSE
156
            rxDV               <= RX_CTL;
157
            rxData(3 DOWNTO 0) <= RD;
158
            IF RX_CTL = '0' THEN
159
              rxState <= IDLE;
160
              wrreq <= '1';
161
            END IF;
162
          END IF;
163
        WHEN OTHERS => NULL;
164
      END CASE;
165
    END IF;
166
  END PROCESS;
167
 
168
END ARCHITECTURE rtl;

powered by: WebSVN 2.1.0

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