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