Wishbone · Module 20
Design Trade-offs
A protocol-to-protocol seam neither specification describes, six ways to get it wrong of which five are legal, and the first defect in twelve modules that a conformance checker actually catches.
Chapter 20.3 ended with three readings of the same system, all true, decided by the slaves rather than the protocol. In a real SoC the answer is usually "both", and then the decision is not which bus — it is the seam between them.
Module 19's seams were core-to-bus and bus-to-register. This one is protocol-to-protocol, and neither specification describes it.
1. The Seam
The amber box is the only component in that figure that no specification covers. B3 describes a Wishbone master and a Wishbone slave. IHI 0022H describes an AXI master and an AXI slave. The thing that makes one look like the other is entirely yours.
// ── THE THREE THINGS IT HAS TO GET RIGHT ────────────────────────────────
//
// 1. THE BYTE LANES MUST SURVIVE.
// Wishbone "The array boundaries are determined by the granularity of
// a port." (B3, DESC SEL_O)
// AXI "There is one write strobe for each 8 bits of the write
// data bus, therefore WSTRB[n] corresponds to
// WDATA[(8n)+7:(8n)]." (IHI 0022H, A3.4)
// The two definitions agree, so SEL_O maps to WSTRB one bit to one
// bit. It is the easiest thing in this module to get right and the
// easiest to leave out, because a bridge that drives WSTRB to all-ones
// works perfectly for every full-word access.
//
// 2. THE TERMINATION MUST MEAN THE TRANSFER HAPPENED.
// B3 RULE 3.35 makes [ACK_O] the answer to the request. If this bridge
// asserts [ACK_O] before the AXI side has answered, the Wishbone master
// is told a write committed that is still in flight - and on a READ it
// is handed data that has not arrived. NOTHING IN B3 IS VIOLATED by
// doing this: the bridge is a conformant slave that simply answers
// early. The lie is in the meaning, not in the timing rules.
//
// 3. THE ERROR MUST SURVIVE TRANSLATION.
// AXI's SLVERR is "Slave error... to the originating master"; Wishbone
// has [ERR_O]. Mapping one to the other is arithmetic. Dropping it
// turns a failed access into a successful one, which is Chapter 19.4's
// ERR_SWALLOWED finding arriving at a different seam.
//2. The Bridge Works — Measured, Not Asserted
SIM I runs the same sixteen records through the bridge and, alongside, straight onto a Wishbone RAM with the same latency. The bridge is the only difference between the two.
answers bridged 16 direct 16
order signature bridged 0x98b97cbd direct 0x98b97cbd
out-of-order bridged 0 direct 0
errors reported bridged 0 direct 0
EVERY VALUE AND EVERY ORDER IDENTICAL. A protocol
translation sat in the middle of all 16 accesses and
nothing the master could observe changed.
bridge bookkeeping
Wishbone requests forwarded to AXI 16
answers returned to Wishbone 16
non-OKAY responses seen 0
AXI slave writes / reads 7 / 9
clocks to finish bridged 146 direct 82
-> THE COST OF THE SEAM IS 64 CLOCKS over 16 accesses.
And it cannot be recovered by making the AXI side
deeper, because the Wishbone master supplies one
request at a time. A bridge cannot use depth its
other side cannot express - which is why Chapter
20.5 argues the seam, not the bus, is the decision.Every value identical, every order identical, sixteen requests forwarded and sixteen answered. A protocol translation sat in the middle of every access and nothing the master could observe changed.
3. Six Ways To Get The Seam Wrong
A checker that has only ever passed has not been shown to check anything. Six checkers, seven complete systems, each differing from the correct one by exactly one parameter.
=== NEGATIVE-CONTROL GATE ===
one stimulus set, seven systems. Each broken system
differs from the correct one by exactly one parameter.
checker corr STRB EARL RESP COUP BRST REORD
WRITE STROBES SURVIVE PASS FAIL PASS PASS PASS PASS PASS
ONE RESPONSE PER REQUEST PASS PASS FAIL PASS PASS PASS PASS
ERROR SURVIVES TRANSLATION PASS PASS FAIL FAIL PASS PASS PASS
CHANNELS ARE INDEPENDENT PASS PASS PASS PASS FAIL PASS PASS
A BURST IS N TRANSFERS PASS PASS PASS PASS PASS FAIL PASS
RESPONSES MATCH THEIR REQUESTS PASS PASS PASS PASS PASS FAIL FAIL
raw numbers behind those verdicts
column strb early errs alone beats RID order
correct 0 0 3 7 8 0x00005500
STRB_DROP 4 0 3 7 8 0x00005500
EARLY_ACK 0 16 0 7 8 0x00005500
RESP_IGNORE 0 0 0 7 8 0x00005500
AR_R_COUPLED 0 0 3 0 8 0x00005500
BURST_AS_ONE 0 0 3 7 2 0x00000004
REORDER 0 0 3 7 8 0x00000055Six checkers, six targets, six detections, and the correct system passes all six:
CHECKERS REQUIRED: >= 5
CHECKERS DECLARED: 6
CHECKERS PASSING THE CORRECT SYSTEM: 6/6
EACH CHECKER FAILS ITS OWN TARGET:
6/64. The Off-Diagonal Cell Is Worth More Than The Diagonal
READ THE OFF-DIAGONAL. EARLY_ACK fails TWO checkers,
and the second one is worth more than the first. A
bridge that terminates the Wishbone cycle when the AXI
request is ACCEPTED has already answered by the time the
SLVERR arrives, so the error is not translated - it is
not there to translate. Its error count is 0 against
the correct system's 3. ONE WRONG DECISION ABOUT WHAT
A TERMINATION MEANS SILENTLY DISABLED THE ENTIRE ERROR
PATH, and nothing in either specification was violated.EARLY_ACK fails two checkers, and the second one is not obviously related to the first.
A bridge that terminates the Wishbone cycle when the AXI request is accepted rather than answered has already told the master "done" by the time the SLVERR arrives. The error is not mistranslated. It is not there to translate. Its error count is 0 against the correct system's 3.
One wrong decision about what a termination means silently disabled the entire error path — and RULE 3.35 was not violated, because the bridge is a conformant Wishbone slave that simply answered sooner than it should have. The lie is in the meaning, not in the timing.
5. Five Of Six Are Legal — And The Sixth Breaks A Nineteen-Module Streak
FIVE OF THESE SIX ARE LEGAL. A bridge that drops byte
strobes, one that answers early, one that discards a
SLVERR, a slave that collapses a burst, a slave that
reorders across IDs - none of them violates Wishbone B3
or IHI 0022H. They are all decisions somebody could
defend in a review.
AR_R_COUPLED IS THE EXCEPTION AND IT IS THE POINT.
"VALID signal of the AXI interface sending information
must not be dependent on the READY signal of the AXI
interface receiving that information." (A3.3.1)
That defect breaks a rule, so a conformance checker
finds it without knowing anything about this design.
Across Modules 9-19 the count of published defects a
bus-level protocol checker would catch stood at ONE.
Module 20 adds the second.
Note what it took: the defect is invisible unless the
stimulus withholds RREADY. The correct column's "alone"
count is 7 and the coupled column's is 0 - and if
this testbench had left RREADY tied high, as both of
this module's masters do, both numbers would be zero
and the checker would have proved nothing.6. The Same Invariants As Assertions
// ── GROUP 3: THE BRIDGE — owned by neither specification ─────────────
//
// Every property below is this design's own. There is no rule number to
// put beside any of them, which is the whole reason Module 20 measures
// the bridge rather than citing it.
// The byte lanes must survive translation. SEL_O and WSTRB are defined
// identically by the two specifications, so this is a wire, and it is
// the easiest thing in the module to leave out.
property p_strobes_survive;
@(posedge clk_i)
(wvalid_i && wready_i) |-> (wstrb_i == sel_i);
endproperty
a_strobes_survive: assert property (p_strobes_survive);7. Choosing
Ask about the slaves and the master before asking about the bus.
| if | then | evidence |
|---|---|---|
| every slave answers in a clock or two | the coupling costs almost nothing and the channels buy almost nothing | 20.3 §3 — Wishbone ahead by 2 clocks |
| slaves are slow and the master keeps several requests in flight | the decoupling is worth a lot | 20.3 §4 — AXI finishes in 60% of the time |
| slaves are slow and the master issues one at a time | AXI is the worst option in the table | 20.3 §4 — 39% slower than Wishbone |
| you need answers in issue order | AXI tells you to serialise, which is Wishbone's permanent state | A6, and 20.3 §6 |
| you are moving large contiguous blocks | AXI's burst descriptor is genuinely stronger | 20.3 §5 — 1 address against 8 |
| you are bridging one onto the other | the seam is the design, and the narrower side caps the pair | §2 above |
The decision that is almost always wrong is "AXI because it is the standard, driven one transaction at a time." That configuration was measured here and it is slower than the simpler protocol on identical work, while costing five channels' worth of bookkeeping — including the bookkeeping that Chapter 20.4 §5 records getting wrong.
8. What Module 20 Established
| the difference, normatively | RULE 3.35 couples; A3.3.1 decouples — both quoted from source |
| what it costs to compare badly | the sign of the difference reverses between two slave latencies |
| what the channels buy | 14 decoupled acceptances, 35 clocks of read-and-write concurrency, 33 clocks saved |
| what they cost | 32 clocks when unused; 5 handshake pairs instead of 1 |
| the ordering price | AXI's own remedy is to stop being outstanding — A6 |
| the seam | 64 clocks, and depth the other side cannot express is inert |
| defects seeded | 6, of which 5 are legal under both specifications |
| protocol-checker catchable, Modules 9–20 | 2 |
Continue learning
Related tutorials
- Related topic
Integration Trade-offs
APB's own signal table calls the master an APB bridge. Building that bridge from Wishbone costs a clock nothing can remove, and one wrong decision about when a phase may end silently disabled every write and every error.
- Related topic
Multi-Master Systems
Byte-identical masters against two interconnects. The ownership timeline names clock 19, and three checkers are validated against the defects they claim to catch.
- Related topic
Bus Ownership
Ownership has two directions, not one. Three targeted interconnect defects measured against one stimulus — and a conformance monitor that finds every one of them faultless.
- Related topic
Arbitration Logic
The integrated arbiter: one stimulus against two policies with everything downstream identical, an audit across every situation in the module, and five arbiters — three broken — all found perfectly conformant.
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.
