Wishbone Protocol
Discover the open-source Wishbone bus, the standard for open-hardware SoC designs
What is Wishbone?
Wishbone is an open-source system bus developed by Silicore Corporation and standardized by the OpenCores Foundation. It is widely used in open-hardware designs (OpenCores, LiteX, OpenRISC) as an internal SoC bus.
Key characteristics:
- Open-source: free specification
- Simple: few signals, easy to implement
- Flexible: supports single, burst, and pipelined transfers
- Synchronous: all transactions occur on clock edges
Wishbone Signals
Signals are prefixed _i (input) or _o (output) from the master's perspective.
| Signal | Direction (Master) | Description |
|---|---|---|
| CLK_I | Input | Shared clock |
| RST_I | Input | Synchronous active-high reset |
| ADR_O | Output | Address |
| DAT_O | Output | Data master → slave |
| DAT_I | Input | Data slave → master |
| WE_O | Output | Write Enable: '1' = write |
| SEL_O | Output | Active byte select |
| STB_O | Output | Strobe: active transaction on this cycle |
| CYC_O | Output | Cycle: master holds the bus |
| ACK_I | Input | Acknowledgment: slave completes the transaction |
| ERR_I | Input | (optional) Error |
| RTY_I | Input | (optional) Retry |
Read and Write Cycles
Fundamental rule: until ACK is received, the master holds STB, CYC, ADR, and WE stable.
VHDL Implementation
A typical Wishbone slave contains a register array accessible for read/write operations. The logic is simple: when CYC and STB are active, the slave decodes the address, performs the read or write, then asserts ACK to complete the transaction.
Wishbone exercises will be available soon on the platform to practice implementing a Wishbone slave and master.
Pipeline Mode (Wishbone B4)
Wishbone revision B4 adds pipeline mode: the master can issue new requests without waiting for ACK on the previous one. The STALL signal allows the slave to pause new requests.
Additional signal:
STALL_I : in std_logic -- slave cannot accept a new requestKey Points
- CYC vs STB: CYC indicates the master "owns" the bus (no other master can access it), STB indicates an active transaction on this specific cycle. In simple designs, CYC = STB
- ACK latency: the slave can send ACK in the same cycle as STB (zero latency) or after several cycles (N cycles latency)
- SEL: each bit selects a byte lane — useful for byte and half-word accesses on a 32-bit bus
Comparison with AXI
| Criterion | Wishbone | AXI4 |
|---|---|---|
| Complexity | Simple | Complex |
| Separate channels | No | Yes (5 channels) |
| Native burst | Yes (B4) | Yes |
| Multi-master | Yes (with crossbar) | Yes (with interconnect) |
| License | Open source | ARM — free but proprietary |
| Typical use | Open-hardware SoC | Zynq, commercial SoCs |