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 :

Composant de synchronisation


Sujet :

VHDL

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    Novembre 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 122
    Points : 46
    Points
    46
    Par défaut Composant de synchronisation
    Bonjour,
    j'ai un problème :
    je voudrais un composant qui a trois entrées : la donnée D, l'horloge CLK et un enable EN
    une sortie : Q
    Je suppose que mon circuit marche en deux cycles (#1 et #2) mais que D n'est valide que sur #1 et pas sur #2. Q doit donc valoir D de #1 pendant #1 (il se comporte alors comme un fil) et #2 (il se comporte alors comme un registre). C'est un peu ce que ferait un latch commandé par EN mais le synthétiseur crie, il dit qu'il faut faire attention aux risques d'instabilité car il n'y a pas d'horloge.
    Une idée pour faire ça simplement ?
    Merci.

  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 431
    Points
    1 431
    Par défaut
    Salut,

    Je ne suis pas certain d'avoir compris ton problème. Ce que j'ai compris c'est que tu veux by-passer ton registre quand D est valide.

    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
    library IEEE;
        use IEEE.std_logic_1164.all;
        use IEEE.numeric_std.all;
        use IEEE.std_logic_unsigned.all;
     
    entity TON_TRUC is
        port
        (
            RST     : in std_logic; --asynch activ high
            CLK     : in std_logic; --Clock
            CE      : in std_logic; --Clock enable activ high
            --
            D_VALID : in std_logic; --assert D activ high
            D       : in std_logic; --input data
            Q       : out std_logic--output data
        );
    end entity TON_TRUC;
     
    architecture RTL of TON_TRUC is
     
        signal q_R  : std_logic;
     
    begin
     
        process(RST,CLK)
        begin
            if(RST = '1')then
                q_R   <= '0';
            elsif(rising_edge(CLK))then
                CLOCK_ENABLE_LOGIC: if(CE = '1')then
                    q_R   <= D;
                end if CLOCK_ENABLE_LOGIC;
            end if;
        end process;
     
        Q   <= D when D_VALID = '1' else q_R;
    end architecture RTL;
    Dit moi si c'est ca.

    @+

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    Novembre 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 122
    Points : 46
    Points
    46
    Par défaut
    Bon ben après divers tests, ça a l'air de faire ce que je veux. Je faisais à peu près ça mais j'avais pas pensé au signal temporaire.
    Merci pour le généreux coup de main.

  4. #4
    Membre du Club
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    Novembre 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 122
    Points : 46
    Points
    46
    Par défaut
    Finalement, j'ai encore un problème :
    si ENABLE passe à 0 au moment où la donnée change et où on a un front montant de l'horloge, alors la sortie a le temps d'être modifiée.
    J'essaie de réexpliquer :
    j'ai une horloge. A chaque cycle D est modifiée (1, 2, 3, 4, 5,...).
    Je voudrais que Q vaille 1, 1, 3, 3, 5,...
    Je peux faire ça ?

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    Novembre 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 122
    Points : 46
    Points
    46
    Par défaut
    J'ai trouvé une solution: je fais passer D dans deux inverseurs de suite, ça retarde un peu la donnée et l'horloge bascule avant. Ça marche mais je suis pas sûr que ce soit très propre...
    Y a mieux ?

  6. #6
    Membre du Club
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    Novembre 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 122
    Points : 46
    Points
    46
    Par défaut
    Non, finalement, la simulation ne donne pas les bon résultats.

  7. #7
    Membre du Club
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    Novembre 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 122
    Points : 46
    Points
    46
    Par défaut
    OK, c'est bon, c'est moi qui ne simulait pas le reset correctement.
    Mea culpa et merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 28/07/2006, 15h33
  2. Réponses: 1
    Dernier message: 23/06/2002, 00h15
  3. Redéfinir l'événement OnExit de mon composant TEditFloat
    Par Seb des Monts dans le forum C++Builder
    Réponses: 5
    Dernier message: 18/06/2002, 16h10
  4. Installer ses composants
    Par Geronimo dans le forum C++Builder
    Réponses: 14
    Dernier message: 18/06/2002, 14h51
  5. Re-dimensionnement automatique de composants
    Par ludo_7 dans le forum C++Builder
    Réponses: 10
    Dernier message: 16/05/2002, 16h35

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