이제 본격적으로 AMBA Bus의 Protocol에 대해서 공부해보도록 합시다.
참고로 이번 APB Bus에 대한 포스팅을 시작으로 AHB, AXI 순으로 진행할 예정이에요.

- AMBA 3 APB

앞선 포스트에서 스쳐지나가듯 말했듯 APB Bus는 빠르지 않아요.
APB는 전력 소비를 최소화하고 인터페이스 복잡성을 줄이기 위해 "최적화된 저가형 인터페이스"이고
따라서 APB Bus는 고성능의 Bus Interface가 필요하지 않은 주변 장치를 위한 녀석입니다.
즉, 빠른 속도가 필요하지 않은 주변기기 연결을 위해 간소화 시킨 Bus라고 생각하면 되겠죠.
그럼, APB Bus의 Signal부터 알아볼까요?

- APB Signal

APB Bus Signal

음,, 딱 봐도 Signal들이 많아 보이지 않죠? 간소화 되어있다는 것이 조금은 와닿는 대목이네요.
Signal들에 대한 Definition은 위의 표를 참고하시고 여기서는 간단하게 설명을 해볼게요.

참, 이부분을 설명드려야 할 것 같네요.
Bus system에 Connect되는 IP Block들은 Master, Slave로 그 역할을 구별할 수 있어요.
Master하면 뭔가 지시를 하는 입장인 거 같고, Slave는 그 지시를 수행할 것 같은 느낌이 나지 않나요? ㅎㅎ
그럼 대표적인 Master로는 CPU가 될 수 있겠고 Slave로는 DRAM과 같은 메모리가 될 수 있겠죠.
그러면 CPU라는 Master가 있고 DRAM이라는 Slave가 있다고 가정하고 Signal을 살펴봅시다.

- Write Transfer

Write Transfer

먼저, Master인 CPU가 Slave인 DRAM에 Write를 하고 싶을 때가 있을 거에요.
그러면 Master는 여러 Slave 중 자신이 접근하고 싶은 Slave(DRAM)를 고르고 (PSEL)
자신이 지금 Write를 할 거다~(PWRITE : 1)라는 신호와 (Read시 PWRITE Signal은 0이겠죠?)
DRAM 메모리 어디부분에 적을 건지 주소(PADDR)와 쓸 데이터(PWDATA)를 준비해야겠죠.
Master가 위와 같은 신호들의 준비를 모두 끝마치고 전송 가능하다는 신호(PENABLE)을 내보내게 되면 비로소 Slave인 DRAM으로 Transfer가 일어나면서 데이터를 Write할 수 있겠네요!

참고로 PREADY는 Slave가 보내는 Enable 신호인데요.
만약 Slave가 Master님이 준 일을 당장 처리할 수 없을 것 같다면 PREADY를 LOW로 해서 Master에게 기다려달라고 말하는 Signal이랍니다.

- Read Transfer
내친김에 Read할때도 살펴볼까요?

Read Transfer

Write와 동일하게 Master는 여러 Slave 중 자신이 접근하고 싶은 Slave(DRAM)를 고르고 (PSEL)
자신이 지금 Read를 할 거다~(PWRITE : 0)라는 신호와 DRAM 메모리 어디부분에서 읽어올지 주소(PADDR)를 제공해야하겠죠.
마찬가지로 Master가 준비를 마치고 전송 가능하다는 신호(PENABLE)을 내보내게 되면
Slave인 DRAM이 데이터가 준비완료 됐다는 신호(PREADY)와 해당 주소의 Read Data(RDATA)를 Bus에 실어 보냄으로써 Master는 Read를 수행하게 됩니다.

자, 각 Signal의 느낌은 대충 잡은 거 같으니 그럼 위의 설명대로 움직일지 Timing Diagram을 한번 살펴볼까요?

- Write Transfer

● Write Transfer with no-wait state

Write Transfer with no-wait state

다이어그램을 세세히 보기 전에 두가지는 기억하고 가도록 합시다!
① Bus는 Clock의 Rising Edge에 동기화되어있습니다.
그러니 위 다이어그램에서 Clock의 Rising Edge 시점인 T1, T2, T3지점을 집중해서 살펴봐야겠죠?
② 총 3가지의 Phase가 존재합니다.
위에 적혀있듯이 APB Bus에는 IDLE, SETUP, ACCESS Phase로 구별이 되어있는데
각 Phase에서 어떤 Signal이 HIGH가 되고 어떤 일이 벌어지는지 집중해서 보시면 좋을 것 같네요.

T0~T1 : IDLE State
자 그러면 먼저 IDLE State입니다.
IDLE State는 전송, Transfer를 하거나 준비하는 상황이 아닌 그냥 대기 상태를 의미하는게 전부입니다!

T1~T2 : Setup State
여기는 Setup State로 Transfer을 위한 Setup, 준비를 한다고 생각하면 됩니다.
앞서 글로 살펴봤던 것 처럼
Write를 위한 주소 PADDR, Write를 나타내는 PWRITE(HIGH), Slave를 선택하는 PSEL, Write할 데이터 PWDATA가 Bus에 올라가는 Phase인거죠!

T2~T3 : Access State
이제 Master는 Write할 준비를 끝마쳤다고 PENABLE을 올렸고
Slave도 자신이 Write될 수 있음을 PREADY로 표현하고 있네요.
그러면 Access 즉,Transfer가 일어나도 되는 시점이겠네요.
** 여기서 중요한 점은 모든 Signal은 T2~T3사이에 준비가 되었지만
실제로 Transfer가 이루어지는 시점은 Clock Edge인 T3인 것을 꼭 명심해야겠죠. (Clock Rising Edge 동기화)


● Write Transfer with wait state

Write Transfer with wait state

위에서는 Slave가 Master에게 기다려달라고 PREADY를 내리거나 하지 않았어요. (no-wait)
그러면 이번에는 Slave가 PREADY를 중간에 내려서 Master에게 기다려달라고 요청하는 상황을 볼께요.

다이어그램을 보게되면 Master는 보낼 수 있다고 PENABLE을 HIGH로 했는데 Slave가 PREADY Signal을 LOW로 하면서
Clock Rising Edge인 T3 시점에서 Transfer가 이루어지지 못하고 Wait되는 것을 확인할 수가 있네요.
다음 Clock Rising Edge인 T4 시점에서도 마찬가지로 Wait하고 있군요.
T4~T5사이에 Slave가 여유가 생겼나봅니다. 이제 처리할 수 있어요~ 하고 PREADY를 HIGH로 올려줬고
Clock Rising Edge인 T5 시점에 드디어 Transfer가 이루어지고 있는 모습입니다.

** Wait 하는 동안 준비된 다른 signal들이 당연히 바뀌어서는 안되겠죠? Transfer가 될 때까지 Stable하게 유지해줘야 해요

- Read Transfer

오늘은 Read Transfer까지 보고 마칠게요. 마찬가지로 no-wait과 wait으로 분리해서 살펴봅시다.

● Read Transfer with no-wait state

Read시에도 각 Phase는 동일하게 적용이 됩니다. 살펴봅시다!

T0~T1 : IDLE State

T1~T2 : Setup State
앞서 살펴봤던 것 처럼
Read를 위한 주소 PADDR, Read를 나타내는 PWRITE(LOW), Slave를 선택하는 PSEL이 Bus에 올라가는 Phase에요.

T2~T3 : Access State
Master가 Read할 준비를 끝마쳤다고 PENABLE을 올렸고
Slave는 Master가 지시한 Read Data가 준비되었음을 PREADY로 표현함과 동시에 PRDATA를 Bus에 올려주네요.
따라서 Read Transfer가 일어나는 시점입니다.
Write를 보고 오니 별거 없죠? ㅎㅎ

● Read Transfer with wait state

Read Transfer with wait state

Write 때와 비슷하게 Master가 읽어오라고 지시를 했는데
Slave가 좀만 기다려달라고 PREADYLOW로 내리면서 Wait이 걸리고 있네요.
따라서 PREADY가 LOW일 때, PRDATA가 Bus에 올라가지 않고 대기를 하고 있다가
PREADY가 HIGH가 되면서 PRDATA가 Bus에 올라가는게 보이죠?!
Write와 동일해서 설명은 줄이겠습니다. :)

이상으로 APB Bus의 기본적인 Transfer에 대해서 살펴봤습니다.
Bus의 Signal들과 그 Signal들이 각 Phase에서 어떻게 동작하는지 확실히 알아야
설계한 IP Block Bus에 잘 연결할 수가 있을테니 좀만 더 힘내서 공부를 해야겠어요!

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