Registre a decalage, avec bascule D(VHDL)
Répondre à la discussion
Affichage des résultats 1 à 16 sur 16

Registre a decalage, avec bascule D(VHDL)



  1. #1
    deyni

    Registre a decalage, avec bascule D(VHDL)


    ------

    Bonjour.

    Je dois creer, un ragistre à décalage(4bits), avec des bascules D, en VHDL.
    J'ai reussi, à faire, une bascule D. Mais pas le décaleur.

    Ce que j'ai fais:

    Code:
    LIBRARY ieee;
    USE......
    USE......
    
    ENTITY basculeD is
    port(d,hor,raz,rau : in std_logic;
            q,qb: out std_logic);
    END ENTITY bascule D
    
    Architecture comport of basculeD is
    begin
    stock:process(d,hor,raz,rau) is 
     begin
      if(raz='0') then
      q<='0'
      qb<='1';
     elseif(rau='0') then
     q<='1';
     qb<='0';
    elseif(hor'event and hor='0')then
     q<=d
     qb<=not d;
    end if
    end process stock;
    End architecturre
    SI quelque pouvait m'aider.
    Merci.

    -----
    Deynid'oiseaux partout !! :rire:

  2. #2
    pazcal

    Re : Registre a decalage, avec bascule D(VHDL)

    Pour ton registre à décalage, il suffit de relier les sortie S(i) sur les entrées E(i+1), toutes les horloges étant synchrones.
    Ca ne devrait pas être dur à synthétiser en VHDL
    A plus

  3. #3
    invite83607557

    Re : Registre a decalage, avec bascule D(VHDL)

    Bonjour,
    Il faudrait un vecteur (std_logic_vector) pour les registres q et qb. sinon, il n'y a rien à décaler. Il faut que le registre soit un signal interne. Sinon, il n'est pas disponible en lecture donc ne pourra pas être rebouclé sur l'entrée du suivant.
    Aussi, il me semble qu'il manque un signal d'entrée à ta fonction. Il faudrait ajouter une commande de chargement des registres puis, lorsqu'aucune des entrées de contrôle n'est active, exécuter le décalage.

    Enfin, mais c'est plus pour une question d'optimisation, si tu déclares un q et un qb et que tu les défini dans le même process, ça va créer 2 ensembles de registres alors que tu n'as besoin que d'un puis d'inverser la sortie. Sur cible programmable, c'est plus optimisé.

    Bon VHDL!

  4. #4
    jiherve

    Re : Registre a decalage, avec bascule D(VHDL)

    Bonsoir,
    il ne sert à rien d'utiliser un reset et un preset car dans un FPGA c'est fromage ou dessert par contre une entrée load et shift seraient utiles , déclarer une sortie inversée ne sert à rien non plus , dans la liste de sensibilité il suffit de declarer le rest et l'horloge si le load et le shift sont synchrones, le process se réveillant à chaque front descendant d'horloge donc:

    Code:
    LIBRARY ieee;
    USE......
    USE......
    
    ENTITY shiftreg is
    port(din :std_logic_vector(3 downto 0);
    hor,raz, load,shift: in std_logic;
            q: std_logic_vector(3 downto 0));
    END ENTITY shiftreg 
    
    Architecture comport of shiftreg  is
    signal qi :std_logic_vector(3 downto 0);
    begin
    q <= qi;
    stock:process(hor,raz) is 
     begin
       if(raz='0') then
        q<= (others =>'0');
      elsif (hor'event and hor='0')then
        if load = '1' then
          qi<= din;
        elsif shift = '1' then
          qi(3 downto 1) <= qi(2 downto 0);
        end if;
    end if;
    end process stock;
    End architecturre
    voili voilou.
    JR
    l'électronique c'est pas du vaudou!

  5. A voir en vidéo sur Futura
  6. #5
    deyni

    Re : Registre a decalage, avec bascule D(VHDL)

    Merci beaucoup!!!
    Deynid'oiseaux partout !! :rire:

  7. #6
    invite369d2cfd

    Re : Registre a decalage, avec bascule D(VHDL)

    Salut,
    je veux implémenter 2 registres à décalage avec le premier est de profondeur =2,le second est de profondeur=4,pour cela j'ai utilisé des composants, je veux savoir la définition du composant (le corps) où dois-je le placer dans ce code et comment le décalage fonctionne
    Code:
    ARCHITECTURE behav of OUTER_INTERLEAVING is
    component shifter2 IS
    	PORT
    	(
    	 aclr		: IN STD_LOGIC  := '1';
    		clken		: IN STD_LOGIC  := '1';
    		clock		: IN STD_LOGIC ;
    		shiftin		: IN STD_LOGIC;
    		shiftout		: OUT STD_LOGIC
    		
    	);
    END component;
    
    
    component shifter4 IS
    	PORT
    	(
    		clken		: IN STD_LOGIC  := '1';
    		clock		: IN STD_LOGIC ;
    		shiftin		: IN STD_LOGIC;
    		shiftout		: OUT STD_LOGIC
    		
    	);
    END component;
    
    type tab is array(2 downto 0) of std_logic;
    
    signal clk_vec:std_logic_vector(2 downto 0);
    signal in_reg,out_reg:tab;
    signal not_reset								:  STD_LOGIC;
    begin
      not_reset <= (not reset);
    i1 : shifter2 port map (aclr => not_reset, clken => clk_vec(1),clock => clk, shiftin => din_data, shiftout => out_reg(1));-- décalage de 2
    i2: shifter4 port map(clken => clk_vec(2),clock => clk, shiftin => din_data, shiftout => out_reg(2));-- décalage de 4

  8. #7
    jiherve

    Re : Registre a decalage, avec bascule D(VHDL)

    Bonjour,
    shifter 2 et 4 doivent être décrit ailleurs , entity ...., archictecture ....
    Cela peut être dans le même fichier ou dans un ou deux autre fichiers.
    dans chaque cas on aura
    entity shifter2 is...
    end ;
    architecture toto of shifter2 is
    declarations
    begin
    end;
    Dans le même fichier on peut aussi utiliser des fonctions.
    Ceci dit pour un bête registre à décalage il suffit d'une ligne de code.
    JR
    l'électronique c'est pas du vaudou!

  9. #8
    invite369d2cfd

    Re : Registre a decalage, avec bascule D(VHDL)

    mais je ne peux pas faire 2 entités dans le méme fichier

  10. #9
    indri

    Re : Registre a decalage, avec bascule D(VHDL)

    non mais tu peux bêtement écrire ca

    Code:
    shifter : std_logic_vector (3 downto 0);
    
    ...
    
    shifter(3)<=din;
    shifter(2 downto 0)<=shifter(3 downto1);
    dout<=shifter(0);
    ou quelque chose dans le genre!

    pas besoin de faire des sous-entités pour si peu! (enfin c'est a toi de voir)
    Là où va le vent...

  11. #10
    jiherve

    Re : Registre a decalage, avec bascule D(VHDL)

    Bonsoir,
    Citation Envoyé par seni404 Voir le message
    mais je ne peux pas faire 2 entités dans le méme fichier
    Bien sur que si, jette donc un oeuil dans les librairies Altera ou Xilinx.
    JR
    l'électronique c'est pas du vaudou!

  12. #11
    fsoni

    Re : Registre a decalage, avec bascule D(VHDL)

    Bonsoir à tous,
    je suis débutante en VHDL, je veux écrire un simple programme qui fait la synchronisattion entre 2 process, lorsque l'un fonctionne l'autre non, pour cela j'ai utilisé une variable im qui va prendre la valeur 1 pour que le 2 éme process puisse fonctionner, et puis pour que le 1 ér re-fonctionne elle doit chnager de valeur à 0. le programme n'accepte pas cette 2 éme attribution de valeur à la méme variable,,, il m'affiche"im has multiple source" volia le code
    Code:
    LIBRARY ieee ;
    use ieee.std_logic_unsigned.all;
    USE ieee.std_logic_1164.all ;
    USE ieee.std_logic_arith.all ;
    use ieee.numeric_std.all;
    
    entity t is 
      port(
         
        clk : in std_logic;
    
        d_in : in std_logic;
       
         d_out :out std_logic;
     im_out : out std_logic
       
        );
    end entity;
    
    ARCHITECTURE corp of t is
       signal im:integer:=0;
       begin 
            process(clk) --process 1
                begin
            if (clk'event and clk='1') then
            d_out <= d_in;
              im <= 1;
            end if;
          end process;
          process (clk)
            begin
            if (clk'event and clk='1' and im=1) then
              im_out <= d_in;
               im <= 0;
            end if;
          end process;
         
          
        end corp;

  13. #12
    jiherve

    Re : Registre a decalage, avec bascule D(VHDL)

    Bonsoir,
    on ne peut pas affecter le même signal dans deux process concurrents.
    Donc soit utiliser deux variable et un dispositif de handshake, ou bien , c'est plus simple mais quelquefois casse g...e une variable partagée.
    shared variable : im : integer range 0 to 1 := 0;
    ne jamais oublier le range lors de l'usage d'integer sinon par défaut c'est 32 bits ce qui ne pose as vraiment de problème en simulation mais peut s’avérer délétère en synthèse.
    JR
    l'électronique c'est pas du vaudou!

  14. #13
    fsoni

    Re : Registre a decalage, avec bascule D(VHDL)

    merci JR pour votre attention mais il m'affiche "Target of signal assignment is not a signal" pour la ligne
    Code:
     im <= 1;
    .

  15. #14
    jiherve

    Re : Registre a decalage, avec bascule D(VHDL)

    bonjour,
    pour une variable l'affectation se fait par := .
    attention l'affectation d'une variable est immédiate il n'y a pas de "delta".
    JR
    l'électronique c'est pas du vaudou!

  16. #15
    fsoni

    Re : Registre a decalage, avec bascule D(VHDL)

    Merci bien JR le probléme est résolu.
    c'est le meilleur forum que j'ai trouvé
    Dernière modification par fsoni ; 27/12/2012 à 18h22.

  17. #16
    fsoni

    Re : Registre a decalage, avec bascule D(VHDL)

    slt JR
    J'ai une matrice A déclaré comme suit
    Code:
    type matrix is array(0 to 4,0 to 4) of bit
    signal A: matrix;
    la 1 ére ligne est désigné par A(0), comment désigner la 1ére colonne en VHDL? merci

Discussions similaires

  1. registre de décalage
    Par invite55fae67a dans le forum Physique
    Réponses: 3
    Dernier message: 20/12/2010, 21h37
  2. Registre à décalage
    Par invite2ceddf9e dans le forum Électronique
    Réponses: 14
    Dernier message: 09/04/2010, 07h15
  3. Registre à décalage
    Par invite1a530f8d dans le forum Électronique
    Réponses: 6
    Dernier message: 26/06/2009, 10h50
  4. registre à décalage
    Par invite74efa975 dans le forum Électronique
    Réponses: 3
    Dernier message: 30/05/2009, 17h54
  5. Registre a decalage SN74HC595N
    Par hterrolle dans le forum Électronique
    Réponses: 5
    Dernier message: 26/03/2008, 13h45
Découvrez nos comparatifs produits sur l'informatique et les technologies.