FPGA - DDR 메모리 신호 무결성에 대한 고찰

DDR 메모리 신호 무결성에 대한 고찰

enter image description here

DDR 메모리 신호 무결성에 대한 고찰

1. DDR 메모리란

우리가 주로 DDR 메모리라고 부르는 메모리는 DDR SDRAM으로 Double Data Rate Synchronous Dynamic Random Ascess Memory의 약자이다. 현재까지 DDR4 기술이 보급되어 있으며 버전업이 될수록 Bus Clock이 높아지고 이로 인해 Data rate도 함께 향상되고 있다.

2. DDR 메모리의 장단점

DDR 메모리의 장점은 고속으로 대용량 저장이 가능하다는 장점이 있지만 DDR3부터 속도가 빨라지면서 설계단계부터 신호 무결성에 대한 주의가 요구된다. DDR3부터 동작 클럭이 높아지면서 동작전압도 같이 낮아지며 때문에 저전력 동작이 가능하지만 반대로 노이즈에 민감해진다. DDR3 기능 중에 신호 무결성을 위한 ZQ Calibration과 Dynamic ODT 기능이 있다. (사실은 이 두 가지 기능에 대해 설명하고 싶었음)
DDR 설계 Topology로 DDR2는 Tree 구조를 사용하고 DDR3는 Fly-by 구조를 사용한다. 두 가지 구조의 장단점이 있지만 고속의 설계에서 Fly-by가 더 장점이 많아 DDR3 부터 채택된 것 같다.

2.1 ZQ Calibration

DDR3의 클럭 동작 속도가 1066MHz 이상으로 올라가면서 신호 무결성에 대한 주의가 필요하게 되었는데 고속신호에서 임피던스 매칭을 통해 파형의 일그러짐을 최소화하는 것이다. ZQ Calibration을 통해 DDR 메모리의 임피던스를 매칭 시켜 신호의 일그러짐을 최소화하고 신호를 안정화 하게 된다. DDR 메모리 외부에 240옴 1% 정밀 저항을 달아주고 DDR 내부에 240옴 저항값들의 조합을 레지스터로 선택적 사용함으로써 DDR Controller와 DDR 메모리간의 임피던스 매칭을 도와준다.

2.2 Dynamic ODT

ODT는 On-Die Termination의 약자로 DDR 메모리 내부에 있는 Termination 저항을 말한다. 임피던스 매칭이라는 말은 신호의 임피던스 매칭을 도와주는 모든 행위를 말하는데 종단저항(Terminating Resistance)도 그 중 하나의 방법이다. 모든 회로는 다양한 임피던스를 가지는데 신호가 임피던스를 지날 때 반사현상이 일어나게 되고 이 때 발생한 반사파의 영향으로 신호가 일그러지게 된다. 이를 줄이기 위해 선로의 마지막에 적절한 직렬저항을 다는 것을 종단저항이라고 한다.
DDR 메모리에도 메모리칩을 여러개 사용하면서 종단저항을 통해 반사파를 줄이고 여러 DDR 메모리 칩들 중 Read/Write 동작동안 사용안하는 메모리 모듈은 낮은 임피던스를 유지하고 사용하는 메모리 모듈은 높은 임피던스를 유지 하도록 한다. ODT는 이 종단저항을 DDR 칩 내부로 넣은 것을 말하며 외부에 사용했을 때보다 디바이스 신뢰성이 좋아지는 장점이 있다.
ODT는 두 가지로 나눌 수 있는데 Normal ODT와 Dynamic ODT 이다. Dynamic ODT는 DDR에 쓰기 동작 할때 동작하고 IDLE 상태나 READ 에서는 Normal ODT로 동작된다. 보통 두 가지 ODT의 저항값을 다르게 설정할 수 있다.

5. 결론

경험에 기반한 한풀이를 좀 하면 제품을 양산하면서 발생하는 여러문제점들 중 고속 통신에서 신호 무결성 문제는 발생하는 빈도수와 여러 복합적인 상황으로 인해 디버깅하기가 쉽지 않다. 현재 많은 좋은 고속 신호 측정 장비들이 나와있지만 모든 해답은 데이터시트에 있다. 기존에 이미 설계되어 양산되던 제품이다 보니 기존 설계와 초기화 셋팅에 당연히 문제가 없을 것이라고 생각했는데 데이터시트로 하나씩 확인한 결과 기존에 알고있던 부분들과 너무 다른 부분들이 많아 당황했다. 역시나 데이터시트의 내용대로 DDR Controller Timing과 초기화 시퀀스를 수정하니 동작이 잘 되는 것 같다.
고속 신호의 신호 무결성 문제는 회로설계, 아트웍, 펌웨어 셋팅까지 복합적인 설계와 확인이 필요하다. 불량 제품의 수량과 재현 빈도가 낮아 디버깅하는데 많은 시간이 들었지만 이번 삽질로 인해 예외상황에서 많은 부분 학습한 것으로 만족한다.

도움이 되셨다면 더 좋은 정보 공유를 위해 광고 클릭 부탁 드립니다 :)

댓글 쓰기

0 댓글