| 28 | |
| 29 | Le canal de communication FIFO implante un protocole de communication très simple supportant le contrôle de flux. |
| 30 | |
| 31 | [[Image(soclib_tp1_fig2_fifo.png)]] |
| 32 | |
| 33 | Chacune des deux entités communicantes considère que son interlocuteur est une simple FIFO. Une FIFO est une mémoire double accès de type First-In-First-Out sans adressage explicite. Le producteur peut écrire dans la FIFO lorsqu'elle n'est pas pleine (WOK peut être considéré comme un signal d'état de la FIFO signifiant FIFO non pleine). Le producteur peut lire une donnée dans la FIFO lorsque celle-ci n'est pas vide |
| 34 | (ROK peut être considéré comme un signal d'état de la FIFO signifiant FIFO non vide). |
| 35 | |
| 36 | Attention : Il n'y a pas de mécanisme de ''handshacking'' : le producteur n'a pas besoin de consulter la consommateur |
| 37 | pour envoyer un ordre d'écriture (c'est à dire W = true). De même, le consommateur n'a pas besoin de consulter le producteur pour envoyer un ordre de lecture (c'est à dire R = true). Simplement, une donnée est effectivement transmise à chaque cycle où les deux signaux R_WOK et W_ROK ont simultanément la valeur true. |
| 38 | Ce protocole supporte un débit maximal d'une donnée par cycle, et permet à chacun des interlocuteurs d'interrompre la transmission quand il n'est pas prêt. |
| 39 | |
| 40 | Un des avantages de ce protocole est que les deux composants communicants se comportent tous les deux comme des automates de Moore : les 3 signaux R_WOK, W_ROK et DATA ne dépendent que de l'état interne de l'émetteur. |
| 41 | Dans ce protocole, une donnée est effectivement échangée à tous les cycles où le producteur |