BlinkenArea - GitList
Repositories
Blog
Wiki
mips_sys
Code
Commits
Branches
Tags
Search
Tree:
00d70be
Branches
Tags
master
mips_sys
test
testbed.vhd
implemented IP + ICMP, fixed ARP (padding overwriting stack)
Stefan Schuermans
commited
00d70be
at 2012-03-24 13:58:46
testbed.vhd
Blame
History
Raw
LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.numeric_std.all; USE std.textio.all; USE work.io_lcd_pins.all; USE work.io_switches_pins.all; ENTITY e_testbed IS END ENTITY e_testbed; ARCHITECTURE a_testbed OF e_testbed IS COMPONENT e_system IS PORT ( clk: IN std_logic; pin_o_leds: OUT std_logic_vector(7 DOWNTO 0); pin_o_lcd: OUT t_io_lcd_pins; pin_i_switches: IN t_io_switches_pins; pin_i_uart_rx: IN std_logic; pin_o_uart_tx: OUT std_logic; pin_i_eth_rx_clk: IN std_logic; pin_i_eth_rxd: IN std_logic_vector(4 DOWNTO 0); pin_i_eth_rx_dv: IN std_logic; pin_i_eth_crs: IN std_logic; pin_i_eth_col: IN std_logic; pin_i_eth_tx_clk: IN std_logic; pin_o_eth_txd: OUT std_logic_vector(3 DOWNTO 0); pin_o_eth_tx_en: OUT std_logic ); END COMPONENT e_system; -- ICMP echo request TYPE t_eth_data IS ARRAY(0 TO 220 - 1) OF std_logic_vector(3 DOWNTO 0); CONSTANT eth_data: t_eth_data := ( X"5", X"5", X"5", X"5", X"5", X"5", X"5", X"5", X"5", X"5", X"5", X"5", X"5", X"5", X"5", X"D", X"2", X"0", X"D", X"4", X"9", X"4", X"0", X"5", X"3", X"5", X"1", X"0", X"0", X"0", X"D", X"1", X"0", X"6", X"C", X"D", X"5", X"7", X"D", X"2", X"8", X"0", X"0", X"0", X"5", X"4", X"0", X"0", X"0", X"0", X"4", X"5", X"0", X"0", X"0", X"0", X"0", X"4", X"0", X"0", X"0", X"4", X"1", X"0", X"8", X"B", X"5", X"F", X"0", X"C", X"8", X"A", X"0", X"0", X"A", X"0", X"0", X"C", X"8", X"A", X"0", X"0", X"9", X"5", X"8", X"0", X"0", X"0", X"E", X"8", X"7", X"5", X"F", X"0", X"2", X"6", X"0", X"0", X"1", X"0", X"6", X"E", X"4", X"B", X"D", X"6", X"F", X"4", X"0", X"0", X"0", X"0", X"0", X"0", X"0", X"0", X"4", X"4", X"E", X"6", X"3", X"0", X"0", X"0", X"0", X"0", X"0", X"0", X"0", X"0", X"0", X"0", X"0", X"1", X"1", X"1", X"2", X"1", X"3", X"1", X"4", X"1", X"5", X"1", X"6", X"1", X"7", X"1", X"8", X"1", X"9", X"1", X"A", X"1", X"B", X"1", X"C", X"1", X"D", X"1", X"E", X"1", X"F", X"1", X"0", X"2", X"1", X"2", X"2", X"2", X"3", X"2", X"4", X"2", X"5", X"2", X"6", X"2", X"7", X"2", X"8", X"2", X"9", X"2", X"A", X"2", X"B", X"2", X"C", X"2", X"D", X"2", X"E", X"2", X"F", X"2", X"0", X"3", X"1", X"3", X"2", X"3", X"3", X"3", X"4", X"3", X"5", X"3", X"6", X"3", X"7", X"3", X"2", X"9", X"1", X"C", X"0", X"1", X"2", X"C" ); SIGNAL s_clk: std_logic; SIGNAL s_leds: std_logic_vector(7 DOWNTO 0); SIGNAL s_lcd: t_io_lcd_pins; SIGNAL s_uart_loopback: std_logic; SIGNAL s_eth_clk: std_logic; SIGNAL s_eth_rxd_d: std_logic_vector(3 DOWNTO 0); SIGNAL s_eth_rxd: std_logic_vector(4 DOWNTO 0); SIGNAL s_eth_rx_dv: std_logic; SIGNAL s_eth_txd: std_logic_vector(3 DOWNTO 0); SIGNAL s_eth_tx_en: std_logic; BEGIN system: e_system PORT MAP ( clk => s_clk, pin_o_leds => s_leds, pin_o_lcd => s_lcd, pin_i_switches => (sw => (OTHERS => '0'), OTHERS => '0'), pin_i_uart_rx => s_uart_loopback, pin_o_uart_tx => s_uart_loopback, pin_i_eth_rx_clk => s_eth_clk, pin_i_eth_rxd => s_eth_rxd, pin_i_eth_rx_dv => s_eth_rx_dv, pin_i_eth_crs => s_eth_rx_dv, pin_i_eth_col => '0', pin_i_eth_tx_clk => s_eth_clk, pin_o_eth_txd => s_eth_txd, pin_o_eth_tx_en => s_eth_tx_en ); s_eth_rxd <= "0" & s_eth_rxd_d; p_clk: PROCESS BEGIN WHILE TRUE LOOP s_clk <= '0'; WAIT FOR 10 ns; s_clk <= '1'; WAIT FOR 10 ns; END LOOP; END PROCESS p_clk; p_eth_clk: PROCESS BEGIN WHILE TRUE LOOP s_eth_clk <= '0'; WAIT FOR 20 ns; s_eth_clk <= '1'; WAIT FOR 20 ns; END LOOP; END PROCESS p_eth_clk; p_eth_rx_data: PROCESS BEGIN s_eth_rxd_d <= "0000"; s_eth_rx_dv <= '0'; WAIT FOR 25 ms; WAIT UNTIL s_eth_clk = '1'; WAIT UNTIL s_eth_clk = '0'; FOR i IN 0 TO eth_data'length - 1 LOOP s_eth_rxd_d <= eth_data(i); s_eth_rx_dv <= '1'; WAIT UNTIL s_eth_clk = '1'; WAIT UNTIL s_eth_clk = '0'; END LOOP; s_eth_rxd_d <= "0000"; s_eth_rx_dv <= '0'; WAIT; END PROCESS p_eth_rx_data; p_eth_tx_data: PROCESS VARIABLE l: line; BEGIN FOR i IN 0 TO eth_data'length - 1 LOOP WAIT UNTIL s_eth_clk = '0'; WAIT UNTIL s_eth_clk = '1'; IF s_eth_tx_en = '1' THEN write(l, "ethernet TX: "); write(l, to_integer(unsigned(s_eth_txd))); writeline(output, l); END IF; END LOOP; END PROCESS p_eth_tx_data; END ARCHITECTURE a_testbed;