Gast
#253010
Hallo Leute,
ich hab mal wieder ein Problem und bräuchte mal eure Hilfe. Ich arbeite
mit Spartan-3 von Xilinx und
möchte einen serielle Datenstrom aus 8-Bit-Worten auswerten. Genauer
soll die Signaländerung auswertet werden. Wenn
der Unterschied "Delta" zw. 2 aufeinanderfolgenden Worten größer als
"Schwelle" ist, soll sich der Ausgangswert "DataOut"
nicht ändern. Ist die Änderung < als "Schwelle", soll zum vorherigen
Ausgangswert die Änderung dazuaddiert werden.
Hab mal was geschrieben, das hinten und vorne nicht funktioniert. Wenn
ich die Entity "SchwellSchalter" als
component in ein anderes File einbinde, kommt immer die Warnung
Gated_Clock.
entity SchwellSchalter is
Port ( clk : std_logic;
reset: in std_logic;
DoneIn : in std_logic; -- Done-Flag des vorherigen Moduls
enable : in std_logic;
Schwelle : in std_logic_vector(7 downto 0); -- vorgebbarer
Schwellwert
DataIn : in std_logic_vector(7 downto 0); -- ankommender
serieller Datenstrom
DoneOut : out std_logic;
DataOut : out std_logic_vector(7 downto 0));
end SchwellSchalter
architecture Behavioral of SchwellSchalter is
-- Der Typ Buffer ist ein Array aus 2 8-Bit-Worten
type Buffer is array (1 downto 0) of std_logic_vector(7 downto 0);
signal Puffer : Buffer;
signal ShiftFlag : std_logic;
signal Delta : std_logic_vector(7 downto 0);
signal DataOut_Intern : std_logic_vector(7 downto 0);
signal DoneOut_Intern : std_logic;
begin
process (clk, reset, DoneIn, enable, DataIn)
begin
if (reset = '1') then
Puffer <= (others => "00000000");
ShiftFlag <= '0';
elsif (rising_edge(clk)) then
if (reset = '1' and enable = '1') then
Puffer <= Puffer(0) & DataIn;
ShiftFlag <= '1';
else
ShiftFlag <= '0';
end if;
end if;
end process;
process (ShiftFlag, Puffer, Delta, Schwelle)
begin
if (ShiftFlag <= '1') then
Delta <= (Puffer(0) - Puffer(1));
if (Delta < Schwelle) then
Int_FilteredOut <= Puffer(0); -- neuen Wert ausgeben
DataOut_Intern <= '1';
elsif (Delta > Schwelle) then
Int_FilteredOut <= Puffer(1); -- alten Wert ausgeben
end if;
elsif (ShiftFlag <= '0') then
DataOut_Intern <= '0';
end if;
end process;
DoneOut <= DataOut_Intern;
DataOut <= DataOut_Intern;
end Behavioral;
Vielleicht kann mir ja jemand weiterhelfen. Würde mich freuen
Danke im Voraus.
Gruß
Jens