Timinganalyse en CDC
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?
- AAlleen het opheffen van full en empty wordt vertraagd; overlopen of lezen uit een lege FIFO treedt niet op
- BOmdat de full-detectie vertraagd is, kan te veel worden geschreven en kan de data overlopen
- COmdat de empty-detectie vertraagd is, kan uit een lege FIFO worden gelezen
Antwoord en toelichting tonen
Antwoord: A. Alleen het opheffen van full en empty wordt vertraagd; overlopen of lezen uit een lege FIFO treedt niet op
De leespointer die de schrijfkant ziet is een oude waarde, dus het lijkt alsof er minder is gelezen dan in werkelijkheid, en de FIFO wordt voller ingeschat dan hij is. Full is dus altijd al actief als de FIFO echt vol is; alleen het opheffen nadat er ruimte is vrijgekomen loopt iets achter. Voor empty aan de leeskant geldt hetzelfde: nieuw geschreven data wordt alleen later zichtbaar. Beide werken naar de veilige (pessimistische) kant, dus de data raakt niet beschadigd, maar om de prestaties te behouden wordt de diepte met een marge voor deze vertraging gekozen.