-- ############################################################################ -- # Project : VHDL-Modellbibliothek # -- # # -- # Filename : tb_async_fifo.vhd # -- # # -- # Schaltung : Testbench fuer parametrierbaren FIFO-Speicher # -- # # -- # Modell : tb_async_fifo # -- # # -- # Designer : Wolfgang Sehr; ueberarbeitet von Stefan Schmechtig # -- # Abteilung : Lehrstul fuer rechnergestuetzten Schaltungsentwurf # -- # Datum : 08.02.1995 # -- ############################################################################ -- ############################################################################ -- # SYNOPSYS PACKAGES # -- ############################################################################ Library IEEE; use IEEE.std_logic_1164.all; use IEEE.std_logic_arith.all; USE IEEE.math_real.all; -- wird fuer die Erzeugung von Zufallszahlen -- benoetigt -- ############################################################################ ENTITY TB_async_fifo IS GENERIC (X : INTEGER := @BITBR; -- X: Bitbreite Y : INTEGER := @SPTF); END TB_async_fifo; ARCHITECTURE behaviour of TB_async_fifo IS SIGNAL tb_takt : STD_LOGIC; SIGNAL tb_shift_in : STD_LOGIC; SIGNAL tb_input_ready : STD_LOGIC; SIGNAL tb_data_in : UNSIGNED ((X-1) DOWNTO 0); SIGNAL tb_master_reset : STD_LOGIC; SIGNAL tb_output_enable : STD_LOGIC; SIGNAL tb_data_out : UNSIGNED ((X-1) DOWNTO 0); SIGNAL tb_shift_out : STD_LOGIC; SIGNAL tb_output_ready : STD_LOGIC; -- tb_takt : Taktsignal der Testbench -- tb_shift_in : generiertes shift_in Signal -- tb_input_ready : empfangenes input_ready Signal -- tb_data_in : von der Testbench gelieferte Daten -- tb_master_reset : generiertes Resetsignal -- tb_output_enable : generiertes output_enable Signal -- tb_data_out : empfangene Ausgabedaten des UUT -- tb_shift_out : generiertes shift_out Signal -- tb_output_ready : empfangenes output_ready Signal COMPONENT async_fifo PORT( takt : IN STD_LOGIC; shift_in : IN STD_LOGIC; input_ready : OUT STD_LOGIC; data_in : IN UNSIGNED ((X-1) DOWNTO 0); master_reset : IN STD_LOGIC; output_enable : IN STD_LOGIC; data_out : OUT UNSIGNED ((X-1) DOWNTO 0); shift_out : IN STD_LOGIC; output_ready : OUT STD_LOGIC ); END COMPONENT; BEGIN UUT: async_fifo -- einzige Schaltung PORT MAP( takt => tb_takt, shift_in => tb_shift_in, input_ready => tb_input_ready, data_in => tb_data_in, master_reset => tb_master_reset, output_enable => tb_output_enable, data_out => tb_data_out, shift_out => tb_shift_out, output_ready => tb_output_ready ); tkt: PROCESS -- Generierung des Taktsignals BEGIN tb_takt <= '0'; WAIT FOR 2 ns; LOOP tb_takt <= NOT(tb_takt); WAIT FOR 5 ns; END LOOP; END PROCESS; res: PROCESS -- Generierung des Resetsignals BEGIN tb_master_reset <= '1'; WAIT FOR 5 ns; LOOP tb_master_reset <= not(tb_master_reset); WAIT FOR 300 ns; tb_master_reset <= not(tb_master_reset); WAIT FOR 10 ns; END LOOP; END PROCESS; write: PROCESS -- Generierung der Eingabedaten VARIABLE data_in_int : INTEGER; BEGIN tb_shift_in <= '0'; WAIT FOR 10 ns; LOOP data_in_int := RAND; tb_data_in <= CONV_UNSIGNED(data_in_int, tb_data_in'LENGTH); tb_shift_in <= NOT(tb_shift_in); WAIT FOR 10 ns; END LOOP; END PROCESS; read: PROCESS -- Generierung des shift_out Signals BEGIN tb_shift_out <= '0'; WAIT FOR 20 ns; LOOP tb_shift_out <= NOT(tb_shift_out); WAIT FOR 17 ns; END LOOP; END PROCESS; aus: PROCESS -- Generierung des output_enable Signals BEGIN tb_output_enable <= '1'; WAIT FOR 100 ns; LOOP tb_output_enable <= NOT(tb_output_enable); WAIT FOR 20 ns; tb_output_enable <= NOT(tb_output_enable); WAIT FOR 100 ns; END LOOP; END PROCESS; END behaviour; CONFIGURATION CFG_TB_async_fifo OF TB_async_fifo IS FOR behaviour FOR UUT: async_fifo USE CONFIGURATION WORK.CFG_async_fifo; END FOR; END FOR; END CFG_TB_async_fifo;