이번 포스트에서는 AHB Bus의 중재, Arbitration관련 Signal들과 Arbitration 과정에 대해 정리해볼게요.

Arbitration을 관장하는 것은 Arbiter인데요.

앞선 포스트에서 설명했다시피 Bus에 여러 Master가 존재할 때(참고로 최대 16개의 Bus Master가 있을 수 있습니다.),

한 시점에는 하나의 Master만이 Bus에 Access를 할 수 있습니다. 

이 때문에 어떤 Master가 Bus Access할 지 조율해주는 녀석이 Arbiter이고 그 과정이 Arbitration입니다.

 


그럼 Intro에서 소개드렸던 Arbitration Signal들을 다시 가져와봅시다.

 

- Arbitration Signals

Arbitration Signals

· HBUSREQx : Bus master가 Arbiter에게 Bus에 대한 Access를 요청하는 Signal입니다.

Bus Master에는 HBUSREQx Signal이 존재하고 어떤 Bus가 Data Transfer을 위해서 Bus를 이용하고 싶다면

이 HBUSREQ Signal을 통해 Arbiter에게 나 Bus 쓰고 싶어!하고 말하는 것이라 보면 됩니다.

 

· HLOCKx : MasterSPLIT할 수 없는 Transfer을 수행할 때, HLOCK을 HIGH로 하여 HBUSREQ Signal과 같이 Arbiter에 요청하는 Signal입니다. 이때, Arbiter는 다른 Master에게 Bus Access 허용해서는 안됩니다.

SPLIT이 무엇인지는 바로 다음 포스트의 HRESP부분을 참고하시고쉽게 말하자면 Master가 중간에 끊을 수 없는 Burst Transfer을 할꺼니까 Transfer 중에 다른 Master한테 Bus 소유권 넘기지 마~라고 Arbiter에게 알리는 것입니다.

 

· HGRANTx : Arbiter가 현재 Bus를 요청하는 Master 중 가장 높은 우선순위의 Master를 나타내는 Signal입니다.

여러 Master가 Bus를 이용하려고 HBUSREQ를 보낼 때,

Arbiter는 가장 높은 우선순위를 가진 Master에 대한 HGRANT Signal을 HIGH로 올립니다. 

 

· HMASTER[3:0] : Arbiter가 현재 Bus 사용이 승인된 Master를 나타내는 Signal입니다.

즉, 현재 Bus를 점유하고 있는 Master를 해당 Signal로 나타냅니다.

 

· HMASTLOCK : Arbiter가 현재 TransferLocked Sequence임을 나타내는 Signal입니다.

 

· HSPLITx[15:0] : SPLIT-Capable SlaveSPLIT transaction을 완료할 수 있는 Bus Master를 나타내는데 사용하는 Signal입니다.

설명을 보면 알 수 있듯이 이 또한 SPLIT관련된 Signal입니다.

SPLIT이 일어나 Burst 중간에 Transfer가 끊겼다면 이 끊긴 Transfer를 다시 시도해야겠죠. 

끊겼던 Transfer를 재수행할 수 있을 때, 해당 Slave는 Arbiter에게 SPLIT됐던 Transfer 지금 할 수 있으니까

Bus 소유권 좀 줄래? 하고 Master 대신 Bus를 요청하는데 이때 사용되는 Signal이 바로 HSPLIT입니다.

 

Signal들에 대해서 설명을 해봤는데 이 Signal들로 어떻게 Arbitration이 이루어지는지 한번 정리를 해볼까요?

 

- Requesting Bus Access

1. Bus master HBUSREQx Signal을 사용하여 Bus에 대한 Access를 요청합니다. 

이때, Arbiter Clock의 Rising Edge에서 요청을 Sampling 하고 내부 우선순위 알고리즘을 통해 Bus에 Access할 다음 Master가 무엇인지 결정하게 됩니다. 

 

참고로, 일반적으로 Arbiter는 Burst Transfer가 완료될 때 다른 우선순위가 높은 Bus Master를 승인하는데
필요하다면 Arbiter Bus에 더 높은 우선순위를 가진 Master를 허용하기 위해 Burst를 조기 종료 시킬 수가 있습니다.

이럴 때, SPLIT이 발생하는 것이겠죠.

위와 같은 상황으로 Burst가 끊기지 않게 하려면 Master는 HBUSREQx를 보낼 때,

HLOCKx Signal을 HIGH로 해서 Arbiter에게 Burst 도중 Bus에 다른 Master가 승인되지 않도록 해야하겠습니다.

 

2. Bus를 요청한 Master가 우선순위가 가장 높다면 Arbiter는 HGRANTx signal을 이용해서

해당 Master가 Bus를 요청하는 Master 중 가장 높은 우선순위를 가진 Bus Master라는 것을 표시합니다.

 

3. Bus를 소유할 가장 높은 우선순위의 Master는 정해졌으니 이제 Bus 소유권을 가져와야겠죠.

따라서 앞선 Transfer가 완료(HREADY HIGH)되면 해당 Master는 Bus 소유권을 얻고

ArbiterHMASTER Signal을 변경하여 Bus Master Number를 표시합니다.

 

내부에서 어떤 알고리즘으로 우선순위를 정하는지는 알 수 없지만

어떤 방식으로 Bus를 요청하고 소유하게 되는 흐름정도는 이해가 된 것 같습니다 :)

그럼 다이어그램을 통해 확인해볼까요?

 

- Granting Access with no wait states

Bus Access with no wait state

#1 Master가 Bus를 사용하려고 T1이후에 HBUSREQ를 보냈고

T3 이후에 Arbiter는 #1 Master가 가장 높은 우선순위를 가졌다고 HGRANT Signal로 알립니다.

이어서 #1 Master는 Bus를 소유하게 되고 HMASTER가 해당 Master 번호로 바뀌게 되네요.

위에서 봤듯이 HBUSREQ -> HGRANT -> HMASTER 순서군요!

이건 no-wait state였고 wait state를 볼까요?

 

- Granting Access with wait states

Bus Access with wait state

위와 상황은 동일한데 HGRANT Signal이 High인 T4에서 HREADY가 LOW입니다. 

즉, 이제 Bus를 소유할  #1 Master 이전에 Bus를 소유한 다른 Master의 Transfer가 아직 완료가 안된 상태인 것이에요.

따라서 Wait State로 대기하다가 그 Transfer가 끝나는 T5시점(HGRANT, HREADY HIGH)에 Bus를 소유하게 됩니다. 

 

- Bus Ownership

Bus Master Handover

이것도 ARM 문서에 나와있는 다이어그램인데 Bus 소유권이 교체되는 상황을 잘 보여주는 것 같아 가져와봤습니다.

중요 시점들에 대해 정리해보자면 다음과 같습니다.

T2 ~T4 : Master #1 Bus Access, Burst Transfer (4-beat of Word burst transfer)

T5 : Burst 마지막에서 두번째 Address Sampling 시점에서 HGRANT signal 변경

T6 : HREADY LOW Handover X

T7 : Handover (master #1 → #2)

 


이상으로 AHB Bus의 Arbitration 과정을 살펴봤습니다.

AHB Bus에 대해 공부하며 드는 생각은 정말 세세하게 잘 짜여져있다는 느낌이 들어요. ㅋ_ㅋ

AHB Bus에 대한 포스트는 다음이 마지막일꺼 같은데요. 끝까지 화이팅합시다!

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