You are on page 1of 7

FPGA 란 무엇인가?

(Field-Programmable Logic Array)


글 | 퀀텀베이스 www.quantumbase.com

본 컬럼에서는 FPGA 를 처음 접하는 사용자들이 FPGA 가


무엇인지 개념적으로 살펴보고, 그 응용분야는 어떠한지 소개하고자 합니다.
먼저 “FPGA(Field-programmable logic array)는 뭐지?”라는 물음에 대하여 그 원초적인 답을
찾아봅시다. 그 이름에서 나타나 있듯이 “프로그램 가능한 논리소자의 배열의 일종이다” 라고 할
수 있겠습니다. 그런데 “programmable”은 “프로그램 가능한”이고 “logic”은 “논리소자”를 의미하며,
“array”는 “배열”을 의미하는데 “Field”의 의미가 그답에서 보이지 않는것 같습니다만, 실제로는
array 에 그 의미가 포함되어 있습니다. 밭, 논 같은 경작지를 생각해보면 넓은 평야(field)의 경우
바둑판처럼 규칙적인 구획을 가진 배열이지요. 가로 세로로 나누는 것은 사람들이 걸어다닐수
있는 “둑”과 같은 것이고요. 즉 FPGA 는 하나의 밭의 구역과 같은 로직블럭이 넓은 평야에 있는
밭처럼 규칙적, 반복적으로 배치되어 있으며, 그 각각의 로직 블럭을 둑의 길과 같이 가로 및
세로방향으로 연결선이 배치된 구조로, 외부에서 프로그램하여 로직블럭의 동작과 로직블럭간의
연결선을 임의로 배치하여 다양한 동작을 할수 있도록 설계된 IC 입니다.

그림 1 FPGA 의 구조

그림 1 에는 FPGA 구조를 간단하게 도식화한 것입니다. 그림 1 의 좌우로 쭉 연결된 구조가


FPGA 의 구조입니다. 도식화한 바와 같이 밭의 구획같은 것이 로직블럭이고 걷는 둑이 배선의
배치를 나타낸 것입니다. 그림 1 에서 보이는 로직블럭을 Altera 사에서는 LAB(Logic array
block)이라고 하고 Xilinx 사에서는 Configurable logic block(CLB)라고 부릅니다. 비록 로직블럭의
내부구조는 다르지만 사용자 입장에서는 동일하게 봐도 상관없겠습니다. 자, 이제 FPGA 구조는
대략 아시겠죠? 더 깊이 들어가면 로직블럭의 내부를 보아야 하는데 본 컬럼의 범주를 벗어나니
이 정도로만 구조를 파악하도록 하겠습니다.
이제 이 FPGA 를 어디에 사용할까를 생각해 보도록 하겠습니다.
제품을 개발할때 제품을 설계 완성해놓고, 하드웨어를 변경시키지 않은 상태에서 기능을
업데이트 하는 것은 이제 매우 보편화 되어 있습니다. 사실 이러한 것은 대부분
마이크로프로세서를 사용한 시스템에서 ROM 의 프로그램을 업데이트 하는 과정을 거칩니다.
그런데 프로그램 이외에도 IC(칩) 자체의 기능을 업데이트 할 수 있다면 정말 편리할 것 같죠?
이를 가능하게 하는 것이 바로 FPGA 라고 할 수 있습니다.

그림 1. (a) 군사용 무선통신기 응용 예 그림 2. (b) 의료장비 응용 예


휴대폰, MP3, PMP 등 거의 모든 제품에는 ASIC(Application Specific Integrated Circuit)이 들어
있습니다. 이러한 ASIC 은 대량양산에 있어서 고성능 공정으로 제작하면서도 저렴한 가격으로
제작됩니다. 다만 이는 대량 양산인 경우에만 해당되는 이야기라는 것이 문제이죠. ASIC 을
개발하는 업체가 IC 를 설계하여 칩으로 만들기 위해서는 Non-recurring Engineering(NRE) cost
라고 하는 비용을 지불하여야 자신이 설계한 IC 의 샘플을 받아 볼수 있습니다. 현재 0.18um
공정을 사용한다면 5 천~6 천만원 정도를 지불하여야 하며, 더 최신 공정을 사용하는 경우 그
NRE 비용은 수억원에 이릅니다. 문제는 이러한 비용을 들여 만든 샘플이 설계오류로 동작하지
않는다면 그 비용이 그대로 사장되는 것입니다. 그럼에도 불구하고 양산수량이 엄청난 경우에는
그 비용은 뭍혀버리고 저렴한 가격의 칩이 생산되는 것입니다.
그렇다면 양산수량이 많은 제품은 그렇다치고, 머지 않은 과거의 PDP 를 볼까요? PDP TV 의
경우 대형 디스플레이 시장을 타겟으로 개발된 플라즈마 디스플레이 장치 입니다. 사실 원리는
형광등과 같은 방전을 이용하는 것이고 색을 나타나게 하기 위해서 여러가지 제어를 하게
됩니다. 예상할 수 있듯이 디스플레이 장치인 만큼 가장 중요한 것은 이미지 스케일링, 이미지
색상보정, 역감마 보정 등 이미지 프로세싱이 되겠습니다. PDP 는 양산초기 (지금도 꽤나
고가지만) 천만원에 육박하는 고가의 디스플레이 장치였으며, 그 수요가 그리 많이 형성되지
않았을 뿐만 아니라, 이미지 처리기술에 있어서도 지속적인 업그레이드가 필요하였습니다. 그런데
HD 급의 고화질 디스플레이의 이미지 처리는 고속 실시간 연산처리가 필요하므로 마이크로
프로세서로 할 수 있는 일이 아닙니다. 따라서 이를 위해 고성능 FPGA 가 사용되었습니다. 물론
FPGA 하나 하나의 가격은 ASIC 의 가격과 비교할 수 없이 비싸지만, 소량양산의 경우에는
ASIC 에 들어가는 NRE 가 들어가지 않으므로 상대적으로 ASIC 보다 훨씬 저렴한 가격이 됩니다.
이와 더불어 아직 최적화 되지 않는 기술에 있어서 하드웨어의 업그레이드시에 그냥 다시
프로그램하면 되므로 FPGA 의 사용이 가장 효율적인 방법이 되겠습니다.
이와 같이 FPGA 는 양산수량이 상대적으로 적지만 고가이고, 하드웨어 업그레이드가 필요한
제품에 있어서는 최적의 솔루션이 되는 것입니다. 실제 성공적으로 적용된 응용분야를 보면
고가의 통신시장, 군사기기, 검사장비 등이며, 점점 FPGA 의 가격에 대한 단점을 극복해
나아가면서 점점 일반 소비재로의 응용이 증가되면서 ASIC 의 시장을 잠식해 나아가고 있습니다.
Altera 사는 Hardcopy 라는 솔루션을 제공함으로써 Stratix 또는 APEX 디바이스에 설계하였던
것을 똑같은 패키지와 핀구조로 ASIC 하여주는 서비스를 하고 있으므로, 양산수량에 따라 NRE
비용이 없는 ASIC 서비스를 가능하게 하고 있습니다.
이미 ASIC 과 FPGA 는 서로의 시장을 침범하면서 전면전에 돌입되어 있습니다. 하지만 ASIC 과
FPGA 는 그 나름대로 서로 침범하지 못할 영역을 가지고 있으므로 상호 보완적으로 발전해
나아갈 것으로 생각됩니다. 또한 FPGA 의 가격 경쟁력의 확보와, 그 성능의 향상으로 인하여 그
응용분야가 엄청나게 넓어지고 있습니다. 이제 하드웨어 설계자가 FPGA 를 활용할 수 있다면 그
자신의 엔지니어로서의 가치를 더욱 극대화 할 수 있는 시점에 온것이 아닐까요?
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 합니다.

- High Speed Serial I/O


Gbps(Giga-bit/sec)급을 지원하는 Serial I/O 도 포함되어 있는 경우가 있습니다. 당장
PC 에서 사용하는 PCI-Express, SATA 와 같은 것을 FPGA 에서 지원하려면 High
Speed Serial I/O 가 있어야 합니다. 또한 많은 분야(주로 Video/Broadcast 부분)에서
Gbps 급 I/O 를 사용하고 있어서 FPGA 에서도 지원하고 있습니다.

- 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 종류

LUT 가 memory 라고 했는데, 일반적으로 저렴하면서 빠른 memory 는 SRAM 입니다.


따라서 매우 빠른 동작 속도를 가지는 FPGA 의 경우 SRAM 을 기반으로 하는 경우가
많습니다. 하지만 SRAM 의 경우 전원이 없으면 data 를 잃어버리는 단점이 있습니다.
SRAM 기반의 FPGA 의 경우에는 전원이 인가되면, SRAM 내용을 채워야 동작이
되는데, 그것을 위한 방법은 여러가지가 있습니다. 가장 간단한 방법은 각 FPGA
Vendor 에서 제공하는 program memory chip 을 사용하는 것입니다. program
memory chip 은 non-volatile 형태로 전원이 없어도 내용이 유지됩니다. FPGA 에
전원이 인가되면 program memory chip 에서 data 를 읽어서 자신을
programming(보통은 configuration 이라 부름)하고난 후에 동작을 시작합니다. FPGA
Vendor 가 제공하는 program memory chip 도 아주 많이 팔리지 않으므로 그다지
저렴하지 않습니다. 저렴하게 팔리는 SPI Flash 와 같은 chip 을 이용해서
configuration 할 수 있는 FPGA 도 있습니다. 또 다른 방법으로 외부의 CPU 나 다른
logic 이 FPGA 에 program 내용을 download 해 주는 방법이 있습니다. 마지막으로
JTAG 을 이용한 configuration 방법이 있습니다. 보통 PC 와 cable 로 JTAG 연결을
하여 configuration 하는 방법인데, 개발 중에 많이 사용합니다. 각 FPGA Vendor 별로
전용 JTAG cable 을 제공해 주고, 그것은 Vendor 의 design software 를 이용하여
동작시킵니다. 참고로 program memory chip 도 보통의 경우 JTAG 을 이용하여
program 하게 됩니다.

Flash Memory 를 기반으로 동작하는 FPGA 도 있습니다. Flash 기반이므로 당연히


SRAM 기반 FPGA 보다 비쌉니다. 두가지 형태가 있는데, 하나는 FPGA 내부는 SRAM
기반으로 하되 program memory chip 기능을 가지는 flash 가 내장된 형태가 있고,
나머지 하나는 그냥 Flash 기반으로 FPGA 가 동작하는 경우가 있습니다. Flash
기반이므로 당연히 전원이 없을 때도 data 를 잃어버리지 않으므로 별도의 외부 장치가
없어도 동작하는데는 지장이 없습니다. FPGA 내부의 flash 는 보통 JTAG 을 이용하여
programming 합니다.
Actel 에서만 나오는것 같은데 anti-fuse 라는 방식의 FPGA 가 있습니다. FPGA 내부가
fuse 의 array 와 같이 되어 있고, 강한 전류를 흘려, 특정 fuse 를 끊어 내는 방식으로
FPGA 를 programming 한다고 합니다. 당연히 별도의 program memory chip 을
필요로 하지 않습니다만, FPGA 를 한번 programming 하면 다시 programming 하는
것은 불가능하다는 단점이 있습니다. 대신 이 anti-fuse 방식의 FPGA 가 매우 빠른
동작을 한다고 알려져 있었는데, 사용해 본 경험이 없어서 현 시점에서도 빠르다고
확신할 수는 없습니다.

 CPLD 와의 차이

CPLD(Complex Programmable Logic Device)라고 하여 FPGA 와 비슷한 애가


있습니다. CPLD 도 일반적인 digital logic 을 구현하는데 사용됩니다. 각 FPGA
Vendor 들도 CPLD 를 생산하는데, Xilinx 는 CoolRunner, Altera 는 Max 라고 부르는
CPLD product line 를 가지고 있습니다. FPGA 와는 다른 내부 구조를 가지고 있다고
하는데 자세한 것은 알지 못하고, 사용하는 사람의 입장에서 보면 다음과 같은 차이가
있습니다.
우선 CPLD 로 구현할 수 있는 logic 의 규모가 FPGA 에 비해서 상대적으로 매우
작습니다. 또한 FPGA 에는 있는 SRAM, Adder/Multipler, 복잡한 I/O, 여러가지
hardwired logic 이 CPLD 에서는 제공되지 않습니다. 따라서 CPLD 는 glue logic 이나
비교적 간단한 sequential logic 같은 것을 만들 때 사용하면 적당합니다.
CPLD 는 FPGA 보다 가격이 매우 싼 편입니다. 그리고 보통은 flash 기반이라서 FPGA
처럼 외부에 program memory chip 과 같은 device 가 필요가 없고, 일반적으로
필요한 supply voltage 의 갯수도 적습니다. 따라서 시스템 BOM cost 가 민감한
부분에서도 사용될 수 있습니다. 그리고 CPLD 가 FPGA 보다는 power 소모가 적으므로
power 에 민감한 시스템에서도 사용을 고려해 볼 수 있습니다.

You might also like