Skip to content
VLSI Mentor

Wishbone · Module 3

Transaction Lifecycle

One Wishbone transaction from a master's decision to act through the slave's termination and back to the caller: what is fixed by the protocol, what every implementation may vary, and what a real simulation of the assembled system shows at each step.

Chapter 3.6 followed information through the blocks. This chapter follows a transaction through time, and closes Module 3 by running the assembled system.

What is the high-level lifetime of one Wishbone transaction, from a master's decision to act through slave termination and back to the caller?

This is deliberately not the handshake tutorial. Module 5 owns the cycle-by-cycle timing rules; what belongs here is the shape of a transaction's life and, crucially, which parts of it may vary between conforming implementations.

1. The Lifecycle

A Wishbone transaction traced through four participants over its whole life. A local client asks the master to perform an access. The master latches the request and establishes the transaction by asserting the cycle and strobe qualifiers together with the address, direction, byte selects and write data. The interconnect decodes the address, masks it to a local offset, and strobes exactly one slave. The slave observes that both its cycle and strobe inputs are asserted and begins work. If it needs time it simply withholds all three terminations, and the master holds the entire request unchanged while waiting, because Wishbone Classic has no separate stall signal. When the slave is ready it asserts exactly one termination and, on a read, drives read data in that same cycle. The interconnect routes the termination and the data back. The master captures the data in the termination cycle, closes the bus cycle, and reports completion to its client.One Wishbone Classic transactionClientMASTERINTERCONSLAVEdo an accessESTABLISH: CYC=1,STB=1, ADR, WE, SEL,DATdecode, mask tooffset, strobe oneslaveACTIVE: notermination yet —this is the waitrequest heldUNCHANGEDTERMINATE: one ofACK / ERR / RTY,plus DAT_Oroute response tothe mastercapture in thatcycle, close, report
Figure 1 — one transaction end to end. The active phase is the only part with variable length.

Two observations about the shape.

The only message the slave sends during the active phase is silence. That is not a drawing convenience — Classic has no stall signal, so withholding all three terminations is how a slave says not yet. A reader coming from a valid/ready protocol expects a signal here and there is none.

The master's contribution to the active phase is also passive: it holds. RULE 3.60 makes the request signals meaningful under STB_O, so the master's obligation for the whole duration is to not move.

2. What Is Fixed, and What May Vary

This is the distinction that makes the lifecycle useful rather than a description of one design.

Fixed by the specificationVaries by implementation
QualifiersCYC_O asserted whenever STB_O is (RULE 3.25)how many transfers a cycle contains
Request validityqualified by STB_O (RULE 3.60)
Who may terminateonly in response to CYC_I & STB_I (RULE 3.35)
How it endsexactly one of three (RULE 3.45)which one, and under what conditions
Active-phase lengthone cycle to many
Termination timingcombinational from inputs, or registered
Read-data sourcethe addressed slavecombinational read mux, or registered
Selectiondecode structure, topology
Unmapped behaviourentirely the integrator's

Read the right column as the list of things you cannot assume about someone else's Wishbone block. A master written against "slaves answer in one cycle" is not a Wishbone master; it is a master that works with the slaves it was tested against.

And note what is absent from the fixed column: any timeout. Nothing in the protocol bounds the active phase. A slave that never terminates hangs the master indefinitely, and the answer must come from the system — the default slave of Chapter 3.5 for unmapped addresses, and a deliberate design decision for everything else.

3. Waveform — The Same Transaction, Twice

Transaction life: immediate, then delayed

10 cycles
A Wishbone Classic bus over ten clock cycles showing two transactions. The first begins in cycle one when the master asserts both cycle and strobe with an address, and the slave acknowledges in that same cycle, so the active phase is one cycle long and read data is valid there. Cycle two is idle. The second transaction begins in cycle four and the slave is busy: it withholds acknowledge through cycles four, five and six while the master holds the address, direction and byte selects completely unchanged, because Wishbone Classic has no stall signal and silence is the wait. In cycle seven the slave asserts acknowledge and drives read data in that same cycle, the master captures it, and the cycle closes. The master's behaviour is identical in both cases.establish + terminate in one cycleestablish + terminate inone cycleestablish; slave is busyestablish; slave is busyACTIVE: silence is the waitACTIVE: silence is the waitterminate; capture hereterminate; capture hereCLK_ICYC_OSTB_OADR_O--0x4000_2008----0x4000_10040x4000_10040x4000_10040x4000_1004----WE_OACK_IDAT_I--0x0000_005A----------------t0t1t2t3t4t5t6t7t8t9
Figure 2 — an immediate slave and a slave that takes three cycles. The master's logic is identical; only the active phase differs. Architectural orientation, not the Module 5 handshake.

Cycles 5 and 6 are the chapter. CYC_O and STB_O are asserted, ADR_O shows a continuation rather than a new value, and no termination signal exists to look at. The slave is working and the only evidence is the absence of an answer.

Compare the master's behaviour in the two transactions: it is identical. It established, it held, it captured on termination. The first took one cycle and the second took four, and nothing in the master knew or cared. That is the property the whole module has been building toward, and it is why Chapter 3.3 insisted the master must not know latency.

4. Running the Assembled System

Module 3's three modules — 3.3's master, 3.4's slave and 3.5's INTERCON — were composed in 3.6 as wb_soc. The whole system elaborates and runs.

The system under test. One wb_copy_master, one wb_intercon, three instances of wb_gpio_slave at 0x4000_0000, 0x4000_1000 and 0x4000_2000, 4 KiB each. gpio2's input pins are held at 0x5A.

Three scenarios, and the actual trace.

Azvya Education Pvt. Ltd.VLSI Mentor
Snippet
=== wb_copy_master -> wb_intercon -> 3x wb_gpio_slave ===

-- A: copy gpio2.IN (0x4000_2008) -> gpio1.OUT (0x4000_1004) --
  t=65  ADR=40002008 WE=0 | s_stb=100 s_adr=008 | ack=1 err=0 DAT_I=0000005a
  t=75  ADR=40001004 WE=1 | s_stb=010 s_adr=004 | ack=1 err=0 DAT_I=00000000
  -> done, error_o=0
     gpio1 pins_out = 5a

-- B: unmapped destination 0x5000_0000 --
  t=115 ADR=40002008 WE=0 | s_stb=100 s_adr=008 | ack=1 err=0 DAT_I=0000005a
  t=125 ADR=50000000 WE=1 | s_stb=000 s_adr=000 | ack=0 err=0 DAT_I=00000000
  t=135 ADR=50000000 WE=1 | s_stb=000 s_adr=000 | ack=0 err=1 DAT_I=00000000
  -> done, error_o=1

-- C: write to read-only gpio0.IN (0x4000_0008) --
  t=175 ADR=40002008 WE=0 | s_stb=100 s_adr=008 | ack=1 err=0 DAT_I=0000005a
  t=185 ADR=40000008 WE=1 | s_stb=001 s_adr=008 | ack=0 err=1 DAT_I=00000000
  -> done, error_o=1

terminations: ACK=4  ERR=2      conformance violations: 0

What each scenario demonstrates.

A — the architecture actually works. The read at t=65 strobed slave 2 only (s_stb=100), the address arrived as local offset 008, and DAT_I came back as 0x5A — the value physically present on gpio2's pins. The write at t=75 strobed slave 1, offset 004, and gpio1 pins_out became 0x5A. A value moved between two peripherals through decode, broadcast, selection and response merge, and no slave contains an address constant.

B — the default slave earns its place. At t=125 the address was unmapped: s_stb=000, nothing strobed, and no termination. One cycle later err=1 — the INTERCON's registered one-shot answering on behalf of nobody. The master received a termination and reported an error rather than hanging. Remove that logic and this scenario is a dead system.

C — termination is a three-way choice, and it is load-bearing. The write to a read-only register strobed the correct slave, which classified the access, declined to change state, and ended the transfer with ERR_O rather than ACK_O. The master's error_o reflected it. A design with only an acknowledge would have reported success on a write that did not happen.

Zero conformance violations across all three, with live checks on RULE 3.25 (CYC_O whenever STB_O), RULE 3.45 (at most one termination at the master), RULE 3.35 (no slave terminated unstrobed), and the INTERCON's one-hot-or-zero strobe.

5. The Module 3 Verification Checklist

Every architectural property Module 3 established, in one place, with what it protects and where it belongs.

#PropertyBound atProtects against
1`STB_O-> CYC_O` (RULE 3.25)master
2request stable while presented and unterminated (RULE 3.60)mastera transfer changing identity mid-flight
3STB_O not withdrawn before terminationmastera slave completing into nothing
4termination only under CYC_I & STB_I (RULE 3.35)slavea slave answering another slave's transfer
5at most one of ACK/ERR/RTY (RULE 3.45)slaveambiguous endings
6unselected slave drives zero read dataslavecorruption of a merged return path
7read-only state unchanged by a terminating writeslavereporting failure while changing state
8at most one slave strobedINTERCONtwo slaves answering one transfer
9no strobe without a qualified master transferINTERCONslaves acting on nothing
10master sees at most one terminationINTERCON and mastera merged response neither endpoint owns
11unmapped transfer terminates within a boundINTERCONthe hang
12a termination corresponds to a strobed slaveINTERCONa response from an unselected slave

Two structural observations.

Property 10 is bound twice deliberately — at the INTERCON that could create the fault and at the master that suffers it. It is the one fault for which no endpoint is responsible, so binding it only where the obligation formally sits would leave it unchecked.

Property 11 is the only one with a time bound, because it is the only liveness claim. Eventually terminates cannot be refuted by a finite trace, so bounding it is what makes it checkable — and choosing the bound forces the default slave's latency to be stated.

6. What the Learner Should Now Be Able to Answer

Module 3's test is not signal recall. It is these nine questions.

QuestionAnswer
Who owns each path?Master: address, direction, selects, write data, both qualifiers. Slave: read data, termination.
Who starts?Only a master. A slave never initiates.
Who selects?The INTERCON, by strobing exactly one slave. Never the slave.
Who responds?The strobed slave, and only it.
Where does data flow?Request fans out; response fans in. One transformation: address → local offset, inside the INTERCON.
Where can a transfer stall?Only in the active phase, and only because a slave withholds termination.
Where can a wrong response originate?Two slaves strobed; an unstrobed slave driving data; or a response merged in the INTERCON.
What does the INTERCON know that the slave does not?The address map, the topology, and which other slaves exist.
What does the slave know that the master does not?What the local offset means, and how long the access will take.

7. Common Mistakes

"A Wishbone transaction takes a fixed number of cycles."

Wrong mental model: the protocol defines a transfer's duration.

Concrete bug: a master that samples read data a fixed number of cycles after asserting its strobe, which works against the slave it was tested with and fails against any other.

Observable evidence: reads returning the previous transfer's data, or zero, when a new peripheral is added.

Correct model: the active phase has no fixed length. The master learns it is over by observing a termination, and read data is meaningful in that cycle only.

"There must be a signal that says the slave is busy."

Wrong mental model: every protocol has a stall or ready indication.

Concrete bug: a master waiting for a signal that does not exist, or an INTERCON inventing one and coupling both ends to a private convention.

Observable evidence: a master that never issues a second transfer, or a fabric that only works with its own slaves.

Correct model: in Wishbone Classic the absence of a termination is the wait. B4's optional pipelined mode does add a stall signal, and conflating the two modes is a common source of this error.

"An unmapped access will produce an error somewhere."

Wrong mental model: the system has a sensible default.

Concrete bug: no default slave. Nothing is strobed, nothing terminates, and the master waits forever on a stray pointer.

Observable evidence: a reproducible hang on one address with every slave's strobe low.

Correct model: unmapped behaviour is entirely the integrator's. The default slave is something you build, and whether it errors or returns zeros is a policy choice the specification does not make.

"Learning the signal names is learning Wishbone."

Wrong mental model: the protocol is a table.

Concrete bug: a block that drives every signal with correct names and violates RULE 3.35 by terminating on STB_I alone — passing point-to-point and corrupting a shared system.

Observable evidence: a peripheral that works in a demo and breaks on integration.

Correct model: the signals encode a set of responsibilities. Module 3 taught who owns what, who selects, who terminates and what may vary. Module 4 now names the signals, and they read as answers rather than as vocabulary.

8. Interview Reasoning

Three phases.

Establish. The master latches its request and asserts both qualifiers together with the address, direction, byte selects and write data. The INTERCON decodes, masks the address to a local offset, broadcasts the request and strobes exactly one slave.

Active. The cycle is open and the master holds every request signal unchanged, because RULE 3.60 makes them meaningful only under the strobe. The slave works. If it needs time it withholds all three terminations — in Classic there is no stall signal, so silence is the wait.

Terminate. The slave asserts exactly one of acknowledge, error or retry, and on a read drives data in that same cycle. The INTERCON routes it back, the master captures, closes the cycle and reports.

What varies: the length of the active phase, whether a slave produces its response combinationally or from a register, the decode structure, the topology, and — entirely — what happens on an unmapped address.

What does not: that the cycle qualifier is asserted whenever the strobe is; that the request is qualified by the strobe; that termination is generated only in response to both qualifiers; and that exactly one termination ends a transfer.

The point worth landing: nothing in the protocol bounds the active phase. A slave that never terminates hangs the master, and the answer has to come from the system rather than from the specification.

9. Understanding Check

10. What's Next

Module 3 is complete, and its argument is one chain.

Wishbone names four roles and specifies two of them as interfaces, leaving the fabric to the integrator. The model is two levels: a master opens a cycle, presents transfers inside it, and exactly one addressed slave ends each with one of three terminations — which is why describing it as valid/ready renamed is wrong rather than imprecise. A master owns its request and holds it while refusing to know the map, the latency, the internals or the topology. A slave observes, decides and terminates while refusing to know its own base. The INTERCON does the four jobs neither endpoint may. Data flows out with one transformation and back with none. And a transaction's life has three phases of which only the middle one varies.

The system built from all of that runs, moves real values between peripherals, errors rather than hangs on an unmapped address, and violates none of the rules cited along the way.

What Module 3 has not done is define the signals. They have been named where a real interface required it and explained only as far as the architecture needed — CYC_O as tenure, STB_O as qualification, ACK_O/ERR_O/RTY_O as the three endings. None has had its own treatment.

What exactly does each Wishbone signal encode — its width, its direction, its permitted values, when it may change, what a master must do with it, what a slave must do with it, and what goes wrong when it is misused?

Module 4 — Wishbone Signals Deep Dive answers that signal by signal, beginning with the clock every transfer is referenced to. Module 5 then owns the handshake that binds them in time; it has not shipped yet, which is why it is bold rather than linked. The full path is on the Wishbone curriculum index.

Continue learning

Standards & specifications

Governing standard
Wishbone SoC Interconnection Architecture (OpenCores)(opens OpenCores in a new tab)

Defines the Wishbone signal set, the bus cycles built from it and the interface rules a portable IP core must follow. It deliberately leaves interconnect topology, address map and arbitration policy to the integrator, so those are system decisions rather than requirements of the specification.

This page also covers RTL structure, verification approach and debugging technique. Those are engineering practice built on the standard, not requirements the standard itself imposes.

Where this fits

Part of the Wishbone curriculum.