2 USE IEEE.STD_LOGIC_1164.ALL;
\r
3 USE ieee.numeric_std.ALL;
\r
5 --USE IEEE.STD_LOGIC_ARITH.ALL;
\r
6 --USE IEEE.STD_LOGIC_UNSIGNED.ALL;
\r
7 --USE IEEE.STD_LOGIC_SIGNED.ALL;
\r
11 GENERIC ( Nb_bascules : natural := 1
\r
13 PORT ( AB : IN unsigned(1 DOWNTO 0);
\r
14 cpt : OUT unsigned(7 DOWNTO 0);
\r
15 clk : IN std_ulogic;
\r
20 ARCHITECTURE Behavioral OF compteur IS
\r
21 TYPE tableau IS ARRAY (Nb_bascules downto 0) OF unsigned(1 DOWNTO 0);
\r
22 SIGNAL A_B : tableau;
\r
24 SIGNAL tmp : unsigned(7 DOWNTO 0);
\r
27 -- double latch des codeurs
\r
30 WAIT UNTIL rising_edge(clk) ;
\r
32 A_B(0)<= AB(1) & (AB(0) XOR INV);
\r
34 FOR i IN 1 TO Nb_bascules LOOP
\r
42 -- decodage de la quadrature et comptage
\r
45 WAIT UNTIL falling_edge(clk) ;
\r
48 IF (A_B(Nb_bascules-1) = "00" and A_B(Nb_bascules) = "01") OR (A_B(Nb_bascules-1) = "01" AND A_B(Nb_bascules) = "11") OR (A_B(Nb_bascules-1) = "11" AND A_B(Nb_bascules) = "10") OR (A_B(Nb_bascules-1) = "10" AND A_B(Nb_bascules) = "00") THEN
\r
51 ELSIF (A_B(Nb_bascules) = "00" and A_B(Nb_bascules-1) = "01") OR (A_B(Nb_bascules) = "01" AND A_B(Nb_bascules-1) = "11") OR (A_B(Nb_bascules) = "11" AND A_B(Nb_bascules-1) = "10") OR (A_B(Nb_bascules) = "10" AND A_B(Nb_bascules-1) = "00") THEN
\r
55 END PROCESS comptage;
\r