FPGA 기초: 아키텍처, 응용 및 사용
필드 프로그래머블 게이트 어레이(FPGA)는 특정 응용 프로그램에 맞게 작동을 사용자 지정할 수 있도록 내부 하드웨어 블록과 사용자 프로그래머블 연결을 포함하는 집적 회로입니다.
FPGA란 무엇인가?
Field Programmable Gate Array (FPGA) 는 특정 애플리케이션에 맞춰 작동을 사용자 정의할 수 있도록 사용자 프로그래밍 가능한 상호 연결을 가진 내부 하드웨어 블록으로 구성된 집적 회로입니다. 이러한 상호 연결은 쉽게 재프로그래밍할 수 있어 FPGA가 설계 변경을 수용하거나 심지어 부품의 수명 동안 새로운 애플리케이션을 지원할 수 있습니다.
FPGA는 프로그래머블 읽기 전용 메모리(PROM)와 프로그래머블 로직 디바이스(PLD)와 같은 이전 장치에서 기원을 찾을 수 있습니다. 이러한 장치들은 공장에서 또는 현장에서 프로그래밍될 수 있었지만, 퓨즈 기술을 사용(따라서 “PROM 태우기”라는 표현이 생김)하여 한번 프로그래밍되면 변경할 수 없었습니다. 반면에 FPGA는 정적 RAM(SRAM) 또는 플래시 메모리와 같은 재프로그램 가능한 매체에 구성 정보를 저장합니다. FPGA 제조업체는 Intel, Lattice Semiconductor, Microchip Technology 및 Microsemi를 포함합니다.
FPGA 아키텍처
기본 FPGA 아키텍처(그림 1)는 구성 가능한 논리 블록(CLB)이라고 하는 수천 개의 기본 요소와 CLB 간 신호를 라우팅하는 패브릭이라고 불리는 프로그래머블 인터커넥트 시스템으로 구성됩니다. 입출력(I/O) 블록은 FPGA와 외부 장치 간의 인터페이스 역할을 합니다.
제조업체에 따라 CLB는 로직 블록(LB), 로직 요소(LE) 또는 로직 셀(LC)로도 불릴 수 있습니다.
기본적인 FPGA 아키텍처 (이미지 출처: National Instruments)
그림 1
개별 CLB (그림 2)는 여러 로직 블록으로 구성됩니다. 루프업 테이블(LUT)은 FPGA의 특성 있는 기능입니다. LUT는 입력 조합에 대한 논리 출력의 미리 정의된 목록을 저장하며, 입력 비트가 4부터 6까지인 LUT가 널리 사용됩니다. 멀티플렉서(mux), 전가산기(FAs), 플립플롭과 같은 표준 논리 기능도 일반적으로 사용됩니다.
단순화된 CLB: 네 입력 LUT는 두 개의 세 입력 유닛으로 구성됩니다. (이미지 출처: Wikipedia)
그림 2
CLB의 구성 요소 수와 배열은 디바이스에 따라 달라지며, 그림 2에 단순화된 예는 두 개의 세 입력 LUT(1), FA(3), D형 플립플롭(5), 표준 멀티플렉서(2)와 FPGA 프로그래밍 중에 구성되는 두 멀티플렉서(4 및 6)를 포함합니다.
이 간소화된 CLB에는 두 가지 동작 모드가 있습니다. 일반 모드에서는 LUT들이 Mux 2와 결합되어 4-입력 LUT을 형성합니다. 산술 모드에서는 LUT 출력이 다른 CLB에서의 캐리 입력과 함께 FA로 입력됩니다. Mux 4는 FA 출력과 LUT 출력 중 하나를 선택합니다. Mux 6은 작업이 비동기적으로 수행될지 아니면 D 플립플롭을 통해 FPGA 클럭에 동기화될지를 결정합니다.
현재 세대의 FPGA는 단일 블록으로 여러 작업을 수행할 수 있는 더 복잡한 CLB를 포함하고 있습니다. CLB는 곱셈기, 레지스터, 카운터 및 디지털 신호 처리(DSP) 기능과 같은 더 복잡한 작업을 수행하기 위해 결합할 수 있습니다.
CPLD vs FPGA
원래 FPGA에는 <그림 1>의 블록과 몇 가지 구성 요소만 포함되었으나, 현재 설계자는 다양한 기능을 갖춘 제품들 중에서 선택할 수 있습니다. 간단한 프로그래머블 로직 디바이스(SPLD)와 복합 프로그래머블 로직 디바이스(CPLD)와 같은 덜 복잡한 디바이스는 개별 논리 디바이스와 입문자용 FPGA 간의 간격을 메워줍니다.
엔트리 레벨 FPGA는 낮은 전력 소모, 낮은 논리 밀도 및 칩당 낮은 복잡성을 강조합니다. 더 높은 기능을 가진 장치는 특정 기능에 전념한 기능 블록을 추가적으로 제공합니다: 예로 클록 관리 구성 요소, 위상 고정 루프(PLLs), 고속 직렬화기 및 역직렬화기, 이더넷 MAC, PCI 익스프레스 컨트롤러 및 고속 트랜시버 등이 있습니다. 이러한 블록은 CLB를 사용하여 구현될 수도 있으며—소프트 IP로 불림—별도의 회로로 설계될 수도 있습니다; 즉, 하드 IP입니다. 하드 IP 블록은 재구성 가능성을 희생하더라도 성능을 향상시킵니다.
고급 제품군에서 FPGA 제품 계열은 FPGA 아키텍처, 하드 IP 및 마이크로프로세서 CPU 코어를 단일 구성 요소로 통합한 복잡한 시스템 온 칩(SoC) 부품을 포함합니다. 개별 장치와 비교할 때 SoC FPGA는 더 높은 통합성, 더 낮은 전력 소비, 더 작은 보드 크기 및 코어와 기타 블록 간의 더 높은 대역폭 통신을 제공합니다.
SoC FPGA
SoC FPGA는 다양한 애플리케이션에 적합한 폭넓은 처리 기능을 포함하고 있습니다. 예를 들어, Intel의 Cyclone V와 같은 저비용, 저전력 SoC FPGA는 산업용 모터 제어 드라이브, 프로토콜 브리징, 비디오 처리 카드 및 핸드헬드 기기와 같은 대량 생산 애플리케이션을 대상으로 합니다. 이 장치 (그림 3)는 FPGA 부분과 925 MHz로 실행되는 단일 또는 듀얼 코어 32비트 Arm Cortex-A9 MPCORE를 기반으로 하는 하드 프로세서 시스템(HPS)이라는 두 개의 분리된 부분으로 구성되어 있습니다. 각 부분은 타사 공급업체의 하드 IP를 포함하여 고유한 주변 장치 세트를 포함하고 있습니다.
Cyclone V SoC 내부 블록 다이어그램 (이미지 출처: Cornell University)
그림 3
반대편에서는 Stratix 10 SX가 통신, 데이터 센터 가속화, 고성능 컴퓨팅(HPC), 레이더 처리 및 ASIC 프로토타이핑 등의 고성능 애플리케이션을 목표로 합니다. 해당 FPGA는 최대 1.5 GHz로 실행되는 쿼드 코어 64비트 Arm Cortex-A53을 포함합니다.
FPGA 설계
이 수천 개의 하드웨어 블록 모음을 애플리케이션을 실행하기 위한 올바른 구성으로 어떻게 변환할 수 있을까요? FPGA 기반 설계는 개발 도구에서 필요한 계산 작업을 정의하는 것으로 시작하여 CLB 및 기타 모듈을 연결하는 방법에 대한 정보를 포함하는 구성 파일로 이를 컴파일합니다. 이 과정은 미리 정의된 하드웨어 플랫폼에서 실행되는 명령어 집합을 만드는 대신 하드웨어 자체를 설계하는 것을 목표로 한다는 점을 제외하면 소프트웨어 개발 주기와 유사합니다.
디자이너들은 전통적으로 VHDL(Figure 4) 또는 Verilog과 같은 하드웨어 기술 언어(HDL)를 사용하여 FPGA 구성 설계를 수행해 왔습니다.
부호 있는 덧셈기를 위한 샘플 VHDL 코드 (이미지 출처: Wikipedia)
그림 4
FPGA 설계가 HDL을 사용하여 생성되고 검증된 후, 컴파일러는 텍스트 기반 파일을 가져와 구성 파일을 생성하며, 이 파일은 구성 요소가 어떻게 연결되어야 하는지에 대한 정보를 포함합니다. HDL 코드에 오류가 없더라도 잘못된 FPGA를 선택하면 컴파일이 실패할 수 있습니다. 예를 들어, 특정 리소스 유형이 FPGA에서 부족하거나 컴파일러가 구성 요소 간에 필요한 경로를 생성할 수 없는 경우가 해당됩니다.
HDL 접근 방식의 한 가지 과제는 FPGA를 구성하려면 코딩 기술뿐만 아니라 기본 하드웨어에 대한 세부적인 지식이 필요하며, 이러한 전문 지식이 널리 보급되어 있지 않다는 점입니다.
그 결과, 벤더들은 디자이너가 C/C++, Python 및 OpenCL과 같은 인기 있는 고급 언어로 FPGA 솔루션을 개발할 수 있도록 지원하는 소프트웨어 개발 키트(SDK)를 제공하고 있습니다. 고급 합성(HLS) 설계 도구 또한 사용 가능하며, 이는 National Instrument의 LabVIEW와 같은 프레임워크에서 실행되며, 코드의 줄 대신 그래픽 블록 다이어그램을 특징으로 합니다.
FPGA 사용: 특정 애플리케이션에 매력적인 선택
FPGA의 하드웨어를 구성하고 필요에 따라 재구성하며 특정 기능 세트에 맞게 최적화할 수 있는 기능은 많은 애플리케이션에서 FPGA를 매력적인 옵션으로 만듭니다.
FPGA는 ASIC을 개발하는 것이 지나치게 비싸거나 시간이 많이 소요되는 상황에서 맞춤형 솔루션을 제공하는 데 자주 사용됩니다. FPGA 애플리케이션은 몇 달이 아닌 몇 시간 또는 며칠 만에 구성할 수 있습니다. 물론, FPGA의 유연성에는 대가가 따릅니다. FPGA는 동등한 ASIC보다 속도가 느리고, 더 많은 PCB 면적을 필요로 하며, 더 많은 전력을 소비할 가능성이 높습니다.
ASIC이 대량 생산을 위해 설계될 때에도, FPGA는 시스템 검증, 즉 실리콘 전 검증, 실리콘 이후 검증 및 펌웨어 개발을 포함하여 널리 사용됩니다. 이를 통해 제조업체는 공장에서 칩이 생산되기 전에 설계를 검증할 수 있습니다.
FPGA 응용 사례
많은 애플리케이션은 동일한 작업을 병렬로 실행하는 것에 의존합니다. FPGA의 CLBs를 수백 개 또는 수천 개의 동일한 처리 블록으로 구성할 수 있는 능력은 이미지 처리, 인공 지능 (AI), 데이터 센터 하드웨어 가속기, 엔터프라이즈 네트워킹 및 자동차 고급 운전자 지원 시스템 (ADAS)에서 활용됩니다.
이들 애플리케이션 영역 중 다수는 요구 사항이 발전하고 새로운 프로토콜과 표준이 채택됨에 따라 매우 빠르게 변화하고 있습니다. FPGA는 제조업체가 필요할 때 업데이트할 수 있는 시스템을 구현할 수 있도록 합니다.
FPGA 사용의 좋은 예는 고속 검색입니다. Microsoft는 자사의 데이터 센터에서 Bing 검색 알고리즘을 실행하기 위해 FPGA를 사용하고 있습니다. FPGA는 새로운 알고리즘이 생성될 때 이를 지원하도록 변경될 수 있습니다. 요구가 변경되면 설계를 변경하여 HPC 애플리케이션에서 시뮬레이션이나 모델링 루틴을 실행할 수 있습니다. 이러한 유연성은 ASIC으로는 달성하기 어렵거나 불가능합니다.
기타 FPGA 사용 분야에는 항공우주 및 방위 산업, 의료 전자기기, 디지털 텔레비전, 소비자 전자기기, 산업용 모터 제어, 과학 기기, 사이버 보안 시스템 및 무선 통신이 포함됩니다.
FPGA 역사: 다음은 무엇일까요?
이와 같은 신흥 응용 분야 덕분에 FPGA 시장은 견실한 성장세를 보이고 있습니다. 2016년에는 53억 4천만 달러로 평가되었으며, 산업 연구기관 MarketsandMarkets에 따르면 2023년까지 95억 달러에 이를 것으로 예상됩니다. 이는 연평균 성장률(CAGR) 8.5%에 해당하며, 740억 달러 규모의 더 큰 일반 마이크로프로세서 시장의 약 2%의 CAGR과 비교됩니다.
데이터의 기하급수적인 증가와 AI, 머신러닝, HPC, 게놈학과 같은 급변하는 분야의 등장은 빠르고 유연하며 적응 가능한 아키텍처를 요구합니다. FPGA는 이러한 새로운 기회를 활용하기에 적합한 위치에 있습니다.
기사 태그