[FPGA]

FPGA 선정 기준

Neo Park 2015. 1. 8. 11:57

어떤 글을 첫번째로 쓸 것인가에 대해 고민하다가 문득, 엔지니어들이 처음 겪게 되는 문제, 선택의 문제가 좋겠다는 생각이 들어서 이 글을 올리게 되었습니다.

FPGA를 분류하는 몇가지 파라미터들은 다음과 같습니다.
1. 리소스(로직, 메모리, 멀티플라이어, High Speed I/O 갯수등)의 양
2. 패키지
3. 동작전압(코어전압과 I/O전압)
4. Performance
5. 가격

- 첫번째 리소스 입니다.
현재 알테라나 자일링스에서 출시되고 있는 FPGA는 이전의 단순한 Logic Element(Altera용어)나 Slice(Xilinx용어)외에 dedicated multiplier, memory, high speed I/O등 여러가지 추가 블럭을 갖추고 있습니다.

a) 하지만 가장 기본이 되는 것이 로직이고 보면, 맨 먼저 살펴볼 것이 LE나 Slice의 갯수입니다. 많은 경우 질문을 하는 경우 ASIC게이트로 얼마나 되느냐는 것인데 사실 이것에 대한 정확한 답변은 어렵습니다. 비록 Altera의 경우 하나의 LE를 약 12gate, 한 비트의 메모리를 4gate정도로 계산하여 산출하기도 하지만 컴파일 결과 나타나는 FPGA의 리소스 사용량은 정확히 1:1 매치를 시키기가 어렵습니다.

왜냐하면, 예를 들어 하나의 LE는 combinational logic을 구현하기 위한 4 input Look-Up Table과 sequential logic을 구현하기 위한 Flip-Flop으로 구성되어 있는데 이중에 하나만 사용해도 리포트 파일에는 LE가 사용된 것으로 나타나기 때문입니다. 물론 더 자세한 정보도 나오지만 이것을 일일이 찾아가며 계산하는 것은 별로 권할 만한 일이 아닙니다.

그래서 FPGA설계 경험이 있는 분들은 LE나 Slice의 숫자를 보고 대강 짐작을 하게 되는데 그렇지 않은 분은 헷갈리기가 쉽습니다. 그럴 경우 한가지 쉽게 생각할 수 있는 것이 하나의 LE가 Flip-flop 하나라고 생각하고 자신의 디자인에 몇개의
Flip-Flop이 필요한지를 생각해보는 것입니다. 왜냐하면 대개의 경우 컴파일시 flip-flop갯수때문에 fitting이 안 되기 때문입니다.

한가지 추가하자면 알테라에서는 자일링스의 slice하나가 2개의 LE와 같다고 이야기 합니다만, 경험에 의하면 디자인의 성격에 따라 그 이상의 비율이 종종 나타납니다. 데이터 쉬트에 나와있는 구조를 보면 단순히 2개의 LE가 결합된 형태이상의 기능이 들어있기에, 이것이 사용되는 여하에 따라 비율이 더 크게 나올 수도 있습니다. 하지만 알테라사에서는 여전히 1:2의 비율로 계산하여 서로 비교합니다.

b) 그 다음이 메모리 양이겠지요. 알테라는 블럭메모리, 자일링스는 블럭메모리와 Distributed Memory를 가지고 있습니다. 블럭메모리는 미리 정해진 사이즈의 메모리를 이야기하며 Distributed Memory는 로직을 메모리로 전환할 수 있는 것을 이야기합니다만 상대적으로 그 사이즈가 작습니다. 데이터시트에 보시면 블럭메모리의 갯수와 전체 메모리 양이 표시가 되어 있는데 주의해서 보셔야 할 것이 사실 블럭메모리의 기본 사이즈와 갯수입니다. 예를 들어 4Kbit의 기본 사이즈 블럭을 20개 갖고 있다고 하면 80Kbit용량의 메모리를 갖는다고 볼 수 있습니다. 여기서 더 주의하셔야 할 것이 이 80Kbit의 메모리를 다 사용할 수 있는 것은 아니라는 것입니다. 하나의 블럭, 예를 들어 4K의 경우 4Kx1, 2Kx2,1Kx4,512x8,256x16,128x32등등의 사이즈로 정형화되어 사용되어야 하는데 이런 조합이면 이상적이겠지만 예를들어 512x6 짜리 메모리를 만들어내면 하나의 4K블럭을 사용하게 되지만 이중에서 512x2만큼의 메모리는 사용할 수가 없다는 것입니다. 그렇기에 단순히 전체 메모리량만 보고 결정했다가는 낭패를 보기가 쉽습니다.

그래서 사용하고자 하는 메모리의 구성과 갯수를 면밀히 따져 보아야 합니다.

c) multiplier나 high speed I/O
최근에는 DSP 기능이나 고속의 시리얼 인터페이스가 중요하게 대두되면서 이러한 기능을 지원하기 위한 전담리소스가 포함되게 되었는데 Multiplier나 HighSpeed I/O가 그 예입니다. 자일링스는 18x18 멀티플라이어를, 알테라는 36x36멀티플라이어를 기본으로 하는데 이것은 그 하위 멀티플라이어로 쪼갤 수가 있습니다. 그리고 High Speed I/O는 LVDS나 CDR같은 것이 있는데 몇개의 채널이 지원되고 있는지, 그리고 그 지원속도는 얼마인지를 살펴보아야 합니다

한가지 더, 가끔 데이터시트를 보면 system gate라는 표현이 있고 FPGA광고를 할 때 이 숫자를 사용하는 데 이것은 앞서 잠깐 언급한 계산식등을 이용하여 최대로 잡은 gate수이기 때문에 제 개인적으로는 그리 중요하게 생각하지 않습니다. 예를들어 10Mbit의 메모리를 갖는 디바이스는 그 자체만으로도 4천만 system gate를 갖는 거라고 할 수 있는데 이것이 실제 로직설계에 도움이 되는 수치이겠습니까? 답변하십시요~^^

- 두번째 패키지입니다.
패키지의 선택에 있어서는 요구되는 핀의 수, 패키지 사이즈, 패키지 형태 등 세 개가 중요한 파라미터입니다.
a)핀의 수는 디자인이 결정되면 바로 결정이 되기 때문에 선택의 여지가 없지요. 한 가지 주의할 것은 패키지의 핀의 수가 사용자가 사용할 수 있는 핀의 수가 아니라는 것이지요. 전원,그라운드, 전용핀 등등을 제하고 나면 실제로 사용자가 사용할 수 있는 핀은 대략 70~80% 정도입니다. 즉 672pin 패키지라고 하면 실제 사용자가 사용할 수 있는 핀은 약 500핀 안팎입니다. 이것은 데이터쉬트나 각 사의 브러셔에 나와 있으니 잘 살펴보시기 바랍니다.

b)패키지 사이즈는 PCB사이즈의 제한때문에 고려대상이 되어야 합니다.이것은 패키지 형태와도 관계가 있습니다.
예전에는 Pin Grid Array(PGA) 패키지가 그 사이즈에 있어 압도적이었는데 이제는 FPGA에서 더 이상 사용되지 않고 있습니다. 현재 주력 패키지형태는 Quadrature Flat Package(QFP), Thin QFP(TQFP), Ball Grid Array(BGA; pitch 1.27mm), Fine-line BGA(FBGA; pitch 1mm), Ultra FBGA(UFBGA; pitch 0.8? mm)등이 있는데 이에 대한 용어는 회사마다 조금씩 다른 것 같더군요.. 아뭏든 크기로 치면 UFBGA가 가장 작겠죠.. 최근에는 실리콘 다이 사이즈가 자꾸 작아지면서 FBGA가 주력이 되고 있으니 이것도 선택의 폭이 점점 작아지는 것 같습니다. BGA타입이 문제가 되는 것은 필요한 PCB의 레이어 수가 올라간다는 것이고 개발시 debugging과 조립이 어렵다는 점등이 있습니다.

- 세번째 동작전압입니다.
동작전압은 Core Voltage와 I/O Voltage로 나뉘게 됩니다.
a) Core Voltage는 반도체 프로세스와 밀접한 관계가 있습니다. 현재 보편적으로 많이 쓰이는 디바이스들은 대개 3.3V, 2.5V,1.8V, 1.5V정도가 있습니다. 참고로 3.3V는 대강 0.35um, 2.5V는 0.25um/0.22um, 1.8V는 0.18um/0.15um, 1.5V는 0.13um공정의 실리콘 다이를 갖고 있습니다. 즉, 이것은 각 회사가 임의로 설정하는 것이 아니라 반도체 공정의 발달에 따른 어쩔 수 없는 부분이자 저전력으로 가는 장점이기도 합니다. 하지만 동작 전압이 낮을 수록 전원설계를 잘 해야 할 것입니다. 노이즈에 약하기 때문에..
b) I/O voltage는 외부 디바이스와의 인터페이스 때문에 잘 살펴보셔야 합니다. 반도체 공정이 발달할 수록 이쪽 전압도 상대적으로 낮아져야 하는데 디바이스에 따라서 기존의 외부 디바이스와 인터페이스를 고려하여 5V tolerant한지, 3.3V를 여전히 지원하는지 등등의 상황을 잘 살펴보셔야 한다는 것입니다. 이것도 소홀히 했다고 괜히 낭패를 볼 수가 있습니다.

- 네번째, 성능입니다.
가끔씩 어떤 디바이스가 100MHz이상으로 동작합니까? 등등의 질문을 하는 분이 계십니다. 이것에 대한 답은 "모르겠다 "입니다. 회사마다 새로운 디바이스가 나올 때 몇몇 기본 펑션, 예를 들어 카운터, 쉬프트레지스터, 멀티플라이어등등에 대한 벤치마크 결과를 내놓습니다만 이것만 가지고는 내 디자인이 과연 원하는 속도로 동작할 수 있을지 의심스럽기 마련입니다. 가장 정확한 방법은 어느 정도 디자인이 끝나면 툴에서 직접 컴파일하여 타이밍 리포트를 살펴보는 것입니다. 오랜 경험이 있는 사람들은 이전에 어떤 디바이스에서 내 디자인이 대강 어느 정도의 속도로 돌았으니까, 데이터시트를 보고 이번에는 대충 이 정도는 되겠지 하는 상대적인 추측을 할 수가 있습니다. 하지만 처음 설계하는 사람들은 난감하기 이를데 없습니다. 참고로 요즘(2003년도)에 출시되는 여러 FPGA들은 100MHz정도의 속도는 불가능한 수치가 아니라는 것입니다. 100MHz정도갖고 되겠냐 하시겠지만 불과 1-2년전에는 50MHz가 대강의 기준선이었습니다.^^
그리고 같은 디바이스라도 speed grade가 다른데 대충 한 그레이드가 올라갈 때 15%정도의 성능향상이 있다고 생각하면 될 것입니다. 정확한 것은 데이터 시트를 참조하시고요..

하여간에 가장 안전한 것은 툴에서 직접 돌려보는 것입니다.

- 다섯번째, 가격입니다.
돈! 엔지니어가 간과하지 말아야 할 것이 비용입니다. 가격 가이드라인때문에 선택의 폭이 좁아지는 경우가 종종 있습니다. 엔지니어들은 개발시 성능과 기능이 먼저이기에 그쪽을 우선시하여 디바이스를 선택하는 경향이 있는데 실제 양산에 들어가서 제품가격경쟁에 들어가면 수정이 불가피한 경우가 종종 있습니다. 그럴 경우, 두 가지 방법이 있지요. 하나는 벤더를 갖은 방법으로 협박해서 가격을 맞추게 하든가, 디바이스를 바꾸든가..
아뭏든 가격은 미리 잘 생각하시길..
참고로 FPGA의 가격은 대강 1년에 30%안팎으로 떨어지는 경향이 있습니다. 그리고 당연하지만, 수량에 따라 그 단가가 많이 차이가 나고요...




출처 : http://www.icbanq.com/cafe_net/board_View.aspx?number=430&boardNum=5

'[FPGA]' 카테고리의 다른 글

[Altera] spread spectrum clocking  (0) 2015.05.22
[Altera] timing simulation 방법  (0) 2015.03.05
[Altera] pin Name and Function  (0) 2014.12.16
[altera] UniPHY를 이용하여 DDR3 interfacing하는 방법  (0) 2014.11.25
OSD 구현 방법-2  (0) 2014.09.25