library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; package constTxData is constant measureTime : integer := (5*10**6); -- Startwartwert 100 ms ------Funktionsdeklarationdeklaration------- function compare ( signal tx_regRead : in std_ulogic_vector(15 downto 0) -- Zaehlerstand -> Counterregisterinhalt ) return std_logic; end constTxData; package body constTxData is function compare ( signal tx_regRead : in std_ulogic_vector(15 downto 0) ) return std_logic is variable frequency : integer;--natural range 0 to 200*10**6 := 0; --default 200 MHz variable equal : std_logic ; begin -------Berechnung und Vergleich der Frequenz------- frequency := (TO_INTEGER(signed(tx_regRead)) / measureTime); if (frequency = 110*10**3) then equal := '1'; else equal := '0'; end if; return equal; end compare; end constTxData; ---------Prozess -> Auszug aus der architecture---------- process (IF_reg, equal, newIF_reg, tx_regRead) variable cnt : integer := 0; -- Variable zum Dekrementieren des IF_Registers begin ---------Funktion "compare" wird aufgerufen-------- IF_reg <= TO_INTEGER(signed( constTxData(4)(10 downto 0))); --Registerwert von IF wird in Ganzzahl konvertiert equal <= compare(tx_regRead); if (equal = '1') then --also stimmt gemessene Frequenz mit definierter ueberein Temp <= '1'; else cnt := cnt + 1; newIF_reg <= IF_reg - cnt; --newIF_reg ist vom Typ Integer revIF_reg <= "00110" & To_StdULogicVector(std_logic_vector(to_signed(newIF_reg,11))); end if; end process; end Behavioral;