library ieee; library design; use design.all; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity bench_ethmac_tx_rx is end entity bench_ethmac_tx_rx; architecture bench of bench_ethmac_tx_rx is signal clk : std_logic; signal data_in : std_logic_vector(7 downto 0) := (others => '0'); signal end_of_frame : std_logic := '0'; signal data_ack : std_logic; signal start_of_frame : std_logic := '0'; signal rst : std_logic; signal tx_ready : std_logic; signal rmii_tx : std_logic_vector(1 downto 0); signal rmii_txen : std_logic; signal data_out : std_logic_vector(7 downto 0); signal data_strb : std_logic; signal crc_check_valid : std_logic; signal end_of_frame_rx : std_logic; signal start_of_frame_rx : std_logic; begin clock_driver : process constant period : time := 20 ns; begin clk <= '0'; wait for period / 2; clk <= '1'; wait for period / 2; end process clock_driver; ethmac_tx_inst : entity design.ethmac_tx port map( clk_50 => clk, rst => rst, tx_ready => tx_ready, start_of_frame => start_of_frame, end_of_frame => end_of_frame, data_in => data_in, data_ack => data_ack, abort => '0', rmii_tx => rmii_tx, rmii_txen => rmii_txen ); ethmac_rx_inst : entity design.ethmac_rx port map( clk_50 => clk, rst => rst, rmii_rx => rmii_tx, rmii_dv => rmii_txen, start_of_frame => start_of_frame_rx, end_of_frame => end_of_frame_rx, data_out => data_out, data_strb => data_strb, crc_check_valid => crc_check_valid ); sendpkg : process is procedure sendByte(byte : std_logic_vector(7 downto 0); last : std_logic) is begin wait until rising_edge(clk); data_in <= byte; end_of_frame <= last; wait until data_ack = '1'; end procedure sendByte; begin rst <= '1'; wait for 5 ns; rst <= '0'; wait for 20 ns; start_of_frame <= '1'; sendByte(x"FF", '0'); start_of_frame <= '0'; sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '1'); wait for 100 ns; end_of_frame <= '0'; wait for 1 us; start_of_frame <= '1'; sendByte(x"FF", '0'); start_of_frame <= '0'; sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '1'); wait for 100 ns; end_of_frame <= '0'; wait for 1 us; start_of_frame <= '1'; sendByte(x"FF", '0'); start_of_frame <= '0'; sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '1'); wait for 100 ns; end_of_frame <= '0'; wait for 1 us; start_of_frame <= '1'; sendByte(x"05", '0'); start_of_frame <= '0'; sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '0'); sendByte(x"04", '0'); sendByte(x"05", '0'); sendByte(x"06", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"AA", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"DE", '0'); sendByte(x"AD", '0'); sendByte(x"BE", '0'); sendByte(x"EF", '0'); sendByte(x"00", '0'); sendByte(x"01", '0'); sendByte(x"02", '0'); sendByte(x"03", '1'); wait; end process sendpkg; end architecture bench;