Wat is Asynchrone FIFO?

FIFO die op aparte klokken wordt beschreven en gelezen, gebruikt om meerbitsdata tussen klokdomeinen door te geven. De pointers worden naar Gray-code omgezet voordat ze in het andere domein worden gesynchroniseerd om vol (full) en leeg (empty) te bepalen. De pointers hebben één bit meer dan het adres om het rondlopen (wrap-around) te onderscheiden.

Japanse benaming: 非同期FIFO

“Asynchrone FIFO” komt voor in 11 oefenvragen uit 2 onderwerpen, bijv. Timinganalyse en CDC, LSI-ontwerpflow en EDA.

Opbouw van een asynchrone FIFO Schrijfzijde (wclk) Leeszijde (rclk) Dual-port RAM Aparte schrijf-/leesklok Schrijfdata Schrijfpointer Gray-codering Leesdata Leespointer Gray-codering 2-FF-sync Empty-detectie 2-FF-sync Full-detectie Pointers in Gray-code In Gray-code verandert per stap maar 1 bit
Opbouw van een asynchrone FIFO · Bekijken in het figurenoverzicht

Vakgebied: Timinganalyse en CDC

Nu oefenen: vragen over Asynchrone FIFO

Wat is de juiste reden waarom in een asynchrone FIFO de schrijf- en leespointer naar Gray-code worden omgezet voordat ze naar het andere domein worden gesynchroniseerd?

  1. AOmdat Gray-code het aantal bits halveert, zodat minder synchronisators nodig zijn
  2. BOmdat bij elke stap maar één bit verandert, zodat ook bij overname midden in de verandering de juiste waarde van vóór of na de stap wordt verkregen
  3. COmdat Gray-codesignalen niet metastabiel worden, zodat synchronisatie overbodig is
Antwoord en toelichting tonen

Antwoord: B. Omdat bij elke stap maar één bit verandert, zodat ook bij overname midden in de verandering de juiste waarde van vóór of na de stap wordt verkregen

Bij een binaire pointer veranderen meerdere bits tegelijk, bijvoorbeeld van 0111 naar 1000, dus als elke bit afzonderlijk wordt gesynchroniseerd, kan een volstrekt ongerelateerde waarde worden ontvangen. Bij Gray-code verandert per ophoging maar één bit, dus ook als die bit metastabiel wordt en op oud of nieuw uitkomt, is het resultaat de waarde van vóór of na de stap. Er wordt alleen een iets oudere waarde gezien, dus de FIFO raakt niet ontregeld. Het aantal bits verandert niet, en metastabiliteit zelf kan nog steeds optreden, dus synchronisators blijven nodig.

Wat is de juiste reden waarom in een asynchrone FIFO met een diepte van 16 woorden de schrijf- en leespointer 5 bits zijn, 1 bit meer dan het adres?

  1. AOmdat 5 bits nodig zijn om de adressen van 16 woorden weer te geven
  2. BOm bij gelijke pointers te kunnen onderscheiden: in dezelfde ronde is de FIFO leeg, bij één ronde verschil vol
  3. COm de extra bit als pariteit te gebruiken en fouten in de pointer te detecteren
Antwoord en toelichting tonen

Antwoord: B. Om bij gelijke pointers te kunnen onderscheiden: in dezelfde ronde is de FIFO leeg, bij één ronde verschil vol

16 woordadressen zijn met 4 bits weer te geven, maar met alleen 4-bit pointers is bij gelijke lees- en schrijfadressen niet te onderscheiden of de FIFO leeg is omdat alles is gelezen, of vol omdat er een hele ronde is geschreven en de schrijfpointer de leespointer heeft ingehaald. Wordt een vijfde bit toegevoegd die de ronde aangeeft, dan geldt bij binaire vergelijking: alle 5 bits gelijk betekent leeg, alleen de meest significante bit verschillend betekent vol. Bij Gray-codepointers verandert de vergelijking voor de vol-detectie iets. De bit wordt niet als pariteit gebruikt.

“Asynchrone FIFO” in de toelichting

Vragen met “Asynchrone FIFO” (11)

  1. Wat is de juiste reden waarom in een asynchrone FIFO de schrijf- en leespointer naar Gray-code worden omgezet voordat ze naar het andere domein worden gesynchroniseerd?
  2. Wat is de juiste reden waarom in een asynchrone FIFO met een diepte van 16 woorden de schrijf- en leespointer 5 bits zijn, 1 bit meer dan het adres?
  3. Welke voorwaarde om aan de schrijfkant vol (full) te detecteren is juist bij een asynchrone FIFO met een diepte van 16 woorden en 5-bit Gray-codepointers?
  4. In een asynchrone FIFO wordt de pointer van de andere kant gesynchroniseerd gebruikt, dus de zichtbare pointerwaarde is 2–3 cycli oud. Welk effect heeft deze vertraging juist op de full/empty-detectie?
  5. In een asynchrone FIFO met 100 MHz aan de schrijfkant en 80 MHz aan de leeskant schrijft de schrijfkant bursts van 100 woorden, elke cyclus 1 woord, en leest de leeskant elke cyclus 1 woord. Tussen de bursts is er voldoende rust. Wat is de minimale diepte om overlopen te voorkomen (vertraging door synchronisatie wordt genegeerd)?
  6. Wat is de juiste reden waarom het een probleem kan zijn om het pad waarlangs de Gray-codepointer van een asynchrone FIFO naar het andere domein gaat zonder constraint te laten (false path), alleen omdat het asynchroon is?
  7. Hoe heet de verificatie waarbij met een speciale tool wordt gecontroleerd of op de plaatsen waar signalen worden doorgegeven tussen schakelingen met verschillende klokken, synchronisatieschakelingen correct zijn aangebracht?
  8. Elke bit van 4-bit data krijgt een eigen synchronisator met 2 trappen en wordt zo naar een ander klokdomein doorgegeven. Welk probleem kan juist optreden als de data van 0111 naar 1000 verandert?
  9. Welke methode om multibitdata veilig naar een ander klokdomein door te geven is juist?
  10. Welke beperking geldt juist bij het doorgeven van pulsen met toggle-synchronisatie van een snel naar een traag klokdomein?
  11. Wat is juist een nadeel van dataoverdracht tussen klokdomeinen met een handshake?

Verwante termen

Gray-code Numerieke apertuur (NA) Metastabiliteit Klokdomein Handshake False path Flipflop Synchronisator CRPR (clock reconvergence pessimism removal) Klokonzekerheid (clock uncertainty)

Naar de woordenlijst