FPGA에 대해서 살펴봅니다.

FPGA는 Field Programmable Gate Array의 약자입니다. Field Programmable이란 말 그대로 현장에서 프로그래밍이 가능하다는 뜻입니다. 즉, 현장에서 프로그래밍 가능한 Gate Array라고 할 수 있는데, 우선 Gate Array가 무엇인지 알아 봅니다.

  • Gate Array
Gate Array를 이용한 설계는 선사시대의 설계 방법론이라고 할 수 있습니다. 저는 해 본 적이 없고, 아마도 단시일내에 Gate Array를 이용한 설계를 할 일은 없을 것 같습니다. 직접 경험한 바가 아니므로 추측으로 설명을 하자면 다음과 같습니다.

Gate Array는 말 그대로 (digital logic) Gate가 silicon wafer 위에 일정하게 Array 형태를 이루어 분포되어 있는 상태(?) 를 말합니다. 아마도 NAND Gate 혹은 NOR Gate하고 Flipflop이 아마도 Array를 이루고 있을 겁니다. NAND(혹은 NOR) Gate의 연결 만으로 모든 combinational logic을 설계할 수 있으므로 설계자는 단순히 Gate 사이를 metal로 연결을 하여 설계를 완료합니다. 이런 설계 방법론이 대두된 이유는 digital logic IC 설계의 FAB NRE charge가 비싸기 때문입니다.(이것은 선사시대나 지금이나 마찬가지인가 봅니다.) FAB NRE는 대부분은 mask를 만들기 위해서 들어갑니다. Wafer 위에 N형 반도체, P형 반도체, Oxide, Polysilicon, Metal 등을 올리기 위해서는 수십장의 mask를 만들어야 합니다. 하지만 Gate가 모두 놓여진 상태에서 metal 만 연결하기 위해서는 mask가 많이 필요하지 않고, 그에 따라 NRE가 상당히 줄어듭니다.
Gate만 놓여 있는 Wafer를 만들어서 비교적 싼 가격에 공급하는 회사가 있다면, 설계자 입장에서 비교적 싼 가격에 그 Wafer를 사고, metal 연결에 대해서만 NRE를 내고 chip을 생산할 수 있게 됩니다. Gate Array를 이용하는 설계가 많으면 많을 수록 Gate Array Wafer가 많이 팔리게 되므로 Wafer의 가격이 낮아져서 더 많은 설계에 이용되는 선순환이 이루어질 수 있습니다. 반대로 Gate Array를 이용하는 설계가 별로 없다면, Gate Array Wafer가 별로 안팔려 가격이 상승하고, 그로 인해 더욱 Gate Array를 이용한 설계가 줄어드는 악순환이 반복될 수 있습니다. Gate Array가 선사시대의 설계 방법론이 되었고, 그렇다는 것은 그런 선순환보다는 악순환이 발생했다는 의미입니다. 무엇이 문제였을까요? 

Gate Array 설계 방법을 쓰면 사용하지 못하는 Gate가 생길 가능성이 큽니다. 또한, NAND(혹은 NOR) Gate 만으로 logic을 설계하면 당연히 서로 다른 gate를 모두 이용하여 설계하는 방법보다 transisitor 갯수(즉 die area)면에서 불리합니다. 결국 die area가 늘어나서 chip 단가가 상승하고, power 소모도 더 많이 할 수 밖에 없습니다.
die area는 그렇다 치고 timing을 맞추는데, 즉 높은 동작 주파수를 달성하는데 어려움이 따를 것 같습니다. Gate의 input이 제한되어 있으므로, combinational logic이 여러 단계를 더 거쳐야할 필요가 있습니다. 그리고 회로에 따라서 metal을 이용하여 routing 하는 것에 또 다른 timing 문제를 발생시킵니다. 예를 들어 combinational logic 출력은 flipflop에 연결하려고 봤더니 flipflop이 먼 곳(가까운 곳에 있는 flipflop은 모두 다른 output을 연결해서 없다고 가정)에 있으면 느려질 수 밖에 없겠습니다. 그리고 보통 일반적인 반도체 설계의 경우 fan-out에 따라서 동일한 동작을 하는 gate가 여러 종류가 있어서 timing을 이용하여 최적화 하게 되는데, Gate Array에서는 그렇게 하기 곤란합니다.
더욱 큰 문제는 chip 내부에 analog 회로를 넣으려고 해도 방법이 없습니다. Analog 회로는 둘째치고 커다란 SRAM을 넣는 것도 참 곤란합니다.

Gate Array 설계 방법론의 다른 문제는 Risk및 비용(NRE)가 줄어들기는 하되 없어지지 않는다는 점입니다. 매우 많이 팔릴만한 chip의 경우 NRE와 Risk를 모두 감수하고 full custom으로 설계하는 것이 chip의 단가를 낮출 수 있어서 유리하고, 매우 소량 팔리는 chip의 경우에는 아래 설명할 FPGA를 이용하는 것이 유리합니다. Gate Array 설계 방법은 그 사이에 끼어 있는 형태인데, 그 사이의 시장이 별로 없었거나 개척하지 못했다는 것이 가장 큰 문제였을 겁니다.

현재 제한된 영역에서는 명맥을 유지하고 있기는 한가 봅니다. ATMEL에서 제공하는 CAP이라는 애가 있는데, Gate Array 인지는 확실하지 않지만, metal programmable한 영역이 일부 들어 있는 ARM chip을 생산해 주는 것으로 보입니다. 사용자는 metal programmable한 영역에 목적에 맞는 특별한 peripheral을 만들어 chip의 나머지인 ARM CPU 및 peripheral과 연동하여 사용할 수 있는 형태로 보입니다.

  • FPGA 란?
FPGA는 위에서 언급한 대로 Field Programmable Gate Array의 약자인데, 한마디로 정의 하면 사용자가 원하는 digital logic을 programming(혹은 configuration)통해 구현할 수 있는 chip입니다. Gate Array 설계 방법론이 metal layer를 설계하여 FAB에서 비교적 싼 chip을 생산하는 방법인 반면, FPGA 설계 방법은 그냥 FPGA 회사에서 나오는 FPGA chip을 board에 실장해 놓고 programming을 하여 사용하는 방법입니다.

FPGA는 NAND/NOR와 같은 단순한 gate를 사용하지 않고, LUT(Look-Up Table)을 이용하여 combinational logic을 구성하고, LUT의 끝에는 flipflop이 있어 sequential logic을 구현할 수 있도록 되어 있습니다. LUT가 chip 안에 Array 형태로 많이 들어있고, LUT 사이의 연결도 programming할 수 있고, chip의 I/O도 사용자가 어느 정도 정할 수 있습니다. 따라서 FPGA로는 모든 digital logic을 구현할 수 있고, interface도 자유로와 다른 chip과의 연결을 쉽게 할 수 있습니다.

FPGA도 Gate Array 방법과 비슷한 단점을 가집니다. 우선 FPGA chip 자체가 상당히 비쌉니다. 물론 내부에 들어 있는 LUT의 갯수에 따라서 가격은 많이 달라지기는 하지만 싸면 수십불에서 비싸면 수천불(Altera Stratix IV는 9천불이 넘는 애들이 있음)까지나 하는 상당히 고가의 chip입니다. 그리고 timing도 일반적인 chip 설계에 비해서 좋을 수 없습니다. 또한 일반적으로 Analog 회로는 들어가 있지 않습니다.

하지만 Gate Array 설계 방법론에 있었던 NRE와 같은 것은 전혀 없습니다. 따라서 Risk가 거의 없다고 봐야 합니다. 또한 설계를 FAB에 보내 chip을 생산하는 것이 아니고, 검증 및 디버깅도 상대적으로 쉽기 때문에 개발 기간이 짧다는 장점이 있습니다.

  • FPGA Vendor
FPGA 시장에는 Xilinx와 Altera라는 두 회사가 막강한데 그 중에 Xilinx가 부동의 1위 자리를 지키고 있습니다. 두 회사가 약 80% 정도의 시장 점유율을 가지고 있다고 합니다. FPGA 뿐 아니라 CPLD(Complex Programmable Logic Device)를 포함한 시장 점유율에서도 비슷한 양상으로 나타나고 있습니다. 그외로 작은 애들이 있는데 actel, lattice 등이 있고, 신생 기업도 여럿 있습니다.

FPGA 시장은 사실 진입하여 성공하기 매우 힘듭니다. 우선 FPGA chip 자체를 잘 만드는 것은 당연하고, FPGA 설계를 위한 Design Software 등을 잘 갖추어야 합니다. 또한 FPGA에서 사용할 수 있는 각종 IP와 design example을 제공해 주어야 하고, 또한 third party 회사들과의 eco-system이 갖추어져야 합니다. 이 모든 것을 완비한다고 하더라도, 대부분의 엔지니어가 새로운 것을 배우는 것을 주저하기 때문에 시장 저항이 있을 수 밖에 없습니다. 따라서 당분간은 Xilinx와 Altera, 두 회사가 계속 시장을 주도할 것으로 보입니다.

저도 Xilinx/Altera의 FPGA를 모두 써 보기는 했으나, 주로 Xilinx에서 나온 제품을 많이 사용하기 때문에 Xilinx의 chip, software가 매우 익숙합니다.

  • FPGA의 응용 분야
FPGA는 Digital 영역 어디에서도 자유롭게 다른 chip과 연결하여 사용할 수 있습니다. 하지만 FPGA가 매우 비싼 만큼 어느 정도 제약이 있습니다.
시스템 회사가 제품을 만들 때는 우선 시장에서 구할 수 있는 비교적 저렴한 chip을 이용하여 구현할 수 있는 것을 모두 구현하는 것이 좋습니다. 하지만 그렇지 못한 경우가 있을 수 있는데, 대부분은 매우 빠른 interface를 가지고 있거나 매우 연산이 많이 필요한 경우로 볼 수 있습니다. 그렇다면 해당 기능을 수행하는 chip을 직접 만들거나 FPGA를 고려할 수 있습니다. 해당 제품이 매우 많이 팔린다면, chip을 직접 만드는 데 필요한 개발비용이 크게 부담이 아니므로 chip을 만드는 편이 좋겠지만, 그렇지 않은 경우에는 FPGA가 정답입니다. 즉, 제품의 시장 규모가 작은 편이라면 FPGA를 사용하는 것이 가격적으로 이득입니다.
시장 규모가 작은 시스템이면서 FPGA가 사용될 수 있을만큼 고가의 시스템은 사실 매우 많습니다. 예를 들어 산업용 시스템이나, 항공, 의료 관련 시스템 등이 쉽게 떠오를 수 있습니다. 보잉이 비행기를 만들어봐야 1년에 몇 대나 만들겠습니까? 참고로 Xilinx 사이트에서는 다음과 같은 응용 분야를 내세우고 있고, Altera가 내세우는 분야와 크게 차이가 없습니다.

- Aerospace/Defense
- Automotive
- Broadcast
- Consumer
- Data process/Storage
- Industrial/Scientific/Medical
- Wired
- Wireless

FPGA vendor 입장에서는 돈이 잘 안되겠지만, 우리 회사에서는 chip prototype을 위해서 FPGA를 사용하기도 합니다. chip을 FAB에 넣기 전에 FPGA를 이용하여 기능을 구현한 다음, 그것을 실제로 돌려 보는 겁니다. 물론 원하는 동작 clock에 비해 늦게 동작을 하지만 simulation이나 기타 다른 방법에 비해 월등히 빠르게 동작합니다. Chip의 설계를 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에 민감한 시스템에서도 사용을 고려해 볼 수 있습니다


FPGA를 이용한 설계 방법, 특히 FPGA Vendor에서 제공하는 Design Software에 대해서 알아 봅니다.


  • FPGA를 이용한 설계 방법과 Design Software
사실 FPGA를 이용한 설계와 일반적인 standard cell library를 이용한 chip 설계는 크게 다르지 않습니다. 모든 design은 VHDL이나 verilog와 같은 HDL로 합성가능한 수준, 즉 RTL로 기술되어야 합니다. HDL의 검증은 기본적으로 simulation을 통해서 하게 되며, 그 검증이 끝나면 Synthesis와 P&R(Place&Route) 과정을 거치게 됩니다. chip 설계 였다면 P&R의 결과가 GDS 파일로 나오고 그것을 FAB에 보내서 반도체 die를 생산해야 겠지만, FPGA의 경우 P&R의 결과는 FPGA 내부를 configuration할 수 있는 bitstream이고, 그것을 FPGA에 download하면 FPGA가 동작하기 시작합니다. 

모든 기능을 직접 HDL로 만들 수도 있지만, FPGA에서도 IP(Intelectual Property)라는 개념으로 FPGA Vendor나 3rd party 업체에서 설계하여 제공하는 block을 이용할 수 있습니다. FPGA Vendor에서 제공하는 간단한 IP를 제외하고는, 보통의 경우는 netlist 형태로 제공되는데, 당연히 license fee를 주고 사야 하고, 별도의 로얄티를 내야 하는 경우도 있습니다. 하지만 보통의 경우 비슷한 기능을 제공하는 ASIC용 IP에 비해서는 저렴한 편이고, 그런 IP를 이용하여 설계 시간을 단축할 수 있다면 충분히 이점이 있습니다.

설계 방법에서 필요한 모든 것을 FPGA vendor가 제공해 주는 design software을 이용하여 처리할 수 있습니다. Xilinx에서는 ISE라는 software, Altera에서는 Quartus II라는 software를 제공해 줍니다. 재미 있는 것은 이 Design Software를 FPGA chip을 샀다고 해서 무료로 제공 받는 것이 아니고, 별도로 돈을 주고 사야 한다는 점입니다. Trial version이나 기능을 제한한 version 같은 경우는 무료로 download할 수 있지만, 모든 기능이 들어 있는 version은 정식으로 license해야 합니다. ASIC용 EDA software와 달리 엄청 비싸지는 않습니다.

  • Design Software가 제공하는 기본적인 기능
(a) Design 관리
프로젝트 단위의 설계 관리 기능이 있습니다. 일종의 software 개발시 IDE라고 보면 됩니다. 프로젝트는 사용할 FPGA 종류, design 내용, user constraint 등을 담고 있습니다. 당연히 각종 기능들을 쉽게 이용할 수 있게 되어 있고, 각 기능의 결과 report 파일 등을 쉽게 볼 수 있는 환경이 구축되어 있습니다.


(b) Design Helper
HDL 설계는 그냥 text editor를 이용하면 되지만, HDL 설계를 도와 줄 수 있는 기능들이 있습니다. 예를 들어 HDL module 사이의 연결을 쉽게 해 주는 schematic tool이 있고, state machine의 coding을 손쉽게 해 주는 tool 등이 있습니다. 참고로 이런것을 제공해 주는 3rd party tool도 매우 많은 편입니다. FPGA Advantage나 Active-HDL 등 유명한 tool이 많은데, 개인적으로는 그냥 text editor, 그 중에서 vi를 주로 이용해서 손으로 작성하는 것을 선호하는 편이라 사용해 본 적은 없습니다.


(c) Simulator
HDL Simulator가 각 software에는 들어 있는데, 예전에는 FPGA Vendor가 제공해 주는 simulator의 기능이 상당히 빈약하여 다른 일반적인 HDL Simulator를 이용하는 경우가 많았습니다. 요즘에는 좀 나아졌는지 모르지만, 주변의 엔지니어들은 여전히 FPGA Vendor에서 제공해 주는 simulator를 사용하지 않고, 일반적인 HDL simulator를 이용하는 경우가 많습니다.

(d) Synthesis와 P&R
당연히 synthesis를 해 주는 기능이 포함되어 있습니다. ASIC을 만들때 처럼 FAB에서 주는 standard cell library는 필요하지 않습니다. 프로젝트를 생성할 때 선택한 FPGA가 있으므로, 그 FPGA에 맞추어서 합성을 해 줍니다. P&R tool이 있어서 합성 결과를 P&R 해 주게 됩니다.
Synthesis와 P&R을 위해서는 ASIC 합성, P&R과 마찬가지로 timing constraint가 있어야 합니다. 설계에서 사용하는 clock의 주파수는 무엇인지, clock 간의 관계는 어떤지, input/output delay는 얼마인지에 대한 정보 등이 필요합니다. 이 정보를 이용하여 Synthesis나 P&R을 진행하고, 결과가 timing constraint에서 기술된 내용에 맞는지 검증할 수 있는 timing analyzing 기능도 포함되어 있습니다.


P&R을 수행하는데,  또 다른 중요한 요소는 FPGA pin assign 정보입니다. HDL은 단순히 input/output/inout 과 같은 형태의 port만을 가지므로, 해당 port가 실제 FPGA의 어떤 pin에 연결되어야 하는지에 대한 기술이 필요합니다. 이 pin assign 정보가 있어야 P&R tool이 해당 pin과 설계의 port를 연결해 주게 됩니다. 또한 FPGA는 pin은 programmable pullup/pulldown, programmable interface type(LVTTL/LVCMOS/SSTL 등)의 특성을 가지고 있으므로, 해당 부분도 같이 기술해 줍니다.


(e) In-System Programming
P&R이 모두 끝나면 Design Software는 FPGA programming을 위한 bitstream file을 생성하게 됩니다.  이 bitstream을 Board 위의 FPGA 또는 Program Memory에 download하면 FPGA가 설계한 대로 동작하게 됩니다. 이를 download할 수 있는 기능을 제공해 주는데, 각 Vendor에서 제공하는 JTAG Cable을 이용하여 PC와 Board를 연결하고 동작시켜주면 됩니다.


  • Design Software가 제공하는 부가적인 기능
위에서 언급한 기능만 있으면 설계에는 문제가 없지만, 설계및 debugging을 용이하게 하기 위해서 부가적인 기능을 제공합니다.


(a) IP 제공및 환경 제공
FPGA 내부의 LUT이 아닌 block, 예를 들어 SRAM, Multiplier, PLL 등을 쉽게 이용할 수 있는 기능을 제공합니다. 예를 들어 PLL을 사용하려고 하면, 우선 PLL의 module 이름을 파악하여 사용자가 직접 HDL code에 PLL module을 넣고, input/output port를 연결하여 사용할 수 있습니다. 하지만 FPGA 내부의 PLL은 다양한 기능을 수행할 수 있도록 되어 있어서, input/output port가 상당히 복잡합니다. 복잡하지 않다고 하더라도 PLL 관련 document를 꼼꼼하게 읽어가며 내용을 이해해야만 input port에 올바른 값을 넣고, 필요한 output port가 무엇인지 알 수 있습니다. 그래서 Design Software에서는 Wizard 형식으로 Software가 묻는 값을 사용자가 넣어주면, 알아서 그 PLL module과 주변 logic이 같이 HDL code로 생성되어서 나오도록 되어 있는 tool을 가지고 있습니다. 예를 들어 입력 주파수 27MHz에서 108MHz와 54MHz를 생성하고 싶다라고 알려주면 알아서 HDL code를 생성해 줍니다. 그리고 그 HDL code를 설계에 넣어서 사용하면 그만입니다. 마찬가지로 SRAM을 Asynchronous FIFO 형태로 사용하거나 하기를 원하면 마찬가지로 Wizard 형태로 FIFO의 width/depth 등을 넣으면 알아서 SRAM module과 관련 logic이 생성되어 HDL로 출력됩니다. 이런 기능이 Xilinx ISE에서는 Core Generator라는 이름으로, Altera Quartus II에서는 MegaWizard라는 이름으로 제공됩니다.


FPGA 내부의 block을 손쉽게 사용하는 것 뿐만 아니라, 각 Vendor가 제공하는 IP, 예를 들어 Memory Controller나 Ethernet Controller 등을 동일한 tool을 이용하여 사용자가 원하는 feature만 넣어서 만들 수 있습니다. 


(b) On Chip Logic Analyzer 기능
FPGA 설계가 끝나서 보드에서 동작을 시키는데 문제가 있다면 어떻게 해야 할까요? 우선 HDL simulation을 통해서 문제가 없는지 살펴보는 것이 제일 좋은데, 일반적으로 simulation은 속도가 너무 느려서, 복잡한 검증이 사실상 어렵습니다. 또한 simulation vector가 실제 보드에서 벌어지고 있는 모든 것을 담아서 작성했다고 보기 어렵기 때문에, simulation을 통해서는 문제를 찾기 힘든 경우도 많이 있습니다. 예전에는 이런 경우 FPGA 설계를 바꾸어 monitoring을 하고 싶은 signal을 모두 FPGA pin으로 뺀 다음에, Board에서 해당 pin을 실제 Logic Analyzer에 물려서 원인을 찾는 방법을 사용할 수 밖에 없었습니다. 이런 방법은 Logic Analyzer라는 고가의 장비도 필요할 뿐더러, 설계를 바꾸어 signal을 밖으로 빼내야 하므로 상당히 불편했습니다.


이런 형태의 debugging을 손쉽게 해 주는 기능들이 Design Software에 포함되어 있습니다. FPGA 내부의 SRAM 등을 이용하여 monitoring하고 싶은 signal을 계속 저장하고 있다가, 특정 조건이 되면 JTAG Cable을 통해서 해당 내용을 읽어와서 해당 signal이 어떻게 변할 때 에러가 발생하는지 찾을 수 있도록 해 줍니다. Xilinx에서는 ChipScope라는 이름으로 Altera에서는 SignalTap II이라는 기능으로 제공하고 있는 것 같은 데, 두 가지 모두 개인적으로 사용해 본 적은 없습니다. 개인적으로는 비슷한 기능을 제공하는 Identify라는 프로그램을 사용해 본 적이 있는데, 에러를 찾는데 매우 편리합니다.


(c) Embedded CPU System Design Helper
Xilinx는 MicroBlaze, Altera는 Nios II 라고 하는 32bit CPU를 IP로 제공하여, 사용자가 설계에 활용할 수 있도록 해 주고 있습니다. CPU를 사용하게 되면 CPU의 Instruction과 Data를 저장할 memory controller가 필요하고, 또한 Debugging이나 Interconnection을 위한 다른 Peripheral(예를 들어 UART, Ethernet, USB 등)이 필요합니다. 또한 그런 block을 CPU와 연결할 수 있는 BUS가 필요해 집니다. 이런 IP를 FPGA Vendor가 제공해 주며, 연결및 구성을 손쉽게 해 주는 tool을 제공해 줍니다. Xilinx에서는 EDK의 Platform Studio, Altera에서는 SOPC Builder라는 tool을 제공해 줍니다.


또한 CPU를 사용하게 되면 필수적으로 CPU에서 동작시킬 Software를 작성해야 하는데, 그것을 위한 Compile/Debugging 등의 개발 환경도 제공해 줍니다.


(d) Digital Signal Processing 관련 tool 
FPGA를 이용하는 Digital Signal Processing을 하는 경우가 많이 있습니다. FPGA Vendor에서는 DSP(Digital Signal Processor)를 사용하는 구현 보다, Cost/Power 면에서 이득이 있다고 많이 설득을 하는 기고문을 여러 곳에 올리고 있지만, 아무래도 Digital Signal Processing 동네에서 노는 사람들이 FPGA에 적응하기란 쉽지 않습니다.  그래서 그런지 matlab/simulink와 연동하여 hardware를 자동으로 만들어 주는 등의 support tool이 있습니다. 아무래도 주로 노는 동네가 시스템(CPU와 software를 포함한)쪽이라서 사용해볼 기회는 없었습니다.

  • 3rd party tool : Synplify
예전에는 FPGA Vendor가 제공하는 synthesis tool이 그다지 성능이 좋지 않았나 봅니다. 성능이란 합성 결과가 회로의 크기 및 동작 속도, 그리고 synthesis를 하는데 걸리는 시간이라고 볼 수 있습니다. 굳이 따지자면 지금도 FPGA Vendor가 제공하는 synthesis tool보다 EDA software만 만드는 회사의 tool이 더 좋을 수 밖에 없습니다. FPGA Vendor는 FPGA를 좋게 만들면 장사를 할 수 있지만, EDA software를 파는 회사 입장에서는 tool이 좋지 않다면 회사가 문을 닫아야 합니다. Xilinx FPGA 합성용 3rd party tool로 유명한 것은 Synplify와 LeonardSpectrum 이었습니다. 개인적으로 Synplify을 사용해 봤는데, Synplify는 Xilinx/Altera의 FPGA 모두를 지원합니다. Synthesis만 제공하므로 P&R은 FPGA Vendor tool을 이용해야 하는데, 그래도 사용하기 편리한 tool이었습니다. 참고로 Synplify는 FPGA Vendor의 software와 달리 가격이 상당히 비쌌는데, 작년초였나 ASIC EDA의 거두 synopsys에 인수되고 나서는 가격 조건이 어떻게 변했는지 알 수 없습니다.


Synplify가 좋은 점은 다음과 같습니다.
(1) HDL 합성
아무래도 합성의 성능이 더 좋은데, 예전에는 모르겠지만 현재는 엄청 차이가 나는 수준은 아닌 것 같습니다. 그래도 조금이라도 더 빠르고, 더 작게 합성해 준다면 언제나 좋은 겁니다. 그리고 Synplify는 HDL code 중에서 memory(RAM 혹은 ROM)의 파악을 잘 해서 그것을 FPGA SRAM으로 제대로 매핑해 줍니다. FPGA Vendor가 제공하는 synthesis는 이것을 잘못해서 SRAM으로 매핑할 수 있는 것을 Flipflop으로 모두 바꾸면서 정말 곤란한 결과를 주는 경우가 있습니다.


(2) Timing Constraint 작성이 편리함
FPGA Vendor의 software를 사용할 경우 timing constaint를 작성하려면, 문법이 좀 복잡하다고 할까 아무튼 문서좀 보고 연구좀 해야 합니다. 하지만 Synplify는 timing constraint 작성이 간단하고, contraint를 작성하기 위해서 봐야 하는 문서가 쉬운 편입니다. Synplify는 P&R을 위해서 FPGA Vendor별 contraint를 자동으로 생성해 주기 때문에 복잡한 것들을 배우지 않아도 됩니다.


(3) Identify를 이용할 수 있음
Identify는 Synplify와 별도로 구매해야 하는 tool인데 On Chip Logic Analyzer 기능을 제공합니다. ChipScope와 SignalTap II을 써보지 않아서 비교할 수는 없지만, Identify는 정말 사용하기 편리합니다. 설계 내용중에 signal을 latch할 clock하고, monitoring하고 싶은 signal 들, 그리고 triggering signal(error나 monitoring을 위한 조건을 위한 signal)을 지정하고 합성 누르면 알아서 monitoring을 위한 logic을 넣어서 합성해 줍니다. 그 다음에 Board에 JTAG cable 연결하고, bitstream download한 다음에 triggering 조건을 써 주면, FPGA의 동작중에 해당 조건이 만족되면 그 시점 전후로 하여 실제 FPGA에서 probe된 signal들의 waveform을 dump해 줍니다




출처 - http://blogspot.designonchip.com/

신고

'FPGA' 카테고리의 다른 글

Xilinx Timing Closure - 1. Overview  (0) 2014.07.04
반도체 칩 개발 과정  (0) 2013.06.15
FPGA 이야기  (0) 2013.06.15
Xilinx FPGA 구조 6 - CLB  (0) 2013.05.14
Xilinx FPGA 구조 5 - Block RAM  (0) 2013.05.14
Xilinx FPGA 구조 4 - PMCD  (0) 2013.05.14

+ Recent posts