마이크로프로세서를 CPLD로 대체하는 6가지 방법
글│Rafael Camarota, Senior Manager, HardCopy Product Group, Altera Corporation
Denny Steele, Senior Manager, Low-Cost Products Group, Altera Corporation
휴대기기 디자이너들에게 소프트웨어 프로그램을 이용해서 하드웨어의 동작을 재구성할 수 있는 저전력 디지털 디바이스가 있다고 한다면 열의 아홉은 어떠한 마이크로컨트롤러 형태라고 생각할 것이다. 이는 그럴 만도 하다. 매우 다양한 기능과 패키지, 풍부한 소프트웨어 개발 툴, 방대한 애플리케이션 코드 라이브러리로 인해서 유비쿼터스 마이크로컨트롤러가 거의 모든 유형의 휴대기기 애플리케이션에 이용되는 것을 볼 수 있다. 하지만 이제 저전력 CPLD가 등장함으로써 디자이너들은 기존에 마이크로컨트롤러로 수행하던 다수의 기능들을 구현하기 위해 새로운 대안을 이용할 수 있게 되었다.
이 글에서는 어떤 경우에 마이크로컨트롤러 대신 CPLD를 이용하는 것이 유리하고 어떤 경우에 CPLD와 마이크로컨트롤러를 결합하는 것이 적합한지 설명한다. 이 글에서 소개하고 있는 예들은 기능과 복잡성의 정도에 따라서 3개 범주로 분류할 수 있다. 첫 번째 범주는 핀 레벨 애플리케이션에 중점을 둔 I/O 관리이다. 두 번째 범주는 포트 관리로서, 디바이스 사이의 다양한 인터페이스에 역점을 둔 것이다. 세 번째 범주는 시스템 관리로서, 시스템 레벨 기능을 제어하기 위해 핀이나 포트를 이용하는 애플리케이션을 위한 것이다.
프로그래머블 로직을 처음 접하는 디자이너들은 CPLD 설계의 많은 측면이 기존의 마이크로컨트롤러를 이용한 설계와 유사하다는 것을 발견할 것이다. CPLD 설계 플로우를 개략적으로 설명하자면 다음과 같다.
1. 소프트웨어 개발 툴을 이용해서 Verilog나 VHDL 같은 고수준 언어로 디자인을 작성한다.
2. 기능적 정확성에 대해서 디자인을 시뮬레이트한다.
3. 디자인이 특정 CPLD에 들어가므로 자원 활용이나 타이밍 경로 같은 물리적 측면을 제공한다.
4. 타이밍 정확성에 대해서 디자인을 시뮬레이트한다.
5. 디자인을 물리 디바이스로 프로그램한다.
한 가지 큰 차이점은 마이크로컨트롤러 검사를 위해 정교한 회로내 에뮬레이터를 이용할 수 있다는 점이다. 하지만 일단 프로그래머블 기술의 미묘한 차이를 이해했으면 마이크로컨트롤러 디자이너가 CPLD 디자인으로 작업을 잘 수행할 수 있을 것이다.
CPLD로 마이크로컨트롤러를 대체하는 예
다음에서는 CPLD가 마이크로컨트롤러를 경제적으로 대체할 수 있는 많은 애플리케이션 중에서 몇 가지 예를 살펴본다.
I/O 관리
I/O 관리를 위해서 CPLD를 이용할지 아니면 마이크로컨트롤러를 이용할지 고려할 때는 필요한 I/O의 수와 유형이 두 가지 중요한 고려사항이다. 마이크로컨트롤러는 소형이고 가격이 저렴하다고 알려져 있으며 확실히 디자이너가 선택할 수 있는 다수의 소형의 저렴한 마이크로컨트롤러들이 존재한다. 하지만 애플리케이션이 대량의 범용 I/O를 필요로 한다면 CPLD가 마이크로컨트롤러에 대해서 가격 경쟁력이 있을 수 있다. 소형의 저가의 마이크로컨트롤러는 대개 직렬 포트와 불과 몇 개의 범용 I/O 핀으로 제한된다.
디자이너들은 십여 개 I/O의 마이크로컨트롤러가 더 이상 소형이고 저렴하지 않다는 것을 깨닫고 있다. 반면에 CPLD는 I/O 집중적이다. 소형 폼팩터 CPLD가 50개 이상의 I/O인 경우가 드물지 않다. 예를 들어서 5mm x 5mm 패키지의 Altera MAX IIZ EPM240Z CPLD는 80개 I/O를 제공한다. 일반적으로 CPLD는 I/O 수의 이점을 제공할 뿐만 아니라 마이크로컨트롤러보다 더 유연하다. 일부 예외가 있으나 대부분의 CPLD I/O는 어떠한 용도로나 이용할 수 있다.
프로그래머블 레벨 쉬프팅
많은 제품들은 다양한 전압의 로직 디바이스를 이용해야 한다. 다중전압 애플리케이션을 지원하기 위해서 디자이너들은 빈번하게 각기 다른 전압 레벨의 디바이스들을 연결해야 한다. 이는 마이크로컨트롤러를 이용해서는 거의 불가능하다. 마이크로컨트롤러는 I/O 자원의 수가 제한적이고 흔히 단일 전압 전원으로 동작하기 때문이다. 반면에 CPLD는 더 많은 수의 I/O를 제공하며 다중의 뱅크로 그룹화할 수 있다. 각각의 I/O 뱅크는 다시 고유의 전압 전원이 지정된다. 그러므로 전압 레벨 쉬프터를 작성하기 위해서 단지 한 전압의 모든 I/O를 한 뱅크로 그룹화하고 관련 전압 레퍼런스를 이들 I/O에 필요한 전력 레일로 연결하기만 하면 된다(그림 1). CPLD를 이용해서 레벨 쉬프팅을 달성할 수 있다는 것이 유용할 뿐만 아니라 레벨 쉬프팅과 함께 프로그램가능성을 결합함으로써 더 높은 유용성을 달성할 수 있다. 예를 들어서 어떤 애플리케이션이 호스트 프로세서가 지원하지 않고 동일한 전압 레벨이 아닌 LCD 디스플레이를 필요로 한다고 하자. 그러면 CPLD를 이용해서 호스트 프로세서와 LCD 디스플레이 사이에 전압 레벨 쉬프티드 타이밍 제어를 제공할 수 있다.
그림 1. MAX IIZ CPLD를 이용해 전압 레벨 쉬프팅 수행
펄스 폭 변조
흔히 디자이너들은 펄스 폭 변조(PWM) 기능을 위해 마이크로컨트롤러를 선택하는데 이를 CPLD를 이용해서 달성할 수 있다. PWM에서는 방형파의 시간 피리어드는 일정하게 유지하고 신호가 하이가 되는 시간을 변화시키거나 변조한다. 그러므로 신호의 듀티 사이클(tON)을 변화시킬 수 있다. PWM은 디지털 시스템에서 아날로그 회로를 제어하기 위한 강력한 기법을 제공한다. 휴대기기 애플리케이션에서 일반적인 한 기법이 PWM을 이용해서 LED의 세기를 변조하는 것이다.
CPLD는 전용의 PWM 회로를 제공하지는 않지만 PWM 출력을 구현하는 것이 어렵지 않다. 예를 들어서 MAX IIZ CPLD는 내부 발진기를 포함하므로 이를 주파수 소스로 이용할 수 있으며 그런 다음에 카운터를 이용해서 이 주파수를 변조할 수 있다.
아날로그-디지털 컨버터
디자이너들은 흔히 아날로그-디지털 컨버터(ADC) 기능을 위해 마이크로컨트롤러를 선택한다. 하지만 키패드 디코딩 같은 특정한 경우에는 ADC가 필요하지 않을 수 있다.
그림 2는 기본적인 스위치 어레이와 ADC를 보여준다. VCC와 GND 사이에 일단의 저항을 직렬로 연결하고 각각의 저항 탭과 공통 노드로 스위치를 연결한다. 스위치가 활성화되면 회로가 저항 스택의 스위치 위치에 비례하는 전압을 발생시킨다. 디지털 시스템에 이용하기 위해서는 이 아날로그 신호를 디지털 값으로 변환해야 하고 흔히 마이크로컨트롤러가 빌트인 ADC를 포함하므로 마이크로컨트롤러를 선택한다.
그림 2. 아날로그 키패드 어레이
하지만 CPLD가 대안이 될 수 있다. 단순한 저가형 외부 커패시터를 추가함으로써 MAX IIZ CPLD가 이의 내부 발진기, 슈미트 트리거 I/O, 고밀도 산술 프로그래머블 로직 패브릭을 이용해서 아날로그-디지털 변환을 수행할 수 있다.[1]
전력 시퀀싱
MAX IIZ 디바이스는 다중 전압 시스템 파워업 및 시스템 리셋을 포함하는 전력 시퀀싱뿐만 아니라 칩 선택 생성 같은 다수의 시스템 관리 기능을 위해 최적화되었다. 이들 두 애플리케이션은 흔히 단일 비휘발성 instant-on 디바이스로 통합된다. 다중 전압 시스템 전력 시퀀싱을 위해서는 즉각적으로 온이 되고 PCB 상의 다른 디바이스들의 파워업 시퀀싱을 관리할 수 있는 디바이스가 필요하다. 그러므로 파워업하기 위해서 수 밀리초를 필요로 하는 마이크로컨트롤러보다는 수 마이크로초 이내에 파워업하는 CPLD가 전력 시퀀싱에 더 적합한 선택이다.
그림 3은 MAX IIZ 디바이스 전력 시퀀싱 애플리케이션 예를 보여준다. 보드 밀도와 보드 상의 전력 플레인 수가 증가함에 따라서 전력 시퀀싱의 복잡성 역시 증가한다. MAX IIZ CPLD는 모든 수준의 시스템 복잡성으로 전력 시퀀싱을 편리하게 관리할 수 있다. 다중의 전력 레일이 각기 다른 디바이스를 지원하며 각 디바이스의 파워업 순서를 관리하기 위해서 제어 로직이 필요하다. 파워업 시에 이들 신호를 예기치 않게 구동하지 않도록 하기 위해서 MAX IIZ 디바이스를 이용해서 또한 파워업이 완료될 때까지 주요 버스 신호를 관리할 수 있다. JTAG 포트가 전력 순서를 모니터하고 파워업 시의 오류와 정보를 저장한다. 이를 이용해서 전력 시퀀싱에 있어서 정지점을 설정할 수 있다. 이는 디버그 단계에서 유용하다.
그림 3. CPLD를 이용한 전력 시퀀싱
워치도그 타이머
다수의 시스템 관리 애플리케이션이 일정한 형태의 타이머를 필요로 한다. 디자이너들은 보통 마이크로컨트롤러를 연상하게 되는 다수의 타이머 기능에 CPLD를 이용할 수 있다는 것을 알고 놀랄 것이다. 소수의 이산 커패시터, 저항, 다이오드, MOSFET(금속 산화막 반도체 전계 효과 트랜지스터)을 이용함으로써 CPLD를 주기적인 간격으로 파워업하는 단순하면서도 강력한 저항-커패시터(RC) 타이머 기반 회로를 구축할 수 있다. 그림 4의 회로 예에서는 RC 값을 선택해서 10초 타이머를 생성한다. 이 기본형 타이머를 3개의 외부 커패시터(C1, C2, C3)로 확장함으로써 이를 이용해서 간단한 비휘발성 바이너리 카운터를 작성할 수 있다. 그러므로 MAX IIZ EPM240Z CPLD로 이의 로직의 19%를 이용해서 10초에서 80초에 달하는 피리어드를 완벽하게 구현할 수 있다.[2]
그림 4. MAX IIZ CPLD의 타이머 기반 파워업 회로 구현
CPLD와 마이크로컨트롤러를 결합한 예
CPLD가 마이크로컨트롤러와 항상 경쟁 관계인 것은 아니다. 다음은 CPLD와 마이크로컨트롤러를 결합할 수 있는 몇 가지 예들을 보여준다.
GPIO 핀 확장
범용 I/O 핀 확장이라고 하는 일반적인 애플리케이션에서 많은 디자이너들은 소형 저가형 마이크로컨트롤러의 프로그래밍 성능과 CPLD의 범용 I/O 자원을 결합할 수 있다. CPLD가 일련의 내부 레지스터를 구축함으로써 마이크로컨트롤러가 I2C나 SPI 같은 이용 가능한 직렬 포트를 통해서 이들을 액세스할 수 있다(그림 5). 그럼으로써 마이크로컨트롤러가 기존의 I/O 자원을 이용해서 총 I/O 수를 확장할 수 있다. 이렇게 확장된 I/O 수를 이용해서 전압 레벨 쉬프팅에 CPLD를 이용할 수 있으므로 CPLD의 유용성을 향상시킨다.[3]
그림 5. GPIO 핀 확장
포트 관리
휴대기기 애플리케이션 디자이너들은 각기 다른 I/O 인터페이스의 디바이스들을 연결해야 할 수 있다. 이 기능을 흔히 브리징이라고 한다. CPLD를 이용해서 상이한 인터페이스 사이에 다리를 형성하기 때문이다. 여기서는 다음의 3가지의 사례에 대해 설명한다.
¶직렬 대 직렬-I2C 대 SPI
¶직렬 대 병렬-SPI 디바이스(직렬) 대 호스트 디바이스(병렬)
¶병렬 대 병렬-호스트 프로세서 대 CF
이들 각각의 예에서 CPLD가 마이크로컨트롤러보다 더 나은 선택이 될 수 있는 이유들이 있다. 그 하나는 마이크로컨트롤러로 경제적으로 이용할 수 있는 것보다 더 많은 I/O가 필요하다는 점이다. 마이크로코드 구현은 인터페이스의 필요한 성능을 충족하지 못할 수 있다. 뿐만 아니라 이 구현은 CPLD의 하드웨어보다 마이크로코드로 구현하기 위해서 훨씬 더 부담스럽다.
직렬-직렬 변환
그림 6은 CPLD를 이용해서 어떻게 2개의 상이한 직렬 인터페이스를 브리징할 수 있는지 보여준다. 이 디자인은 MAX IIZ EPM240Z CPLD로 이용 가능한 로직의 약 43%와 6개의 I/O 핀을 이용해서 구현할 수 있다.[4]
그림 6. MAX IIZ CPLD를 이용한 I2C-SPI 인터페이스
직렬-병렬 변환
그림 7은 CPLD를 이용해서 호스트 프로세서를 SPI 마스터로 인터페이스해서 직렬-병렬 인터페이스를 구현한 것을 보여준다. 이 예는 호스트 프로세서 버스 인터페이스와 전체적인 SPI 마스터를 생성하며 MAX IIZ EPM240Z CPLD로 이용 가능한 로직의 약 30% 및 25개 I/O 핀을 이용해서 구현할 수 있다.[5]
그림 7. MAX IIZ CPLD를 이용한 호스트 프로세서-SPI 인터페이스
병렬-병렬 변환
그림 8에서는 CPLD를 이용해서 2개의 병렬 인터페이스를 브리징한 것을 보여준다. 이 예는 Compact FLASH 디바이스에 대해 호스트 프로세서 버스 인터페이스를 구현한다. 이는 MAX II EPM240Z CPLD로 이용 가능한 로직의 약 54%와 45개 I/O 핀을 이용해 구현할 수 있다.[6]
그림 8. MAX IIZ CPLD를 이용한 호스트 프로세서-CF 인터페이스
결론
전통적으로 일정한 형태의 마이크로컨트롤러가 저전력 전자 디자이너들이 이용할 수 있는 유일한 "프로그래머블" 로직이었다. 하지만 저전력 CPLD가 등장함으로써 디자이너들이 휴대기기 애플리케이션을 위한 새로운 대안을 갖게 되었다. 이 글에서는 휴대기기 애플리케이션에서 어떻게 저전력 CPLD를 이용해서 전통적으로 마이크로컨트롤러로 구현하던 기능들을 대체하거나 보강할 수 있는지에 대해 여러 예를 살펴보았다. 결과적으로 저전력 전자 디자이너들은 휴대기기 애플리케이션을 위해 또 다른 문제 해결 툴들을 갖게 되었으며 혁신적인 제품을 개발할 때 최적의 디바이스를 더 잘 선택할 수 있게 되었다.
참고문헌
[1] AN 426: MAX II CPLD를 아날로그 키보드 인코더로 이용:
www.altera.com/literature/an/an426.pdf
[2] AN 491: Altera MAX II CPLD를 이용한 자동 시작:
www.altera.com/literature/an/an491.pdf
[3] AN 494: Altera MAX II CPLD의 I2C 버스 인터페이스를 이용한 GPIO 핀 확장:
www.altera.com/literature/an/an494.pdf
[4] AN 486: MAX II CPLD를 이용한 SPI-I2C:
www.altera.com/literature/an/an486.pdf
[5] AN 485: Altera MAX II CPLD의 직렬 주변장치 인터페이스(SPI) 마스터:
www.altera.com/literature/an/an485.pdf
[6] AN 492: Altera MAX II CPLD를 이용한 CF 인터페이스:
www.altera.com/literature/an/an492.pdf