FPGA
1. 개요
Field-Programmable Gate Array
인류 역사상 가장 신뢰성[1] 이 높은 프로그래밍이 가능한 집적회로 반도체. 모든 신호가 하드웨어 레벨에서 실시간 처리된다. HDL(Hardware Description Language)이라는 특수한 하드웨어 기술 언어를 통해 신서시스되고 업로드되어 하드웨어 내부의 논리연산과 배선이 재조정된다. (컴파일이란 용어 대신 Synthesis라 부른다.) 현대에는 VHDL과 Verilog라는 하드웨어 기술 언어를 주로 쓴다.
일반적인 프로세서는 메모리에 있는 프로그램을 불러와서 CPU에서 해독하여 작업을 실행하지만 FPGA는 아예 프로세서 내부 회로를 프로그램에 맞게 직접 설계해 놓고 곧바로 병렬적으로 실행시킴으로서 CPU보다 훨씬 빠른 계산 속도를 낼 수 있다. FPGA 내부에 직접 커스터마이징한 CPU를 배치해서 프로그램을 실행하는 것도 가능하다.
2. 역사
FPGA가 있기 전에 1970년대에 PLA라고 하는 여러개의 로직 소자를 엮어서 입출력 구성을 자기 마음대로 바꿀수 있는 소자가 있었다. 다만 시기가 시기인 만큼 프로그래밍 가능한 수준은 아니었고 외부 핀과 연결되어서 제어하는 방식이었다. 아직 반도체 공학이 발전하지 않은 시절이라 이때의 소자수는 수십개 정도였는데 FPGA의 역사는 이곳에서 시작한다고 볼 수 있다.
이후 PLA를 더 많이 사용해서 기능을 늘린 PLD가 탄생하고 이 PLD의 규모가 커진 CPLD(Complex Programmable Logic Device)가 나오게 되고 이후 더 발전한 개념인 FPGA가 나오게 된다.
field-programmable gate array라는 이름이 붙은 이유는 간단한데 기존에 PLC, CPLD 소자 같은 경우는 초창기의 ROM처럼 퓨즈 방식인 경우가 많아서 공장이 아니라면 프로그래밍이 불가능한 제품이 많았기 때문이다. FPGA에서는 메모리를 통한 소자 수정을 통해서 더 간단하게 기록할 수 있게 되었고 이때부터 제조사가 아니어도 논리소자를 프로그래밍할 수 있게 되었다.
시장에 나온 첫 FPGA는 알테라의 EP300이다. EP300은 자외선을 이용한 EPROM 구조로 되어있는 제품이었다.
3. 상세
칩셋 내부에 로직 게이트를 자유자재로 구현할 수 있도록 진리표를 이용해 로직을 만들어 내는 RAM과 플립플롭이 빽빽히 박혀있고 내부 결선을 직접 변경할 수 있기 때문에 사용자의 용도에 맞게 온갖 칩을 설계 가능하다. 단순 MCU 대체 용도부터 시작해서 DSP나 아예 자기가 원하는 방식대로 새로운 논리 소자나 CPU를 만드는것도 가능하며 동작 속도도 넘사벽이다.(일반적인 MCU 동작 속도는 100MHz를 넘기 힘들지만 FPGA는 기가헤르츠까지 쓴다. (사실 FPGA는 동작 속도가 크게 중요하지 않다. 아래에 기술)
주요 성능의 지표로는 동작 속도가 아닌 논리 블록의 수로 평가되는데, 이는 게이트 간 결선을 통해 동시에 수만에서 수백만의 명령을 단 한 번에 병렬적으로 실행할 수도 있기 때문이다. 클럭신호에 맞추어 명령어를 차례대로 수행하는 프로세서와는 근본적으로 동작 방법이 다르다고 할 수 있다.
프로그래밍이 가능한 주제에 비교대상은 항상 ASIC이다. ASIC은 프로그래밍이 불가능한 양산형 집적회로이고, 성능, 전력소모, 칩 가격 모든 면에서 FPGA보다 뛰어나지만, 개발비용이 어마무시하기 때문에 수요 규모가 크지 않으면 ASIC보다는 FPGA를 사용하는 게 일반적이다. ASIC과 비교해서 FPGA는 기본적으로 해당 공간에 모든 용도로 활용 가능한 로직 블록을 욱여넣은 형태이기 때문에 전력 소모가 많으며 ASIC보단 소형화된 설계를 할 수 없다. 최근에는 나름 저전력 FPGA칩이 상용화되기도 했다.
현재는 단순 프로그래머블 논리 소자 말고도 별도의 CPU를 탑재할 필요 없이 자체적인 CPU를 탑재한 제품도 나오고 있으며 이를 통해서 다양한 분야에 널리 사용되는 중이다. 실제 산업현장에서 일반적으로 FPGA 단독으로 쓰이는 경우는 거의 없기 때문이다. 보통은 피코/나노초 단위로 고속처리가 중요한 분야만 FPGA를 적용하고 이 FPGA를 다른 CPU가 제어하는 식으로 많이 쓰인다. 자일링스의 ZYNQ, 인텔의 어질렉스 SOC 등등 둘다 ARM 코어텍스-A 기반 코어 탑재.
인공지능 분야가 대두되면서, 시장 점유율은 점점 커질 것으로 예상된다.
4. 제조업체
FPGA 제조 업체 자체는 많다. 마이크로컨트롤러로 유명한 업체도 자사 마이크로컨트롤러 라인업에 FPGA를 끼워놓은 경우가 많으며 코어텍스-M 코어 중에는 아예 FPGA 코어도 있다. 시장 점유율은 자일링스가 1위, 인텔이 2위로 경쟁하고 있으며 이둘을 합하면 거의 90%에 가까운 시장점유율을 보여준다.시장점유율 원래는 알테라였지만 인텔이 인수한 뒤 아예 알테라 브랜드를 지우고 인텔 브랜드에 편입한 상태다. 현재는 AMD가 자일링스를 인수하면서 사실상 AMD와 인텔의 경쟁이 되었다. 이 두 회사는 몇 안되는 빅칩 FPGA를 제조하는 회사들이며(각각 버텍스, 킨텍스/스트라틱스) 따라서 좀 규모가 큰 장비에 들어가는 FPGA는 십중팔구 이 두회사의 제품이다.[2] 사실상 나머지 소규모 업체들은 그냥 소형 FPGA, CPLD 위주로 구색만 갖춘 수준이다.
5. 활용
- 프로토타입 -칩 양산 단계에서의- 테스트
- 로봇제어 / 인공지능 / 채굴기 / 데이터 센터 등을 위한 가속기 또는 그래픽 가속기
- 우주선 / 인공위성 / 대부분의 현대전 무기 / 전자전 무기 / 미사일와 같은 방위산업 분야[3]
- 통신 시스템 등 높은 처리능력과 유연성이 동시에 요구되는 분야
- 기타 기존 시스템의 원칩화
한때는 다른 저전력 MCU들에 밀리다가 최근에 들어서 가속기 용도로 활약하며 AI 분야(마이크로소프트나 인텔이 이 부분에 적극적이다.)나 암호화폐 채굴 등 막대한 연산력을 필요로 하는 분야에서 두각을 드러내고 있다. 암호화폐 채굴 분야에서는 사실 ASIC으로 넘어가기 전 단계에 해당된다. 채굴 로직을 개발해서 FPGA에 탑재해 성능 확인 후 그대로 ASIC행.
가속기 용도에서는 GPGPU와 경쟁상대. FPGA를 사용하면 하드웨어 레벨에서 애플리케이션의 병렬 처리를 최적화 할수 있기 때문에 GPGPU보다 성능이나 전력소모 등에서 훨씬 유리하다. 암호화폐 채굴기 사례에서 알 수 있듯이 잘 설계된 하드웨어 가속기는 GPGPU를 전성비에서 밟아버릴 수 있다. 그러나 하드웨어를 설계해 줘야 하는 FPGA의 특성상 설계 난이도가 매우 높다는 큰 단점이 있다.(그 어렵다는 GPGPU보다 훨씬 더!) 예를 들어 박사 학위를 가진 엔지니어 한명이 2달동안 어떤 동영상 처리 알고리즘을 GPGPU로 구현했는데, 동일한 알고리즘과 기능을 FPGA로 구현할때 박사 학위를 가진 엔지니어 두명이 1년동안 작업해야 했다는 보고가 있다. 단순 계산하면 동일한 기능의 구현에 GPGPU 보다 12배의 노동력이 필요했던 것이다. C 등의 프로그래밍 언어로 알고리즘을 짜면 HDL로 변환해주는 HLS(High Level Synthesis)도 많이 보급되었지만, 그게 하드웨어를 몰라도 쉽게 사용할 수 있는 만능도구라 생각하면 곤란하고, FPGA 설계는 하드웨어 설계에 대한 지식이 없는 일반적인 프로그래머에게는 불가능에 가까운 진입 장벽을 가지고 있다. 컴퓨터 공학과에서 논리회로나 컴퓨터 아키텍처 과목을 배우긴 하나, 그 정도는 비유하자면 수학에서 구구단 배운 수준이고, 이쪽에서 일하려면 보통 전자공학 등 RTL 설계에 관련된 석사 학위 이상이 필요하다. 즉, FPGA를 설계할 줄 안다는 것은, 단순한 소프트웨어적인 코딩 지식 뿐 아니라 하드웨어적인 지식까지 전체적으로 알고 있다는 이야기가 된다.
마이크로소프트에서는 데이터센터 서버에 알테라(Altera)의 FPGA를 도입해서 Bing 검색엔진의 성능 및 전력소모를 절감했다고 한다.
일반인들이 체감할수 있는 사용사례를 꼽아보면 G-SYNC나 카메라등이 있는데 엔비디아는 자사의 G-SYNC 컨트롤 보드에 인텔의 ARRIA FPGA를 박는 무식하기 짝이없는 짓을 했다. 이외에도 엔비디아는 인텔제 FPGA를 많이 사용한다. Quadro Sync II 에도 인텔제 FPGA가 들어가 있음을 확인할수 있다. 영상 캠코더 분야에서 초 고해상도 영상의 무지막지한 처리량을 감당하기 위해 아예 대형 FPGA를 통째로 넣고 처리해버리는 제품들이 많다.
6. 관련 문서
[1] 툭하면 렉 걸리거나 몇년 쓰면 성능이 확떨어지는 일반적인 컴퓨터와는 다르게, 쉽게 고장나지 않고 수십년 돌려도 오류 한번 나지 않는 장점이 있다. 덕분에 시스템의 안전성과 상시성, 보안과 예측 가능성 등이 요구되며, 단 한번도 종료하지 않고 반영구적으로 동작 시켜야만 하는 제어 컴퓨터에 많이 사용된다. 예를 들어 고층건물이나 다리에 가해지는 하중을 계산해서 붕괴의 위험을 파악해주는 관리기, 제어기 같은 물건들. 오류 터져서 컴퓨터를 재부팅 해야하는 상황에서는 시스템이 중단되기에 매우 위험하다.[2] 대표적인 예시가 KFX사업. 자일링스의 버텍스 FPGA가 사용된다.[3] 이렇기 때문에 가끔씩 FPGA 관련 제품 구매시 "군사적 용도로 사용할 것이냐"에 대해서 질의응답을 하는 벤더들 또한 있다.