왜 FPGA가 보편적이지 않습니까?


65

FPGA에 대해 읽으면 올바르게 이해하면 기본적으로 완전히 구성 가능한 논리 게이트 회로입니다. 이것으로, 그들과 함께 무엇이든 디자인 할 수 있습니다. 하나는 가능한 가장 맞춤화 된 방식으로 모든 것을 설계 할 수 있으므로 마이크로 컨트롤러를 사용할 수있는 훨씬 더 효율적인 방식으로 동일한 목적을 충족시킵니다. 이를 통해 FPGA는 언제 어디서나 마이크로 컨트롤러를 능가하는 것처럼 보입니다. 내 질문은, FPGA가 정말 대단하다면 마이크로 컨트롤러보다 훨씬 더 널리 퍼지지 않는 이유는 무엇입니까? 이 관점에서 볼 때, FPGA는 오래 전에 마이크로 컨트롤러를 없애 버린 것 같습니다. 그렇다면 왜 그렇지 않습니까? 비용, FPGA 프로그래밍이 어려운가?



이 글을 읽고 싶을 수도 있습니다 : electronics.stackexchange.com/questions/4382/…
Tom L.

43
헬리콥터는 자동차보다 융통성이 뛰어나므로 왜 출퇴근을 위해 자동차를 사용하는 사람이 있습니까?
Olin Lathrop

15
모든 FPGA 회사는 학습 곡선이 크고 대부분의 개발자가 액세스 할 수없는 완전히 끔찍한 독점 도구를 제공하기 때문입니다. 이를 완전히 개방 된 툴체인으로 교체하면 유비쿼터스 일 수 있습니다.
R ..

@R .. ... 또는 적어도 절대적인 최후의 수단 옵션을 선택하지 마십시오.
Dan Neely

답변:


94

디자인을 선택하는 데 필요한 많은 요소를 무시하고 있습니다.

  1. 비용 . FPGA는 동일한 로직 복잡성을 위해 마이크로보다 비싸다.

  2. 논리 복잡성 . 실행 가능한 코드는 직접 사용되는 마이크로에서 동일한 수의 게이트보다 훨씬 더 복잡한 로직을 구현할 수 있습니다.

  3. 개발 용이성 . 작은 문제를 제외한 모든 문제에 대한 논리를 정의하는 것보다 실행 가능한 코드를 작성하는 것이 더 쉽습니다. 겸손한 마이크로 컨트롤러 프로젝트에도 수천 줄의 코드가 있습니다. 동등한 논리 정의를 개발하는 데는 훨씬 더 오래 걸리고 디버그 및 검증하기가 훨씬 더 어려워집니다.

  4. 소비 전력 . FPGA는 마이크로가 처리 할 수없는 고속 작업 (마이크로를 사용할 것)을 위해 만들어 졌기 때문에 저전력에 최적화되어 있지 않습니다. 따라서 일부 저전력 응용 제품에는 적합하지 않습니다. 일부 마이크로는 1µA 미만의 슬립 전류를 가지고 있으며 느린 클럭 속도로 불과 몇 µA에서 작동 할 수 있습니다. 이를 수행 할 수있는 FPGA를 찾아보십시오.

FPGA와 마이크로의 주요 장점은 더 빠르고 병렬로 더 많은 작업을 수행 할 수 있다는 것입니다. 그 외에는 마이크로를 사용하는 것이 좋습니다. 따라서 설계 프로세스에서 일반적으로 마이크로로 시작한 다음 실제로 속도 및 / 또는 동시 고속 작동이 필요할 때 격렬하게 FPGA로 이동합니다. 그럼에도 불구하고 FPGA에서는 속도가 중요한 부분 만 구현하고 저속 제어 기능 등을 마이크로에 남겨 둡니다.


2
"그런 경우에도 FPGA에서 속도에 중요한 부분 만 구현하고 저속 제어 기능 등을 마이크로에 남겨 둡니다." 그리고 그것은 FPGA 개발이 고통스럽기 때문입니다.
Utku

2
@Utku : 예, 위의 이유 3이지만 이유 1-2도 일반적으로 적용됩니다. 마이크로 소프트 가 할 수없는 고속 요구 사항을 가지고 있지 않는 한 , FPGA는 동일한 태스크에 대해 마이크로만큼 비용 효율적 이지는 않다.
Olin Lathrop

4
이 답변은 CPU 사용자 관점에서 작성되었다는 것을 쉽게 알 수 있습니다. "실제로 속도 및 / 또는 동시 고속 작동이 필요할 때 FPGA로 가십시오". 그들은 그렇게 나쁘지 않습니다. 하나조차하지 않을 응용 프로그램이 있습니다 생각 FPGA를 통해 CPU를 사용하는가.
stanri September

26
내가 일반적으로 설명하는 방법 : CPU에서 병렬로 작업을 수행하는 것은 어렵고 FPGA에서 직렬로 작업을 수행하는 것은 어렵습니다.
벤 잭슨

14
FPGA에 대해 기억해야 할 한 가지 중요한 점은 로직의 재구성 가능성이 대가입니다. FPGA가 구현하는 동등한 로직은 FPGA 자체보다 훨씬 덜 복잡합니다. 모든 룩업 테이블, 라우팅 매트릭스 구성 요소 등은 하드 로직의 동등한 구현보다 훨씬 더 많은 실리콘 면적과 전력을 소비합니다. 이는 마이크로 컨트롤러, 범용 CPU 및 FPGA 자체에서와 동일한 기능을 실리콘에 직접 구축하는 것보다 모든 성능 메트릭 (활성 및 유휴 전력 소비, 밀도, 클럭 속도 등)에서 FPGA가 더 나쁘다는 것을 의미합니다.
alex.forencich

45

여기서 자세히 설명하지 않은 한 가지 차이점은 FPGA가 프로세서 와 완전히 다른 방식 으로 사용되고 동작 한다는 것입니다.

FPGA는 똑같은 작업을 계속 반복해서 잘 수행합니다. 예를 들어 비디오, 오디오 또는 RF 신호 처리 또는 이더넷 패킷 라우팅. 또는 유체 흐름을 시뮬레이션합니다. 동일한 종류의 데이터가 많이 빠르게 발생하고 동일한 방식으로 처리하려는 모든 상황. 또는 동일한 알고리즘을 반복적으로 실행하려고합니다. FPGA에는 실제로 시작하고 중지하는 '태스크'가 없으며 [1] 전체 작업은 데이터가있는 한 데이터에 대해 동일한 작업을 수행하는 것입니다. 기어를 바꾸지 않고 다른 일을하지 않습니다. 최고의 생산 라인 노동자입니다. 가능한 한 빨리 반복적으로 같은 일을 반복 할 것입니다.

반면에 CPU는 유연성의 전형입니다. 그들은 무엇이든 할 수 있도록 프로그래밍 할 수 있으며 동시에 여러 가지 다른 일을하도록 프로그래밍 할 수 있습니다. 그들은 시작하고 멈추는 작업을 가지고 있으며 기어를 바꾸고 멀티 ​​태스킹하며 끊임없이 기능을 바꾸고 변화시킵니다.

FPGA와 CPU는 완전히 반대입니다. CPU의 필수품은 시간입니다. 작업이 더 빨라져야합니다. 응용 프로그램이 빨리 실행 될수록 더 좋습니다.

FPGA의 필수품은 공간입니다. FPGA는 너무 커서 원하는 작업을 수행 할 수있는 게이트가 너무 많습니다. 대부분의 경우 문제는 속도보다 크기가 더 큽니다 [2].

FPGA가 CPU처럼 작동하도록 할 수 있습니다. CPU IP 코어를 FPGA에 넣을 수는 있지만 다른 사람들이 설명한 이유 때문에 정당화하기는 매우 어렵습니다 [3]. FPGA와 CPU는 각각의 강점과 약점을 가지고 있으며 결과적으로 자체 위치를 가지고 있습니다.


노트:

1) FPGA는 서로 다른 작업을 수행하도록 설계 될 수 있지만, 사전 설계된 특정 숫자 일 수도 있습니다.

2) 속도는 FPGA 설계 사양이기도합니다. 속도와 크기 사이의 절충점입니다.

3) CPU에 FPGA를 넣는 작업은 상대적으로 자주 수행되지만 특정 응용 프로그램에 따라 사례별로 수행됩니다. 예를 들어, 아주 작은 마이크로 컨트롤러가 필요하고 추가 FPGA 공간이있는 경우.

그리고 마지막으로 :이 답변은 크게 단순화되었습니다. FPGA는 매우 다양하고 복잡한 방식으로 사용되며 일반적으로 사용되는 방식에 대한 간략한 개요입니다.


1
"또는 이더넷 패킷 라우팅 또는 유체 흐름 시뮬레이션" 내가 아는 한 ASIC은 일반적으로 전자 (대량 생산)에 사용되며 GPU는 더 빠르고 저렴하며 저전력이며 더 쉽게 프로그래밍 할 수 있습니다.
reirab

1
@reirab 이것들은 FPGA가 잘 수행 할 수있는 일종의 연산의 예였으며, 제가 개인적으로 FPGA를 코딩 한 애플리케이션이기 때문에 염두에 두었습니다. 고양이를 피부에 바르는 방법은 여러 가지가 있습니다. 장치의 선택은 많은 디자인 요소에 달려 있습니다.
stanri

5
@reirab은 FPGA가 ASIC이 할 수있는 모든 것을 낮은 전력과 적은 생산 비용으로 수행 할 수 있습니다. ASIC의 선행 비용이 훨씬 크기 때문에 FPGA의 장점은 프로토 타입 제작 및 대량 생산에 있습니다. 후자는 디자인이 완성되고 많은 것을 만들 때만 의미가 있습니다.
Dan Neely

FPGA 내에서 CPU를 쉽게 구현할 수 있다는 점을 고려하면 CPU가 FPGA보다 융통성이 있다고 주장하는 것은 이상합니다. FPGA는 CPU보다 개념이 훨씬 낮으므로 직접 비교하지 않는 것이 좋습니다.
Voo

이 답변은 정말 귀찮게합니다. "CPU의 필수품은 시간입니다", "GFP의 필수품은 공간입니다." 응? ASIC과 CPU는 정반대이며 FPGA는 중간에 위치하여 두 세계에서 최고와 최악을 모두 얻습니다.
44 분에 악명 높은

20

Olin이 말했듯이 마이크로와 같은 것이 많은 작업에 더 효율적이며 FPGA가 나타나는 곳마다 마이크로가 거의 항상 사용됩니다. 사용 된 실리콘 면적 (비선형 방식으로 비용으로 변환 됨)과 전력 소비는 훨씬 적습니다. 이러한 이유로 FPGA에서 '소프트'MCU를 구현하는 것은 드문 일이 아니지만 그러한 마이크로의 비용과 성능은 압도적입니다.

일부 최신 FPGA에는 유비쿼터스 ARM 시리즈와 같은 하나 이상의 '하드'코어가 포함되어 있습니다. 또한 메모리를 게이트 밖으로 만드는 것은 비효율적이므로 전용 메모리 블록을 포함 할 수 있습니다. 32 비트 마이크로 코어는 일반적인 FPGA에서 작은 실리콘 영역을 차지하므로 상대 비용에 대한 아이디어를 얻을 수 있습니다.

개발이 훨씬 더 어려우며 IP는 LCD 컨트롤러, PCI 인터페이스, 이더넷 MAC과 같은 마이크로 및 전용 SOC 솔루션만큼 자유롭게 사용할 수없는 경향이 있습니다. 그 이유는 HDL 논리 설명을 공개함으로써 디자인의 인스턴스화뿐만 아니라 디자인을 전송하기 때문입니다. 또 다른 이유는 성능이 FPGA의 로직 레이아웃에 의존하기 때문에 개발 중에 많은 노력이 필요하다는 것입니다.

더 복잡한 문제는 대부분의 복잡한 FPGA가 구성을 위해 RAM 기반이며 프로세스 비용은 모든 MCU 온보드의 구성 및 프로그램 메모리를 저장하기 위해 외부 비 휘발성 메모리가 필요하다는 것입니다. 이 메모리는 전원을 켤 때 RAM에로드되어야합니다.

FPGA는 툴박스에서 매우 유용한 도구이지만 MCU 나 ASIC을 곧 보편적으로 대체하지는 않을 것입니다.


10

작업에 실리콘을 가장 잘 사용하는 것은 ASIC이며 낭비는 없지만 학습 곡선, NRE 및 유연성이 없습니다.

칩에 유연성을 구축하는 데는 두 가지 방법이 있습니다. a) 공간에 최적화 된 ALU를 보유하고 저장된 데이터에서 반복해서 사용하십시오. 이를 MCU라고하며, '아무것도하지 않는'넓은 영역의 실리콘, 프로그램 메모리, 장치마다 실행되는 넓은 버스 및 버스 액세스 스위치가 필요합니다. b) 곱셈기, 작은 RAM 및 간단한 CPU와 같이 공간 최적화 된 옵션 옵션을 갖춘 세분화 된 논리를 갖습니다. 이를 FPGA라고하며 '아무것도하지 않는'광범위한 영역의 실리콘, 프로그래밍 가능한 스위치 및 연결 라인이 필요합니다.

분명히 이러한 구조에서 MCU는 직렬 청크로 나눌 수있는 작업에 가장 적합하며 FPGA는 고속 병렬 작업이 필요한 작업에 가장 적합합니다. 응용 프로그램이 무겁고 비용이 실리콘 비용에 의해 지배되는 경우, 두 유형이 자연스럽게 사용되는 방식입니다.

응용 분야가 가볍지 만 부피가 큰 경우 비용은 실리콘이 아닌 패키징에 의해 좌우되며 두 가지 유형 모두 가능합니다. 알테라는 아주 작은 저전력 FPGA를 가지고있어 1 달러짜리 MCU와 경쟁 할 수있다.

저용량 앱의 경우 개발 비용이 지배적 인 경향이 있으며 MCU가 속도가 있다고 가정하면 승리합니다.


9

전력 소비 및 실리콘 활용 측면에서 FPGA는 마이크로 프로세서에 비해 매우 열악합니다.

FPGA는 마이크로에 적용되지 않는 로직 구성 회로에서 실리콘 영역의 대부분을 소비합니다. 마이크로 프로세서의 전용 구현에 필요한 것보다 더 많은 상호 연결이 있어야합니다.

로직이 효율적으로 구현되지 않기 때문에 FPGA는 마이크로 프로세서와 같은 전용 ASIC보다 더 많은 전력을 소비합니다.

FPGA에서 구현할 수있는 모든 기능은 전용 ASIC에서 더 적은 전력 소비, 더 작은 보드 공간 등으로보다 효율적이고 저렴하게 수행 될 수 있습니다. 이것은 볼륨이 NRE를 상쇄하기에 충분히 크다고 가정합니다.


목표가 마이크로 프로세서의 전체 기능 세트를 구현하는 것이라면 반드시 수행하십시오. 특정 작업을 마치면 마이크로 컨트롤러에서 많은 낭비되는 실리콘을 식별 할 수 있습니다. 아마도 프로젝트에서 암호화 엔진이 낭비되는 것일 수 있습니다. 아니면 CAN 주변기기? 아니면 부동 소수점 단위? FPGA의 최고 활용률은 낮지 만, 마이크로 컨트롤러처럼 넓은 영역에서 0 %의 활용률을 겪지 않습니다. (반면, 클록 게이팅에서는 큰 회로의 0 % 사용이 전력 관점에서 매우 바람직하다)
Ben Voigt

8

마이크로 프로세서 기반 dsystems 및 이후의 마이크로 컨트롤러는 여러 개별 작업을 수행하여 서로 다른 시간에 여러 가지 다른 작업을 수행 할 수있는 기능을 통해 엄청난 수준의 기능을 달성 할 수있었습니다. 1976 년에 설계된 아케이드 머신 탱크와 세계에서 두 번째 마이크로 프로세서 제어 게임 머신 인 Atari 2600에서 실행되는 게임 Combat을 비교하는 것이 유익하다고 생각합니다. 게임 플레이에 약간의 차이가 있지만 Atari 2600 하드웨어는 본질적으로 설계되었습니다 최소 비용으로 Tank와 같은 게임을 구현합니다. 다른 ROM 카트리지를 삽입하여 다른 게임을 할 수 있다는 사실은 좋은 보너스였습니다.

게임 탱크를 사용하면 두 명의 플레이어가 화면 주위에서 탱크를 운전하고 서로를 쏜다 각 탱크의 X 및 Y 위치에 대한 "슬립"카운터, 각 플레이어의 샷 X 및 Y 위치, 각 플레이어의 각도 및 각 플레이어의 샷 각도에 대한 위 / 아래 카운터, 각 플레이어의 점수에 대한 카운터, X 및 Y 래스터 빔 -위치 카운터, 그리고 그 위에 많은 제어 회로가 있습니다. ROM에서 플레이 필드 데이터를 가져 와서 표시 할 수있는 하드웨어와 ROM에서 두 플레이어의 탱크와 점수를 가져 와서 표시하는 하드웨어가 있습니다.

Atari 2600에는 2 개의 플레이어 오브젝트, 각각 2 개의 미사일 오브젝트, "볼"이라는 추가 오브젝트가 있으며, 전투에서는 사용되지 않지만 다른 게임에서는 사용됩니다. 각 플레이어 객체마다 8 비트 래치에 저장된 패턴과 각 플레이어에 대한 "지연된"8 비트 래치를 출력하는 하드웨어가있어 다른 플레이어가있을 때마다 기본 8 비트 래치에 복사됩니다. 모양이 업데이트됩니다. 또한 수평 빔 위치 카운터와 스캔 라인 당 2 회 화면에 출력되는 20 비트 재생 필드 모양 래치가 있으며 오른쪽 사본은 왼쪽의 반복 또는 반사로 나타납니다. 충돌을 감지하는 하드웨어가 있지만 그로 인한 결과는 없습니다. 하지 않습니다 물체의 수직 위치 나 래스터 빔의 수직 위치 (!)를위한 하드웨어를 가지고 있지 않으며, 점수 유지, 점수 표시, 게임 시간 등과 관련된 하드웨어도 없습니다.

2600 하드웨어를 생략하는 모든 기능은 카트리지의 소프트웨어에 의해 처리됩니다. 스캔 라인 당 한 번 래스터 빔 위치에 대해 각 객체의 수직 위치를 확인하는 것만 필요하며, 플레이어의 점수와 남은 게임 시간은 프레임 당 최대 한 개만 업데이트하면되며, 플레이어의 점수는 운동장 위의 스캔 라인에 저장됩니다 따라서 운동장 등에 사용되는 것과 동일한 하드웨어를 공유 할 수 있습니다.

FPGA에서 "Tank"와 같은 게임을 구현하는 일반적인 방법은 1976 아케이드 머신과 같은 방식으로 다른 기능을 위해 별도의 회로를 사용하는 것입니다. 이러한 접근 방식은 효과가 있지만 상당한 양의 하드웨어를 사용합니다. 마이크로 프로세서 기반 접근 방식은 교체 된 하드웨어보다 적은 회로를 포함 할 수있는 마이크로 프로세서를 추가하는 대신 하드웨어의 절반 이상을 제거 할 수 있습니다 (2600은 탱크보다 훨씬 정교한 게임을 구현할 수 있으므로 훨씬 더 많은 하드웨어가 필요함) 마이크로 프로세서를 사용하지 않은 경우).

FPGA는 많은 간단한 작업을 동시에 수행 할 수있는 장치가 필요한 경우에 탁월합니다 . 마이크로 프로세서 기반 (또는 마이크로 컨트롤러 기반) 시스템은 일반적으로 더 좋지만 수행해야 할 작업이 많지만 소량을 쉽게 사용할 수 있기 때문에 동시에 처리 할 필요가없는 경우 다수의 뚜렷한 목적을 달성하기위한 회로.


당신도 광산을 놓을 수 없었습니까? ;-)
Scott Seidman

@ScottSeidman : 아케이드 머신에는 X로 그려진 유선 위치에 몇 개의 광산이있었습니다. 2600은 플레이어와 미사일을 모두 보여 주면서 광산을 X로 표시하는 것이 매우 어려웠을 것입니다. 광산이 60Hz에서 깜박이는 것을 신경 쓰지 않는다면 나중에 발견 된 몇 가지 트릭을 사용하여 가능했지만 더 많은 코드가 필요했을 것입니다 (COMBAT는 거의 가득 찬 2K 카트리지입니다. $ FFFE / FFFF의 BRK / IRQ 벡터는 2 바이트 테이블을 보유하는 데 사용됩니다!).
supercat

바운싱 샷 등과 같은 다른 옵션을 기꺼이 포기하려는 경우 Combat에서 광산을 깜박이는 사각형으로 구현할 수 있었을 것입니다. 저의 하나의 작품은 폭격기가 4 배 스프라이트가 아닌 2 배라면 복엽기 대 폭격기가 더 재미있을 것입니다.
supercat

5

전적으로 비용입니다. 마이크로가 30 센트 정도로 낮아질 수 있다면, 저렴한 FPGA는 5 달러 영역에있다. 비용은 그렇게 높은 것처럼 보이지 않을 수도 있지만, 10 만 달러에 판매 할 수있는 방대한 참신 장난감을 만들면 FPGA 가격이 결론을 떨어 뜨립니다.


6
비용은 확실히 하나의 문제이지만, 차이점은 전적으로 모든 마이크로가 FPGA로 대체 될 수 있다고 생각하는 것만 큼 비용이 순진하다는 것입니다.
Olin Lathrop

@OlinLathrop 비용이 문제가 아니라면 마이크로가 할 수있는 모든 일을 FPGA로 수행 할 수 있습니다. 이것은 FPGA가 소프트 마이크로 컨트롤러 코어를 보유 할 수있는 능력으로 입증되었습니다. 문제는 그러한 코어를 보유 할 수있는 FPGA가 최소한 코어가 에뮬레이트되는 마이크로보다 훨씬 비싸다는 것입니다.
vini_i

비용은 단위당 가격보다 훨씬 많은 것을 의미 할 수 있지만,이 분석에 집중하기 만하면됩니다.
Scott Seidman

2
고의로 요점을 놓친 척하거나 조밀한지 알 수 없습니다. 어느 쪽이든, 당신은 아무도 말하지 않은 것에 응답하고 있습니다. 모두 FPGA가 더 비싸고 그 비용이 문제라는 데 동의합니다. 그러나 다시 말하지만, 그것이 유일한 문제 라고 주장하는 것은 잘못입니다. 여러 가지 무료 마이크로 및 FPGA를 제공 한 경우 많은 디자인에서 FPGA보다 마이크로를 사용하는 데는 여전히 중요한 이유가 있습니다.
Olin Lathrop

4
@sleb : 아니요. 비용 차이는 볼륨 때문 만은 아닙니다. 전달 된 게이트 당 필요한 실리콘 면적은 마이크로 컨트롤러와 같은 맞춤형 칩보다 FPGA에서 훨씬 더 큽니다. 게이트 인터커넥트 레벨의 모든 구성 기능을 구현하려면 실리콘 영역이 필요합니다. 대량으로 칩의 가격은 실리콘 영역에 관한 것입니다.
Olin Lathrop

5

다른 좋은 답변에 덧붙여서 FPGA의 채택도 도메인의 문제라고 생각합니다. FPGA

신경 모양 디바이스에 대한 추세를 추정하면 병렬화에 기반을 두거나 비판적으로 요구하는 다른 필드가 FPGA를 훨씬 더 많이 채택 할 것이라고 생각할 수 있습니다. 따라서 FPGA는 일반 소비자 용 제품에 편재하지 않을 수도 있지만 현재는 신경 변형 디바이스에서 발생하는 것으로 보이므로 특정 도메인에 대한 것일 수도 있습니다.


이것이 사실 일 수도 있지만, 완전한 답을 얻기에는 충분하지 않습니다. 아마도 그것은 의견으로 더 좋을 수도 있고, 그것을 확장 할 수도 있습니다.
Null

이것은 질문에 대한 답변을 제공하지 않습니다. 저자에게 비평을하거나 설명을 요청하려면 게시물 아래에 의견을 남겨주십시오.
Funkyguy

3
@ Funkyguy, 이것은 질문에 대답합니다. 그들은 일반적인 소비자 애플리케이션이 FPGA에 적합한 병렬 처리를 필요로하지 않기 때문에 FPGA가 보편적이지 않다고 말합니다.
stanri September
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.