AXI

[AXI]AXI4 Standard

낑낑이 2025. 2. 4. 17:42

Xilinx Architecture

AMBA란 뭐냐..

Advanced Microcontroller Bus Architecture의 자로 SoC에서 이용하는 표준 spec이다

Interconncetor를 이용하여 데이터가 전달된다. 이를 Bus라고한다

General-Purpose AXI Port는 AXI Lite로 생각할수있고 High Performance AXI port는 AXI standard로 볼수있다

여기보면 5개의 Channel이 있고 상단부에있는건 Read Channel 아래있는건 Write Channel이다

각 Channel당 Valid Ready Handshake가 일어나야 data가 전송되는것이다

Transfer는 handshake가 일어나 Data가 전달되는것을 Transfer라고하고

Transaction은 행동 전체를 말한다 

즉 Read동작에서 Address가 전달되고 Data를 읽는것을 Read Transaction이라고한다

 

1. 읽기 주소 채널 (AR:  Read Address Channel)

 

  • ARVALID
    • 출처: Master → Slave
    • 의미:
      • “지금 전송하는 주소/제어 정보(ARADDR, ARLEN 등)가 유효하다”는 신호
      • HIGH가 되면, 슬레이브에 유효한 읽기 요청을 보내고 있음을 나타냅니다.
  • AREADY
    • 출처: Slave → Master
    • 의미:
      • 슬레이브가 ARADDR, ARLEN 등 주소 정보를 받을 준비가 되었음을 알리는 신호
      • ARVALID와 AREADY가 동시에 HIGH인 사이클에 주소 정보가 전달됩니다.
  • ARADDR[31:0]
    • 출처: Master → Slave
    • 의미:
      • 실제로 데이터를 읽어올 시작 주소(Address)
      • 32비트 폭 예시이며, 설계에 따라 더 넓거나 좁을 수 있습니다.
  • ARSIZE[2:0]
    • 출처: Master → Slave
    • 의미:
      • 한 번의 전송에서 몇 바이트(또는 몇 비트) 단위로 데이터를 주고받는지 나타냅니다.
      • 3비트 값으로 인코딩되며, 예: 3'b010 = 4바이트(32비트) 등.
  • ARBURST[1:0]
    • 출처: Master → Slave
    • 의미:
      • 버스트(Burst) 타입을 지정합니다.
        • FIXED: 모든 데이터를 같은 주소에서 반복 접근
        • INCR: 매번 주소가 증가 (일반적으로 가장 많이 사용)
        • WRAP: 설정된 범위 끝에 도달하면 다시 범위의 처음으로 되돌아가는 방식
  • ARCACHE[3:0]
    • 출처: Master → Slave
    • 의미:
      • 캐시 정책(Cacheable, Bufferable, Write-through, Write-back 등)을 나타내는 4비트 신호
      • 시스템 설계에 따라, 슬레이브나 인터커넥트가 이를 해석해 캐시 동작을 최적화할 수 있습니다.
  • ARPROT[2:0]
    • 출처: Master → Slave
    • 의미:
      • 보안(secure/non-secure), 권한(privileged/unprivileged), 데이터/명령어 등의 프로텍션 모드를 표시
      • 슬레이브가 접근을 허용할지 거부할지 등을 결정할 수 있습니다.
  • ARID[x:0]
    • 출처: Master → Slave
    • 의미:
      • 읽기 요청을 구분하기 위한 ID 태그
      • 슬레이브는 이후 Read Data(R) 채널에서 RID 신호를 통해 동일 ID를 반환함으로써, 마스터가 요청별 응답을 식별할 수 있게 합니다.
  • ARLEN[7:0]
    • 출처: Master → Slave
    • 의미:
      • 버스트 전송 시 “몇 번의 데이터를 연속으로 읽을 것인지”를 나타내는 길이.
      • 실제 버스트 횟수 = ARLEN + 1
      • 예: ARLEN = 0x07 → 총 8번(0~7) 전송
  • ARLOCK
    • 출처: Master → Slave
    • 의미:
      • 슬레이브 자원을 잠금(lock) 할 때 사용하는 신호
      • 보통 멀티마스터 환경에서 원자적(Atomic) 연산이나 특정 시퀀스를 보호하기 위해 사용합니다.
  • ARQOS[3:0]
    • 출처: Master → Slave
    • 의미:
      • **QoS(우선순위)**를 표시하는 4비트 신호
      • 인터커넥트나 슬레이브가 여러 요청을 받았을 때, 우선순위가 높은 트랜잭션을 먼저 처리하는 등 품질 보장(QoS) 정책에 활용됩니다.
  • ARREGION[3:0]
    • 출처: Master → Slave
    • 의미:
      • 주소 공간을 여러 **리전(Region)**으로 논리적으로 나누고, 그 중 어느 리전에 속하는지를 추가로 식별할 때 사용
      • 고급 SoC 설계에서 메모리 관리나 라우팅 최적화 등에 활용 가능
  • ARUSER[x:0]
    • 출처: Master → Slave
    • 의미:
      • 사용자 정의(User-defined) 신호
      • AXI 표준에 명시되지 않은 임의의 신호를 담을 수 있어, 특수 기능이나 디버깅 정보를 전달하는 데 사용될 수 있습니다.

2. 읽기 Data 채널 (D:  Data Channel)

(1) RVALID

  • 방향: Slave → Master
  • 의미:
    • 슬레이브가 전송하는 RDATA, RRESP 등유효함을 알리는 신호
    • RVALID가 HIGH일 때, 마스터가 RREADY도 HIGH이면 해당 데이터 전송이 이루어집니다.

(2) RREADY

  • 방향: Master → Slave
  • 의미:
    • 마스터가 “슬레이브에서 오는 데이터를 받을 준비가 됐다”고 알리는 신호
    • RREADY가 HIGH이고 RVALID도 HIGH인 클록 사이클에 데이터를 실제로 수신합니다.

(3) RLAST

  • 방향: Slave → Master
  • 의미:
    • 버스트로 여러 번 데이터를 보낼 때, 이번 전송이 마지막임을 알리는 신호
    • 예: ARLEN = 7(총 8번 전송 시) → 마지막 8번째 데이터에서 RLAST가 HIGH.

(4) RDATA

  • 방향: Slave → Master
  • 의미:
    • 슬레이브가 실제로 읽어온 데이터(폭은 시스템 설계에 따라 달라짐)
    • RVALID가 HIGH일 때 유효하며, RREADY가 HIGH인 순간에 마스터로 전송됩니다.

(5) RRESP

  • 방향: Slave → Master
  • 의미:
    • 읽기 트랜잭션의 응답 코드
      • OKAY(00) : 정상 완료
      • SLVERR(10) : 슬레이브 측 에러
      • DECERR(11) : 주소 해석 오류 등
    • 마스터는 이를 확인해 에러 핸들링 여부를 결정합니다.

(6) RID

  • 방향: Slave → Master
  • 의미:
    • AR채널에서 넘겨받은 ARID를 그대로 반환
    • 마스터가 여러 읽기 요청을 구분할 수 있도록 해줍니다.

(7) RUSER

  • 방향: Slave → Master
  • 의미:
    • 사용자(User)-정의 신호
    • AXI 규격에 없는 임의 정보를 담아 전달할 수 있습니다.

+a)Burst type 에 필요한 변수이름들 

Burst에 필요한 언어들 

1. AxLEN[7:0]

  • 설명:
    • 8비트 신호로, 한 트랜잭션에서 전송할 데이터 전송 횟수를 나타냅니다.
    • 버스트 전송(burst transfer) 시 연속해서 전송할 데이터의 갯수를 설정하며, 유효 범위는 1 ~ 256입니다.
    • 실제 전송 횟수는 AxLEN + 1로 계산됩니다.
      • 예:
        • AxLEN = 0x00 → 1번 전송
        • AxLEN = 0x07 → 8번 전송
        • AxLEN = 0xFF → 256번 전송

2. AxSIZE[2:0]

  • 설명:
    • 3비트 신호로, 한 번의 데이터 전송에서 몇 바이트(또는 비트)를 전송할지를 정의합니다.
    • 인코딩된 값으로 전송 크기를 설정하며, 지원 가능한 전송 크기는 1, 2, 4, 8, 16, 32, 64, 128 바이트입니다.
    • 주로 슬레이브의 데이터 폭(데이터 버스 크기)에 따라 결정됩니다.
      • 예:
        • AxSIZE = 3'b000 → 1 byte (8-bit)
        • AxSIZE = 3'b001 → 2 bytes (16-bit)
        • AxSIZE = 3'b010 → 4 bytes (32-bit)
        • AxSIZE = 3'b011 → 8 bytes (64-bit)
        • AxSIZE = 3'b100 → 16 bytes (128-bit)
        • AxSIZE = 3'b101 → 32 bytes (256-bit)
        • AxSIZE = 3'b110 → 64 bytes (512-bit)
        • AxSIZE = 3'b111 → 128 bytes (1024-bit)

3. AxBURST[1:0]

  • 설명:
    • 2비트 신호로, 데이터 전송 방식(버스트 타입)을 정의합니다.
    • 버스트는 데이터를 연속으로 전송할 때 각 전송의 주소 계산 방법을 나타냅니다.
    • 버스트 타입은 아래와 같이 세 가지가 있습니다:
      • 00 (FIXED):
        • 모든 전송이 같은 주소에서 이루어집니다.
        • 예: IO 장치나 FIFO에서 데이터를 반복해서 읽거나 쓸 때 사용.
        • 혹은 주소를 하나 고정해놓고(ex:0x00) 데이터를 연속적으로 4번 보내게 된
      • 01 (INCR):
        • 전송마다 주소가 데이터 크기만큼 자동 증가합니다.
        • 가장 일반적으로 사용되는 버스트 타입으로, 메모리 블록의 연속 주소에 데이터를 읽거나 쓸 때 적합.
        • 예: 한 번에 4바이트씩 전송하는 경우, 주소는 +4씩 증가합니다.
      • 10 (WRAP):
        • INCR와 유사하지만, 주소 범위를 넘어가면 처음 주소로 돌아오는 방식입니다.
        • 주소는 정해진 범위 내에서 순환(wrapping) 됩니다.
        • 예: 주소 범위가 0x00~0x3F일 때, 주소가 0x3F 이후로 증가하면 다시 0x00으로 돌아갑니다.
        • 주로 캐시 라인 접근 시 사용.

01 (INCR):

AR_LEN는 총 4개의 data를 연속으로 보내겠다는것

AR_size =2^3이므로 8byte =64 bits = Data Bit width = 1 beat

AR_Burst =0 x1 Increase를 사용한다는것

오른쪽처럼보면 시작주소는 0x0000이고 4개의 data를 연속적으로 주소를 증가시키며 데이터를 보내는것이다

4K Boundary

 

4K boundary

 

4K Boundary로 지정된것은 

0x0000~0x0FFF까지 Burst transaction시 주소가 정해져있는것이다

즉 노란색 의 주소가 0x0FF8 0x0FFC라고하면 4개의 address length가 정해져있으므로 빨간색주소는 0x1000, 0x1004가 되게되는데

이는 4K Boundary를 넘게된다는것이다 따라서 이렇게 주소를 설정하면 안되고 4K boundary지점에서는 

이처럼 burst length를 나눠서 Burst Transaction을 해줘야한다

 

왜 4K Boundary로 사용해야할까?

이는 page size가 4k=4096byte인데 이를 page size로 AMBA protocol에서 호환성의 이유로 이와같이 사용해준다고한다

또한 주소의 디코딩을 위해 , Error detection과 correction을 생각해줘야한다

이처럼 Burst Transaction이 끝났다면 R_LAST를 띄워 Burst의 동작이 끝났음을 알려야한다

00 (FIXED):

AR_Burst가 0x0으로 고정되어있다면 

R_data가 고정된 주소 0x0000에 data가 실리게된다. 이렇게되면 FIFO를 사용하여 같은 주소에 계속해서 R_DATA를 작성해준다

10 (WRAP)

좌 : 시작주소 0x0000 우 시작주소 0x0000

 

AR_Busrt가 0x2인경우 WRAP의 기능을 하게되는데

AR_LEN에 의해 4개의 Data, AR_Size는 0x2이므로 2^2=4byte, AR_Burst는 0x2이다

Total Transfer Byte는 4beat*4byte(size)=16byte이게된다

좌측의 경우 AR_Burst가 0x2일떄와 0x1일때와 동일한 동작을 하게된다

우측의 경우 주소의 시작이 04였으니 2번의 동작이후 0C가된다. 하지만 AR_Burst가 01이였을때였다면 4번째 동작이 0x010이어야했으나, AR_Burst가 02이므로 0000의 주소로 돌아가도록 한다

 


위처럼 5개의 Channel의 Valid Ready가 있는것을 볼 수 있다 

Read Transaction

이 화살표는 종속성을 의미합니다 화살표 머리보면 하나가있고 두개가 있죠 

Valid를보고 Ready를 띄워도 된다는것입니다. 두개가 있는것은 꼭 선행해야하는 동작이라는 것입니다

Address를 보내지않았는데 Data를 읽지 못하는것처럼 선행조건이라는것입니다

Read Operation시 RDATA를 읽을때마다 Response가 High로 변하는것을 알 수 있습니다

 

Write Transaction

하나의 Address가 하나의 Data가 보내진다는것입니다

Write동작을 설명하는부분입니다 화살표에따라 spec을 정하게되면 BVALID이전에 WVALID와 WREADY가 선행되어야한다는것입니다

그도 그럴게 Bchannel은 잘받았다고 응답하는 Channel인데 Write동작시 Valid Ready가 되어야 data가 적혀질수 있겠죠

 

Write Transaction시 Multiple Data Item 에 대해서 설명해보면 WDATA가 3개가 오니 AR_LEN은 0x02임을 알수 있다

Write Transaction에서는 BREADY신호가 마지막 Data를 Write한뒤 High로 되는것을 볼 수 있습니다

 Response signaling

Response singal에서 00 01인경우 Okay , 답을 잘 받았다는것이다

10인경우 Slave error인데 Slave에 없는 주소를 요청받았을때 10의 Error를 반환하게된다

11인경우 Decode error인데 

 

이와같은 Interconncet에서 제대로 값이 전달이 안됐다는것이다 

DMA Master에서 DDR Slave로 data가 흘러가야하는데 AXI interconncet에서 값이 제대로 전달이 안되는것이라고 보면된다 

Quality of service signal

각 IP 마다 우선순위가 있다 따라서 QoS signal로 그 우선순위를 정하고, 동시에 값이 들어온경우 우선순위대로 처리할수 있도록 정해주는것이다

ID Signal

이를보면 각 채널마다 ID를 갖고있다. ARID를 보면 0번 ID가 먼저 Transaction이 됐는데

RID를 보면 1이먼저 Transaction이 된것을 볼 수 있다. 들어온 Data를 순서에 상관없이 내보낼 수 있다는 것이다 

이를 Data inter reading이라고한다 

Write의 경우 Write ID는 없다. 따라서 Write는 Address Transaction 순서대로 발생하게된다

WID는 AXI3의 경우에만 존재한다고 볼 수 있다. 즉 AXI4는 없다

Region signaling

이처럼 Master에서 Slave로 접근하게되는데 Slave0 Slave1이런식으로 접근했었다

하지만 Region Signal을 통해 Slave내에서도 영역을 나눠줄수 있다.

만약 Region이 없었다면 Address로 모두 접근해야했는데 Address가 아닌 Region으로 주소를 계산하는것이다. 그렇게되면 Address Decoding이 사용하게된다 

잘안쓰는듯 근데

'AXI' 카테고리의 다른 글

[AXI]RDMA 이론  (3) 2025.02.05
[AXI]AXI Standard Summary  (4) 2025.02.04
[AXI]AXI Lite 실습  (1) 2025.01.16
[AXI]AXI4-Stream  (1) 2025.01.15
[AXI] AXI4-Lite Interface  (2) 2025.01.14