Précédent   Forum du club des développeurs et IT Pro > Autres langages > Autres langages > VHDL
VHDL Forum d'entraide sur VHDL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 01/12/2012, 21h03   #1
illidan92
Invité de passage
 
Homme Vincent
Étudiant
Inscription : décembre 2012
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2012
Messages : 3
Points : 1
Points : 1
Par défaut Problème code VHDL

Bonjour,

Je suis étudiant en première année d'école d'ingénieur et j'ai un projet à réaliser en VHDL. Cependant un de mes programmes compile avec 2 erreurs dont je ne trouve pas la solution...

Les erreurs sont les suivantes :

Code :
1
2
# ** Error: C:/Users/Vincent/Desktop/vhdl/work/Affichage/Affichage.vhd(111): near "process": expecting IF
# ** Error: C:/Users/Vincent/Desktop/vhdl/work/Affichage/Affichage.vhd(115): near "Behavioral": expecting IF
Et voici mon programme :

Code :
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
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity Affichage is
		port( clk_divise, raz : in std_logic;
		    Sens : in std_logic_vector(1 downto 0);
				Svecteur_affichage : out std_logic_vector(10 downto 0));
end Affichage;

architecture Behavioral of Affichage is
	signal compteur_affichage : std_logic_vector(14 downto 0);
	signal compteur_rafraichissement : std_logic_vector(4 downto 0);
	signal S_rafraichissement : std_logic;
  signal S_affichage : std_logic;
	signal vecteur_affichage : std_logic_vector(10 downto 0);
	signal compteur_etage : std_logic_vector(3 downto 0);

	
begin -- on veut que l'affichage soit rafraichit à 1kHz, on divise la clk de 50kHz par 64
      -- On veut que les étages s'affichent à 1Hz, donc on divise la clk de 50kHz par 32768
	
	Division : process(clk_divise, compteur_affichage, compteur_rafraichissement, S_rafraichissement, S_affichage) -- 1kHz pour le rafraichissement
	begin
		
		if raz = '1' then
		compteur_affichage <= "000000000000000";
		compteur_rafraichissement <= "00000";
		end if;
		
		if clk_divise'event and clk_divise = '1' then
			compteur_affichage <= compteur_affichage + 1;
			compteur_rafraichissement <= compteur_rafraichissement + 1;
				
			if compteur_affichage = "000000000000000" then    --Division par 32768
				S_affichage <= '1';				                 				            		 
			elsif compteur_affichage = "100000000000000" then
				S_affichage <= '0';
			end if;	
			
			if compteur_rafraichissement = "00000" then		-- Division par 64
				S_rafraichissement  <= '1';
			elsif compteur_rafraichissement = "10000" then
				S_rafraichissement <= '0';
			end if;
			
		end if;
	end process;
			
	Affichage : process(S_affichage, vecteur_affichage, S_rafraichissement, compteur_etage, Sens)
	begin
	
		if Sens = "00" then
					if S_affichage'event and S_affichage = '1' then
						compteur_etage <= compteur_etage;
					end if;
		else if Sens = "01" then
					if S_affichage'event and S_affichage = '1' then
						compteur_etage <= compteur_etage + 1;
					end if;
		else if Sens = "10" then
					if S_affichage'event and S_affichage = '1' then
						compteur_etage <= compteur_etage - 1;
					end if;
		end if;
		
		CASE compteur_etage IS			      --  abcdefg
			when "0000" => vecteur_affichage <= "00000010001"; -- 0, AN4
			when "0001" => vecteur_affichage <= "10011110001"; -- 1 et 0001 = afficheur AN4
			when "0010" => vecteur_affichage <= "00100100001"; -- 2, AN4
			when "0011" => vecteur_affichage <= "00001100001"; -- 3, AN4 
			when "0100" => vecteur_affichage <= "10011000001"; -- 4, AN4 
			when "0101" => vecteur_affichage <= "01001000001"; -- 5, AN4 
			when "0110" => vecteur_affichage <= "01000000001"; -- 6, AN4
			when "0111" => vecteur_affichage <= "00011110001"; -- 7, AN4
			when "1000" => vecteur_affichage <= "00000000001"; -- 8, AN4
			when "1001" => vecteur_affichage <= "00001000001"; -- 9, AN4
			when "1010" => if S_rafraichissement = '1' then
									       vecteur_affichage <= "10011110010"; -- 1, AN3
								     elsif S_rafraichissement = '0' then
									       vecteur_affichage <= "00000010001"; -- 0, AN4
								     end if;
			when "1011" => if S_rafraichissement = '1' then
									       vecteur_affichage <= "10011110010"; -- 1, AN3
								     elsif S_rafraichissement = '0' then
									       vecteur_affichage <= "10011110001"; -- 1, AN4
								     end if;
			when "1100" => if S_rafraichissement = '1' then
									       vecteur_affichage <= "10011110010"; -- 1, AN3
								     elsif S_rafraichissement = '0' then
									       vecteur_affichage <= "00100100001"; -- 2, AN4
								     end if;
			when "1101" => if S_rafraichissement = '1' then
									       vecteur_affichage <= "10011110010"; -- 1, AN3
								     elsif S_rafraichissement = '0' then
									       vecteur_affichage <= "00001100001"; -- 3, AN4
								     end if;
			when "1110" => if S_rafraichissement = '1' then
									       vecteur_affichage <= "10011110010"; -- 1, AN3
								     elsif S_rafraichissement = '0' then
									       vecteur_affichage <= "10011000001"; -- 4, AN4
								     end if;
			when "1111" => if S_rafraichissement = '1' then
									       vecteur_affichage <= "10011110010"; -- 1, AN3
								     elsif S_rafraichissement = '0' then
									       vecteur_affichage <= "01001000001"; -- 5, AN4
								     end if;
			when OTHERS => NULL;
		end case;
	end process;
	
	Svecteur_affichage <= vecteur_affichage;
	
end Behavioral;
Si vous avez la moindre idée d'où provient cette erreur, je veux bien que vous m'en fassiez part !

Merci.
illidan92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/12/2012, 10h02   #2
mith06
Membre confirmé
 
Ingénieur développement matériel électronique
Inscription : juillet 2010
Messages : 142
Détails du profil
Informations professionnelles :
Activité : Ingénieur développement matériel électronique
Secteur : Industrie

Informations forums :
Inscription : juillet 2010
Messages : 142
Points : 203
Points : 203
Salut,

Voici une première trame, je n'ai pas touche au process affichage (trop long a corriger)

Code :
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
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity Affichage is
    port(   clk_divise, raz     : in std_logic;
            Sens                : in std_logic_vector(1 downto 0);
            Svecteur_affichage  : out std_logic_vector(10 downto 0)
        );
end Affichage;

architecture Behavioral of Affichage is
    signal compteur_affichage           : std_logic_vector(14 downto 0);
    signal compteur_rafraichissement    : std_logic_vector(4 downto 0);
    signal S_rafraichissement           : std_logic;
    signal S_affichage                  : std_logic;
    signal vecteur_affichage            : std_logic_vector(10 downto 0);
    signal compteur_etage               : std_logic_vector(3 downto 0);


    begin -- on veut que l'affichage soit rafraichit à 1kHz, on divise la clk de 50kHz par 64
      -- On veut que les étages s'affichent à 1Hz, donc on divise la clk de 50kHz par 32768

    Division : process(raz,clk_divise) -- 1kHz pour le rafraichissement
    begin
        
        if raz = '1' then
            compteur_affichage          <= (others => '0');
            compteur_rafraichissement   <= (others => '0');
        elsif clk_divise'event and clk_divise = '1' then
            compteur_affichage          <= compteur_affichage + 1;
            compteur_rafraichissement   <= compteur_rafraichissement + 1;
                
            if (unsigned(compteur_affichage) = to_unsigned(0,compteur_affichage'length))then    --Division par 32768
                S_affichage <= '1';
            elsif(compteur_affichage(compteur_affichage'high) = '1')then
                S_affichage <= '0';
            end if;	
            
            if(unsigned(compteur_rafraichissement) = to_unsigned(0,compteur_rafraichissement'length))then   -- Division par 64
                S_rafraichissement  <= '1';
            elsif(compteur_rafraichissement(compteur_rafraichissement'high) = '1' then
                S_rafraichissement <= '0';
            end if;
        end if;
    end process Division;

    Svecteur_affichage <= vecteur_affichage;

end architecture Behavioral;
Les process a reset a synchrones s’écrivent comme ca:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
    my_process : process(RST,CLK)
    begin
        if(RST = '1')then--ou '0'
            mon_registre    <= (others => '0');--ou tout autre valeur
        elsif(rising_edge(CLK))then
            if(mon_entree = un_truc)then
                mon_registre    <= une_valeur;
            else
                mon_registre    <= une_autre_valeur;
            end if;
        end if;
    end process my_process;
C'est risqué de faire autrement
mith06 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/12/2012, 19h44   #3
illidan92
Invité de passage
 
Homme Vincent
Étudiant
Inscription : décembre 2012
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2012
Messages : 3
Points : 1
Points : 1
Merci pour la correction, mon programme est tout de suite plus propre.
Par contre pour mon erreur de compilation, j'ai finalement trouvé la solution. Dans mon process affichage il me manquait 2 end if... Tout simplement

Merci encore.
illidan92 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h03.


 
 
 
 
Partenaires

Hébergement Web