그림 1: 이기종 아키텍처는 프로세서, FPGA, I/O를 상위 레벨 프로그래밍 도구와 결합합니다.
Intel 프로세서는 표준 커널을 기반으로 장기적 배치 시 안정성과 타이밍 결정성을 제공하도록 설계된 리얼타임 OS인 NI Linux Real-Time을 실행합니다. 여기에는 Security-Enhanced Linux에 대한 기본 지원과 같은 표준 Linux 기능이 포함됩니다. NI-DAQmx 드라이버는 파형을 수집하고 아날로그 입력, 아날로그 출력, 디지털 I/O, 카운터 및 제어를 프로그래밍하는 단일 프로그래밍 인터페이스를 제공합니다.
사용자 프로그래밍 가능한 FPGA를 사용하면 고급 제어, 신호 처리, 필터링, 고급 타이밍 및 기타 로직을 포함하는 시간 결정적인 프로세스를 떠넘길 수 있습니다. NI는 최대 326,060개의 로직 셀 및 840개의 DSP 슬라이스를 탑재한 칩을 포함하는 Xilinx의 최신 FPGA 기술을 사용합니다.
프로세서와 FPGA를 결합한 이기종 아키텍처는 고급 및 필수적 어플리케이션에서 매우 중요하지만, 이러한 시스템을 프로그래밍하는 것은 어려운 일입니다. 모든 단계에서 과제가 존재하며, 여기에는 OS를 선택 또는 개발하고, I/O와 대화하기 위한 드라이버를 개발하고, 프로세서와 FPGA 사이에서 통신하고, FPGA 프로그램을 작성할 수 있는 전문가를 찾고, 프로젝트 전반에 걸쳐 두 타겟의 개발 주기를 동기화시키는 등의 과제가 포함됩니다.
NI는 미래의 플랫폼에 대한 개방성과 이식성을 유지하면서 미리 검증된 소프트웨어 스택과 상위 레벨 프로그래밍 도구를 제공하여 이기종 소프트웨어 설계의 문제를 해결합니다. 이 아키텍처는 완전히 테스트된 미들웨어, 드라이버 및 Linux OS를 바로 사용할 수 있게 제공하여 어플리케이션 코드를 NI 플랫폼으로 신속하게 이식할 수 있습니다. 선호하는 어플리케이션 개발 도구를 계속 사용하고 리얼타임 및 FPGA 프로그래밍에서의 LabVIEW의 장점을 활용하십시오. LabVIEW FPGA 프로그래밍의 진정한 가치는 디지털 설계에 대한 이러한 추상화된 접근 방식이 어플리케이션 레벨 C/C++ 개발자가 어플리케이션의 가장 중요한 부분을 하드웨어에 구현할 수 있게 한다는 것이며, 이들 개발자는 이런 작업을 사내 VHDL 전문가 없이는 해본 적이 없을 것입니다.
그림 2: LabVIEW 또는 Linux 호환되는 아무 도구나 사용하여 임베디드 프로세서를 프로그래밍하고 NI RIO 드라이버를 사용하여 LabVIEW FPGA와 통신하십시오.
NI 하드웨어를 사용하는 임베디드 시스템 설계자들은 시스템을 구축할 때 다양한 프로그래밍 언어와 도구를 선택할 수 있습니다. 개발자는 LabVIEW, C/C++ 또는 텍스트 수학으로 개방형 임베디드 프로세서를 프로그래밍할 수 있으며, 이전 프로젝트의 소스 코드를 재사용하여 개발 시간을 절약할 수 있습니다. 프로그래머는 LabVIEW Real-Time 어플리케이션 내에서 C/C++ 라이브러리를 호출하여 이전 프로젝트의 C/C++ 라이브러리를 재사용할 수 있으므로 리얼타임 스레드 스케줄링과 같은 작업을 간소화할 수 있습니다. 또는 개발자가 선호하는 통합 개발 환경(IDE)을 사용하여 완전히 C 또는 C++로 작성된 임베디드 프로세서에 애플리케이션을 개발, 디버깅, 배포할 수 있습니다.
임베디드 시스템을 설계할 때 FPGA를 사용하면 ASIC (어플리케이션 전용 집적 회로)를 맞춤 제작할 필요 없이 고성능 디지털 로직을 생성할 수 있습니다. 전통적으로는 디지털 설계 엔지니어가 작성한 VHDL 또는 Verilog와 같은 텍스트 기반 하드웨어 설명 언어가 FPGA 개발에 사용되었습니다. 그러나 이러한 하드웨어 기술 언어는 언어의 의미를 파악하기 어렵기 때문에 FPGA 설계의 모든 가능성을 활용하기 어렵습니다. 따라서 임베디드 업계에서는 C-to-gates 도구 또는 LabVIEW FPGA의 그래픽 프로그래밍 언어인 G와 같이 FPGA 디자인을 보다 추상적으로 표현하는 방법을 모색했습니다.
LabVIEW 그래픽 프로그래밍 환경은 FPGA 하드웨어의 복잡성을 추상화하고 소프트웨어 엔지니어에게 익숙한 프로그래밍 구조를 제공하므로 사용자가 고성능 임베디드 시스템을 보다 신속하게 설계할 수 있습니다.
NI 하드웨어는 표준 Linux OS를 실행하므로, 어떤 Linux 호환 도구나 사용하여 임베디드 어플리케이션을 만들 수 있습니다. 이는 IP, 전문 지식 및 개발 도구를 재사용할 수 있는 유연성을 제공하지만, 이를 LabVIEW Real-Time 및 LabVIEW FPGA와 통합할 수 있는 위치와 방법을 이해해야 합니다.
그림 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를 프로그래밍하는데만 사용하고, 프로세서가 아닌 하드웨어에서 실행되어야 할 중요한 작업을 결정하면 됩니다.
LabVIEW는 병렬성과 데이터 흐름을 명확하게 나타내므로 FPGA 프로그래밍에 적격입니다. LabVIEW FPGA를 사용하면 C 언어 전문성을 갖춘 엔지니어와 과학자들이 하드웨어 설계를 익힐 필요 없이 기존 설계에 FPGA를 활용할 수 있습니다. 또한, FPGA 인터페이스 C API는 I/O 제어 및 데이터 스트리밍을 위해 FPGA와 리얼타임 어플리케이션 사이에서 통신 계층을 제공합니다. 이 API를 사용하면, LabVIEW 그래픽 툴을 사용하여 FPGA를 프로그래밍하고, LabVIEW 또는 C/C++ 도구 중 하나를 선택하여 시스템 내의 프로세서를 프로그래밍할 수 있습니다.
LabVIEW FPGA를 사용하면 로우 레벨 하드웨어 기술 언어 또는 보드 레벨 설계 없이도 측정 및 제어 하드웨어를 맞춤 제작할 수 있습니다. 이 맞춤 제작된 하드웨어는 고유 타이밍 및 트리거링 루틴, 초고속 제어, 디지털 프로토콜 인터페이싱, 디지털 신호 처리 (DSP)뿐만 아니라, 고속 하드웨어 신뢰성과 높은 결정성이 요구되는 여러 어플리케이션에서 사용할 수 있습니다.