IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VHDL Discussion :

Problème code VHDL


Sujet :

VHDL

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4
    Points : 4
    Points
    4
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : 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
    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.

  2. #2
    Membre expérimenté

    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 545
    Points : 1 429
    Points
    1 429
    Par défaut
    Salut,

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

    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
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Ecrire un code VHDL à partir de Perl
    Par blaise4714 dans le forum VHDL
    Réponses: 1
    Dernier message: 19/06/2007, 14h32
  2. Problème code VBA :)
    Par Freygolow dans le forum Access
    Réponses: 4
    Dernier message: 17/05/2007, 15h43
  3. Probléme code C
    Par conceicao dans le forum C
    Réponses: 12
    Dernier message: 23/01/2007, 13h44
  4. Réponses: 6
    Dernier message: 23/12/2006, 12h46
  5. [Problème code] Afficher/Masquer div
    Par glloq8 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/03/2006, 14h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo