LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; ENTITY clock_divider IS PORT ( clk : IN STD_ULOGIC; reset : IN STD_ULOGIC; choiceWPM : IN STD_ULOGIC_VECTOR (1 DOWNTO 0); --Auswahlsignal für die Wortgeschwindkeit (ausgewählt durch die letzten beiden Switches) wpm6 : OUT STD_ULOGIC_VECTOR (6 DOWNTO 0); --1. Anzeige für die Wortgeschwindigkeit wpm7 : OUT STD_ULOGIC_VECTOR (6 DOWNTO 0); --2. Anzeige für die Wortgeschwindigkeit clockNC : OUT STD_ULOGIC; --Clock-Signal für eine eingestellte Wortgeschwindigkeit für das Morsesignal clock_400hz_en : OUT STD_ULOGIC; --LCD_Initialising: Das LCD_EN-Signal schaltet mit 400Hz um clock_12MHz_en : OUT STD_ULOGIC --12MHz-Signal für die Ansteuerung des Audio-Codecs ); END clock_divider; ARCHITECTURE structure OF clock_divider IS SIGNAL cnt : NATURAL; --Zähler für den Clock Divider zur Erstellung der Morsegeschwindigkeit SIGNAL cnt_400 : NATURAL; --Zähler zur Erzeugung des 400Hz LCD-Signals SIGNAL CLK_PERIODE: NATURAL RANGE 50*10**6/60 TO 50*10**6/15 := 50*10**6/15; --maximale Zählerstände für die Erstellung der Morsegeschwindigkeit SIGNAL clk_400 : STD_ULOGIC := '0'; --400Hz Taktsignal für das LCD SIGNAL cnt_12MHz : NATURAL; --Zähler zur Erzeugung des 12MHz Audio-Codec-Signals SIGNAL clk_12MHz : STD_ULOGIC := '0'; --12Mhz Taktsignal für den Audio-Codec BEGIN ------------------------------------------------------------------------------------------------ --Prozess um mit Hilfe von einem Zähler das Clock-Signal von 50MHz auf 400Hz herunterzutakten!-- ------------------------------------------------------------------------------------------------ Clock_Unit_LCD: PROCESS (reset, clk) BEGIN IF reset = '0' THEN cnt_400 <= 0; clk_400 <= '0'; ELSIF clk'EVENT AND clk = '1' THEN cnt_400 <= cnt_400 + 1; IF cnt_400 >= (50*10**6 / 400) / 2 THEN clk_400 <= NOT clk_400; cnt_400 <= 0; END IF; clock_400hz_en <= clk_400; END IF; END PROCESS; ------------------------------------------------------------------------------------------------ --Prozess um mit Hilfe von einem Zähler das Clock-Signal von 50MHz auf 12MHz herunterzutakten!-- ------------------------------------------------------------------------------------------------ Clock_12MHz: PROCESS (reset, clk) BEGIN IF reset = '0' THEN cnt_12MHz <= 0; clk_12MHz <= '0'; ELSIF clk'EVENT AND clk = '1' THEN cnt_12MHz <= cnt_12MHz + 1; IF cnt_12MHz >= ((50*10**6) / (12*10**6)) / 2 THEN clk_12MHz <= NOT clk_12MHz; cnt_12MHz <= 0; END IF; clock_12MHz_en <= clk_12MHz; END IF; END PROCESS;