Ryotta's Basic

Protocol
🔌 Protocol 검증완료

AMBA/AXI 프로토콜

개요

AMBA(Advanced Microcontroller Bus Architecture)는 Arm이 1996년에 도입한 SoC(System-on-a-Chip) 내부 인터커넥트 표준이다. CPU, GPU, 메모리 컨트롤러, 주변장치 같은 기능 블록들이 칩 내부에서 효율적으로 통신할 수 있도록 설계됐으며, 오늘날 ASIC과 SoC 설계에서 사실상의 표준으로 자리잡았다. AMBA는 오픈 스탠다드로 로열티 없이 사용할 수 있어 광범위한 산업적 채택을 이끌었다.

AXI(Advanced eXtensible Interface)는 AMBA 3 사양(2003년)에서 도입된 세대의 인터페이스로, 고성능·고주파수 시스템 설계를 목표로 한다. 주소/컨트롤과 데이터 단계의 분리, burst 기반 트랜잭션, 다중 미해결 주소(outstanding transactions), 비순차 응답(out-of-order response) 등을 지원하여 메모리 대역폭이 중요한 AI/ML 가속기, 데이터센터, 모바일 애플리케이션 프로세서에 최적화돼 있다. AXI4(2010년)에서 AXI4-Lite, AXI4-Stream 같은 서브셋이 추가되면서 간단한 레지스터 접근이나 고속 스트리밍 데이터 처리까지 활용 범위가 확대됐다.

핵심 개념

AMBA 프로토콜 계보

AMBA 사양은 시간에 따라 여러 버전과 인터페이스를 추가하며 진화했다.

세대 연도 주요 인터페이스 특징
AMBA 1 1996 ASB, APB 최초의 온칩 버스 표준
AMBA 2 1999 AHB 싱글 클럭 엣지, 단일 마스터 지원
AMBA 3 2003 AXI3, AHB-Lite, APB3 고성능 인터커넥트, burst, 비순차 처리
AMBA 4 2010 AXI4, AXI4-Lite, AXI4-Stream, ACE 코히어런스 확장, 레지스터 인터페이스, 스트리밍
AMBA 5 2013~ CHI, ACE5, AXI5 코히어런스 확장, atomic/cache/QoS 속성 강화

AXI 채널 구조

AXI는 다섯 개의 독립적인 채널로 구성되며, 각 채널은 별도의 VALID/READY 핸드셰이크를 가진다.

AXI 채널 구조
채널 약어 역할 주요 신호
Read Address AR 읽기 요청 주소 전달 ARID, ARADDR, ARLEN, ARSIZE, ARBURST
Read Data R 읽기 데이터 및 응답 전달 RID, RDATA, RRESP, RLAST
Write Address AW 쓰기 요청 주소 전달 AWID, AWADDR, AWLEN, AWSIZE, AWBURST
Write Data W 쓰기 데이터 전달 WDATA, WSTRB, WLAST
Write Response B 쓰기 완료 응답 BID, BRESP

각 채널은 독립적으로 동작하므로, 하나의 주소 전송이 완료되기 전에 다음 주소를 보낼 수 있고(pipelining), 읽기와 쓰기가 동시에 일어날 수 있다.

주소 속성과 시스템 힌트

AXI 주소 채널에는 단순 주소와 burst 길이 외에도 시스템 레벨에서 중요한 속성 신호가 실린다.

신호 의미 설계 관점
AxPROT privilege, secure/non-secure, instruction/data 구분 보안 도메인과 접근 권한 전달
AxCACHE bufferable, cacheable, allocate 정책 힌트 캐시/버퍼 계층의 처리 방식 결정
AxQOS 트랜잭션 우선순위 힌트 CPU, GPU, DMA 간 혼잡 완화
AxREGION 하나의 물리 인터페이스 내 논리 영역 선택 다중 윈도우 디코딩 단순화
AxUSER 구현 정의 sideband 정보 벤더별 추적, 태그, 디버그 확장

이 속성들은 프로토콜의 데이터 전달 자체를 바꾸지는 않지만, 실제 SoC에서는 메모리 컨트롤러 정책, 보안 필터, NoC 우선순위 제어와 직접 연결된다. 같은 AXI4 인터페이스라도 어떤 속성 신호를 채택하느냐에 따라 지연시간, 격리 수준, QoS 거동이 크게 달라진다.

핸드셰이크 메커니즘

AXI의 모든 채널은 xVALIDxREADY 두 신호로 흐름을 제어한다.

  • xVALID: 송신측에서 페이로드가 유효함을 알린다.
  • xREADY: 수신측에서 데이터를 받을 준비가 됐음을 알린다.
  • 두 신호가 동시에 HIGH일 때 데이터 전송이 완료된다("beat").

중요한 규칙:
1. 송신측은 xREADY를 기다리지 않고 xVALID를 올릴 수 있다.
2. xVALID가 올라간 후에는 핸드셰이크가 일어날 때까지 유지해야 한다.

이 핸드셰이크 구조 덕분에 송수신 양쪽 모두 흐름 제어(flow control)와 스로틀링(throttling)이 가능하다.

Burst 전송

AXI는 burst 기반 프로토콜로, 하나의 주소 요청으로 여러 데이터 비트(beat)를 전송할 수 있다.

Burst 타입 동작 용도
FIXED 모든 beat가 같은 주소 FIFO 반복 접근
INCR 이전 주소 + 전송 크기만큼 증가 순차 메모리 읽기/쓰기
WRAP INCR와 같으나 경계에서 래핑 캐시 라인 fetch

burst 길이는 AXI4에서 최대 256 beat까지 가능하며, AXI3에서는 최대 16 beat였다.

Thread ID 및 비순차 처리

Thread ID 동작

하나의 Initiator 포트는 여러 Thread ID를 가질 수 있으며, 각 스레드는 순차적으로 동작하지만 서로 다른 스레드 사이에서는 비순차 완료가 가능하다. 예를 들어, 한 스레드가 느린 주변장치에 블록되면 다른 스레드는 독립적으로 진행될 수 있다.

  • 스레드 ID는 Initiator 포트에서 로컬하게 정의되며, 인터커넥트를 통과할 때 포트 인덱스가 접두사로 붙는다.
  • Target 포트의 Thread ID는 Initiator 포트보다 비트 폭이 넓다.
  • AXI-Lite는 단일 스레드만 지원하므로 간단한 레지스터 인터페이스에 적합하다.

Ordering 규칙과 outstanding transaction

AXI는 모든 응답이 완전히 자유롭게 재정렬되는 구조가 아니라, ID와 채널별 ordering 규칙 위에서 높은 병렬성을 제공한다.

  • 같은 ID 내부에서는 주소 순서와 응답 순서를 보존해야 하는 경우가 많다.
  • 서로 다른 ID 사이에서는 응답이 앞뒤로 바뀔 수 있으므로, Initiator는 ID별로 완료를 추적해야 한다.
  • 읽기 채널과 쓰기 채널은 독립적이어서 read miss 처리와 writeback이 동시에 진행될 수 있다.
  • 여러 outstanding request를 허용하면 DRAM row hit, bank 병렬성, NoC arbitration 효율을 높일 수 있지만, reorder buffer와 credit 관리 복잡도도 함께 증가한다.

비교/분석

AXI 변형 비교

항목 AXI4 AXI4-Lite AXI4-Stream
burst 길이 최대 256 beat 1 beat only burst 없음(스트림)
데이터 폭 8/16/32/64/128/256/512/1024비트 32 또는 64비트 임의의 바이트 정수 배수
주소 지원 있음 있음 없음
복잡도 높음 낮음 매우 낮음
주요 용도 메모리, 고성능 주변장치 간단한 레지스터 접근(UART 등) 고속 스트리밍(VDMA, 비디오 등)
AXI5 신호 포함 일부 제거 일부 제거

AXI vs 다른 온칩 버스

항목 AXI (ARM) Wishbone (OpenCores) CoreConnect (IBM) Avalon (Altera)
라이선스 오픈(로열티 무료) 오픈 소스 상용 상용
burst 지원 있음 있음 있음 있음
비순차 처리 지원(스레드 ID) 제한적 있음 있음
코히어런스 ACE로 확장 없음 있음 있음
채널 수 5개 단일 버스 3개 단일 버스
생태계 매우 광범위(ARM 기반 SoC) 중간 제한적 Intel/Altera SoC

AMBA 프로토콜 계층 비교

인터페이스 대역폭 복잡도 대상
AXI 최고 높음 CPU, GPU, 고성능 메모리 컨트롤러
AHB 높음 중간 DMA, 고속 주변장치
APB 낮음 낮음 UART, SPI, GPIO 같은 저속 레지스터

동작 원리

읽기 트랜잭션

  1. Initiator가 AR 채널에서 주소(ARADDR), burst 타입(ARBURST), 길이(ARLEN)를 보낸다.
  2. Target이 ARVALID/ARREADY 핸드셰이크로 주소를 수락한다.
  3. Target이 R 채널에서 데이터(RDATA)와 상태(RRESP)를 반환한다.
  4. 각 beat는 RVALID/RREADY 핸드셰이크로 전달되며, 마지막 beat에서 RLAST가 asserted된다.

쓰기 트랜잭션

  1. Initiator가 AW 채널에서 주소 정보를, W 채널에서 데이터를 동시에 보낸다.
  2. W 채널의 WSTRB로 각 바이트의 유효성을 표시하고, 마지막 beat에서 WLAST를 asserted한다.
  3. Target이 모든 데이터를 수신한 후 B 채널에서 BRESP(상태)를 반환한다.
  4. 쓰기 응답은 한 번의 트랜잭션에 대해 한 번만 전달된다.

인터커넥트 동작

SoC 내부에서 AXI 인터커넥트는 여러 Initiator와 Target을 연결한다.

AXI 인터커넥트 구조
  • 단일 Initiator-Target: 가장 간단한 1:1 연결
  • N:M 인터커넥트: 여러 Initiator가 여러 Target에 접근 가능하며, 내부에서 주소 디코딩과 라우팅을 수행
  • 아비트레이션: 여러 Initiator가 동시에 요청할 때 공평한 접근을 보장
  • 버스트 변환: 상위 레이어의 큰 burst를 하위 레이어의 작은 burst로 분할
  • 보호/QoS 전달: 보안 속성, 캐시 속성, 우선순위 힌트를 각 Target 정책에 맞게 전달
  • 폭 변환: 512-bit GPU 포트와 64-bit 주변장치처럼 데이터 폭이 다른 포트를 연결할 때 beat를 재패킹

장단점

장점 단점
5개 독립 채널로 읽기/쓰기 동시 처리 가능 복잡한 인터커넥트 설계가 필요
burst 전송으로 대량 데이터 효율적 전달 모든 기능을 사용할 때 신호 수가 많음(최대 50+)
Thread ID로 비순차 처리 및 병렬성 확보 코히어런스는 ACE/CHI 같은 별도 확장 필요
AXI4-Lite/Stream으로 간단한 장치까지 확장 가능 AXI4 vs AXI3 간 burst 길이 차이로 호환성 검증 필요
오픈 스탠다드로 로열티 없이 사용 가능 ARM 생태계 외에서는 채택률이 상대적으로 낮음
Xilinx, Intel 등 주요 FPGA 벤더에서 널리 지원 고주파수 설계에서 타이밍 클로저 어려움

관련 기술

핵심 정리

AMBA/AXI는 SoC 내부 블록 간 통신을 위한 사실상의 표준 인터커넥트이다. AXI의 5개 독립 채널과 VALID/READY 핸드셰이크는 읽기/쓰기 동시 처리와 흐름 제어를 가능케 하며, burst 전송과 Thread ID는 대량 데이터 전송과 병렬성을 동시에 충족한다. AXI4-Lite와 AXI4-Stream은 각각 간단한 레지스터 접근과 고속 스트리밍에 최적화돼 있어, 단일 SoC 안에서 다양한 성능과 복잡도를 가진 장치들을 하나의 프로토콜로 통합할 수 있다. AMBA는 ARM 외에도 IBM CoreConnect, Wishbone, Avalon 등 경쟁 표준이 존재하지만, 광범위한 IP 생태계와 FPGA 벤더 지원 덕분에 가장 널리 채택된 온칩 버스 표준으로 자리잡고 있다.