Répondre à la discussion
Affichage des résultats 1 à 14 sur 14

probleme VDHL



  1. #1
    massepower

    probleme VDHL

    Bonjour,

    J'ai une erreur sur un programme en VDHL, et je me demandais si qq'un pouvait m'adier ?!

    voici mon programme :

    LIBRARY IEEE;
    USE IEEE.STD_LOGIC_1164.ALL;
    USE IEEE.STD_LOGIC_ARITH.ALL;
    USE IEEE.STD_LOGIC_UNSIGNED.ALL;

    ENTITY digits IS
    PORT( valeur : IN numeric_std( 8 DOWNTO 0 ); -- valeur compris entre 0 et 200 sur 8 bits.
    digit1, digit2, digit3 : OUT STD_LOGIC_VECTOR( 4 DOWNTO 0 ) ); -- valeur compris entre 0 et 9 sur 4 bits.
    END digits;
    ARCHITECTURE affect_sel OF digits IS
    BEGIN
    -- affichage de valeur (max 200) séparé sur les 3 digits.
    digit1 <= valeur / 10; -- reste de la division par 10 pour obtenir l'unité de valeur.
    digit2 <= (valeur mod 100 )/10; -- division par 10 du reste de la division par 100 pour obtenir les dizaines.
    digit3 <= valeur mod 100; -- division par 100 pour obtenir les centaines.
    END affect_sel;


    et voici l'erreur que je recois en compilant :

    error (10482) : VHDL error at digits.vhd(7) : object "numeric_std" is used but not declared


    voila.

    est ce que qq'un aurait une solution car moi tout ce que j'ai essayé ne marche pas.

    merci d'avance pour vos solutions.

    -----


  2. Publicité
  3. #2
    peter pan666

    Re : probleme VDHL

    Salut

    C'est quoi du "numérique_std" comme type?Pourquoi ne pas utiliser du "std_logic_vector"?

    PS: C'est du VHDL et pas VDHL..

  4. #3
    massepower

    Re : probleme VDHL

    je n'utilise pas STD_LOGIC_VECTOR parce que les opération "/" et "mod" ne amrche pas sur les vecteurs de bits. et j'ai regarde sur le net pour avoir un type en valeur numérique et c'est ce que j'ai trouvé. apres je ne suis pas sur de ca.

  5. #4
    jiherve

    Re : probleme VDHL

    Bonsoir,
    numeric_std n'est pas un type VHDL par contre IEEE.numeric_std est une librairie de bonne facture.
    / et mod ne fonctionnent que sur des integer donc avec une entrée toto en std_logic_vector on peu écrire:
    titi <= (to_integer(unsigned(toto)) mod xx;
    ou tata <= (to_integer(unsigned(toto))/yy;
    titi et tata sont des integer
    si on veut du std_logic_vector en sortie on écrit:
    en déclaration de signal
    signal tutu : std_logic_vector(zz-1 downto 0);
    apres le begin
    tutu <= std_logic_vector(to_unsigned(t iti,zz));
    les librairies utiles sont déclarées par :
    use IEEE.std_logic_1164.all;
    use IEEE.numeric_std.all;
    pas besoin d'autre chose.
    JR
    l'électronique c'est pas du vaudou!

  6. #5
    massepower

    Re : probleme VDHL

    merci beaucoup pour ta reponse.

    j'ai fais ce que tu m'as dit et j'ai encore une erreur que je ne comprends pas :

    Error (10621) : VHDL Use Clause error at digit_valeur.vhd(16) :more than one Use Clause imports a declaration of simple name "unsigned" -- none of the declarations are directly visible.


    Sinon j'ai changé le programme :

    LIBRARY IEEE;
    USE IEEE.STD_LOGIC_1164.ALL;
    USE IEEE.STD_LOGIC_ARITH.ALL;
    USE IEEE.STD_LOGIC_UNSIGNED.ALL;
    use IEEE.numeric_std.all;

    ENTITY digit_valeur IS
    PORT( digit1, digit2, digit3 : IN STD_LOGIC_VECTOR( 4 DOWNTO 0 ); -- valeur compris entre 0 et 9 sur 4 bits.
    valeur : OUT STD_LOGIC_VECTOR( 7 DOWNTO 0 ) ); -- valeur compris entre 0 et 256 sur 8 bits.
    END digit_valeur;
    ARCHITECTURE affect_sel OF digit_valeur IS
    signal tutu : std_logic_vector(7 downto 0);

    BEGIN
    -- affichage de valeur (max 200) séparé sur les 3 digits.
    tutu <= (to_integer(unsigned(digit3))) * 100 + (to_integer(unsigned(digit2))) * 10 + digit1;
    valeur <= std_logic_vector(to_unsigned(t utu,8));
    END affect_sel;


    merci d'avance pour ta reponse.

  7. A voir en vidéo sur Futura
  8. #6
    jiherve

    Re : probleme VDHL

    Bonsoir,
    il me semble avoir écrit :
    les librairies utiles sont déclarées par :
    use IEEE.std_logic_1164.all;
    use IEEE.numeric_std.all;
    pas besoin d'autre chose.
    Donc tu vires les deux autres librairies:
    USE IEEE.STD_LOGIC_ARITH.ALL;
    USE IEEE.STD_LOGIC_UNSIGNED.ALL;
    Là ce que tu expérimentes c'est l'overloading de package, un même objet(type, opérateur) qui est déclaré sous plusieurs formes.
    JR
    l'électronique c'est pas du vaudou!

  9. Publicité
  10. #7
    massepower

    Re : probleme VDHL

    Quand je ne mets que ces 2 bibliotheques, il me dit que l'opération ""+"" n'est pas définis.

  11. #8
    jiherve

    Re : probleme VDHL

    Bonsoir,
    ben oui dans ton affectation digit1 reste un std_logic_vector !
    JR
    l'électronique c'est pas du vaudou!

  12. #9
    massepower

    Re : probleme VDHL

    Merci, effectivement je n'avais pas.
    J'ai corrigé cette erreur mais j'ai toujours la meme erreur sur l'opération ""+"".

    voici la derniere version de mon programme :


    LIBRARY IEEE;
    use IEEE.std_logic_1164.all;
    use IEEE.numeric_std.all;

    ENTITY digit_valeur IS
    PORT( digit1, digit2, digit3 : IN STD_LOGIC_VECTOR( 3 DOWNTO 0 ); -- valeur compris entre 0 et 9 sur 4 bits.
    valeur : OUT STD_LOGIC_VECTOR( 7 DOWNTO 0 ) ); -- valeur compris entre 0 et 256 sur 8 bits.
    END digit_valeur;
    ARCHITECTURE affect_sel OF digit_valeur IS
    signal tutu : std_logic_vector(7 downto 0);

    BEGIN
    -- affichage de valeur (max 200) séparé sur les 3 digits.
    tutu <= (to_integer(unsigned(digit3))) * 100 + (to_integer(unsigned(digit2))) * 10 + (to_integer(unsigned(digit1))) ;
    valeur <= std_logic_vector(to_unsigned(t utu,8));
    END affect_sel;



    Erreur : can't determine definition of opération ""+"".

    Pouvez vous encore m'aider s'il vous plait

    Merci d'avance pour votre réponse.

  13. #10
    jiherve

    Re : probleme VDHL

    Bonsoir,
    ton signal tutu est déclaré comme std_logic_vector cela devrait être un integer.
    essayes encore.
    JR
    l'électronique c'est pas du vaudou!

  14. #11
    stefjm

    Re : probleme VDHL

    Bonsoir,
    Juste en passant, pas trop le temps en ce moment...

    Quand on galère sur les types, un bon truc, c'est de préfixer correctement les variables en fonction du type et d'éviter les tata, toto, titi.

    exemple :

    stv4Digit1
    intTutu
    stv8Valeur

    C'est un peu lourd, mais ça évite bien des soucis.

    Cordialement.
    Moi ignare et moi pas comprendre langage avec «hasard», «réalité» et «existe».

  15. #12
    jiherve

    Re : probleme VDHL

    Bonjour,
    c'est moi qui ai baptisé les variables/signaux et je suis assez feignant sur ce forum.
    En fait la solution radicale c'est d'utiliser que des std_logic_vector le plus souvent possible car avec les integer si on oublie le range on récupère de chouettes 32bits qui écroulent les perf.
    Inconvénient du préfixage cher au softeux c'est de vite créer du code difficile à lire car il faut lire avec attention le suffixe pour reconnaitre la variable, c'est peut être une question d'habitude mais j'ai commencé à une époque ou une variable (en assembleur) ne comportait que 6 caractères au max.
    En VHDL certains vont encore plus loin en préfixant s_xx les signaux et v_yy les variables.
    JR
    l'électronique c'est pas du vaudou!

  16. Publicité
  17. #13
    stefjm

    Re : probleme VDHL

    Bonjour,

    Pour la lisibilité du code, c'est vraiment une question d'habitude : J'ai beaucoup de mal à suivre un programme dont les variables-signaux ne sont pas préfixés. De plus, le nom en clair des variables allège le commentaire.
    (Il y a exactement les mêmes réticences en automate programmable où on trouve encore des %Mw13504 alors que les compilateurs modernes sont capables de localiser les variables tout seul et permettent des noms de variables de 63 (voir 127 ou 255) caractères.)
    Pour les débutants, cela me parait vital. Après quand on est habitué, c'est un peu comme la ceinture de sécurité.

    Pour le coup du range, c'est un classique moderne : En informatique, on manipule des Mo, Go et en électronique, on est des ringards qui comptons les bits pour économiser les registres.

    Cordialement.
    Moi ignare et moi pas comprendre langage avec «hasard», «réalité» et «existe».

  18. #14
    jiherve

    Re : probleme VDHL

    again
    Citation Envoyé par stefjm Voir le message
    Bonjour,

    pour le coup du range, c'est un classique moderne : En informatique, on manipule des Mo, Go et en électronique, on est des ringards qui comptons les bits pour économiser les registres.

    Cordialement.
    En clair on se fait c...r pour offrir une plateforme hard capable de subvenir à leur délires.
    j'en profite pour réitérer mon aphorisme préféré : le soft c'est comme un gaz cela occupe toute la place disponible.
    JR
    l'électronique c'est pas du vaudou!

Sur le même thème :

Discussions similaires

  1. Réponses: 11
    Dernier message: 26/05/2011, 12h27
  2. Problème Equa diff sur problème physique
    Par Baksgui dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 03/12/2010, 20h45
  3. Un petit problème qui me pause problème lol
    Par Leonpolou dans le forum Mathématiques du supérieur
    Réponses: 13
    Dernier message: 31/03/2009, 15h28
  4. problème avec un lecteur mp4(le problème vient de l'ordinateur)
    Par mat_the_bad_boy dans le forum Matériel - Hardware
    Réponses: 3
    Dernier message: 29/10/2007, 16h53