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.

SignalDirection (Maître)Description
CLK_IEntréeHorloge partagée
RST_IEntréeReset synchrone actif haut
ADR_OSortieAdresse
DAT_OSortieDonnées maître → esclave
DAT_IEntréeDonnées esclave → maître
WE_OSortieWrite Enable : '1' = écriture
SEL_OSortieSélecteur d'octets actifs
STB_OSortieStrobe : transaction active sur ce cycle
CYC_OSortieCycle : le maître occupe le bus
ACK_IEntréeAcknowledgment : l'esclave termine la transaction
ERR_IEntrée(optionnel) Erreur
RTY_IEntrée(optionnel) Retry

Cycles de lecture et d'écriture

Diagrammes de timing Wishbone

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ête

Points 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èreWishboneAXI4
ComplexitéSimpleComplexe
Canaux séparésNonOui (5 canaux)
Burst natifOui (B4)Oui
Multi-maîtreOui (avec crossbar)Oui (avec interconnect)
LicenceOpen sourceARM — gratuite mais propriétaire
Usage typiqueOpen-hardware SoCZynq, SoC commerciaux