salut,

j'ai un examen ecrit en VHDL le lundi ...le prof durant ces mois nous donne les TPs dans un fichier sans les faire comprendre ...

comme ce TP par exmple : horloge numérique sur l’écran du PC
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
 
 
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
 
entity POLY_3  is    --vhdlmodule is
  Port ( CLKIN : in std_logic; 
         AN3 : inout std_logic;
         AN2 : inout std_logic;
         AN1 : inout std_logic;
         AN0 : inout std_logic;
         LED : out std_logic_vector(6 downto 0));
end POLY_3; --vhdlmodule;
 
architecture Behavioral of POLY_3  is    --vhdlmodule is
 
signal CTR          : STD_LOGIC_VECTOR(17 downto 0);
signal C            : STD_LOGIC_VECTOR(1 downto 0);
signal modulo10     : STD_LOGIC_VECTOR(3 downto 0);
signal modulo6      : STD_LOGIC_VECTOR(3 downto 0);
signal modulo10_2   : STD_LOGIC_VECTOR(3 downto 0);
signal modulo6_2    : STD_LOGIC_VECTOR(3 downto 0);
signal digit        : STD_LOGIC_VECTOR(3 downto 0);
signal h            :integer range 0 to 50000000 ;
signal h_sec        : STD_LOGIC;
signal ver_mod6     : STD_LOGIC;
signal h_minute     : STD_LOGIC;
signal ver_mod6_2   : STD_LOGIC;
signal h_heure      : STD_LOGIC;
begin		
 
	-----------------------------  une seconde -----------------
Process (clkin)
begin 
 if (clkin'event and clkin='1') 
 then 
   if ((h>=0) and (h<25000000))
	then
      h_sec<='0';
      h<=h+1;
   elsif ((h>=25000000) and (h<50000000 ))
	then 
	   h_sec<='1';
       h<=h+1;
      else
       h<= 0;
    end if;
 end if;
end Process; 
 -----------------------------  modulo 10  ---------------------------------
 Process (h_sec)
begin 
 if ( h_sec'event and h_sec ='1')
 then
   if (modulo10 = "1001")
   then 
     modulo10 <= "0000";
	  ver_mod6<='1';
    else 
      modulo10 <=modulo10+"0001";
      ver_mod6<='0';
    end if;
end if;	
end Process; 
 
 -----------------------------  modulo 06 ---------------------------------
 Process (ver_mod6)
begin 
 if ( ver_mod6'event and ver_mod6 ='1')
 then
   if (modulo6 = "0101")
   then 
     modulo6 <= "0000";
	  h_minute<='1';
    else 
      modulo6 <= modulo6+"0001";
      h_minute <='0';
    end if;
end if;	
end Process; 
 
 -----------------------------  modulo 10_2  ---------------------------------
 Process (h_minute)
begin 
 if ( h_minute'event and h_minute ='1')
 then
   if (modulo10_2 = "1001")
   then 
     modulo10_2 <= "0000";
	  ver_mod6_2<='1';
    else 
      modulo10_2 <=modulo10_2+"0001";
      ver_mod6_2<='0';
    end if;
end if;	
end Process; 
 
 -----------------------------  modulo 06 ---------------------------------
Process (ver_mod6_2)
begin 
 if ( ver_mod6_2'event and ver_mod6_2 ='1')
 then
   if (modulo6_2 = "0101")
   then 
     modulo6_2 <= "0000";
	  h_heure <='1';
    else 
      modulo6_2 <= modulo6+"0001";
      h_heure <='0';
    end if;
end if;	
end Process; 
 
---------------------------------   Refrachissement de l'affichage ----------
  Process (CLKIN)
     begin
       if CLKIN'event and CLKIN = '1' 
		  then
         if (CTR > "100000000000000000") 
			   then
				  CTR <= "000000000000000000";
		        C   <= C   + "01" ;
				else
 	           CTR  <= CTR + "000000000000000001";    
         end if;
      end if;			
  End Process;		
 
 -----------------------------  Choix de l'afficheurs  -----------------------------
 Process (C)		
	Begin	
	 case c is
		when "00" =>   digit <= Modulo10 ; AN0 <= '0'; AN1 <= '1'; AN2 <= '1';AN3 <= '1';		
		when "01" =>   digit <= Modulo6  ; AN0 <= '1'; AN1 <= '0'; AN2 <= '1';AN3 <= '1';
 		when "10" =>   digit <= Modulo10_2 ; AN0 <= '1'; AN1 <= '1'; AN2 <='0'; AN3 <= '1';
		when "11" =>   digit <= Modulo6_2  ; AN0 <= '1'; AN1 <= '1'; AN2 <='1'; AN3 <= '0';
		when others => digit <= "0000"   ; AN0 <='1';AN1 <='1';AN2 <='1';AN3 <= '1' ;
		end case ;
	End Process;
 
Process (modulo6)		
 Begin	
 
	  case digit is
                          -- gfedcba
	   when "0000" => LED <= "1000000"; 		
	   when "0001" => LED <= "1111001"; 
 		when "0010" => LED <= "0100100"; 
		when "0011" => LED <= "0110000"; 
		when "0100" => LED <= "0011001"; 		
	   when "0101" => LED <= "0010010"; 
 		when "0110" => LED <= "0000010"; 
		when "0111" => LED <= "1111000"; 
		when "1000" => LED <= "0000000"; 		
	   when "1001" => LED <= "0010000"; 
		when others => LED <= "1111111" ;
		end case ;
 End Process;	
 
 
End Behavioral;

si vous pouvez me faire comprendre ce code
merci d'avance