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 :

FIFO à deux horloges


Sujet :

VHDL

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut FIFO à deux horloges
    bonsoir,
    Je dois implementer en vhdl un fifo avec deux horloges (une pour la lecture et une autre pour la l'Ecriture), et j'ai besoin d'aide car j'ai déjà essayé mais ça ne marchait pas comme je voudrais (surtout le passage plein à vide et de vide à plein).
    Voici la vue externe de la fifo:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Entity fifo is 
      port (
        data_in        : IN std_logic_vector(3 downto 0);
        rst              : IN std_logic;   --reset
        clk _rd         : IN std_logic;   --horloge de lecture 
        clk _wr         : IN std_logic;   -- horloge d'ecriture
        rd	         : IN std_logic;    -- Lecture	
        wr               : IN std_logic;   -- Ecriture	
        data_out      : OUT std_logic_vector(3 downto 0);
        empty          : OUT std_logic;   --fifo vide
        full              : OUT std_logic);   --fifo plein
    End Entity;

    Merci d'avance pour votre aide.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 61
    Points : 121
    Points
    121
    Par défaut
    Bonsoir,

    Les flags full et empty ne peuvent être uniques : il en faut une version pour chaque côté.
    Mécanisme de haut niveau :

    1) on incrémente les pointeurs d'adresse à chaque accès associé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    si wr ==> wr_addr <= wr_addr + 1, sur clk_wr
    si rd ==> rd_addr  <= rd_addr + 1, sur clk_rd
    2) on convertit ces pointeurs en code de gray
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    wr_gray_1 <= ConversionBinaireVersGray(wr_addr), sur clk_wr
    rd_gray_1 <= ConversionBinaireVersGray(rd_addr), sur clk_rd
    3) on copie ces valeurs de gray sur l'autre domaine d'horloge :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    wr_gray_2 <= wr_gray_1, sur clk_rd
    rd_gray_2 <= rd_gray_2, sur clk_wr
    4) on revient en code CBN (code binaire naturel)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    wr_cbn <= ConversionGrayVersBinaire(wr_gray_2), sur clk_rd
    rd_cbn <= ConversionGrayVersBinaire(rd_gray_2), sur clk_wr
    5) on calcule le nombre de mots
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    wr_usedw <= wr_addr - rd_cbn, sur clk_wr
    rd_usedw <= wr_cbn - rd_addr, sur clk_rd
    Les flags full et empty sont alors obtenus très simplement (si xx_usedw=0 --> empty, si xx_usedw=2^n, alors full)

    ATTENTION #1 : si les bus d'adresse font 8bits, la FIFO peut contenir de 0 à 256 mots, ce qui nécessite un vecteur de 9 (NEUF) bits...
    ATTENTION #2 : il faut veiller à la qualité du changement de domaine d'horloge. Quelle que soit la qualité de celui-ci, ça fonctionnera toujours nickel en simulation, mais s'il faut que ça fonctionne physiquement (dans un FPGA), seul l'interface chaise-clavier (donc VOUS !) peut garantir le bon fonctionnement. Il est impossible de faire passer une valeur binaire pure (un compteur CBN) d'une horloge à une autre. Seul un compteur en code de gray le peut. Et oubliez ceux qui vous diront "ça marche en simulation, donc ça marchera sur carte", c'est comme de dire "ça compile donc ça marche".

    Cordialement

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut fifo à 2 horloges
    Merci beaucoup pour ta réponse. Demain je vais essayer ta solution et je te tiendrai au courant.

    Merci encore une fois!

Discussions similaires

  1. Comparison de deux horloges
    Par Florian V dans le forum LabVIEW
    Réponses: 3
    Dernier message: 23/03/2010, 16h13
  2. Réponses: 0
    Dernier message: 26/08/2008, 10h48
  3. Synchroniser deux horloges?
    Par soeursourire dans le forum Ordinateurs
    Réponses: 4
    Dernier message: 26/09/2007, 17h28
  4. Recherche code d'un fifo,ou explication
    Par don-diego dans le forum C
    Réponses: 8
    Dernier message: 25/07/2002, 10h26
  5. soustraire deux dates ?
    Par joejoe dans le forum SQL
    Réponses: 2
    Dernier message: 19/07/2002, 15h53

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