------------------------------------------------------------------------------- -- Title : Bench for Ethernet TX and RX Core -- Project : EthMAC ------------------------------------------------------------------------------- -- File : design/ethmac_tx_rx.vhd -- Author : Mario Hüttel -- Standard : VHDL'93/02 ------------------------------------------------------------------------------- -- Description: Testbench for communication between TX and RX core. ------------------------------------------------------------------------------- -- Copyright (c) 2016 -- -- This file is part of EthMAC. -- -- EthMAC is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation, version 2 of the License. -- -- This code is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this code. If not, see . -- ------------------------------------------------------------------------------- library ieee; library design; use design.all; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity bench_ethmac_tx_rx_mii is end entity bench_ethmac_tx_rx_mii; architecture bench of bench_ethmac_tx_rx_mii 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(3 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 := 40 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 generic map( IFACE_WIDTH => 4) 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 generic map( IFACE_WIDTH => 4) 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"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"03", '1'); wait; end process sendpkg; end architecture bench;