본문 바로가기
Digital Design/SoC

[AMBA] AHB (Advanced High-Performance Bus)

by 스테고사우르스 2023. 2. 6.

이번에 다룰 주제는 AMBA 2.0의 AHB (Advanced High-Performance Bus) 입니다.

ARM이 제공한 Datasheet를 이용해 설명하도록 하겠습니다.

 

이름처럼 APB보다는 Performance가 뛰어난 Bus Protocol입니다.

APB와 겹치는 부분은 APB 게시글을 참고해주세요!

AMBA 2.0 APB: https://metastable.tistory.com/39


AHB Interconnection

APB는 하나의 Master가 여러 Slave에 연결되어 있는 반면,

AHB는 여러개의 Master가 여러개의 Slave에 연결되어 있습니다.

 

Master와 Slave가 연결 될 때 Bus를 타고 신호를 전송합니다.

이때 여러개의 M/S가 신호를 주고받으면 충돌이 일어나겠죠?

 

이를 방지하기 위해 신호등 역할을 하는 Arbiter가 존재합니다.

 

Arbiter는 어떤 Master가 Bus를 소유할 지 정해줍니다.

 

반대로 Decoder는 어떤 Slave의 값을 Master로 전할 지 decode합니다.

 


AHB signals

 

AHB에는 APB보다 더 많은 Signal들이 있습니다.

APB와 같은 신호는 생략하고 추가된 부분 위주로 살펴보겠습니다.

 

HSIZE: 전송할 데이터의 양을 결정합니다.

HTRANS: 전송 타입을 결정합니다.

                 IDLE, BUSY, NONSEQ, SEQ로 나뉩니다.

HBURST: 전송할 형태를 나타냅니다.

                 INCR, WRAP 등을 몇 bit씩 전송할 지 알려줍니다.

HRESP: 전송된 상태를 나타냅니다.

               OKAY, ERROR, RETRY, SPLIT으로 나뉩니다.

 

HBUSREQ: Master가 Arbiter에게 bus를 사용하고 싶다고 요청하는 신호입니다.

HLOCK: Master가 bus를 계속 사용하고 있으니 끊지 말아달라고 Arbiter에게 요청하는 신호입니다.

HGRANT: Arbiter가 가장 높은 우선순위를 가진 Master에게 High를 띄워줍니다.

HMASTER: 현재 bus를 사용중인 Master를 표시해줍니다.

HMASTLOCK: 현재 Master가 locked sequence를 수행중임을 나타냅니다.

HSPLIT: Slave가 다시 split transaction을 할 수 있다고 알려줍니다.

 

 

여기까지 Signal들을 간단히 소개했고

이제 timing diagram을 보면서 좀 더 구체적으로 설명하겠습니다.

 


Basic Transfer

 

기본적인 구조는 APB와 비슷합니다.

한 가지 다른 점은 Address phase와 Data phase가 나뉘어져 있다는 것 입니다.

 

Address를 먼저 전송한 후에 Data를 전송하는 것을 확인할 수 있습니다.

 

HREADY가 꺼져있으면 역시 extend 되는 것도 볼 수 있습니다.

 

이렇게 나눠 놓을 경우 어떤 장점이 있을까요?

 

 

Multiple Transfer

바로 이렇게 Pipelining을 할 수 있는 것 입니다.

 

Timing Diagram을 보면 write data A를 보낼 동안 address B를 동시에 보내고 있습니다.

 


AHB Burst Transfer

AHB와 APB의 가장 큰 차이점은 AHB는 Burst mode를 지원한다는 것 입니다.

Burst는 데이터를 한번에 쭉쭉 전송하는 것인데요,

Signal과 Timing diagram을 통해 알아보겠습니다.

 


  • Transfer Type

HTRANS[1:0] 로 현재 전송 사이클의 타입을 나타냅니다.

 

1. IDLE [00]

IDLE은 아무것도 하지 않는 상태입니다.

 

 

2. BUSY [01]

Master가 다음 transfer를 전송하지 못하는 상태입니다.

 

 

3. NONSEQ [10]

Burst의 첫번째 전송 혹은 단일 전송일 경우를 나타냅니다.

 

 

4. SEQ [11]

Burst가 진행되고 있는 상황을 나타냅니다.

 

Timing diagram을 보면 첫 transfer의 시작을 NONSEQ로 알리고 있습니다.

이후 addr 0x24를 전송해야 하는데 BUSY라서 전송을 하지 못하고 있습니다.

다시 SEQ type으로 넘어가자 addr를 전송하는 것을 볼 수 있습니다.

 


  • Burst operation

HBURST[2:0] 로 Burst operation을 결정합니다.

 

1. SINGLE [000]

Single transfer (하나만 전송)을 사용합니다.

 

2. INCR [001]

Addr을 증가시키면서 몇개 전송합니다.

이때 얼마나 전송할 지는 모릅니다.

 

3. INCRx

Addr을 증가시키면서 x개 전송합니다.

INCR4일때 timing diagram을 보겠습니다.

INCR라서 증가하는 방향으로 4개 전송하였습니다.

 

4. WRAPx

Addr를 감싸는 꼴로 전송합니다.

이게 무슨말이냐면, WRAP4일때 아래처럼 나뉘어있다고 해볼게요

0123 | 4567 | 89AB

그리고 시작주소가 2일 경우 < 2301> 순으로 전송합니다.

이렇게 단위별로 나눠놓은 주소를 감싸듯이 순서를 정하여 전송합니다.

그렇다면 INCR가 아닌 WRAP을 쓰는 이유는 무엇일까요?

데이터를 전송하다보면 꼭 첫번째부터 가져오지 않을 수도 있습니다.

Critical word first처럼 중요한 word부터 가져올 수도 있습니다.

중간부터 가져오되 앞의 데이터까지 가져오고 싶을 경우 WRAP을 사용합니다.

 


  • Transfer size

HSIZE[2:0]로 Transfer size를 결정합니다.

HBURST와 함께 Address boundary를 결정합니다.

앞에서 봤던 timing diagram을 다시 보겠습니다.

INCR4니까 증가하면서 4개를 가져오는데 HSIZE가 word 단위입니다.

따라서 0x38, 0x3C, 0x40, 0x44처럼 주소가 4씩 증가하면서 전송됩니다.

 


Slave Transfer Responses

HRESP[1:0] 로 Slave의 응답을 나타냅니다.

Slave가 전송하는 Signal입니다.

 

1. OKAY [00]

성공적으로 전송되었음을 알려줍니다.

 

 

2. ERROR [01]

에러가 발생해서 전송이 성공적으로 되지 않았음을 알려줍니다.

 

 

3. RETRY [10]

전송이 아직 완료되지 않았음을 나타냅니다.

Master는 완료될 때까지 재시도해야 합니다.

 

 

4. SPLIT [11]

마찬가지로 전송이 아직 완료되지 않았음을 나타냅니다.

Master는 재시도하긴 하는데 다른 Master의 bus가 승인되면 잠깐 멈춥니다.

 

RETRY와 SPLIT으로 인해 bus의 utilization이 향상됩니다.

 

 

Two-cycle response

HRESP를 보면 OKAY를 제외하고 아래와 같은 문장이 쓰여있는 것을 볼 수 있습니다.

"A two-cycle ~~~ response is required."

두 사이클이 필요하다는 뜻입니다.

그 이유는 HREADY에 있습니다.

 

extra cycle을 위해 HREADY가 Low로 내려가기 때문입니다.

Timing diagram을 보면 알 수 있듯이 두 사이클이 필요합니다.

 


Arbitration

Master가 bus를 사용하려면 그것을 승인해주는 신호등 역할의 Arbiter가 존재한다고 했습니다.

이번엔 Arbiter 관련 timing diagram들을 보겠습니다.

Signal은 위에서 정의하였으니 생략하겠습니다.

 

1번 Master의 Timing diagram입니다.

T1에서 Master가 Arbiter에게 bus 사용을 요청하였습니다. (HBUSREQ=HIGH)

이후 몇 사이클이 흐르고 T3에서 bus 사용이 승인되었습니다. (HGRANT=HIGH)

HREADY 신호가 뜨고 HMASTER에 1번 Master가 사용중이라고 표시됩니다. (#1)

 

여기서 빨간 화살표, 즉 Bus 요청이후 승인되기까지의 시간이 짧을수록 좋습니다.

이 시간이 성능을 좌우합니다.

 

 

이제 1번 Master의 bus 사용이 끝나고 다른 Master가 사용하게 되는 과정을 알아볼까요?

Master1의 HGRANT가 LOW가 되면서 Master2의 HGRANT가 HIGH가 됩니다.

이후 HREADY=HIGH가 되면 Master2의 bus 사용이 시작됩니다.

 


이렇게 AHB Bus Protocol에 대해 자세히 알아보았는데요

다음에는 더 성능이 향상된 AXI에 대해 공부해보겠습니다.

 


 

댓글