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 :

error: * can not have such operands in this context?


Sujet :

VHDL

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2011
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 6
    Points : 6
    Points
    6
    Par défaut error: * can not have such operands in this context?
    Bonjour,

    J'essaye de multiplier un std_logic_vector par un nombre négatif :
    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
    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
    use IEEE.numeric_std.all;
    use ieee.std_logic_arith.all;
    use ieee.std_logic_unsigned.all;
     
    entity mul_main is
        Port ( a :in  STD_LOGIC_VECTOR( 0 to 7);
    			  clk: in  STD_LOGIC;
               c :out STD_LOGIC_VECTOR(0 to 15)
    			  );
    end mul_main;
     
    architecture Behavioral of mul_main is
     
    begin
    p: process(clk)
    begin
    if (clk' event and clk='1') then
    c <= (-2)* a;
    end if;
    end process;
     
    end Behavioral;
    Mais j'obtiens cette erreur : * can not have such operands in this contex

    Pouvez-vous m'aider à régler ce problème ?
    Merci d'avance.

  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
    Bonjour,

    Plusieurs conseils (pas forcément par ordre d'importance) :
    • les bibliothèques std_logic_arith & std_logic_unsigned, malgré le mot IEEE devant, ne sont pas vraiment IEEE . À éviter donc
    • ces 2 bibliothèques sont incompatibles avec numeric_std, et vice-versa. C'est soit std_logic_arith & unsigned, soit numeric_std, mais pas les 2 en même temps
    • il vaut mieux orienter dans le sens descendant les vecteurs (donc 7 downto 0 et 15 downto 0). Même dans les cas où le vecteur est plus cohérent dans le sens ascendant, cela reste dangereux .
    • vous souhaitez faire (-2) * a, donc a*2, puis un signe "-". Une multiplication par 2 est simplement un décalage à gauche de 1 bit (si vect=xyz, alors vect*2 = xyz0) .
    • le "-" (changement de signe) : un peu bizarre avec la std_logic_unsigned qui "force" les std_logic_vecteur à être considérés comme des "unsigned". Ici la numeric_std est 1000 fois mieux. GROS WARNING : surtout pas la std_logic_signed !!!! Trop de problèmes avec .
    • pour a => (-a) : vecteur => not(vecteur)+1



    Cdlt

Discussions similaires

  1. can not have such operands in this context.
    Par FlowerDxx dans le forum VHDL
    Réponses: 3
    Dernier message: 30/12/2014, 13h53
  2. You do not have permission to access this document.
    Par loupanbagna dans le forum Apache
    Réponses: 3
    Dernier message: 13/12/2011, 14h17
  3. User does not have permission to perform this action
    Par Im.Cresus dans le forum ASP.NET
    Réponses: 2
    Dernier message: 24/11/2010, 15h31
  4. Réponses: 3
    Dernier message: 23/07/2009, 08h59
  5. Réponses: 2
    Dernier message: 24/04/2008, 15h31

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