Protocole Avalon

Découvrez le protocole Avalon d'Intel/Altera pour les interfaces mémoire et streaming dans les FPGA

Qu'est-ce que Avalon ?

Avalon est une famille de protocoles d'interface développée par Intel (anciennement Altera) pour leurs FPGA Cyclone, Arria et Stratix. Il est utilisé dans Platform Designer (anciennement Qsys) pour connecter des IPs dans un SoC FPGA.

La famille Avalon comprend plusieurs variantes :

  • Avalon-MM (Memory Mapped) : accès registres et mémoires
  • Avalon-ST (Streaming) : flux de données continu
  • Avalon-Interrupt : signaux d'interruption
  • Avalon-Clock : distribution d'horloge
  • Avalon-Conduit : signaux personnalisés hors-protocole

Avalon-MM (Memory Mapped)

Signaux principaux

SignalDirection (Maître)Description
addressSortieAdresse mot
readSortieDemande de lecture
writeSortieDemande d'écriture
readdataEntréeDonnées lues (esclave → maître)
writedataSortieDonnées écrites (maître → esclave)
byteenableSortieMasque d'octets actifs
waitrequestEntréeL'esclave demande d'attendre
readdatavalidEntrée(pipeline) Les données lues sont valides

Cycles de lecture et d'écriture Avalon-MM

Diagrammes de timing Avalon-MM

Le maître doit maintenir read et address stables tant que waitrequest est haut.


Implémentation VHDL

Un esclave Avalon-MM zéro-latence est l'implémentation la plus simple : waitrequest est toujours bas, et les lectures/écritures s'exécutent en un seul cycle. L'esclave décode l'adresse pour accéder à un tableau de registres interne.

Des exercices Avalon seront bientôt disponibles sur la plateforme pour mettre en pratique l'implémentation d'un esclave Avalon-MM.


Avalon-ST (Streaming)

Avalon-ST est conçu pour les flux de données continus (audio, vidéo, réseau). Il utilise un handshake valid/ready similaire à AXI-Stream.

Signaux principaux

SignalDirection (Source)Description
dataSortieDonnées du flux
validSortieLes données sont valides
readyEntréeLe récepteur peut accepter
startofpacketSortiePremier beat d'un paquet
endofpacketSortieDernier beat d'un paquet
emptySortieNombre d'octets vides dans le dernier beat
errorSortieErreur associée au beat

Handshake valid/ready

Un transfert a lieu quand valid = '1' ET ready = '1' au même front d'horloge.

CLK   : __________________
valid :    |‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾|
ready :    |‾‾‾‾‾|_____|‾‾‾‾‾‾‾|
data  :    | D0  |  X  | D1 | D2|
            ↑           ↑    ↑
         transfert  pause  transferts

Comparaison Avalon-MM vs AXI-Lite

CritèreAvalon-MMAXI-Lite
StandardIntel/AlteraARM (AMBA)
Canaux séparésNonOui (5 canaux)
Mécanisme d'attentewaitrequesthandshake valid/ready
Burst natifOuiNon (AXI4 full)
Génération automatiquePlatform DesignerVivado IP Integrator
Usage typiqueCyclone, Arria, StratixZynq, UltraScale

Points d'attention

  • Polarité du reset : Avalon utilise un reset actif haut (reset = '1') — contrairement à beaucoup de designs VHDL qui préfèrent le reset actif bas
  • Latence de lecture : pour les esclaves avec des RAMs ou des calculs, utiliser readdatavalid plutôt que waitrequest pour indiquer que les données sont prêtes
  • Byteenable : si l'esclave ne supporte pas les accès partiels, ignorer byteenable et traiter tous les accès comme 32 bits
  • Platform Designer : en pratique, les interfaces Avalon sont générées automatiquement par l'outil. Comprendre les signaux permet de créer des IPs custom correctement

Exemple : IP custom dans Platform Designer

# Déclaration de l'interface Avalon-MM dans le TCL de l'IP
add_interface s0 avalon slave
set_interface_property s0 addressUnits WORDS
add_interface_port s0 address address 2 Input
add_interface_port s0 read read 1 Input
add_interface_port s0 write write 1 Input
add_interface_port s0 readdata readdata 32 Output
add_interface_port s0 writedata writedata 32 Input
add_interface_port s0 waitrequest waitrequest 1 Output