Problème en VHDL
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Problème en VHDL



  1. #1
    inviteded2c5bd

    Problème en VHDL


    ------

    Bonjour!
    Je viens tout juste de débuter en VHDL et j'ai un petit problème...
    Je dois réaliser un ALU et un Encoder qui est décrit dans la situation que j'ai mis en pièces jointes.
    J'ai réussi à coder l'ALU et l'encoder. Voici leur code:

    Code:
    ALU:
    
     library IEEE;
    use IEEE.std_logic_1164.all;
    use ieee.numeric_std.all;
    
    entity ALU2 is
            port (A: in unsigned (3 downto 0);
            B: in unsigned  (3 downto 0);
            S: in unsigned  (1 downto 0);
            Op_valid: in unsigned (0 downto 0);
            Resultat: out unsigned  (4 downto 0);         Erreur: out unsigned  (1 downto 0));
    end ALU2;
    
    architecture behav of ALU1 is
    begin
    process(A,B, S, Op_valid)
            variable res : integer;
            variable AI: integer;
            variable BI: integer;
                     begin
                    AI:= TO_INTEGER(A);
                    BI:= TO_INTEGER(B);
    if Op_valid="1" then
            if S="00" then         Res := AI+BI;
            elsif S="01" then
                            Res := AI * BI;
                            if A*B >= "11111" then
                                    Erreur <= "01";
                            else
                                    Erreur <= "00";
                            end if;
    
            elsif S="10" then
                            Res := (AI) - (BI);
                                    if (BI >= AI) then
                                    Erreur <= "01";
                            else                                 Erreur <= "00";
                                    end if;
    
            elsif S="11" then
                                     if (AI >= BI) then
                                    Resultat<="00001";
                            else
                                    Resultat <="00000";
                                    end if;
    
            else
            Resultat <= "00000";
    
            end if;         end if;                 Resultat<= to_unsigned(Res,5);
    end process;
    
    
    end architecture;
    
    
    
    et voici le code pour mon encoder:
    
    Encoder:
    
    
    library IEEE;
    use IEEE.std_logic_1164.all;
    
    entity encoder is
            port (J: in std_logic_vector (3 downto 0);
            S: out std_logic_vector (1 downto 0);         Op_valid: out std_logic);
    end encoder; architecture behav of encoder is
    begin         with J select
            S<="00" when "0001",
            "01" when "0010",
            "10" when "0100",
            "11" when "1000",
            "00" when others;
    
            with J select
            Op_valid<='1' when "0001",
            '1' when "0010",
            '1' when "0100",
            '1' when "1000",
            '0' when others;
    
    
            end architecture;

    Cependant lorsque je suis rendu à l'étape où je dois réaliser le schéma que l'on voit dans la pièce jointe,
    ça ne marche pas et je ne comprends pas pourquoi...
    Est-ce qu'on pourrait m'aider...

    -----
    Images attachées Images attachées
    Dernière modification par gienas ; 06/11/2011 à 17h29. Motif: Ajouté les balises code obligatoires pour les programmes

  2. #2
    jiherve

    Re : Problème en VHDL

    Bonjour,
    il y a déjà un problème de fond tu n'écris pas de façon lisible (comme un petit cochon en fait ), il faut indenter car sauf si tu dispose d'un éditeur malin (notepad ++) tes IF imbriqués sont imbitables!
    j'ai donc fait le boulot à ta place pour le premier bout de code
    Code:
    architecture behav of ALU1 is
    begin
    process(A,B, S, Op_valid)
    variable res : integer;
    variable AI: integer;
    variable BI: integer;
    begin
      AI:= TO_INTEGER(A);
      BI:= TO_INTEGER(B);
      if Op_valid="1" then
        if S="00" then 
          Res := AI+BI;
        elsif S="01" then
          Res := AI * BI;
          if A*B >= "11111" then -- Donc tu multiplies sans hésiter des unsigned
            Erreur <= "01";
          else
            Erreur <= "00";
          end if;
        elsif S="10" then
          Res := (AI) - (BI);
          if (BI >= AI) then
            Erreur <= "01";
          else  
            Erreur <= "00";
          end if;
        elsif S="11" then
          if (AI >= BI) then
            Resultat<="00001";-- oulah de l'affectation concurrente avec celle situé en dehors du IF, c'est permis mais faut bien maitriser 
          else
            Resultat <="00000";
          end if;
        else
          Resultat <= "00000";
        end if; 
      end if; 
      Resultat<= to_unsigned(Res,5); -- La que se passe t il lorsque res est non initialisé ?
    end process;
    end architecture;
    Bon corriges d'abord çà on en recause ensuite.
    notepad ++ chez Sourceforge
    http://sourceforge.net/projects/notepad-plus/
    JR
    l'électronique c'est pas du vaudou!

  3. #3
    inviteded2c5bd

    Re : Problème en VHDL

    En fait je ne comprends pas vraiment ce que tu veux que je corrige dans mon code (à part le fait que c'est écrit comme un petit cochon )

  4. #4
    jiherve

    Re : Problème en VHDL

    Re
    Bon pour l’écriture manifestement la balise code était en panne la première fois que j'ai lu ton message il n'y avait aucune indentation, maintenant il y en a trop à mon gout, passons.
    revenons aux bizarreries :
    if A*B >= "11111"
    çà cela ne te gêne pas au niveau de ton vécu profond ?
    A et B ne seraient il pas des unsigned (3 downto 0) ?
    Les assignations sur Resultat dans le corps du IF et en dehors non plus ?
    comme je l'ai écrit c'est légal mais expliques moi la valeur de Resultat lorsque S = "11"?
    JR
    l'électronique c'est pas du vaudou!

  5. A voir en vidéo sur Futura

Discussions similaires

  1. VHDL : probleme d'architecture...
    Par invitefbe9ec51 dans le forum Électronique
    Réponses: 8
    Dernier message: 06/11/2011, 14h30
  2. probleme en vhdl
    Par invitefa544961 dans le forum Électronique
    Réponses: 3
    Dernier message: 04/05/2011, 19h36
  3. Problème avec package du VHDL
    Par invite25a451cd dans le forum Électronique
    Réponses: 2
    Dernier message: 27/11/2010, 21h29
  4. Problème en VHDL
    Par invitee188ddfe dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 31/03/2009, 10h17
  5. Point flottant en VHDL et vhdl-200x
    Par invite6eee6b27 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 02/09/2008, 20h47
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...