VHDL - probleme sur compteur

Lesquels choisir ? Comment les utiliser ?

VHDL - probleme sur compteur

Postby philouxy » Fri Aug 26, 2016 8:29 am

Hello Cheres, Chers Elektoriennes/iens ,

Je suis entrain de réaliser un petit projet évolutif en VHDL avec comme outil de développement la WEB edition de Quartus II - version 9.1.

Actuellement, je suis entrain de me prendre la tête sur la création de compteur et un signal d'horloge - le compteur numérique fonctionne, mais c'est la génération du signal logique qui ne marche pas - je me trouve à la simulation avec deux glitches, si je modifie ma constant max du compteur, je peux retrouver avec plusieurs glitch sur mon 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 et toujours meme résultats.

Voir image en annexe de ce message.

Si vous êtes intéressé à suivre/résoudre le problème, aller voir du coté du talk pour la visualisation du problème et le suivi du projet (https://fixme.ch/wiki/Talk:Langage_VHDL)

Pour le code complet, aller voir sur le github du projet : https://github.com/philouxy/Langage-VHD ... _2_Juggler

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

Amitié du cht'y Philou
philouxy
 
Posts: 4
Joined: Fri Feb 06, 2015 7:56 pm

Re: VHDL - probleme sur compteur

Postby philouxy » Fri Sep 09, 2016 12:53 pm

hello tous le monde,

En ayant chercher sur plusieurs sur d'autres forum et recherche dans les livres, la solution a été de synchroniser aussi le signal de sortie (clock de 2Hz) avec la clock de base du système, car apparemment avec la simulation en mode timming montre les décalage en les différentes portes qui font partie de la synthéstisation.

voici ce que donner le nouveau code VHDL :
Code: Select all
   --------------
   -- 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 aussi dépanner des personnes qui se sont trouver les mêmes difficultés que me ;-)

Amitié - Philou
philouxy
 
Posts: 4
Joined: Fri Feb 06, 2015 7:56 pm


Return to Microcontrôleurs & microprocesseurs

Who is online

Users browsing this forum: No registered users and 1 guest