2026. 3. 20. 21:40ㆍAMBA
AXI(Advanced eXtensible Interface) 프로토콜에서 Burst 전송은 단일 주소로 여러 데이터를 연속 전송하는 핵심 기능이다.
실제로 axi burst, axi burst length, axi burst type 관련 질문이 매우 많은 만큼, 이번 글에서는 신호 정의부터 타입별 동작까지 한 번에 정리한다.
1. AXI Burst란?
Burst 전송은 하나의 주소 발행(Address Phase)으로 여러 개의 데이터(Data Beat)를 연속해서 전송하는 방식이다.
예를 들어, 시작 주소 0x0000에서 4번 데이터를 읽는다면 주소를 4번 발행하는 대신 Burst로 한 번에 처리한다.
Address Phase: AWADDR = 0x0000, AWLEN = 3 (4회 전송)
Data Phase: D[0], D[1], D[2], D[3] (4 Beat)
이렇게 하면 주소 발행 오버헤드가 줄고 대역폭 효율이 올라간다.
2. Burst 관련 핵심 신호
| 신호 | 방향 | 설명 |
|---|---|---|
| AWADDR / ARADDR | Master → Slave | Burst 시작 주소 |
| AWLEN / ARLEN | Master → Slave | Burst 길이 (전송 횟수 = AWLEN + 1) |
| AWSIZE / ARSIZE | Master → Slave | 1 Beat당 전송 바이트 크기 |
| AWBURST / ARBURST | Master → Slave | Burst 타입 (FIXED / INCR / WRAP) |
AWLEN (Burst Length)
실제 Beat 횟수 = AWLEN + 1
| AWLEN 값 | 실제 전송 횟수 |
|---|---|
| 0x0 | 1 Beat |
| 0x3 | 4 Beat |
| 0x7 | 8 Beat |
| 0xF | 16 Beat |
AWLEN = 3 → 4번 데이터 전송
AWLEN = 7 → 8번 데이터 전송
AXI4에서는 INCR Burst의 경우 최대 AWLEN = 255 (256 Beat)까지 가능하다.
WRAP과 FIXED는 최대 AWLEN = 15 (16 Beat)로 제한된다.
AWSIZE (Transfer Size)
1 Beat에 전송되는 데이터 바이트 수를 나타낸다.
| AWSIZE 값 | 1 Beat 전송 크기 |
|---|---|
| 0b000 | 1 Byte |
| 0b001 | 2 Bytes |
| 0b010 | 4 Bytes |
| 0b011 | 8 Bytes |
| 0b100 | 16 Bytes |
주의: AWSIZE는 데이터 버스 폭(Data Bus Width)을 초과할 수 없다.
32bit 버스라면 최대 AWSIZE = 0b010 (4 Bytes)이다.
3. Burst 타입 (AWBURST)
AWBURST/ARBURST는 2bit 신호로 Burst 주소 증가 방식을 결정한다.
| AWBURST[1:0] | 타입 | 설명 |
|---|---|---|
| 0b00 | FIXED | 주소 고정 (매 Beat마다 동일 주소) |
| 0b01 | INCR | 주소 증가 (순차적으로 증가) |
| 0b10 | WRAP | 경계 주소에서 감싸서 돌아옴 |
| 0b11 | Reserved | 사용 안 함 |
3-1. FIXED Burst
매 Beat마다 동일한 주소를 사용한다.
AWADDR = 0x0000, AWLEN = 3, AWBURST = FIXED
Beat 1: Address = 0x0000
Beat 2: Address = 0x0000
Beat 3: Address = 0x0000
Beat 4: Address = 0x0000
주로 FIFO에 반복 Write 하거나 동일 레지스터를 여러 번 읽을 때 사용한다.
3-2. INCR Burst (가장 흔히 사용)
매 Beat마다 주소가 AWSIZE만큼 증가한다.
AWADDR = 0x0000, AWLEN = 3, AWSIZE = 2 (4 Bytes), AWBURST = INCR
Beat 1: Address = 0x0000
Beat 2: Address = 0x0004
Beat 3: Address = 0x0008
Beat 4: Address = 0x000C
가장 일반적인 Burst 타입으로, 메모리 순차 읽기/쓰기에 사용된다.
캐시 Line Fill, DMA 전송 등 대부분이 INCR이다.
3-3. WRAP Burst
주소가 특정 경계(Boundary)에 도달하면 시작 주소로 돌아온다.
AWADDR = 0x0014, AWLEN = 3, AWSIZE = 2 (4 Bytes), AWBURST = WRAP
Wrap 크기 = 4 Bytes × 4 Beat = 16 Bytes
Wrap 경계 = (0x14 / 16) × 16 = 0x10 ~ 0x1F
Beat 1: Address = 0x0014
Beat 2: Address = 0x0018
Beat 3: Address = 0x001C
Beat 4: Address = 0x0010 ← 경계(0x1F)를 넘으면 시작(0x10)으로 Wrap
주로 CPU 캐시 Line 읽기에 사용된다.
4. Unaligned Transfer (비정렬 전송)
AWSIZE = 2 (4 Bytes), 정렬 기준 = 4 Byte 경계
AWADDR = 0x0002 → 비정렬 주소
첫 Beat: 0x0002 ~ 0x0003 (2 Byte만 유효)
이후 Beat: 정렬된 4 Byte씩 전송
Slave는 이를 처리할 수 있어야 하며, 첫 번째 Beat의 유효 Byte는 WSTRB 신호로 표시된다.
5. Narrow Transfer
데이터 버스: 32bit (4 Byte)
AWSIZE = 1 (2 Byte)
Beat 1: WSTRB = 0b0011 (하위 2 Byte만 유효)
Beat 2: WSTRB = 0b1100 (상위 2 Byte만 유효)
버스 폭 전체를 쓰지 않고 일부 Byte Lane만 사용한다.
6. 정리 비교표
| 항목 | FIXED | INCR | WRAP |
|---|---|---|---|
| 주소 변화 | 고정 | 순차 증가 | 경계에서 Wrap |
| 최대 AWLEN | 15 | 255 | 15 |
| 주요 사용처 | FIFO, 반복 레지스터 | 메모리, DMA | 캐시 Line Fill |
| 정렬 조건 | 없음 | 없음 | 정렬 필요 |
7. 실무 팁
AWLEN 계산 시 자주 하는 실수
// 4번 전송하고 싶다면?
AWLEN = 4 (X) → 실제 5번 전송
AWLEN = 3 (O) → 실제 4번 전송 (AWLEN + 1 = 4)
AWBURST 타입 선택 기준
- 레지스터/FIFO 연속 Write → FIXED
- 일반 메모리 순차 접근 → INCR
- CPU 캐시 관련 → WRAP
AXI4 vs AXI3 차이
| AXI3 | AXI4 | |
|---|---|---|
| 최대 INCR AWLEN | 15 (16 Beat) | 255 (256 Beat) |
| WRAP/FIXED AWLEN | 15 | 15 |