답변:
그것들은 회로에 로직을 추가하는 전자 부품입니다 (따라서 마이크로 컨트롤러와 유사합니다). 그러나 디자인 방식은 uC (마이크로 컨트롤러)와 완전히 다릅니다. uC에서는 내부 uC 디자인을 변경할 수 없습니다. "클래식"프로그램 만 실행할 수 있습니다. FPGA 프로그래밍은 새로운 하드웨어를 만드는 것과 비슷합니다. 논리 게이트 사이에 새로운 연결을 만들고 새로운 특수 프로세서를 만듭니다. 또한 집, 책상 및 PC에서 모든 작업을 수행 할 수 있습니다.
멋진데? 예, 그러나 몇 가지 단점이 있습니다. 예를 들어, 가격 (비교하기가 어렵다), 더 높은 전력 소비 및 더 낮은 클럭 속도 (그러나 스마트 한 방식으로 애플리케이션을 설계하고 한 클럭주기에서 더 많은 작업을 수행 할 수 있음).
유용한 링크:
사용법 예 : http://nsa.unaligned.org/
FPGA는 말 그대로 현장에서 프로그래밍 할 수있는 로직 게이트 배열입니다. C와 같은 언어 (Verilog)를 사용하여 원하는 방식으로 연결할 수있는 플립 플롭, 멀티플렉서, 4 비트 룩업 테이블 등.
AVR과 같은 uC도 유사한 논리 게이트로 구성되지만 장치를 만들 때 구성됩니다. 물론 RAM과 플래시가 있으므로 입력을 읽고 출력을 제어하는 소프트웨어를 작성할 수 있지만 실제 게이트 배열을 변경할 수는 없습니다. 게이트는 항상 ALU, 메모리 컨트롤러, 직렬 포트 등으로 배열됩니다.
uC의 장점은 C와 같이 사용하기 쉽고 친숙한 고급 언어를 사용하여 현장에서 (책상에서) 프로그래밍 할 수 있다는 것입니다. 문제는 소프트웨어가 "느린"것입니다. 가장 간단한 경우에 입력이 출력을 제어하도록하려면 다음과 같이 쓸 수 있습니다.
무효 루프 () {buttonState = digitalRead (buttonPin); if (buttonState == HIGH) {
digitalWrite (ledPin, HIGH);
} else {digitalWrite (ledPin, LOW); }}
이는 12 개의 어셈블리 명령어로 바뀌므로 루프는 하나의 입력에서 하나의 출력을 제어하는 데 1 초가 걸립니다. 그리고 전체 uC 칩이 그렇게 빨리 수행해야합니다. 물론 훨씬 더 많은 작업을 수행 할 수 있지만 uC가 다른 작업을 수행함에 따라 출력을 제어하는 기능이 느려집니다.
FPGA에서, 게이트가 입력을 1 클록 출력으로 제어하도록 구성 할 수 있습니다. 따라서 출력은 아마도 25 나노초의 지연으로 입력을 따릅니다. 동일한 클럭주기를 사용하면 40 배 더 빠릅니다. 그리고 FPGA의 나머지 게이트는 다른 많은 작업을 수행 할 수 있으며이 작은 기능의 속도에는 영향을 미치지 않습니다.
FPGA 코드는 간단한 플립 플롭입니다.
항상 @ (포지션 클럭) ledPin <= buttonPin;
이것은 FPGA에서 수만 개 중 단 하나의 FPGA 셀, 약 40 개의 게이트 만 사용합니다.
예를 들어 FPGA를 다시 프로그래밍하여 다른 작업을 수행 할 수 있습니다. 예를 들어 4 개의 입력 조합을 기반으로 LED를 1 개의 클럭으로 여전히 1 개의 FPGA 셀을 사용하여 제어 할 수 있습니다. 또는 몇 개의 FPGA 셀 (100의 게이트)에서 입력의 직렬 스트림을 기반으로 LED를 제어합니다. 따라서 직렬 스트림을 매우 빠른 속도 (약 20MHz)로 직렬 데이터 (예 : "ON"또는 "OFF")를 기반으로 LED를 제어 할 수 있으며 여전히 FPGA 용량의 작은 부분 만 사용할 수 있습니다.
따라서 FPGA의 장점은 분명히 속도입니다. 그것은 uC가 할 수있는 모든 일을 할 수 있으며 모든 것이 병렬로 이루어 지므로 훨씬 더 빨리 할 수 있습니다. uC가 밀리 초에 걸리는 복잡한 작업, FPGA는 마이크로 초 이하로 수행 할 수 있습니다. FPGA에 게이트가 남아있는 한, FPGA에서 이전 기능의 속도 나 작동에 영향을주지 않고 더 많은 기능을 추가 할 수 있습니다. 그런데 FPGA는 20MHz의 클럭 속도를 매우 쉽게 실행할 수 있습니다.
비용은 차별화 요소가 아닙니다. 필자는 아두 이노 AVR 칩과 거의 같은 5 달러 정도의 아두 이노 디자인을 구현할 수있는 FPGA를 구입할 수있다. FPGA를위한 무료 툴체인 (IDE, 컴파일러, 디버거)도 있습니다.
힘은 차별화 요소가 아닙니다. uC와 동일한 기능을 얻기 위해 훨씬 낮은 클럭 속도로 FPGA를 실행할 수 있고 게이트의 작은 부분 (사용하지 않는 게이트는 누설 전력 만 사용)을 사용하므로 FPGA는 거의 모든 uC 기반의 전력을 능가 할 수 있습니다 디자인.
FPGA의 가장 큰 단점은 uC 프로그램보다 코드를 정의, 작성 및 사소한 FPGA 설계를 디버깅하는 것이 훨씬 더 복잡하고 시간이 많이 걸린다는 것입니다. 저녁에 할 수있는 전형적인 uC 프로젝트는 FPGA에서 며칠이 걸릴 수 있습니다.
잠재적으로 고칠 수있는 다른 문제는 대부분의 사람들이 소프트웨어 프로그래밍에 대한 교육을 받았지만 하드웨어 프로그래밍을 이해하는 사람은 거의 없다는 것입니다. Verilog를 상당히 쉽게 배울 수 있습니다. 그러나 소프트웨어 디자인 대신 하드웨어 디자인 측면에서 생각해야합니다. 디자인 패턴은 매우 다릅니다.
또 다른 문제는 FPGA가 8 ~ 20 핀 DIP 패키지로 제공되지 않는다는 것입니다. 100 핀 이상의 표면 실장 패키지로 제공되는 경향이 있으므로 보드를 만드는 것이 더 어렵습니다.
그리고 마지막 문제는 사용하기 쉬운 uC에서 많은 흥미로운 프로젝트를 잘 구현할 수 있다는 것입니다. 왜 FPGA로 귀찮게합니까?
기본 논리 게이트에 익숙하다면 사실상 순간적인 게이트임을 알아야합니다. A, B 또는 C가 변경되면 작업 A 및 B OR C가 즉시 변경됩니다.
FPGA는 프로그래머블 로직 게이트의 매트릭스입니다. 입력과 출력을 (입력의 조합으로) 정의 할 수 있습니다.
uC에서 A + B / C * sqrt (D)는 몇 번의 클럭주기와 메모리가 필요합니다. FPGA에서 결과는 거의 즉각적입니다.
그들은 비디오, DSP, 암호화에 좋습니다 ...
이것이 주요 장점입니다. 현대 FPGA는 현재 메모리에 적합하며 uC / FPGA 하이브리드가 있습니다.
그것들은 범용 컴퓨터보다 훨씬 빠르게 암호화 키를 해독하는 데 사용됩니다. :디