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 :

Registre universel et rising_edge


Sujet :

VHDL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2017
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Registre universel et rising_edge
    Bonjour,

    dans le cadre de mes révisions je voulais créer un "Registre universel" (capable de shift left et right et d'input parallèle) en VHDL. Voilà ce que j'ai fait:

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    library IEEE;
    use IEEE.STD_LOGIC_1164.ALL;
     
    entity uni_reg is
        Port ( clk : in STD_LOGIC;
         D : in  STD_LOGIC_VECTOR (2 downto 0); -- Parallel input
               DSL : in  STD_LOGIC; -- Left-coming bit
               DSR : in  STD_LOGIC; -- Right-coming bit
               S : in  STD_LOGIC_VECTOR (1 downto 0); -- Modes (nothing, shift right, shift right, store input)
               Q : out  STD_LOGIC_VECTOR (2 downto 0)); -- Parallel output
    end uni_reg;
    architecture Behavioral of uni_reg is
     signal Q_now, Q_next : STD_LOGIC_VECtOR (2 downto 0);
    begin
     
     -- Combinatorial
     process (S, DSL, DSR, D, Q_now)
     begin
      if S = "00" then
       Q_next <= Q_now;
      elsif S = "01" then
       Q_next <= DSL & Q_now(1 downto 0);
      elsif S = "10" then
       Q_next <= Q_now(2 downto 1) & DSR;
      else
       Q_next <= D;
      end if;
     end process;
     -- Register
     process (clk)
     begin
      if rising_edge(clk) then
       Q_now <= Q_next;
      end if;
     end process;
     
     Q <= Q_now;
    end Behavioral;
    La partie combinatoire fonctionne. Cependant le signal Q_next n'est jamais affecté à Q_now. Pourtant le signal clk oscille bien (avec la simulation de xilinx).
    Je ne comprends pas ce qui ne va pas, j'ai fait des choses similaires sur d'autre modules qui marchent bien.

    Auriez-vous une idée?
    Merci d'avance.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Product Apps Engineer
    Inscrit en
    Juillet 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Irlande

    Informations professionnelles :
    Activité : Product Apps Engineer
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2016
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Je pense qu'il faudrait que le premier process soit aussi en fonction de clk et non combinatorial ou changer le second process par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     process (clk)
     begin
      if rising_edge(clk) then
       Q_now <= Q_next after 1ns;
      end if;
     end process;
    En espérant que ça aide

    Florent

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2017
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Merci
    Merci pour ta réponse. J'avais depuis réussi à faire marcher le registre.
    En effet, le premier processus a dû être remplacé par un simple "with ... select ..." qui assignait un signale interne. Le processus s'occupe juste d'assigner le signal au port.

    Bonne journée

Discussions similaires

  1. [Windows]accès base de registre windows
    Par Greg01 dans le forum API standards et tierces
    Réponses: 27
    Dernier message: 05/06/2007, 15h14
  2. Accès à la base de registre windows à distance
    Par xavame dans le forum Sécurité
    Réponses: 4
    Dernier message: 13/07/2005, 15h23
  3. Comparaison d'un registre 8 bits avec une variable 32 bits
    Par tupperware dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 15/10/2002, 10h25
  4. registre de connexion windows internet
    Par lafaryan dans le forum Web & réseau
    Réponses: 2
    Dernier message: 21/08/2002, 12h52
  5. Utilisez vous la base de registres ?
    Par gRRosminet dans le forum C++Builder
    Réponses: 8
    Dernier message: 04/06/2002, 13h55

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