ShieldBuddy를 사용하여 컴퓨팅 집약적인 프로젝트 처리
DigiKey 북미 편집자 제공
2020-07-08
많은 애호가, 제작자 및 DIY족이 Arduino 마이크로컴퓨터 개발 기판을 사용하여 프로젝트를 모니터링하고 제어합니다. 증가하고 있는 전문 엔지니어도 마찬가지입니다. 이러한 기판을 평가 및 시제품 제작 플랫폼으로 사용하여 개발을 단축하고 집적 회로(IC), 센서 및 주변 장치의 평가 관련 비용을 절감할 수 있습니다. Arduino BOB를 사용하여 신속하게 센서 및 주변 장치 평가에서 설명한 것처럼 이들 엔지니어는 빠듯한 출시 시기(TTM)의 제약을 받으며 소규모 팀으로 일하고 있을 수 있습니다. 따라서 여러 엔지니어링 영역과 작업을 수용하면서도 부품 평가의 시간과 비용을 줄일 수 있는 방법을 찾아야 합니다.
한 가지 방법은 센서 및 주변 장치 브레이크아웃 기판(BOB) 형태의 오픈 소스 하드웨어와 관련 라이브러리 및 예제 프로그램이 포함된 오픈 소스 소프트웨어와 함께 Arduino를 사용하는 것입니다. 처리 및 메모리 요구 사항을 충족하는 다양한 Arduino 기판이 있지만 일부 계산의 경우 메인 프로세서가 느려지지 않게 하는 부동 소수점 처리 장치(FPU)를 사용하면 더 잘 수행할 수 있습니다. 이 문제는 Arduino 에코시스템 내에서 ShieldBuddy로 해결되었습니다.
이 기사에서는 다양한 Arduino 처리 플랫폼 옵션과 여러 응용 분야에서 FPU 기능이 매우 중요한 이유를 설명합니다. 그런 다음 ShieldBuddy 기판을 소개합니다. 이 기판은 물리적 풋프린트가 Arduino 기판과 유사하지만 각각 200MHz로 실행되고 자체 FPU를 갖춘 세 개의 독립적인 32비트 처리 코어가 있습니다. 이 기사에서는 이 기판의 프로그래밍 모델을 설명하고 자체의 Eclipse 기반 프로그래밍 환경과 지원하는 Arduino의 통합 개발 환경(IDE)을 통해 DIY족과 설계자가 빠르게 적용하는 방법을 보여 줍니다.
초보자와 전문가를 위한 Arduino
Arduino 환경을 시작하는 초보자가 일반적으로 선택하는 Arduino Uno Rev3(그림 1)은 16MHz로 실행되는 8비트 ATmega328P 마이크로 컨트롤러를 기반으로 합니다. 이 기판에는 32KB의 플래시(프로그램) 메모리, 2KB의 SRAM, 14개 디지털 입출력(I/O) 핀, 6개의 아날로그 입력 핀만 있습니다. 6개의 디지털 핀은 펄스 폭 변조(PWM) 출력을 제공할 수 있고 아날로그 핀은 필요한 경우 디지털 I/O 핀으로도 사용할 수 있습니다.
그림 1: Arduino Uno Rev3 개발 기판은 16MHz로 실행되는 8비트 ATmega328P 마이크로 컨트롤러를 기반으로 합니다. (이미지 출처: Arduino.cc)
14개의 디지털 I/O 핀, 6개의 아날로그 입력 핀 및 다양한 전원, 접지 및 레퍼런스 핀이 포함된 Arduino Uno Rev3 헤더의 풋프린트는 실드라고 하는 도터 기판의 거대한 에코시스템을 위한 기반입니다.
Uno Rev3 사용자들은 대부분 그 후에 Arduino Mega 2560 Rev3 기판(그림 2)으로 진행합니다. 16MHz로 실행되는 8비트 ATmega2560 마이크로 컨트롤러를 기반으로 하는 이 기판에는 256KB의 플래시 메모리와 8KB의 SRAM이 있습니다. 해당 헤더의 풋프린트로 지원할 수 있는 실드는 Uno와 동일하지만 추가 헤더를 통해 54개의 디지털 I/O 핀과 16개 아날로그 입력 핀을 끼울 수 있습니다. 이 경우 15개의 디지털 핀은 PWM 출력을 제공할 수 있고 마찬가지로 아날로그 핀은 필요한 경우 디지털 I/O 핀으로도 사용할 수 있습니다.
그림 2: Arduino Mega 2560 Rev3 개발 기판은 16MHz로 실행되는 8비트 ATmega2560 마이크로 컨트롤러를 기반으로 합니다. 해당 헤더의 풋프린트로 지원할 수 있는 실드는 Arduino Uno와 동일하지만 총 54개의 디지털 I/O 핀과 16개 아날로그 입력 핀을 제공하는 추가 헤더도 포함합니다. (이미지 출처: Arduino)
8비트 데이터 경로와 16MHz 클록으로 인한 제한 사항 외에도 Arduino Uno나 Arduino Mega 마이크로 컨트롤러 모두 FPU를 포함하고 있지 않으므로 부동 소수점 값이 포함된 계산을 수행하면 프로세서가 크게 느려집니다.
더 많은 처리 성능이 필요한 사용자가 다음 단계로 선택하는 Arduino Due(그림 3)는 물리적 풋프린트가 Arduino Mega와 비슷하지만 84MHz로 실행되는 Atmel/Microchip Technology의 32비트 SAM3X8E Arm® Cortex®-M3 프로세서를 기반으로 합니다. 이 기판은 512KB의 플래시 메모리, 96KB의 SRAM, 54개 디지털 I/O 핀, 12개 아날로그 입력 핀 및 디지털 아날로그 컨버터(DAC)로 구동되는 2개의 아날로그 출력 핀을 포함합니다. 이 경우 12개의 디지털 핀만 PWM 출력을 제공할 수 있고 마찬가지로 아날로그 핀은 필요한 경우 디지털 I/O 핀으로도 사용할 수 있습니다. 안타깝게도 Arduino Uno 및 Mega처럼 Arduino Due의 프로세서에도 FPU가 없습니다.
그림 3: Arduino Due 개발 기판은 84MHz로 실행되는 Atmel의 32비트 SAM3X8E Arm Cortex-M3 마이크로 컨트롤러를 기반으로 합니다. 이 헤더의 풋프린트는 Arduino Mega와 동일합니다. (이미지 출처: Arduino.cc)
애호가든 전문가든 대다수 사용자에게 Arduino Mega 및 Arduino Due 개발 기판에 있는 많은 수의 핀은 유용합니다. 하지만 84MHz로 실행되는 Arduino Due의 32비트 프로세서도 일부 컴퓨팅 집약 작업에는 부족할 수 있습니다. 마찬가지로 Due의 512KB 플래시 메모리와 96KB SRAM도 많은 양의 데이터를 사용하는 더 큰 프로그램에는 부족할 수 있습니다.
마이크로 컨트롤러는 점점 더 많은 양의 데이터를 처리할 수 있지만, 일부 계산은 효율을 높이고 대기 시간을 줄이는 FPU를 사용하여 더 잘 수행할 수 있습니다.
FPU란 무엇이고 왜 필요한가?
FPU가 유용한 이유는 컴퓨터가 숫자를 처리하는 방법과 관련이 있습니다. 컴퓨터 내부에서 숫자를 나타내는 가장 간단한 방법은 정수를 사용하는 것입니다. 또한 정수를 사용한 계산은 계산 비용이 많이 들지 않습니다. 하지만 정수는 기본적으로 유한하며 넓은 작동 범위를 표현할 수 없습니다.
이는 엔지니어와 과학자에게 문제가 될 수 있는데, 같은 계산에서 매우 큰 값과 작은 값을 사용해야 하는 경우가 많기 때문입니다. 예를 들어 물리학자는 광속의 숫자 값(300,000,000)과 뉴턴의 중력 상수(0.00000000006674)를 사용하는 계산을 수행할 수 있습니다. 마찬가지로 엔지니어는 디지털 신호 처리(DSP)와 같은 작업을 위해, 그리고 인공 지능(AI) 및 머신 러닝(ML) 응용 분야에서 사용하기 위해 작동 범위가 큰 값이 필요합니다.
해결 방법은 부동 소수점 숫자 표현을 사용하는 것입니다. 이 경우 소수점이 숫자의 개별 자릿수에 따라 "부동"할 수 있으므로 세부적인 수준의 숫자 "분해능"을 얻을 수 있습니다. 문제는 32비트 부동 소수점 값이 고정 소수점 32비트 정수와 같은 양의 메모리를 사용하지만 부동 소수점 값을 사용한 계산을 수행하려면 상당히 더 많은 컴퓨팅 리소스가 필요하다는 것입니다.
프로세서가 표준 고정 소수점 하드웨어를 사용하여 부동 소수점 계산을 수행해야 하는 경우 프로세서의 성능이 크게 영향을 받습니다. 해결책은 프로세서에 특수 FPU를 장착하는 것입니다. 이렇게 하면 정교한 부동 소수점 연산을 아주 적은 수의 클록 주기를 사용하여 실행할 수 있습니다.
이런 경우에 ShieldBuddy가 부각됩니다.
Arduino 에코시스템에 FPU와 고성능을 제공하는 ShieldBuddy
Arduino 호환 업계에 비교적 최근에 참여한 Infineon Technologies의 KITAURIXTC275ARDSBTOBO1 또는 ShieldBuddy(그림 4)는 Infineon의 TC275T64F200WDCKXUMA1 TC275 AURIX TC2xx TriCore 32비트 마이크로 컨트롤러를 위한 내장형 평가 기판입니다.
그림 4: ShieldBuddy TC275는 Arduino Mega 및 Arduino Due와 풋프린트가 동일한 기판에 Infineon TC275 32비트 다중 코어가 장착되어 있어, 사용할 수 있는 다양한 응용 실드와 호환이 가능합니다.(이미지 출처: Hitex.com)
ShieldBuddy는 물리적 풋프린트를 Arduino Mega 및 Arduino Due와 비슷하게 유지하여 여러 응용 실드와 호환되지만, 각각 200MHz로 실행되고 자체 FPU를 갖춘 독립적 32비트 코어 3개를 포함하는 TC275를 사용한다는 면에서 차이가 납니다. 더욱이 ShieldBuddy는 4MB의 플래시 메모리(Arduino Due의 8배, Arduino Mega의 16배)와 500KB의 RAM(Arduino Due의 5배, Arduino Mega의 62배)을 포함합니다.
비교하자면, Arduino Mega의 코어는 마이크로초(µs)당 8비트 명령을 16개 정도만 관리하지만, TC275의 각 코어는 주기 시간이 5ns이므로 일반적으로 1µs당 150개 ~ 200개의 32비트 명령을 실행할 수 있습니다. ShieldBuddy의 각 프로세서 코어에는 자체 FPU가 있으므로, 기판에서 거의 성능 저하 없이 부동 소수점 계산을 수행할 수 있습니다.
ShieldBuddy를 사용한 개발
ShieldBuddy 사용 시, 전문 소프트웨어 개발자는 Eclipse IDE를 사용하기를 원하지만 애호가와 제작자는 익숙한 Arduino IDE 사용을 선호할 수 있습니다. 두 옵션 모두 지원됩니다.
Arduino 사용자라면 각 스케치(프로그램)에 한 번 실행되는 setup()과 반복해서 실행되는 loop()라는 두 개의 표준 함수가 있어야 함을 잘 알고 있을 것입니다. 사용자가 직접 함수를 만들 수도 있습니다.
ShieldBuddy의 세 개 코어를 코어 0, 코어 1 및 코어 2라고 합니다. Arduino IDE의 경우 대부분의 기존 스케치를 컴파일하여 수정 없이 ShieldBuddy에서 사용할 수 있습니다. 기본적으로 setup() 및 loop() 함수(해당 함수에서 호출하는 사용자가 만든 함수 포함)는 코어 0에서 실행되도록 컴파일됩니다.
새 프로그램을 작성할 때 사용자는 이러한 함수의 이름을 setup0() 및 loop0()으로 지정하여 같은 효과를 얻을 수 있습니다. 또한 setup1() 및 loop1() 함수(해당 함수에서 호출하는 사용자가 만든 함수 포함)는 코어 1에서 실행되도록 자동으로 컴파일할 수 있습니다. 마찬가지로 setup2() 및 loop2() 함수(해당 함수에서 호출하는 모든 함수 포함)는 코어 2에서 실행되도록 자동으로 컴파일됩니다.
기본적으로 각 코어는 독립적으로 실행되므로, 완전히 별개인 프로그램 3개가 ShieldBuddy에서 동시에 실행될 수 있습니다. 그러긴 해도 코어는 공유 메모리와 같은 기술을 사용하여 서로 통신할 수도 있습니다. 또한 각 코어는 다른 코어에서 소프트 인터럽트를 트리거할 수 있습니다.
결론
오픈 소스 Arduino 개념은 엄청난 성공을 거두었고, 뒤이어 하드웨어 및 소프트웨어 에코시스템이 성장하면서 수백 개의 실드와 수천 개의 라이브러리 및 응용 제품을 망라하고 있습니다.
초기 Arduino 개발 기판인 8비트, 16MHz Arduino Uno 및 Arduino Mega는 약간의 제한이 있었지만 최근 구현된 32비트, 84MHz Arduino Due와 같은 기판은 매우 강력합니다. 그렇기는 하지만 많은 사용자가 기존 Arduino보다 더 많은 프로그램 공간(플래시), 더 많은 데이터 공간(SRAM) 및 더 많은 처리 성능을 요구합니다.
4MB의 플래시 메모리, 500KB의 SRAM 및 각 200MHz로 실행되고 자체 FPU가 있는 독립 32비트 프로세스 코어 3개가 장착된 ShieldBuddy는 Arduino 개념을 완전히 새로운 차원으로 개선하여 극한의 성능을 요구하는 DIY족 및 전문 엔지니어의 관심을 받고 있습니다.
추천 자료:
면책 조항: 이 웹 사이트에서 여러 작성자 및/또는 포럼 참가자가 명시한 의견, 생각 및 견해는 DigiKey의 의견, 생각 및 견해 또는 DigiKey의 공식 정책과 관련이 없습니다.


