2009년 12월 21일 월요일

FPGA 이야기 - 3

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해 줍니다.

1 개의 댓글:

Unknown :

Thank you for detailed explanation!

댓글 쓰기