[VHDL - FPGA] Les process (pourquoi démarrent ils directement ? )
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

[VHDL - FPGA] Les process (pourquoi démarrent ils directement ? )



  1. #1
    invitef75f7d4f

    Question [VHDL - FPGA] Les process (pourquoi démarrent ils directement ? )


    ------

    Bonjour à tous,

    Dans le cadre de mes études, nous devons réaliser un projet tout en étant autonome. Nous connaissons pas le langage, donc nous devons lire des livres, pdfs, ....

    J'ai compris que les process démarrent lorsqu'il y a une sensibilité sur ceux-ci. Je suis bien d'accord.

    Cependant, lorsque je teste : Au premier démarrage du FPGA (cyclone III), il me met à jour une valeur (en l'occurence un afficheur 7 segments DEC3 sur la valeur 4....).

    Code:
    Library ieee;
    Use ieee.std_logic_1164.all;
    Use ieee.numeric_std.all;
    Use ieee.std_logic_unsigned.all;
    Use ieee.std_logic_arith.all;
    -- -------------------------------------------
    
    -- Initialisation des I/O --------------------
    
    entity Vhdl1 is port(
    clock_50 	: in std_logic;
    SW      		: in  std_logic_vector(9 downto 0);
    HEX0_D   	: out std_logic_vector(6 downto 0);
    HEX1_D   	: out std_logic_vector(6 downto 0);
    HEX2_D   	: out std_logic_vector(6 downto 0);
    HEX3_D 		: out std_logic_vector(6 downto 0);
    LEDG   		: inout std_logic_vector(9 downto 0);
    BUTTON 		: in std_logic_vector(2 downto 0)
    );
    
    end Vhdl1;
    -----------------------------------------------
    architecture SEGMENT of Vhdl1 is
    	signal DEC0, DEC1, DEC2, DEC3 : integer:=0;
    
    begin
    
    
    	RESET : process(button(0))	
    	variable compteur : integer:=0;
    	begin
    	
    	DEC0 <= 4; -- CETTE VALEUR EST MISE A JOUR, cependant je n'ai pas encore appuyé sur button(0)
    	
    		if(rising_edge(button(0))) then
    				if(button(0) ='0') then
    					DEC2 <= 1;
    				else
    					DEC2 <= 2;
    				end if;
    		end if;	
    		
    		if(falling_edge(button(0))) then -- quand on a pressÈ (logique inverse)
    			if(button(0)='1') then
    				DEC3 <= 1;
    			else
    				DEC3 <= 4;
    			end if;
    		end if;
    	end process;
    	
    
    	
    
    	-- gestion des 7 segments	
    	HEX0_D <= "1000000" when DEC0 = 0
    	else "1111001" when DEC0 = 1
    	else "0100100" when DEC0 = 2
    	else "0110000" when DEC0 = 3
    	else "0011001" when DEC0 = 4
    	else "0010010" when DEC0 = 5
    	else "0000010" when DEC0 = 6
    	else "1111000" when DEC0 = 7
    	else "0000000" when DEC0 = 8
    	else "0010000" when DEC0 = 9
    	else "-------";
    	
    		HEX1_D <= "1000000" when DEC1 = 0
    	else "1111001" when DEC1 = 1
    	else "0100100" when DEC1 = 2
    	else "0110000" when DEC1 = 3
    	else "0011001" when DEC1 = 4
    	else "0010010" when DEC1 = 5
    	else "0000010" when DEC1 = 6
    	else "1111000" when DEC1 = 7
    	else "0000000" when DEC1 = 8
    	else "0010000" when DEC1 = 9
    	else "-------";
    	
    	
    		HEX2_D <= "1000000" when DEC2 = 0
    	else "1111001" when DEC2 = 1
    	else "0100100" when DEC2 = 2
    	else "0110000" when DEC2 = 3
    	else "0011001" when DEC2 = 4
    	else "0010010" when DEC2 = 5
    	else "0000010" when DEC2 = 6
    	else "1111000" when DEC2 = 7
    	else "0000000" when DEC2 = 8
    	else "0010000" when DEC2 = 9
    	else "-------";
    	
    	
    		HEX3_D <= "1000000" when DEC3 = 0
    	else "1111001" when DEC3 = 1
    	else "0100100" when DEC3 = 2
    	else "0110000" when DEC3 = 3
    	else "0011001" when DEC3 = 4
    	else "0010010" when DEC3 = 5
    	else "0000010" when DEC3 = 6
    	else "1111000" when DEC3 = 7
    	else "0000000" when DEC3 = 8
    	else "0010000" when DEC3 = 9
    	else "-------";
    	
    	
    end SEGMENT;
    Comme vous pouvez le voir, il me met DEC3 à 4, puis sur le falling edge, rising edge, il fait bien ce que je lui demande.

    Pourquoi, le process n'attend il pas que j'appuie, mais teste une fois le process au démarrage ?

    Un très grand merci

    -----

  2. #2
    albanxiii
    Modérateur

    Re : [VHDL - FPGA] Les process (pourquoi démarrent ils directement ? )

    Bonjour,

    Comme votre instruction DEC0 <= 4 n'est déclenché ni par un front montant, ni par un front descendant, elle est exécutée de façon inconditionnelle.
    Déplacez cette instruction après un if rising_edge ou falling_edge et vous verrez la différence (je pense/espère qu'il ne faut pas 3 heures pour la synthèse de votre projet, donc, c'est facile à tester ).

    @+
    Not only is it not right, it's not even wrong!

  3. #3
    albanxiii
    Modérateur

    Re : [VHDL - FPGA] Les process (pourquoi démarrent ils directement ? )

    Re,

    Autre solution, rajouter un

    Code:
    if (reset='1') then 
      DEC0 <= 'la_valeur_que_vous_voulez'
    end if;
    Et faites le reset avant l'utilisation.

    @+
    Not only is it not right, it's not even wrong!

  4. #4
    jiherve

    Re : [VHDL - FPGA] Les process (pourquoi démarrent ils directement ? )

    Bonsoir,
    Ce n'est pas tout à fait exact, en fait la sensibilité affecte tout le process, il n'y a normalement affectation des que l’état de button(0) change d’état ( il existe 9 etats en VHDL), en simulation il n'y aurait pas d'affectation si l’état par défaut et l’état au démarrage sont identiques (il faudrait déclarer BUTTON : in std_logic_vector(2 downto 0) := (others => '0') si l’état au démarrage est bien '0') par contre la synthèse de Quartus se contrefout de la liste de sensibilité si la fonction implémentée est purement combinatoire, ce qui est le cas pour DEC0.
    JR
    l'électronique c'est pas du vaudou!

  5. A voir en vidéo sur Futura
  6. #5
    invitef75f7d4f

    Re : [VHDL - FPGA] Les process (pourquoi démarrent ils directement ? )

    Bonsoir,
    Merci pour votre explication. Le code réalisé était pour que je comprenne le fonctionnement du process. C'est quand même étonnant que le process soit quand meme lancé MEME si la sensibilité n'est pas stimulée ... Malgré tout, c'était pour ma curiosité personnelle, pour comprendre les subtilités du langage, car j'ai quand même su réaliser mon projet.


    par ailleurs, j'ai ajouté en dessous (pour mes tests)
    Code:
    if(button(0)='0') then
          DEC0 <=4:
    end if;
    Au premier démarrage, DEC0 est modifié ! À croire qu'il est nécessaire qu'on travaille en conditionnel avec falling_edge(button(0)) (ou rising_edge dans d'autres cas) pour éviter qu'il exécute le process au lancement de la carte ...

    Au démarrage de la carte, y a t'il une sensibilité et fait que le process démarre ? et toutes les parties non conditionnées s'exécutent ?


    Merci à vous !

  7. #6
    albanxiii
    Modérateur

    Re : [VHDL - FPGA] Les process (pourquoi démarrent ils directement ? )

    Bonjour,

    Citation Envoyé par valentin8 Voir le message
    C'est quand même étonnant que le process soit quand meme lancé MEME si la sensibilité n'est pas stimulée ...
    Sur votre carte électronique, les signaux peuvent bouger lors de la mise sous tension où à la fin de la programmation du FPGA. En fait, il ne faut jamais compter sur une valeur initiale de quelque signal que ce soit. C'est le rôle du "reset" implémenté dans votre code VHDL d'assurer que l'état interne de cotre composant est bien celui voulu.

    @+
    Not only is it not right, it's not even wrong!

  8. #7
    invitef75f7d4f

    Re : [VHDL - FPGA] Les process (pourquoi démarrent ils directement ? )

    Je vous remercie pour ces éclaircissements! Je pensais qu'à la fin de la programmation FPGA, il commencait à "lire" les états. Mais ce n'est pas le cas.

    Nous avons réalisé un jeu comme Mastermind en y expliquant l'aspect séquentiel et combinatoire.

    Bien à vous.

Discussions similaires

  1. VHDL - Problème dans un process
    Par invite5173c6d6 dans le forum Électronique
    Réponses: 0
    Dernier message: 16/03/2012, 18h52
  2. Fpga-vhdl
    Par invite577ad53a dans le forum Électronique
    Réponses: 2
    Dernier message: 06/12/2011, 01h43
  3. Casse Brique - VHDL FPGA
    Par invite46c7786e dans le forum Électronique
    Réponses: 3
    Dernier message: 24/05/2011, 14h26
  4. Erreur code VHDL (process ?)
    Par invitebe80985c dans le forum Électronique
    Réponses: 3
    Dernier message: 28/01/2011, 23h29
  5. Vhdl & Fpga
    Par ak47only dans le forum Électronique
    Réponses: 0
    Dernier message: 16/12/2007, 16h43
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...