AHB 대비 AXI 프로토콜의 장점 몇 가지
– 이 글은 2014년 3월 28일 이글루스 블로그에 올렸던 글인데 서비스 종료로 옮겨 온 글입니다.
지난 번 AHB 프로토콜에 대해서 간단히 글을 썼었는데, 이번엔 좀 더 글의 범위를 넓혀서 AHB 프로토콜과 비교하여 AXI 프로토콜이 가진 장점에 대해서 한 번 정리해 보려고 합니다. AXI 프로토콜은 먼저 발표된 AHB 프로토콜의 단점을 보완하고 변화하는 칩 설계 환경을 반영하기 위해 2003년에 AMBA 3 프로토콜의 일부로 처음 발표 되었고, 2010년 AMBA 4, 2013년 AMBA 5 가 연속해서 발표 되면서 지속적인 업데이트가 이루어 지고 있습니다. (http://en.wikipedia.org/wiki/Advanced_Microcontroller_Bus_Architecture 참조) 각 AMBA 버전에 따른 AXI 프로토콜의 이름은 AMBA의 이름을 따라서 AXI3, AXI4, AXI5 등으로 붙여지는데 이 글에서는 가장 기본적인 AXI3와 AHB를 비교해 보도록 하겠습니다.
AXI 프로토콜이 발표된 배경에는 NoC(Network-on-Chip) 설계 기법의 등장이 있습니다. 2000년대 초반 부터 미세 공정 기술의 발달과 함께 시스템의 주요 기능을 하나의 칩 안에 집적하는 SoC (System-on-Chip) 설계가 널리 퍼지기 시작했고 이와 함께 서로 연결되어야 하는 CPU, 메모리 컨트롤러, DMA, GPU, 기타 등등 기능블럭의 숫자가 점점 늘어나게 되었습니다. (앞으로 이러한 기능 블럭들은 줄여서 IP 라고 부르도록 하겠습니다. IP = Intellectual Property) 연결되어야 할 IP의 갯수가 많다 보니 하나의 버스를 나눠쓰는 방식으로는 확장성에 한계를 느끼기 시작했고, SoC 안에서도 버스 대신에 여러개의 스위치로 구성된 패킷을 주고 받는 네크워크가 필요하다는 공감대가 형성되었지요. 이러한 이유로 NoC설계 기법이 주목받기 시작했는데 NoC의 등장배경에 관심이 있다면 링크의 논문을 읽어 보시기 바랍니다. 1000번 이상 인용된 NoC 연구자들 사이에서는 꽤나 유명한 논문입니다.
이제 본론으로 들어가서, AXI 프로토콜이 가진 장점에 대해 이야기 해 보도록 하겠습니다. 앞에서 이야기한 NoC 설계 기법과 관련이 있는데, AXI 프로토콜의 첫번째 장점은 패킷을 주고 받는 네트워크를 설계하기에 편하다는 점 입니다. AHB 프로토콜의 경우는 address phase와 data phase가 함께 이어져 있어야 하기 때문에 DDR SDRAM 이나 플래쉬 메모리처럼 접근시 초기 latency가 있을 경우 data가 전송되지 않으면서도 버스를 점유할 수 밖에 없는 상황이 발생 합니다. 반면에, AXI 프로토콜의 경우는 address와 data channel을 독립적으로 분리하여 칩상의 네트워크를 쓸데없이 점유하는 상황을 피할 수 있습니다. 간단한 예로 아래의 경우를 한 번 살펴보도록 하겠습니다.
0x1000 번지의 메모리로 부터 4개의 연속된 data A, B, C, D를 4-burst로 읽어 들이는 상황에서 5 사이클의 초기 latency가 발생하는 경우 AHB와 AXI 인터페이스의 주요 신호들이 어떤 식으로 동작하는지를 비교한 그림 입니다. AHB의 경우에는 메모리의 5 사이클 latency 동안 (그림의 빨간색으로 표시된 부분) HTRANS 신호의 상태가 SEQ로 유지되어 버스를 점유해야 하지만, AXI의 경우 read address channel을 통해서 1 cycle 만에 address 정보를 보내고 5사이클 이후에 독립된 read data channel을 통해서 data를 읽어 들이기 때문에 메모리의 latency가 발생하는 동안에도 버스 또는 온칩 네트워크의 스위치를 점유하지 않는 장점이 있습니다. Data에 접근할 때 발생하는 latency 동안 온칩 네트워크를 점유하지 않는 특징은 NoC를 설계할 때 엄청난 장점, 아니 필수적인 요소가 되는데 다음과 같은 상황을 생각해 보면 쉽게 알수 있습니다.
왼쪽 그림의 예와 같이 IP의 개수가 적을 경우에는, Master IP 0와 Master IP 1 사이에서만 버스를 나누어 쓰게 되므로 Slave IP 들의 latency를 기다리면서 data가 전송되지 않음에도 버스를 점유하더라도 성능상에 크게 문제가 되지 않습니다. 하지만 오른쪽의 예와 같이 여러개의 Master IP 와 Slave IP가 여러개의 crossbar switch를 통해 연결된 경우에는 큰 문제가 발생하게 됩니다. Master IP 0가 Slave IP 0를 access 하는 동안 중간의 link를 쓸데 없이 붙잡고 있다면 나머지 Master IP들은 Slave IP1 ~ IP3가 자유로운 상태임에도 중간의 link가 막혀서 접근할 수 없게 되는 것이지요. (그림은 Master IP 0 때문에 Master IP 4가 Slave IP1~3 까지 어느 것도 접근하지 못하는 상황입니다.) 이러한 이유로 AXI 프로토콜은 AHB에 비해 복잡한 온 칩 네트워크를 구성하는데 매우 유리한 장점이 있습니다.
AXI의 또 다른 장점은 multiple outstanding request를 (이하 MOR) 지원 한다는 점입니다. 먼저 설명을 위해 AXI 프로토콜에서 하나의 read/write 동작이 아래와 같은 순서로 이루어 짐을 짚고 넘어 가겠습니다.
AXI read : Read address channel로 address 전송 (AR channel phase) –> Read data channel로 data 읽음 (R channel phase)
AXI write : Write address channel로 address 전송 (AW channel phase) –> Write data channel로 data 쓰기 (W channel phase) –> Write response channel로 쓰기 완료 확인 (B channel phase)
상대적으로 간단한 read 동작의 예를 들어 MOR이 지원될 경우와 지원되지 않는 경우의 AR/R channel phase 순서를 비교하면, MOR 지원 여부에 따라 아래와 같이 동작이 달라지게 됩니다. (0x1000, 0x2000 번지를 순서대로 read 한다고 가정)
MOR을 지원하지 않는 경우
AR channel phase (0x1000) –> R channel phase (0x1000) –> AR channel phase (0x2000) –> R channel phase (0x2000)
MOR을 지원할 경우
AR channel phase (0x1000) –> AR channel phase (0x2000) –> R channel phase (0x1000) –> R channel phase (0x2000)
(참고로 MOR을 지원할 경우 위의 두 가지 방식 중 어느 방식으로 동작하더라도 AXI 프로토콜에 부합합니다.)
즉 MOR을 지원한다면 Master IP는 먼저 보낸 read(또는 write) address에 대한 data 읽기(또는 쓰기)가 완료되었는지 여부에 상관없이 바로 다음에 접근할 read(또는 write) address를 미리 보낼 수 있게 되는 것입니다.
MOR이 지원 될 경우의 장점은 DDR SDRAM과 같이 throughput은 높지만 초기 접근시의 latency가 큰 메모리에 접근할 때 명확해 집니다. 위의 예에서 0x1000 번지와 0x2000 번지에서 순차적으로 data를 읽어 들이는 경우 메모리 latency 가 50사이클이라고 가정하면, MOR의 지원 여부에 따라 아래와 같은 성능 차이가 발생하게 됩니다. MOR을 지원할 경우에는 첫 번째 read request를 보내고 data가 돌아올 때 까지 기다리는 시간을 낭비하지 않고 바로 두 번째 read request를 보낼 수 있어 53 사이클 만에 두 주소에 대한 읽기 동작이 완료 되지만, MOR을 지원하지 않는 경우 50 사이클의 latency를 두 번 겪을 수 밖에 없어서 똑같은 동작에 대해서 103 사이클의 시간이 걸리게 됩니다.
AXI의 또 다른 장점은 각각의 read/write request에 다른 AXI ID를 사용할 수 있다는 점입니다. AXI 프로토콜에서는 각 request의 ID로 사용될 수 있는 A(R/W)ID (= ARID or AWID) 신호를 정의하고 있는데, A(R/W)ADDR 신호와 함께 전송되는 A(R/W)ID신호를 이용하여 시스템 관점에서 다양한 기능을 구현 할 수 있습니다. 아래는 간단한 예인데, AXI ID 정보를 온 칩 네트워크의 Quality-of-Service (QoS)와 연동하는 상황을 가정해 봅시다. 만약 CPU의 Memory Management Unit (MMU)에서 페이지 miss가 발생한다면 MMU는 TLB의 miss가 발생한 부분을 새로 채우기 위해 1~ 3단계에 걸처셔 페이지 테이블을 읽어 들이는 page table walk을 수행해야 합니다. 이 경우 TLB miss 때문에 같은 page에 접근하는 모든 read/write가 잠시 멈추게 되어 전체 동작의 성능이 저하되는 상황을 피하기 위해 시스템 설계자는 page table walk을 수행하기 위한 MMU read request에 특정한 AXI ID를 할당하고 온 칩 네트워크의 QoS 관리정책에서 해당 AXI ID에 우선권을 주는 방법을 설계상의 선택지로 고려할 수 있습니다. 물론 예로 든 이러한 방법이 정말 이득이 있는지는 시스템 구성과 응용분야에 따라 달라지겠지만 AXI의 ID가 제공됨으로 인해 적어도 시스템 설계상의 자유도는 올라가는 것이지요.
그리고 AXI ID는 memory consistency model 과 관련된 memory ordering을 구현하는데도 도움이 됩니다. AXI 프로토콜에서는 같은 ID를 가진 request에 대해서는 응답이 request를 보낸 순서대로 와야 하지만, 다른 ID를 가진 request들 간에는 응답이 오는 순서가 상관이 없기 때문에 반드시 순서가 유지되어야 하는 메모리 접근의 경우에는 같은 AXI ID를 사용하여 in-order 동작을 강제하고 메모리 접근 사이의 의존성이 없는 경우에는 다른 AXI ID를 사용하여 out-of-order 동작을 허용하여 시스템의 전반적인 성능을 향상 시키면서 시스템 동작의 정확성(correctness)도 잃지 않을 수 있습니다. 반면에 AHB 프로토콜을 사용하면 하나의 master IP에서는 이전 transaction이 끝나야만 다음 transaction을 시작 할 수 있기 때문에 in-order 메모리 접근 이외에는 허용이 되지 않습니다.
그 밖에 AHB에 비해 AXI가 가진 장점이 많이 있겠습니다만, 분량이 너무 많아지는 것 같아 한 가지만 더 언급을 하면서 이번 글을 마무리 하도록 하겠습니다. AXI의 또 다른 장점은 write 동작을 할 때 WSTRB 신호를 사용하여 한 번에 write 하는 data width에 상관없이 자유롭게 byte 단위로 일부분을 선택하여 write를 수행할 수 있다는 점 입니다.
위의 그림과 같이 32-bit data를 byte(8-bit) 단위로 4등분 한 후 그중의 1~4개 부분을 선택적으로 write 하는 경우를 생각해 봅시다. (파란색이 선택적으로 write가 수행되는 부분입니다.) AHB의 경우에는 HSIZE 신호를 이용해 8, 16, 32, 64 ~ 1024 의 단위로 몇 bit 접근인지 만을 표시할 수 있고 주소를 나타내는 HADDR 신호는 HSIZE에 맞춰서 align이 되어야 하는 제한이 있기 때문에 윗 그림의 상단부와 같이 byte가 1, 2, 4개로 연속된 경우에만 한 번에 write를 수행할 수 있습니다. 윗 그림의 하단부와 같이 연속되지 않은 byte를 update 할 경우에는 상단부의 가능한 조합 중에서 하단부의 조합을 만들 수 있는 두 가지 조합을 잘 찾아 두 번에 걸쳐서 write 동작을 수행해야 하지요. 하지만 AXI의 경우에는 WSTRB 신호를 사용하여 32-bit 중에 byte 단위로 어떤 부분을 write 할지 선택할 수 있기 때문에 어떤 경우에도 한 번의 write 동작으로 partial byte update를 수행할 수 있습니다. 이 경우 필요한 WSTRB 신호의 값은 그림에 함께 표시되어 있습니다.
이제 제가 생각하는 AHB 프로토콜 대비 AXI의 장점을 다시 한 번 정리 하면서 글을 마무리 하겠습니다.
- 복잡한 온 칩 네트워크를 구성하는데 유리
- Multiple Outstanding Request를 지원하여 latency가 길게 발생하는 메모리 접근에 유리
- AXI ID 지원으로 시스템 레벨에서 다양한 온 칩 네트워크 QoS 구현 가능
- WSTRB 신호를 이용하여 partial byte update 동작 수행시 AHB 대비 유리
글을 길게 쓴 것 같은데 간단히 정리하니 몇 가지 되지 않네요. -_-; 물론 이것 말고도 다른 장점이 더 있습니다만, 저는 저의 칩 설계 경험에서 느낀 몇 가지만 정리를 해 보았습니다. 긴 글 읽어 주셔서 감사합니다.