AMBA_bus_transfer_2

Learning stuff 2013. 2. 27. 21:36

AHB decoder!



chip select를 만들어주는 Decoder 부분이다. 걍 그림만....

Slave transfer response

Slave transfer response 란 slave가 주는 ack 라고 생각하면 된다.

-OKAY : ACK

-ERROR : Master에게 transfer가 error 이고 더 이상 같은 영역에 transfer를 계속 할수 없음. 2-cycle이 필요.

-RETRY : Master에게 transfer을 다시라하고 알리는거, 2-cycle 필요

-SPLIT : Transfer가 아직 성공적으로 끝나지 않았는데, 다른 마스터가 쓰려고 할때..... 2-cycle이 필요

중요한것은 이 신호들 모두 해당 동작의 DATA_PHASE 에 나오는 신호라는거....

그리고 OKAY를 제외한 신호 젠부다 2-cycle 이 필요한 이유는 pipeline 형식으로 되어있기 때문에 해당 HRESP를 받을때 ADDRESS PHASE로 이미 실행되어지고 있는 동작을 cancel 시킬 시간이 필요한데, 이를 2-cycle로 정의해주고 있다.

그렇다. 설명따윈 다 필용벗다. 예시를 보자.

첫번쨰 retry response는 다음과같다.

1. The master starts with a transfer to address A.

2. Before the response is received for this transfer the master moves the address on to A + 4

3. address A가 있는 slave 가 전송이 제대로 안되었는지 retry를 외치고 A+4는 cancel 하고 다시 시작해야한다. A+4은 cancel 이 되고 IDLE 로 대체가 된다.


두번째 error response는 다음과 같다

1. The master starts with a transfer to address A

2. Error 신호를 내주기전 slave가 판단을 내리려고 okay와 HREADY를 Low로 잡고 있는것을 볼 수 있다. 어? 잠만? 이거 뭔가 이상한데? 라고 하는 부분이라고 생각하면 될듯

3. Cancellllllllllllllllllllll!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

error 의 경우 예제와 같이 cancel 시킬수도 있고 신경 안쓰고 다음 사이클로 넘어갈 수도 있다.


SPLIT 에 대해서는 뒤에서 더 자세하게 함 보자................


Arbitration


arbitration 이란 arbiter가 master 의 bus 주도권을 조정해주는 과정이다. 기

기본적으로 모든 master 는 Request 를 인가하고 있고 그에따라 Arbiter가 매 rising edge 때 그 request 신호를 잡아서 고유의 priority scheme에 따라서 arbitration을 진행시켜 준다.

먼저 신호들을 보자.... 자세한건 spec 보고 대충...

HBUSREQx : (from Master) bus Master가 bus에 대한 access를 요청할때 걸어주고 있다. 예를들어 Arbiter가 최고 16개의 Master를 다룰수 있으니까 HBUSREQ[15:0] 이다.

HLOCKx : (from Master) request 와 같이 인가되며, 이게 인가되어 있으면 Lock transfer을 시작하게 된다. 일단 Lock transfer가 시작되면 전송이 끝마치기 전까지는 다른 Master에서 bus 주도권을 주지 않게 된다. 예를들어 burst를 시작하면 burst가 끝날때까지 독주 ㅇㅇ HLOCKx[15:0]

HGRANTx : (from arbiter) 가장 높은 priority 를 가진 master 에게 GRANT 신호에 high를 준다.

HMASTER[3:0] : (from arbiter) 현재 어떤 master 가 주도권을 잡고 있는지

그래 예를 보자


첫번째 예는 다음과 같다

1. HBUSREQ 가 걸린다.

2. 소정의 시간이 지난다.

3. HGRANT 가 바뀐다

4. Rising edge 때 HGRANT 가 바뀐걸 sampling 하고 HMASTER 이 #1로 바뀌고 #1이 주도권 잡는 Mode로 전환

두번째 예는 앞과 같은데 다른점이 있다면 HGRANT가 바뀐것을 rising edge일때 sampling 했음에도 불구하고 HREADY가 low 이기 때문에 #1 모드로 들어가지 않는다. 이 상황은 #1 전의 master 가 bus를 잡고 아... 잠깐만.... 하는 상황이라고 생각하면 된다.


세번째 예는 다음과 같다.

1. HGRANT 가 바뀐걸 sampling 하지만 HREADY가 low 라서 GG

2. HGRANT 가 바뀐걸 다시 sampling 해서 #2 모드로 바꾸어준다.

3. #2 모드로 바뀌었지만 Address phase 차원에서만 바뀌었고 Data phase 차원에서는 아직 #1 모드라고 생각하면 된다. 그리하여 데이터는 A+12 인 것이다.


네번째 예시는 burst 에 걸릴때의 모습이다.

1. HBUSREQ_M2 가 걸리고 rising edge 때 arbiter가 M2 에게 Grant 를 주어야 겠다고 판단.

2. 하지만 M1이 졸라 Bursting 중이기 때문에 안됨!

3. 마지막 Address 바로전 address에서 grant 의 상태를 바꾸어 줌

4. burst 마지막 Address 를 샘플링 할때 HGRANT_M2 도 같이 Sampling 되어 #2 모드로 들어가게 됨

마지막으로 세가지 addition

- Early burst termination : burst 막 달리고 있을때도 버스 중재가 가능하게(delay 안되게)

- Locked transfers : 현재의 진행중인 버스 사이클이 버스 중재로 방해받지 않게 하긔 HLOCKx

- Default bus master : 어떤 마스터도 버스를 점유하고 있지 않을때 Default Master 를 지정해주는거



'Learning stuff' 카테고리의 다른 글

AMBA_BUS_APB_1  (1) 2013.02.28
AMBA_Bus_transfer_3  (0) 2013.02.28
AMBA_Bus_transfer_1  (0) 2013.02.26
NAND FLASH_FTL  (0) 2013.02.25
NAND FLASH_읽기,쓰기  (0) 2013.02.24