Précédent   Forum du club des développeurs et IT Pro > Autres langages > Autres langages > VHDL
VHDL Forum d'entraide sur VHDL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 06/04/2012, 08h41   #1
binome-x
Invité de passage
 
Homme
Ingénieur/Chercheur
Inscription : novembre 2007
Messages : 65
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 35
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur/Chercheur

Informations forums :
Inscription : novembre 2007
Messages : 65
Points : 3
Points : 3
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.
binome-x est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2012, 09h44   #2
mith06
Membre confirmé
 
Ingénieur développement matériel électronique
Inscription : juillet 2010
Messages : 152
Détails du profil
Informations professionnelles :
Activité : Ingénieur développement matériel électronique
Secteur : Industrie

Informations forums :
Inscription : juillet 2010
Messages : 152
Points : 243
Points : 243
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.

@+
mith06 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/04/2012, 12h12   #3
binome-x
Invité de passage
 
Homme
Ingénieur/Chercheur
Inscription : novembre 2007
Messages : 65
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 35
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur/Chercheur

Informations forums :
Inscription : novembre 2007
Messages : 65
Points : 3
Points : 3
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.
binome-x est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2012, 15h15   #4
binome-x
Invité de passage
 
Homme
Ingénieur/Chercheur
Inscription : novembre 2007
Messages : 65
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 35
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur/Chercheur

Informations forums :
Inscription : novembre 2007
Messages : 65
Points : 3
Points : 3
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 ?
binome-x est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2012, 15h36   #5
binome-x
Invité de passage
 
Homme
Ingénieur/Chercheur
Inscription : novembre 2007
Messages : 65
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 35
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur/Chercheur

Informations forums :
Inscription : novembre 2007
Messages : 65
Points : 3
Points : 3
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 ?
binome-x est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2012, 16h21   #6
binome-x
Invité de passage
 
Homme
Ingénieur/Chercheur
Inscription : novembre 2007
Messages : 65
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 35
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur/Chercheur

Informations forums :
Inscription : novembre 2007
Messages : 65
Points : 3
Points : 3
Non, finalement, la simulation ne donne pas les bon résultats.
binome-x est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2012, 19h39   #7
binome-x
Invité de passage
 
Homme
Ingénieur/Chercheur
Inscription : novembre 2007
Messages : 65
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 35
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur/Chercheur

Informations forums :
Inscription : novembre 2007
Messages : 65
Points : 3
Points : 3
OK, c'est bon, c'est moi qui ne simulait pas le reset correctement.
Mea culpa et merci.
binome-x est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 06h09.


 
 
 
 
Partenaires

Hébergement Web