지난 포스트에 이어 이번에는 AHB Bus에서 Slave가 Transfer에 대한 응답을 나타내는 AHB Response Signal, HRESP[1:0]부터 살펴봅시다.

참고로 이 Response와 관련해 APB Bus에서는 1-bit PSLVERR Signal로 Error가 발생하면 해당 Singal을 HIGH로 했었죠.

AHB Bus에서는 Slave는 Access가 이루어질때마다, Transfer의 상태를 나타내는 응답을 제공하게 되는데

이 응답은 2-bit의 HRESP[1:0]으로 나타나므로 총 4개의 응답을 제공할 수 있습니다.

그럼 이 4개의 Response를 살펴봅시다.

 

- HRESP[1:0]

HRESP[1:0]

HRESP에 있는 4개의 Response는 위와 같인 OKAY, ERROR, RETRY, SPLIT이 있습니다.

각각 살펴보면

00(OKAY) : Transfer의 성공적인 완료

 

01(ERROR) : Transfer에 대한 Error Condition을 나타내기 위해 사용됩니다.

즉, OKAY와 다르게 Transfer에서 Error가 발생했을 때 나타납니다.

 

10(RETRY) : Transfer가 완료되지 않았음을 나타냅니다.

이름부터 RETRY, 재시도죠. 따라서 Bus Master Transfer을 재시도 해야하며
Master Transfer가 완료될 때까지 RETRY하게 됩니다.

 

11(SPLIT) : SPLIT 또한 Transfer가 완료되지 않았음을 나타냅니다.

Transfer가 완료되지 않았으니 얘도 재시도를 해야겠죠. 

SPLIT같은 경우는 Master가 버스에 대한 권한을 다시 부여받을 때 Transfer을 재시도 합니다.

 

RETRY와 SPLIT의 차이가 이렇게 보면 잘 와닿지가 않습니다.

따라서 RETRY와 SPLIT의 차이는 뒤에 한번 다시 다뤄보도록 할게요.

 

HRESP로 돌아와서, 중요한 부분이 하나 있습니다. 

바로 OKAY를 제외한 나머지 ERROR, RETRY, SPLIT은 모두 최소 Two Cycle Response를 해야합니다.

이게 무슨말인가 하면 ERROR, RETRY, SPLIT을 나타날 때, 아래와 같이 2 Cycle 이상을 나타내야 한다는 의미입니다. 

2-Cycle ERROR Response

먼저 왜 2 Cycle 이상을 나타내야 하는지부터 알아봅시다. 

이유는 Bus의 Pipeline 특성 때문인데요. Slave가 ERROR, RETRY, SPLIT을 표현할 때, 

파이프라인으로 인해 뒤따라오는 Transfer에 대한 Address는 이미 Bus 실리게 됩니다.

근데 우리는 다음 Address에 Transfer를 할 게 아니고
Slave가 정상적이지 않다고 OKAY 대신 ERROR, RETRY, SPLIT 등등을 띄웠기 때문에 이를 처리해야합니다.

따라서 Two-Cycle Response는 Master가 파이프라인으로 인해 Bus에 실린 Address를 취소하기 위한 시간을 허용해주기 위함으로 생각할 수 있습니다.

 

그러면 이런 2-Cycle Response를 어떻게 구현할까요?

위의 다이어그램에서 볼 수 있듯이 HREADYLOW로 해서 2-Cycle 혹은 그 이상의 Cycle동안 Response를 나타낼 수 있습니다.

 

그럼 RETRY의 경우도 살펴볼까요?

2-Cycle RETRY Response

A Transfer가 재시도가 필요한 상황에서 Slave는 RETRY Response를 내는데 HREADY를 한번 LOW로 내려서

2-Cycle Response를 하고 있습니다. 

이때 다음 Address인 A+4는 취소가 되고 T4이후에 A Address에서 Transfer를 재시도하는 것을 확인할 수 있네요.


- RETRY vs SPLIT

RETRY와 SPLIT의 Definition을 봤을 때, 상당히 유사해보이고 무슨 차이인지 잘 모르겠어서 관련내용을 좀 찾아봤습니다.

Definition을 봤듯이 SPLIT과 RETRY 응답 모두 Transfer을 즉시 수행하지 못할 때 나타납니다.

또 SPLIT과 RETRY 모두 Burst 중간에 Bus의 점유권을 우선순위가 더 높은 다른 Master에게 내어줄 수도 있습니다.

이건 사실 특수한 경우로 보통 일반적으로는 Burst 도중에 더 높은 우선순위를 가진 Master가 온다고 하더라도
Burst Transfer 중간에 동작을 끊지 않습니다.

 

그럼 차이점이 뭘까보니 차이점은 Arbiter가 중재하는 방식에 있습니다.

RETRY는 Arbiter가 Normal Priority Scheme, 즉 기존 Priority를 계속 유지하므로
더 높은 우선순위를 가진 Master만 Burst를 끊고 Bus에 Access할 수 있지만
SPLIT의 경우 Arbiter
가 우선순위를 조정하여

더 낮은 우선순위를 가진 Master라도 Burst를 끊고 Bus에 Access할 수 있다고 하네요.

 

- SPLIT Transfer Sequence

SPLIT이야기가 나온 김에 Arbitration Signal도 배웠겠다 한번 어떻게 처리되는지 살펴보겠습니다.

 

1. Master는 다른 Transfer과 동일한 방식으로 Address 및 Control 정보를 통해 Transfer를 시작합니다.

 

2. 그런데 Slave가 Transfer이 실행되는데 많은 Cycle이 소모될 것이라 판단되어 SPLIT Response를 보내는 상황이라고 합시다.참고로 이런 SPLIT 응답은 모든 Slave가 할 수 있는 것이 아니라 SPLIT Response를 지원하는 Slave만이 가능합니다.

 

3. 이때, 추후 중단된 Transfer 재개를 위해 Master는 Transfer진행 당시 Address와 Control Signal을 기억하고 있어야 하며
Slave 또한 HMASTER[3:0] 번호를 통해 당시의 Master를 기억해 놓아야 합니다.

 

4. Arbiter는 우선순위를 조정하여 다른 Master에게 Bus 사용을 허용하고
Master Handover가 발생하도록 하여 Bus 소유권을 변경합니다.

 

5. 이후에 SPLIT 되었었던 Slave가 전송을 완료할 준비가 되었을 때,

HSPLITx bus의 적절한 비트를 통해 Arbiter에게 Bus에 대한 Access 권한을 다시 부여받아야 하는 Master를 나타냅니다.

이게 가능한 이유는 3번에서 Slave가 당시의 HMASTER 번호를 기억하고 있었기 때문이죠.

 

6. ArbiterHSPLITx 비트를 보고 Master의 우선순위를 복원하게 됩니다.

 

7. 이후 Arbiter는 Transfer을 다시 시도할 수 있도록 SPLIT되었었던 Master에게 Bus 소유권을 부여하고
Master가 기억해뒀던 Address와 Control Signal을 통해 SPLIT되었던 Transfer를 마치면
Slave는 OKAY Response를 보낼 수 있습니다. 

 


AHB Bus Protocol에 대해 공부한 내용 정리는 이번 포스트가 마지막입니다. 

Performance가 뛰어난 만큼 확실히 APB Bus에 비해서 공부할 양도 많았던 것 같네요 :)

Bus Protocol과 관련되어서는 AXI Bus를 공부할 예정인데 AHB Bus를 보니 겁나기도 합니다.

그래도 열심히 해봐야겠죠.. ㅋ_ㅋ

그럼 다른 주제로 돌아오도록 할게요!

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