vt100: include pgmspace.h as we use PROGMEM macro
[aversive.git] / modules / devices / encoders / encoders_eirbot / xilinx_vhdl / compteur.vhd
1 LIBRARY IEEE;\r
2 USE IEEE.STD_LOGIC_1164.ALL;\r
3 USE ieee.numeric_std.ALL;\r
4 \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
8 \r
9 \r
10 ENTITY compteur IS\r
11   GENERIC ( Nb_bascules : natural := 1\r
12           );\r
13   PORT ( AB : IN unsigned(1 DOWNTO 0);\r
14          cpt : OUT  unsigned(7 DOWNTO 0);\r
15          clk : IN std_ulogic;\r
16          INV : IN std_ulogic\r
17          );\r
18 END compteur;\r
19 \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
23     \r
24 SIGNAL tmp : unsigned(7 DOWNTO 0);\r
25 BEGIN\r
26 \r
27   -- double latch des codeurs\r
28 copie : PROCESS\r
29   BEGIN\r
30     WAIT UNTIL rising_edge(clk) ;\r
31 \r
32     A_B(0)<= AB(1) & (AB(0) XOR INV); \r
33 \r
34     FOR i IN 1 TO Nb_bascules LOOP\r
35                 A_B(i) <= A_B(i-1);\r
36     END LOOP;\r
37 \r
38   END PROCESS copie;\r
39    \r
40 \r
41   \r
42 -- decodage de la quadrature et comptage\r
43   comptage: PROCESS\r
44   BEGIN  \r
45     WAIT UNTIL falling_edge(clk) ;\r
46 \r
47 \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
49     tmp <= tmp - 1;\r
50       \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
52     tmp <= tmp + 1;\r
53 \r
54   END IF;    \r
55   END PROCESS comptage;\r
56   \r
57   cpt <= tmp;\r
58 \r
59 END Behavioral;\r