Professional Documents
Culture Documents
FPGA란 무엇인가
FPGA란 무엇인가
그림 1 FPGA 의 구조
FPGA 의 내부 구조
- LUT(Look Up Table)
FPGA 는 Gate Array 와 달리 NAND/NOR Gate 는 사용하지 않고, 대신 4~6 input
LUT 를 사용하여 combinational logic 을 구성합니다. LUT 이란 그냥 memory 라고
생각하면 됩니다. Address 에 input 을 가하면 memory 내부의 내용이 output 으로
나오면서 그것이 logic 이 됩니다. memory 내부의 내용을 바꾸어 다양한
combinational logic 을 구현할 수 있습니다. 당연히 sequential logic 을 설계할 수
있어야 하므로 LUT 의 끝에는 flipflop 이 달려 있어서 이용할 수 있습니다. 기본적으로
LUT 를 여러 개 넣은 것을 한 단위로 하여 Vendor 별로 Slice 니 ALM 이니 하는 것으로
부르고 그것의 배열이 FPGA 를 이루고 있습니다.
- Programmable Interconnect
LUT 들 사이의 연결을 해야 완전한 logic 이 됩니다. 이 연결도 당연히
programmable 합니다. 일반적으로 FPGA 설계가 chip 으로 구현하는 것보다 느린
이유는 이 Interconnect 부분에서 많은 delay 가 있기 때문입니다. 될 수 있으면
routing 을 잘 하여 interconnect 의 delay 를 줄여야 빨리 동작하는 설계가 됩니다.
- Programmable I/O
FPGA 와 다른 chip 들이 interface 해야 하므로, FPGA I/O pin 도 여러 종류의
interface 표준을 지원합니다. 예를 들어 LVTTL/LVCMOS 과 같은 간단한 interface 뿐
아니라, DDR/DDR2 SDRAM 에서 사용하는 SSTL 과 같은 것도 지원하고, LVDS 와
같은 differential interface 도 가능합니다. FPGA 에 있는 pin 들이 지원하는
interface 에 따라 나누어져 있는 형태가 아니고, 모든 pin 을 interface 에 따라 달리
사용할 수 있도록 되어 있습니다. 물론 VCC/GND 는 제외하고, IO 의 전압에 따라서
약간의 제한이 존재하기는 합니다.
- Memory
LUT/flipflop 만으로도 모든 digital logic(combinational/sequential)을 구현할 수
있지만, FPGA 에는 SRAM 형태의 block memory 도 들어 있습니다. LUT 끝에 있는
flipflop 으로도 data 를 저장할 수 있지만, 그렇게 사용하게 되면 LUT 가 낭비되고,
routing 이 복잡해 지므로 효율적이지 않기 때문입니다. SRAM 은 보통 buffering 을
위해서 FIFO 형태로 사용하게 되는 경우가 많습니다.
- Adder/Multiplier
연산을 위한 Adder/Multiplier 등도 별도로 들어 있습니다. 역시 LUT 로도 구현이
가능하지만 전용 block 을 가지고 있는 편이 timing/die area/power 등의 면에서
유리하기 때문입니다. Adder/Multiplier 를 이용할 경우, 기존에 DSP(Digital Signal
Processor)가 많이 이용되는 영역 - 당연히 Digital Signal Processing 분야 - 에서도
FPGA 를 이용한 구현이 더 유리하다는 많은 글들이 올라오고 있습니다. 당연히 FPGA
회사에서 홍보성으로 퍼뜨리는 글일테지만 완전히 거짓은 아닐 것으로 판단됩니다. 다만
기존의 DSP Software 를 하는 engineer 는 FPGA 를 이용한 설계에 적응을 쉽게 할 수
없겠지만 말이죠.
- Clock 생성 관련 PLL 등
PLL 등의 block 이 포함되어 있어서 FPGA 내부에 다양한 형태의 clock 을 공급해 주게
됩니다. 해당 PLL 이 어떻게 동작해야 하는지도 당연히 programmable 합니다.
- CPU
내부의 ARM 이나 PowerPC 등의 CPU 가 포함된 FPGA 도 있습니다. 사실 System 에서
FPGA 사용을 검토하는 가장 큰 이유는 매우 많은 연산을 처리해야 하는데 그것을
일반적인 CPU 혹은 DSP 가 감당할 수 없을 때입니다. FPGA 로 많지만 간단한 연산을
처리하도록 하고, 나머지 복잡하지만 자주 처리할 필요가 없는 부분은 여전히 CPU 로
하는 것이 일반적입니다. 아무래도 CPU 에 Software 를 얹는 방법이 hardware 설계
보다 쉽기 때문에, 복잡하지만 peformance 가 많이 필요하지 않은 일은 software 로
구현하는 편이 유리합니다. 결국, FPGA 로 System 을 구성하더라도 별도로 CPU 가
필요한 경우가 많은데, 그 때 사용하라고 ARM/PowerPC 등의 CPU 를 FPGA 에 넣는
경우가 있습니다. 하지만 요즘은 FPGA Vender 에서 LUT 로 비교적 빠른 CPU 를
구현해서 넣는 방법을 제공하여, ARM/PowerPC 가 들어 있는 FPGA 의 용도는 좀
애매해진 구석이 없지 않습니다.
- 기타
그 외로 Ethernet MAC, PCI Express controller, DRAM Controller 등이 내장된
FPGA 도 있습니다. 심지어 몇가지 Analog Circuit 이 들어 있는 FPGA 도 있는데,
일반적으로 Analog Circuit 은 application 에 따라서 요구하는 specification 이 매우
다양하기 때문에, Analog Curcuit 이 들어 있는 FPGA 는 대중적이지는 않습니다.
FPGA 종류
CPLD 와의 차이