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 :

Décalage d'un registre de 2^i


Sujet :

VHDL

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Mars 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement de composants
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2014
    Messages : 10
    Points : 3
    Points
    3
    Par défaut Décalage d'un registre de 2^i
    Bonjour,
    j'aimerais effectuer un décalage d'un registre de 2^i en un cycle d'horloge, j'ai essayé de créer un signal de n à I bits, puis le concaténer avec un signal de I à n bits, j'ai un problème de syntaxe, merci de m'aider, voici mon code :

    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_unsigned.all;
     
    entity div_2i is
    	generic(N_Bits : INTEGER := 32); 
    	port(A : in UNSIGNED((N_Bits - 1) downto 0);
    		  I : in UNSIGNED((N_Bits - 1) downto 0);
    		  S : out UNSIGNED((N_Bits - 1) downto 0));
    end div_2i;
     
    architecture arch_div_2i of div_2i is
    signal S1 : UNSIGNED((N_Bits - 1) downto 0);
    begin
    		S <= (I downto 0, '0') & S1(N_Bits downto I);
    end arch_div_2i;

  2. #2
    Membre expérimenté

    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 545
    Points : 1 429
    Points
    1 429
    Par défaut
    Bonjour,

    Décalage a droite de I bit en non signé (dans ton cas puisque déclaré unsigned)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    S   <= resize(A(A'high downto to_integer(I)),N_Bits);
    Attention I peut prendre de très grandes valeurs!!!

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur développement de composants
    Inscrit en
    Mars 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Ingénieur développement de composants
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2014
    Messages : 10
    Points : 3
    Points
    3
    Par défaut
    Je vous remercie, ça fonctionne comme il faut,
    juste que je n'ai pas compris les instructions utilisées, pourriez vous m'expliquer un peu plus en détail ce que fait X'high et resize?
    Merci

  4. #4
    Membre expérimenté

    Homme Profil pro
    Collégien
    Inscrit en
    Juillet 2010
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Afghanistan

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Juillet 2010
    Messages : 545
    Points : 1 429
    Points
    1 429
    Par défaut
    Bonjour,

    X'high renvoie l'élement haut dans la déclaration des borne d'un tableau. Je crois que ' fait référence à l'attribut d'un objet, dans notre cas un std_logic_vector.
    std_logic_vector possède plusieurs attributs:

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    signal dummy : std_logic_vector(42 downto 0);
    dummy'high renvoie 42
    dummy'low renvoie 0
    dummy'length renvoie 43
    dummy'range renvoie 42 downto 0

    donc tu peux faire : signal dummy2 : std_logic_vector(dummy'range);-- ça marche pour déclarer des signaux de même taille.

    resize permet de changer la taille signaux de type signed ou unsigned en faisant attention au signe.

    exemple:
    std_logic_vector(resize(unsigned("1000"),8)) renvoie "00001000" <=> 8
    std_logic_vector(resize( signed("1000"),8)) renvoie "11111000" <=> -8
    std_logic_vector(resize( signed("0111"),8)) renvoie "00000111" <=> 7

Discussions similaires

  1. Instanciation d'un registre à décalage
    Par seni404 dans le forum VHDL
    Réponses: 9
    Dernier message: 03/11/2012, 20h54
  2. Compteur dans un registre à décalage
    Par killabeez dans le forum LabVIEW
    Réponses: 7
    Dernier message: 06/04/2011, 14h41
  3. Registre à décalage
    Par m@tix dans le forum LabVIEW
    Réponses: 5
    Dernier message: 24/09/2010, 22h07
  4. [LV8.0][Débutant]Registre à décalage dans un sous-vi
    Par pacman74 dans le forum LabVIEW
    Réponses: 2
    Dernier message: 05/05/2010, 13h34
  5. registre à décalage et tableau 2D
    Par Pierpolay dans le forum LabVIEW
    Réponses: 4
    Dernier message: 04/01/2010, 11h31

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