41147d391f30f2357048efbf73b98abcf5fdfed8
Stefan Schuermans begin of ethernet RX implem...

Stefan Schuermans authored 12 years ago

1) LIBRARY IEEE;
2) USE IEEE.STD_LOGIC_1164.ALL;
3) USE IEEE.NUMERIC_STD.ALL;
4) 
5) ENTITY e_io_eth IS
6)     PORT (
7)         rst:          IN  std_logic;
8)         clk:          IN  std_logic;
9)         i_addr:       IN  std_logic_vector( 1 DOWNTO 0);
10)         o_rd_data:    OUT std_logic_vector(31 DOWNTO 0);
Stefan Schuermans add read_enable signal to d...

Stefan Schuermans authored 12 years ago

11)         i_rd_en:      IN  std_logic_vector( 3 DOWNTO 0);
Stefan Schuermans begin of ethernet RX implem...

Stefan Schuermans authored 12 years ago

12)         i_wr_data:    IN  std_logic_vector(31 DOWNTO 0);
13)         i_wr_en:      IN  std_logic_vector( 3 DOWNTO 0);
Stefan Schuermans implemented multi-master fe...

Stefan Schuermans authored 12 years ago

14)         o_bm_req:     OUT std_logic;
15)         i_bm_grant:   IN  std_logic;
16)         o_bm_addr:    OUT std_logic_vector(31 DOWNTO 0);
17)         i_bm_rd_data: IN  std_logic_vector(31 DOWNTO 0);
18)         o_bm_rd_en:   OUT std_logic_vector( 3 DOWNTO 0);
19)         o_bm_wr_data: OUT std_logic_vector(31 DOWNTO 0);
20)         o_bm_wr_en:   OUT std_logic_vector( 3 DOWNTO 0);
Stefan Schuermans begin of ethernet RX implem...

Stefan Schuermans authored 12 years ago

21)         pin_o_nrst:   OUT std_logic;
22)         pin_i_rx_clk: IN  std_logic;
23)         pin_i_rxd:    IN  std_logic_vector(4 DOWNTO 0);
24)         pin_i_rx_dv:  IN  std_logic;
25)         pin_i_crs:    IN  std_logic;
26)         pin_i_col:    IN  std_logic;
27)         pin_i_tx_clk: IN  std_logic;
28)         pin_o_txd:    OUT std_logic_vector(3 DOWNTO 0);
29)         pin_o_tx_en:  OUT std_logic
30)     );
31) END ENTITY e_io_eth;
32) 
33) ARCHITECTURE a_io_eth OF e_io_eth IS
34) 
Stefan Schuermans implemented ethernet RX fra...

Stefan Schuermans authored 12 years ago

35)     SIGNAL s_rxif_data:    std_logic_vector(7 DOWNTO 0);
36)     SIGNAL s_rxif_data_en: std_logic;
37)     SIGNAL s_rxif_done:    std_logic;
38)     SIGNAL s_rxif_err:     std_logic;
39) 
40)     SIGNAL s_rxframe_data:    std_logic_vector(31 DOWNTO 0);
41)     SIGNAL s_rxframe_data_en: std_logic;
42)     SIGNAL s_rxframe_done:    std_logic;
43)     SIGNAL s_rxframe_err:     std_logic;
Stefan Schuermans begin of ethernet RX implem...

Stefan Schuermans authored 12 years ago

44) 
45)     -- so far only for testing
Stefan Schuermans implemented ethernet RX fra...

Stefan Schuermans authored 12 years ago

46)     SIGNAL s_rxfifo_wr_rdy:  std_logic;
47)     SIGNAL s_rxfifo_wr_data: std_logic_vector(31 DOWNTO 0);
48)     SIGNAL s_rxfifo_wr_en:   std_logic;
49)     SIGNAL s_rxfifo_rd_rdy:  std_logic;
50)     SIGNAL s_rxfifo_rd_data: std_logic_vector(31 DOWNTO 0);
51)     SIGNAL s_rxfifo_rd_en:   std_logic;
Stefan Schuermans begin of ethernet RX implem...

Stefan Schuermans authored 12 years ago

52) 
53)     COMPONENT e_io_eth_rst IS
54)         PORT (
55)             rst:        IN  std_logic;
56)             clk:        IN  std_logic;
57)             pin_o_nrst: OUT std_logic
58)         );
59)     END COMPONENT e_io_eth_rst;
60) 
61)     COMPONENT e_io_eth_rxif IS
62)         PORT (
63)             rst:          IN  std_logic;
64)             clk:          IN  std_logic;
65)             o_data:       OUT std_logic_vector(7 DOWNTO 0);
66)             o_data_en:    OUT std_logic;
67)             o_done:       OUT std_logic;
68)             o_err:        OUT std_logic;
69)             pin_i_rx_clk: IN  std_logic;
70)             pin_i_rxd:    IN  std_logic_vector(4 DOWNTO 0);
71)             pin_i_rx_dv:  IN  std_logic;
72)             pin_i_crs:    IN  std_logic;
73)             pin_i_col:    IN  std_logic
74)         );
75)     END COMPONENT e_io_eth_rxif;
76) 
Stefan Schuermans implemented ethernet RX fra...

Stefan Schuermans authored 12 years ago

77)     COMPONENT e_io_eth_rxframe IS
78)         PORT (
79)             rst:       IN  std_logic;
80)             clk:       IN  std_logic;
81)             i_data:    IN  std_logic_vector( 7 DOWNTO 0);
82)             i_data_en: IN  std_logic;
83)             i_done:    IN  std_logic;
84)             i_err:     IN  std_logic;
85)             i_mac:     IN  std_logic_vector(47 DOWNTO 0);
86)             o_data:    OUT std_logic_vector(31 DOWNTO 0);
87)             o_data_en: OUT std_logic;
88)             o_done:    OUT std_logic;
89)             o_err:     OUT std_logic
90)         );
91)     END COMPONENT e_io_eth_rxframe;
92) 
Stefan Schuermans begin of ethernet RX implem...

Stefan Schuermans authored 12 years ago

93)     -- so far only for testing
94)     COMPONENT e_block_fifo IS
95)         GENERIC (
96)             addr_width: natural;
97)             data_width: natural
98)         );
99)         PORT (
100)             rst:       IN  std_logic;
101)             clk:       IN  std_logic;
102)             o_wr_rdy:  OUT std_logic;
103)             i_wr_data: IN  std_logic_vector(data_width - 1 DOWNTO 0);
104)             i_wr_en:   IN  std_logic;
105)             o_rd_rdy:  OUT std_logic;
106)             o_rd_data: OUT std_logic_vector(data_width - 1 DOWNTO 0);
107)             i_rd_en:   IN  std_logic
108)         );
109)     END COMPONENT e_block_fifo;
110) 
Stefan Schuermans implemented multi-master fe...

Stefan Schuermans authored 12 years ago

111)     SIGNAL r_cnt: natural := 0;
112) 
Stefan Schuermans begin of ethernet RX implem...

Stefan Schuermans authored 12 years ago

113) BEGIN
114) 
115)     reset: e_io_eth_rst
116)         PORT MAP (
117)             rst        => rst,
118)             clk        => clk,
119)             pin_o_nrst => pin_o_nrst
120)         );
121) 
122)     rxif: e_io_eth_rxif
123)         PORT MAP (
124)             rst          => rst,
125)             clk          => clk,
Stefan Schuermans implemented ethernet RX fra...

Stefan Schuermans authored 12 years ago

126)             o_data       => s_rxif_data,
127)             o_data_en    => s_rxif_data_en,
128)             o_done       => s_rxif_done,
129)             o_err        => s_rxif_err,
Stefan Schuermans begin of ethernet RX implem...

Stefan Schuermans authored 12 years ago

130)             pin_i_rx_clk => pin_i_rx_clk,
131)             pin_i_rxd    => pin_i_rxd,
132)             pin_i_rx_dv  => pin_i_rx_dv,
133)             pin_i_crs    => pin_i_crs,
134)             pin_i_col    => pin_i_col
135)         );
136) 
Stefan Schuermans implemented ethernet RX fra...

Stefan Schuermans authored 12 years ago

137)     rxframe: e_io_eth_rxframe
138)         PORT MAP (
139)             rst       => rst,
140)             clk       => clk,
141)             i_data    => s_rxif_data,
142)             i_data_en => s_rxif_data_en,
143)             i_done    => s_rxif_done,
144)             i_err     => s_rxif_err,
145)             i_mac     => X"070605040302",
146)             o_data    => s_rxframe_data,
147)             o_data_en => s_rxframe_data_en,
148)             o_done    => s_rxframe_done,
149)             o_err     => s_rxframe_err
150)         );
151) 
Stefan Schuermans begin of ethernet RX implem...

Stefan Schuermans authored 12 years ago

152)     -- so far only for testing
Stefan Schuermans implemented ethernet RX fra...

Stefan Schuermans authored 12 years ago

153)     p_rx_if2fifo: PROCESS (s_rxframe_data, s_rxframe_data_en, s_rxframe_done, s_rxframe_err)
Stefan Schuermans begin of ethernet RX implem...

Stefan Schuermans authored 12 years ago

154)     BEGIN
Stefan Schuermans implemented ethernet RX fra...

Stefan Schuermans authored 12 years ago

155)         IF s_rxframe_err = '1' THEN
156)             s_rxfifo_wr_data <= X"EEEEEEEE";
157)         ELSIF s_rxframe_done = '1' THEN
158)             s_rxfifo_wr_data <= X"DDDDDDDD";
Stefan Schuermans begin of ethernet RX implem...

Stefan Schuermans authored 12 years ago

159)         ELSE
Stefan Schuermans implemented ethernet RX fra...

Stefan Schuermans authored 12 years ago

160)             s_rxfifo_wr_data <= s_rxframe_data;
Stefan Schuermans begin of ethernet RX implem...

Stefan Schuermans authored 12 years ago

161)         END IF;
Stefan Schuermans implemented ethernet RX fra...

Stefan Schuermans authored 12 years ago

162)         s_rxfifo_wr_en <= s_rxframe_data_en OR s_rxframe_done OR s_rxframe_err;
Stefan Schuermans begin of ethernet RX implem...

Stefan Schuermans authored 12 years ago

163)     END PROCESS p_rx_if2fifo;
164) 
165)     -- so far only for testing
166)     rx_fifo: e_block_fifo
167)         GENERIC MAP (
Stefan Schuermans implemented ethernet RX fra...

Stefan Schuermans authored 12 years ago

168)             addr_width => 9,
169)             data_width => 32
Stefan Schuermans begin of ethernet RX implem...

Stefan Schuermans authored 12 years ago

170)         )
171)         PORT MAP (
172)             rst       => rst,
173)             clk       => clk,
Stefan Schuermans implemented ethernet RX fra...

Stefan Schuermans authored 12 years ago

174)             o_wr_rdy  => s_rxfifo_wr_rdy,
175)             i_wr_data => s_rxfifo_wr_data,
176)             i_wr_en   => s_rxfifo_wr_en,
177)             o_rd_rdy  => s_rxfifo_rd_rdy,
178)             o_rd_data => s_rxfifo_rd_data,
179)             i_rd_en   => s_rxfifo_rd_en
Stefan Schuermans begin of ethernet RX implem...

Stefan Schuermans authored 12 years ago

180)         );
181) 
182)     -- so far only for testing
Stefan Schuermans implemented ethernet RX fra...

Stefan Schuermans authored 12 years ago

183)     s_rxfifo_rd_en <= '1' WHEN i_addr = "01" AND i_rd_en(0) = '1' ELSE '0';
Stefan Schuermans fix reading (1 cycle latenc...

Stefan Schuermans authored 12 years ago

184) 
185)     -- so far only for testing
186)     p_rx_test_rd: PROCESS (rst, clk)
187)     BEGIN
188)         IF rst = '1' THEN
189)             o_rd_data       <= X"00000000";
190)         ELSIF rising_edge(clk) THEN
191)             o_rd_data       <= X"00000000";
192)             IF i_addr = "00" THEN
Stefan Schuermans implemented ethernet RX fra...

Stefan Schuermans authored 12 years ago

193)                 o_rd_data(0) <= s_rxfifo_rd_rdy;
Stefan Schuermans fix reading (1 cycle latenc...

Stefan Schuermans authored 12 years ago

194)             ELSIF i_addr = "01" THEN
Stefan Schuermans implemented ethernet RX fra...

Stefan Schuermans authored 12 years ago

195)                 o_rd_data <= s_rxfifo_rd_data;
Stefan Schuermans fix reading (1 cycle latenc...

Stefan Schuermans authored 12 years ago

196)             END IF;
197)         END IF;
198)     END PROCESS p_rx_test_rd;
Stefan Schuermans begin of ethernet RX implem...

Stefan Schuermans authored 12 years ago

199) 
200)     pin_o_txd   <= "0000";
201)     pin_o_tx_en <= '0';
202) 
Stefan Schuermans implemented multi-master fe...

Stefan Schuermans authored 12 years ago

203)     -- bus master: bullshit for now
204)     p_bm: PROCESS(rst, clk)
205)     BEGIN
206)         IF rst = '1' THEN
207)             r_cnt <= 0;
208)         ELSIF rising_edge(clk) THEN
209)             IF r_cnt < 3 THEN
210)                 r_cnt <= r_cnt + 1;
211)             ELSE
212)                 r_cnt <= 0;
213)             END IF;
214)         END IF;
215)     END PROCESS p_bm;
216) 
217)     -- bus master: bullshit for now
218)     o_bm_req     <= '1' WHEN r_cnt = 0 ELSE '0';
219)     o_bm_addr    <= (OTHERS => '0');
220)     o_bm_rd_en   <= (OTHERS => '0');
221)     o_bm_wr_data <= (OTHERS => '0');
222)     o_bm_wr_en   <= (OTHERS => '0');
223)