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.

SignalDirection (Master)Description
CLK_IInputShared clock
RST_IInputSynchronous active-high reset
ADR_OOutputAddress
DAT_OOutputData master → slave
DAT_IInputData slave → master
WE_OOutputWrite Enable: '1' = write
SEL_OOutputActive byte select
STB_OOutputStrobe: active transaction on this cycle
CYC_OOutputCycle: master holds the bus
ACK_IInputAcknowledgment: slave completes the transaction
ERR_IInput(optional) Error
RTY_IInput(optional) Retry

Read and Write Cycles

Wishbone timing diagrams

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 request

Key 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

CriterionWishboneAXI4
ComplexitySimpleComplex
Separate channelsNoYes (5 channels)
Native burstYes (B4)Yes
Multi-masterYes (with crossbar)Yes (with interconnect)
LicenseOpen sourceARM — free but proprietary
Typical useOpen-hardware SoCZynq, commercial SoCs