LIBRARY IEEE; USE IEEE.Std_logic_1164.ALL; USE IEEE.Numeric_Std.ALL; ENTITY ULoop_tb IS END; ARCHITECTURE bench OF ULoop_tb IS COMPONENT ULoop PORT ( clk : IN STD_LOGIC; rst : IN STD_LOGIC; rx : IN STD_LOGIC; tx : OUT STD_LOGIC; led1 : OUT STD_LOGIC; led2 : OUT STD_LOGIC ); END COMPONENT; SIGNAL clk : STD_LOGIC; SIGNAL rst : STD_LOGIC; SIGNAL rx : STD_LOGIC := '1'; SIGNAL tx : STD_LOGIC; SIGNAL led1 : STD_LOGIC; SIGNAL led2 : STD_LOGIC; CONSTANT clock_period : TIME := 10 ns; SIGNAL stop_the_clock : BOOLEAN; -- zu sendende Bytes -- cByte1 sollte nach der Definition 0XXXXXXX ein Datenbyte sein CONSTANT cByte1 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "01010101"; -- cByte2 sollte nach der Def. 1XXXXXXX ein Kommando sein CONSTANT cByte2 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "11000111"; BEGIN uut : ULoop PORT MAP( clk => clk, rst => rst, rx => rx, tx => tx, led1 => led1, led2 => led2); stimulus : PROCESS BEGIN -- Etwas Zeit vergehen lassen... WAIT FOR 868100 ps; -- dann Startbit senden und mit erstem Byte beginnen rx <= '0'; WAIT FOR 868100 ps; -- entsprechend Baudrate (115200) warten FOR k IN 0 TO 7 LOOP -- nach und nach Bits senden (LSB->MSB) rx <= cByte1(k); WAIT FOR 868100 ps; END LOOP; rx <= '1'; -- Dazwischen Leitung auf 1 halten WAIT FOR 3 * 868100 ps; -- wieder etwas warten -- und von vorn: -- Start bit rx <= '0'; WAIT FOR 868100 ps; FOR k IN 0 TO 7 LOOP rx <= cByte2(k); WAIT FOR 868100 ps; END LOOP; rx <= '1'; --stop_the_clock <= true; WAIT FOR 5 * 868100 ps; END PROCESS; clocking : PROCESS BEGIN WHILE NOT stop_the_clock LOOP clk <= '0', '1' AFTER clock_period / 2; WAIT FOR clock_period; END LOOP; WAIT; END PROCESS; END;