Deux liens différentiels permettent l'échange de données en émission (direct) et réception (revers) entre deux points A & B.
'n' de ces liens constituent alors les chemins d'échanges (lane) : PCIe 1x 2x 4x 8x.
Un signal émission ou réception est donc composé de deux fils en mode différentiel.
La combinaison des signaux émission et réception, soit 4 fils, constitue un chemin (lane).
Le regroupement de 'n' chemin représentent le lien PCIe nX.
Root composant permet l'accès au CPU, à la mémoire ou tout autre périphérique.
Switch composant qui est optionnel permet le transfert PCIe entre end point sans passer par le root.
End point sont les périphériques d'échanges.
Les données sont élaborées sous forme de paquets.
PCIe permet le contrôle de flux, la QoS, la virtualisation de canaux, une latence prévisible...
Débit et bande passante :
Une paire différentielle permet un débit de 2,5 Gbit/sec
PCIe 1x aura donc un débit utile de (2,5 * 2 * 8/10)/8 = 500 Mo/sec
Le rapport 2 vient du mode full duplex émission + réception.
Le rapport 8/10 est introduit par l'encodage 8B10B utilisé.
PCIe suit le modèle OSI :
- La couche PHYsique permet le passage des paquets en un flux série. (PCS/PMA layer)
- La couche Data link permet la gestion de l'intégrité du lien (LCRC) et le contrôle de flux.
- La couche Transaction permet les accès plus au niveau : mémoire, I/O...
Un calcul de CRC est effectuée au niveau data link, il permet de vérifier l'intégrité des échanges à ce niveau.
Un deuxième calcul est réalisé au niveau transactionnel, c'est un calcul de CRC de bout en bout (ECRC).
Si ECRC est faut, il est possible de demander de renvoyer à nouveau le paquet.
Ceci est géré au niveau data link par un paquet DLLP (data link layer paquet) spécifique.
Les paquets de type DLLP sont transparents à l'utilisateur qui ne voit que les paquets TLP en général.
DLLP sont donc des paquets de management (completion, configuration).
Software layer *data* +-------------------+ | Transaction layer | **Header,*data*,ecrc** +-------------------+ | Data Link Layer | | | ***Sequence,**Header,*data*,ecrc**,lcrc*** +-------------------+ | PHYsical LAyer | | | Start,***Sequence,**Header,*data*,ecrc**,lcrc***,End +-------------------+
L'en tête du packet PCIe est de 3 à 4 mots de 32 bits.
La zone de charge utile, data, est de 0 à 1024 mots de 32 bits.
Un mot de 32 bits est appelé Double Word (DW) sachant qu'un word est un double octet et qu'un octet est composé de 8 bits.
Le niveau physique est composé des éléments suivant :
- circuit de récupération d'horloge (coté réception), (PMA)
- SERDES, (PMA)
- embrouilleur, (PMA)
- encodage 8B/10B. (PCS)
Le niveau data link dispose d'un "Replay Buffer" coté émission permettant de renvoyer le paquet lorsque le récepteur détecte des erreurs.
Différents types de transactions existent :
- lecture ou d'écriture du plan mémoire,
- configuration en phase d'initialisation,
- messages permettant l'échange d'événements entre périphériques,
- achèvement (completion) de la transaction.
Deux types de transactions sont possibles : posté ou non postée.
La transaction de type postée envoie un paquet et n'attend rien en retour : c'est comme une lettre à la poste.
La transaction de type non postée qui attend un paquet d'achèvement en retour : c'est comme une lettre en recommandée.
Une écriture mémoire sera de type posté alors qu'une lecture mémoire sera de type non posté.
Si l'usage fait de PCIe est simple, l'utilisateur peut se brancher au niveau transactionnel.
Il faudra alors gérer les paquets TLP (transaction layer paquet) en émission réception.
Pour des usages plus poussés, des IP existent (cas d'un design FPGA).
PLDA permet une sur couche entre les paquets TLP et le niveau utilisateur.
Cette sur couche gérera par exemple des accès mémoire direct DMA en mode "scatter gather" éventuellement.