LIBRARY ieee; USE ieee.std_logic_1164.all; LIBRARY synth; USE synth.vhdlsynth.all; ENTITY testbench IS PORT ( in_data_1, in_data_2 : OUT STD_LOGIC_VECTOR(7 downto 0); -- die beiden Faktoren load : OUT STD_LOGIC; -- "Werte Laden" Signal ready : IN STD_LOGIC; -- =1, wenn multiplier fertig ist clk : OUT STD_LOGIC -- generiertes Taktsignal ); END testbench; ARCHITECTURE testbench_arch OF testbench IS SIGNAL tempcyc : NATURAL := 0; -- zählt verstrichene Taktzyklen SIGNAL tempclk : STD_LOGIC := '0'; -- zur Generierung des Takts CONSTANT clk_period : TIME := 100 ns; -- 10 MHz Taktfrequenz SIGNAL buffer1, buffer2 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000"; -- um mit 0 anzufangen -- (gewählt) BEGIN clk <= tempclk; in_data_1 <= buffer1; in_data_2 <= buffer2; clock: PROCESS -- generiert das Taktsignal BEGIN tempclk <= '1'; WAIT FOR clk_period / 2; -- fallende Taktflanke tempclk <= '0'; WAIT FOR clk_period / 2; -- steigende Taktflanke tempcyc <= tempcyc + 1; -- ein Taktzyklus verstrichen END PROCESS clock; stimulus: PROCESS(tempclk) -- durchläuft alle möglichen Kombinationen der -- beiden Faktoren (65536 verschiedene) BEGIN IF (tempclk'EVENT AND tempclk = '1') THEN IF (ready='1') THEN -- ist multiplier bereit ? load <= '1'; -- neue Werte laden buffer1 <= buffer1 + "00000001"; IF (buffer1 = "11111111") THEN buffer2 <= buffer2 + "00000001"; END IF; ELSE -- nein, also warten load <= '0'; END IF; END IF; END PROCESS stimulus; END testbench_arch;