LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; ENTITY press_duration IS PORT ( clock : IN STD_ULOGIC; --50MHz Systemtakt reset : IN STD_ULOGIC; --Reset-Signal enable : IN STD_ULOGIC; --Wortgeschwindigkeit button : IN STD_ULOGIC; --Morsetaster-Signal short_press : OUT STD_ULOGIC; --repräsentiert einen kurzen Tastendruck long_press : OUT STD_ULOGIC; --repräsentiert einen langen Tastendruck long_pause : OUT STD_ULOGIC --repräsentiert eine lange Pause ); END press_duration; ARCHITECTURE structure OF press_duration IS SIGNAL sh : STD_ULOGIC_VECTOR (10 DOWNTO 0); --Shift-Signal BEGIN long_pause <= '1' WHEN sh(9 DOWNTO 0)="0000000000" ELSE '0'; --lange Pause wenn das Shift-Signal nur aus Nullen besteht (Taster nicht gedrückt) short_press <= NOT sh(0) AND sh(1) AND NOT (sh(2) AND sh(3) AND sh(4)); --kurzer Tastendruck wenn für einen Takt bis max. drei Takte der Taster gedrückt --wurde long_press <= '1' WHEN sh(5 DOWNTO 0)="111110" and sh(10 DOWNTO 6)/="11111" ELSE '0'; --langer Tastendruck, wenn für 5 bis max. 9 Takte der Taster gedrückt --wurde ------------------------------------------------------------------------------------------------------------- --Einshiften des invertierten Button-Signals in ein Shift-Signal zur Überprüfung der Länge des Tastendrucks-- ------------------------------------------------------------------------------------------------------------- SHIFTREG: PROCESS (clock,reset) BEGIN IF reset='0' THEN sh <= (OTHERS=>'0'); ELSIF clock'EVENT AND clock = '1' THEN IF enable='1' THEN sh <= sh(9 DOWNTO 0) & NOT button; END IF; END IF; END PROCESS; END structure;