윈디하나의 누리사랑방. 이런 저런 얘기

글쓴시간
분류 기술,IT
램타이밍(tCL, tRCD, tRP, tRAS)

※ 메모리를 구매하면, 매뉴얼 또는 메모리 모듈에 붙어있는 스티커에 메모리의 스펙이 적혀있다. 스펙에는 6-6-6-18와 같은 숫자가 나열된것이 보일것이다. 이 숫자들은 램의 성능을 나타낸다. 흔히 "램 타이밍", "램타"라고 한다. 앞의 것부터 tCL, tRCD, tRP, tRAS를 의미한다.

※ DRAM 은 IC(집적회로)안에 MOSFET 과 캐패시터를 넣어 만든다. MOSFET 1개, 캐패시터 1개를 사용해 1bit 를 저장한다. (이외에도 메모리 셀, 디코더, OR게이트 등을 만들어 구현하지만 이걸 이해하려면 전자공학과 나와야 한다. 어쨌든 전기를 저장한다는 의미로 캐패시터라는 말을 쓴 것이다. 참고로 SRAM은 플립플롭회로를 사용한다)

사용자 삽입 이미지

사용자 삽입 이미지


※ 각각의 1비트를 구성하는 회로가 모여서 하나의 메모리 칩을 구성한다. 아래는 1개의 메모리 칩을 그렸다. 여기 그려진것 외에도 각각의 1비트를 충전해주는 회로와, 비트에서 나온 신호를 증폭해주는 회로, 데이터를 임시저장하는 버퍼, 주소 디코더, 커맨드 해석기 등이 더 들어 있다. (정확한 그림이 아니다. 어차피 정확하게는 못 그린다. 전자공학도가 아니라서 말이다)

+---------------------------------- CAS1 - CAS2 - CAS3
|                                    |      |      |
|   RAS1 - 1bit - 1bit - 1bit -------+------+------+
|     |     |      |      |          |     Data    |
|   RAS2 - 1bit - 1bit - 1bit -------+    Buffer   |
|     |     |      |      |          |             |
|   RAS3 - 1bit - 1bit - 1bit -------+-------------+
|     |                                            |
|     ^                                            ^
^     Row Address Line                             Data Line
Column Address Line

이런식으로 구성되어있다.

가장 왼쪽 위의 1bit 저장소에 데이터를 읽으려면
① 메모리를 활성화하고, RAS1 을 선택
② 읽기 명령을 주고 CAS1 을 선택
③ 데이터 라인에서 데이터 읽음
③ 다음 명령을 위해 준비

와 같은 방식으로 읽는다.

         Activate Read          Pre Charge
Command  O ------ O ------ ---- O ------
         ROW#1    CAS#1
Address  O ------ O ------ ----   ------
Data       ------   ------ 0---   ------

tRCD       ------ 
tCL                 ------
tRAS     - ------ - ------ ----
tRP                               ------
※ tCL(CAS# Latency)
- CAS란 Column Address Strobe 또는 Column Address Select 을 의미한다.
- 시작 CAS# 부터 마지막 CAS#까지 '읽거나 쓰는데' 걸리는 클럭수. 성능지표로써의 램 타이밍을 나타내는 가장 대표적인 값이고 고성능 메모리는 이 값이 현저하게 낮다. 위의 ② - ③ 사이의 대기시간을 의미한다.
- 낮을수록 좋다. 메모리 성능에 영향을 미친다. 1~2 정도의 수치 차이로는 성능 차이가 거의 없지만, 고성능 튜닝 메모리의 경우  -20% 이상 수치가 차이나기 때문에, 성능 차이가 느껴진다.

사용자 삽입 이미지

DDR3 삼성 메모리 모듈의 스펙 스티커. CL(10번 항목)만 적혀있다.



사용자 삽입 이미지

삼성 DDR4 메모리에는 모듈에 붙어있는 라벨에 CL 정보가 없다



※ tRCD(RAS# to CAS# Delay)
- RAS 란 Row Address Strobe 을 의미한다.
- 메모리는 RAS(행)을 먼저 찾고 CAS(열)을 찾는데, tRCD는 선택한 RAS#에서 CAS#를 '선택'하는데 걸리는 클럭 수다. 위의 ① - ② 사이의 시간을 말한다.
- 낮을수록 좋다. 메모리 성능에 1% 정도 영향을 미친다.

※ tRP(RAS# Precharge)
- 메모리에서 0, 1을 구분하는 방법은 캐패시터에 전류가 남아있으냐 없느냐를 구분하는 것이다. 하지만 충전된 캐패시터는 시간이 지나면 자연 방전되기 때문에 전류가 남아있지 않게 된다. 따라서 주기적으로 캐패시터를 충전해야 메모리의 내용을 유지할 수 있다. 캐패시터 충전시에는 메모리를 읽거나 쓸 수 없기 때문에 충전 주기와 시간을 정하는 건 성능상 중요하다. 충전이 덜 되거나 과충전 되면 데이터를 잃거나, 회로에 손상을 줄 수 있다. 몇 클럭동안 충전할 것인지 결정하는 값이 tRP다. 위의 ④ 에 해당하는 시간이다.
- 낮을수록 좋다. (낮을 수록 좋긴 하지만, tRP값은 tCL, tRCD값과 조화를 이뤄야 한다) 메모리 성능에 많은 영향을 미치지는 않는다. 단 지나치게 낮으면 메모리의 안정성에 영향을 준다.

※ tRAS(Row Address Strobe, Cycle Time)
- RAS#를 얻을 수 있는 간격. 모든 메모리 오퍼레이션의 시작은 RAS#를 선택하는 명령으로 시작하기 때문에, 사이클 타임이라고 부른다. 활성화되는 시점부터 프리차지 되기 전의 사이클을 더한 값이다.
- 보통 tRAS = tCL + tRCD + α 정도 된다.
- 낮을수록 좋다.

----

이외에도 아래와 같은 메모리 정보가 더 있다.

※ SPD(Serial Pressence Detect)
- 메모리 모듈에 메모리의 정보를 넣어놓은 칩. JEDEC 표준이다. 주로 타이밍을 자동으로 알아낼때 사용한다. 요즘 마더보드에서 SPD값 못 읽는 마더보드는 없다.

사용자 삽입 이미지

SPD 칩



※ XMP(Extreme Memory Profiles), EXPO(Extended Profiles for Overclocking)
- XMP 는 인텔에서 개발한 오버클럭용 메모리 프로파일. JEDEC 표준은 아니지만 오버클러커들에게 유용하고 자세한 메모리 정보를 바이오스에 제공해준다. 고급 메모리 모듈에서 지원한다.

- XMP 와 유사하게 AMD AM5 플랫폼의 DDR5 용으로 나온게 EXPO 다. AMD AM4 플랫폼까지는 마더보드 제조사 자체적으로 XMP 메모리 모듈을 사용하기 위한 자체적인 기술을 가지고 있었다. ASUS 의 DOCP (Direct Over Clock Profile)가 그 중 하나다.

※ CR(Command Rate)
- 메모리 컨트롤러에서 내린 명령이, 메모리까지 가는데 걸리는 클럭.
- 낮을수록 좋다. 1T로도 설정할 수 있지만, 보통 안정성을 위해 2T로 설정한다.

※ tRC(Row Cycle Time)
- RAS#를 얻을 때부터 데이터를 읽는데 걸리는 클럭수.
- tRC = tRAS + tRP + α
- 낮을수록 좋다.

※ tRFC(Row Refresh Cycle time)
- 메모리 뱅크의 RAS를 리프레시하는데 걸리는 클럭수.
- 낮을수록 좋지만 이 값은 메모리 안정성에 직접적인 영향을 준다.

※ tREF(REFresh time)
tRFC마다 충전및 리프레시하는데 필요한 시간. 단위는 µsec
- 낮을수록 좋다.

----

- 메모리 컨트롤러의 핵심은 메모리 모듈의 성능을 최대한 활용하는 것이다. 메모리는 "충전", "읽기", "쓰기"가 조화롭게 작동해야 하는데, "충전"은 너무 많이 해줘도 너무 덜 해줘도 안되며, 충전시에는 읽기/쓰기가 되질 않는다. 읽기/쓰기 작업은 클럭단위로 이뤄지지만 충전은 "시간"단위로 이뤄진다. (읽기/쓰기 작업은 6clock, 9clock 걸린다고 표현하지만 충전은 0.01초마다 0.02초간 충전해야 한다라고 정해진다) 따라서 메모리 컨트롤러에서는 충전 시간을 메모리 클럭으로 환산해야 하고 정확하게 나눠떨어지지 않는 경우 성능과 안정성을 고려해 정확히 작업해줘야 한다.

- 0~2라고 되어있는 부분을 0으로 계산해 수동으로 넣어주면, 시스템 불안정 없이 성능이 향상되곤 하기 때문에, 마더보드에서 수동 세팅을 지원하는 경우 설정해볼만 하다. (하지만 제조회사에서 괜히 0~2를 넣은게 아니라는 점은 인지하고 있어야 한다)

- 필자는 램타이밍을 줄여서 쓰지 않는다. ^^ 잘해봤자 2% 안팍의 성능향상이 있을 뿐이다. 메모리 성능은 타이밍보다는 클럭이 훨씬 더 중요하다.