Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Invité régulier
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    novembre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : novembre 2007
    Messages : 87
    Points : 7
    Points
    7

    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é

    Ingénieur développement matériel électronique
    Inscrit en
    juillet 2010
    Messages
    302
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : juillet 2010
    Messages : 302
    Points : 534
    Points
    534

    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 :
    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
    Invité régulier
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    novembre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : novembre 2007
    Messages : 87
    Points : 7
    Points
    7

    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
    Invité régulier
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    novembre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : novembre 2007
    Messages : 87
    Points : 7
    Points
    7

    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
    Invité régulier
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    novembre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : novembre 2007
    Messages : 87
    Points : 7
    Points
    7

    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
    Invité régulier
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    novembre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : novembre 2007
    Messages : 87
    Points : 7
    Points
    7

    Par défaut

    Non, finalement, la simulation ne donne pas les bon résultats.

  7. #7
    Invité régulier
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    novembre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : novembre 2007
    Messages : 87
    Points : 7
    Points
    7

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •