Protocole Wishbone
Découvrez le bus open-source Wishbone, standard des designs open-hardware pour SoC
Qu'est-ce que Wishbone ?
Wishbone est un bus système open-source développé par Silicore Corporation et standardisé par l'OpenCores Foundation. Il est très utilisé dans les designs open-hardware (OpenCores, LiteX, OpenRISC) comme bus interne de SoC.
Ses caractéristiques :
- Open-source : spécification libre et gratuite
- Simple : peu de signaux, facile à implémenter
- Flexible : supporte des transferts simples, en burst et en pipeline
- Synchrone : toutes les transactions se font sur des fronts d'horloge
Signaux Wishbone
Les signaux sont préfixés par _i (input) ou _o (output) selon la perspective maître/esclave.
| Signal | Direction (Maître) | Description |
|---|---|---|
| CLK_I | Entrée | Horloge partagée |
| RST_I | Entrée | Reset synchrone actif haut |
| ADR_O | Sortie | Adresse |
| DAT_O | Sortie | Données maître → esclave |
| DAT_I | Entrée | Données esclave → maître |
| WE_O | Sortie | Write Enable : '1' = écriture |
| SEL_O | Sortie | Sélecteur d'octets actifs |
| STB_O | Sortie | Strobe : transaction active sur ce cycle |
| CYC_O | Sortie | Cycle : le maître occupe le bus |
| ACK_I | Entrée | Acknowledgment : l'esclave termine la transaction |
| ERR_I | Entrée | (optionnel) Erreur |
| RTY_I | Entrée | (optionnel) Retry |
Cycles de lecture et d'écriture
Règle fondamentale : tant que ACK n'est pas reçu, le maître maintient STB, CYC, ADR et WE stables.
Implémentation VHDL
Un esclave Wishbone typique contient un tableau de registres accessibles en lecture/écriture. La logique est simple : quand CYC et STB sont actifs, l'esclave décode l'adresse, exécute la lecture ou l'écriture, puis lève ACK pour terminer la transaction.
Des exercices Wishbone seront bientôt disponibles sur la plateforme pour mettre en pratique l'implémentation d'un esclave et d'un maître Wishbone.
Mode Pipeline (Wishbone B4)
La révision B4 de Wishbone ajoute le mode pipeline : le maître peut envoyer de nouvelles requêtes sans attendre ACK de la précédente. Le signal STALL permet à l'esclave de mettre en pause les nouvelles requêtes.
Signal supplémentaire :
STALL_I : in std_logic -- esclave ne peut pas accepter de nouvelle requêtePoints d'attention
- CYC vs STB : CYC indique que le maître "tient" le bus (aucun autre maître ne peut y accéder), STB indique une transaction active sur ce cycle précis. Dans les designs simples, CYC = STB
- Latence d'ACK : l'esclave peut envoyer ACK au même cycle que STB (latence 0) ou après plusieurs cycles (latence N)
- SEL : chaque bit sélectionne un octet du bus de données — utile pour les accès byte et half-word sur un bus 32 bits
Comparaison avec AXI
| Critère | Wishbone | AXI4 |
|---|---|---|
| Complexité | Simple | Complexe |
| Canaux séparés | Non | Oui (5 canaux) |
| Burst natif | Oui (B4) | Oui |
| Multi-maître | Oui (avec crossbar) | Oui (avec interconnect) |
| Licence | Open source | ARM — gratuite mais propriétaire |
| Usage typique | Open-hardware SoC | Zynq, SoC commerciaux |