AMBA AHB · Module 4
Transfer Types Overview
How HTRANS classifies every AHB cycle — NONSEQ, SEQ, IDLE, BUSY — the grammar of how they sequence a burst, and how a committed transfer is identified.
This opens Module 4 — Transfer Types (HTRANS), which takes the transfer-type signal you met at the encoding level in chapter 3.3 and examines each type, its behaviour, and its bugs in depth. This overview chapter sets up the module: it organizes the four types (NONSEQ, SEQ, IDLE, BUSY) into a clear structure, shows the grammar by which they sequence a bus session, and previews how a committed transfer is identified — the thread that runs through the whole module. If chapter 3.3 was "what are the HTRANS encodings," Module 4 is "how each type behaves, when to use it, and what breaks when you get it wrong."
1. What Is It?
The four HTRANS transfer types classify what is happening on the bus every single cycle. We organize them as a 2×2 — real transfer vs non-transfer crossed with starts vs continues:
- NONSEQ (10) — a real transfer that starts: the first beat of a burst, or a standalone single transfer.
- SEQ (11) — a real transfer that continues: a subsequent beat of a burst, with the address following the burst pattern.
- IDLE (00) — a non-transfer, not in a burst: the bus is doing nothing this cycle.
- BUSY (01) — a non-transfer that pauses inside a burst: the master is mid-burst but cannot present the next beat yet, and the burst stays alive.
The module-level framing: HTRANS is the narrator of the bus. On every cycle, exactly one transfer type is active, and that type tells the subordinate and interconnect whether real work is happening and how this cycle relates to a burst. Module 4 walks each type (4.2 IDLE, 4.3 BUSY, 4.4 NONSEQ, 4.5 SEQ), then covers how HTRANS controls bus activity (4.6), how to identify a committed transfer (4.7), and the classic HTRANS bugs (4.8). This overview gives you the map.
2. Why Does It Exist?
The transfer-type concept exists because a subordinate and the interconnect need, every cycle, to know two things: is there a real access this cycle, and how does it relate to a burst — and one signal answering both is the efficient way to provide it.
We covered the deep "why" in chapter 3.3, so here the focus is on what this module exists to teach: the four types are not equally simple, and each carries behaviour and pitfalls worth a dedicated treatment. NONSEQ and SEQ define burst structure (start vs continue) and most of a master's real traffic is one or the other. IDLE is deceptively important — it is the bus's resting state and mishandling it causes phantom accesses. BUSY is the subtle one — a non-transfer that keeps a burst alive, easily confused with a wait state. So the module exists because each type has its own correct usage and its own failure modes, and treating them one at a time builds the precise understanding that the single encoding chapter (3.3) could only sketch.
The other thing this module exists to nail down is the identification of a committed transfer — the rule that ties HTRANS to HSEL and HREADY (chapter 4.7). It is not enough to see NONSEQ or SEQ on the bus; a subordinate must combine the transfer type with its select (HSEL) and the completion gate (HREADY) to know a real access is actually committed to it this cycle. This identification rule is where most HTRANS-related bugs live, and the module builds toward it. So Module 4 exists to turn "I know the four encodings" into "I can correctly drive, recognize, and debug transfer types in real logic."
3. Mental Model
Model the transfer types as a train conductor's status calls along a route.
A train (a burst) runs a route. At each moment the conductor calls a status:
- NONSEQ = "departing the first station" — the train is starting its journey (or making a single stop).
- SEQ = "arriving at the next scheduled station" — continuing the route to the next stop in sequence.
- BUSY = "held at a signal, still on the route" — paused, but the journey is not abandoned; the next station is still coming.
- IDLE = "the train is in the depot" — not running a route at all.
Anyone listening (the subordinate) knows from the status call exactly what is happening: serve a real stop (NONSEQ/SEQ), wait through a hold without ending the route (BUSY), or stand down (IDLE). The status is called every moment; there is never silence.
Watch a full session's status calls:
A session: IDLE, NONSEQ, SEQ, BUSY, SEQ, IDLE
6 cyclesThe model's lesson: HTRANS calls the status every cycle, and the four calls form a grammar — a burst is always NONSEQ then SEQ…, BUSY may pause it, IDLE surrounds it. Learn to read the HTRANS track as a sequence of status calls and an AHB capture becomes a narrated journey.
4. Real Hardware Perspective
In hardware, the transfer type drives whether the subordinate does real work, and this module's chapters each examine one type's hardware behaviour — this overview establishes the shared mechanism.
Every cycle, the master drives HTRANS, and a subordinate uses it (together with HSEL and HREADY) to decide whether to perform an access. On NONSEQ or SEQ with its select asserted and the bus advancing, a subordinate commits to a real access; on IDLE or BUSY it performs no access and responds OKAY. So at the hardware level, HTRANS is the qualifier that gates real work — a subordinate that ignored it would access on every cycle, including idle ones (a bug Module 4.8 catalogues).
The hardware distinctions that the per-type chapters develop, previewed here:
- NONSEQ vs SEQ differ in what the address does — NONSEQ presents a new (non-sequential) address; SEQ presents the next address in the burst pattern. A subordinate optimizing for bursts uses this to anticipate (chapters 4.4, 4.5).
- IDLE vs BUSY are both non-transfers, but BUSY keeps a burst's context alive while IDLE does not — a subordinate tracking a burst must treat them differently (chapters 4.2, 4.3).
- HTRANS combined with HSEL and HREADY is what actually identifies a committed transfer — the central rule developed in chapter 4.7.
So the hardware throughline of the module is: HTRANS qualifies real work, the four types have distinct behaviours, and correct identification of a committed transfer requires combining HTRANS with HSEL and HREADY. This overview plants those threads; the per-type chapters develop each.
5. System Architecture Perspective
At the system level, the transfer types are the language of bus activity that the whole interconnect and every subordinate speak — and getting that language right is foundational to correct, efficient operation.
The types directly shape burst-based performance (the system's bandwidth story from Module 2). NONSEQ and SEQ express burst structure, which memory controllers use to anticipate and pipeline accesses; BUSY lets imperfect data sources sustain bursts; IDLE keeps the bus cleanly at rest between operations. So the transfer types are how the system's traffic patterns — streams, bursts, pauses, idle — are communicated on the bus, and the memory subsystem's efficiency depends on them being driven correctly. A master that mis-marked its burst beats (wrong SEQ/NONSEQ) would defeat the memory's burst optimization, a system-level performance loss.
The types are also central to correctness and debug at the system level. Because every cycle is classified, an AHB capture's HTRANS track is the first thing an engineer reads to understand what a master is doing and to spot anomalies — a missing IDLE, a phantom access on an idle cycle, a burst with wrong continuation marking. So the transfer types are the system's diagnostic vocabulary: bus monitors, protocol checkers, and debug tools all key off HTRANS to validate behaviour and localize bugs. Module 4.8 catalogues the classic HTRANS bugs precisely because they are common and consequential at the system level.
So at the system level, the transfer types are simultaneously the performance language (expressing bursts for memory optimization) and the correctness/debug language (classifying every cycle for validation) of an AHB system. This module's depth on each type is what turns "I know the encodings" into the fluent reading and correct driving of that language that real design and debug require.
6. Engineering Tradeoffs
As a module overview, the key tradeoffs here are about why the four-type design is what it is — the per-type chapters cover each type's specific tradeoffs.
- Four types vs fewer. AHB uses four transfer types rather than, say, a single "valid" bit, because the bus genuinely needs to distinguish four situations: real-start (NONSEQ), real-continue (SEQ), idle (IDLE), and mid-burst-pause (BUSY). A simpler scheme could not express burst structure or mid-burst pauses cleanly. The four-type design trades a 2-bit signal for the ability to express all the situations a pipelined, bursting bus encounters — a good trade.
- Explicit types vs inferred activity. Marking every cycle's type explicitly (rather than inferring activity from other signals) costs the HTRANS signal but gives unambiguous, glitch-free classification — essential on a pipelined bus where a stale address must be clearly distinguishable from a real one. Explicit classification is worth the signal.
- Per-type behaviour vs uniform handling. Because each type behaves differently (IDLE/BUSY are non-transfers, NONSEQ/SEQ are real, BUSY keeps a burst alive), subordinates need per-type handling logic — more complex than treating all cycles uniformly, but necessary for correct burst and idle behaviour. The complexity is modest and unavoidable.
- Identification rule (HTRANS + HSEL + HREADY) vs simpler. Requiring three signals to identify a committed transfer is more than "just look at HTRANS," but it is exactly what makes selection (HSEL), timing (HREADY), and activity (HTRANS) compose correctly on a pipelined multi-subordinate bus. The three-signal rule is the price of correct composition.
The throughline: the four-type design and the three-signal identification rule are the minimum needed to classify every cycle unambiguously on a pipelined, bursting, multi-subordinate bus. The module's per-type chapters explore each type's specific tradeoffs; this overview establishes that the overall design is a deliberate, well-fitted answer to the bus's classification needs.
7. Industry Example
Trace the transfer types across a realistic master's activity to see the grammar in action.
A DMA engine performs a block transfer, fed by a FIFO, on an otherwise-quiet bus.
- Bus at rest (IDLE). Before the DMA starts, the bus is idle — the master drives IDLE, subordinates ignore it and respond OKAY. This is the bus's resting state (chapter 4.2).
- Burst start (NONSEQ). The DMA begins its block transfer with NONSEQ at the first address — a new, non-sequential access that opens the burst (chapter 4.4). The memory subordinate, seeing NONSEQ with the burst type, knows a burst is starting and prepares.
- Burst continuation (SEQ). The next beats are SEQ with incrementing addresses (chapter 4.5) — the memory streams them efficiently, having anticipated the pattern.
- A mid-burst pause (BUSY). The DMA's FIFO momentarily runs dry. Instead of abandoning the burst (which would waste the arbitration and burst setup) or using IDLE (which would end the burst), the DMA drives BUSY (chapter 4.3), holding the next address. The burst stays alive; the memory waits without losing context.
- Resume and finish (SEQ, then IDLE). The FIFO refills; the DMA returns to SEQ and completes the burst, then drives IDLE when done. The bus returns to rest.
Every cycle of this transfer was classified by HTRANS, and the grammar held: NONSEQ opened the burst, SEQ continued it, BUSY paused without ending it, IDLE surrounded it. A bus monitor reading the HTRANS track would see exactly this narrative — and would flag any deviation (an access on an IDLE cycle, a burst with a missing or wrong continuation marking) as a bug. This is the transfer-type language doing its everyday work, and the per-type chapters dissect each call in the sequence.
8. Common Mistakes
9. Interview Insight
The transfer-types overview tests whether you see HTRANS as a grammar, not just an encoding.
The answer that lands gives the four types, the grammar, and the identification rule: "HTRANS classifies every cycle: NONSEQ is the first beat of a burst or a single transfer, SEQ is a burst continuation, IDLE is no transfer, BUSY is a pause inside a burst that keeps it alive. A burst is always NONSEQ then SEQ, BUSY may pause it, IDLE surrounds it — every cycle has exactly one type. And a transfer is only committed to a subordinate when NONSEQ or SEQ coincides with that subordinate's HSEL and HREADY high." The grammar and the committed-transfer rule are the senior signals.
10. Practice Challenge
Reason from the grammar and the identification rule.
- Map the types. Place the four HTRANS types in the real/non-real × start/continue 2×2 and give each a one-line meaning.
- State the grammar. Write the transfer-type sequence for a 4-beat burst that pauses once mid-burst, surrounded by idle.
- Apply identification. State the three-signal rule for recognizing a committed transfer and why each signal is needed.
- Read the waveform. From Figure 2, label each cycle's type and identify the burst's start, pause, and resume.
- Spot the consequence. For each of (a) accessing on IDLE and (b) using IDLE instead of BUSY mid-burst, state what breaks.
11. Key Takeaways
- HTRANS classifies every cycle into exactly one of four types: NONSEQ (real, starts), SEQ (real, continues), IDLE (non-transfer, not in a burst), BUSY (non-transfer, pauses in a burst).
- The types form a grammar: a burst is NONSEQ then SEQ…; BUSY may pause it; IDLE surrounds it. There is never an unclassified cycle.
- HTRANS qualifies, it does not act alone — a committed transfer requires NONSEQ or SEQ together with HSEL (selected) and HREADY (advancing). This three-signal rule is central (chapter 4.7).
- Each type has distinct behaviour and pitfalls — IDLE/BUSY are non-transfers handled differently; NONSEQ/SEQ define burst structure. The per-type chapters develop each.
- The types are the system's performance and debug language — expressing bursts for memory optimization, and classifying every cycle for validation and bug-spotting.
- Transfer types are a grammar, not just an encoding — easy to encode, easy to misuse, and the misuses (phantom accesses, abandoned bursts, wrong marking) are consequential.
12. What Comes Next
This overview sets up the module. The next chapters examine each type in depth, beginning with the bus's resting state:
- 4.2 — IDLE Transfers (coming next) — IDLE in detail: when it is used, how subordinates must respond, and the phantom-access bug.
- 4.3 — BUSY Transfers (coming soon) — BUSY: pausing inside a burst without abandoning it, and the IDLE-vs-BUSY-vs-wait-state distinctions.
To revisit the HTRANS encoding this module deepens, see HTRANS; for the burst structure the types express, see Single Transfer vs Burst Transfer; for the HSEL and HREADY that combine with HTRANS to identify a transfer, see HSEL and HREADY & HREADYOUT. For the broader protocol map, see the AMBA family overview.