임베디드 레시피

Egloos | Log-in





Bus Sizer Register와 Memory Controller - 메모리 확장구성과 CS와의 관계

MCU가 자신 이외의 외부 장치와 통신을 한다거나, control을 하는 것은 어떻게 이루어 질까요. 기본적으로 우리 메모리 시스템이 어떻게 구성되는지 살펴 보는 게 좋을 것 같습니다.
일단 기본적인 메모리 시스템의 구조 MCU내부에 CPU core가 있고, 이를 위한 Memory controller라고 보시면 될 것 같고요, Memory Controller를 통해서 외부의 Memory를 Access하고 Read/ Write할 수 있어요.
 
 
Core에서는 Memory control하기 위하여 발생시킬 있는 신호가 가지 있는데, 신호들은..

A[31:0] : 32 bit짜리 Address

D[31:0] : 당연히 32bit ARM core등에서는 32bit Data 필요하겠죠.

nRD : OE 관계된 Read하겠다는 신호

nWR : 마찬가지로 Write하겠다는 신호.
nWait :
외부 메모리가 Processor보다 느릴 경우, "프로세서야~ 기다려라" 하는 신호죠.

 

RD WR n 붙어 있느냐! 그건 차차 보기로 하고요, 일단은 A, D, RD, WR, Wait 신경 주세요. 여하튼 이렇게 구성된 System 한번에 16bit Data Access 있고요, Address 경우 Core 4GB 만들어 있고요, (2^32이니까요)

 

이때 실제 Memory 64MB짜리가 달려 있다면, (Data 8bit짜리) Address line 26, Data line 8개로 바꿔주는 회로가 필요하겠죠. 그것이 바로 Memory Controller 입니다.

(64MB = 2^26)

 

, 이런 얘길 꺼내느냐 하면, Memory 64MB 필요할 때도 있고, 많이 필요해서 128MB 필요할 때도 있겠죠. 그러면 가장 쉽게 Memory Controller control해서 128MB짜리 외부 메모리를 붙일 있도록 외부로 나오는 Address line 수를 조절하면 되겠죠. 경우에는 A[26:0] 있도록 Memory Controller 조절 하면 되겠습니다. 2^27=128MB. 이럴 사용되는 Bus Sizer Register에요보통 MCU들에는 이런 Bus Sizer Register들이 있어서, Memory Controller configuration 있답니다

 

그런데, Bus Sizer 조절하고 128MB짜리 Memory 올리고 싶은데, 시중에 파는 64MB밖에 없더라, 그럼 어떻게 해야 할까요. 64MB짜리 개를 달아야죠. 있나요. 그럴 쓰는 좋은 방법이 있어요. 뭐냐. 하면. 0~64MB까지는 A[25:0] 주소로 충분하죠. 이때, 오호 64MB~128MB까지는? A[26] 1 바뀌고 다시 A[25:0] 주소가 사용 가능합니다.

 

그러니까,

0~64MB까지는 0x0000000 ~ 0x0FFFFFF

64MB~128MB까지는 0x1000000 ~ 0x1FFFFFF

요렇게 되어 있죠.

 

오호라, 그러면

번째 64MB memory A[26]=0, A[25:0] Access하고자 하는 주소

번째 64MB memory A[26]=1, A[25:0] Access하고자 하는 주소의 형태로 해주면

 

번째 Memory 0~64MB, 번째 Memory 64MB~128MB 메모리로 사용할 있겠구나 하는 결론이 납니다.

 


  

 

요렇게 하니까 어때요! Controller의 A[26]을 사용 가능하게 하고, A[26]을 각각의 Memory의 CS에다가 Connection하는 거에요. 우리가 원하는 대로 연속된 주소의 128MB를 64MB 두 의 Memory를 이용해서 사용할 수 있겠지요. 그런데, 보통 이렇게 Bust sizer Register를 준비해 주시는 친절한 MCU가 있는가 하면, 그렇지 않은 MCU들도 많이 있어요. 그러다 보니, Address 공간을 내 마음대로 있는 녀석도 있고, 없는 녀석도 있는 게죠. 다행히 예의 System에서 A[26]까지 원래 Access가능하도록 ASIC되어 있는 MCU라면 이런 식으로 회로를 꾸밀 수도 있는데 아니라면 못 꾸미죠. 보통 이런 식의 불친절한 MCU들은 자신들의 Memory Map을 제공하는데요, Address에 따라서 CS를 어떻게 Assign했는지를 Data sheet에 제공합니다요.
 
Memory map의 예를 하나 들면, 

 
삼성의 어느 ARM을 base로 한 MCU의 Address Map의 예인데요, Chip을 보면 Address 공간들이 나와 있고, 그 Address를 Access하면 어떤 주변 장치에 Access되는지가 나와 있지요. 이 의미는 각 Address 공간에 대하여 어떤 CS가 활성화 되느냐를 나타낸 건데요, 예를 들면, 0x40000000을 Access하면 Memory Port1으로서 DDR/SDRAM Bank0의 CS가 활성화 된다는 것을 의미해요. MCU 외부로는 각 Device들에 대한 CS들이 pin으로 뽑혀 있을 테고요.
 
 
 
자 맨 처음에 nCS, nWE, nOE에서 n이라는 의미는 CS, WE, OE가 Memory Controller내부에 여러 개 있을 수 있다는 걸 의미 한다는 사실이지요. 게다가 Memory Map을 보니까, 한가지 종류의 Memory만 있는 게 아니고, 여러 종류의 Memory들이 엮여 있네요. 그러다 보니 Memory Controller도 Address와 Data line이외에 각각의 Memory에 맞는 control 신호가 더 필요할 텐데요, 이런 여러 종류의 Memory를 control할 수 있도록 제어 신호도 한꺼번에 Memory controller내부에 구현되어 들어가는데요, 그런 제어 신호들도 Access하는 주소에 따라 달라지겠죠. 이런 여러 종류의 Memory를 한꺼번에 지원할 수 있도록 만든 Memory Controller를 다른 말로는 EBI (External Bus Interface)라고 불러요. 자자, 이제 감 좀 오십니까?

by 히언 | 2009/09/09 22:36 | Device컨트롤 | 트랙백 | 핑백(1)

Linked at 친절한 임베디드 시스템 개발자.. at 2009/10/01 12:45

... ⓓ Bus Sizer Register와 Memory Controller - 메모리 확장구성과 CS와의 관계</a><a href="http://recipes.egloos.com/5108114"> ... more

◀ 이전 페이지          다음 페이지 ▶