

AXI 버스의 모든 데이터 전송은 Master(요청자)와 Slave(수신자) 간의 Handshake로 이루어집니다.
AXI4-Lite는 읽기(Read)와 쓰기(Write)가 충돌 없이 동시에 일어날 수 있도록 5개의 독립적인 길(Channel)을 뚫어놓았습니다. 각 채널은 본인만의 고유한 VALID와 READY 신호를 가집니다.
데이터를 슬레이브(메모리나 레지스터)에 기록할 때는 주소, 데이터, 결과 보고가 각각 다른 채널로 움직입니다.
Write Address Channel (AW 채널)
Write Data Channel (W 채널)
Write Response Channel (B 채널)
데이터를 읽어올 때는 데이터를 보내는 쪽이 Slave이므로 구조가 조금 더 단순합니다.
Read Address Channel (AR 채널)
Read Data Channel (R 채널)
awprot는 Write Address Protection의 약자입니다. 해당 Transaction이 어떤 권한과 보안 수준을 가지고 Memory나 Register에 접근하는지를 나타냅니다.
실제 SoC 환경에서는 일반 유저 애플리케이션이 OS의 핵심 Register를 건드리면 시스템이 멈추기 때문에, 이 접근이 합당한지 검사하는 용도로 쓰입니다.
크기가 [2:0] (총 3-bit)인 이유는 3가지 서로 다른 상태 정보를 각각 1-bit씩 표현하기 때문입니다:
Bit [0] - Privilege (권한 레벨):
Bit [1] - Security (보안 레벨):
Bit [2] - Instruction / Data (접근 유형):
개인 프로젝트 수준의 간단한 DUT에서는 이 값을 무시하는 경우도 많지만, Protocol Violation을 피하기 위해 Driver에서 보통 기본값(3'b000)으로 묶어둡니다.
wstrb는 Write Strobe의 약자로, 쉽게 말해 Byte enable 신호입니다.
32-bit wdata(Write Data) 버스로 데이터가 날아올 때, "이 32-bit 전체를 다 쓸 것인지, 아니면 그 중 특정 위치의 8-bit(1 byte)만 골라서 쓸 것인지" Slave에게 알려주는 역할을 합니다.
작동 규칙은 아주 직관적입니다:
실제 작동 예시 (Corner Case 테스팅에 중요):
AXI Response Codes (필수 암기 Keywords)
2'b00 (OKAY): 일반적인 접근이 정상적으로 성공(Success)했다는 뜻입니다. 우리 코드에서는 에러가 날 상황을 아직 만들지 않았기 때문에, 데이터가 들어오면 무조건 bresp <= 2'b00;을 출력하도록 하드코딩 해둔 것입니다.
2'b01 (EXOKAY): 독점 접근(Exclusive Access) 성공을 의미합니다. (단, 가벼운 버전인 AXI4-Lite에서는 아예 사용하지 않는 코드이며, Full AXI에서만 사용합니다).
2'b10 (SLVERR - Slave Error): Slave가 주소와 데이터를 정상적으로 받긴 했지만, 내부적인 이유로 처리에 실패했을 때 발생합니다. (예: Read-only 레지스터에 Write를 시도했거나, Slave 내부의 FIFO가 꽉 찼을 때 등).
2'b11 (DECERR - Decode Error): Master가 요청한 주소에 해당하는 Slave가 칩 내부에 아예 존재하지 않을 때 발생합니다. 보통 Slave가 직접 띄우기보다는, 중간에서 주소를 분배해 주는 라우터 역할의 Interconnect가 대신 에러를 띄워줍니다.
가장 결정적인 차이입니다.
AXI4-Lite: "주소 1번 ➡️ 데이터 1번"의 1:1 교환만 가능합니다. 데이터 100개를 쓰려면 주소도 100번 보내야 합니다.
Full AXI4: Burst Transfer를 지원합니다. Master가 시작 주소(Starting Address)를 딱 1번만 알려주면, 그 뒤로 최대 256개의 데이터를 연속으로 쏟아낼 수 있습니다.
추가되는 핀(Pin): 이를 위해 Full AXI에는 이 데이터가 몇 개짜리 묶음인지(AWLEN), 데이터 하나의 크기는 얼마인지(AWSIZE), 주소는 순차적으로 증가시킬 것인지 고정할 것인지(AWBURST)를 알려주는 복잡한 신호들이 대거 추가됩니다.
시스템의 병목 현상(Bottleneck)을 막기 위한 고급 기술입니다.
AXI4-Lite: 무조건 들어온 순서대로(In-order) 처리합니다. 1번 요청이 끝나야 2번 요청을 처리할 수 있습니다.
Full AXI4: 각 데이터 패킷에 Transaction ID (AWID, ARID, WID, BID)라는 꼬리표를 붙입니다. 만약 1번 ID의 데이터를 메모리에서 가져오는 데 시간이 오래 걸리면, 기다리지 않고 2번 ID의 데이터를 먼저 처리해서 내보낼 수 있습니다. 이를 통해 전체 버스의 Throughput(처리량)을 극대화합니다.