Stefan Schuermans commited on 2012-03-10 17:43:57
Showing 2 changed files, with 56 additions and 79 deletions.
| ... | ... |
@@ -44,6 +44,7 @@ |
| 44 | 44 |
<wvobject fp_name="/e_testbed/system/pin_i_eth_rxd" type="array" db_ref_id="1"> |
| 45 | 45 |
<obj_property name="ElementShortName">pin_i_eth_rxd[4:0]</obj_property> |
| 46 | 46 |
<obj_property name="ObjectShortName">pin_i_eth_rxd[4:0]</obj_property> |
| 47 |
+ <obj_property name="Radix">HEXRADIX</obj_property> |
|
| 47 | 48 |
</wvobject> |
| 48 | 49 |
<wvobject fp_name="/e_testbed/system/pin_i_eth_rx_dv" type="logic" db_ref_id="1"> |
| 49 | 50 |
<obj_property name="ElementShortName">pin_i_eth_rx_dv</obj_property> |
| ... | ... |
@@ -26,21 +26,29 @@ ARCHITECTURE a_io_eth_rxif OF e_io_eth_rxif IS |
| 26 | 26 |
SIGNAL r_in_state: t_in_state := in_idle; |
| 27 | 27 |
SIGNAL r_in_data: std_logic_vector(7 DOWNTO 0) := X"00"; |
| 28 | 28 |
|
| 29 |
- TYPE t_if_event IS (if_data, if_done, if_err); |
|
| 30 |
- |
|
| 31 |
- SIGNAL r_if_rx_clk_trigger: std_logic := '0'; |
|
| 32 |
- SIGNAL r_if_rx_clk_event: t_if_event := if_data; |
|
| 33 |
- SIGNAL r_if_rx_clk_data: std_logic_vector(7 DOWNTO 0) := X"00"; |
|
| 34 |
- |
|
| 35 |
- SIGNAL r_if_clk_trigger: std_logic := '0'; |
|
| 36 |
- SIGNAL r_if_clk_event: t_if_event := if_data; |
|
| 37 |
- SIGNAL r_if_clk_data: std_logic_vector(7 DOWNTO 0) := X"00"; |
|
| 38 |
- SIGNAL r_if_clk_en: std_logic := '0'; |
|
| 39 |
- |
|
| 40 |
- SIGNAL r_out_data: std_logic_vector(7 DOWNTO 0) := X"00"; |
|
| 41 |
- SIGNAL r_out_data_en: std_logic := '0'; |
|
| 42 |
- SIGNAL r_out_done: std_logic := '0'; |
|
| 43 |
- SIGNAL r_out_err: std_logic := '0'; |
|
| 29 |
+ SIGNAL s_fifo_wr_rdy: std_logic; |
|
| 30 |
+ SIGNAL s_fifo_wr_data: std_logic_vector(9 DOWNTO 0); |
|
| 31 |
+ SIGNAL s_fifo_wr_en: std_logic; |
|
| 32 |
+ SIGNAL s_fifo_rd_rdy: std_logic; |
|
| 33 |
+ SIGNAL s_fifo_rd_data: std_logic_vector(9 DOWNTO 0); |
|
| 34 |
+ |
|
| 35 |
+ COMPONENT e_block_fifo_dc IS |
|
| 36 |
+ GENERIC ( |
|
| 37 |
+ addr_width: natural; |
|
| 38 |
+ data_width: natural |
|
| 39 |
+ ); |
|
| 40 |
+ PORT ( |
|
| 41 |
+ rst: IN std_logic; |
|
| 42 |
+ wr_clk: IN std_logic; |
|
| 43 |
+ o_wr_rdy: OUT std_logic; |
|
| 44 |
+ i_wr_data: IN std_logic_vector(data_width - 1 DOWNTO 0); |
|
| 45 |
+ i_wr_en: IN std_logic; |
|
| 46 |
+ rd_clk: IN std_logic; |
|
| 47 |
+ o_rd_rdy: OUT std_logic; |
|
| 48 |
+ o_rd_data: OUT std_logic_vector(data_width - 1 DOWNTO 0); |
|
| 49 |
+ i_rd_en: IN std_logic |
|
| 50 |
+ ); |
|
| 51 |
+ END COMPONENT e_block_fifo_dc; |
|
| 44 | 52 |
|
| 45 | 53 |
BEGIN |
| 46 | 54 |
|
| ... | ... |
@@ -114,79 +122,47 @@ BEGIN |
| 114 | 122 |
END IF; |
| 115 | 123 |
END PROCESS p_in; |
| 116 | 124 |
|
| 117 |
- p_if_rx_clk: PROCESS(rst, pin_i_rx_clk) |
|
| 125 |
+ p_wr_fifo: PROCESS(r_in_state, r_in_data, s_fifo_wr_rdy) |
|
| 118 | 126 |
BEGIN |
| 119 |
- IF rst = '1' THEN |
|
| 120 |
- r_if_rx_clk_trigger <= '0'; |
|
| 121 |
- r_if_rx_clk_event <= if_data; |
|
| 122 |
- r_if_rx_clk_data <= X"00"; |
|
| 123 |
- ELSIF rising_edge(pin_i_rx_clk) THEN |
|
| 127 |
+ s_fifo_wr_data <= (OTHERS => '0'); |
|
| 128 |
+ s_fifo_wr_en <= '0'; |
|
| 129 |
+ IF s_fifo_wr_rdy = '1' THEN |
|
| 124 | 130 |
CASE r_in_state IS |
| 125 | 131 |
WHEN in_data => |
| 126 |
- r_if_rx_clk_trigger <= NOT r_if_rx_clk_trigger; |
|
| 127 |
- r_if_rx_clk_event <= if_data; |
|
| 128 |
- r_if_rx_clk_data <= r_in_data; |
|
| 132 |
+ s_fifo_wr_data(7 DOWNTO 0) <= r_in_data; |
|
| 133 |
+ s_fifo_wr_en <= '1'; |
|
| 129 | 134 |
WHEN in_done => |
| 130 |
- r_if_rx_clk_trigger <= NOT r_if_rx_clk_trigger; |
|
| 131 |
- r_if_rx_clk_event <= if_done; |
|
| 135 |
+ s_fifo_wr_data(8) <= '1'; |
|
| 136 |
+ s_fifo_wr_en <= '1'; |
|
| 132 | 137 |
WHEN in_err => |
| 133 |
- r_if_rx_clk_trigger <= NOT r_if_rx_clk_trigger; |
|
| 134 |
- r_if_rx_clk_event <= if_err; |
|
| 138 |
+ s_fifo_wr_data(9) <= '1'; |
|
| 139 |
+ s_fifo_wr_en <= '1'; |
|
| 135 | 140 |
WHEN OTHERS => NULL; |
| 136 | 141 |
END CASE; |
| 137 | 142 |
END IF; |
| 138 |
- END PROCESS p_if_rx_clk; |
|
| 139 |
- |
|
| 140 |
- p_if_clk: PROCESS(rst, clk) |
|
| 141 |
- BEGIN |
|
| 142 |
- IF rst = '1' THEN |
|
| 143 |
- r_if_clk_trigger <= '0'; |
|
| 144 |
- r_if_clk_event <= if_data; |
|
| 145 |
- r_if_clk_data <= X"00"; |
|
| 146 |
- r_if_clk_en <= '0'; |
|
| 147 |
- ELSIF rising_edge(clk) THEN |
|
| 148 |
- IF r_if_rx_clk_trigger /= r_if_clk_trigger THEN |
|
| 149 |
- r_if_clk_trigger <= NOT r_if_clk_trigger; |
|
| 150 |
- r_if_clk_event <= r_if_rx_clk_event; |
|
| 151 |
- r_if_clk_data <= r_if_rx_clk_data; |
|
| 152 |
- r_if_clk_en <= '1'; |
|
| 153 |
- ELSE |
|
| 154 |
- r_if_clk_en <= '0'; |
|
| 155 |
- END IF; |
|
| 156 |
- END IF; |
|
| 157 |
- END PROCESS p_if_clk; |
|
| 158 |
- |
|
| 159 |
- p_out: PROCESS(rst, clk) |
|
| 160 |
- BEGIN |
|
| 161 |
- IF rst = '1' THEN |
|
| 162 |
- r_out_data <= X"00"; |
|
| 163 |
- r_out_data_en <= '0'; |
|
| 164 |
- r_out_done <= '0'; |
|
| 165 |
- r_out_err <= '0'; |
|
| 166 |
- ELSIF rising_edge(clk) THEN |
|
| 167 |
- r_out_data <= X"00"; |
|
| 168 |
- r_out_data_en <= '0'; |
|
| 169 |
- r_out_done <= '0'; |
|
| 170 |
- r_out_err <= '0'; |
|
| 171 |
- IF r_if_clk_en = '1' THEN |
|
| 172 |
- CASE r_if_clk_event IS |
|
| 173 |
- WHEN if_data => |
|
| 174 |
- r_out_data <= r_if_clk_data; |
|
| 175 |
- r_out_data_en <= '1'; |
|
| 176 |
- WHEN if_done => |
|
| 177 |
- r_out_done <= '1'; |
|
| 178 |
- WHEN if_err => |
|
| 179 |
- r_out_err <= '1'; |
|
| 180 |
- WHEN OTHERS => NULL; |
|
| 181 |
- END CASE; |
|
| 182 |
- END IF; |
|
| 183 |
- END IF; |
|
| 184 |
- END PROCESS p_out; |
|
| 143 |
+ END PROCESS p_wr_fifo; |
|
| 144 |
+ |
|
| 145 |
+ fifo: e_block_fifo_dc |
|
| 146 |
+ GENERIC MAP ( |
|
| 147 |
+ addr_width => 2, |
|
| 148 |
+ data_width => 10 |
|
| 149 |
+ ) |
|
| 150 |
+ PORT MAP ( |
|
| 151 |
+ rst => rst, |
|
| 152 |
+ wr_clk => pin_i_rx_clk, |
|
| 153 |
+ o_wr_rdy => s_fifo_wr_rdy, |
|
| 154 |
+ i_wr_data => s_fifo_wr_data, |
|
| 155 |
+ i_wr_en => s_fifo_wr_en, |
|
| 156 |
+ rd_clk => clk, |
|
| 157 |
+ o_rd_rdy => s_fifo_rd_rdy, |
|
| 158 |
+ o_rd_data => s_fifo_rd_data, |
|
| 159 |
+ i_rd_en => s_fifo_rd_rdy |
|
| 160 |
+ ); |
|
| 185 | 161 |
|
| 186 |
- o_data <= r_out_data; |
|
| 187 |
- o_data_en <= r_out_data_en; |
|
| 188 |
- o_done <= r_out_done; |
|
| 189 |
- o_err <= r_out_err; |
|
| 162 |
+ o_data <= s_fifo_rd_data(7 DOWNTO 0); |
|
| 163 |
+ o_data_en <= s_fifo_rd_rdy; |
|
| 164 |
+ o_done <= s_fifo_rd_data(8); |
|
| 165 |
+ o_err <= s_fifo_rd_data(9); |
|
| 190 | 166 |
|
| 191 | 167 |
END ARCHITECTURE a_io_eth_rxif; |
| 192 | 168 |
|
| 193 | 169 |