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);
|
add read_enable signal to d...
Stefan Schuermans authored 12 years ago
|
11) i_rd_en: IN std_logic_vector( 3 DOWNTO 0);
|
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);
|
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);
|
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)
35) SIGNAL s_rx_data: std_logic_vector(7 DOWNTO 0);
36) SIGNAL s_rx_data_en: std_logic;
37) SIGNAL s_rx_done: std_logic;
38) SIGNAL s_rx_err: std_logic;
39)
40) -- so far only for testing
41) SIGNAL s_rx_fifo_wr_rdy: std_logic;
42) SIGNAL s_rx_fifo_wr_data: std_logic_vector(7 DOWNTO 0);
43) SIGNAL s_rx_fifo_wr_en: std_logic;
44) SIGNAL s_rx_fifo_rd_rdy: std_logic;
45) SIGNAL s_rx_fifo_rd_data: std_logic_vector(7 DOWNTO 0);
46) SIGNAL s_rx_fifo_rd_en: std_logic;
47)
48) COMPONENT e_io_eth_rst IS
49) PORT (
50) rst: IN std_logic;
51) clk: IN std_logic;
52) pin_o_nrst: OUT std_logic
53) );
54) END COMPONENT e_io_eth_rst;
55)
56) COMPONENT e_io_eth_rxif IS
57) PORT (
58) rst: IN std_logic;
59) clk: IN std_logic;
60) o_data: OUT std_logic_vector(7 DOWNTO 0);
61) o_data_en: OUT std_logic;
62) o_done: OUT std_logic;
63) o_err: OUT std_logic;
64) pin_i_rx_clk: IN std_logic;
65) pin_i_rxd: IN std_logic_vector(4 DOWNTO 0);
66) pin_i_rx_dv: IN std_logic;
67) pin_i_crs: IN std_logic;
68) pin_i_col: IN std_logic
69) );
70) END COMPONENT e_io_eth_rxif;
71)
72) -- so far only for testing
73) COMPONENT e_block_fifo IS
74) GENERIC (
75) addr_width: natural;
76) data_width: natural
77) );
78) PORT (
79) rst: IN std_logic;
80) clk: IN std_logic;
81) o_wr_rdy: OUT std_logic;
82) i_wr_data: IN std_logic_vector(data_width - 1 DOWNTO 0);
83) i_wr_en: IN std_logic;
84) o_rd_rdy: OUT std_logic;
85) o_rd_data: OUT std_logic_vector(data_width - 1 DOWNTO 0);
86) i_rd_en: IN std_logic
87) );
88) END COMPONENT e_block_fifo;
89)
|
implemented multi-master fe...
Stefan Schuermans authored 12 years ago
|
90) SIGNAL r_cnt: natural := 0;
91)
|
begin of ethernet RX implem...
Stefan Schuermans authored 12 years ago
|
92) BEGIN
93)
94) reset: e_io_eth_rst
95) PORT MAP (
96) rst => rst,
97) clk => clk,
98) pin_o_nrst => pin_o_nrst
99) );
100)
101) rxif: e_io_eth_rxif
102) PORT MAP (
103) rst => rst,
104) clk => clk,
105) o_data => s_rx_data,
106) o_data_en => s_rx_data_en,
107) o_done => s_rx_done,
108) o_err => s_rx_err,
109) pin_i_rx_clk => pin_i_rx_clk,
110) pin_i_rxd => pin_i_rxd,
111) pin_i_rx_dv => pin_i_rx_dv,
112) pin_i_crs => pin_i_crs,
113) pin_i_col => pin_i_col
114) );
115)
116) -- so far only for testing
117) p_rx_if2fifo: PROCESS (s_rx_data, s_rx_data_en, s_rx_done, s_rx_err)
118) BEGIN
119) IF s_rx_err = '1' THEN
120) s_rx_fifo_wr_data <= X"EE";
121) ELSIF s_rx_done = '1' THEN
122) s_rx_fifo_wr_data <= X"DD";
123) ELSE
124) s_rx_fifo_wr_data <= s_rx_data;
125) END IF;
126) s_rx_fifo_wr_en <= s_rx_data_en OR s_rx_done OR s_rx_err;
127) END PROCESS p_rx_if2fifo;
128)
129) -- so far only for testing
130) rx_fifo: e_block_fifo
131) GENERIC MAP (
132) addr_width => 11,
133) data_width => 8
134) )
135) PORT MAP (
136) rst => rst,
137) clk => clk,
138) o_wr_rdy => s_rx_fifo_wr_rdy,
139) i_wr_data => s_rx_fifo_wr_data,
140) i_wr_en => s_rx_fifo_wr_en,
141) o_rd_rdy => s_rx_fifo_rd_rdy,
142) o_rd_data => s_rx_fifo_rd_data,
143) i_rd_en => s_rx_fifo_rd_en
144) );
145)
146) -- so far only for testing
|
add read_enable signal to d...
Stefan Schuermans authored 12 years ago
|
147) s_rx_fifo_rd_en <= '1' WHEN i_addr = "01" AND i_rd_en(0) = '1' ELSE '0';
|
fix reading (1 cycle latenc...
Stefan Schuermans authored 12 years ago
|
148)
149) -- so far only for testing
150) p_rx_test_rd: PROCESS (rst, clk)
151) BEGIN
152) IF rst = '1' THEN
153) o_rd_data <= X"00000000";
154) ELSIF rising_edge(clk) THEN
155) o_rd_data <= X"00000000";
156) IF i_addr = "00" THEN
157) o_rd_data(0) <= s_rx_fifo_rd_rdy;
158) ELSIF i_addr = "01" THEN
159) o_rd_data(7 DOWNTO 0) <= s_rx_fifo_rd_data;
160) END IF;
161) END IF;
162) END PROCESS p_rx_test_rd;
|
begin of ethernet RX implem...
Stefan Schuermans authored 12 years ago
|
163)
164) pin_o_txd <= "0000";
165) pin_o_tx_en <= '0';
166)
|
implemented multi-master fe...
Stefan Schuermans authored 12 years ago
|
167) -- bus master: bullshit for now
168) p_bm: PROCESS(rst, clk)
169) BEGIN
170) IF rst = '1' THEN
171) r_cnt <= 0;
172) ELSIF rising_edge(clk) THEN
173) IF r_cnt < 3 THEN
174) r_cnt <= r_cnt + 1;
175) ELSE
176) r_cnt <= 0;
177) END IF;
178) END IF;
179) END PROCESS p_bm;
180)
181) -- bus master: bullshit for now
182) o_bm_req <= '1' WHEN r_cnt = 0 ELSE '0';
183) o_bm_addr <= (OTHERS => '0');
184) o_bm_rd_en <= (OTHERS => '0');
185) o_bm_wr_data <= (OTHERS => '0');
186) o_bm_wr_en <= (OTHERS => '0');
187)
|