C/C++嵌入式系统设计工具

概览

设计师通常会针对高级应用程序和关键应用程序选择具有异构架构的设备,将两个可靠的处理终端结合起来:运行实时操作系统(RTOS)的处理器和可编程硬件。要想使这种架构有效用于嵌入式系统的设计,需要高效的软件工具。

NI平台开放且灵活,有各种编程语言、工具和设计模式可供选择来实现系统,也可充分利用您的IP和专业知识。预先验证的嵌入式操作系统基于Linux,并采用标准的OpenEmbedded技术构建,因此可以使用LabVIEW软件、C/C++、文本数学或这些工具的组合来编写程序。您可以轻松重新编译过去项目的代码,减少新的开发工作,甚至还可以将LabVIEW与任何语言编写的库和应用程序集成。LabVIEW FPGA模块提供了一个高级编程环境,使用Xilinx编译器来构建优化的FPGA程序。应用程序级开发人员无需任何VHDL编程经验,即可立即连接到I/O,以图形语言编写功能强大的算法。内置的RIO驱动程序可处理处理器和FPGA之间的通信,让您有时间专注开发应用逻辑而不是低层驱动软件。

使用本文档了解NI嵌入式系统的编程,并下载您所需要的软件工具。

内容

架构简介

异构架构

图1.异构架构将处理器、FPGA和I/O与高级编程工具相结合。

处理器
Intel处理器可运行NI Linux Real-Time,NI Linux Real-Time是一款基于标准内核的实时操作系统,经过专门设计,可在长期部署中实现可靠的确定性操作。它包含标准的Linux功能,如对安全增强型Linux的本地支持。NI-DAQmx驱动程序提供了一个单一的编程接口,支持获取波形和编程模拟输入、模拟输出、数字I/O、计数器和控制。


FPGA
用户可编程的FPGA支持对高级控制、信号处理、滤波、高级定时和其他逻辑的实时进程进行分载。NI使用Xilinx最新的FPGA技术,配备含多达326060个逻辑单元和840个DSP片的芯片。

 

NI系统方法

虽然结合了处理器和FPGA的异构架构对于高级应用程序和关键应用程序来说,非常具有价值,但此类系统的编程却是个不小的挑战。挑战无处不在,体现于各个编程阶段,包括选择或构建操作系统,开发与I/O对话的驱动程序,在处理器和FPGA之间进行通信,以及寻找编写FPGA程序所需的专业知识,在整个项目中保持两个终端的开发周期同步。

NI通过提供预先验证的软件堆栈和高级编程工具,解决了异构软件设计的挑战,您可以在此基础上进行开发,同时保持未来平台的开放性和可移植性。该架构提供了经过全面测试的中间件、驱动程序和Linux操作系统,开箱即用,可以快速将应用程序代码移植到NI平台上。您可以继续使用自己喜欢的应用程序开发工具,借助LabVIEW的优势实现实时的FPGA编程。LabVIEW FPGA编程的真正价值在于,这种抽象的数字设计方法使应用程序级的C/C++开发人员能够在硬件中实现应用程序最关键的部分,以往,如果脱离VHDL专家的支持,他们可能无法做到这一点。

图2.使用LabVIEW或任何与Linux兼容的工具对嵌入式处理器进行编程,并使用NI RIO驱动程序与LabVIEW FPGA进行通信。

 

实时编程

使用NI硬件的嵌入式系统设计人员在对系统进行架构设计时有许多编程语言和工具可以选择。开发人员可以使用LabVIEW、C/C++或文本数学对开放的嵌入式处理器进行编程,还可以重复利用过去项目的源代码,节省开发时间。程序员可以在LabVIEW Real-Time应用程序中调用过去项目中的C/C++库,实现代码重复利用,简化实时线程调度等任务。 另外,开发人员也可以在其首选的集成开发环境(IDE)中完全使用C或C++编写、开发和调试应用程序,并将其部署到嵌入式处理器。

 

FPGA编程

在嵌入式系统设计中引入FPGA,使高性能数字逻辑创建成为可能,不需要自定义ASIC设计。传统上来说,FPGA开发一直在使用由数字设计工程师编写的VHDL或Verilog等基于文本的硬件描述语言。但遗憾的是,由于语言语义具有挑战性,这些硬件描述语言很难充分发挥FPGA设计的全部功能。这一点从嵌入式行业为FPGA设计寻找更高层次的抽象就可以看出,如C-to-gates工具或图形化编程语言(如LabVIEW FPGA中的G语言)。

 

LabVIEW图形化编程环境抽象了FPGA硬件的复杂性,提供了软件工程师熟悉的编程结构,因此用户可以更快地设计高性能的嵌入式系统。

 

开发资源:Linux Real-Time C/C++开发工具

由于NI硬件运行的是标准Linux操作系统,您可以使用任何与Linux兼容的工具构建自己的嵌入式应用程序,从而可以灵活地重复使用您的IP、专业知识和开发工具。不过,您需要了解这些工具的位置以及可以如何与LabVIEW Real-Time和LabVIEW FPGA集成。

 

根据IP重复使用和实时编程专业知识选择软件设计模式

图3.根据IP重复使用和实时编程专业知识选择软件设计模式。

 

您必须使用LabVIEW FPGA编程Xilinx FPGA,但也可以使用C/C++或LabVIEW Real-Time与LabVIEW FPGA程序进行通信。在处理器应用程序和LabVIEW FPGA程序之间的通信层既有C API,也有LabVIEW API。因此,设计NI Linux Real-Time系统的第一步是选择一个顶层软件设计模式。

选择LabVIEW编程实时应用程序有很多优势,因为LabVIEW Real-Time包含了内置的多线程、实时线程调度结构,以及许多专门用于构建可靠的确定性代码的其他功能。此外,LabVIEW可以与其他语言编写的共享库和应用程序连接,从而在LabVIEW Real-Time设计模式中也可以重复使用这个宝贵的IP。

然而,如果顶层应用程序只能使用C/C++编写,LabVIEW则只能用于编写FPGA中的I/O,您可以评估哪些关键任务应该转移到硬件中,而不是在处理器上执行。


入门资源

  1. 首先,了解自己的NI嵌入式系统可能适用的软件设计模式:为NI Linux Real-Time系统编程选择软件架构。
  2. 设置首选IDE,以构建、部署和调试C/C++共享库或顶层应用程序。参阅NI Linux Real-Time C/C++开发入门指南,了解如何完成这些任务。
  3. 按照本教程的步骤,了解如何通过LabVIEW Real-Time应用程序调用C/C++共享库:在NI Linux Real-Time终端上将C代码与LabVIEW集成
  4. 详细了解如何使用FPGA接口C API通过C/C++实时应用程序与LabVIEW FPGA程序进行通信:使用FPGA接口C API编程白皮书和练习
  5. 访问我们的活跃开发者论坛,寻找有关C/C++和Linux编程的高级问题的答案:NI Linux Real-Time社区

 

必备软件工具链

  1. 对于NI Linux Real-Time应用程序编程,您至少需要以下一种工具:
    1. 如果您计划使用LabVIEW构建顶层实时应用程序,请下载LabVIEW Real-Time模块

    2. 如果您计划使用自有C/C++开发工具来构建共享库或顶层应用程序,只需下载GNU/Linux交叉编译器即可:
  2. 如果您计划使用C/C++构建顶层实时应用程序,请下载FPGA Interface C API(13.0版或更高版本)。FPGA Interface C API会根据您的LabVIEW FPGA比特文件生成一个C头文件,比特文件会公开FPGA寄存器、DMA FIFO和中断的命名参考变量。FPGA接口C API还包含一个函数API,用于读取和写入这些变量并操纵FPGA代码的运行。

  3. FPGA开发需要以下所有工具:
    1. LabVIEW(完整版或更高版本)
    2. LabVIEW FPGA模块
    3. NI-RIO驱动程序(2013版或更高版本)

开发资源:使用LabVIEW进行FPGA开发

LabVIEW明显适用于FPGA编程,因为它可清晰地表现出并行性和数据流。借助LabVIEW FPGA,具有C语言专业知识的工程师和科学家可以在其设计中利用FPGA的优势,不必学习硬件设计,减轻负担。此外,FPGA接口C API在FPGA和实时应用程序之间提供了一个通信层,用于I/O控制和数据串流。通过这个API,您可以使用LabVIEW图形工具编程FPGA,也可以选择LabVIEW或C/C++工具对系统内的处理器进行编程。 

 

LabVIEW FPGA可帮助您自行定制测量和控制硬件,无需使用底层硬件描述语言或板卡级设计。使用该自定义硬件,可以实现:独特的定时和触发例行程序、超高速控制、数字协议连接、数字信号处理和许多其他要求具备高速硬件可靠性和高度确定性的应用程序。