15 use IEEE.STD_LOGIC_1164.
all;
16 use IEEE.NUMERIC_STD.
all;
25 IN_Data : in DataWords(5 downto 0);
26 IN_DataUp : in DataWords(5 downto 0);
27 IN_DataDown : in DataWords(5 downto 0);
28 OUT_UpNotDown : out std_logic;
29 OUT_Seed : out std_logic_vector(1 downto 0);
30 OUT_IsLocalMax : out std_logic;
31 OUT_IsMax : out std_logic);
36 signal Result : std_logic_vector(2 downto 0) := (others => '0');
37 signal UpOrDown, UpOrDown_d : std_logic_vector(3 downto 0) := (others => '0');
38 signal alpha, beta, gamma : std_logic := '0';
39 signal pos : std_logic_vector(3 downto 0) := "0000";
48 if rising_edge(CLK) then
51 pos(0) <= '1' when not (IN_Data(0) > IN_Data(1)) and (IN_Data(1) > IN_Data(2)) and
52 not (IN_DataUp(0) > IN_Data(1)) and (IN_Data(1) > IN_DataUp(1)) and (IN_Data(1) > IN_DataUp(2)) and
53 not (IN_DataDown(0) > IN_Data(1)) and not (IN_DataDown(1) > IN_Data(1)) and (IN_Data(1) > IN_DataDown(2))
56 pos(1) <= '1' when not (IN_Data(1) > IN_Data(2)) and (IN_Data(2) > IN_Data(3)) and
57 not (IN_DataUp(1) > IN_Data(2)) and (IN_Data(2) > IN_DataUp(2)) and (IN_Data(2) > IN_DataUp(3)) and
58 not (IN_DataDown(1) > IN_Data(2)) and not (IN_DataDown(2) > IN_Data(2)) and (IN_Data(2) > IN_DataDown(3))
61 pos(2) <= '1' when not (IN_Data(2) > IN_Data(3)) and (IN_Data(3) > IN_Data(4)) and
62 not (IN_DataUp(2) > IN_Data(3)) and (IN_Data(3) > IN_DataUp(3)) and (IN_Data(3) > IN_DataUp(4)) and
63 not (IN_DataDown(2) > IN_Data(3)) and not (IN_DataDown(3) > IN_Data(3)) and (IN_Data(3) > IN_DataDown(4))
66 pos(3) <= '1' when not (IN_Data(3) > IN_Data(4)) and (IN_Data(4) > IN_Data(5)) and
67 not (IN_DataUp(3) > IN_Data(4)) and (IN_Data(4) > IN_DataUp(4)) and (IN_Data(4) > IN_DataUp(5)) and
68 not (IN_DataDown(3) > IN_Data(4)) and not (IN_DataDown(4) > IN_Data(4)) and (IN_Data(4) > IN_DataDown(5))
72 alpha <= '1' when (IN_Data(3) < IN_Data(1)) else '0';
73 beta <= '1' when (IN_Data(4) < IN_Data(1)) else '0';
74 gamma <= '1' when (IN_Data(4) < IN_Data(2)) else '0';
76 UpOrDown(0) <= '0' when IN_DataDown(1) > IN_DataUp(1) else '1';
77 UpOrDown(1) <= '0' when IN_DataDown(2) > IN_DataUp(2) else '1';
78 UpOrDown(2) <= '0' when IN_DataDown(3) > IN_DataUp(3) else '1';
79 UpOrDown(3) <= '0' when IN_DataDown(4) > IN_DataUp(4) else '1';
82 Result <= "111" when (pos = "1000") or (pos(3) = '1' and pos(0) = '1' and beta = '0') or (pos(3) = '1' and pos(1) = '1' and gamma = '0') else
83 "110" when (pos = "0100") or (pos(2) = '1' and pos(0) = '1' and alpha = '0') else
84 "101" when (pos = "0010") or (pos(1) = '1' and pos(3) = '1' and gamma = '1') else
85 "100" when (pos = "0001") or (pos(0) = '1' and pos(3) = '1' and beta = '1') or (pos(0) = '1' and pos(2) = '1' and alpha = '1') else
87 UpOrDown_d <= UpOrDown;
94 OUT_IsLocalMax <= Result(2);
97 OUT_UpNotDown <= UpOrDown_d(to_integer(unsigned(Result(1 downto 0))));
98 OUT_Seed <= Result(1 downto 0);
Seed Finder for the electromagnetic algorithm.