Arduino 환경의 FPGA: 사전 구성된 IP와 맞춤형 IP 모두에서 Alorium의 Sn 모듈 사용
DigiKey 북미 편집자 제공
2019-05-01
현장 프로그래밍 가능한 게이트 어레이(FPGA)를 사용하면 마이크로 컨트롤러 또는 마이크로 프로세서에서 실행 중인 펌웨어가 너무 느려지는 하드웨어와 관련된 실시간 내장형 설계 문제를 해결할 수 있습니다. 또한 주변 장치의 유연성을 강화할 수 있습니다. 하지만 FPGA를 사용하려면 새로운 프로그래밍 언어(일반적으로 Verilog 또는 VHDL)를 배우고, FPGA 비트 스트림을 생성하는 완전히 새로운 개발 흐름을 익히고, FPGA 개발 기판에 많은 비용을 지출해야 합니다.
이러한 문제로 인해 FPGA는 설계 툴박스에서 매우 유용한 도구임에도 불구하고 많은 설계 엔지니어가 사용을 꺼립니다. 이를 해결하기 위해 일부 업체에서 FPGA 학습 곡선을 단축하기 위해 노력하고 있습니다. 예를 들어, Arduino는 Arduino ABX00022 MKR Vidor 4000 FPGA 개발 기판을 도입했습니다(“Arduino MKR Vidor 4000을 사용하여 빠르고 쉽게 FPGA 적용” 참조). Arduino MKR Vidor 4000을 사용하면 특수 Arduino 라이브러리 확장을 통해 FPGA 수준 성능을 실현하면서 널리 사용되는 Arduino 통합 개발 환경(IDE)과 원활하게 통합되는 FPGA를 프로그래밍할 수 있습니다.
이제 Arduino MKR Vidor 4000 기판을 비롯하여 이전 제품을 대체하는 새로운 대안이 있습니다. Alorium Technology는 Arduino 내장형 개발 환경에 FPGA 성능을 추가할 수 있는 약간 다른 방법을 개발했습니다. Alorium의 접근 방식에서는 I/O 가속화를 위한 사전 구성된 IP 블록과 맞춤 설계된 IP 블록을 제공합니다.
이 기사에서는 FPGA를 사용하는 기존 방식을 간략하게 설명합니다. 그런 다음 Alorium의 Arduino 호환 XLR8R22M08V5U0DI 및 Snō SNOR20M16V3 FPGA 모듈을 자세히 살펴봅니다. 그리고 사전 구성된 IP를 사용하고 맞춤형 IP를 생성하기 위해 Arduino 연속체에서 FPGA 사용을 촉진한 방법과 설계자가 FPGA 모듈을 적용할 수 있는 방법을 보여줍니다.
Arduino 가속화 방법
이제 전 세계 수십만 명의 설계자, 엔지니어, 개발자, DIY 애호가 및 제조업체가 광범위한 응용 분야에서 다양한 버전의 Arduino 개발 개판을 사용하여 내장형 시스템을 개발하고 있습니다. Arduino 기판과 Arduino IDE는 사용 및 프로그래밍이 매우 간단하여 널리 사용되고 있습니다.
Arduino 사용자들이 원래 Arduino 아키텍처를 더 복잡한 응용 분야로 확장하면서 성능 문제가 발생했습니다. 성능 문제의 일부는 원래 Arduino 마이크로 컨트롤러의 단순 8비트 아키텍처에 있었습니다. 또한 Arduino의 내장형 마이크로 컨트롤러에 상응하는 하드웨어 블록이 없는 상태에서 Arduino 소프트웨어 시스템에서 다양한 실시간 주변 장치를 구현하는 방법에 문제가 있습니다.
이 성능 문제를 해결하는 한 가지 방법으로 더 강력한 마이크로 컨트롤러를 사용하면 되지만, 실시간 환경에서 소프트웨어로 수행할 수 있는 작업에는 한계가 있습니다. 일부 고속 실시간 주변 장치는 하드웨어에서 구현해야 합니다. 또한 더 많은 하드웨어 주변 장치로 마이크로 컨트롤러를 지정할 수 있지만, 올바른 주변 장치 조합은 프로젝트마다 다릅니다.
마이크로 컨트롤러 제조업체는 마이크로 컨트롤러 제품군에서 수십 또는 수백 가지 변형을 제공하여 다양한 주변 장치 조합에 대한 요구 사항을 해결했습니다. 하지만 기판 커넥터의 경우 모든 요구 사항을 충족하려면 충분한 수의 I/O 핀이 필요하므로 이는 Arduino처럼 기판 레벨 제품에 실현 가능한 접근 방식이 아닙니다. 이제 Arduino 기판을 변형한 많은 제품이 있지만 여전히 모든 내장형 프로젝트 요구 사항을 충족하기에는 부족합니다.
다양한 주변 장치 조합에 대한 요구 사항을 충족하는 FPGA
PFGA는 프로그래밍 가능한 하드웨어를 내장형 설계자에게 제공하여 프로젝트마다 달라지는 주변 장치 조합에 대한 요구 사항을 충족할 수 있습니다. 내장형 마이크로 컨트롤러 기판에 FPGA 기능을 추가하는 한 가지 방법으로 기존 설계에 FPGA를 추가하면 됩니다. 이는 Arduino가 Arduino MKR Vidor 4000 기판을 설계할 때 사용한 방법입니다. 이 기판은 Microchip Technology의 32비트 Arm® Cortex®-M0+ 기반 ATSAMD21G18A-AUT SAMD21 저전력 마이크로 컨트롤러를 Intel의 10CL016YU484C6G Cyclone 10 FPGA와 결합합니다.
Arduino는 MKR Vidor 4000 기판에 특화된 Arduino IDE에 여러 하드웨어 IP 블록을 추가했습니다. 이러한 주변 장치는 두 기본 라이브러리 VidorPeripherals 및 VidorGraphics를 통해 사용할 수 있습니다. 관련 주변 장치 라이브러리가 Arduino 스케치(Arduino에서 프로그램 또는 코드 단위에 사용하는 이름)에 포함될 경우 이러한 하드웨어 IP 블록은 Arduino MKR Vidor 4000의 Intel Cyclone 10 FPGA에 자동으로 구성됩니다. 주변 장치 IP 블록의 현재 명단은 다음과 같습니다.
- I2C 포트
- SPI 포트
- UART
- 고주파 PWM 컨트롤러
- 고속 타이머
- 고속 직각 위상 디코더
- Adafruit Industries Neopixel 어드레서블 RGB 스마트 LED 컨트롤러
I2C, SPI 등과 같은 일부 주변 장치는 이전 Arduino 기판에서 소프트웨어 IP 블록으로 이미 사용할 수 있습니다. 이러한 이전 소프트웨어 구현과 Arduino MKR Vidor 4000 기판의 FPGA에서 구현된 해당 IP 블록 간의 차이점은 주변 장치의 FPGA 버전이 훨씬 더 나은 성능을 제공한다는 것입니다. 예를 들어, 각 I2C 및 SPI 인스턴스화는 기판 FPGA 내부의 개별 프로그래밍 가능 하드웨어 블록에서 구현됩니다. 따라서 여러 직렬 포트를 인스턴스화할 때 성능이 저하되지 않습니다.
주변 장치 블록을 FPGA 하드웨어로 구현하고 Arduino 스케치 작성기와 거의 유사한 동일 라이브러리 메커니즘을 사용하여 주변 자치 블록을 사용 가능하도록 만들어 Arduino MKR Vidor 4000 기판은 FPGA를 쉽게 사용할 수 있도록 해줍니다. VHDL 또는 Verilog 같은 새로운 하드웨어 설명 언어(HDL)를 배울 필요가 없습니다. 실제로 FPGA 기반 주변 장치는 프로그래머의 관점에서 다른 C++ 개체와 비슷합니다. Arduino는 나중에 많은 하드웨어 IP 블록 주변 장치를 추가할 계획을 가지고 있습니다.
Arduino MKR Vidor 4000 기판은 HDL 코드를 사용한 기판 Cyclone 10 FPGA의 직접 프로그래밍에 대한 지원이 부족하므로 아직 범용 FPGA 개발 기판이 아닙니다. Arduino는 더 많은 고급 사용자가 회사의 PFGA에 Intel의 Quartus HDL 개발 도구를 사용하여 Arduino MKR Vidor 4000 기판의 FPGA에서 더 많은 유틸리티를 실현할 수 있도록 지원할 계획을 가지고 있습니다.
Alorium에서 채택한 다음 단계
Alorium은 Arduino 호환 XLR8R22M08V5U0DI 및 SNOR20M16V3 Sn FPGA 개발 기판(각각 그림 1 및 2)에서 OpenXLR8 방법 및 가속화 블록(XB)을 사용하여 이미 단계에 착수했습니다. 두 기판은 플래시 구성 메모리가 통합되어 있는 다른 버전의 Intel MAX 10 FPGA 제품군을 기반으로 합니다. XLR8은 Intel 10M08SAU169C8G MAX 10을 8비트 ATmega328 명령어 세트 호환 마이크로 컨트롤러와 결합합니다. XLR8은 원래 Arduino Uno개발 기판과 동일한 폼 팩터를 사용하므로 많은 Arduino 실드 및 부속품과 호환됩니다.

그림 1: Alorium Technology의 XLR8R22M08V5U0DI 개발 기판은 Arduino Uno 폼 팩터 내에서 Intel MAX 10 FPGA를 8비트 ATmega328 명령어 세트 호환 마이크로 컨트롤러와 결합합니다. (그림 출처: Alorium Technology)
Alorium Sn FPGA 모듈은 0.7인치 x 1.7인치의 훨씬 더 작은 개발 기판입니다(그림 2 참조). Sn FPGA 개발 기판은 물리적으로 작지만, 더 큰 버전의 Intel MAX 10 FPGA를 두 배 더 많은 논리 소자(10M16SAU169C8G MAX 10 FPGA의 경우 16K인 반면에 XLR8 기판의 10M08 장치의 경우 8K)와 통합합니다. 또한 I/O 핀의 수가 두 배 더 많습니다(32개 및 XLR8 기판의 경우 14개).

그림 2: XLR8 개발 기판과 마찬가지로 Alorium Technology의 Sn FPGA 개발 기판은 8비트 ATmega328 명령어 세트 호환 마이크로 컨트롤러를 Intel MAX 10(이 경우 10M16SAU169C8G FPGA)과 결합합니다. 하지만 Sn FPGA 개발 기판은 훨씬 더 작습니다. (그림 출처: Alorium Technology)
또한 Alorium은 Sn FPGA 모듈을 허용하고 FPGA의 추가 I/O 브레이크아웃 핀과 USB 포트를 사용하여 약간 더 큰 Arduino 폼 팩터 기판으로 변환하는 SNOMAKRR10 브레이크아웃 기판을 제공합니다. Sn FPGA 모듈의 일부 핀은 SnMAKR 브레이크아웃 기판의 Arduino 호환 실드 헤더에 연결되고, 일부는 USB 커넥터 반대 편에 있는 기판의 가장자리를 따라 추가 헤더에 연결됩니다(그림 3).

그림 3: Alorium의 SNOMAKRR10 브레이크아웃 기판은 USB 포트와 기판 조정기를 통해 회사의 Sn FPGA 개발 기판을 Arduino 호환 폼 팩터로 변환합니다. 따라서 USB 케이블로 개발 기판에 직접 전력을 공급할 수 있습니다. (그림 출처: Alorium Technology)
XLR8 및 Sn FPGA 개발 기판은 단일 칩(Intel MAX 10 FPGA)에서 8비트 마이크로 컨트롤러와 하드웨어 주변 장치를 구현합니다. 그림 4는 그 방법을 보여줍니다.

그림 4: XLR8 및 Sn FPGA 개발 기판은 MAX 10 FPGA 내에서 Atmel AVR 호환 마이크로 컨트롤러를 소프트 코어로 구현합니다. (그림 출처: Alorium Technology)
AVR 호환 마이크로 컨트롤러 코어(그림 4의 왼쪽 하단)는 원래 Arduino 개발 기판에 사용된 것과 동일한 Atmel ATmega328 8비트 AVR 마이크로 컨트롤러입니다. 하지만 개별 칩에 상주하는 대신 Alorium 버전 AVR 마이크로 컨트롤러는 FPGA 내에서 소프트 코어로 구현됩니다.
Alorium XB 5개(XB1 ~ XB5)가 그림 4의 마이크로 컨트롤러 코어 위에 표시됩니다. XB는 FPGA의 온칩 자원을 사용하여 구현되는 IP 블록입니다. AVR 마이크로 컨트롤러는 어드레서블 레지스터 인터페이스를 통해 온칩 XB와 통신합니다. XLR8 및 Sn 개발 기판은 Arduino 개발자들이 자주 요구하는 주변 장치에 해당하는 XB(GitHub에서도 사용 가능)가 사전 설치된 상태로 제공됩니다.
위 목록의 마지막 XB는 실제로 I/O 주변 장치 블록이 아니고 부동 소수점 수학 가속기입니다. 모든 유형의 하드웨어 가속기가 XB로 사용될 수 있습니다. XB는 I/O 제한이 없습니다.
블록 선택
Alorium의 OpenXLR8 개발 흐름을 사용하여 FPGA 내에서 인스턴스화할 다른 XB(또는 동일한 XB의 여러 복사본)를 선택하여 XLR8 및 Sn FPGA 개발 기판을 현장에서 업데이트할 수 있습니다. 또한 개발자는 Alorium의 OpenXLR8 흐름을 사용하여 맞춤형 가속기 블록을 만들 수 있습니다(그림 5).

그림 5: 설계자는 Alorium의 OpenXLR8 개발 흐름에 따라 Intel의 Quartus Prime 설계 도구로 새로운 하드웨어 블록을 만든 후 Arduino IDE에 추가할 수 있습니다. (그림 출처: Alorium Technology)
맞춤형 XB를 만들려면 Verilog 또는 VHDL 하드웨어 설명 언어에 대한 작업 지식을 갖추고 Intel Quartus FPGA 도구 특히, Quartus Prime Lite Edition 17.1 버전과 Mentor Graphics의 ModelSim 시뮬레이션 도구에 익숙해야 합니다. HDL은 설계자가 표준화되고 체계적으로 정의된 방식으로 여러 작업을 병렬로 빠르게 실행할 수 있도록 해주므로 FPGA 개발에 필요합니다. C, C++ 등과 같은 HLL(High Level Language)은 본질적으로 순차적 언어입니다.
HLL 컴파일러는 HLL 소스 코드를 가져와서 일반적으로 한 번에 하나씩 실행되는 긴 기계 명령어 시퀀스로 변환합니다. 따라서 FPGA가 프로세서보다 훨씬 더 빠릅니다. FPGA는 크기가 충분할 경우 수천 개의 작업을 동시에 실행할 수 있습니다. C 또는 C++로 작성된 코드를 HDL로 변환하는 HLL 컴파일러가 있습니다. 변환된 HDL은 기존 FPGA 도구로 처리되지만 이러한 HLL 컴파일러는 현재 Alorium의 OpenXLR8 설계 흐름에 포함되지 않습니다.
하지만 HDL 및 FPGA 개발 도구를 사용하여 설계하고 디버깅한 XB는 다른 Arduino 라이브러리 블록과 마찬가지로 Arduino IDE에서 사용할 수 있습니다. 또한 Alorium은 현재 Arduino IDE 라이브러리를 위한 추가 XB를 개발하고 있습니다.
결론
해당 FPGA 개발 기판을 만들 때 Arduino와 Alorium Technology는 이러한 저렴한 개발 기판의 내장된 성능 향상에 대한 설계자의 증가하는 요구를 잘 알고 있습니다. 두 회사가 택했던 경로는 약간 다르지만, 더 많은 내장형 개발자가 FPGA를 사용할 수 있는 방법을 찾는다는 최종 목표를 같이하고 있습니다. 가장 간단한 레벨에서 Arduino 접근 방식과 Alorium 접근 방식은 블록을 선택하고 스크립트를 실행하는 간단한 방식으로 하드웨어를 설계합니다.
아직은 전체 설계 흐름을 더 간소화해야 합니다. Arduino는 아직 전체 FPGA 개발 흐름을 HDL 개발자에게 공개하지 않았습니다. Alorium의 설계 흐름에서는 HDL 설계를 수용하고 있지만 Verilog 또는 VHSL FPGA 설계 언어 및 도구에 대한 지식이 필요합니다.
하지만 이러한 제품으로 인해 새로운 길이 열렸으므로 적어도 이론적으로는 C 및 C++ 하드웨어 컴파일러를 비롯한 다른 FPGA 개발 발전을 활용할 수 있습니다. 그 때까지 Alorium Technology 및 Arduino가 이러한 기능을 Arduino IDE에 추가하기 위해 개발한 간단한 방법을 사용하여 FPGA의 성능을 어느 정도 개선할 수 있습니다.
면책 조항: 이 웹 사이트에서 여러 작성자 및/또는 포럼 참가자가 명시한 의견, 생각 및 견해는 DigiKey의 의견, 생각 및 견해 또는 DigiKey의 공식 정책과 관련이 없습니다.


