저번 포스트에서 AXI의 대표적인 특징인 Channel에 대해서 알아봤고
이번에는 AXI의 또 다른 특징인 Multiple Outstanding Address과 Out of Order에 대해서 살펴볼까 합니다.

먼저 Multiple Outstanding Address은 미처리된 Address를 여러개 발행할 수 있다는 뜻입니다.

무슨말인지 좀 더 살펴볼까요?

 

APB나 AHB Bus에 대해서 공부할 때 Read나 Write를 하기위해
Address와 Control Signal을 Setting을 하고 Transfer가 이루어졌었습니다.

그리고 한 Transfer가 끝나면 다음으로 Transfer할 Address와 Control Signal을 Setting을 했었어요.

APB에서는 IDLE-SETUP-ACCESS Phase / AHB에서는 Address-Data Phase를 지키면서 말이죠.

 

AXI에서도 동일하게 Address와 Control Signal이 Setting이 되어야 Transfer가 이루어지는데
다른점은 해당 Transfer가 끝나기 전에 다음으로 Transfer할 Address를 미리 발행할 수 있습니다.

게다가 필요하다면 Transfer할 Address 여러개를 미리 던져놔도 되는데

이게 Multiple Outstanding Address의 의미입니다.

 

그렇다면 Out of Order는 무엇일까요? 이는 Transfer 순서를 벗어날 수 있다는 뜻입니다. 

예를 들어 AXI의 Multiple Outstanding Address 특성을 이용해서 Transfer할 주소 A, B, C를 순서대로 던져놨는데
A, C, B 순서로 처리하는게 가장 빠르다면 그렇게 처리를 할 수 있습니다.

즉, Transfer할 주소를 발행한 순서대로 꼭 처리가 이루어지는 것이 아니라
Address 발행 순서를 벗어난 Transfer가 가능하다는 의미입니다.

 

위와 같은 Multiple Outstanding Address과 Out of Order 특징은 AXI를 더욱 빠르고 더 좋은 Performance를 가진 Bus로 만들어주게 되겠지만 이를 구현하려면 또 Signal이 필요하겠죠.

오늘 살펴볼 위의 특징들은 ID Field를 통해서 구현이 되게 됩니다.

그럼 ID Field를 살펴봅시다.


- ID Field

ID Field

ID Field는 위에 나타난 것처럼 각 채널별로 모두 존재하게 됩니다. 

이런 ID Tag를 통해서 Multiple Outstanding Address과 Out of Order 특성이 어떤식으로 구현이 되는지 알아보겠습니다.

 

먼저, ID Tag는 Write 혹은 Read를 하기 위한 Address를 Write Address Channel이나 Read Address Channel을 통해 보낼 때 함께 발행하게 됩니다. 

이 ID Tag에는 중요한 규칙이 있는데 같은 ID Tag를 가진 Transaction은 발행한 순서대로 처리되지만
서로 다른 ID Tag를 가진 Transaction은 발행한 순서대로 처리되지 않을 수 있다는 점입니다.

여기서 Transaction이라는 단어는 Read/Write 같은 하나의 Action들을 칭합니다.

 

- Read with ID Tag

글로만 보면 잘 와닿지 않으니 예시를 한번 살펴볼게요.

Read With ID Tag

시작주소 A, B, C에서 Burst Read를 하기위해 Read Address Channel을 통해 시작주소 A, B, C를 순서대로 발행한 상황입니다.

위에서 Read Address ID Tag, ARID를 보시게 되면 A와 C는 0, B는 1이네요.

앞에서 설명했듯이 ID Tag가 동일하다면 발행한 순서대로,
ID Tag가 서로 다르다면 발행한 순서 상관없이 처리가 가능하다고 했으니

여기서 ID Tag가 동일한 A와 C는 C가 먼저 처리되고 A가 처리되는 것은 불가능 하고
반드시 A가 처리된 이후에 C가 처리되는 순서로만 올 수 있겠습니다.

또 혼자서만 ID Tag가 다른 B는 발행 순서와 상관없이 어디든 끼어들 수 있겠네요.

따라서 이론적으로 가능한 조합은 B-A-C, A-B-C, A-C-B 정도가 있겠습니다.

 

그럼 공부한대로 Transfer가 이루어지는지 다시 위의 자료를 살펴볼까요?

Address 발행은 A,B,C 순서대로 이루어졌지만 Read Data Channel을 보게 되면 A와 B가 마구 섞여있고 C가 가장 나중에 처리되었습니다.

아무튼 A Address에 대한 Transfer가 모두 처리된 이후 C Address에 대한 Transfer가 처리되었으니
같은 ID Tag를 가진 A와 C사이에는 문제가 없고
B 또한 A, C와 ID Tag가 다른 녀석이니 어디든 끼어들어 올 수가 있었습니다.

 

한가지 짚고갈 점은 B Address에 대한 Transfer를 모두 처리하고 A, C Address에 대한 Transfer를 처리하는 것이 아니라 
B Address에 대한 Transfer와 A  Address에 대한 Transfer가 뒤죽박죽 섞여있다는 점인데요.

이를 Interleave라고 합니다.

B Address에 대한 Transfer를 처리하고 A  Address에 대한 Transfer를 처리하는 것보다
저렇게 Interleave를 통해서 빠르게 처리할 수 있는 것들을 우선적으로 처리하는 것이 Performance에는 좋을 것 같네요.

즉, ARID가 다른 Transaction의 Read Data는 Interleave가 허용된다 정도로 기억하고 넘어갑시다.

 

- Write with ID Tag

Write with ID Tag

이번에는 ID Tag를 가지고 Write할 때를 살펴봅시다. 

앞서 살펴본 것과 동일하게 Write Address ID Tag, AWID는 A와 C는 0, B는 1이고
Write Address Channel을 통해 시작주소 A, B, C를 순서대로 발행한 상황입니다.

 

보시다시피 Write Data Channel을 살펴보면 Interleave는 따로 존재하지 않습니다.

이와 관련해 ARM 문서에서 소개된 내용을 좀 정리해보고 넘어갈게요.

Interleave라는 것은 Data를 전달받는 Master 혹 Slave가 Interleave를 지원하는지의 여부에 따라 Interleave가 가능합니다.

Data를 전달받는 측을 생각해보면 Read는 Slave로부터 Master로 Data를 Transfer하는 것이지만
Write의 경우, Master가 Slave에게 Transfer를 하는 것이죠.

즉, Write할 때 Data를 전달받는 측인 Slave가 Interleave를 지원하는 Slave여야 Interleave가 가능하다는 것입니다.

하지만 일반적으로 Interleave를 지원하는 Slave는 거의 없기 때문에
Write시에 Write Data는 Write Address를 발행한 순서대로 Transfer된다라고 설명되어 있습니다.

 

즉, 여기 예시는 Interleave가 지원되지 않는 Slave에 대한 Write 예시이기도 하지만
보통 일반적으로 대부분의 Slave는 Interleave를 지원하지 않기 때문에
Write Data는 Write Address를 발행한 순서대로 Transfer된다로 이해할 수 있겠습니다.

 

위의 이유로 예시에서 Write Address를 발행한 순서 A, B, C 대로 Write Data도 A, B, C 순서로 Transfer가 됩니다.

반면에 Write Response Channel의 경우, Address를 받은 순서와 다르게 Response를 보낼 수 있는데
이때도 앞서 설명했던 같은 ID Tag를 가진 Transaction은 발행한 순서대로 처리되고
서로 다른 ID Tag를 가진 Transaction은 발행한 순서대로 처리되지 않을 수 있다는 규칙을 가집니다.

따라서 ID Tag가 같은 A, C는 발행 순서와 동일하게 A Response 이후 C Response가 나타나지만 
ID Tag가 다른 B는 발행 순서와 상관없이 가장 먼저 Response를 나타내는 것을 확인할 수 있습니다.

 


여기서 AXI Bus에 대한 내용을 마무리 하려고 했는데 쓰다보니 Write Response Channel을 통해 어떤 Response가 나타나는지에 대해 정리하지 않은 것 같아요.
이후 Write Response에 대한 내용을 정리한 포스트를 통해 AXI Bus를 마무리 해보도록 하겠습니다 :)

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기