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

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

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

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

RAS1 - CAS1 - CAS2 - CAS3
 |
RAS2 - CAS1 - CAS2 - CAS3
 |
RAS3 - CAS1 - CAS2 - CAS3
 |
...

이런식으로 구성되어있다. (주의! 정확하게 그린건 아니다. 실제로는 훨씬 더 복잡하다) 이를 잘 생각하면서 아래의 내용을 봐야 한다.

※ tCL(CAS# Latency)
- CAS란 Column Address Strobe 또는 Column Address Select 을 의미한다.
- 시작 CAS# 부터 마지막 CAS#까지 '읽거나 쓰는데' 걸리는 클럭수. 램 타이밍을 나타내는 가장 대표적인 값이다.
- 낮을수록 좋다. 메모리 성능에 1% 정도 영향을 미친다.

사용자 삽입 이미지

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)
- 인텔에서 개발한 오버클럭용 메모리 프로파일. JEDEC 표준은 아니지만 오버클러커들에게 유용하고 자세한 메모리 정보를 바이오스에 제공해준다. 고급 메모리 모듈에서 지원한다.

※ 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% 안팍의 성능향상이 있을 뿐이다. 메모리 성능은 타이밍보다는 클럭이 훨씬 더 중요하다.