Interconnect scaling

Learning stuff 2013. 3. 4. 14:45


- Interconnect pitch





- Transistor 같은 경우 performance 가 향상됨과 동시에 size도 작아지는 추세


- 반면에 metal interconnection 은 scaling시 interconnect delay 문제 때문에 scaling을 확확 하기가 어려븜 (feature size 는 0.7x 로 되는 반면 interconnect delay degrade는 2x 로 발생하는것을 볼 수 있음, 특히나 high frequency에서 심각함)


- 간단하게 RC delay는 다음과 같은 (P : Minimum metal pitch, W : metal width , L : line length)


한마디로 pitch가 작아지고 length가 길어질수록 RC delay가 확확 늘어나는것을 볼 수 있다.


그래서 미래의 전망

1. adding more layers of of interconnect

2. increasing metal aspect ratio

3. new interconnect materials


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

trace_driven 이란  (0) 2013.03.05
(dynamic instruction) vs (static instruction)  (0) 2013.03.04
Switching techniques  (0) 2013.03.02
NoC  (0) 2013.03.02
AMBA_BUS_APB_1  (1) 2013.02.28

Switching techniques

Learning stuff 2013. 3. 2. 21:12

NoC 를 공부하다 보니까 Switching 또는 Routing 에 대한 이야기가 많이 나와서 한번 적어본다.


Basic concept


router :

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

(dynamic instruction) vs (static instruction)  (0) 2013.03.04
Interconnect scaling  (0) 2013.03.04
NoC  (0) 2013.03.02
AMBA_BUS_APB_1  (1) 2013.02.28
AMBA_Bus_transfer_3  (0) 2013.02.28

NoC

Learning stuff 2013. 3. 2. 13:17



http://infoscience.epfl.ch/record/165542/files/00976921.pdf


NoC


SoC

Efficient communication

1. scalability, design reuse

2. wire length, delay of the physical length

3. power consumption reduction (long buses)


SoC(System on chip) 은 multimedia, consumer electronics domain 등등에서 design problem 들을 해결하여 왔다. 요즘 SoC 는 크기가 커지면서 (4bilion transistors running at 10GHz) 몇가지의 challenge에 부딪히고 있다. 몇가지를 꼽아보자면 첫번째로 synchronization 문제이다. 미래에 synchronization paradigm 은 아마 globally asynchronous 와 많은 스피드의 clock을 이용한 locally synchronous 가 섞인 형태로 갈것이라고 한다. 그 이유는 SoC의 scale이 커지면서, clock speed가 빨라지면서,  한개의 clock source로 무시할만한 clock skew를 가진 Global clock을 만들어 내기가 어렵기 때문이다. 이렇게 되면 SoC의 complexity가 높아지면서 synchronization failure이 자주는 아니지만 피할수 없는것이 된다. 더군다나 1V 이하로 작동하는 작은 logic의 경우 electrical noise 에 취약해 지기 때문에 reliability의 문제가 더욱 심각해진다.

이때까지 말한 문제들은 interconnect technology은 한계때문에 나타나는 것 들이라고 할 수 있고 이때문에 기존 SoC에서 general 한 network 에서 쓰이는 개념들을 사용하여 이러한 문제들을 풀려고 하는것이 Network-on-Chip 즉 NoC이다.

SoC도 우리는 component 들의 micronetwork 로 볼 수 있다. SoC의 micronetwork 가 general한 의미의 network와 다른점은 local proximity 에서 일어나는 일이기 때문에 non-determinism 이 적다는 것이다. 하지만 SoC의 complexity scale이 커지면서 즉, large-scale multiprocessor가 되면서 기존의 network 쪽에서 가지고 있던 그런 비슷한 issue 들이 발생을 하는 것이다.

Energy 측면에서 보았을때 device의 크기가 작아지면서 computation energy consumption이나 storage energy consumption은 비교적 작아졌다. 하지만 현재 delay optimization for global wire 기법은(뭔지는 잘 모르겠지만;;) communication에 쓰이는 energy consumption이 올라갈 것으로 예측되어진다.

-On chip transmission




5

Increased width reduces wire resistance, even considering the skin effect, while

increased spacing around the wire prevents capacitance growth. At the same time, inductance effects

increase relative to resistance and capacitance. As

a result, future global wires will function as lossy

transmission lines,1

as opposed to today’s lumped

or distributed resistance-capacitance models


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

Interconnect scaling  (0) 2013.03.04
Switching techniques  (0) 2013.03.02
AMBA_BUS_APB_1  (1) 2013.02.28
AMBA_Bus_transfer_3  (0) 2013.02.28
AMBA_bus_transfer_2  (0) 2013.02.27

AMBA_BUS_APB_1

Learning stuff 2013. 2. 28. 18:24

APB


AMBA BUS AHB 다음은 APB 이다!!

APB는 Advanced Peripheral Bus 라는건 다 아실테고 주변 장치... 그러니까 빠를 필요없는 보통 AHB와 같이 쓰인다. 어떻게 쓰이느냐 다음과 같이.....


그림과 같이 AHB 는 high performance, pipelined, burst operation 등등 그냥 좋은거 인데

APB 는 Low power, Simple interface, low bandwidth 등등 성능이 별로 좋을 필요 없는곳에....


다음은 APB 의 상태도이다. APB는 기본적으로 3가지 동작으로 이루어 진다

1. IDLE : the default state

2. SETUP : transfer 이 필요할때 첫 상태. selection 신호인 PSELx = 1

3. ENABLE : PSELx = 1 인 상태에서 enable 신호인 PENABLE 빵!



APB Write, APB Read 동작

Write 와 Read 동작 모두 아주 간단하다. Write냐 Read 냐의 차이는 PWRITE 가 1이냐 0이냐의  차이이다.


기본적인 Write Read 동작은 위 3단계에 맞추어 생각하면 될것같다


다음 두 그림은 AHB 와 연결하여 생각한 것이다.


첫번째 Write 를 보면

1. AHB의 Address phase

2. AHB의 Data phase

3. APB의 setup phase

4. APB의 enable phase

순이다.


READ는 

1. AHB의 Address phase

2. APB의 setup phase

3. APB의 enable phase 에 data가 나오고 동시에 AHB의 Data phase


APB 의 Burst operation

평범한건 똑같다. 그냥 SET_UP, ENABLE 이 반복이 되고 IDLE 상태가 없어서 이득이 된다는 것이 좋은점이다.


한가지만 이야기 한다면 Burst_of_write 나 read 에서 동그라미 친 부분에서 보낸 opreation 1 의 APB 에서 일어나는 SET_UP, ENABLE 과정때문에 HREADY 를 Low로 내려서 1 cycle 을 지연시키는것을 볼 수 있다. 

그 다음은 Back-to-back 임의의 주변장치를 대상으로 읽고, 쓰는 동작이 반복적으로 발생하는 상황이다. 그림 보고 설명 해봅시당


1. Operation 1 이 address phase 에서 write 로써 addr1 을 보내주고 있다.

2. Operation 2 가 따라오면서 read 로써 addr2 를 주고 있다. 동시에 Operation 은 data phase 로써 write 할 Data 1 을 주고 있다.

3. 기다려야 하기 때문에...... HREADY 를 low 로 내리고 APB로 넘어간 Operation 은 작업을 시작한다.

4. Operation 1 의 SET_UP

5. Operation 1 의 ENABLE

6. Operation 2 의 SET_UP

7. Operation 2 의 ENABLE

8. Operation 2 로 Data 2 가 툭 튀어나오는 동시에 rising edge 가 HIGH 로 복귀된 HREADY를 읽으면서 AHB 쪽 동작 즉 여기서는 Operation 3 의 Address phase가 진행되지

9. Opeation 4 의 Address phase 인 동시에 Operation 3의 data phase

10. 반복.............


즉 여기서 볼수 있듯이 Write 뒤에 Read가 올 시 Read 는 3-cycle 을 기다려야 한다. 뉴뉴


마지막으로 APH Overview

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

Switching techniques  (0) 2013.03.02
NoC  (0) 2013.03.02
AMBA_Bus_transfer_3  (0) 2013.02.28
AMBA_bus_transfer_2  (0) 2013.02.27
AMBA_Bus_transfer_1  (0) 2013.02.26

AMBA_Bus_transfer_3

Learning stuff 2013. 2. 28. 14:40

Split transfer

Split 이란 bus master 가 bus를 사용하고 있다가, operation 이 시작될때 까지 많이 걸리겠다 판단되면 bus 를 잠시 다른 master 에게 빌려주는거다. bus의 utilization 을 높이는 일이지.


split 의 과정이다. 해석하면 이상하니까 영어로 그대로

1. The master starts the transfer in an identical way to any other transfer and issues address and control information.

2. If the slave is able to provide data immediately it may do so. If the slave decides that it may takes a number of cycles, it gives a SPLIT transfer response.

During every transfer the arbiter broadcasts a number, or tag, showing which master is using the bus.

3. The arbiter grants other masters use of the bus and the action of the SPLIT response allows bus master to handover to occur.

4. When the slave is ready to complete the transfer it asserts the appropriate bit of HSPLITx bus to indicate which master should be regranted access to the bus

5. The arbiter observes the HSPLITx signals on every cycle, and when any bit of HSPLITx is asserted the arbiter restores the priority of the appropriate master

6. Eventually the arbiter will grant  the master so it can re-attempt the transfer. This may not occur immediately if a higher priority master is using the bus.

밑에는 예시이다...........

1. slave 가 뭔가 시간이 걸리겠구나 판단을 해서 2-cycle split 을 response 로 내놓음

2. rising edge 에서 split response 를 catch 하고 IDLE 을 넣어줌

3. B 모드로 바뀜 











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

NoC  (0) 2013.03.02
AMBA_BUS_APB_1  (1) 2013.02.28
AMBA_bus_transfer_2  (0) 2013.02.27
AMBA_Bus_transfer_1  (0) 2013.02.26
NAND FLASH_FTL  (0) 2013.02.25

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

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

NAND FLASH_FTL

Learning stuff 2013. 2. 25. 12:41

FTL을 하는 Flash의 특징과 FTL 의 역할


특징

1. Overwrite가 안된다. Erase의 단위(block)와 쓰기/읽기의 단위(page)가 다르다.

2. Flash 는 bad block을 가지고 있을수도 있다.

3. Flash 는 통상 100,000번 이상이 되면 wear_out 되어버린다.


역할

1. Block replacement 기능. FTL 이 가지고있는 Address conversion table이 하는 기능. 이렇게 한 이유는 Dynamic Wear Leveling(D.W.L) 에서 배드 블락이나 wear out 때문에 조절할때, 위에서 보기에는 논리주소를 바꾸지 않아도 해당 물리 주소만 변경될도록 해주면 되기 때문이다.

2. Dynamic Wear Leveling 기능이다. 특정 동일 블럭을 빈번히 사용할경우 해당 블럭은 빨리 노화되어서 


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

AMBA_bus_transfer_2  (0) 2013.02.27
AMBA_Bus_transfer_1  (0) 2013.02.26
NAND FLASH_읽기,쓰기  (0) 2013.02.24
NAND FLASH_특징  (0) 2013.02.23
Flash Memory 쪽의 기본  (0) 2013.02.23

NAND FLASH_읽기,쓰기

Learning stuff 2013. 2. 24. 00:03

타이밍 다이어그램 그냥 분석 ㅇㅇ

크게 CLE로 동작되는 커맨드 사이클, ALE로 동작되는 어드레스 사이클, 데이터 사이클(WE, RE)로 나뉘어진다



1. WE 신호의 상승엣지 구간시간에 낸드 플레시 읽기 1st(00h) 커맨드가 시작...... CLE가 On 되어있을때는 WE의 라이징 엣지에 버스에 걸리는 Data를 command latch로 전달해준다.

2. CLE가 low가 되고 ALE가 high 되면서 어드레스를 Column 그리고 LOW 의 순으로 팍팍 넣어준다. WE가 라이징 에지일때 낸드플래시에 Column 과 Row 어드레스가 차례대로 기록될것이다.

3. 마지막으로 커맨드 버스 사이클 CLE 가 high가 되고! 읽기 두번째 command인 30h가 똭 들어간다.

4. 읽는다.... 이때는 데이터가 대기 버퍼 큐에 준비가 되는 시간으로 보면 된다. 이때 마이크로 프로세서는 낸드 플래시의 R/B 신호를 GPIO 포트 단자로 계속 감시한다...

5. Busy 가 끝나면서 마이크로 프로세서는 RE의 Rising Edge에 맞추어서 팍팍 읽어주면 된다.....


간단하징?

1st 커맨드 사이클(CLE) => 어드레스 사이클(ALE) =>2nd 커맨드사이클(CLE) => 대기(BUSY) => 데이터 사이클 (Address) 순서이다.


이번엔 쓰기입니다



1. READ 와 똑같이 CLE로 전체 사이클을 시작하고, 기록 커맨드로 80h를 때린다.

2. CLE 가 Low 가 되고 ALE 가 high가 되면서 Column address와 Low address를 차례로 기록한다.

3. ALE 를 Low로 해주고 바로 쓸 데이터를 WE의 rising edge에 맞추어서 올려서 보내준다.

4. 쓰기의 두번째 command 인 10h를 때려주면, 그전에 쓰기 큐에 넣어났던 데이터들이 타겟 어드레스에 쭉 써지겠지. 물론 이때도 BUSY 상태가 된다. 읽기동작에 비해서 긴 WAIT가 필요하다. 이걸 tPROG 라고 하네

5. 그리고 마이크로프로세서가 Busy상태가 종료한것을 알아차리면 Read Status(70h)로 프로그램이 정상적으로 수행되었는지 확인한다. 읽어낸 상태바이트가 0이면 성공 1이면 실패를 의미한다.


1st 커맨드 사이클(CLE) => 어드레스 사이클(ALE) => 데이터 사이클 => 2nd 커맨드 사이클(CLE) => 대기(BUSY) => 3rd 커맨드사이클(CLE) => 상태비트 체크


이번엔 지우기....

근데 똑같아여


1. CLE로 전체 사이클을 시작하고 ERASE의 의미로 60h를 때려준다.

2. 그 다음은 ALE 사이클이다. 이번에는 Column address 없이 Row address 만 적어준다. 그 이유는 블럭단위로 erase가 일어나기 때문이다.

3. 커맨드 버스 사이클이 CLE 진행되어 지우기 2nd 커맨드가 기록된다.

4. 기둘기둘,.....(tBERS)

5. R/B신호를 GPIO 포트 단자로 감시하다가 종료되는걸 캐치

6. 상태비트 체크!


이런 순서대로 한다.








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

AMBA_Bus_transfer_1  (0) 2013.02.26
NAND FLASH_FTL  (0) 2013.02.25
NAND FLASH_특징  (0) 2013.02.23
Flash Memory 쪽의 기본  (0) 2013.02.23
H.264/AVC Prediction_3  (0) 2013.02.15

NAND FLASH_특징

Learning stuff 2013. 2. 23. 22:55

현재 NAND FLASH로 만든게.... SSD로 팔리고 있지...... 낸드는 다 좋다. 무게도 가볍고, 저전력에다가, 부피도 작고, 빠르고, 안정성 면에서도 기존 하드디스크 보다 좋다. 하지만 치명적인 약점이 두개가 있다. 바로 신뢰성 측명 즉 DATA ENDURANCE나 Wear out 이 쉽게된다는 점이다.


NAND FLASH의 이해


낸드는 셀당 1비트의 저장공간을 가지는 SLC(Single Level Cell)형과 셀당 2비트의 저장공간을 가지는 MLC(Multi Level Cell) 형으로 나뉜다.

MLC 는 아무래도 전자를 SLC 보다 더 fine 하게 집어넣었고 읽을때도 fine 하게 읽어야 하기 때문에 당연하게 데이터 유지(신뢰성) 및 메모리 사이클링 성능이 감소되는 단점이 있다.

이러한 이유로 MLC는 반드시 ECC(Error Collecting Code)회로를 필요로 한다.

SLC는 다시 두가지로 나뉘는데, 하나가 small block 이고 나머지 하나가 large block이다. 이는 각각 페이지의 크기가 (512+16)바이트 와 (2048+64)바이트로 차이를 보인다. 별로 안중요하다....

간단히 Flash memory 의 구조에 대해서 설명하자면 다음과 같다.

이 그림은 예시일 뿐이다. 한 PAGE는 (1K + 32) Word이고 이 PAGE들 64개가 모여서 1 BLOCK이 됩니다. 그리고 이 BLOCK 64개가 모여서 한 DEVICE 를 이룬다. 

여기서 읽기와 쓰기의 그리고 지우기의 단위가 다르다. 낸드는 페이지 단위로 RANDOM READ 와 WRITE 를 하고, Block 단위로 ERASE를 해 준다. 여기서 근본적인 플레쉬의 문제와 결부되어 심각한 Performance degradation해주는게..... 플래시는 Overwrite 가 안된다. 그렇다면 어떻게 데이터를 수정하지...? 할수 없지요 지우고 다시 쓰는수 밖에... 근데 이때 한 데이터를 Overwrite를 하기 위해서는 나머지 아무런 그냥 peaceful 하게 잘 지내고있던 64개 부분을 지웠다가 다시 써야하는 현상이 발생한다. ERASE 단위가 Block 단위기 때문에 생기는 엄청난 낭비이다.

그래서 이점을 쫌 보완해주기 위해서 쓰는 기법이 FTL 계층인데, 간단하게 말하자면 물리 섹터를 논리섹터 번호와 매핑 시켜주는 매핑 테이블을 만들어준다. 그리고 어떤 데이터를 수정하려고 할때 이것을 그냥 Overwrite 하는게 아니라, 나중에 overwrite를 해주고 새롭게 update 된 값은 다른곳에 따로 저장을 해 둔다. 그리고 그 논리섹터 번호에 매핑되는 물리섹터 번호를 바꾸어 주면된다.


그리고 다음 그림은 블락 다이어그램이다.

여기서 중요한것은 동그랗게 표시해놓은 Command 부분이다. 각 부분에 대한 설명은 다음과 같다.









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

NAND FLASH_FTL  (0) 2013.02.25
NAND FLASH_읽기,쓰기  (0) 2013.02.24
Flash Memory 쪽의 기본  (0) 2013.02.23
H.264/AVC Prediction_3  (0) 2013.02.15
H.264/AVC Prediction_2  (0) 2013.02.15