Wishbone (bus informatique)
# Wishbone (bus informatique)

Le bus Wishbone est un bus de matériel informatique libre destiné à permettre à différents circuits intégrés de communiquer entre eux. L'objectif est de permettre une connexion de différents cœurs entre eux dans un circuit. Un très grand nombre de conception open-source pour des CPUs, ou des périphériques auxiliaires, ont été adaptés à l'interface Wishbone. Beaucoup peuvent être trouvés chez OpenCores (en), une fondation qui essaie de rendre disponible le matériel open-source.

Wishbone a comme prétention d'être un "bus logique". Il ne spécifie donc pas d'information électrique ou de topologie de bus. Ainsi, la spécification est écrite en termes de "signaux", cycles d'horloge, et niveau logiques hauts et bas.

Cette ambigüité est intentionnelle. Wishbone est fait pour laisser les concepteurs combiner plusieurs conceptions décrites en Verilog, VHDL ou un autre langage de description logique pour la Conception assistée par ordinateur pour l'électronique. Wishbone fournit une façon standard pour les concepteurs de combiner ces conceptions matérielles (appelées "cœurs" - core en anglais). Wishbone est défini pour avoir des bus 8, 16, 32 bits. Tous les signaux sont synchrones à une horloge unique mais les réponses des esclaves peuvent être générées de manière combinatoires pour un maximum de performances. Wishbone permet l'addition d'un "tag bus" pour décrire les données. Mais un reset, une simple lecture adressée ou son écriture, mouvement des blocs de données, et les cycles indivisibles du bus cycles travaillent tous sans tags.

## Topologies des bus Wishbone

Les bus Wishbone s'adaptent facilement aux topologies courantes comme le point-à-point, plusieurs-à-plusieurs (i.e. le bus classique), hiérarchique, où même commutés. Pour des topologies moins courantes, Wishbone requiert un contrôleur de bus ou arbitre, avec des composants gardant la même interface.

## Comparaisons

Signaux de contrôle du bus Wishbone comparé aux autres bus standards pour System on Chip

Wishbone ⇒ Avalon :

| Wishbone | Avalon Bus | Description |
| - | - | - |
| cyc | = !write_n or !read_n | indique qu'un cycle valide du bus est en cours |
| stb | = chipselect | indique un cycle de transfert de données valide |
| we | = !write_n and read_n | indique si le bus courant local est un cycle d'écriture ou de lecture. Le signal estpositionné à 0 durant un cycle de lecture, et positionné à 1 durant un cycle d'écriture. |
| ack | = !waitrequest | indique la terminaison d'un cycle normal de bus par l'esclave. |

Avalon ⇒ Wishbone :

| Avalon Bus | Wishbone | Description |
| - | - | - |
| chipselect | = stb | indique qu'un esclave est sélectionné. |
| write_n | = !(cyc and we) | indique que la requête du maître est pour une écriture dans un esclave. |
| read_n | = !(cyc and !we) | indique que la requête du maitre est pour une lecture d'un esclave. |
| waitrequest | = !ack | indique que le maître attend une requête de l'esclave. |

## Autres bus

* Bus Avalon
* Bus AMBA
* IBM et sa technologie CoreConnect
* PLB Processor local Bus (partie de CoreConnect)
* OPB (On-chip Peripheral Bus) (partie de CoreConnect)
* OCP Open Core Protocol
