Hardware/AI accelerator

[FPGA] Field Programmable Gate Array 개념 정리

je0nsye0n 2024. 7. 26. 11:55

FPGA(Field Programmable Gate Array) 

- Field Programmable(프로그래밍 가능) : 사용자가 필요에 따라 회로의 구성을 변경할 수 있음. 

- Gate Array : 논리 게이트가 배열된 형태로, 배열된 게이트는 특정한 논리 회로를 구성하기 위해 연결 될 수 있음.

 

→ FPGA란, 사용자가 원하는 digital logic을 프로그래밍을 통해 구현할 수 있는 칩이다. 이때, FPGA는 NAND/NOR과 같은 단순한 gate를 사용하지 않고, LUT(Look-Up Table)을 이용하여 combinational logic을 구성하고, LUT 끝에는 플립플롭이 있어 sequential logic을 구현할 수 있도록 되어 있다. LUT가 chip 안에 Array 형태로 많이 들어있고, LUT 사이의 연결도 programming할 수 있고, chip의 I/O도 사용자가 어느 정도 정할 수 있다. 따라서, FPGA로 모든 Digital Logic을 구현할 수 있고, interface도 자유로워 다른 칩과의 연결도 쉽게 할 수 있다.

 

  • FPGA 내부 구조

- LUT(Look Up Table) : FPGA는 Gate Array와 달리 NAND/NOR Gate는 사용하지 않고, 대신 4~6 input LUT를 사용하여 combinational logic을 구성한다. LUT를 단순한 메모리라고 생각하자. input을 가하면 메모리 내부의 내용이 output으로 나오면서 그것이 logic이 되는 것이다. 메모리 내부의 내용을 바꾸어 다양한 combitional logic을 구현할 수 있다. 이때, sequential logic을 설계할 수 있어야 하므로 LUT 끝에는 플립플롭이 달려 있어서 이용할 수 있다.

 

- Programmable Interconnect : LUT들 사이의 연결을 해야 완전한 로직이 구성된다. 이 연결도 프로그래밍이 가능하다. 일반적으로 FPGA 설계가 칩으로 구현하는 것보다 느린 이유는 이 인터커넥트 부분에서 많은 딜레이가 있기 때문이다. 될 수 있으면 routing을 잘 하여 interconnect의 delay를 줄여야 빨리 동작하는 설계가 된다.

 

- Programmable I/O : FPGA와 다른 chip들이 interface해야 하므로, FPGA I/O pin도 여러 종류의 interface 표준을 지원한다.

 

- Memory : LUT / FF만으로도 모든 디지털 로직(combinational/sequential)을 구현할 수 있지만, 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를 이용한 구현이 더 유리하다는 많은 글들이 올라오고 있다.

 

- CPU : 내부의 ARM이나 PowerPC 등의 CPU가 포함된 FPGA도 있다. FPGA로 많지만 간단한 연산을 처리하도록 하고, 나머지 복잡하지만 자주 처리할 필요가 없는 부분은 여전히 CPU로 하는 것이 일반적이라고 한다.

 

 

 

 

 

 

Ref) http://blogspot.designonchip.com/2009/12/fpga-1.html / http://blogspot.designonchip.com/2009/12/fpga-2.html