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

  1. #1
    Candidat au Club
    Compteur -> compilation OK / Simulation NOT OK
    Bonsoir Cheres, Chers Developpeurs de VHDL,

    Je suis entrain de réaliser un petit projet évolutif en VHDL (développement sur la WEB edition de Quartus II - version 9.1)

    Actuellement, je suis entrain de me prendre la tete sur la création de compteur et un signal d'horloge.
    Je n'ai pas de soucis à la compilation de mon code, mais à la simulation de celui-ci ou je me retrouve avec deux glitches qui ne devraient pas s'y trouver, j'ai écrit deux manière différentes les compteurs, les deux fois j'ai les glitches qui apparaissent au même endroit.

    Si vous êtes intéressé au problème, aller voir du coté du talk pour la visuaisation du problème (https://fixme.ch/wiki/Talk:Langage_VHDL)
    Pour le code complet, aller voir sur le github du projet : https://github.com/philouxy/Langage-...ject_2_Juggler

    Mes neuronnes sont morts alors si vous avez des idées, je suis preneurs

    Amitié du cht'y Philou


  2. #2
    Membre à l'essai
    Bonjour,

    Je suppose que tu fais une simulation post-implementation?

    Il faut prendre en compte que les bits de compteur_num_p ne changent pas forcement tous a la même vitesse dans la réalité.

    Je te conseille d'essayer d'assigner la valeur de clk_2Hz dans un process, de façon synchrone, au front de clock suivant.

    Florent
    ------------------------------------------------------------------
    www.dev-flow.com
    ------------------------------------------------------------------

  3. #3
    Candidat au Club
    Sorry pour cette réponse tardive,

    Premièrement merci à Florent de m'avoir lu et répondu

    Le compteur est mode synchrone mais la génération de la clock de 2Hz (exemple) se trouve en mode asynchrone et combinatoire... donc comme on me l'a expliqué et Florent le mentionne aussi le passage d'une valeur à une autre peuvent venir perturber ce signal du à ce phénomène d'effet de compilation / sythétisation ou les portes ne réagissent pas de la même manière et cela peut apporter des glitches.

    Donc pour palier à ce phénomène, il faut aussi synchroniser ce signal sur la clock de base.

    voici mon nouveau code :
    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
     
    	--------------
    	-- compteur -- 
    	--------------	
    	CMPT_ETAT_FUTUR_2HZ : process(compteur_num_p)
    		begin 
    			if (compteur_num_p >= VAL_MAX_COMPTEUR_2HZ) then
    				compteur_num_f <= (others => '0');
    			else 
    				compteur_num_f <= compteur_num_p + 1;  
    			end if; 
    	end process; 
     
    	CMPT_ETAT_PRESENT_2HZ : process(CLK_1_8MHZ)
    		begin 
    			if ((CLK_1_8MHZ'event) and (CLK_1_8MHZ = '1')) then 
    				compteur_num_p <= compteur_num_f;
    			end if; 
    	end process; 
     
    --	-----------------------------------------
    --	-- Horloge 2Hz rapport cyclique de 50% -- 
    --	-----------------------------------------
    	CLK_2HZ_50P : process (compteur_num_p) 
    		begin 
    			if rising_edge (CLK_1_8MHZ) then 
    				if (compteur_num_f <= VAL_MAX_CMPT_DIV_2) then
    					clk_2Hz <= '0';
    				else 
    					clk_2Hz <= '1'; 
    				end if;
    			end if; 
    	end process; 
     
    	clk_2Hz_SIM <= clk_2Hz;


    J'espère que cela pourra servir à d'autre.

    Amitié - Philippe