AMBA_Bus_transfer_1

Learning stuff 2013. 2. 26. 22:36

버스 overview 한번더




버스의 기본적인 동작부터 하나하나 살펴보쟝

Basic transfer


기본적인 Signal 에 대해서 설명하자면

HCLK : CLK 이다.

HADDR : Address 이다. (from Master)

HWDATA






: Write operation 일때 사용된다. (from Master)

HRDATA : Read operation 일때 사용된다. (from Slave)

HREADY : HIGH 일때는 전송이 제대로 이루어졌음을 의미하고, LOW 일때에는 transfer을 extend 하기를 원한다는 뜻이다. (from Slave)

먼저 기본적으로 동작을 하기위해서는 항상 address 와 control 을 보내야한다

그리고 모든 동작은 HCLK 상승엣지에 맞추어져 있으며

Address phase(address + control) 와 Data phase(data transfer)로 나뉘어져 있다.


1. 어드레스와 제어신호를 준비하여 버스에 싣는다.

2. 상승에지에서 어드레스와 제어신호를 인지한다

3. 세번째 상승엣지에서 읽기일때는 HRDATA에서 받고 쓰기일때는 HWDATA에서 보내준다.

4. 세번째 상승엣지에서 또한 HREADY를 읽어 HREADY 가 HIGH 임을 캐치하고 다음 operation 으로 넘어간다.


그렇다면 HREADY가 still low 이면 어떻게 될까? 어떻게 되긴 사이클을 extend 시켜준다 다음그림과 같이.


write operation 일 경우 bus master 가 extended cycle 만큼 data stable 을 유지해준다. (당연한게 from master 자나...)

read operation 일 경우 bus master 가 extended cycle 뒤 transfer이 막 끝나기 전까지 계속 valid data 를 내줄 필요가 없다. (이것도 당연한게 from slave 자나...)



Multiple transfer (Pipelined_transfer)

자 여기서 phase 는 두개가 있는데 각각이 따로 at least 1 clock 을 잡아먹는다. 이때 두 phase를 pipeline화(?) 시켜주면 어떨까... 해서 나온게 pipeline 동작! (별거아니고 그냥 두개를 겹침)

Transfer type

여기서 또 한개의 개념을 더 추가시켜 보자. 바로 HTRANS 이다. Trans 신호는 indicate type of current transfer 신호는 총 4가지가 있고 다음과 같다.

간단하게 요약하자면 

IDLE : Transfer should be ignored

BUSY : Transfer should be ignored, control and address info reflect the next transfer

NONSEQ : Transfer













SEQ : Transfer, (control_n+1 = control_n) AND (address_n+1 = address_n + 4)

주의 할것은 이 신호는 master에서 부터 나가는 것이다. 예시를 보자 

1. 처음은 burst mode 첫시작이라서 NONSEQ 다....(?)

2. 그 다음 사이클에 BUSY 라서 3에서 카피된다.

3. 세번째 사이클에서 SEQ 라서 그 전에인 0x20 에 4를 더한 0x24를 address 로..... master 가 준건지 아니면 slave가 직접 계산한건지.... 어쨌든 그렇다......

4. 네번째 사이클에서도 똑같다

5. 다섯번째 사이클에서는 slave 가 HREADY를 low로 잡고 안놔준다. 그렇기 때문에 다음 사이클 까지 똑같은 control 과 address를 잡고있는것이다.


Burst transfer

Burst transfer란 잘 아시다싶이 많은 단위를 쭈루루룩 전송하는것! 이를 위해 HBURST 라는 채널도 만들어지는데, 이건 몇가지 개념만 알면된다.

1. BEAT 란? 해당 전송 버스의 크기를 말한다. 예를 들면 슬레이브가 8비트 장치일경우 1BEAT = 8bit = 1byte 이다. 보통 슬레이브가 32비트 장치라고 가정할때에, 1BEAT = 32bit = 4byte 이다. HSIZE가 정의해 준다.

2. WRAP 란? aligned 경계 어드레스를 순환하는 구조를 의미. 예를 들어 1burst가 4byte 단위로 4번 전송, 즉 16byte 단위로 전송 하는 경우 burst 첫 address가 0x48 이 시작이라고 한다면 address는 순서대로 0x48, 0x4C, 0x40, 0x44 가 된다.

3. INC 란 데이터 전송의 크기가 정해지지 않는다. 대신 HSIZE 가 정의.


그리고 표를 보면


INC4 ,INC8, WRAP8 ....등등이 있는데, 이게 무엇을 의미하는가 하면... INC8 같은경우 HSIZE가 정의해주는 크기로 8번 WRAP8 같은 경우 HSIZE가 정의해주는 크기로 8번(Aligned 된 상태에서..)

예를 보자


첫번째 그림은 WRAP8의 예시이다. WRAP8이기 때문에 다음과 같이 된다.

-SIZE = Word

-Total trasfer SIZE per one burst= Word * 8 = 4byte * 8 = 32byte

-32byte 단위로 aligned 되기 때문에 0x00~0x1C , 0x20~0x3C 이렇게 Aligned


두번째 그림은 INC4의 예시이다. INC4이기 때문에 다음과 같이 된다.

-SIZE = Word

-Total transfer SIZE per one burst = Word * 4 = 4byte * 4 = 16byte

-Aligned 같은거 상관없음 ㅇㅇ

INC 같은 경우 버스트 전송이 완료되지 않은 즉, 진행중인 상태에서 버스중재가 일어 났을 경우 아직 진행되지 못한 버스트의 나머지 전송은 버스 중재이후 다시 점유권을 돌려받은 버스 마스터가 이전의 버스트 전송의 나머지를 'Undefined-length Burst를 이용하여 마무리' 한다. 다음은 각 halfword, word로 undefined length transfer 하는 예이다.





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

AMBA_Bus_transfer_3  (0) 2013.02.28
AMBA_bus_transfer_2  (0) 2013.02.27
NAND FLASH_FTL  (0) 2013.02.25
NAND FLASH_읽기,쓰기  (0) 2013.02.24
NAND FLASH_특징  (0) 2013.02.23