모든 이야기

DDR4가 데이터 비트를 뒤집어 보내는 전력상의 이유

같은 8bit 정보를 보낼 때 원래 byte를 전송하는 대신 모든 bit를 뒤집고 “뒤집었다”는 flag를 붙이는 경우가 있다. DDR4 DBI가 하는 일이다. 0x03과 0xFC는 논리적으로 전혀 다른 값인데 이 방법으로 같은 데이터를 전달할 수 있다. 수신기가 flag를 사용해 원래 값을 복원하기 때문이다.

이 방식은 압축처럼 payload 길이를 줄이지 않는다. 특정 전기적 상태에 머무는 bit 수를 제한하는 encoding이다. DDR4의 VDDQ 기준 termination에서는 low를 구동할 때 termination을 통한 전류가 흐른다. low bit가 많은 byte를 반전하면 그 전류의 부담을 줄일 수 있다. bus inversion이라는 이름만 보고 이전 byte와의 전환 횟수를 항상 최소화하는 알고리즘이라고 해석하면 목적을 잘못 읽는다.

Alliance DDR4 데이터시트 61쪽의 DBI 규칙은 read에서 한 byte lane의 0이 네 개보다 많으면 반전하고 DBI#를 low로 보낸다고 설명한다. 수신기는 DBI#가 low인 byte를 되돌린다. write에서도 DRAM은 해당 flag를 보고 입력 byte를 복원한다.

0x03 하나를 선로에서 바라보기

0x03은 이진수 00000011이다. 0이 여섯 개이므로 반전하면11111100이 돼 DQ의 low 수가 두 개로 줄어든다. 반전을 표시하는 DBI# 자체는 low다. 따라서 flag pin을 포함해도 이 예의 low pin 수는 여섯 개에서 세 개로 줄어든다.

가상으로 모든 pin의 termination을 60Ω, VDDQ=1.2V, low 전압=0V로 이상화하면 low pin 하나의 termination 전류는20mA다. 여섯 low는120mA, 두 DQ low와 flag low는60mA다. 해당 pattern이 유지되는 구간의 저항 소모만 단순 비교한 값이다. 실제 effective impedance·output voltage·다른 pin·수신기와 encoding 회로의 소비를 제외했으므로 전체 DRAM 전력50% 감소를 뜻하지 않는다.

반면0x55=01010101은0이 네 개라 이 규칙으로 반전하지 않는다. flag도 high다. byte마다 이득이 다르므로 프로그램의 데이터 분포를 빼고 하나의 절감률을 사용할 수 없다.

전환 횟수 최소화와 low 수 제한은 다르다

원본0x0F→0x07의 Hamming distance는1이다. 하지만0x0F는0이 네 개여서 그대로 보내고,0x07은0이 다섯 개여서0xF8로 반전한다. 선로의 DQ는0x0F→0xF8로 바뀌며 XOR값0xF7에1이 일곱 개이므로 일곱 bit가 전환한다. DBI#도 high→low로 바뀌어 flag까지 총 여덟 pin이 전환한다. 현재 byte의 low 수는 제한했지만 이전 byte와의 전환은 오히려 늘어난 예다.

동적 switching 에너지와 termination의 상태별 전류는 다른 항목이다. DBI의 유효성을 판단하려면 representative 데이터에서 encoding 뒤 low occupancy와 toggle 수를 따로 측정해야 한다. 원래 stream의0/1비율만 보고 모든 소비 항목이 같은 비율로 줄어든다고 계산할 수 없다.

flag를 놓치면 데이터도 달라진다

DBI#는 단순한 부가 전력 힌트가 아니다. byte 해석에 꼭 필요한 정보다. DQ가 완벽히 전달돼도 flag를 잘못 sampling하면 해당 byte 전체가 반대로 복원될 수 있다. DBI pin의 route와 timing도 데이터의 일부로 검증해야 한다.

이 판본에서는 DBI pin이 DM·TDQS와 공유되고 지원 configuration 및 동시 사용에 제약이 있다. write DBI와 data mask를 동시에 활성화하는 식의 조합은 허용되지 않는다. read DBI에는 CL 지원값도 별도로 확인해야 한다. flag를 켠다는 명령만으로 기존 모든 latency와 partial-write 방식이 유지되는 것은 아니다.

DDR4 DBI를 해석하는 기준은 정보를 잃지 않고 low 상태를 얼마나 줄였는가다. byte별 반전·flag·복원을 한 번 추적하면 전력 이득이 생기는 데이터와 변화가 작은 데이터를 구분할 수 있다. 그리고 그 이득의 대가인 flag 경로와 mode 제약까지 검증해야, 뒤집힌 pin 값이 정확한 저장 정보로 돌아온다.