--========================================================== -- Design units : Testbench for systolic filter -- -- File name : FILTERtb -- -- Purpose : Testbench for systolic filter benchmark -- -- Limitations : None -- -- Library : WORK -- -- Dependencies : IEEE, FILTERpack -- -- Author : Hans-Peter Eich, REFT -- -- Simulator : Synopsys V3.1a on Sun SPARCstation 10 -- ----------------------------------------------------------- -- Revision list -- Version Author Date Changes -- -- V1.0 hpe 18.01.95 ESA standard -- V1.1 cjt 03.05.95 --========================================================= LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; USE work.FILTERpack.ALL; ENTITY FILTERtb IS END FILTERtb; --============================ARCHITECTURE================== ARCHITECTURE Testbench OF FILTERtb IS CONSTANT N: Positive := 12; -- length of result vector CONSTANT M: Positive := 4; -- length of stream vector CONSTANT K: Positive := 3; -- number of weights or filter stages SIGNAL Stream : Integer RANGE (2**M)-1 DOWNTO 0; SIGNAL Result : Integer RANGE (2**N)-1 DOWNTO 0; SIGNAL SelectWeightStream,StoreWeight,StoreStream,StoreResult, clk1,clk2,Reset_N: std_logic; -- control signals SIGNAL StreamIn: std_logic_vector(M-1 DOWNTO 0); -- m bit stream in SIGNAL ResultOut: std_logic_vector(N-1 DOWNTO 0); -- n bit stream out BEGIN Behavior : FILTERbehave GENERIC MAP(N,M,K) PORT MAP (StreamIn => Stream, CLK => clk1, SelWgtStr => SelectWeightStream, StoreWgt => StoreWeight, StoreStr => StoreStream, Reset_N => Reset_N, ResultOut => Result); Structure : FILTERstruc GENERIC MAP(N,M,K) PORT MAP(StreamIn => StreamIn, SelectWgtStr => SelectWeightStream, StoreWgt => StoreWeight, StoreStr => StoreStream, StoreRes => StoreResult, clk1 => clk1, clk2 => clk2, Reset_N => Reset_N, ResultOut => ResultOut); Stream <= 4 AFTER 0 Ns, 2 AFTER 100 Ns, 1 AFTER 200 Ns, 9 AFTER 300 Ns, 8 AFTER 400 Ns, 7 AFTER 500 Ns, 6 AFTER 600 Ns, 5 AFTER 700 Ns, 0 AFTER 800 Ns; StreamIn <= "0100" AFTER 0 Ns, "0010" AFTER 100 Ns, "0001" AFTER 200 Ns, "1001" AFTER 300 Ns, "1000" AFTER 500 Ns, "0111" AFTER 700 Ns, "0110" AFTER 900 Ns, "0101" AFTER 1100 Ns, "0000" AFTER 1300 Ns; SelectWeightStream <= '1' AFTER 0 Ns, '0' AFTER 200 Ns, '1' AFTER 300 Ns; Reset_N <= '1' AFTER 0 Ns, '0' AFTER 10 Ns, '1' AFTER 20 Ns; StoreWeight <= '0' AFTER 0 Ns, '1' AFTER 200 Ns, '0' AFTER 300 Ns; StoreStream <= '1' AFTER 0 Ns, '0' AFTER 200 Ns, '1' AFTER 300 Ns; StoreResult <= '0' AFTER 0 Ns, '1' AFTER 650 Ns; clk1 <= '0' AFTER 0 Ns, '1' AFTER 50 Ns, '0' AFTER 100 Ns, '1' AFTER 150 Ns, '0' AFTER 200 Ns, '1' AFTER 250 Ns, '0' AFTER 300 Ns, '1' AFTER 350 Ns, '0' AFTER 400 Ns, '1' AFTER 450 Ns, '0' AFTER 500 Ns, '1' AFTER 550 Ns, '0' AFTER 600 Ns, '1' AFTER 650 Ns, '0' AFTER 700 Ns, '1' AFTER 750 Ns, '0' AFTER 800 Ns, '1' AFTER 850 Ns, '0' AFTER 900 Ns, '1' AFTER 950 Ns, '0' AFTER 1000 Ns, '1' AFTER 1050 Ns, '0' AFTER 1100 Ns, '1' AFTER 1150 Ns, '0' AFTER 1200 Ns; clk2 <= '1' AFTER 0 Ns, '0' AFTER 50 Ns, '1' AFTER 100 Ns, '0' AFTER 150 Ns, '1' AFTER 200 Ns, '0' AFTER 250 Ns, '1' AFTER 300 Ns, '0' AFTER 350 Ns, '1' AFTER 400 Ns, '0' AFTER 450 Ns, '1' AFTER 500 Ns, '0' AFTER 550 Ns, '1' AFTER 600 Ns, '0' AFTER 650 Ns, '1' AFTER 700 Ns, '0' AFTER 750 Ns, '1' AFTER 800 Ns, '0' AFTER 850 Ns, '1' AFTER 900 Ns, '0' AFTER 950 Ns, '1' AFTER 1000 Ns, '0' AFTER 1050 Ns, '1' AFTER 1100 Ns, '0' AFTER 1150 Ns, '1' AFTER 1200 Ns; END Testbench; --============================CONFIGURATION================= CONFIGURATION FILTERtb_Config OF FILTERtb IS FOR Testbench FOR Behavior : FILTERbehave USE ENTITY work.FILTERbehave(Behavior); END FOR; FOR Structure : FILTERstruc USE ENTITY work.FILTERstruc(Structure); END FOR; END FOR; END FILTERtb_Config;