FPGA를 설계하려면 하드웨어 설명 언어 (HDL)가 필요합니다. HDL은 C와 전혀 다르지 않습니다. C 프로그램은 순차적 인 일련의 명령어이며 병렬 실행을 달성하기 위해 자체적으로 왜곡되어야하는 반면, HDL은 동시 회로를 설명하고 순차적 실행을 달성하기 위해 자체적으로 왜곡해야합니다. 그것은 매우 다른 세계이며 소프트웨어 개발자처럼 생각하면서 FPGA에 회로를 만들려고하면 상처를 입을 것입니다.
MCU는 시간 제한이 있습니다. 더 많은 작업을 수행하려면 더 많은 프로세서주기가 필요합니다. 시계는 주파수에 대한 실제 한계가 있으므로 계산 벽에 닿기 쉽습니다. 그러나 FPGA는 공간이 제한되어 있습니다. 더 많은 작업을 수행하기 위해 더 많은 회로를 추가하기 만하면됩니다. FPGA가 충분히 크지 않으면 더 큰 것을 구입할 수 있습니다. 가장 큰 FPGA에는 맞지 않는 회로를 구축하기가 매우 어렵고, FPGA를 데이지 체인 방식으로 연결하는 방법을 설명하는 애플리케이션 노트가 있습니다.
FPGA는 병렬 실행에 더 중점을 둡니다. 때때로 MCU의 ISR이 인터럽트를 처리하는 데 걸리는 시간과 실시간 한계를 달성 할 수 있는지 걱정해야합니다. 그러나 FPGA에는 항상 Finite State Machines (FSM)가 많이 실행됩니다. 그것들은 제어 로직의 작은 구름처럼 "펨토 컨트롤러"와 같습니다. 모두 동시에 실행되므로 인터럽트 누락에 대해 걱정할 필요가 없습니다. FSM은 ADC와 인터페이스하고, 다른 FSM은 마이크로 컨트롤러의 주소 / 데이터 버스와 인터페이스하고, 다른 FSM은 스테레오 코덱으로 데이터를 스트리밍하고, 다른 FSM은 ADC에서 코덱으로 데이터 흐름을 버퍼링하는 FSM을 가질 수 있습니다. 모든 FSM이 조화롭게 노래하도록 시뮬레이터를 사용해야합니다.
FPGA는 PCB 레이아웃 디자이너의 꿈입니다. 그것들은 매우 구성 가능합니다. 다양한 전압 및 구동 강도의 다양한 로직 인터페이스 (LVTTL, LVCMOS, LVDS 등)를 가질 수 있으므로 직렬 종단 저항이 필요하지 않습니다. 핀은 교환 가능합니다. 핀이 칩 주위에 흩어져있는 MCU 주소 버스를 본 적이 있습니까? PCB 디자이너는 아마도 모든 신호를 올바르게 연결하기 위해 여러 비아를 떨어 뜨려야 할 것입니다. FPGA를 사용하여 PCB 설계자는 편리한 순서로 칩에 신호를 보낼 수 있으며, 설계는 FPGA 툴체인에 주석을 달 수있다.
FPGA에는 또한 멋진 멋진 장난감이 많이 있습니다. 내가 가장 좋아하는 것 중 하나는 Xilinx 칩의 Digital Clock Manager입니다. 하나의 클럭 신호를 공급하면 다양한 주파수 곱셈기 및 분배기를 사용하여 원시 50 % 듀티 사이클과 100 % 위상의 신호를 모두 얻을 수 있습니다. 칩 외부의 전파 지연으로 발생합니다!
편집 (부록에 회신) :
"소프트 코어"를 FPGA에 배치 할 수 있습니다. 말 그대로 마이크로 컨트롤러 회로를 함께 연결하거나 Xilinx의 PicoBlaze 또는 MicroBlaze 또는 Altera의 Nios와 같은 다른 사람의 회로를 설계에 떨어 뜨릴 수 있습니다. 그러나 C-> VHDL 컴파일러와 마찬가지로 이러한 코어는 FSM 및 데이터 경로 또는 실제 마이크로 컨트롤러를 사용하는 것과 비교하여 약간 부풀어 오르고 느린 경향이 있습니다. 개발 툴은 설계 프로세스에 상당한 복잡성을 추가 할 수 있으며, 이는 FPGA가 이미 매우 복잡한 칩인 경우 나쁜 일이 될 수 있습니다.
Xilinx의 Virtex4 시리즈와 같이 "하드 코어"가 내장 된 FPGA도 있습니다. 여기에는 FPGA 패브릭이있는 실제 전용 IBM PowerPC가 있습니다.
EDIT2 (댓글에 답장) :
나는 지금 본 것 같다 ... 당신은 이산 MCU를 FPGA에 연결하는 것을 요구하고있다. 즉, 두 개의 개별 칩. 이를 수행 할만한 이유가 있습니다. 하드 코어가있는 FPGA와 적절한 소프트 코어를 지원하기에 충분히 큰 FPGA는 일반적으로 BGA 패키지가 필요한 수백 개의 핀을 가진 몬스터로, PCB 설계의 어려움을 10 배로 쉽게 증가시킵니다.
그러나 C는 훨씬 쉬우므로 MCU는 FPGA와 함께 작동합니다. C를 작성하는 것이 더 쉽기 때문에 MCU에 "두뇌"또는 중앙 알고리즘을 작성할 수 있지만 FPGA는 가속화가 필요할 수있는 하위 알고리즘을 구현할 수 있습니다. 변경하기가 더 쉽기 때문에 변경 사항을 C 코드에 넣어보십시오. FPGA는 자주 변경되지 않는 전용 유형의 항목으로 남겨 두십시오.
MCU 설계 툴도 사용하기 더 쉽습니다. 디자인 툴이 FPGA 비트 파일을 빌드하는 데 몇 분이 걸리지 만 다소 단순한 디자인의 경우에도 복잡한 MCU 프로그램은 보통 몇 초가 걸립니다. MCU에는 잘못되는 것이 훨씬 적기 때문에 디버깅하기도 쉽습니다 ... 복잡한 FPGA가 얼마나 복잡한 지 과언 할 수 없습니다. 실제로 가지고있는 데이터 시트를 가져와야하며 모든 페이지를 읽으십시오. 알다시피, 그것은 수백 페이지입니다 ... 어쨌든하십시오.
연결하는 가장 좋은 방법은 외부 주소 및 데이터 버스와 함께 MCU를 사용하는 것입니다. 그런 다음 간단히 FPGA 회로를 MCU에 메모리에 매핑하고 각각 고유 한 주소를 갖는 고유 한 "레지스터"를 추가 할 수 있습니다. 이제 FPGA는 8 비트 읽기 간의 오버 플로우를 방지하기 위해 첫 번째 바이트를 읽을 때 한 번에 4 바이트를 모두 래치 할 수있는 32 비트 타이머와 같은 사용자 정의 주변 장치를 추가 할 수 있습니다. 또한 별도의 ADC처럼 다른 칩에서 더 많은 주변 장치를 메모리에 매핑하기위한 글루 로직으로 사용할 수도 있습니다.
마지막으로 일부 MCU는 FPGA와 같은 "외부 마스터"와 함께 사용하도록 설계되었습니다. Cypress는 내부에 8051이있는 USB MCU를 몇 개 만들지 만 USB 데이터는 FPGA와 같은 USB 데이터를 생성 / 소비하는 것이 목적입니다.