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);
11) i_wr_data: IN std_logic_vector(31 DOWNTO 0);
12) i_wr_en: IN std_logic_vector( 3 DOWNTO 0);
13) pin_o_nrst: OUT std_logic;
14) pin_i_rx_clk: IN std_logic;
15) pin_i_rxd: IN std_logic_vector(4 DOWNTO 0);
16) pin_i_rx_dv: IN std_logic;
17) pin_i_crs: IN std_logic;
18) pin_i_col: IN std_logic;
19) pin_i_tx_clk: IN std_logic;
20) pin_o_txd: OUT std_logic_vector(3 DOWNTO 0);
21) pin_o_tx_en: OUT std_logic
22) );
23) END ENTITY e_io_eth;
24)
25) ARCHITECTURE a_io_eth OF e_io_eth IS
26)
27) SIGNAL s_rx_data: std_logic_vector(7 DOWNTO 0);
28) SIGNAL s_rx_data_en: std_logic;
29) SIGNAL s_rx_done: std_logic;
30) SIGNAL s_rx_err: std_logic;
31)
32) -- so far only for testing
33) SIGNAL s_rx_fifo_wr_rdy: std_logic;
34) SIGNAL s_rx_fifo_wr_data: std_logic_vector(7 DOWNTO 0);
35) SIGNAL s_rx_fifo_wr_en: std_logic;
36) SIGNAL s_rx_fifo_rd_rdy: std_logic;
37) SIGNAL s_rx_fifo_rd_data: std_logic_vector(7 DOWNTO 0);
38) SIGNAL s_rx_fifo_rd_en: std_logic;
39)
40) COMPONENT e_io_eth_rst IS
41) PORT (
42) rst: IN std_logic;
43) clk: IN std_logic;
44) pin_o_nrst: OUT std_logic
45) );
46) END COMPONENT e_io_eth_rst;
47)
48) COMPONENT e_io_eth_rxif IS
49) PORT (
50) rst: IN std_logic;
51) clk: IN std_logic;
52) o_data: OUT std_logic_vector(7 DOWNTO 0);
53) o_data_en: OUT std_logic;
54) o_done: OUT std_logic;
55) o_err: OUT std_logic;
56) pin_i_rx_clk: IN std_logic;
57) pin_i_rxd: IN std_logic_vector(4 DOWNTO 0);
58) pin_i_rx_dv: IN std_logic;
59) pin_i_crs: IN std_logic;
60) pin_i_col: IN std_logic
61) );
62) END COMPONENT e_io_eth_rxif;
63)
64) -- so far only for testing
65) COMPONENT e_block_fifo IS
66) GENERIC (
67) addr_width: natural;
68) data_width: natural
69) );
70) PORT (
71) rst: IN std_logic;
72) clk: IN std_logic;
73) o_wr_rdy: OUT std_logic;
74) i_wr_data: IN std_logic_vector(data_width - 1 DOWNTO 0);
75) i_wr_en: IN std_logic;
76) o_rd_rdy: OUT std_logic;
77) o_rd_data: OUT std_logic_vector(data_width - 1 DOWNTO 0);
78) i_rd_en: IN std_logic
79) );
80) END COMPONENT e_block_fifo;
81)
82) BEGIN
83)
84) reset: e_io_eth_rst
85) PORT MAP (
86) rst => rst,
87) clk => clk,
88) pin_o_nrst => pin_o_nrst
89) );
90)
91) rxif: e_io_eth_rxif
92) PORT MAP (
93) rst => rst,
94) clk => clk,
95) o_data => s_rx_data,
96) o_data_en => s_rx_data_en,
97) o_done => s_rx_done,
98) o_err => s_rx_err,
99) pin_i_rx_clk => pin_i_rx_clk,
100) pin_i_rxd => pin_i_rxd,
101) pin_i_rx_dv => pin_i_rx_dv,
102) pin_i_crs => pin_i_crs,
103) pin_i_col => pin_i_col
104) );
105)
106) -- so far only for testing
107) p_rx_if2fifo: PROCESS (s_rx_data, s_rx_data_en, s_rx_done, s_rx_err)
108) BEGIN
109) IF s_rx_err = '1' THEN
110) s_rx_fifo_wr_data <= X"EE";
111) ELSIF s_rx_done = '1' THEN
112) s_rx_fifo_wr_data <= X"DD";
113) ELSE
114) s_rx_fifo_wr_data <= s_rx_data;
115) END IF;
116) s_rx_fifo_wr_en <= s_rx_data_en OR s_rx_done OR s_rx_err;
117) END PROCESS p_rx_if2fifo;
118)
119) -- so far only for testing
120) rx_fifo: e_block_fifo
121) GENERIC MAP (
122) addr_width => 11,
123) data_width => 8
124) )
125) PORT MAP (
126) rst => rst,
127) clk => clk,
128) o_wr_rdy => s_rx_fifo_wr_rdy,
129) i_wr_data => s_rx_fifo_wr_data,
130) i_wr_en => s_rx_fifo_wr_en,
131) o_rd_rdy => s_rx_fifo_rd_rdy,
132) o_rd_data => s_rx_fifo_rd_data,
133) i_rd_en => s_rx_fifo_rd_en
134) );
135)
136) -- so far only for testing
|
fix reading (1 cycle latenc...
Stefan Schuermans authored 12 years ago
|
145) END PROCESS p_rx_test_wr;
146)
147) -- so far only for testing
148) p_rx_test_rd: PROCESS (rst, clk)
149) BEGIN
150) IF rst = '1' THEN
151) o_rd_data <= X"00000000";
152) ELSIF rising_edge(clk) THEN
153) o_rd_data <= X"00000000";
154) IF i_addr = "00" THEN
155) o_rd_data(0) <= s_rx_fifo_rd_rdy;
156) ELSIF i_addr = "01" THEN
157) o_rd_data(7 DOWNTO 0) <= s_rx_fifo_rd_data;
158) END IF;
159) END IF;
160) END PROCESS p_rx_test_rd;
|