2010년 1월 3일 일요일

FPGA 이야기 - 4

FPGA을 이용한 설계를 할 경우, 검토해야 하는 것들에 대해서 알아봅니다.

  • FPGA 선정
FPGA Vendor에서는 여러 가지 제품 군을 가지고 있고, 동일한 제품군 내에서도 LUT의 갯수나 사용할 수 있는 내부 SRAM의 bit수, package type에 따라서 다양한 제품을 공급하고 있습니다. 원하는 시스템을 만들기 위해서는 어떤 요소를 고려하여 FPGA를 선정해야 하는지를 알아 봅니다.

(a) FPGA 내부의 hardware logic
FPGA 내부에는 LUT/SRAM을 제외하고도 ARM/PowerPC 같은 hardwired CPU가 들어 있다거나 Gigabit ethernet MAC, High speed serial I/O등의 전용 block이 들어 있는 제품이 있습니다. 설계하고자 하는 시스템에서 필요한 feature가 FPGA 내부에서 지원되는 것이 일반적으로 좋다고 볼 수 있습니다. 다만 FPGA 외부에 별도로 해당 기능의 chip을 연결하는 방법으로 구현할 수 있으므로, FPGA 내부 hardware를 사용하는 것이 유리한지를 정확하게 판단할 필요가 있습니다.

(b) Pin count
설계할 시스템을 검토하다 보면, FPGA에 연결될 다른 chip 들은 결정할 수 있습니다. 해당 chip 들과 FPGA를 연결하기 위해서는 충분한 pin count가 확보된 FPGA를 골라야 합니다. 아래에서 알아보겠지만 FPGA의 I/O pin은 Bank로 나누어져 있어서 모든 pin을 다 활용하지 못할 가능성이 있으므로 단순히 maximum I/O pin의 갯수만 보고 판단해서는 안됩니다.

(c) Design의 크기
사실 FPGA 내부에 들어갈 logic 설계가 모두 끝났으면, 그것을 합성해서 가장 tight하게 들어가는 FPGA를 고르는 것이 가격적인 면에서 유리합니다. 예를 들어 FPGA 내부의 LUT 상당 수가 아무런 일을 안하고 있다면 FPGA 선정이 잘못 되었다고 볼 수 있습니다. 문제는 logic 설계가 끝나기 전에 FPGA를 선정하고 test board를 만들어야 하는 경우가 많습니다. 이런 경우를 대비하여 FPGA Vendor에서는 동일한 package에서 크기가 다른 제품들을 생산합니다. 일단 어느정도 큰 FPGA를 선택하여 test board를 만들어 테스트하고, 설계가 완료되어 크기를 정확하게 알게 되면 board  변경 없이 동일한 package를 가진 작은 FPGA로 갈아 탈 수 있습니다.

(c) Design의 timing
당연히 설계한 내용이 원하는 속도로 움직여 주어야 합니다. 설계한 내용을 변경하여 속도를 맞출 수 있는 방법으로, flip flop을 더 많이 넣거나, parallezing하거나 하는 등의 방법을 사용하는데, 이 경우 설계한 logic의 크기가 어느 정도 증가하게 됩니다. 따라서 크기 증가 없이 좀더 높은 속도를 달성하려면, 당연히 좀더 빨리 동작하는 제품군, 혹은 동일한 제품이라도 speed grade가 더 좋은 것을 선택해야 합니다.

(d) 나머지 engineering issue
당연히 시스템의 동작 온도/환경 특성을 고려하여 FPGA를 선정해야 합니다. 일반적으로 consumer/industrial/automotive/military 규격에 부합하는 동작 온도 특성이 있습니다. 만약 자동차에 내장하고 싶으면 automotive 규격이나 좀 더 동작 온도 보장 범위가 넓은 military 규격의 FPGA를 사용해야 하는데, 그런 규격으로 나오는 FPGA의 종류는 제한되어 있으므로 그것을 고려해야 합니다. FPGA 중에서는 심지어 Aerospace라고 해서 아마도 우주선이나 위성 등을 만들 때 써도 안정성 보증된 것도 있습니다.

기타 아래에서 설명할 design security와 structured asic 지원 여부도 검토 대상입니다.

(e) 기타
사실 설계할 시스템의 판매가, 생산량 및 개발 기간 등에 따라서 FPGA 선정은 영향을 많이 받습니다. 예를 들어 한 10대 생산하여 고가에 납품하고 끝나는 시스템을 위해서 FPGA 가격을 낮추고 뭐 이런 것 할 필요가 없겠죠.

요소라고 하기에는 그렇지만 FPGA를 선정할 때 꼭 가격 확인을 해야 합니다. 미국에서도 그런지 모르겠지만, 국내에서는 Xilinx FPGA를 구하게 되면, FPGA의 가격이 크기 순서대로 정해져 있지 않은 경우가 있습니다. 주로 많이 팔리는 FPGA가 비교적 싼 가격을 가진다고 합니다. 또한 동일한 크기의 FPGA의 경우 일반적으로 최신 제품군에 있는 제품이 가격이 더 쌉니다. 최신 제품군 FPGA의 경우 좀더 미세한 공정을 사용하므로 die size 면에서 유리하기 때문입니다.

  • Board 설계시 유의 사항
FPGA Board를 설계하는 것은 다른 일반적인 Board를 설계하는 것에 비해서 쉬울 수도 있고, 고려해야 할 것들이 오히려 많을 수도 있습니다. 우선 FPGA에서 dedicated function으로 동작하는 pin의 갯수가 매우 적습니다. FPGA Configuration에 관련된 pin과 high speed serial I/O pin 정도가 dedicated fuction pin입니다. 해당 pin은 FPGA Application Note 등을 참고로 하여 정확하게 연결해야 합니다.
나머지 pin 들은 사용자의 설계에 따라서 다양한 형태로 각종 interface 표준을 맞추어 이용할 수 있습니다. 즉, 일반적으로 FPGA와 다른 chip을 연결할 때 pin-to-pin으로 대충 연결해도 무방하다는 뜻입니다. 하지만 제한적인 요소가 몇가지 있습니다.

우선 global clock pin이 따로 있고, 이 pin에서 들어오는 signal은 FPGA내부의 PLL과 연결도 쉽고 FPGA 전체로 퍼져있는 clock buffer tree와 연결하기도 쉬운 구조로 되어 있어서 입력 pin에서 FPGA 내부의 flipflop까지의 signal delay가 작습니다. 외부 clock을 꼭 global clock pin에 연결해야 하는 것은 아니지만, clock이 매우 빠르고 해당 clock으로 FPGA pin에 인가된 signal을 latch해야 하는 경우에는 global clock pin을 쓰는 것이 여러가지 면에서 권장됩니다. global clock pin은 clock으로 사용하지 않을 경우에는 일반 input pin이나 output pin으로 쓸 수 있습니다.

I/O pin들이 bank라는 이름의 group으로 나누어져 있습니다. 그리고 해당 bank에 I/O Power pin들은 모두 연결되어 있으므로 동일한 전압을 인가해 주어야 합니다. 따라서 같은 bank의 pin이 서로 다른 I/O voltage를 요구하는 interface를 사용할 수는 없습니다. 예를 들어 어떤 bank의 특정 pin을 LVTTL(3.3V Power 요구)로 이용하고, 다른 pin은 SSTLII-1.8(1.8 V Power 요구 : DDR2 SDRAM에서 사용하는 interface)를 사용하는 식의 구성은 안됩니다. 또한 I/O Interface에 따라서 reference voltage가 필요한 경우가 있는데(예 : SSTLII-1.8의 경우, Power 외에 reference 0.9V가 필요함), 이런 경우 reference voltage의 입력으로 사용할 pin이 정해져 있으므로 주의 해야 합니다.

그리고 LVDS와 같은 differential I/O의 경우 differential pair가 정해져 있으므로 아무렇게나 고른 두 개의 pin으로는 연결하면 안되고, 꼭 pair를 맞추어 연결해야 합니다.

  • Structured ASIC
FPGA의 가격은 작은 것들은 몇 달러부터 시작하지만, 어느 정도 큰 것들은 수천불까지 합니다. 시스템의 판매량이 적고, 고가라면 크게 문제가 되지 않겠지만, 판매량이 많고, 상대적으로 시스템 판매 가격 중에 FPGA의 가격이 차지하는 비중이 크다면, 가격이 싼 솔루션을 찾을 필요가 있습니다. 당연히 연간 수십만대, 수백만대씩 팔린다면, 비싼 FAB NRE와 상당히 긴 개발 기간을 감수하고도 chip을 직접 만드는 것이 유리할 가능성이 큽니다. 하지만 만대~수만대 정도 된다면 chip을 만드는 것은 고려하기 곤란한데, 이때 선택할 수 있는 것이 Structured ASIC이라는 방법입니다.

일반적인 Structured ASIC은 Gate Array와 FPGA의 중간 정도 영역에 있는 설계 방법입니다. Structured ASIC은 FPGA와 같이 LUT/SRAM 등의 표준화된 요소들을 이용하여 설계하는데, FAB에서 직접 생산되는 점이 다릅니다. 즉, "Field Programmable"하지는 않습니다. Gate Array와 마찬가지로, LUT/SRAM 등이 들어 있는 wafer에 사용자의 logic 부분에 해당 하는 것만 metal layer를 이용하여 추가로 구현하는 방식으로 되어 있어 NRE가 비교적 저렴하고, 생산까지 소요되는 기간이 짧다는 장점이 있습니다. 일반적인 Structured ASIC 분야에서는 eASIC, CHIPX 등의 회사가 유명한 것 같습니다.

Altera에서도 이런 Structured ASIC을 제공합니다. HardCopy ASIC이라는 이름으로 제공하는데, Altera의 high performance FPGA 제품군인 Stratix 시리즈의 FPGA에 대응되는 형태입니다. 만약 설계자가 Stratix 시리즈의 FPGA를 이용하여 digital logic을 구현하였다면, 그 구현 내용을 Altera에서 FPGA와 동일한 동작을 하는 ASIC을 생산해 주는 형태입니다. 설계 내용을 바탕으로 SRAM based LUT를 metal layer와 LUT보다 작은 크기를 가지는 cell을 이용하여 특정한 기능으로 고정하고, programmable routing도 metal layer를 이용하여 고정하는 방법으로 cost reduction(die size 감소)을 하게 됩니다. FPGA 기반의 설계 내용을 1대1 매핑을 통하므로 risk가 상당히 낮습니다. NRE도 chip을 직접 만드는 것에 비해 저렴할 것으로 예상됩니다. 또한 LUT와 routing 등이 고정되므로 좀더 빠른 동작속도를 가질 수 있는 것과, power consumption이 줄어든다는 것, 그리고 configuration이 필요 없다는 것 등이 부가적인 장점입니다.

Xilinx에서도 EasyPath라고 하는 cost reduction 방법을 제공하는데, 이것은 엄밀히 말해서 structured ASIC이라고 할 수는 없습니다. Xilinx의 white paper를 살펴보면 Effective Die Size니 뭐 어렵게 설명하고 있는데, 결국 EasyPath는 FPGA를 생산하는 과정중에 테스트를 줄이는 방식으로 cost reduction을 하는 것으로 보입니다. 사용자의 설계 내용을 살펴보고, FPGA에서 사용하지 않는 요소들은 테스트 하지 않거나, 사용하지 않는 요소들의 불량으로 인해 불량품 판정을 받은 FPGA를 재활용(?)하는 방법으로 cost reduction을 하게 됩니다. 아무래도 Altera HardCopy에 비해서는 cost reduction이 크지 않을 것이라는 예상이 가능하고, 사용자는 FPGA를 싸게 공급 받는 것 뿐이므로, Altera HardCopy와 같이 power, 동작 속도, configuration 관련 부분이 필요 없다는 부가적인 잇점은 없습니다. 대신 Altera HardCopy에 비해서 NRE가 저렴하고, Risk가 더 적을 것이라는 예상이 가능합니다.

  • Design Security
회사에서 많은 노력과 비용을 들여 만든 시스템을 악의적인 다른 회사가 간단한 reverse engineering 만으로 동일한 기능의 제품을 만들 수 있다면 어떻게 될까요? 대부분의 시스템 회사가 시중에서 팔리는 chip을 이용하여 설계를 하기 때문에, 다른 회사의 악의적인 도용에 항상 노출되어 있습니다. 보드의 구성을 파악하여 동일하게 만들고, ROM이나 Flash 등의 비휘발성(non-volatile) memory에 들어 있는 data를 복사하면, 이른바 dead copy를 어렵지 않게 만들 수 있습니다.
FPGA를 이용한 시스템도 동일한 위험에 노출되어 있습니다. 많이 사용하는 SRAM based FPGA는 외부의 program memory chip 등에서 configuration data를 loading해야 동작을 합니다. JTAG 등을 이용하여 Program memory chip이나 FPGA의 configuration data를 읽어내는 간단한 방법을 사용하거나, configuration data가 loading될 때 logic analyzer 등을 이용하여 data를 capture하는 방법을 사용하면, dead copy를 만들 수 있습니다. FPGA 시스템의 경우 BOM cost에 비해서 고가로 팔리는 경우가 많고, 개발을 위해서 노력과 시간이 다른 시스템에 비해 더 많이 걸리는 경우가 많아서, 좀더 위험하다고 볼 수 있습니다.
이러한 Design Security 문제를 해결하기 위해서 많은 방법이 있을 수 있습니다. 우선 Anti-fuse 방식 혹은 Flash 기반의 FPGA를 선택하면, configuration data가 board 위에서 돌아다니지 않으므로 좀더 안전하고, JTAG이나 다른 방법(예를 들어 FPGA에 configuration data를 읽어 밖으로 내보내는 design을 download하여 수행하고 외부에서 capture하는 방법)으로 configuration data가 읽어지지 않게 하면 됩니다. 하지만 많이 사용되는 SRAM based FPGA는 기본적으로 configuration data가 FPGA 외부에서 인가되어야 하므로 좀더 어려운 방법이 요구되는데, FPGA Vendor에서는 아래와 같은 방법을 제공합니다.

(1) Configuration Bitstream Encryption
Configuration data를 AES(Advanced Encryption Standard)와 같은 방법으로 암호화하는 방법을 사용하는 FPGA 제품들이 있습니다. Board 위에서는 Encrypted data만 FPGA로 전달되고, FPGA 내부에서 decryption을 하여 configuration이 진행됩니다. 이 때 FPGA 내부에는 사용자가 정한 암호화를 위한 key 값이 저장되어 있어야 하는데, 이 key 값은 정상적인 방법으로는 읽어 낼 수 없고, key 값이 없이 encrypted data를 reverese engineering으로 decrypt하는 것은 수학적으로 어렵다고 알려져 있습니다. key 값은 보통 JTAG을 통해서 FPGA에 쓰여 지는데, FPGA에서 이 key 값을 어떻게 유지하고 있느냐가 문제입니다. Altera에서 나온 Startix II/III/IV와 같은 FPGA에서는 이 key 값을 OTP(One Time Programmable) memory에 담고 있어서 한번 write하면 계속 그 key 값을 유지합니다만, 나머지 FPGA들은 대부분 key를 담고 있는 memory도 SRAM을 사용하여 key 값을 유지하기 위해서는 전원이 필요합니다. 이 경우에는 key값을 저장하는 SRAM에 별도로 전원을 인가할 수 있는 구조로 되어 있어, 외부에 코인(coin) 건전지 등을 달아서 key 값을 유지시킬 수 있는 구조로 되어 있습니다. 보통의 코인 건전지로 수년간 key 값을 유지할 수 있다고 하는데, 그만큼 유지하는지는 확인해 본 적은 없습니다.

(2) 별도의 Security Chip 이용
다른 방법으로 별도의 Security Chip을 이용하는 방법이 있습니다. 아래의 Altera 문서를 보면 Maxim에서 나온 DS28E01이라는 chip을 이용하는 방법이 자세히 나오는데, 다른 Vendor의 FPGA에서도 사용할 수 있는 방법입니다.
An FPGA Design Security Solution Using a Secure Memory Device
외부 Security Chip에 Random Number를 이용하여 Challenge-Response 방식의 인증을 요청하고, 이 인증에 문제가 없는 경우에만 동작하도록 하는 logic을 FPGA 내부에 구성하는 방법입니다. 이 때, FPGA 내부에 Random Number를 만드는 방법(이것도 아주 간단하지는 않습니다)과 key값을 이용한 hash algorithm 등의 logic이 구성되어야 하는데, FPGA configuration data는 capture할 수 있으므로 reverse engineering을 열심히 하면 깰 수는 있을 겁니다. 다만 그러한 reverse engineering을 통해서 시스템을 도용하려고 하는 시간과 노력이 더 많이 필요할 뿐입니다.

1 개의 댓글:

익명 :

도움이 많이되었습니다^^ 감사합니다

댓글 쓰기