본문 바로가기
메모리 반도체/DRAM

DRAM DBI (Data Bus Inversion, DBI-AC, DBI-DC ,DBI_RD, DBI_WR, LPDDR, DDR, HBM)

by 전컴반 2023. 10. 27.
반응형
DBI (Data Bus Inversion)

 

DDR4, LPDDR3에서부터 Data를 주고받을 때(Read / Write) 전력 소모를 줄이기 위해 적용된 Scheme이다. 결론부터 간단히 말하면, Low(0) 또는 High(1)의 수에 따라 전력을 덜 쓰게 반전(Inversion)시켜서 보내는 것이다. 즉, 목적은 전력을 덜 쓰게 만드는 게 포인트다. 약 20~30%의 전력소모를 줄일 수 있다고 한다. 하지만 Read/Write시에 Latency가 발생한다는 단점이 있다.

 

예를 들어 Low(0)을 보낼 때 전력을 더 많이 소모한다고 하고 High(1) 일 때는 전력을 안 쓴다고 해보자. 만약 Data 0000_0111을 보내야 된다면 0의 개수가 5개고 1이 3개이니 데이터를 반전시켜서 1111_1000로 보내면 전력이 덜 사용될 것이다. 이런 느낌이다.

 

조금 더 자세히 보자.

DQ Path가 4개인 x4일 때는 의미가 없기 때문에 안 쓰고 x8, x16, x32의 자재일 때 사용한다. 그리고 DBI에는 2가지 종류가 있다. *Termination이 없는 DBI-AC, Termination이 있는 DBI-DC이다. 하나씩 알아보자. 

 

(*Termination이란, 신호에 Noise를 최소화하기 위해 RX 끝단에 저항을 달아 놓은 것이다. 우리나라 말로는 "종단저항"이라고 한다. 잘 모르겠다면 아래 글을 참고 바란다. 2023.09.28 - [내가 하는 전공 공부/DRAM] - DRAM ZQ Calibration, ODT (NT-ODT, DDR, ZQ Cal, On Die Termination))

 

 

DBI-DC

 

Termination이 있을 때 쓴다고 했다. DDR, LPDDR과 같은 애들이 이에 해당한다. DBI-DC에도 2가지 종류가 있다. Termination이 VDDQ에 달려 있을 때, VSSQ에 달려 있을 때 따라 Low(0)과 High(1) 중에 어떤 걸 Inversion 시킬지 달라진다. 사실 원리는 똑같기에 하나만 이해하면 된다.

 

먼저 Termination이 VSSQ에 달려있을 때를 기준으로 해보자. (LPDDR4부터는 VSSQ에 달았다)

만약 Data 1111_1001을 보낸다고 하자. 그러면 DQ Pin에서 나가는데 만약 Low(0)을 보낸다고 하면, Termination이 이미 VSSQ에 연결 돼 있어 Low(0)이기 때문에 Low(0)을 보낼 땐 Pull Down Driver에 전력이 필요 없다.

 

그럼 High(1)을 보낼 땐 어떻게 될까, VDDQ랑 VSSQ사이에 Fighting이 일어난다. 즉, Low(0)을 High(1)로 끌어올려야 한다. 이때 Pull Up Driver에 전류가 소모된다. 

 

 

그러니 DQ에서 최대한 High(1)의 수를 줄여야 전류를 덜 쓸 수 있다. 그러니 만약 DQ에서 High(1)이 50% 초과면(5개 이상) High(1)을 Low(0)으로, Low(0)을 High(1)로 반전시켜서 보내야 한다.

 

Read와 Write에도 조금의 차이가 있다.

DBI_RD일 때는 위에서 말한 것처럼 High(1)이 5개 이상이면 반전시켜서 출력한다. 만약 딱 50%(4개) 면 어떻게 할까?? 반전시키지 않는다. 왜냐면 반전시키는 것도 일이기 때문에 반전시키는 동안 Time에 Delay가 생긴다. 그러니 굳이 반전시킬 필요가 없다. 

 

하지만 DBI_WR일 때는 High(1)의 개수가 4개 이하면 반전시켜서 저장한다. 근데 위에선 똑같으면 굳이 반전시키지 않는다고 했는데 왜 Write일 때는 4개 이하에서 반전시킬까?? 내 뇌피셜이지만, Capacitor에 저장을 하는데 High(1)를 저장하면 누설전류(Leakage)도 발생하고 말 그대로 전자들을 채워야 하니까 Low(0)을 저장하길 선호하는 게 아닌가 싶다. 그리고 DM (Data Mask) Pin과 동일한 PIN을 쓰기 때문에 DBI를 사용하고 있다면 DM을 사용할 수 없다. 

 

정리하면, Termination이 VSSQ에 달려있는 경우에는 Data에 최대한 High(1)의 수를 없게 하고, Low(0)을 많게 해야 한다. 그러니 High(1)이 몇 개 있냐에 따라 Data를 Inversion 시킬지 말지 정한다. 

 

반대로 Termination이 VDDQ에 달려있는 경우에는 Data에 최대한 Low(0)의 수를 없게 하는 게 목표이다. 동작은 위와 똑같이 한다.

 

 

 

DBI-AC

 

이번에는 Termination이 없는 DBI-AC의 경우를 보자. 요즘 핫한 HBM 같은 애들이 이에 해당한다. Termination이 없기 때문에 VDDQ, VSSQ에 관계가 없다. 즉, 1의 수가 많고, 0의 수가 많고에 관계가 없다는 의미다. 그럼 뭐랑 연관 있을까? 바로 Toggling이다.

 

Data가 전송될 때, Toggling을 많이 하면 좋지 않다. 왜냐면 Toggling은 Jitter Noise를 발생시키기 때문에 최대한 Toggling을 덜 하는 게 좋다. 그래서 이전 Data랑 비교해서 바뀐 Data를 줄이는 게 DBI-AC이다. 

 

무슨 말이냐면 아래 그림을 보자. 1st에서 DQ 8개를 쭈욱 받고 2st에서 DQ를 봤는데 1st에 받았던 DQ랑 비교해 보니 6번의 Toggling을 해야 한다. 이렇게 되면 DQ 하나하나가 Toggling을 해서 Jitter Noise가 생긴다. 그러니 2st Data를 반전(Inversion)시킨다. 그러면 1st랑 비교해서 2번만 Toggling을 하면 된다. 즉, 신호가 깨끗해진다. 

 

이처럼 DBI-AC는 앞에 Data랑 비교해서 변하는 Data의 수에 따라 반전(Inversion)을 결정한다. Read/Write 마다 다른 건 DBI-DC와 동일하다. 

 

반응형

댓글