Introduction to AXI4 protocol
- AMBA AXI(Advanced eXtensible Interface) protocol에 대해 설명합니다. 여기서는 AXI4를 기준으로 설명합니다.
- AXI는 디지털 시스템에서 매우 중요한 프로토콜입니다. 반도체 설계를 위해서는 반드시 알아야 할 프로토콜입니다.
- AXI4의 모든 내용을 다루지는 못합니다. AXI4는 specification 문서가 300쪽이 넘는 방대한 양입니다. 더 자세한 스펙을 알고싶다면, AXI4 specification.pdf 문서를 확인해주세요.
- 참고 자료
Introduction
AXI4는 SoC에서 functional block들을 연결해서 데이터를 주고받기 위한 통신 표준 중 하나입니다. 위 그림에서는 CPU, GPU, NPU, Memory controller가 functional block에 해당합니다. AXI는 시간이 지나면서 3, 4, 5 버전이 나왔는데, 이 글에서는 AXI4를 기준으로 설명합니다.
AXI 인터페이스는 언제 사용할까요? 몇 가지 예를 들어볼게요.
-
AXI
GPU가 뭔가를 계산하기 위해서는 메모리로부터 필요한 데이터를 읽고, 계산 결과를 메모리에 써줘야 합니다. 이때, GPU가 AXI를 통해 인터커넥트에 읽기/쓰기를 하면, 인터커넥트가 메모리로부터 데이터를 읽어와 GPU에게 전달해 주거나 반대로 써줍니다.
-
AXI-Lite
GPU가 동작하기 위해서는 CPU가 필요한 설정을 해준 뒤 시작하라는 명령을 전달해야 합니다. 보통 이런 과정은 많은 데이터 전달이 필요하지 않으므로, AXI-Lite와 같은 상대적으로 간단한 프로토콜을 사용합니다.
참고로, AXI는 인터페이스에 대한 표준입니다. 마스터와 슬레이브 사이의 규칙만을 정의합니다. 인터커넥트를 어떻게 구현해야 하는지, 어떤 방식으로 동작해야 하는지는 정의하지 않습니다. 보통 인터커넥트는 해당 부분을 담당하는 엔지니어가 설계하거나 다른 회사의 IP를 구매해서 사용합니다. 따라서 GPU와 같은 블록 IP 설계자들은 인터커넥트의 구조나 동작 과정에 대해서는 신경 쓰지 않아도 됩니다. 이 글에서도 인터커넥트의 구조나 동작 과정에 대해서는 설명하지 않습니다.
AXI4 protocol overview
먼저 AXI에 대한 간단한 소개를 드릴게요.
AXI Channels
데이터를 주고받기 위해서는 양쪽을 이어주는 물리적인 연결이 필요합니다. AXI의 경우 마스터와 슬레이브가 전선(wire)으로 이어져 있으며, 이러한 전선들을 채널이라고 합니다. AXI에서는 마스터와 슬레이브를 이어주는 채널을 목적에 따라 다섯 종류로 분류합니다. WRITE
를 위한 AW
, W
, B
채널과 READ
를 위한 AR
, R
채널로 구분됩니다. 각 채널을 통해 어떤 신호들이 오가는지는 뒤쪽에서 설명드릴게요.
Transaction
데이터를 읽거나 쓰는 전체 과정을 transaction이라고 합니다.
Write transaction
마스터가 슬레이브에게 데이터를 쓸 때는 아래와 같은 순서로 통신합니다. 각 채널에서 어떤 정보들이 넘어가는지만 먼저 보겠습니다. 자세한 신호들은 뒤에서 더 설명드릴게요.
Write Address (AW)
마스터가 슬레이브에게 데이터를 저장할 주소를 알려줍니다. (Write request)Write Data (W)
마스터가 슬레이브에게 데이터를 전달합니다. (Write)Write Response (B)
슬레이브가 마스터에게 데이터를 제대로 받았는지 알려줍니다. (Write response)
Read transaction
마스터가 슬레이브로부터 데이터를 읽을 때는 아래와 같은 순서로 통신합니다.
Read Address (AR)
마스터가 슬레이브에게 읽어올 데이터의 주소를 알려줍니다. (Read request)Read Data (R)
슬레이브가 마스터에게 데이터를 전달합니다. (Read)
왜 Write에는
Write response (B)
채널이 있는데, Read에는Read response
채널이 없을까요?
- Write 할 때, 슬레이브는 데이터를 받지 못했더라도 마스터에게 read request를 보낼 수 없습니다. AXI에서는 마스터만 read/write request를 보낼 수 있으니까요. 슬레이브가 데이터를 받지 못했을 경우, 마스터가 이를 알아차리고 다시 데이터를 보내주기 위해
Write response (B)
채널이 존재합니다.- 그러나 Read의 경우, 슬레이브가 마스터에게 데이터를 전달하면서 에러 상태에 관한 정보를 같이 전달합니다. 따라서 R 채널에서 에러 상태를 전달하므로, 별도의 채널이 필요 없습니다.
Channel transfers and transactions
전체적인 읽기/쓰기 과정을 봤으니, 조금 더 자세히 살펴볼까요? 데이터를 쓸 때와 읽을 때의 waveform을 같이 보겠습니다.
Write transaction
그림의 맨 왼쪽에서 Write를 위해 필요한 AW
, W
, B
채널이 있는 것을 확인할 수 있습니다.
1. Write Address (AW) : 마스터가 슬레이브에게 데이터를 저장할 주소 알려주기
- [clock cycle 2] 마스터가
AWADDR
에 주소(32bit)를 출력하고, 유효한 주소라는 것을 알리기 위해AWVALID
를 HIGH로 만듭니다. - [clock cycle 3] 슬레이브가 마스터에게 주소를 받을 수 있다는 것을 알려주기 위해
AWREADY
를 HIGH로 만듭니다. - [clock cycle 4]
handshake
가 일어나고, 주소 전달이 완료됩니다.
Handshake란?
- 데이터를 보내는 쪽과 받는 쪽이 데이터를 확실하게 주고받았다는 것을 서로 확인하기 위한 방법입니다.
- 데이터를 보내는 쪽에서는 지금 신호가 유효하다는 것을
VALID
신호로 알려줍니다.- 데이터를 받는 쪽에서는 데이터를 받을 준비가 됐다는 것을
READY
신호로 알려줍니다.- 데이터 전송은 VALID이면서 READY 일 때 완료됩니다. 그리고 이처럼 handshake를 통해 한 번의 데이터가 전달되는 것을
transfer
라고 합니다.- AXI의 waveform을 볼 때는, handshake가 일어나는 순간을 중심으로 보면 편합니다.
2. Write (W) : 마스터가 슬레이브에게 데이터를 전달하기
- [clock cycle n] 슬레이브가 데이터를 받을 준비가 되면
WREADY
를 HIGH로 만듭니다. - [clock cycle n+2] 마스터가
WDATA
에 데이터를 출력하면서 유효한 데이터라는 것을WVALID
를 통해 알려줍니다. - [clock cycle n+3]
handshake
가 일어나고, 데이터 전달이 완료됩니다.
3. Write Response (B) : 슬레이브가 마스터에게 데이터를 제대로 받았는지 알려주기
- [clock cycle n+2] 마스터가
BREADY
를 통해BRESP
를 받을 수 있음을 알려줍니다. - [clock cycle n+3] 슬레이브가
BRESP
와BVALID
를 통해 데이터를 잘 전달받았음을 알려줍니다. - [clock cycle n+4] write response가 완료됩니다.
Write transaction: multiple data items (burst)
주소를 한 번만 보내고, 데이터를 여러 번 보내는 것도 가능합니다. 이것을 burst transfer
라고 합니다. 이 방식을 사용하면 여러 개의 데이터를 보낼 때, 매번 write request(AW)를 보내지 않아도 되니 효율적인 데이터 전송이 가능합니다. 몇 개의 데이터를 보낼지는 AW
채널에서 알려주고, 각 데이터의 주소 역시 데이터 전송이 완료될 때마다 미리 약속된 방식으로 변경됩니다. 그림에는 표현되어 있지 않은 신호들도 있는데, 뒤에서 더 자세하게 말씀드릴게요. WLAST
는 마지막 데이터를 보낼 때 HIGH 상태가 됩니다. BRESP
와 BVALID
는 슬레이브가 모든 데이터를 받았을 때 HIGH 상태가 됩니다.
Read transaction
Read를 위해서는 AR
, R
채널이 필요해요.
Read Address (AR) : 마스터가 슬레이브에게 데이터를 읽어 올 주소 알려주기
- [clock cycle 2] 마스터가
ARADDR
에 주소(32bit)를 출력하고, 유효한 주소라는 것을ARVALID
를 통해 알려줍니다. - [clock cycle 3] 슬레이브가
ARREADY
를 통해 주소를 받을 수 있음을 마스터에게 알려줍니다. - [clock cycle 4]
handshake
가 일어나고, 주소 전달이 완료됩니다.
Read (R) : 슬레이브가 마스터에게 데이터 전달하기
- [clock cycle n] 마스터는 데이터를 받을 준비가 되면
RREADY
를 high로 만듭니다. - [clock cycle n+2] 슬레이브가
RREADY
를 보고 마스터에게 데이터를 보낼 수 있다는 것을 확인합니다. 그 후RDATA
에 데이터를 출력하고 유효한 데이터라는 것을RVALID
를 통해 알려줍니다. 이때, 슬레이브는RRESP
를 통해 해당 데이터가 올바르게 읽힌 데이터인지를 알려줍니다. 슬레이브가 데이터를 마스터에게 보내주긴 보내주는데, 오류로 인해 올바른 데이터를 보내지 못하는 경우RRESP
를 통해 에러 상태를 알려줍니다. - [clock cycle n+3]
handshake
가 일어나고, 데이터 전달이 완료됩니다.
슬레이브는 읽기 요청을 받으면 오류가 있더라도 데이터를 보내줘야 합니다
Read transaction: multiple data items (burst)
주소를 한 번만 보내고, 연속된 데이터들을 읽어 오는 것도 가능합니다. AR
채널을 통해 어떤 주소로부터 몇 개의 데이터를 읽어올지 슬레이브에게 알려줍니다. 그 후 슬레이브는 R
채널을 통해 데이터를 마스터에게 전달해 줍니다. 슬레이브가 마지막 데이터를 보낼 때 RLAST
는 HIGH가 됩니다.
Active transactions (outstanding)
마스터는 Transaction이 끝나기 전에 다음 request를 보내는 것이 가능합니다. 읽기를 예로 들면, 마스터가 읽기 요청을 한 후 슬레이브로부터 데이터를 받기 전에 새로운 읽기 요청을 할 수 있습니다. 주소 채널(AW
, AR
)과 데이터 채널(W
, R
)을 분리했기 때문에 가능한 방법입니다.
Signal descriptions
위에서 설명하지 않은 AXI4의 다른 신호들을 살펴보겠습니다.
(AW) Write address channel signals
마스터가 슬레이브에게 데이터를 저장할 주소 알려주기
Signal | Source | Description |
---|---|---|
AWADDR | Master | 데이터의 주소입니다. |
AWLEN | Master | Burst length입니다. W 채널에서 몇 개의 데이터를 연속으로 보낼지 알려줍니다. Burst length = AWLEN + 1입니다. |
AWSIZE | Master | W 채널에서 전송되는 데이터의 bitwidth를 나타냅니다. AWSIZE 값에 따른 데이터의 bitwidth 계산 방법은 Table A3-2 Burst size encoding1 을 참고하세요. |
AWBURST | Master | Burst type을 나타냅니다. Burst type은 세 종류가 있습니다. 1. FIXED : 모든 데이터들을 같은 주소에 계속 Write 합니다. 2. INCR : 데이터가 transfer 될 때마다 주소를 증가시킵니다. 이때, 주소는 데이터의 바이트 크기만큼 증가됩니다. 예를 들어, 데이터가 한 번에 4byte씩 전송되는 경우, 주소는 4씩 증가합니다. 3. WRAP : INCR와 비슷하게 매 transfer마다 주소가 증가하지만, 주소가 upper address가 됐을 경우 lower address로 warp around 됩니다. (자세한 동작 및 주소 계산법 등은 스펙 문서를 참고해 주세요.) |
AWVALID | Master | 위쪽의 신호들이 유효한 정보들인지를 알려줍니다. |
AWREADY | Slave | 위쪽의 신호들을 받을 준비가 되었는지 알려줍니다. |
아래는 필요에 따라 사용하는 신호들입니다. 필요하지 않으면 사용하지 않거나 0으로 값을 설정하고 사용합니다.
Signal | Source | Description |
---|---|---|
AWID | Master | Request에 ID group을 할당합니다. |
AWLOCK | Master | 다른 마스터들이 해당 슬레이브에 접근하지 못하도록 잠급니다. |
AWCACHE | Master | Cache policy를 지정합니다. Write-though, write-back 등 트랜잭션이 어떻게 처리되어야 하는지를 알려줄 수 있습니다. |
AWPROT | Master | Permission 관련된 신호입니다. IP가 보안 등의 이유로 특정 권한에서만 실행되어야 하는 경우가 있습니다. 이 경우 AWPROT 신호가 권한에 맞게 설정되어야 실행되도록 IP가 만들어져 있습니다. Privileged/Unprivileged, Secure/Non-secure, Data/Instruction 등의 설정을 할 수 있습니다. |
AWQOS | Master | Quality of Service, QoS. 스펙상에는 QOS를 어떻게 사용할지 나와있지 않지만, priority를 나타내는 신호로 사용되는 것을 추천합니다. 이 경우, 인터커넥트는 여러 마스터에서 request가 들어왔을 때 QOS가 높은 request 먼저 처리합니다. |
AWREGION | Master | (Optional) adress와는 별도로, 메모리를 여러 개의 논리적 region으로 나누어 사용할 수 있습니다. |
AWUSER | Master | (Optional) 따로 정의되어 있는 신호가 아닙니다. 사용자가 필요한 경우 원하는 대로 신호를 정의하여 사용할 수 있습니다. |
(W) Write data channel signals
마스터가 슬레이브에게 데이터를 전달하기
Signal | Source | Description |
---|---|---|
WDATA | Master | 전송되는 데이터입니다. |
WLAST | Master | 마지막 데이터를 보낼 때 HIGH가 됩니다. |
WVALID | Master | 위쪽의 신호들이 유효한 정보들인지를 알려줍니다. |
WREADY | Slave | 슬레이브가 데이터를 받을 준비가 됐을 때 HIGH가 됩니다. |
아래는 필요에 따라 사용하는 신호들입니다. 필요하지 않으면 사용하지 않거나 0으로 값을 설정하고 사용합니다.
Signal | Source | Description |
---|---|---|
WSTRB | Master | 데이터의 일부분만 write 할 수 있습니다. WDATA 8bit마다 WSTRB 는 1bit이 있으며, WSTRB[n] bit는 WDATA[(8n)+7:(8n)]이 유효한 값인지를 알려줍니다. 이 기능이 없다면, 데이터의 일부를 업데이트하기 위해서 마스터는 해당 주소의 데이터를 read 한 다음 데이터를 업데이트하고 다시 write 해야 합니다. |
WUSER | Master | (Optional) 따로 정의되어 있는 신호가 아닙니다. 사용자가 필요한 경우 원하는 대로 신호를 정의하여 사용할 수 있습니다. |
(B) Write response channel signals
슬레이브가 마스터에게 데이터를 받았다고 알려주기
Signal | Source | Description |
---|---|---|
BID | Slave | AW 채널에서 받았던 ID tag입니다. |
BRESP | Slave | 슬레이브의 에러 상태를 알려주는 신호입니다. 별다른 문제가 없다면 OKAY , 그렇지 않은 경우 SLVERR 나 DECERR 같은 신호를 보냅니다. |
BVALID | Slave | 위쪽의 신호들이 유효한 정보들인지를 알려줍니다. |
BREADY | Master | 마스터가 데이터를 받을 준비가 됐을 때 HIGH가 됩니다. |
Signal | Source | Description |
---|---|---|
BUSER | Slave | (Optional) 따로 정의되어 있는 신호가 아닙니다. 사용자가 필요한 경우 원하는 대로 신호를 정의하여 사용할 수 있습니다. |
(AR) Read adress channel signals
마스터가 슬레이브에게 데이터를 읽어 올 주소 알려주기
Signal | Source | Description |
---|---|---|
ARADDR | Master | 데이터의 주소입니다. |
ARLEN | Master | Burst length입니다. R 채널에서 몇 개의 데이터를 연속으로 보낼지 알려줍니다. Burst length = AWLEN + 1입니다. |
ARSIZE | Master | R 채널에서 전송되는 데이터의 bitwidth를 나타냅니다. AWSIZE 값에 따른 데이터의 bitwidth 계산 방법은 Table A3-2 Burst size encoding 를 참고하세요. |
ARBURST | Master | Burst type을 나타냅니다. Burst type은 세 종류가 있습니다. 1. FIXED : 모든 데이터들을 같은 주소에 계속 Write 합니다. 2. INCR : 데이터가 transfer 될 때마다 주소를 증가시킵니다. 이때, 주소는 데이터의 바이트 크기만큼 증가됩니다. 예를 들어, 데이터가 한 번에 4byte씩 전송되는 경우, 주소는 4씩 증가합니다. 3. WRAP : INCR와 비슷하게 매 transfer마다 주소가 증가하지만, 주소가 upper address가 됐을 경우 lower address로 warp around 됩니다. (자세한 동작 및 주소 계산법 등은 스펙 문서를 참고해주세요.) |
ARVALID | Master | 위쪽의 신호들이 유효한 정보들인지를 알려줍니다. |
ARREADY | Slave | 슬레이브가 데이터를 받을 준비가 됐을 때 HIGH가 됩니다. |
아래는 필요에 따라 사용하는 신호들입니다. 필요하지 않으면 사용하지 않거나 0으로 값을 설정하고 사용합니다.
Signal | Source | Description |
---|---|---|
ARID | Master | Request에 ID group을 할당합니다. |
ARLOCK | Master | 다른 마스터들이 해당 슬레이브에 접근하지 못하도록 잠급니다. |
ARCACHE | Master | Cache policy를 지정할 수 있습니다. |
ARPROT | Master | Permission 관련된 신호입니다. IP가 특정 권한에서만 실행될 수 있는 경우가 있는데, 이 경우 ARPROT 신호를 권한에 맞게 설정해야 실행되도록 IP가 만들어져 있습니다. Privileged/Unprivileged, Secure/Non-secure, Data/Instruction 등의 설정을 할 수 있습니다. |
ARQOS | Master | Quality of Service, QoS. 스펙상에는 QOS를 어떻게 사용할지 나와있지 않지만, priority를 나타내는 신호로 사용되는 것을 추천한다고 합니다. 이 경우, QOS가 높을수록 높은 우선순위로 먼저 처리합니다. |
ARREGION | Master | (Optional) adress와는 별도로, 메모리를 여러 개의 논리적 region으로 나누어 사용할 수 있습니다. |
ARUSER | Master | (Optional) 따로 정의되어 있는 신호가 아닙니다. 사용자가 필요한 경우 원하는 대로 신호를 정의하여 사용할 수 있습니다. |
(R) Read data channel signals
Signal | Source | Description |
---|---|---|
RDATA | Slave | 전송되는 데이터입니다. |
RRESP | Slave | 슬레이브의 에러 상태를 알려주는 신호입니다. 별다른 문제가 없다면 OKAY , 그렇지 않은 경우 SLVERR 나 DECERR 같은 신호를 보냅니다. |
RLAST | Slave | 마지막 데이터를 보낼 때 HIGH가 됩니다. |
RVALID | Slave | 위쪽의 신호들이 유효한 정보들인지를 알려줍니다. |
RREADY | Master | 마스터가 데이터를 받을 준비가 됐을 때 HIGH가 됩니다. |
Signal | Source | Description |
---|---|---|
RID | Slave | AR 채널에서 할당받은 ID tag입니다. |
RUSER | Slave | (Optional) 따로 정의되어 있는 신호가 아닙니다. 사용자가 필요한 경우 원하는 대로 신호를 정의하여 사용할 수 있습니다. |
Waveform
위의 내용을 토대로 아래 waveform을 해석해 볼까요?
AxID, AxLOCK, AxCACHE, AxPROT, AxQOS, AxREGION은 0으로 사용했고, AxUSER는 사용하지 않습니다. 해당 신호들은 나중에 사용할 필요가 생겼을 때 공부하셔도 될 듯합니다.
Read
AR Channel
마스터가 슬레이브에게 읽기 요청을 보냅니다.
AR request는 clock cycle 3, 4, 5에서 세 개가 전달됩니다.
- [Clock cycle 3] AR request 1
- ARADDR (0x00) : 0x00번지로부터 데이터를 읽습니다.
- ARLEN (3) : 데이터를 네 번 읽습니다 (3+1=4). 따라서 R 채널에서 데이터 transfer는 총 네 번 발생합니다.
- ARSIZE (4) : 하나의 transfer에서 전달되는 데이터의 크기는 128bit(16byte)입니다.
- ARBURST (1) : 데이터를 읽을 때마다 다음 데이터를 읽어올 주소를 증가시킵니다. ARSIZE가 4이므로, 한 번의 데이터 transfer마다 주소는 16씩 증가합니다.
- [Clock cycle 4] AR request 2
- ARADDR (0x40) : 0x40번지로부터 데이터를 읽습니다.
- ARLEN (3) : 데이터를 네 번 읽습니다 (3+1=4).
- ARSIZE (4) : 하나의 transfer에서 전달되는 데이터의 크기는 128bit(16byte)입니다.
- ARBURST (1) : 데이터를 읽을 때마다 다음 데이터를 읽어올 주소를 증가시킵니다. ARSIZE가 4이므로, 한 번의 데이터 transfer마다 주소는 16씩 증가합니다.
- [Clock cycle 5] AR request 3
- ARADDR (0x80) : 0x80번지로부터 데이터를 읽습니다.
- ARLEN (1) : 데이터를 두 번 읽습니다 (1+1=2).
- ARSIZE (4) : 하나의 transfer에서 전달되는 데이터의 크기는 128bit(16byte)입니다.
- ARBURST (1) : 데이터를 읽을 때마다 다음 데이터를 읽어올 주소를 증가시킵니다. ARSIZE가 4이므로, 한 번의 데이터 transfer마다 주소는 16씩 증가합니다.
R Channel
슬레이브가 마스터에게 데이터를 전달합니다.
- [Clock cycle 9~14] AR request 1에 대한 데이터 전송
- handshake가 일어나는 시점은 11, 12, 13, 14로 네 번입니다. 14에서 마지막 데이터를 보낼 때 RLAST가 HIGH인 것을 볼 수 있습니다. 순서대로 0, 1, 2, 3이라는 데이터가 전달됐습니다.
- [Clock cycle 15~20] AR request 2에 대한 데이터 전송
- handshake가 일어나는 시점은 16, 17, 19, 20으로 네 번입니다. 20에서 마지막 데이터를 보낼 때 RLAST가 HIGH인 것을 볼 수 있습니다. 순서대로 4, 5, 6, 7이라는 데이터가 전달됐습니다.
- [Clock cycle 21~23] AR request 3에 대한 데이터 전송
- handshake가 일어나는 시점은 22, 23으로 두 번입니다. 23에서 마지막 데이터를 보낼 때 RLAST가 HIGH인 것을 볼 수 있습니다. 순서대로 8, 9라는 데이터가 전달됐습니다.
Write
AW Channel
마스터가 슬레이브에게 쓰기 요청을 합니다. 총 세 번의 request가 clock cycle 3, 10, 17에서 전달됩니다.
- [Clock cycle 3] AW request 1
- AWADDR (0x00) : 0x00번지에 데이터를 씁니다.
- AWLEN (3) : 데이터를 네 번 씁니다.
- AWSIZE (4) : 하나의 transfer에서 전달되는 데이터의 크기는 128bit(16byte)입니다.
- AWBURST (1) : 데이터를 쓸 때마다 다음 데이터의 주소를 증가시킵니다. AWSIZE가 4이므로, 한 번의 데이터 transfer마다 주소는 16씩 증가합니다.
- [Clock cycle 10] AW request 2
- AWADDR (0x00) : 0x40번지에 데이터를 씁니다.
- AWLEN (3) : 데이터를 네 번 씁니다.
- AWSIZE (4) : 하나의 transfer에서 전달되는 데이터의 크기는 128bit(16byte)입니다.
- AWBURST (1) : 데이터를 쓸 때마다 다음 데이터의 주소를 증가시킵니다. AWSIZE가 4이므로, 한 번의 데이터 transfer마다 주소는 16씩 증가합니다.
- [Clock cycle 17] AW request 3
- AWADDR (0x00) : 0x40번지에 데이터를 씁니다.
- AWLEN (1) : 데이터를 두 번 씁니다.
- AWSIZE (4) : 하나의 transfer에서 전달되는 데이터의 크기는 128bit(16byte)입니다.
- AWBURST (1) : 데이터를 쓸 때마다 다음 데이터의 주소를 증가시킵니다. AWSIZE가 4이므로, 한 번의 데이터 transfer마다 주소는 16씩 증가합니다.
W Channel
마스터가 슬레이브에게 데이터를 전달합니다.
- [Clock cycle 4~8] AW request 1에 대한 데이터 전송
- handshake가 일어나는 시점은 5, 6, 7, 8로 네 번입니다. 8에서 마지막 데이터를 보낼 때 WLAST가 HIGH인 것을 볼 수 있습니다. 순서대로 100, 101, 102, 103이라는 데이터가 전달됐습니다.
- WSTRB는 0xFFFF, 2진수로 0b1111111111111111입니다. 16byte 모두 write한다는 뜻입니다.
- [Clock cycle 11~15] AW request 2에 대한 데이터 전송
- handshake가 일어나는 시점은 12, 13, 14, 15로 네 번입니다. 15에서 마지막 데이터를 보낼 때 WLAST가 HIGH인 것을 볼 수 있습니다. 순서대로 104, 105, 106, 107이라는 데이터가 전달됐습니다.
- WSTRB는 0xFFFF, 2진수로 0b1111111111111111입니다. 16byte 모두 write한다는 뜻입니다.
- [Clock cycle 18~20] AW request 3에 대한 데이터 전송
- handshake가 일어나는 시점은 19, 20으로 두 번입니다. 20에서 마지막 데이터를 보낼 때 WLAST가 HIGH인 것을 볼 수 있습니다. 순서대로 108, 109라는 데이터가 전달됐습니다.
- WSTRB는 0xFFFF, 2진수로 0b1111111111111111입니다. 16byte 모두 write 한다는 뜻입니다.
B Channel
슬레이브가 마스터에게 데이터를 받았다는 것을 알려줍니다.
- [Clock cycle 25] AW request 1에 대한 B response
- [Clock cycle 32] AW request 2에 대한 B response
- [Clock cycle 37] AW request 3에 대한 B response
AXI4-Lite
AXI4-Lite는 AXI4와 아래와 같은 차이점이 있습니다.
Signal | Description |
---|---|
AWID, ARID | AXI-Lite에서는 지원하지 않습니다. |
AWLEN, ARLEN | AXI-Lite는 burst를 지원하지 않습니다. 따라서 AxLEN은 0입니다. |
AWSIZE, ARSIZE | 데이터의 bitwidth는 bus의 크기와 같아야 합니다. 32bit 또는 64bit입니다. |
AWBURST, ARBURST | 버스트를 지원하지 않으므로, 의미가 없습니다. |
AWLOCK, ARLOCK | AXI-Lite에서는 지원하지 않습니다. |
AWCACHE, ARCACHE | AXI-Lite에서는 지원하지 않습니다. |
Appendix
AxSIZE[2:0] | Bytes in transfer |
---|---|
0b000 | 1 |
0b001 | 2 |
0b010 | 4 |
0b011 | 8 |
0b100 | 16 |
0b101 | 32 |
0b110 | 64 |
0b111 | 128 |
Leave a comment