2012년 6월 5일 화요일

SoC FPGA 기반 메모리 시스템의 ECC(Error Correction Code) 구현

이 글에서는 소프트 오류가 일어나는 원인과 이러한 오류가 미치는 영향, 그리고 오류 검출 및 교정을 이용해서 임베디드 시스템이 이와 같은 유형의 소프트 오류를 더 잘 복구할 수 있도록 하기 위해서 Altera와 Micron Technology에서 개발한 기법에 대해서 설명한다.

자료제공/알테라 코퍼레이션

반도체 프로세스 기술이 계속해서 발전함으로써 임베디드 시스템으로 더욱 더 높은 통합, 기능성, 성능이 가능하게 되었다. 이와 같이 향상된 성능이 가능하게 됨으로써 여러 가지 이점들을 거둘 수 있지만, 한편으로 문제는 더 높은 성능의 시스템은 소프트 오류가 발생할 가능성 또한 높아질 수 있다는 점에 대해서 그만큼 더 주의를 기울여야 한다는 것이다. 전원 전압을 낮추면 IC 회로가 다양한 유형의 전자기 및 입자 방사에 더 취약해진다. 임베디드 시스템의 메모리 크기가 수백 메가바이트에 이르게 됨에 따라서 자연적으로 발생하는 알파 입자로 인해서 발생하는 소프트 오류가 허용 가능한 수준을 넘어설 수 있게 되었다. 또한 인터페이스 속도가 초당 1기가비트를 넘어섬에 따라서 과도한 잡음 및 지터가 외부 메모리로 연결하는 전송 라인으로 오류를 일으킬 수 있게 되었다.

메모리 비트 오류의 요인들

-비트 셀 소프트 오류

통상적으로 이용되는 메모리 비트 셀은 전기 전하의 형태로 프로그램된 값을 유지한다. 메모리 비트 셀로 값을 쓰는 작업은 이 전기 전하를 재프로그래밍해서 전기 전하가 원하는 새로운 값을 표현하도록 하는 것으로 이루어진다. 메모리 비트 셀은 예를 들어서 전력이 공급되고 동적 메모리 타입의 경우 리프레시 기법이 동작하는 등과 같이 기본적인 조건들이 충족되는 한은 무한정하게 자신의 값을 유지할 수 있다.

이렇게 저장된 전하는 메모리 디바이스에 이질적인 전하가 주입되었을 때 부정적으로 영향을 받을 수 있다. 우주 입자가 대기 중의 원자와 충돌함으로써 에너지 선(energetic ray)이 발생되고 이 에너지 선이 저장된 전하에 영향을 미칠 수 있다. 메모리 비트 셀의 값을 뒤집기 위해서는 충분한 전하가 주입되어야 이 값을 바꿔서 부적절한 로직 값을 나타내게 된다.

고에너지 알파 입자는 우주선(cosmic ray)의 약 10퍼센트를 이루는 것으로서 수 미터의 콘크리트를 통과할 수 있다. 저에너지 알파 입자는 칩 패키지에 이용된 물질들이 부식되면서 방사되는 것으로서 에너지 수준은 낮으나 어떠한 영향을 미치기 위해서 이동해야 하는 거리가 짧다. 마찬가지로 감마선은 에너지 수준이 높고, 부식에 의해서 자연적으로 발생되며, 우주선에 포함되어 있다. 지구 대기는 우주 입자와 우주선에 대해서, 자연적이면서, 상당히 효과적이나, 완전무결하지는 않은 장막을 제공한다. 그러므로 산꼭대기나 공중 시스템 같이 고도가 높은 위치에서는 대기가 희박하므로 이와 같은 입자들에 대해서 보호하는 능력이 떨어지고 그러므로 소프트 오류가 발생할 가능성이 높아진다.

외부 에너지 주입으로 인해서 메모리 비트 셀의 값이 부정하게 변경되는 이벤트를 SEU(single event upset)이라고 한다. 이와 같은 오류를 소프트 오류라고 하는데, 이것은 디바이스의 결함으로 인해서 오류가 발생하는 것이 아니라 디바이스가 외부적인 방해를 겪음으로 인해서 오류가 발생하기 때문이다. 만약에 후속적으로 제대로 된 데이터가 다시 쓰여지면 그와 같은 오류를 일으킬 가능성이 낮아진다. 그러므로 그와 같은 오류가 발생할 가능성은 극히 낮지만 메모리 용량이 높아짐에 따라서 이러한 오류의 가능성이 높아진다.

-하드 오류

하드 오류는 부적절한 동작으로 인한 것이다. 이 경우의 오류는 대개가 재현이 가능하고 지속적으로 발생한다. 그 안에 들어있는 메모리를 포함해서 어떤 시스템이 생산 직후에는 결함이 없는 것으로 판단된다 하더라도 이 상황은 디바이스가 노후화됨에 따라서 변할 수 있다. 과도한 온도 변동, 전압 스트레스, 높은 습도, 물리적인 스트레스 등과 같은 요인들 모두가 시스템의 어떤 구성요소가 서서히 결함을 일으키기 시작하도록 만들 가능성이 있다. 이러한 오류들이 메모리 셀이나 인쇄 회로 보드 트레이스의 결함으로 인한 고착 비트로 나타날 수 있다.

-전송 오류

전송 오류는 메모리 비트 셀과 데이터를 읽거나 쓰는 기능 유닛 사이의 경로에서 발생하는 오류들이다. 이와 같은 유형의 오류는 전송 경로의 설계 마진을 일시적으로 초과하는 시스템 지터 및 잡음으로 인해서 발생될 수 있으며, 그러므로 설계 마진, 사용된 부품 소자의 품질, 주변 환경의 전기 에너지에 대한 시스템의 취약성에 따라서 발생할 수 있다.

외부적 메모리로 연결하기 위한 물리적 배선의 인덕턴스, 커패시턴스, 배선 길이는 시스템온칩(SoC)이나 메모리 디바이스 내의 내부적 배선과 비교해서 수십 배 더 높다. 그렇지만 부품 내부에서도 또한 전송 오류가 발생할 수 있다. 알파 입자와 감마선이 검출 증폭기와 메모리 비트 라인에 영향을 미침으로써 데이터 값을 부적절하게 포착할 수 있다.

TT(SoC)-1
오류가 미치는 영향

메모리 데이터 손상은 임베디드 시스템의 동작에 치명적으로 영향을 미칠 수 있다. 프로세서 기반 시스템에서 메모리 오류는 명령이나 데이터 스트림으로 부적절한 값을 일으킬 수 있다. 첨단 프로세서들은 부정한 명령들을 찾아내면 통상적으로 시스템이 재부팅되도록 한다. 데이터 스트림으로 오류가 발생하면 프로그램 플로우가 정해진 흐름을 벗어남으로써 보호 메모리를 부정하게 액세스할 수 있다. 이와 같은 상황은 데스크톱에서 말하자면 ‘blue screen of death’나 ‘core dump’와 같은 것이다.

붕괴도 임베디드 시스템에 바람직하지 않은 것이지만 그 반대는 더욱 더 심각한 결과를 초래할 수 있다. 오류를 즉시 검출하지 못하면 이 오류가 시스템에서 긴 시간 동안 돌아다닐 수 있다. 메모리 오류를 발견하지 못하고 놓치면 이 결함 데이터를 이용해서 새로운 데이터를 계산함으로써 문제가 몇 배로 커질 수 있다. 이러한 결함 데이터를 찾아낸다고 하더라도 원래 발생 지점과 그로 인한 이후의 손상을 교정하는 것은 물론이고 찾아내는 것조차 어려울 수 있다. 임베디드 시스템은 통상적으로 장기간 동작하며 데스크톱 컴퓨터 같이 빈번하게 재부팅하지 않는다. 이러한 점 때문에 임베디드 시스템은 시간이 경과함에 따라서 더욱 더 오류가 누적될 수 있다.

데이터 손상이나 시스템 붕괴는 여러 면에서 영향을 미칠 수 있다. 시스템 오작동은 사용자들을 짜증나게 하고 고객들의 불만을 살 수 있다. 고객 불만이 높아지면 반복 불가능한 오류 원인을 조사하기 위해서 높은 비용이 들어가야 하므로 유지보수 비용이 증가할 수 있다. 갑작스러운 시스템 고장은 중장비를 사용하는 환경에서 위험한 상황을 야기할 수 있으며, 보안 시스템에서 오류가 발생하면 비의도적 백도어 진입(unintended backdoor entry) 기법을 통해서 액세스를 제공할 수 있다.

임베디드 시스템의 오류 발생 가능성

하드 오류와 전송 오류의 비율은 많은 변수들에 따라서 좌우된다. 여러 조사들에서 대형 시스템의 이와 같은 오류를 측정하였으나 이러한 결과들을 다른 시스템에도 일률적으로 적용할 수 있다고는 할 수 없다. 한편 많은 조사들에서 소프트 오류 비율(soft error rate) 결과를 발표하고 있다. 실례로서 1기가바이트 동적 메모리를 사용하는 임베디드 시스템은 MTBF(mean time between failure)가 연간 수 회에서 수년에 일회 정도에 이를 것으로 예상된다. 현장에서 이용되는 시스템 수에 대해서 MTBF를 고려해야 한다. 시스템 업체라면 특정한 시간 기간 내에 총 장치의 가능한 결함 횟수를 고려해야 한다. 예를 들어서 현장에서 MTBF가 10년인 10,000개의 장치가 이용된다면 이는 다시 말해서 평균적으로 연간 1천 대의 장치가 단일 비트 소프트 오류를 일으킬 것으로 예상된다는 뜻이다.

이와 같은 오류 비율의 허용 가능한 정도는 애플리케이션 분야에 따라서 다르다. 높은 고도에서 이용되는 애플리케이션의 개발자들은 우주선으로 인해서 더 높은 SER이 발생할 수 있다는 점을 고려해야 할 것이다. 군용, 자동차, 고성능 컴퓨팅, 통신, 산업용 고객들은 안전성, 보안, 신뢰성이 저하될 수 있다는 점을 염려할 것이다. 소비자 전자기기 분야에서는 경우에 따라서 1년의 MTBF가 허용될 수도 있다. 하지만 많은 경우에 유지보수 비용이 증가하고 고객들의 불만이 높아질 수 있으므로 그에 대한 해결책을 찾지 않을 수 없을 것이다.

오류 복구 능력의 향상

-전송 오류

Altera SoC FPGA는 최대 533MHz(1066Gbps) DDR3을 지원한다. DDR3 인터페이스 규격과 SoC FPGA 및 외부 메모리 디바이스를 이용해서 이를 구현하는 방식이 미미한 수준의 오류 비율을 보장한다. 하지만 이것은 보드 설계가 견고하고 지터와 잡음을 DDR 규격에서 지정하고 있는 한계 이내로 제어했다고 간주했을 때이다.

Google과 토론토 대학에서 공동으로 실시한 대규모 조사와 스탠포드 대학에서 실시한 또 다른 조사에서는 조사 대상의 모든 시스템 중에서 일부의 시스템이 대부분의 오류를 일으키는 것으로 나타났다. 이러한 오류는 과도한 지터나 잡음으로 인해서 발생하거나 또는 시스템이나 여기에 이용된 부품의 품질이 기준에 미치지 못해서 발생되는 것일 수 있다.

DDR4 및 상위 규격에서 정의하고 있는 것과 같이 인터페이스 속도가 높아질수록 전송 오류의 가능성이 높아진다. 전력 소모를 낮추고 더 높은 인터페이스 속도를 지원하기 위해서 전력 플레인 전압과 신호 레벨이 낮아짐에 따라서 지터와 잡음은 갈수록 더 제어하기가 어려워지고 있다. JEDEC에서는 DDR4 및 GDDR5의 차세대 메모리 규격은 지터와 잡음의 영향 때문에 특정한 비트 오류율과 설계 간소화, 특성분석, 품질 검증 사이에 절충을 허용하게 될 것이라고 지적하고 있다. 어떤 비트 오류율을 허용한다는 것은 실제적으로 그와 같이 발생하는 오류들을 교정할 수 있는 기법들을 필요로 한다는 것이다.

-소프트 오류

소프트 오류는 피할 수 없는 것이므로 시스템이 이와 같은 오류로부터 신속하게 회복할 수 있도록 하기 위한 기법들이 개발되어 왔다. 다시 말해서 어떤 오류가 발생했을 때 이를 발견해내고, 교정하고, 제대로된 값을 전달함으로써 시스템이 중단되지 않고 계속해서 작동하도록 할 수 있다. 이 작업은 메모리 데이터 워드로 비트를 추가하고 이렇게 폭이 넓어진 워드로 오류를 검출하고 교정하기 위한 충분한 정보를 전달하도록 함으로써 가능하다. 데이터 워드로 더 많은 비트를 추가할수록 한 워드로 더 많은 오류를 교정할 수 있다. 그러므로 오류 교정은 비용과 원하는 신뢰성 정도에 따라서 달라진다.

한 워드로 단일 오류를 교정하고 2개 오류를 검출할 수 있는 기법이 임베디드 시스템에 이용하기에 비용적으로 경제적이고 오류 복구가 뛰어난 것으로 입증되고 있다. 이 기술이 업계에서 널리 채택되고 있는 기법으로서 ECC(error correction code)라고 하는 것이다.

ECC의 기본적인 구현

ECC는 메모리의 폭을 넓히고 이러한 추가적인 메모리의 경로로 한정적인 양의 조합 로직을 추가함으로써 구현할 수 있다. ECC 인코딩에 필요한 로직은 널리 사용되고 있는 다항식 Hamming 알고리즘을 기반으로 한다. ECC 비트 생성기가 저장하려는 데이터로부터 ECC 비트를 생성하고 정규 데이터와 함께 이 ECC 데이터를 저장한다. 메모리 출력으로 ECC 검출 및 교정 로직 기능을 삽입한다. 메모리를 읽을 때는 이 기능이 ECC 데이터와 정규 데이터의 조합을 검사한다. 오류가 검출되지 않으면 정규 데이터를 변경하지 않고 전달한다. 만일 단일 비트 오류가 검출되면 그 오류 비트를 교정하고, 이제 모든 비트가 정확한 값인 상태에서 정규 데이터를 전달하고, 선택적으로 플래그를 선언한다. 만약 2개 오류가 검출되면 플래그를 선언함으로써 시스템이 이 이벤트에 적절히 대응할 수 있도록 한다.

TT(SoC)-2
ECC의 이점

단일 오류를 교정하고 2개 오류를 검출할 수 있으므로 여러 면에서 이점을 제공한다. ECC가 도입된 것은 대형 메모리의 SER에 대한 것이었지만 이 기법은 다른 유형의 오류들에 대해서도 복구 능력이 뛰어나다.

메모리 내부에서나 인쇄 회로 보드의 신뢰할 수 없는 배선에서 일어나는 고착 비트 라인 같은 단일 하드 오류를 ECC를 이용해서 완벽하게 해결할 수 있다. 단일 비트 전송 오류 역시 잘 처리할 수 있다. 중요한 점은 하나의 워드로 단일 비트 오류를 교정할 수 있다는 것이다. 다시 말해서 단일 워드가 하나 이상의 단일 비트 오류를 나타내지만 않는다면 ECC가 시스템 내의 다수의 오류를 적절하게 처리할 수 있다는 뜻이다.

또 다른 이점은 ECC 로직이 시스템 건전성 상태를 나타낼 수 있다는 것이다. 하나의 워드로 단일 비트 오류가 발생하면 ECC 로직이 이 오류를 교정할 수 있다. 이와 함께 프로세서로 결함 상태를 통보함으로써 작업자가 그 시스템의 요구되는 신뢰성에 적합한 조치들을 취할 수 있다. 이와 같은 방법으로 시스템 성능 저하를 유지보수 작업으로 전환할 수 있다. 이와 같이 하지 않는다면 예기치 않게 치명적인 시스템 오류 조건이 발생하는 것에 대응해야 할 것이다.

TT(SoC)-3
외부 DRAM에 대한 ECC

Altera SoC FPGA 외부의 메모리로 ECC 기능을 추가하기 위해서 메모리 데이터 폭을 늘리기만 하면 된다. ECC 비트를 생성하고 오류를 검출 및 교정하기 위한 기능들을 SoC FPGA 내부의 메모리 컨트롤러 안에 이미 통합하고 있다. 그러므로 정규 메모리를 다만 폭을 더 넓게 해서 이용할 수 있다. 또한 SoC FPGA와 외부 메모리 사이의 데이터 경로에 대해서도 ECC 기능이 작동하므로 데이터 경로에서 일어나는 전송 오류를 복구할 수 있다.

SoC FPGA와 외부 메모리 사이에 16비트 또는 32비트 폭 데이터 레인을 이용하는 외부 메모리 시스템은 ECC에 각기 6개 또는 7개의 추가적인 저장 비트를 필요로 한다. Altera의 아키텍처는 어느 경우이든 폭으로 한 바이트를 추가한 메모리를 이용하도록 정의함으로써 설계를 간소화한다.

ECC 보호 DRAM의 아키텍처 예

SoC FPGA와 외부 메모리로 구성된 첨단 임베디드 시스템은 1GB의 DRAM을 포함해야 할 수 있다. 이와 같은 시스템으로 비용적으로 경제적인 32비트 폭 메모리 인터페이스를 달성하기 위해서 통상적으로 선택하는 DRAM은 병렬로 구성된 1개의 8비트 폭 디바이스와 2개의 16비트 폭 디바이스를 조합할 수 있다.

NAND 플래시에 대한 ECC

부트 구성 메모리의 하나로서 또는 파일 시스템 같은 애플리케이션으로서 SoC FPGA 디바이스로 외부 NAND 플래시를 연결할 수 있다. NAND 플래시는 소프트 오류에 상당히 민감하며 ECC 보호가 바람직하게 요구된다. NAND 플래시 디바이스는 외부 DDR 메모리에서 같이 데이터 워드의 폭을 넓히는 것이 아니라 디바이스 내에 ECC 데이터 비트를 유지할 수 있도록 디바이스 내에 추가적인 저장 버퍼를 제공한다. 512바이트 또는 1024바이트 같이 더 대형의 데이터 블록에 대해서 ECC를 실시하고 SoC FPGA 디바이스가 최대 24개 비트 오류를 교정할 수 있다. 구체적인 구현은 NAND 플래시의 통상적인 주요 오류 패턴을 교정하도록 조정된 것이지만 복구 기법은 보통의 SRAM 및 DRAM에 이용되는 것과 유사하다.

TT(SoC)-4
TT(SoC)-5
Altera SoC FPGA 내부의 오류 복구

SoC FPGA 디바이스 안으로 다수의 온칩 메모리 사례에 대해서 ECC 기능을 설계해 넣고 있다. 레벨 2 캐시, 스크래치 RAM, FPGA 패브릭 내의 메모리, 주변장치에서 데이터 버퍼로 이용되는 메모리 각각의 폭을 넓히고 ECC 생성기 및 교정 로직을 포함하고 있다. 이들 기능을 이미 설계해 넣고 있으므로 ECC 기능을 이용하기 위해서 추가적인 비용이 들지 않는다. 또한 이 SoC FPGA로 외부 메모리 및 NAND 플래시에 대한 ECC 로직을 포함하고 있다. 데이터 및 명령 캐시는 비교적 물리적인 크기가 소형이므로 소프트 오류가 발생할 가능성도 그만큼 낮다. 이들 캐시는 높은 성능으로 동작하며 레벨 1 캐시를 읽을 때 추가적인 지연시간을 방지하기 위해서 간단한 패리티 검사 기법을 이용한다.

FPGA 패브릭 내부의 구성 비트는 폭이 넓은 데이터 워드로 구성되어 있지 않으므로 ECC 구현에 적합하지 않다. 대신에 이 FPGA 패브릭은 구성 비트의 적합성을 순환적으로 검사할 수 있는 빌트인 하드웨어 엔진을 포함하고 있으므로 오류가 검출되었을 때 플래그를 선언할 수 있다. 이 오류 교정 기법을 ‘스크러빙(scrubbing)’이라고 하며 이러한 유형의 디바이스에 업계 전반적으로 널리 이용되고 있는 표준적인 기법이다.

Altera SoC FPGA는 시스템 차원에서 오류 복구를 지원하기 위한 모든 필요한 로직을 통합하고 있다. 단지 외부 DDR 메모리의 폭을 넓히기만 함으로써 소프트 오류와 전송 오류를 복구할 수 있는 포괄적인 시스템 레벨의 폭넓은 기법을 달성할 수 있다.


출처: http://www.semiconnet.co.kr/news_read.asp?seno=9569

댓글 없음: