对于利用LabVIEW FPGA实现RIO目标平台上的定制硬件的工程师与开发人员,他们可以很容易地利用所推荐的组件设计构建适合其应用的、可复用且可扩展的代码模块。基于已经验证的设计进行代码模块开发,将使现有IP在未来应用中得到更好的复用,也可以使在不同开发人员和内部组织之间进行共享和交换的代码更好服用。
代码模块
任一项软件开发工作均包括函数、子例程、对象和代码模块控制工程网版权所有,以及其他较大架构的基础构建模块的开发。当设计一个应用时,各个函数与操作均被识别和实现。然后,这些构建模块被组合与集成以形成更大的应用。通过长期开发不同应用的过程,一个开发小组或团队将创建表示常见操作的代码模块库,并对其进行复用以更快速地构建未来的应用。开发这样的代码库目的是通过一次构建和测试函数并多次复用它,减少开发的总工作量。模块化设计,除了促进现有代码的复用外,还提高了代码的可测试性与可维护性,从而允许开发人员和设计人员关注于应用相关的特性和代码段。
每种编程语言以及某些情况下的编程环境都有一个优选的代码模块设计模型,以便改进代码模块的实现与集成。该优选设计可以因具体的开发人员而异,但通常一个开
发组会根据共同的需要和考虑确定一组共享的设计准则。作为一种编程语言,LabVIEW自身拥有一组供世界各地的程序人员开发子VI使用的指导方针,以便子VI可以容易理解、而且运用于不同应用并由不同开发人员维护。LabVIEW FPGA控制工程网版权所有,作为LabVIEW的一个子集,拥有其自身的一组用于利用FPGA特定行为构建代码模块(子VI)的指导方针,以便它们可以有效运用于广泛的基于FPGA的应用。
可复用代码——知识产权
FPGA平台上的可复用代码模块通常称为IP(知识产权)核——从传统芯片设计长时间演化来的名称。在LabVIEW FPGA中控制工程网版权所有,这样的IP核由常用于LabVIEW编程和LabVIEW工具集的子VI组成。LabVIEW FPGA中的子VI支持我们一次实现不同的函数与操作,优化FPGA上的实现,然后将其运用至不同的应用。为使这样的子VI可以与不同的重叠需求和架构方便地协同使用,我们需要遵循某些基本指导方针CONTROL ENGINEERING China版权所有,以确保子VI广泛可用,而不是专为一项特定应用而优化。
为进一步促进和改善LabVIEW FPGA IP的复用,代码模块应当除子VI源码以外还包括一些组件。这些组件包括文档、测试代码和使用IP的基本范例。
在LabVIEW FPGA应用中www.cechina.cn,IP代码模块典型地用于一些操作的执行,如通信协议(如SPI、I2C等)的编码与解码、数字信号处理、滤波、控制算法的实现、传感器信号(如PWM、积分信号)的编码/解码和基准标定等。
开发LabVIEW FPGA IP的最基本指导方针便是,开发不仅独立于其主应用、而且对其主应用不产生影响或不会有显著要求的代码模块。IP代码模块与其主应用间的唯一需求或依赖性应当是子VI连接面板的接口。该文档将阐述如何在LabVIEW FPGA IP中创建这样的调用独立的IP子VI,并展示一些相关范例。
I/O与资源的独立性
为使LabVIEW FPGA IP便于应用于不同的应用,它应当独立于任何输入/输出通道(I/O)或其他硬件资源,如FPGA块存储器。根据具体的应用,最终应用可以使用不同的RIO板卡或其他FPGA目标平台。因此,IP代码模块不应根据一个特定类型的I/O资源进行编程。将IP模块集成至最终应用的编程人员或开发人员将选择使用某个特定的I/O资源。来自I/O资源数据与值,应当以参数的方式传递给IP模块,或从IP模块返回。
例如对于一个PWM输出IP模块,应用开发人员将为PWM输出信号选用某条数字输出线。在此例中,该PWM IP模块应当产生并输出信号的当前状态。开发人员将把在更高层次VI中赋值给I/O资源。该I/O资源未嵌入在IP代码模块的框图中。
图1:一个调用PWM输出IP代码模块(子VI)的应用VI的框图
同样的指导方针应用于任意输入信号。例如,假设您在使用一个由数字滤波器设计工具包创建的模拟滤波器IP子VI,模拟数值应当自该滤波器子VI外部采集,然后传递给IP代码模块。
图2:使用一个模拟滤波器IP子VI(直接FIR)。模拟数值在主VI采集并传递给滤波器IP。
独立于I/O资源的IP代码模块的开发,使其使用更为方便和灵活,并支持将其多次集成到一项应用,而不必定制该IP代码模块的每个实例。
块存储
除了I/O通道外,其他可能为LabVIEW FPGA IP使用的资源便是块(用户)存储器。LabVIEW FPGA支持开发人员利用多个不