FPGA 및 마이크로 컨트롤러 [닫기]


36

Arduino 제품군 (특히 Sanguino)에서 일하고 몇 가지 간단한 장치와 간단한 사진을 만들었습니다. 따라서 마이크로 컨트롤러, 특히 Atmel에 매우 익숙합니다. FPGA가 표준 마이크로 컨트롤러와 어떻게 다른지 궁금합니다. 나는 기술 배경 (C / C ++ 프로그래밍) 출신이므로 기술 답변을 좋아합니다. 전자 분야의 초보자 (내 S / W 경험에 비해)임을 명심하십시오. :)

나는 이 쿼리를 겪었고 좋았지 만 더 자세한 내용을 찾고 있습니다.

감사! Sushrut.


부록-현실에서 하이브리드 아키텍처를 사용하는, 즉 fpga를 마이크로 컨트롤러와 결합하는 좋은 예가 있습니까?
Sushrut J Mair

Sushrut J Mair-일반적으로 FPGA가 있고 마이크로가 필요할 때 마이크로 는 FPGA에 구현 됩니다 .
코너 울프

예, 가짜 이름이 동의했습니다. 그러나 FPGA와 MCU가 모두 시스템을 설계하는 데 사용되는 실제 사례를 찾고있었습니다. 핵심 논리 처리가 MCU에 의해 수행되는 동안 설계의 FPGA 부분이 시스템에 대한 입력 변경에 따라 응답하고 변형하는 '진화 가능한'하드웨어를 구현하는 데 사용된다는 아이디어가 있습니다.
Sushrut J Mair

답변:


48

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 데이터를 생성 / 소비하는 것이 목적입니다.


좋은 정보입니다. 감사합니다. C / C ++에서 HDL 컴파일러에 대해 들었습니다. 당신은 그들 모두를 시도 했습니까?
Sushrut J Mair

그들은 ... 좋아. 단일 논리 블록의 경우 그렇게 나쁘지 않습니다. 그러나 그런 종류의 컴파일러를 통해 전체 디자인을 작성하지는 않습니다. 언어가 엄청나게 다르기 때문에 너무 효율적이지 않습니다 ... 특별한 규칙을 사용해야하며 오래된 ANSI C 코드를 사용하지 않습니다.
ajs410

고마워, 이것은 유용하다. Lattice Semiconductor의 XP2 Brevia 개발 키트를 주문했습니다. 기본 FPGA 설계 개념에 익숙해지면 HDL to C 컴파일러를 사용해 보려고합니다.
Sushrut J Mair

원래 쿼리에서 내 부록에 대한 답변을 보았습니다. 고맙습니다-실제 표준 말하기와 FPGA의 하이브리드 아키텍처 (실제로 오늘날의 기술로)는 실제 상황에서 실제로 사용할 수있는 가치가 거의 없습니다.
Sushrut J Mair

대박. 감사합니다 ajs410. 흥미 진진한 하이브리드 아치 가능성에 들어가기 전에 몇 주 동안 fpga로 부팅 할 수 있기를 바랍니다!
Sushrut J Mair

10

"실제 세계의 예 ... FPGA와 마이크로 컨트롤러의 결합?"

원칙적으로 충분히 큰 FPGA만으로는 FPGA와 마이크로 컨트롤러가 수행 할 수있는 모든 작업을 수행 할 수 있습니다. 실제로, 주어진 성능 수준은 종종 FPGA만으로 (또는 MCU만으로) FPGA와 별도의 마이크로 컨트롤러로 구현할 때 부품 비용이 더 낮고 더 낮은 전력을 요구합니다. 다음은 FPGA와 마이크로 컨트롤러가 모두 내장 된 유명한 장치 중 일부입니다.

  • Elphel 카메라 ; Elphel Project Wiki 에는 Xilinx (R) Spartan 3e 1200K 게이트 FPGA와 GNU / Linux를 실행하는 ETRAX FS 프로세서가 있습니다.
  • TS-7500 5000 LUT 래티스 FPGA 리눅스를 실행할 수있는 CPU ARM9 250MHz의 비움을 갖는다.
  • 풍선 보드는 자일링스 스파르탄 FPGA와 ARM의 CPU를 가지고
  • 몇몇 Teeny weeny Linux SBC 에는 FPGA와 CPU가 모두 포함됩니다
  • Armadeus 프로젝트 위키 문서 자일링스 스파르탄 -3 FPGA 및 400 MHz의 ARM9 CPU를 모두 몇 보드 보드.
  • 블랙 핀 핸디 보드 자일링스 스파르탄 3E FPGA와 600 MHz의 아날로그 디바이스 Blackfin®와 ADSP-BF537 프로세서 모두를 포함한다. (MMU가 없으므로 전체 Linux를 실행할 수 없지만 uClinux를 실행할 수 있습니다).
  • "Minimig"(미니 아미)는 디스크 제어기 대행 자일링스 스파르탄 3 FPGA하는 M68000 CPU, 작은 PIC MCU를 포함한다.

4

종종 FPGA는 높은 병렬 또는 낮은 지연 시간 작동, 다중 클록 도메인에서 작동 또는 하드웨어 속도에서 사용자 지정 논리 수행과 같이 마이크로 컨트롤러가 효율적으로 수행 할 수없는 작업을 수행하는 데 특별히 사용됩니다. 따라서 많은 노력을 기울일 것이므로 설계의 중심에 MCU가 거의 필요하지 않습니다. 구성 비트 스트림로드와 같은 관리 위치로 이동할 수 있습니다. 저장소 인터페이스를 구현하는 Minimig 의 PIC 또는 ARM이 이에 대한 예입니다 .

그러나 일부 제품은 선을 흐리게합니다. 몇 가지 예 :

  1. 더 큰 FPGA에는 RAM 및 승수 블록이있는 것처럼 하드 CPU가 내장되어있는 경향이 있습니다 (대규모 프로젝트는 종종 필요합니다).
  2. 일부 마이크로 컨트롤러는 병렬 작업을 목표로합니다 (XMOS XS1, Atmel Xmega, GreenArray, Parallax Propeller)
  3. 일부 칩은 하이브리드로 설계되었습니다 (Cypress PSoC, Atmel FPSLIC)

명령형 프로그래밍 배경에서 나오면 FPGA의 장점을 얻기 위해 하드웨어에서 디자인을 조정하는 것입니다. 그러나 다른 곳에서도이 경험이 도움이 될 것입니다.


1

AVR과 같은 MCU와 FPGA에 프로그래밍 된 MCU 사이에는 실제로 차이가 없습니다. OpenCores 사이트에는 FPGA에서 사용할 수 있는 AVR 용 VHDL 코드 가 있습니다. 당신은 그것을 연구하고 그것이 어떻게 작동하는지 볼 수 있으며, 적절한 FPGA 보드를 구입하지 않고도 시뮬레이터에서 직접 시험해 볼 수도 있습니다.


1
종종 동일한 MCU에 대해 FPGA가 더 느린 클럭 속도로 실행되어야하거나 그렇지 않으면 상당히 비쌉니다. 더 비싼 경우 컨트롤러와 외부 핀 사이에 추가 하드웨어를 쉽게 구현할 수 있습니다.
Kortuk

어쨌든 시스템에 FPGA가 필요한 경우 MCU는 "무료"입니다.
레온 헬러

1

마이크로 컨트롤러는 프로그램 메모리에서 명령을 순차적으로 하나씩 실행하는 디지털 회로입니다. FPGA가 프로그래머블 인터커넥트를 갖는 디지털 게이트 풀 (실제로는 luts가 있지만 실제로 존재 함)로 생각할 수있는 곳. 이제 인터커넥트를 프로그래밍하여 fpga에서 모든 디지털 회로 (마이크로 컨트롤러)를 만들 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.