Field Programmable Gate Array

FPGA

FPGA는 Field Programmable Gate Array의 약자로, Programmable이라는 표현에서도 알 수 있듯이 사용자가 목적에 맞게 Block 내부의 로직 혹은 Block간 로직을 변경할 수 있는 직접회로(IC, Integrated Circuits)를 말한다. 이러한 FPGA는 PLDs(Programable Logic Devices)ASICs(Application-Specific Integrated Circuit)이 가지고 있는 한계점을 극복하기 위해 Xilinx에 의해 1980년대 개발되었다. 즉 Programmable하면서도 복잡한 기능을 수행하는 동시에 설계 과정에서 오랜 시간과 비용이 소요되지 않는 대안으로서 FPGA가 등장했다고 할 수 있다.

Compare with ASIC & PLD

ASICASSP(Application-Specific Standard Part)는 생산자가 정한 기능만을 수행할 수 있도록 로직이 고정적이지만 수백만 개의 논리 게이트로 구성할 수 있고, 이를 이용하여 높은 성능을 낼 수 있다. ASIC은 주문자의 요구에 따라 생산되는 반면 ASSP는 복수의 고객 니즈에 맞춰 생산된다는 차이가 있다. ASIC은 매우 작은 면적에 복잡한 기능을 높은 성능으로 구현할 수 있다는 장점을 가진다. 하지만 내부 로직을 설계하고 구현하는 과정이 매우 까다롭고 시간이 오래 걸린다는 단점도 가지고 있다.

PLD는 FPGA와 같이 사용자가 일정 부분 내부 로직을 수정하는 것이 가능하지만, FPGA와 비교해 볼 때 로직 게이트의 숫자가 상대적으로 적고, 구현할 수 있는 기능 또한 제한적이다.

FPGA는 내부 로직을 변경할 수 있으면서도 일정 수준 이상으로 복잡한 기능을 구현할 수 있다는 점에서 PLD와 ASIC의 중간 정도에 위치한다고 할 수 있다. ASIC과 비교해 볼 때 상대적으로 내부 로직을 새롭게 디자인하거나 기존 디자인을 변경하는 데에 들어가는 비용이 적다.

Where to use FPGA

FPGA의 주요 시장은 다음 네 가지이다.

  • ASIC, Custom Silicon: FPGA는 ASIC과 기타 다른 반도체들의 사전 구현 및 검증 목적으로 사용된다.
  • Digital Signal Processing(DSP): 성능(MIPS) 요구사항을 만족하기 위해 아날로그 신호를 디지털 신호로 바꿔주는 DSP가 FPGA로 대체되고 있다.
  • Embedded Microcontroller: FPGA의 가격이 하락하면서 소형 임베디드 시스템에도 사용되고 있다.
  • Physical Layer Communication: Network Layer에서 Phisical Layer와 상위의 Layer를 연결하는 장치로도 사용된다.
  • Reconfigurable Computing: 대규모 컴퓨팅 시스템에서 성능을 높이기 위해 꾸준히 반도체의 구조를 변경해야 하는 경우에 사용된다.

How does the FPGA works

FPGA를 구성하는 가장 기본적인 Component로는 표현하고자 하는 함수를 모사하는 LUT(Look Up Table)가 있다. 보다 구체적으로는 SRAM에 일련의 y 값들을 모두 저장해두고 경우에 따라 달리 반환하는 식이다. 단순한 예를 들어

\[y = (a \& b) \lvert c\]

와 같은 함수를 표현하고 싶다면, 우선 아래와 같이 Truth Table을 계산하고

a b c y
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 1
1 1 1 1

각각의 경우에 나오게 되는 y값을 LUT 내부의 SRAM에 모두 저장한다. 이후 입력으로 들어오는 \(a,b,c\)에 맞춰 SRAM에 저장된 값을 반환하도록 한다면 \(y = (a \& b) \lvert c\) 를 구현한 것과 같다고 할 수 있다.

SRAM Based Approach

위와 같이 SRAM configuration cell을 사용하여 FPGA를 구현하는 것에는 다양한 장점이 있다.

  • 속도가 빠르고 여러 번 다시 쓸 수 있기 때문에 구현 속도가 빠르고 언제든지 바꿔 쓸 수 있다.
  • CPU 등 다른 장치에도 많이 사용되고 있기 때문에 적용하는 것이 쉽다.

다만 SRAM은 전원을 끄게 되면 저장하고 있는 데이터를 잃게 되므로(Voltality), 정보를 저장하는 추가적인 저장 장치가 필요하고 전원을 끄고 켤때마다 다시 설정을 해주어야 한다는 단점을 가진다. SRAM 외에도 AntiFuse 방식, \(E^2\)PROM, FLAST 등을 사용하는 방식이 있으며, 각각의 방식이 가지는 장단점이 모두 다르므로 필요에 따라 선택적으로 사용한다.

LUT(Look Up Table)

LUT는 가능한 모든 경우의 입력 조합에 대한 결과값을 저장해두고 있으므로 어떤 복잡한 함수도 쉽게 묘사할 수 있다는 장점을 가지고 있다. 하지만 LUT의 가장 큰 단점은 입력 변수의 개수가 증가할 때마다 두 배씩 필요 저장 공간이 늘어난다는 점이다. 이론적으로는 입력 변수의 개수에 제한이 없지만 메모리 공간이라는 현실적인 이유 때문에 4-input LUT가 많이 사용되어 왔다. 최근에는 기술의 발전으로 Xilinx에서는 6-input LUT가 가장 일반적으로 사용된다고 한다.

4-input LUT는 16bit 크기의 SRAM 저장공간을 가지고 있다. 경우에 따라서는 이를 함수를 모사하는 LUT가 아닌 Memory 또는 Shift Register로 사용하기도 한다. 그리고 보다 큰 RAM 용량이 필요한 때에는 복수의 LUT를 Chain처럼 연결하여 하나의 큰 RAM으로 사용할 수도 있다.

Xilinx Block Hierarchy

Xilinx에서는 Block들이 다음과 같은 계층 구조로 되어 있다. Logic Cell이 가장 기본적인 Block이고 CLB가 가장 큰 블록이다.

  • Logic Cell
  • Slice
  • CLB(Configurable Logic Block)

LUT는 그 자체만으로는 안정적으로 기능하기 어렵기 때문에 보통 Multiplexer와 Flip-Flop 등과 함께 하나의 Block을 구성하여 사용하는 것이 일반적이다. Xilinx에서는 이 Block을 Logic Cell이라고 부른다. 이 Logic Cell의 묶음을 Slice라고 하고 Slice들의 묶음을 CLB(Configurable Logic Block)이라고 한다. 이때 Slice 내에서 Logic Cell을 어떻게 연결할 것인지, CLB 내에서 각 Slice를 어떻게 연결할 것인지는 사용자가 결정하게 된다.