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 :

Test de parité d'un entier


Sujet :

VHDL

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    Novembre 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 122
    Points : 46
    Points
    46
    Par défaut Test de parité d'un entier
    Bonjour,
    j'aimerais simplement donner la valeur d'une sortie en fonction de la parité de l'indice d'une boucle. Un exemple :
    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
    library ieee;
    use     ieee.std_logic_1164.all;
    use 	ieee.std_logic_arith.all;
    use     ieee.std_logic_signed.all;
     
    entity pair is
    	port(
    		x :		out std_logic_vector(7 downto 0));
    end pair;
     
    architecture rtl of pair is
    begin
    	parité : for k in 0 to 7 loop
    		x(k) <= '0' when (k mod 2=0) else
    		x(k) <= '1';
    	end loop;
    end rtl;
    Mais Modelsim ne compile pas ce code :
    ** Error: D:/work/FFT/cellule/src/pair.vhd(13): Illegal concurrent statement.
    ** Error: D:/work/FFT/cellule/src/pair.vhd(15): Type error resolving infix expression "<=" as type ieee.std_logic_1164.STD_LOGIC.
    ** Error: D:/work/FFT/cellule/src/pair.vhd(15): Cannot read output "x".
    J'ai bien peur de mélanger instructions concurrentes et séquentielles.
    Quelqu'un peut m'aider ?
    Merci.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 61
    Points : 121
    Points
    121
    Par défaut
    Bonsoir,

    Réponse en plusieurs points :
    1. l'opérateur "mod" n'est vraiment pas recommandé en synthèse. Il est vrai que le modulo d'une puissance de 2 est normalement correctement géré par les outils de synthèse, mais ça reste bof... Bon, là coup de chance, c'est sur une constante, donc absolument aucun soucis
    2. de même, le type "integer" (et associés : natural, positive) est lui aussi à éviter cette fois pour la raison suivante : un integer est défini sur 32bits (de -2^31 à 2^31 - 1) et correspond donc à 32 registres. La seule parade consiste à définir une range (style 'signal MyInt : integer range 0 to 7') mais se pose alors un autre problème : lorsque l'on souhaite faire un compteur qui reboucle automatiquement de 7 à 0, il faut explicitement faire :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      if MyInt=7 then MyInt <= 0;
      else            MyInt <= MyInt + 1; end if;
      C'est beaucoup plus simple et judicieux de définir un std_logic_vector(2 downto 0) et l'on fait toujours "+1" : le rebouclage de 7 à 0 est direct
    3. puisque l'on est dans le monde des std_logic_vector, ce qui de toute façon correspond physiquement à ce qui sera implémenté, la parité d'un objet se teste tout simplement en regardant le bit de poids faible du vecteur
    4. On a donc les deux possibilités :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      process
      begin
      for k in 0 to 7 loop
          if k mod 2=0 then x(k) <= '0';
          else              x(k) <= '1'; end if;   
      end loop;
       
      MyLabel : for k in 0 to 7 generate
          x(k) <= '0' when (k mod 2=0) else
                  '1';
      end generate MyLabel ;


    Cdlt

Discussions similaires

  1. [Débutant] Test si un nombre est entier ou réel
    Par DaFt27 dans le forum C#
    Réponses: 5
    Dernier message: 26/11/2014, 16h58
  2. Test sur un nombre entier ou pas
    Par coco38 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 16/04/2007, 11h14
  3. pl/sql test si entier ou flottant
    Par moulery dans le forum PL/SQL
    Réponses: 5
    Dernier message: 09/03/2007, 10h51
  4. pb test entier float
    Par toultemps dans le forum C
    Réponses: 12
    Dernier message: 08/03/2007, 16h32
  5. test comparatif de deux entiers
    Par sisiso dans le forum C
    Réponses: 12
    Dernier message: 26/01/2007, 22h37

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