FPGA(Field Programmable Gate Array)
FPGA 설계 가능 논리 소자와 프로그래밍이 가능한 내부 회로가 포함된 반도체 소자이다.
설계 가능 논리 소자는 AND, OR, XOR, NOT, 더 복잡한 디코더나 계산기능의 조합 기능같은 기본적인 논리 게이트의 기능을 복제하여 프로그래밍할 수 있다. 대부분의 FPGA는 프로그래밍 가능 논리 요소에 간단한 플립플롭이나 더 완벽한 메모리 블록으로 된 메모리 요소를 포함하고 있다.
From wiki
FPGA는 디지털 회로를 마치 프로그램하듯이 설계할 수 있게 만들어진 반도체 칩이다. FPGA는 비어 있는 회로판과 같이, 그 자체로 아무것도 할 수 없다. 디자이너는 FPGA에 대해 비트 파일이라고 하는 구성 파일을 작성해야 한다. 일단 로드되면 FPGA는 설계한 디지털 회로처럼 동작합니다.
FPGA는 정말 대단한 이유 중 하나는 ASIC과 달리 회로 설계가 설정되어 있지 않고 디자이너가 원하는대로 FPGA를 몇 번을 다시 구성할 수 있다는 것이다. ASIC을 만들면 잠재적으로 수백만 달러의 비용이 발생하고 몇 주 또는 몇 달이 걸릴 수 있다.
우리가 원하는 설계를 하려면 HDL(Hardware Description Langauge)를 사용해야 한다. 가장 대표적인 HDL은 Verilog 와 VHDL이다. HDL로 소스를 작성한 후 비트 파일로 변환시켜 FPGA를 구성하게 된다.
마이크로 프로세서(MPU) 및 마이크로 컨트롤러(MCU), 그래픽 처리 장치(GPU), FPGA, 맞춤형 시스템 온 칩(SoC) 장치를 비롯하여 각각 다른 방법으로 제공되는 광범위한 컴퓨팅 응용 제품이 있습니다. 따라서 사용 제품을 결정할 때 응용 제품의 요구 사항과 고려 사항을 자세히 살펴보아야 합니다.
예를 들어, 5G 기술 지원과 같은 첨단 기술로 작업할 경우 설계자는 기본 표준과 프로토콜이 계속해서 발전하고 있는지를 고려해야 합니다. 즉, 설계자는 통제할 수 없는 사양 변화에 빠르고 효과적으로 대응할 수 있어야 합니다.
마찬가지로 시스템을 현장에 배포한 이후에 발생할 미래의 표준 및 프로토콜 변화에 유연하게 대응해야 합니다. 또한 시스템 기능의 예기치 못한 버그 또는 시스템 보안 허점에 대응하거나, 기존 기능을 수정하거나, 시스템 수명을 연장하기 위해 새로운 기능을 추가할 수 있어야 합니다.
일반적으로 SoC를 통해 가장 우수한 성능이 제공되지만 이 방법은 비용과 시간이 많이 소요됩니다. 뿐만 아니라 칩 패브릭에서 구현되는 알고리즘은 기본적으로 “실리콘으로 고정”됩니다. 위에 요약된 내용을 고려할 때 이러한 고유의 불가변성은 문제가 됩니다. 최적 성능과 유연성이라는 두 가지 사항을 모두 만족시키려면 다른 방법이 필요하며, 그 다른 방법은 종종 FPGA, 마이크로 프로세서/마이크로 컨트롤러와 FPGA의 조합 또는 하드 프로세서 코어를 패브릭의 일부로 자랑하는 FPGA에 의해 제공됩니다.
칩셋 내부에 로직 게이트를 자유자재로 구현할 수 있도록 진리표를 이용해 로직을 만들어내는 RAM과 플립플롭이 있고 내부 결선을 직접 변경할 수 있기 때문에 사용자의 용도에 맞게 설계가 가능하다. 단순 MCU 대체 용도에서부터 시작해서 DSP나 아예 자기가 원하는 방식대로 새로운 논리 소자나 CPU를 만드는 것도 가능하다.
FPGA의 핵심은 프로그래밍 가능한 논리 블록의 어레이로 표기된는 프로그래밍 가능 패브릭이라는 것이다. 이러한 각 노리 블록에는 대조표(LUT), 멀티 플렉서, 레지스터를 비롯한 소자 모음이 포함되어 있으며, 모두 필요에 따라 구성될 수 있다.
가장 간단한 FPGA에는 프로그래밍 가능 패브릭과 GPIOS만 포함되어 있고(a), 다른 아키텍처는 SRAM 블록, PLL 및 클록 관리자(b), DSP 블록 및 SERDES 인터페이스(c), 하드 프로세서 코어 및 주변 장치(d)로 기본 패브릭을 강화한다.
대부분의 FPGA는 4입력 논리 함수를 구현하도록 구성 가능한 4입력 LUT를 사용한다. 일부 응용 분야에 채택된 폭넓은 데이터 경로를 효율적으로 지원하기 위해 일부 FPGA는 6, 7 또는 8입력 LUT를 제공한다. LUT의 출력은 논리 블록 출력 중 하나와 멀티플렉서 입력 중 하나에 직접 연결된다. 멀티플렉서에 대한 다른 입력은 논리 블록 입력(e)에 직접 연결된다. 이러한 입력 중 하나를 선택하도록 멀티플렉서를 구성할 수 있다.
멀티플렉서 출력은 레지스터 입력을 공급한다. 각 레지스터를 에지, 트리거, 플립플롭 또는 레벨 감지 래치로 작동하도록 구성할 수 있다. 그래도 FPGA 내부에서 비동기 논리를 사용하는 것은 권장하지 않는다. 각 레지스터의 클록을 High 활성 또는 Low 활성으로 구성 할 수 있다. 마찬가지로 설정/초기화 입력의 활성 레벨을 구성할 수 있다.
FPGA는 다른 인터페이스 표준 또는 통신 프로토콜을 사용하는 다른 장치 간에 지능형 인터페이스를 제공한다. 레거시 인터페이스를 사용하여 카메라 센서 및 디스플레이 장치에 연결하는 응용 프로세서가 포함된 기존의 시스템을 고려해 보자(a).
시스템 작성자가 더 가볍고, 경제적이면서 적은 전력을 소비하는 최신 카메라 센서 및 디스플레이 장치로 업그레이드하려 한다. 한 가지 문제는 이 새로운 장치 중 하나 또는 모두가 원래 응용 프로세서(AP)에서 지원되지 않는 최신 인터페이스 표준을 사용할 수 있다는 것이다. 또한 MIPI(Mobile Industry Processor Interface)와 같은 완전히 다른 통신 프로토콜을 지원할 수도 있다. 이 경우 여러 I/O 표준을 지원할 수 있는 FPGA를 일부 소프트 MIPI IP 코어와 함께 사용하면 빠르고 경제적이며 위험 없는 업그레이드 경로를 제공한다(b).
또 다른 응용 분야의 예로는 레이더 시스템을 구현하는 데 필요한 신호 처리 수행, 통신 기지국의 빔 형성과 같은 일부 컴퓨팅 집약적인 작업 등이 있다. 기존 프로세서는 특정 작업에 적합하지만 동일한 연산 시퀀스를 반복적으로 수행해야 하는 작업에는 적합하지 않다. 단일 스레드를 실행하는 단일 프로세서에서 명령어를 한 번에 하나만 실행할 수 있기 때문이다(a).
그에 비해 FPGA에서는 여러 기능이 동시에 실행되어 일련의 작업을 파이프라인으로 연결하므로 처리량이 크게 향상된다. 마찬가지로 프로세서에서 1,000쌍의 데이터 값에 대해 동일한 작업을 1,000회 수행하는 대신 프로그래밍 가능 패브릭에 1,000개의 누산기를 인스턴스화하여 FPGA의 단일 클록 주기에 동일한 계산을 대규모 병렬 방식으로 수행할 수 있다(b).