witteks
Stammgast 
Beiträge: 27
|
Erstellt: 14.03.05, 21:07 Betreff: Re: Impulsabstandsmessung |
|
|
Hallo Sven,
hier ein Lösungsvorschlag mit Testbench (im Anhang ZIP-Datei).
library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;
-- Uncomment the following lines to use the declarations that are -- provided for instantiating Xilinx primitive components. --library UNISIM; --use UNISIM.VComponents.all;
entity Messung is Port ( reset : in std_logic; Zu_testendes_Signal : in std_logic; clk_ref : in std_logic; Impulsabstand : out std_logic_vector(15 downto 0); Messung_fertig : out std_logic; Ueberlauf : inout std_logic ); end Messung;
architecture Behavioral of Messung is signal halten : std_logic; -- zum Messen einer ganzen Periode des zu messenden Signales signal Impulsabstand_zaehler : std_logic_vector(15 downto 0); begin process (reset, clk_ref) begin if reset = '1' then Impulsabstand_zaehler <= X"0000"; Impulsabstand <= X"0000"; Messung_fertig <= '0'; Ueberlauf <= '0'; halten <= '0'; elsif rising_edge (clk_ref) then if Impulsabstand_zaehler = X"FFFF" then Impulsabstand_zaehler <= X"0000"; Ueberlauf <= '1'; else -- kein Überlauf if Ueberlauf = '0' then if Impulsabstand_zaehler = X"0000" then if Zu_testendes_Signal = '1' then Impulsabstand_zaehler <= Impulsabstand_zaehler + 1; halten <= '1'; Messung_fertig <= '0'; end if; else -- Impulsabstand_zaehler nicht 0 if halten = '1' then if Zu_testendes_Signal = '1' then Impulsabstand_zaehler <= Impulsabstand_zaehler + 1; else Impulsabstand_zaehler <= Impulsabstand_zaehler + 1; halten <= '0'; end if; else -- halten = '0' if Zu_testendes_Signal = '0' then Impulsabstand_zaehler <= Impulsabstand_zaehler + 1; else Impulsabstand_zaehler <= X"0000"; Messung_fertig <= '1'; Impulsabstand <= Impulsabstand_zaehler; end if; end if; end if; else -- Überlauf = 1 if Zu_testendes_Signal = '0' then Impulsabstand_zaehler <= X"0000"; Ueberlauf <= '0'; halten <= '0'; end if; end if; end if; end if; end process; end Behavioral;
Impulsabstandsmessung.zip (21 kByte)
anzeigen - speichern
Datei wurde schon 245-mal heruntergeladen. |
|