C/C++ 임베디드 시스템 설계 도구

개요

임베디드 설계자는 고급 및 결정적 어플리케이션을 위해 이기종 아키텍처를 가진 디바이스를 선택하는 경우가 많습니다. 이는 이 아키텍처가 리얼타임 OS (RTOS)를 실행하는 프로세서와 프로그래밍 가능한 하드웨어라는 매우 신뢰성이 높은 두 타겟을 결합하기 때문입니다. 이 아키텍처가 임베디드 시스템 설계에 생산적인 선택이 되려면 효율적인 소프트웨어 도구가 필요합니다.

NI 플랫폼은 개방적이고 유연하므로 다양한 프로그래밍 언어, 도구 및 디자인 패턴 중에서 선택하여 시스템을 구현하고 기존 IP와 전문 지식을 최대한 활용할 수 있습니다. 미리 검증된 임베디드 OS는 Linux를 기반으로 하며 표준 OpenEmbedded 기술을 사용하여 구축되어 LabVIEW 소프트웨어, C/C++, 텍스트 수학 또는 이들의 조합을 사용하여 프로그램을 작성할 수 있습니다. 이전 프로젝트의 코드를 쉽게 다시 컴파일하여 새로운 개발 노력을 줄이고, LabVIEW를 어떤 언어로 작성된 라이브러리와 어플리케이션과도 통합할 수 있습니다. LabVIEW FPGA Module은 Xilinx 컴파일러를 사용하여 최적화된 FPGA 프로그램을 만드는 상위 레벨 프로그래밍 환경을 제공합니다. 그런 다음 어플리케이션 레벨 개발자는 VHDL 프로그래밍 경험 없이 즉시 I/O에 연결하여 매우 강력한 알고리즘을 그래픽 언어로 작성할 수 있습니다. 내장된 RIO 드라이버가 프로세서와 FPGA 사이의 통신을 처리하므로 하위 레벨 드라이버 소프트웨어가 아닌 어플리케이션 로직에 집중할 수 있는 시간을 확보할 수 있습니다.

이 문서를 통해 NI 임베디드 시스템을 프로그래밍하는 방법을 학습하고 필요한 소프트웨어를 다운로드하십시오.

내용

이기종 아키텍처 소개

이기종 아키텍처

그림 1: 이기종 아키텍처는 프로세서, FPGA, I/O를 상위 레벨 프로그래밍 도구와 결합합니다.

프로세서

Intel 프로세서는 표준 커널을 기반으로 장기적 배치 시 안정성과 타이밍 결정성을 제공하도록 설계된 리얼타임 OS인 NI Linux Real-Time을 실행합니다. 여기에는 Security-Enhanced Linux에 대한 기본 지원과 같은 표준 Linux 기능이 포함됩니다. NI-DAQmx 드라이버는 파형을 수집하고 아날로그 입력, 아날로그 출력, 디지털 I/O, 카운터 및 제어를 프로그래밍하는 단일 프로그래밍 인터페이스를 제공합니다.

FPGA

사용자 프로그래밍 가능한 FPGA를 사용하면 고급 제어, 신호 처리, 필터링, 고급 타이밍 및 기타 로직을 포함하는 시간 결정적인 프로세스를 떠넘길 수 있습니다. NI는 최대 326,060개의 로직 셀 및 840개의 DSP 슬라이스를 탑재한 칩을 포함하는 Xilinx의 최신 FPGA 기술을 사용합니다.

 

이기종 시스템 프로그래밍에 대한 NI의 접근 방식

프로세서와 FPGA를 결합한 이기종 아키텍처는 고급 및 필수적 어플리케이션에서 매우 중요하지만, 이러한 시스템을 프로그래밍하는 것은 어려운 일입니다. 모든 단계에서 과제가 존재하며, 여기에는 OS를 선택 또는 개발하고, I/O와 대화하기 위한 드라이버를 개발하고, 프로세서와 FPGA 사이에서 통신하고, FPGA 프로그램을 작성할 수 있는 전문가를 찾고, 프로젝트 전반에 걸쳐 두 타겟의 개발 주기를 동기화시키는 등의 과제가 포함됩니다.

NI는 미래의 플랫폼에 대한 개방성과 이식성을 유지하면서 미리 검증된 소프트웨어 스택과 상위 레벨 프로그래밍 도구를 제공하여 이기종 소프트웨어 설계의 문제를 해결합니다. 이 아키텍처는 완전히 테스트된 미들웨어, 드라이버 및 Linux OS를 바로 사용할 수 있게 제공하여 어플리케이션 코드를 NI 플랫폼으로 신속하게 이식할 수 있습니다. 선호하는 어플리케이션 개발 도구를 계속 사용하고 리얼타임 및 FPGA 프로그래밍에서의 LabVIEW의 장점을 활용하십시오. LabVIEW FPGA 프로그래밍의 진정한 가치는 디지털 설계에 대한 이러한 추상화된 접근 방식이 어플리케이션 레벨 C/C++ 개발자가 어플리케이션의 가장 중요한 부분을 하드웨어에 구현할 수 있게 한다는 것이며, 이들 개발자는 이런 작업을 사내 VHDL 전문가 없이는 해본 적이 없을 것입니다.

LabVIEW 또는 Linux 호환되는 아무 도구나 사용하여 임베디드 프로세서를 프로그래밍하고 NI RIO 드라이버를 사용하여 LabVIEW FPGA와 통신하십시오

그림 2: LabVIEW 또는 Linux 호환되는 아무 도구나 사용하여 임베디드 프로세서를 프로그래밍하고 NI RIO 드라이버를 사용하여 LabVIEW FPGA와 통신하십시오.

리얼타임 프로그래밍

NI 하드웨어를 사용하는 임베디드 시스템 설계자들은 시스템을 구축할 때 다양한 프로그래밍 언어와 도구를 선택할 수 있습니다. 개발자는 LabVIEW, C/C++ 또는 텍스트 수학으로 개방형 임베디드 프로세서를 프로그래밍할 수 있으며, 이전 프로젝트의 소스 코드를 재사용하여 개발 시간을 절약할 수 있습니다. 프로그래머는 LabVIEW Real-Time 어플리케이션 내에서 C/C++ 라이브러리를 호출하여 이전 프로젝트의 C/C++ 라이브러리를 재사용할 수 있으므로 리얼타임 스레드 스케줄링과 같은 작업을 간소화할 수 있습니다. 또는 개발자가 선호하는 통합 개발 환경(IDE)을 사용하여 완전히 C 또는 C++로 작성된 임베디드 프로세서에 애플리케이션을 개발, 디버깅, 배포할 수 있습니다.

FPGA 프로그래밍

임베디드 시스템을 설계할 때 FPGA를 사용하면 ASIC (어플리케이션 전용 집적 회로)를 맞춤 제작할 필요 없이 고성능 디지털 로직을 생성할 수 있습니다. 전통적으로는 디지털 설계 엔지니어가 작성한 VHDL 또는 Verilog와 같은 텍스트 기반 하드웨어 설명 언어가 FPGA 개발에 사용되었습니다. 그러나 이러한 하드웨어 기술 언어는 언어의 의미를 파악하기 어렵기 때문에 FPGA 설계의 모든 가능성을 활용하기 어렵습니다. 따라서 임베디드 업계에서는 C-to-gates 도구 또는 LabVIEW FPGA의 그래픽 프로그래밍 언어인 G와 같이 FPGA 디자인을 보다 추상적으로 표현하는 방법을 모색했습니다.

LabVIEW 그래픽 프로그래밍 환경은 FPGA 하드웨어의 복잡성을 추상화하고 소프트웨어 엔지니어에게 익숙한 프로그래밍 구조를 제공하므로 사용자가 고성능 임베디드 시스템을 보다 신속하게 설계할 수 있습니다.

 

개발자 리소스: Linux Real-Time용 C/C++ 개발 도구

NI 하드웨어는 표준 Linux OS를 실행하므로, 어떤 Linux 호환 도구나 사용하여 임베디드 어플리케이션을 만들 수 있습니다. 이는 IP, 전문 지식 및 개발 도구를 재사용할 수 있는 유연성을 제공하지만, 이를 LabVIEW Real-Time 및 LabVIEW FPGA와 통합할 수 있는 위치와 방법을 이해해야 합니다.

 IP 재사용 및 리얼타임 프로그래밍 전문성에 기반하여 소프트웨어 디자인 패턴을 선택하십시오

그림 3: IP 재사용 및 리얼타임 프로그래밍 전문성에 기반하여 소프트웨어 디자인 패턴을 선택하십시오.

Xilinx FPGA를 프로그래밍하려면 LabVIEW FPGA를 사용해야 하지만, C/C++ 또는 LabVIEW Real-Time을 사용하여 LabVIEW FPGA 프로그램과 통신할 수도 있습니다. 프로세서 어플리케이션과 LabVIEW FPGA 프로그램 사이의 통신 계층에서는 C API와 LabVIEW API가 모두 제공됩니다. 그러므로 NI Linux Real-Time 시스템을 설계하는 첫 번째 단계는 최상위 소프트웨어 디자인 패턴을 선택하는 것입니다.

LabVIEW를 선택하여 리얼타임 어플리케이션을 프로그래밍하는 것은 LabVIEW Real-Time에 멀티스레딩, 리얼타임 스레드 스케줄링을 위한 구조, 견고하고 타이밍 결정성을 제공하는 코드를 위한 다양한 기능이 포함되어 있다는 점에서 많은 이점이 있습니다. 또한 LabVIEW는 다른 언어로 작성된 공유 라이브러리 및 어플리케이션과 연결할 수 있으므로 이 가치 있는 IP를 LabVIEW Real-Time 디자인 패턴에서 재사용할 수 있습니다.

그러나, 최상위 어플리케이션이 C/C++로만 작성되어야 하는 경우, LabVIEW를 FPGA의 I/O를 프로그래밍하는데만 사용하고, 프로세서가 아닌 하드웨어에서 실행되어야 할 중요한 작업을 결정하면 됩니다.

시작을 위한 리소스

  1. NI 임베디드 시스템에서 가능한 소프트웨어 디자인 패턴에 대한 학습부터 시작하십시오. NI Linux Real-Time 시스템 프로그래밍을 위한 소프트웨어 아키텍처 선택하기.
  2. C/C++ 공유 라이브러리 또는 최상위 레벨 어플리케이션의 빌드, 배포, 디버깅을 위한 기본 IDE를 설정합니다. NI Linux Real-Time용 C/C++ 개발 시작하기에서 이러한 태스크 완료 방법에 대한 정보를 찾을 수 있습니다.
  3. 이 길라잡이를 따라 LabVIEW Real-Time 어플리케이션에서 C/C++ 공유 라이브러리를 호출하는 방법을 학습하십시오. NI Linux Real-Time 타겟에서 C 코드를 LabVIEW와 통합하기
  4. FPGA 인터페이스 C API를 사용하여 C/C++ Real-Time 어플리케이션에서 LabVIEW FPGA 프로그램과 통신하는 방법에 대해 자세히 알아보십시오. FPGA 인터페이스 C API로 프로그래밍하기 백서 및 연습문제
  5. NI의 활발한 개발자 포럼을 방문하여 C/C++ 및 Linux 프로그래밍과 관련된 고급 질문에 대한 답변은 얻으십시오. NI Linux Real-Time 커뮤니티

필요한 소프트웨어 툴체인

  1. NI Linux Real-Time 어플리케이션을 프로그래밍하려면 다음 도구 중 적어도 하나가 필요합니다.
    1. LabVIEW를 사용하여 최상위 리얼타임 어플리케이션을 빌드하려면 LabVIEW Real-Time Module을 다운로드하십시오.

    2. 자체 C/C++ 개발 도구를 사용하여 공유 라이브러리 또는 최상위 어플리케이션을 빌드하려면 GNU/Linux 크로스 컴파일러만 다운로드하십시오.
  2. C/C++로 최상위 리얼타임 어플리케이션을 빌드하려는 경우, FPGA 인터페이스 C API(버전 13.0 또는 이후 버전)를 다운로드하십시오. FPGA 인터페이스 C API는 LabVIEW FPGA 비트파일에 기반하여 FPGA 레지스터, DMA FIFO, 인터럽트를 참조 변수로 명명하는 C 헤더 파일을 생성합니다. 또한 이러한 변수를 읽고 쓰고 FPGA 코드의 작동을 조작하는데 사용되는 함수의 API도 포함합니다.

  3. FPGA 개발에는 다음이 모두 필요합니다.
    1. LabVIEW(풀 버전 또는 상위 버전)
    2. LabVIEW FPGA Module
    3. NI-RIO 드라이버(2013 또는 이후 버전)

개발자 리소스: FPGA 개발을 위한 LabVIEW

LabVIEW는 병렬성과 데이터 흐름을 명확하게 나타내므로 FPGA 프로그래밍에 적격입니다. LabVIEW FPGA를 사용하면 C 언어 전문성을 갖춘 엔지니어와 과학자들이 하드웨어 설계를 익힐 필요 없이 기존 설계에 FPGA를 활용할 수 있습니다. 또한, FPGA 인터페이스 C API는 I/O 제어 및 데이터 스트리밍을 위해 FPGA와 리얼타임 어플리케이션 사이에서 통신 계층을 제공합니다. 이 API를 사용하면, LabVIEW 그래픽 툴을 사용하여 FPGA를 프로그래밍하고, LabVIEW 또는 C/C++ 도구 중 하나를 선택하여 시스템 내의 프로세서를 프로그래밍할 수 있습니다. 

LabVIEW FPGA를 사용하면 로우 레벨 하드웨어 기술 언어 또는 보드 레벨 설계 없이도 측정 및 제어 하드웨어를 맞춤 제작할 수 있습니다. 이 맞춤 제작된 하드웨어는 고유 타이밍 및 트리거링 루틴, 초고속 제어, 디지털 프로토콜 인터페이싱, 디지털 신호 처리 (DSP)뿐만 아니라, 고속 하드웨어 신뢰성과 높은 결정성이 요구되는 여러 어플리케이션에서 사용할 수 있습니다.