| [[컴퓨터공학|'''컴퓨터 과학 및 공학 {{{#!wiki style="font-family: Times New Roman, serif; display: inline;"]] | ||
| {{{#!wiki style="margin: 0 -10px -5px; min-height:calc(1.5em + 5px)" {{{#!folding [ 펼치기 · 접기 ] {{{#!wiki style="margin: -5px -1px -11px" | <bgcolor=#1282d7,#1282d7> 기반 학문 | 수학(해석학 · 이산수학 · 수리논리학 · 선형대수학 · 미적분학 · 미분방정식 · 대수학(환론 · 범주론) · 정수론) · 이론 컴퓨터 과학 · 암호학 · 전자공학 · 언어학(음운론 · 형태론 · 통사론 · 의미론 · 화용론) · 인지과학 |
| 하드웨어 | SoC · CPU · GPU(그래픽 카드 · GPGPU) · ROM · RAM · SSD · HDD · 참조: 틀:컴퓨터 부품 | |
| 기술 | 기계어 · 어셈블리어 · 바이오스 · 절차적 프로그래밍 · 객체 지향 프로그래밍 · 함수형 프로그래밍 · 해킹 · ROT13 · 일회용 비밀번호 · 사물인터넷 · 와이파이 · GPS · 임베디드 · 인공신경망 · OpenGL · EXIF · 마이크로아키텍처 · ACPI · UEFI · LinuxBoot · gRPC · 리버스 엔지니어링 · HCI · UI · UX · 대역폭 · DBMS · NoSQL · 해시(SHA · 브루트 포스 · 레인보우 테이블 · salt · 암호화폐) · RSA 암호화 · 하드웨어 가속 | |
| 연구 및 기타 | 논리 회로(보수기 · 가산기 · 논리 연산 · 불 대수 · 플립플롭) · 정보이론 · 임베디드 시스템 · 운영체제(멀티태스킹 · 프로세스 스케줄링 · 데드락 · 식사하는 철학자 문제 · 뮤텍스 · 세마포어 · 인터럽트) · 데이터베이스 · 컴퓨터 언어 · 프로그래밍 언어{컴파일러(어셈블러 · JIT) · 인터프리터 · 유형 이론 · 어휘 분석 · 파싱 · 링커 · 난해한 프로그래밍 언어} · 마크업 언어 · 메타데이터 · 기계학습 · 빅데이터 · 폰노이만 구조 · 양자컴퓨터 · 행위자 모델 · 인코딩(유니코드 · MBCS) · 네트워크(네트워크 포트) · 컴퓨터 보안 · OCR · 슈퍼컴퓨터 · 튜링 머신 · FPGA · 딥러닝 · 컴퓨터 구조론 · 컴퓨터 비전 · 컴퓨터 그래픽스 · 인공지능 · 시간 복잡도(최적화) · 소프트웨어 개발 방법론 · 디자인 패턴 · 정보처리이론 · 재귀 이론 · 자연어 처리(기계 번역 · 음성인식) · 버전 (버전 관리 시스템) · 난수생성 · 놀람 최소화 원칙 · 프레임워크 · 라이브러리 · 모듈 · API · ABI · 이진 탐색 |
1. 개요
Field-Programmable Gate Array사용자(설계자)가 현장에서(Field) 논리 회로를 직접 프로그래밍(Programmable)할 수 있는 게이트 어레이(Gate Array) 형태의 반도체 집적 회로. 논리 블럭이 격자 형태로 배치되어 있어 'Gate Array'라는 이름이 붙었다.
일반적인 컴퓨터 프로세서가 소프트웨어 명령어를 순차적으로 실행하는 구조라면, FPGA는 하드웨어 수준에서 디지털 회로 자체를 재구성하여 데이터를 병렬적으로 실시간 처리하는 것이 특징이다.
컴퓨터 프로그램을 만들 때 프로그래밍 언어를 사용하는 것처럼 FPGA 설계자는 HDL(Hardware Description Language)이라는 특수한 하드웨어 기술 언어를 통해 회로를 표현한다. HDL 코드를 합성(synthesis)하여[1] 하드웨어 내부의 논리 블록 및 배선으로 변환하고, FPGA 내부에서 사용하는 바이너리 데이터인 비트스트림(bitstream) 형태로 업로드하여 실제 회로로 구성할 수 있다. 최근에는 Verilog 및 VHDL이라는 하드웨어 기술 언어를 주로 사용한다.
일반적인 프로세서는 보편적인 목적에 맞게 설계되어 양산되는데 반해, FPGA는 어플리케이션에 맞게 최적화 된 프로세스 및 내부 연산처리 로직[2]을 직접 설계하여 물리적으로 구현하는 형태이다. 단순 MCU 대체 용도부터 시작해서 DSP나 아예 자기가 원하는 방식대로 새로운 논리 소자나 CPU를 만드는 것도 가능하며 이론상 한 클럭에 모든 작업을 수행할 수도 있다. (단, 두 플립플롭 사이의 논리회로가 크고 복잡해질수록 동작에 걸리는 시간이 늘어나기 때문에 클럭 주파수가 감소한다.)
인류 역사상 프로그래밍이 가능한 반도체 중 신뢰성이 높다. 이는 코드를 한 줄씩 순차적으로 실행하는 소프트웨어 방식이 아니라, 하드웨어적으로 구성된 회로가 전기 신호에 따라 즉각적으로 반응하기 때문이다. 또한 기존 회로의 동작을 방해하지 않으면서 새로운 기능을 병렬적으로 추가하거나 수정하는 것이 용이하다. 특히 실제 하드웨어로 구현하기 전, 시뮬레이션 단계에서 오동작이나 타이밍 지연(Delay) 등의 문제를 정밀하게 파악할 수 있다는 장점 덕분에 항공우주 및 방위산업 등 고신뢰성이 요구되는 분야에서 필수적으로 사용된다.
2. 역사
프로그래밍 가능한 논리 소자(PLD)의 개념은 FPGA가 나오기 전 1960년대부터 존재하였다.1970년대에는 PLA, PAL과 같이 여러 개의 논리 소자를 입출력 핀과 연결하여 SoP(Sum of Products) 형태로 논리회로를 구성할 수 있는 소자들이 등장했다. 초기에는 퓨즈(Fuse)나 안티-퓨즈(Anti-Fuse) 구조의 한계로 인해 한 번만 기록할 수 있었으며, 전용 기록 장비가 필요했다. 당시 기술의 한계로 소자의 수는 수십 개 수준에 불과했으나, FPGA의 기원이 되는 기술적 토대가 마련된 시기이다.[3]
이후 PAL의 규모와 기능을 확장한 CPLD(Complex Programmable Logic Device)가 등장했고, 이를 더욱 발전시켜 구조적 유연성을 극대화한 것이 FPGA이다.
FPGA(Field-Programmable Gate Array)라는 명칭은, 초창기 퓨즈 방식의 ROM이나 PLD와 달리 메모리 기술을 활용하여 '현장(Field)에서' 칩 내부의 논리 게이트 배열(Gate Array)을 손쉽게 수정(Programmable)할 수 있다는 점을 강조하여 붙여졌다.
시장에 나온 재기록 가능한 첫 PLD 제품은 1984년 출시된 알테라의 EP300으로, EP300은 자외선을 이용한 EPROM 구조로 되어 있는 제품이었다.
1985년, 자일링스는 세계 최초의 상용 FPGA인 XC2064를 출시했다. 64개의 논리 블록을 탑재했으며, 전원이 켜질 때마다 외부 ROM에서 구성 데이터를 시리얼 인터페이스로 받아오는 방식이었다.
1991년, 자일링스는 XC4000 시리즈를 출시하며 FPGA 아키텍처의 표준을 확립했다. 복잡한 함수 구현이 가능하도록 논리 블록 기능을 강화하고 올림수(Carry) 전용 회로를 내장했다.
1990년대에는 JTAG 인터페이스가 등장하여 보편화되면서 PC와 케이블 연결만으로 간편하게 FPGA를 프로그래밍할 수 있는 환경이 조성되었다.
1995년 알테라는 업계 최초로 내장 메모리(Embedded Memory)를 탑재한 FLEX 10K를 출시했으며, 자일링스 역시 1998년 Virtex 시리즈에서 블록 램(Block RAM)과 하드웨어 클럭 회로를 도입하였다. 이로써 FPGA는 단순 논리 소자를 넘어 본격적인 디지털 시스템 구현이 가능한 고성능 디바이스로 발전하기 시작했다.
2000년대 들어 FPGA는 단순 논리 회로를 넘어 고성능 연산 장치로 진화했다. 2001년 자일링스 Virtex-II는 최초로 하드웨어 곱셈기(Multiplier)를 내장했고, 2002년 Virtex-II Pro는 고속 통신용 트랜시버를 내장했다.
특히 2011년 출시된 Zynq-7000 시리즈는 FPGA와 고성능 ARM 프로세서를 하나의 칩(SoC)으로 완전히 통합했다는 점에서 중요한 변화였다. 이로써 별도의 CPU 없이도 리눅스 등 운영체제(OS) 구동과 하드웨어 제어를 칩 하나에서 동시에 수행할 수 있게 되었으며, 시스템의 복잡도와 크기를 획기적으로 줄이는 계기가 되었다.
2010년대 이후 데이터센터 및 AI 분야의 수요가 급증함에 따라, 최신 FPGA(예: Versal 시리즈 등)는 고대역폭 인터커넥트, 네트워크 가속기, AI 전용 연산 유닛(Tensor Core 등)을 하드웨어적으로 통합하는 방향으로 발전하고 있다.
3. 상세
FPGA의 내부는 크게 프로그래밍 가능한 논리 블록(CLB, LAB 등), 입출력 블록(I/O Block), 그리고 이들을 연결하는 상호 연결 배선(Interconnect)으로 구성된다.초기의 FPGA는 단순히 논리 게이트의 배열이 전부였으나, 현대의 FPGA는 기본적인 논리 회로 외에도 메모리나 연산 장치 등 특정 기능을 수행하는 고정 모듈(Hard IP)이 칩 내부에 다수 포함되어 있다.
3.1. 내부 구조
FPGA 내부 자원은 크게 "무엇이든 될 수 있는 유연한 자원"(Programmable Logic)과 "이미 정해진 고성능 자원"(Hard IP)으로 나뉜다.- 논리 블록(CLB/LAB)
- LUT(Look-Up Table): 조합(combinational) 논리를 구현하는 데 사용하는 자원으로, 논리 회로의 진리표를 저장해 두는 작은 용량의 SRAM과 MUX로 구성되어 있다. 과거에는 4-input LUT이 주류였으나, 최근에는 6-input LUT이 주로 사용되고 있다. FPGA에 따라 일부 LUT에 약간의 회로를 추가하여 작은 SRAM으로 활용하기도 한다.
- 레지스터: 순차(sequential) 논리 회로 구현에 사용되는 자원으로, 일반적으로 클럭에 맞추어 동작하는 플립 플롭으로 구현되나 FPGA에 따라 일부 레지스터를 래치로 구성하는 옵션을 제공하기도 한다.
- 연결 배선(Interconnect)
- Fabric: FPGA의 기본적인 배선으로, 논리 블록 사이사이에 수평 및 수직으로 뻗은 배선 채널과 이들의 교차점에 위치한 스위치 매트릭스(Switch Matrix)로 구성된다.
- NoC(Network on Chip): FPGA에 요구되는 데이터 처리량이 크게 늘어남에 따라 기존 배선 대신 대량의 데이터를 전송하기 위해 칩 내부에 구현된 전용 회로이다. AMD Versal 시리즈 등 최신 고성능 FPGA에 도입되었다.
- 고정 기능 블록(Hard IP)
- 내장 메모리: AMD(Xilinx)의 경우 BRAM/UltraRAM, Altera의 경우 M9K/M10K/M20K 블록이 해당한다.
- DSP 블록: 하드웨어 곱셈/덧셈 유닛을 포함한다.
- 트랜시버: PCIe, 이더넷 등 Gbps 단위의 고속 입출력 구현에 사용된다.
- 클럭 관리 회로: 클럭 관리를 위해 제공되는 전용 회로이다.
- 메모리 컨트롤러: 고성능 FPGA의 경우 메모리 컨트롤러가 내장되어 있다.
- 프로세싱 시스템(PS)
FPGA의 기본 단위로, 제조사에 따라 CLB(Configurable Logic Block) 또는 LAB(Logic Array Block)으로 명명된다. 조합 논리 회로를 구현하는 LUT와 순차 회로를 저장하는 레지스터로 구성된다.
논리 블록 간의 신호 전달을 담당하는 프로그래밍 가능한 배선망이다. FPGA의 성능(동작 속도)은 논리 블록의 연산 속도보다, 복잡한 스위치 매트릭스를 통과해야 하는 배선 지연(Routing Delay)에 의해 결정되는 경향이 크다.
논리 블럭을 사용하여 구현 시 면적과 속도 면에서 비효율적인 기능들은 실리콘 레벨에서 고정된 전용 회로로 탑재되기도 한다.
3.2. 동작 특성
일반적인 마이크로프로세서와 달리, FPGA는 HDL(Hardware Description Language) 코드를 통해 하드웨어 회로 자체를 구성한다. 잘 작성된 HDL 코드는 회로도 그 자체이므로, 칩의 제조사나 세대가 달라지더라도 타이밍 제약 조건만 충족한다면 동일한 논리적 동작이 보장된다. 이러한 높은 신뢰성과 장기간 유지되는 헤리티지 덕분에 실수가 용납되지 않는 항공우주 및 방위산업 분야에서 필수적으로 사용된다. 또한, FPGA 칩은 한 번 출시되면 단종되는 경우가 드물어 장기적인 유지보수에 유리하다.FPGA의 성능은 단순 클럭 속도보다는 주로 논리 블록의 수로 결정된다. 이는 구현하는 회로의 특성에 따라 동작 속도가 달라지고, 논리 회로를 병렬적으로 배치함으로써 처리 능력을 크게 늘릴 수 있기 때문이다. 클럭 신호에 맞추어 명령어를 차례대로 수행하는 프로세서와는 근본적으로 동작 방법이 다르다고 할 수 있다.[4] 단, 이것이 회로 자체의 동작 속도가 중요하지 않다는 뜻은 아니므로 오해해서는 안 된다.
때문에 현실의 시간과 동기화해서 운용할 수 없어서, Real-Time 시스템과의 연계가 필수적이다. 단, 이는 회로 동작 속도가 중요하지 않다는 뜻은 아니므로 주의 바람.
이때 일반적으로 FPGA 사양의 "로직 셀" 또는 "LE" 개수는 4-input LUT로 환산된 FPGA의 용량이며, AMD(Xilinx) 6-input LUT의 경우 대략 2.4:1, Altera ALM의 경우 대략 2.6:1 정도 비율로 환산되는 것으로 보인다.
FPGA는 모든 디지털 로직을 구현할 수 있지만 결코 만능은 아니다. FPGA는 특수 목적 소형 로직(DSP, 통신, 라우팅)이나 고도로 병렬화된 로직(가속기)은 매우 고성능으로 구현할 수 있지만, CPU와 같은 단일 대형 로직 구현에는 비효율적이다. 이는 FPGA가 고정된 로직 셀의 연결만을 이용해 회로를 구현하는 특성상 게이트 사이징과 인터커넥트 최적화와 같은 회로 고속화가 불가능하기 때문이다. 따라서 상용 CPU의 동작 속도가 수 GHz 단위일 때 FPGA상에 구현한 CPU의 동작 속도는 아무리 빨라도 수백 MHz 정도가 한계이며 복잡한 고급 코어는 수십 MHz도 어려울 수 있다. 따라서 현대 CPU 수준의 대형 고급 로직은 FPGA에서 연구, 교육 및 테스트 목적으로만 구현되며 실용적이지 않다.
또한 항상 CPU 보다 효율적인 것도 아니다. 제어 구문은 CPU는 순차적으로 처리하여 작은 공간으로도 충분히 복잡한 제어를 구현할 수 있다. 반면 FPGA는 제어구문을 상태 머신으로 풀어서 써야 하기 때문에 복잡한 제어 구문이 들어가면 상태머신이 지나치게 많이 증가하여 내부 공간을 크게 차지하게 된다. 최신 고성능 FPGA가 몇십년 된 CPU도 쌩쌩 돌리는 오래된 게임조차 제대로 못 돌린다. CPU를 모사하여 돌리는 건 당연히 가능하지만 게임 자체를 RTL로 구현하는 건 엄두도 못 낸다. 프로그래밍의 복잡성도 문제지만 진짜 문제는 내부 공간을 너무 차지하여 비효율적이라는 것에 있다.
이러한 한계를 극복하기 위해 FPGA(PL)와 CPU(PS)를 하나의 칩에 통합한 SoC(System on Chip) 제품도 있다. 하드웨어 로직의 높은 전용성능과 소프트웨어의 유연하고 편리한 제어를 모두 누릴 수 있어 다양한 분야에 널리 사용된다. 실제 산업현장에서도 FPGA가 단독으로 쓰이는 경우는 거의 없으며, 주로 피코/나노초 단위의 고속 처리가 필요한 분야에만 FPGA를 적용하고 이 FPGA를 다른 CPU가 제어하므로 통합 효율이 뛰어나다. 자일링스의 ZYNQ, 인텔의 Agilex SoC 등 ARM Cortex-A 시리즈 기반 코어가 주로 탑재되며 제3업체에서는 오픈 소스 RISC-V 코어를 탑재하기도 한다.
혹은 아직은 미래의 이야기지만 FPGA의 논리 블럭 안에 초소형 CPU나 상태머신을 넣으려는 시도도 있다. 현재는 논리블럭 내에 주로 연산 중심 DSP 코어가 들어가 있으며 이로 인해 연산 속도와 효율성이 크게 증가하였다. 만약 CPU나 상태머신이 논리블럭 내에 들어가게 된다면 게임 개발자들이 중간중간에 스크립팅 언어를 쓰는 것처럼 훨씬 유연하게 FPGA를 사용할 수 있다.
프로그래밍이 가능한 주제에 비교 대상은 항상 ASIC이다. ASIC은 프로그래밍이 불가능한 양산형 집적 회로이고, 성능, 전력 소모, 칩 가격 모든 면에서 FPGA보다 뛰어나지만, 개발 비용을 포함한 고정 비용이 어마무시하기 때문에 수요 규모가 크지 않으면[5] ASIC보다는 FPGA를 사용하는 게 일반적이다. ASIC과 비교해서 FPGA는 기본적으로 해당 공간에 모든 용도로 활용 가능한 로직 블록을 우겨 넣은 형태이기 때문에 전력 소모가 많으며 ASIC보단 소형화된 설계를 할 수 없다. 저전력으로 설계된 FPGA칩도 존재하며 이들도 나름의 시장을 형성하고 있다. ASIC는 인쇄 회로 기판, FPGA는 만능기판에 비유할 수도 있다. 실제로도 과거에는 PCB 또한 커스텀 제작이 어려웠다. 하지만 기술의 발달로 커스텀 PCB를 취급하는 제조업체가 상당히 늘어 옛말이 되었다.
상기한 특성들로 인해 FPGA는 인공지능이나 기계 제어 등 다양한 분야에서 활발하게 사용된다.
3.3. 설계 흐름
컴퓨터의 프로그램 코드를 실제 컴퓨터에서 실행 가능하게 컴파일 한 결과물을 바이너리라고 하는 것처럼, HDL 코드를 실제 FPGA에서 작동 가능하게 합성한 결과물을 비트스트림(bitstream)이라고 부른다. 소프트웨어 바이너리는 다른 CPU라도 같은 아키텍쳐 끼리는 호환이 가능한 반면, 하드웨어 비트스트림은 다른 칩이면 전혀 호환성이 없기 때문에 반드시 각각 합성해야 한다.RTL 코드로 비트스트림을 합성하고 FPGA를 프로그램하기 위해서는 각 제조사에서 제공하는 전용 소프트웨어(AMD Vivado, Intel Quartus, Lattice Diamond 등)를 사용하는 것이 일반적이고, openFPGALoader를 이용해 툴 없이 비트스트림만 업로드하는 것도 가능하다. 저가 라인업의 경우 무료 버전 소프트웨어로 개발 가능하나, 고가 라인업의 경우 수백만원 가격의 Pro 에디션을 구매하여야 한다.
일부 비휘발성 FPGA는 전원을 꺼도 프로그램된 상태가 유지되지만, 대부분의 FPGA는 SRAM 기반의 휘발성이기 때문에 전원을 끄면 프로그램이 삭제되어 다시 전원이 들어와도 이전의 기능을 할 수 없다. 그렇기 때문에 FPGA는 전원을 켤 때마다 다시 비트스트림을 프로그램해야 한다. 그렇다고 전원을 켤 때 마다 컴퓨터에 연결해서 비트스트림을 다운받을 수는 없으므로, 일부 기종에는 MCU가 내장되어 전원이 켜질 때 마다 자동으로 SPI Flash나 SD card 등에 저장된 비트스트림을 읽어 프로그램 하는 기능이 있다. MCU가 내장되어 있지 않더라도 외부의 MCU를 이용하거나 PS+PL 구성의 칩에서는 MCU 대신 PS가 직접 비트스트림을 프로그램 할 수도 있다.
4. 활용
- 프로토타입 칩 양산 단계에서 동작 및 기능 테스트
- 로봇제어 / 인공지능 / 채굴기 / 데이터 센터 등을 위한 가속기 또는 그래픽 가속기
- 우주선 / 인공위성 / 대부분의 현대전 무기 / 전자전 무기 / 미사일와 같은 방위 산업 분야[6]
- 통신 시스템 등 높은 처리 능력과 유연성이 동시에 요구되는 분야
- 오디오 / 비디오 신호의 실시간 저지연 신호처리 및 라우팅
- 기타 기존 시스템의 원칩화
- ATE(Automatic Test Equipment) 반도체 자동화 테스트 장비
- 데이터 수집 장치(DAQ,data acquisition)
- 레트로 비디오 게임에 대한 하드웨어 에뮬레이터
빠르고 신뢰성 있는 하드웨어 프로그래밍을 요구로 하는 현장에서 주로 쓰인다. 일반적으로 ASIC(주문형 반도체) 설계용 테스트 용도나 DSP 개발용으로 쓰거나 일부에서 MCU 용도로 사용하기도 한다.[7]
한때는 다른 저전력 MCU들에 밀리다가 최근에 들어서 가속기 용도로 활약하며 AI 분야(마이크로소프트나 인텔이 이 부분에 적극적이다.)나 암호화폐 채굴 등 막대한 연산력을 필요로 하는 분야에서 두각을 드러내고 있다. 암호화폐 채굴 분야에서는 사실 ASIC으로 넘어가기 전 단계에 해당된다. 채굴 로직을 개발해서 FPGA에 탑재해 성능 확인 후 그대로 ASIC행.
가속기 용도에서는 GPGPU와 경쟁 상대. FPGA를 사용하면 하드웨어 레벨에서 애플리케이션의 병렬 처리를 최적화 할 수 있기 때문에 GPGPU보다 성능이나 전력 소모 등에서 훨씬 유리하다. 암호 화폐 채굴기 사례에서 알 수 있듯이 잘 설계된 하드웨어 가속기는 GPGPU를 전성비에서 밟아버릴 수 있다. 그러나 하드웨어를 설계해 줘야 하는 FPGA의 특성상 설계 난이도가 매우 높다는 큰 단점이 있다.(그 어렵다는 GPGPU보다 훨씬 더!) 예를 들어 박사 학위를 가진 엔지니어 한 명이 2달 동안 어떤 동영상 처리 알고리즘을 GPGPU로 구현했는데, 동일한 알고리즘과 기능을 FPGA로 구현할 때 박사 학위를 가진 엔지니어 두 명이 1년 동안 작업해야 했다는 보고가 있다. 단순 계산하면 동일한 기능의 구현에 GPGPU 보다 12배의 노동력이 필요했던 것이다. C 등의 프로그래밍 언어로 알고리즘을 짜면 HDL로 변환해주는 HLS(High Level Synthesis)도 많이 보급되었지만, 그게 하드웨어를 몰라도 쉽게 사용할 수 있는 만능 도구라 생각하면 곤란하고, FPGA 설계는 하드웨어 설계에 대한 지식이 없는 일반적인 사람에게는 불가능에 가까운 진입 장벽을 가지고 있다. 즉, FPGA를 설계할 줄 안다는 것은, 단순한 코딩 지식 뿐 아니라 회로 설계 지식까지 전체적으로 알고 있다는 이야기가 된다.
마이크로소프트에서는 데이터 센터 서버에 알테라(Altera)의 FPGA를 도입해서 Bing 검색엔진의 성능 및 전력 소모를 개선했다고 한다.
일반인들이 체감할 수 있는 사용 사례를 꼽아보면 G-SYNC나 카메라 등이 있는데 엔비디아는 자사의 G-SYNC 컨트롤 보드에 인텔의 ARRIA FPGA를 사용하였다. 이외에도 엔비디아는 인텔제 FPGA를 많이 사용한다. Quadro Sync II에도 인텔제 FPGA가 들어가 있음을 확인할 수 있다. 영상 캠코더 분야에서 초 고해상도 영상의 무지막지한 처리량을 감당하기 위해 아예 대형 FPGA를 통째로 넣고 처리해버리는 제품들이 많다. 또한 캡쳐 보드 분야에서도 FPGA가 쓰이는 등 영상 분야에 광범위하게 쓰인다.
고급형 오디오 인터페이스의 신호처리 및 라우팅 용도로 FPGA를 탑재하는 경우가 많다. ASIC을 제작할 정도로 큰 수요는 없지만 극도로 낮은 입출력 레이턴시와 DSP가 필요하기 때문에 FPGA가 적격이다.
이외에도 현재는 판매되지 않는 구형 칩셋의 구현을 위해서 사용하기도 하는데 MiSTer FPGA, Analogue Pocket과 같은 레트로 게임기의 물리적 구현이 대표적인 예시이다.
5. 제조업체
FPGA 제조 업체 자체는 많지만 시장 점유율을 보면 1위 AMD[8], 2위 알테라[9] 이 두 회사가 거의 90%에 가까히 차지하고 있다. 시장점유율 사실상 FPGA 분야는 AMD와 알테라(인텔)의 양강 경쟁구도라고 볼 수 있다.이 두 회사는 몇 안 되는 빅칩 FPGA 제조사이다보니 규모가 어느 정도 있는 장비에 들어가는 FPGA는 십중팔구 이 두 회사의 제품이 들어간다.[10] 대표적인 제품군으로 AMD의 경우 버텍스, 킨텍스, 알테라의 경우 스트라틱스, 애질렉스가 있다.
이보다 작은 소규모 회사들로는 마이크로세미[11], Lattice Semiconductor 등이 있으며, 그외의 회사들은 구색 갖추기 수준의 라인업만 있는 경우가 많다.
6. 개발 보드
FPGA 칩 단독으로는 사용이 불가능하므로, 전원부, 클럭, 입출력 포트 등이 구성된 개발 보드(Development Board) 형태로 구매하여 사용한다. 가격대는 입문용인 수만 원대부터 전문 개발용인 수천만 원대까지 다양하다. 교육용으로 제공되는 FPGA 보드의 경우 스위치/버튼 및 LED, 7세그먼트 디스플레이 등이 포함되어 있는 경우가 많다.아래는 주요 교육용/입문용 보드 제조사 및 주요 제품 목록이다. 일반적으로 AMD/Xilinx FPGA 보드가 많이 사용된다. 최신 보드 위주로 기술한다. (구형 보드는 같은 라인업의 신형 보드에 비해 가격 대비 사양이 안 좋은 경우가 많다.)
- Digilent: AMD(구 Xilinx) FPGA 보드를 제조하는 회사이다. 많은 대학에서 교육용으로 Digilent 보드를 사용한다. 현재 KC 인증 문제로 할인된 가격으로 제공되는 아카데믹 버전의 한국 배송이 일시적으로 차단된 것으로 보이므로 구매 시 주의 바람.
- Basys 3: Artix-7 35T를 탑재한 입문용 표준 보드로, 학부 논리설계 과목에서 주로 사용하는 보드이다. PC 연결을 위한 Micro 5핀 USB 케이블은 기본 구성품에 포함되어 있지 않다. 33,280개의 로직 셀 및 1,800Kbit 크기 블록 RAM 및 90개의 DSP 블록을 사용할 수 있으며, 보드에는 1개의 USB, 1개의 VGA, 4개의 PMOD 포트 및 16개의 스위치 및 5개의 푸시 버튼 입력, 16개의 LED 및 4자리 7세그먼트 출력 등이 제공된다.
- Nexys A7: (구 Nexys 4 DDR) 더 큰 용량의 Artix-7 (50T 및) 100T 및 DDR 메모리, 이더넷 포트 등을 갖추어 복잡한 프로젝트 수행이 가능한 중급 보드이며, 디지털 하드웨어 설계 과목에서 주로 사용하는 보드이다. Artix-7 FPGA 사양에 따라 50T/100T 모델이 있어 현재 50T 모델은 단종되었으나 판매처에 따라 50T 모델 재고를 취급하기도 하므로 구매 시 해당 부분에 대해 유의 바람.
- Arty A7: 임베디드 활용에 특화된 가성비 보드로, Nexys A7과 더불어 디지털 하드웨어 설계 과목에서 주로 사용하는 보드이다. Nexys A7 보드 대비 스위치 및 7 segment 등의 내장 입출력 부품은 적으나, Nexys A7 대비 약간 저렴하며 DDR 메모리 용량 및 속도가 더 나은 편이다. Artix-7 FPGA 사양에 따라 35T/100T 모델이 있어 현재 35T 모델은 단종되었으나 판매처에 따라 35T 모델 재고를 취급하기도 하므로 구매 시 해당 부분에 대해 유의 바람.
- Zybo Z7: ARM 코어가 내장된 Zynq SoC 학습용 보드. 임베디드 리눅스와 FPGA 로직을 연동하는 설계(HW/SW Co-design)를 실습할 수 있다. Zynq FPGA의 용량에 따라 Z7-10(Z-7010), Z7-20(Z-7020) 총 2가지 옵션이 제공된다.
- Real Digital: 교육용 AMD(구 Xilinx) FPGA 보드를 제조하는 회사로, Digilent 출신 인력들이 설립하였다. Digilent 대비 인지도가 낮고 및 보드 관련 자료가 적으나 동급 사양의 보드를 비교적 저렴하게 판매하는 편이다. 한국 리셀러는 없기 때문에 해당 제조사의 보드를 구매하려면 비싼 FedEx 배송 비용을 지불하고 직구하여야 한다.
- Boolean: Digilent의 베스트셀러인 Basys 3와 동일한 스위치/LED 배치를 채택하여, 기존 교육 과정을 그대로 적용할 수 있도록 설계된 FPGA 보드이다. (단, 스위치는 1개 더 적다.) Artix-7 35T 대신 로직 용량이 더 큰 Spartan-7 XC7S50 FPGA를 탑재하였다. 또한 약간의 추가금으로 BLE 무선 통신이 내장된 옵션을 구매할 수 있다. Basys 3과 마찬가지로 PC 연결을 위한 USB 케이블은 포함되어 있지 않으므로 별도로 준비하여야 한다.
- Urbana: Boolean과 동일한 Spartan-7 (XC7S50) 칩셋을 사용하지만, 128MB DDR3 메모리가 추가된 보드이다. 메모리가 필요한 프로세서 설계나 대용량 데이터 버퍼링 실습이 가능하다.
- Blackboard: ARM 코어 기반 실습을 위한 보드이다. Zynq-7000 (XC7Z007S) 싱글 코어 SoC를 탑재했다. WiFi 및 Bluetooth 모듈, 오디오 코덱, 가속도계, 자이로스코프, 서보 모터 포트 등이 내장되어 있어 별도의 부품 연결 없이도 IoT 장치나 로봇 제어 등 임베디드 시스템 전반을 학습할 수 있도록 설계되었다.
- AUP-ZU3: AI 및 영상처리 연구를 위한 고성능 보드로, 대학 등 교육기관 인증을 거쳐야 구매가 가능하다. AMD Zynq UltraScale+ (ZU3EG) MPSoC를 탑재하여 쿼드코어 ARM 프로세서와 고성능 FPGA 로직을 활용할 수 있다. 2GB/4GB의 대용량 LPDDR4 메모리를 제공하며, 기존 PMOD보다 월등히 빠른 속도를 지원하는 SYZYGY 확장 커넥터를 채택한 것이 특징이다.
- Terasic: Altera(Intel) FPGA 보드를 제조하는 회사이다.
- DE10-Lite: MAX 10 FPGA를 탑재한 입문용 보드. 대학 교육용으로 널리 쓰이며 Basys 3의 경쟁 포지션이다.
- DE23-Lite: DE10-Lite 보드의 후속작으로 최신 Agilex 3 FPGA를 탑재해 사양이 업그레이드되었으나, 아두이노 우노용 커넥터는 없어졌다.
- DE10-Nano: Cyclone V SoC를 탑재한 보드. 학교 교육용으로도 쓰이지만, 레트로 게임 에뮬레이터 프로젝트인 MiSTer FPGA에 사용되어 게이머 수요도 존재한다.
- DE25-Nano: DE10-Nano 보드의 후속작으로 최신 Agilex 5 SoC를 탑재해 사양이 업그레이드되었으나, 아두이노 우노용 커넥터는 없어졌다. 프로그래밍용 USB Blaster 포트가 Type-C로 변경되었다.
- DE25-Standard: DE10-Standard 보드의 후속작으로 최신 Agilex 5 SoC를 탑재해 사양이 업그레이드되었다. 프로그래밍용 USB Blaster 포트가 Type-C로 변경되었으며, VGA 대신 HDMI 출력이 제공된다.
7. 여담
Escape from Tarkov에 등장하는 고가의 아이템인 버텍스(Virtex)는 실제로 AMD에서 판매하는 FPGA이다.8. 관련 문서
[1] 컴파일이란 용어 대신 합성(synthesis)이라고 부른다. HDL로 작성한 회로를 FPGA 내부에 업로드 할 경우, 단순히 코드가 저장되는 게 아니라 논리 회로가 물리적으로 재구성되기 때문이다.[2] 곱셈 연산이 많은 경우, 곱셈 처리 로직을 여러 개 추가하여, 그 연산 속도를 높일 수 있음[3] 이러한 PAL 칩 등은 물론 당대 컴퓨터에도 자주 사용되었다. 가령 당시 대우나 금성에서 만든 국산 MSX 컴퓨터들의 메인보드에도 PAL 칩이 하나 이상 들어가있었다.[4] 비유하자면 프로세서는 프로그래밍 언어 마냥 순차적으로 돌아가는거고, FPGA는 논리 소자 칩들로 하드웨어 코딩을 하는 거라고 생각하면 된다. 전자공학과 사람이라면 논리 소자에 대해 배우면서 소프트웨어를 하나도 사용하지 않고 순수 칩들만을 납땜해가며 시계나 계산기 등을 만들어본 적이 있을 텐데 FPGA는 이런 논리 칩/하드웨어 코딩을 납땜 대신, 소프트웨어를 도구로서 물리적인 논리 칩을 구성/재구성한다고 생각하면 된다. 당연히 이런 특성 덕분에 칩이 망가지지 않는다면 윈도우 마냥 에러가 뜰 일이 어지간해서는 없다.[5] 수요 규모가 큰 비트 코인 채굴에는 세계적으로 ASIC가 쓰인다.[6] 이렇기 때문에 가끔씩 FPGA 관련 제품 구매 시 "군사적 용도로 사용할 것이냐"에 대해서 질의 응답을 하는 벤더들 또한 있다. 몇몇 소자들은 수출 통제를 까다롭게 받아야 해서 판매가 금지된 단체나 적성국에 수출 시 법적 제재를 받게 된다. 사실 FPGA 뿐만 아니라 많은 전자부품과 EDA들이 이중용도로 분류되어 있어 확인 절차를 형식적이라도 거친다.[7] 다만 FPGA를 마이크로컨트롤러 대신에 사용하는건 보통 돈낭비라 마이크로컨트롤러로 처리 불가능한 작업을 처리하거나(나노/피코초 단위의 반응속도가 필요한 제어장비) 미친듯한 신뢰성을 이유로 절대로 고장나면 안 되는 일부 기기에 마이크로 컨트롤러 대신 쓰는 정도가 대부분이다.[8] 원래 1위는 자일링스였지만 AMD에 인수됨에 따라 브랜드가 폐지되었다.[9] 과거 인텔이 인수한 뒤 알테라 브랜드를 폐지하고 인텔 브랜드에 편입했다가 현재 다시 분사하였다.[10] 일례로 KF-21 보라매에는 자일링스의 버텍스 FPGA가 탑재된다.[11] Microchip Technology의 FPGA 부문.