메모리 타이밍에 대한 이해

Hardware 2012. 10. 16. 11:02

[출처] [참고] 메모리 타이밍에 대한 이해 |작성자 에시르

 

1. 메모리 구조와 데이터 전송의 이해.

 

프로그래밍을 조금이라도 접해본 사람은 배열에 대해 잘알고 있을것이다.


메모리를 단순화 시켜보면 이러한 배열의 연속이다.


여러개의 기본단위인 뱅크(Bank)로 구성되어 있고


각 뱅크는 행(Row)과 열(Column)로 구분된 바둑판같은 나열안에


데이터를 저장하는 단위인 셀(Cell)이 채워진것이 메모리의 구조이다.


메모리가 데이터를 읽는 순서를 알아보면 간략화해서 6단계정도로 볼수 있다.

 

 

 

 

1단계: CPU가 필요로 하는 데이터가 담겨져 있는 메모리주소를 보내온다.

 

2단계: 메모리 주소의 행(Row)정보를 보고 알맞은 뱅크의 행을 활성화(Activate)시킨다. 

 

3단계:활성화된 행에 있는 데이터를 센스증폭기(sense amplifier)로 보낸다. 

 

4단계: 센스증폭기가 데이터를 모두받으면 읽기준비가 되며 메모리주소의 열(Column)정보를 받아들인다.

 

5단계: 해당열에 있는 데이터를 센스증폭기에서 출력핀으로 보낸다.

 

6단계: 출력이 끝나면 센스증폭기에 있던 데이터를 원래의 메모리 위치로 복귀시키고 닫는다.

 

 

뭔가 상당히 복잡해보이지만 마찬가지로 행과 열을 가진 데이터를 저장하고 읽는


액셀프로그램에 비교해보면 간단히 알수 있다.


어떤위치에 있는 데이터를 찾을때(1단계) 행을 먼저 지정하고(2~3단계) 원하는 열로 이동해서(4단계)


거기에 적혀있는 데이터를 읽는것(5단계)이다.

 

이러한 과정이 메모리에서 일어날때 과정에 따라 시간이 걸리게 된다.


시간은 제품에 따라 다르게 되며


또한 같은 제품의 메모리라 해도 제품편차에 따라 이러한 시간들은 차이가 나게 된다.


자신의 메모리가 견디는 한도내에서 불필요한 시간을 줄여주는것이 바로 메모리 타이밍 설정이다. 


단 메모리가 충분히 데이터를 전송해줄수있는 시간이 주어지지않는다면 에러를 일으킨다

 

이제 바이오스설정에서 보이는 이름들을 통해 왜 이런 설정을 하는지 알아보기로 하자.


 

 

2.SPD

 

바이오스에서 램타이밍을 설정하기 위해 들어가보면 떡하니 있는것이 by SPD이다.


노멀이나 터보등등의 영어는 알아보겠는데 SPD는 뭘까 고민하는 파코즌분들 계실것이다.


SPD란 Serial Presence Detect 의 약자로 램의 기판 끝쪽에 달려있는 자그마한 롬의 이름이다.


메모리 설정의 편의를 위해 PC-100메모리 표준이 생기면서 도입된 녀석으로


해당 메모리의 특성을 저장하고 있어서 바이오스에서 메모리설정을 자동으로 해뒀을 경우


이칩을 읽어서 적당한 메모리값을 설정하게 해준다.


그렇다면 왜 SPD란 녀석을 이용하지 않고 사용자가 임의로 설정할수 있게 해준걸까?


단지 오버만을 위해서 일까? 그렇지만은 않다.


SPD는 완벽한 녀석이 아니라서 경우에 따라서는 메인보드가 SPD를 제대로 읽지 못해서


가장 느린 설정으로 맞춰버리는 경우가 종종 있다.


주로 비공식 경로로 제작 유통되는 메모리들의 경우 SPD에 저장된 내용과 메모리 모듈의 특성이


맞지않아 안정성을 떨어뜨리는 일이 비일비재하기에


사용자가 최적의 값을 찾아 세팅해주는 옵션이 존재하는것이다.


램타이밍 설정의 첫발은 by SPD를 해제해주는것이니 적어도 SPD가 뭔지정도는 알고 넘어가자.


 

 

3.RAS To CAS Latency

 

메모리에서 데이터를 읽어오는 과정에서 3단계에 해당하는 과정이다.


RAS는 Row Access Strobe의 약자로 활성화된 행에 있는 정보를 읽어낸다는 뜻이다.


뒤에 TO CAS가 붙는 이유는 CAS(Column Access Strobe:열에 읽는 정보를 읽는 과정)직전에


RAS과정을 실행하므로 단순히 RAS지연시간이라 하지않고


"RAS후 CAS가 시작되기까지 전까지 걸리는 지연시간"이란 이름이 붙게 된것이다.


짧게 설정할수록 메모리의 성능은 올라가지만 메모리가 감당하지 못할정도의 타이밍을 설정하게되면


행에 담겨진 정보가 완전히 전달되지 못한다.


즉 에러 속출이란 소리다.


 

 

 

 

 

4.CAS Latency 또는 DRAM Cycle Legth(Time)

 

RAS가 끝나게 되면 5단계가 시작이 되는데 이것에 걸리는 시간이 CAS지연시간 즉 CAS Latency 이다.


CAS는 Column Access Strobe 즉 열에 읽는 정보를 읽는 과정이다.


행과 열의 위치가 모두 정해졌으므로 읽어낸 정보는 바로 출력이 된다.


이부분에 걸리는 시간이 메모리의 타이밍 속도에 가장 큰 영향을 준다.

 

 

 

"모든 타이밍을 짧게 잡아주면 메모리속도가 빨라지지않나?"하고


단순히 생각하면 이부분에서 갸우뚱할 사람도 있을것이다.


그러나 매번 메모리에서 데이터를 읽어올때 위의 6단계를 거쳐온다면


최소 6싸이클 최대 9싸이클이 걸리는등 엄청난 시간 낭비가 초래될것이다.


CPU가 데이터를 요청할때 무작위로 데이터를 보내달라고 하지는 않는다.


서로 가까운 위치에 있는 것을 한꺼번에 보내달라고 하는 경우가 많은데


메모리를 디자인할때 만약 요청되는 데이터가 바로 이전에 요청했던


데이터 바로 다음 열에 존재한다면 이미 필요로 하는행(페이지)이 열린상태에서


굳이 메모리를 새롭게 열고 닫을 필요없이 CAS만 연속 실행함으로써


데이터를  연속적으로 보낼수 있게 해뒀다.

 

말이 어렵다면 다시한번 엑셀로 예를 들어보자


어떤값을 찾을때 그값이 바로 이전에 찾은 값 옆에 있다면


굳이 몇행에 있는지를 생각해 볼필요가 없이 커서만 옆으로 옮겨주면 되는것과 같다는 말이다. 

 

이렇게 CAS만 연속으로 실행함으로 RAS등에 들어가는 4~6싸이클이 절약되고


데이터가 연속으로 빠르게 출력된다. 이런 연속출력동작을 버스트(Burst)라 하는데


이런 버스트들이 전체 메모리요청의 30~60%가 발생한다.

 

한편 다음에 요청한 데이터가 앞서 요청한 데이터와 같은 행에 존재하지는 않지만


같은 뱅크에 존재하는 경우 뱅크의 재충전 과정을 보류하고 다른행을 열어서 데이터를 보낸다.


이경우  tRP만큼의 시간이 절약되며 이런현상은 20% 정도가 발생한다.

 

나머지 최대 50%만의 요청만이 위에 나온 1~6단계만을 반복하는 즉,


최소 6싸이클~ 최대 9싸이클을 모두 반복하는 것이다.


이것을 종합해보면 메모리요청에서 가장 많이 차지하는 시간은


tCL즉 CAS에 걸리는 시간이다.


다시 말하자면 데이터전송을 위해서는 CAS는 반드시 발생해야 하지만


다른과정은 메모리 최적화 설계로 상당부분 생략할수 있다는 뜻이다.


이런 이유로 CAS Latency가 메모리 설정에 가장 핵심이 된다.


일부메인보드에  이설정부분이 DRAM Cycle Legth(Time)라는


잘못된 이름이 붙은 이유도 마찬가지로 그만큼 중요한 설정이기 때문에


이설정이 메모리타이밍 조절에 전부인것처럼 생각하는 경향이 있엇기 때문이다.


이설정 역시 짧게 설정할수록 메모리의 성능은 올라가지만


메모리가 감당하지 못할정도의 타이밍을 설정하게되면


데이터가 완전히 전달하지 못하게 된다.


에러 속출이라는 뜻이다.     

 


5.RAS Precharge Delay

 

현재 주기억장치로 이용되는 DRAM이란 녀석은 사실 상당히 불안정한 녀석이다.

 

데이터를 읽는 과정 자체가 저장되어 있는 데이터를 파괴하는 행위이다.

 

그래서 읽기가 끝나고 나면 원래 장소에 데이터를 다시 입력해주어야 한다.

 

이것이 바로 6단계이다.

 

읽어낸 데이터를 원래위치로 재충전시켜 다음 읽기명령을 위한

 

활성화과정(Activate)을 준비하기 까지 걸리는 시간,

 

준비하고 충전한다는 의미에서 "Precharge" 즉 준비충전이라고 명명되었다.

 

시간의 표시는 tRp로 하며 짧게 설정할수록 메모리 성능은 올라간다.

 

 

그러나 메모리가 설정을 감당하지못할때는 데이터 손실이 일어난다.

 

역시 에러 속출이라는 얘기다.
 


6.리프레쉬(Refresh)

 

RAS Precharge Delay에서도 언급했듯이 DRAM칩은 상당히 불안정하다.

 

전원을 공급해도 일정시간이 지나면 저장한 데이터를 지워버리는 성질이 있다.

(주 :이것의 이유는 데이터의 저장장소가 콘덴서기 때문이라는데.
전공이 아닌 관계로 어렴풋이나마 깨닫지 못했다. 콘덴서의 성질 자체가 워낙
방대한 분량이다보니 그냥 넘어가자.자세히 아시는분은 리플로 설명부탁드린다.)

물론 이런것에 대한 방지장치는 있다.

 

 

데이터가 지워지는것을 방지하기 위해 메모리는주기적으로 리프레쉬(Refresh)라는 작업을 해준다.

 

이때의 메모리의 읽기나 쓰기가 금지되는 일종의 "처리중단"상태가 되버린다.

 

메모리표준에는 메모리 모듈전체가 64밀리초에 한번은 리프레쉬되야 한다고 규정되어 있다.

 

그러므로 평균적으로 64밀리초에 몇싸이클씩은 제속도를 못내는 바보가 되는셈이다.

 

 

6-1. Refresh InterVal, Refresh Mode Select

 

이름에서도 뭔가가 느껴지지 않는가?

 

바로 이름그대로 리프레쉬 주기를 설정하는 옵션이다.

 

대개 7.8마이크로초(S)의 배수(7.8 , 15.6 , 31.2 , 64.0등등)로 주어진다.

 

여기서 잠깐 뭔가 이상함을 느낀다면 이글을 충실히 따라오고 있다는것이다.

 

위에서 메모리 표준에서 정한 리프레쉬 주기는 64밀리초라고 적혀있다.

 

잠시 졸았다면 두눈 비비고 잘보자.

 

왜 설정이 밀리초가 아닌 마이크로초(1백만분의 1초)가 되는거지??

 

메모리 모듈전체가 64밀리초에 한번 리프레쉬되어야 한다고는 했지만

 

모듈의 모든 페이지(행:Row)가 64밀리초에 한꺼번에 리프레쉬 되야 한다고 하지는 않앗다.

 

말장난 같이 보이겠지만 여기에도 이유가 숨어있다.

 

만약 실제로 모듈의 모든 페이지(행:Row)가 64밀리초에 한꺼번에 리프레쉬된다고 가정해보면

 

메모리 모듈을 이루고 있는 모든 셀(Cell)이 일시에 충전되면서 순간적으로 엄청난 전력소모가 온다.

 

그래서 전혀 에너지 관리 측면에서 효율적이지 못한 무모한 방식보다는

 

한번에 한페이지씩 돌아가면서 64밀리초 내에 모듈전체를

 

일명 "순회공연가수"가 되어  리프레쉬해주는 것이다.

 

128Mb(16MB에 해당)이하의 칩을 쓰는 모듈은 구성된 총페이지의 갯수가 4096개이다.

 

1페이지를 리프레쉬하는 주기는 (64 * 1000)/4096 =15.6이 되어

 

15.6마이크로초 설정이 정상이 된다.

 

단면 128MB모듈의 경우 16MB칩이 8개로 128MB가 구성되므로

 

이설정을 사용하면 된다.

 

한편 256Mb(32MB에 해당)이상의 칩을쓰는 모듈(단면 256MB모듈 이상)은

 

8192개의 페이지로 구성되므로 리프레쉬 주기는 절반인 7.8마이크로초가 된다.

 

메모리표준에서 리프레쉬 주기를 64밀리초로 정해둔것은 사실 어느정도의 여유를 둔것이다.

 

그래서 실제메모리 모듈은 리프레쉬 주기가 좀 더 길어져도 잘버티는 편이다.

 

그러므로 만약 리프레쉬에 필요한 시간을 줄여 성능을 확보하자고 한다면

 

"기준주기의 2배"정도의 설정으로 잡아보는것이 한방법이다.

 

주의해야 할점은 리프레쉬 주기를 너무 길게잡으면 데이터의 안정성이 떨어진다.

 

심각한 데이터 오염이 일어날수 있으므로 신중을 기하길 바란다. 


 

 

7.인터리브(Interleave)

 

자 지금 영어사전을 펼치고 인터리브라는 단어를 찾아보자

 

"상호배치하다" 정도의 의미를 가지는 단어라고 나올것이다.

 

메모리에서 인터리브를 한다는것은 여러개의 뱅크를 상호배치하여

 

마치 하나의 뱅크에서 데이터가 전송되는 것처럼 보이게 하는 기술이다.

 

그렇다면 이러한 인터리브를 왜해주는것일까.

 

각각 4개의 뱅크에서 데이터를 읽어온다고 생각해보자.

 

처음 뱅크에서 각각의 RAS,CAS,준비충전이 일어나면서 데이커가 읽히고

 

이과정이 모두 끝난 다음에야 다음 뱅크에서 데이터가 읽힌다.

 

각 처리과정이 2싸이클씩 걸린다고 하면 뱅크마다 6싸이클씩

 

4개의 뱅크에서는 총 24싸이클이 소모되는 것이다.

 

그렇다면 이번에는 4중 인터리브(4-way interleave)를 한다고 생각해보자.

 

메모리가 인터리브된 상태에서는 한뱅크에 읽기명령이 전달되고

 

바로 다음 싸이클에 다음 뱅크에도 읽기명령이 전달되고 이과정이 네번째 뱅크까지 연달아 일어난다.

 

즉 한뱅크에서 읽기과정이 진행되고 있더라도 다른뱅크에서 병렬로 읽기 과정이 실행되는것이다.

 

그래서 한뱅크에서 데이터가 출력된후 연달아 다른뱅크에서도 순서대로 출력되어

 

마치 한뱅크에서 버스트(Burst)가 일어나는것과 흡사한 효과를 보인다.

 

말로는 언뜻 이해가 안갈것이다.

 

하루를 지각한죄로 여러분의 이해를 돕기위해 간단한 표를 만들었다.

 

링크를 살포시 누르면 허접한 표가 이해를 도와줄것이다(이미지 태그는 왜안먹는거여T^T)

 

표 1부분이 인터리브 없이 데이터를 읽어오는 구조이며

 

표 2부분이 4중 인터리브를 실행한 구조이다.

 


바이오스상에서 "Bank interleave"란 설정으로 나와있는 경우에는

 

대개 Disabled, 2-Way , 4-Way 중 하나를 고를 수 있으며

 

"Force 4-way interleave"란 설정의 경우에는 Enabled로 설정하면 4-way로 설정한 효과를 준다.

 

가능하다면 4-Way 또는 Enabled로 설정하는것이 성능을 향상시키는 설정이다.


 

 

7-1 Interleave Time
    Act Bank A to B CMD Delay(Active Bank A to B Command Display)

 

이러한 인터리브가 효율적으로 일어나려면 한뱅크를 활성화 시킨뒤

 

다음 뱅크를 활성화시키는게 걸리는 지연시간이 최대한 짧아야 한다.

 

예2 에서처럼 모든 메모리 모듈이 이렇게 이상적으로 한싸이클 마다

 

연이어 다음 뱅크가 활성화 되어주는것은 아니다.

 

그래서 이 설정이 존재하는것이다.

 

느린 메모리 모듈의 뱅크 활성화 지연시간을 줄여주는것이 이설정이다.

 

"Interleave Time"이라고 되어 있는 설정의 경우 밀리초 단위로 지연시간을 설정한다.

 

"Bank A to B CMD Delay"라고 되어 있는 설정의 경우 싸이클 단위로 지정한다.

 

최적의 설정을 원한다면 "가급적 적은 지연시간" 을 설정해줘야 한다. 

 

 

8.그외 사족들.

 

일부 메인보드에서 Normal설정이 Turbo설정보다 빠른 경우가 있다.

 

이런 경우 메인보드에 위와 같은 세세한 설정이 아니라

 

구식설정인 Bank X/X DRAM Timing으로 나와있는 경우가 대부분이다.

 

이 설정은 tRP, tRCD, tRAS(tRP가 발생하고서 메모리가 활성화 되어 있는 동안의

 

시간으로 tRCD와 tCl을 모두 포함한다.)등의 메모리타이밍을 다섯가지 정도의 미리정해진

 

유형으로 한꺼번에 설정하는 방식이다.

 

원칙적으로 하자면 이름그대로 Turbo가 가장빠르고 FAST,Medium...SDRAM 8~10ns순서로 느려져야한다.

 

그러나 바이오스상의 코드 버그때문에 대부분의 메인보드에서는 Turbo가 아닌 Normal설정을 해야

 

tRP와 tRCD를 2싸이클로 설정하는것으로 보고된바 있다.

일부 메인보드에서만 이설정이 고쳐져 있다고 한다.

 

이런 이유로 Normal설정이 Turbo설정보다 빠른것이다. 


 

 

메모리의 타이밍 설정을 이제 어느정도 알아보았다.

 

위에 나오는 여러가지 설정들을 보면서 고급메모리들에는

 

대개 낮은 싸이클들이 들어간다는걸 느꼈을것이다.

 

메모리 표준상 특정규격(Ex:PC-100, PC-133등등)에 합격하기 위해서는 최소한 3-3-3설정만

 

맞으면 되기때문에 저가형 메모리는 수율을 높여주기 위해 기준을 표준의 최소치에 맞추는 경우가 많다.

 

이런 저가형의 메모리를 사용하고 있다면 빠른설정들을 감당하기 힘들것이다.

 

무조건 빠르게 맞추는것만이 최고는 아니다.

 

안정적인 범위내에서 가장빠른 설정을 맞추는것이 중요하다.

 

또한 타이밍이라는것은 메모리의 기준작동속도와 연관지어봐야 한다.

 

예를 들어 100MHz에서 2-2-2타이밍이 가능한 메모리라고 해서 133MHz에서 작동한다는 보장은 없다.

 

메모리 칩이 각처리과정에서 걸리는 시간은 절대적이지만 타이밍은 상대적 수치이기 때문이다.

 

100MHz에서 한싸이클은 10ns이므로 2싸이클의 타이밍은 20ns이지만

 

133MHz에서 한싸이클은 7.5ns라 같은 2싸이클이라도 15ns가 되는것이다.

 

만약 자신의 메모리가 18ns내에 해당처리과정을 마무리할수 있다고 가정하면

 

100MHz에서는 2싸이클 설정이 가능하지만 133MHz에서는 3싸이클로 맞추지 않으면

 

에러가 속출할 가능성이 크다. 이것이 바로 자신의 메모리가 견디는 한도인것이다.  
 
이런 한도는 같은 생산회사의 같은 주차라 해도 차이가 날수 있으니 항상 염두해주시길 바란다.

이상으로 메모리에 대한 이해를 돕는 졸필을 마치고자 한다. 

: