앞서 AHB Bus의 간단히 개요정도를 살펴봤고 이번부터는 본격적으로 Singal들과 동작에 대해서 살펴볼게요.

AHB Singal 표에서 APB에서는 보지 못한 Signal들이 몇개 있었죠. 

그 중에 HTRANS[1:0]라는 놈이 있었는데 이것 먼저 살펴봅시다.

 

- HTRANS[1:0] Signal

HTARNS[1:0]

이 Signal은 Master가 Slave에게 현재 Transfer 유형을 나타내는 Signal입니다.

설명을 읽어보시면 HRESP[1:0] Signal에 대한 내용이 같이 나오는데 HRESP Signal은 Slave가 Master에게 보내는 Response Singal입니다. 궁금하시다면 Response Singal부분을 한번 보고 오셔도 괜찮을 것 같습니다.

 

HTRANS Signal로 다시 돌아와서 살펴볼게요.

 

- 00(IDLE) : Data Transfer가 필요하지 않은 상황입니다.

즉, Bus 소유권을 쥐고있는 Master가 Data Transfer를 하지 않을 때 나타나는 Type이고

Slave는 이런 IDLE signal에 대해 OKAY response하고 Transfer는 이루어지지 않아요.

 

- 01(BUSY) : Bus Master가 Burst Transfer 중간에 Burst 동작을 잠깐 멈추는 상황입니다.

즉, 말그대로 Bus Master가 바빠서 Next Transfer가 즉시 발생할 수 없음을 나타내는 상황으로 
이 또한 Slave는 BUSY signal에 대해 OKAY response하고 Transfer는 이루어지지 않아요.

 

- 10(NONSEQ) :  NONSEQ는 Burst or A Single Transfer의 첫번째 Transfer를 나타냅니다.

참고로 NONSEQ는 Non-Sequential을 나타내는 것인데 이는 현재 이루어지는 Transfer의 Address나 Control Singal이

이전의 Trnasfer과 연관이 없다는 것을 나타낸다고 볼 수 있습니다. 

따라서 Single Transfer는 당연히 하나의 Transfer가 이루어지니 NONSEQ일 것이고 

Burst라는 것은 4, 8, .. 개의 Transfer가 줄줄이 이어지는 상황인데 

줄줄이 이어지는 Transfer 중 첫번째 Transfer에서는 NONSEQ을 나타내게 됩니다.

 

- 11(SEQ) : Burst Transfer에서 첫번째  Transfer는 NONSEQ라고 했습니다. 

그렇다면 Burst Transfer의 첫번째 Transfer 이후에 남아있는 Transfer는 SEQ가 됩니다.

이후에 나오겠지만 Burst Transfer를 할 때, Address는 이전 Transfer의 Address에서 +4, +8 .. 하는 방식으로 증가합니다.

즉, SEQ는 Sequential로 현재 이루어지는 Transfer의 Address나 Control Singal이

이전의 Transfer과 연관이 있음을 나타낸다고 볼 수 있습니다. 

 

그럼 문서에 나와있는 예시로 HTRANS Signal을 살펴보고 넘어갑시다.

HTRANS Example

 

위의 다이어그램은 HBURST Signal을 보니 Burst Transfer를 하고 있는 상황입니다. 

HTRANS[1:0]을 확인해보면 Burst의 첫번째 Transfer는 NONSEQ인게 나타나있고

또 BUSY Type으로 인해 Burst동작이 한번 지연된 것과 이후 나머지 Burst 동작이 SEQ Type임을 확인할 수가 있네요!

 


이전 포스트부터 Burst에 대한 얘기가 나오고 있는데 Burst Transfer에 대해서 드디어 알아보도록 하겠습니다.

Burst Transfer는 AHB Bus의 핵심입니다.

공부하기 이전에 Burst는 사전을 검색해보니 '터지다, 파열하다' 정도의 뜻으로 나오는데 

실제로 Burst Transfer는 연속적인 Transfer를 주루룩 하는것으로 어느정도 의미가 들어맞는 것 같기도 합니다 :)

 

자 그럼 이에 대해 본격적으로 공부해봅시다.

AHB Bus Signal들 중 HSIZE[2:0], HBURST[2:0] Signal에 따라 Burst Transfer는 달라지는데 그렇담 이 Signal들을 먼저 살펴봐야겠죠?

 

- HBURST[2:0]

HBURST[2:0]

HBURST Singal에 대한 정의는 위처럼 되어있긴한데 용어를 잘 모르겠죠. 

여기는 용어만 정리하면 아마 다 이해가 될 것 같습니다.

AMBA AHB Protocol에서는 Burst Transfer와 관련해 4, 8, 16 Beat Burst와 Undefined Length Burst가 존재하고
Incrementing 과 Wrapping Burst 모두 지원이 됩니다. 

 

먼저 beat의 의미는 Transfer의 단위로 보시면 되는데요.

만약 4-beat burst라면 4개의 Transfer을 주루룩 하겠다는 의미이고

8-beat burst라면 8개의 Transfer을 주루룩 하겠다는 의미입니다. 

 

그럼 Undefined Length Burst는 무엇일까요?

말 그대로 몇개의 Transfer를 하겠다! 정해놓는게 아니라 단순히 Incrementing Burst를 하겠다고 지정해놓고 
Address를 늘려가면서 Transfer를 하는겁니다. 즉, Transfer 개수(Beat)가 정해지지 않은거죠.

그러면 4, 8, 16 Beat Burst와 Undefined Length Burst는 해결이 됐습니다.

 

다음으로 Incrementing Burst와 Wrapping Burst에 대해 알아볼게요.

- Incrementing Burst

Incrementing Burst는 Address를 Sequential하게 늘려가면서 Transfer를 주루룩 하는겁니다. 

따라서 이런 Incrementing Burst 중 각 Transfer의 Address는 이전 Address에서 증가하게 되겠죠.

Address를 Sequential하게 증가시킨다고 했는데 그럼 Address가 얼만큼 증가할지를 어떻게 알까요?

그건 바로 HSIZE[2:0]를 통해서 알 수가 있습니다 :)

 

- Wrapping Burst

Wrapping Burst는 Incrementing Burst처럼 단순히 Address를 증가시키며 Transfer하는 것과 달리

Burst TypeTransfer Size를 통해 Boundary를 이뤄 그 범위 안에서 Burst Transfer하는 것입니다.

예를 들어 볼까요?

 

Start Address가 0x34, HBURST[2:0]이 010으로 4-beat Wrapping Burst이고

HSIZE[2:0]이 010으로 4-byte Transfer을 하는 상황이 있다고 해봅시다. 

그럼 Wrappinig Burst이기에 Boundary가 지정되어야 하는데 이 Boundary는 HBURST × HSIZE로 지정됩니다.

따라서 Boundary는 4(beat) × 4(byte) = 0x10이 되고

Transfer는 0x00~0x0F, 0x10~0x1F, 0x20~0x2F ... 꼴의 Boundary에서 이루어집니다.

여기서는 Start Address가 0x34이므로 Boundary는 0x30~0x3F가 되겠네요.

그럼 Wrapping Burst시 Address는 0x34, 0x38, 0x3C 그 다음 Boundary로 인해 0x40으로 갈 수 없으므로 0x30으로 가게 됩니다.

 

이렇게 용어에 대해 모두 정리하고 다시 위로 가서 HBURST[2:0] 표를 봅시다.

이제는 각 Signal이 뭘 말하는지 알 수 있겠죠?

 

- HSIZE[2:0]

HSIZE[2:0]

HSIZE[2:0]는 Transfer의 Size를 나타냅니다.

즉, Transfer시, 1-byte(Byte)를 보낼 것이냐, 2-byte(Halfword)를 보낼 것이냐, 4-byte(Word)를 보낼 것이냐 등등을 나타냅니다. 따라서 Burst시, Address는 이 HSIZE에 따라서 증가분이 달라지겠네요.

 

Burst Transfer 관련 Signal들에 대해 파악을 완료했으니

이제 Burst Transfer 관련 다이어그램을 보고 이번 포스트는 마치도록 하겠습니다. 

 

- 4-beat Incrementing Burst

4-beat Incrementing Burst

HBURST를 보니 INCR4로 4-beat Incrementing Burst이고 HSIZE는 WORD(4-byte)네요. 

따라서 시작 Address 0x38부터 4-byte씩 증가하며 4번(4-beat)의 Transfer가 
0x38, 0x3C, 0x40, 0x44로 이루어지는 것을 확인할 수가 있습니다.

 

- 4-beat Wrapping Burst

4-beat Wrapping Burst

다음은 HBURST를 보니 4-beat Wrapping Burst이고 HSIZE는 WORD(4-byte)입니다.

Wrapping 이므로 Boundary를 계산해보면 4(beat) × 4(byte) = 0x10이고

시작 Address 0x38이므로 적용 Boundary는 0x30~0x3F가 되겠네요.

따라서 Address가 0x38, 0x3C 다음에 0x40으로 가지 않고 0x30으로 되돌아 오는 것을 확인할 수 있습니다.

 

- 8-beat Incrementing Burst

8-beat Incrementing Burst

한번씩 살펴봤으니 이제는 다 똑같죠.

여기서는 HBURST를 보니 INCR8로 8-beat Incrementing Burst이고 HSIZE는 Half-WORD(2-byte)네요

따라서 Address가 2씩 증가하며 총 8번의 Transfer가 0x34,0x36, 0x38 ... 0x42로 이루어지겠습니다. 

 

- 8-beat Wrapping Burst

8-beat Wrapping Burst

HBURST를 보니 8-beat Wrapping Burst이고 HSIZE는 WORD(4-byte)입니다.

Wrapping이므로 마찬가지로 Boundary를 구해보면 8(beat) × 4(byte) = 0x20이고 

여기서는 Start Address가 0x34이므로 적용 Boundary는 0x20~0x3F가 되겠습니다.

따라서 0x34, 0x38, 0x3C이후에 다시 0x20으로 돌아가 Burst가 이루어지는 것을 볼 수가 있습니다.

 


이상으로 오늘은 AHB Bus에 대한 내용 중 Burst Transfer까지 알아봤습니다. 

Burst Transfer는 AHB Bus에서 High-Performance를 구현하는 중요한 개념이라 좀 길어졌네요.

이후 AHB Arbitration과 Response Signal에 대한 포스트로 다시 돌아오겠습니다!

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