微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > LabVIEW FPGA代码模块设计(IP核)

LabVIEW FPGA代码模块设计(IP核)

时间:06-06 来源:互联网 点击:

图3:使用LabVIEW FPGA 8.20 VI scoped指定存储块

相似地,使用块存储器来缓存数据的LabVIEW FPGA FIFO函数,是基于一个在LabVIEW项目中创建的FIFO资源。在LabVIEW FPGA 8.0中,如果您决定使用一个IP代码模块中的FIFO,该IP的用户需要在应用项目中手动创建相关的FIFO资源。为免除对IP代码模块用户的这一额外需求,我们建议对于LabVIEW FPGA 8.0中的任何IP代码模块避免使用FIFO。

在LabVIEW 8.20中,您可以选择创建一个VI-Scoped FIFO配置以一个VI专用FIFO存储块。这一操作与指定VI-Scoped存储块的方式相同。

图4:使用LabVIEW FPGA 8.20 VI范围指定FIFO

无论存储器如何被IP代码模块或应用的其他部分使用,都从FPGA上可用的公共块存储器上分配存储空间,存储空间的大小取决于目标平台中所使用的特定FPGA。因此,对于IP代码模块的使用者,重要的是知道IP使用了多少存储器。这一信息应当包含在文档和上下文感知的帮助文件中。使用IP模块的开发人员必须明确了解应用中不同部分所使用的块存储器的大小,以防止编译过程中可能的存储溢出。

定时独立性
为使IP模块能够自由运用于LabVIEW FPGA应用中,该代码模块不应对主应用的定时产生明显影响。例如,在处理来自一个积分编码器的一对数字输入信号时,解码位置信息的代码模块不应当显著延迟调用它的应用程序。这就意味着,该IP代码模块子VI应当快速、高效地执行其操作。在大多数情况下,这要求子VI中不应存在任何循环结构。而且,子VI也不应使用任何等待或其他延迟代码运行的定时函数。如若定时或循环功能需要作为主应用的一部分,那么应当在调用它的VI中实现这些功能。下面的框图展示了一个积分解码器的实现。该范例使用局部变量存储IP代码模块一次调用以及下一次调用(其详细描述见下段)的状态信息。

图5:一个积分解码器IP代码模块范例

使IP代码模块定时独立于调用者的指导方针,存在一个例外:如果该IP代码模块目的在于为其调用应用提供定时功能。此类IP代码模块的例子便是一个数据采集扫描时钟例程。下面的框图展示了一个简单的IP代码模块,它实现了一个具有附加功能特性的扫描时钟,附加功能就是验证调用的应用程序是否能够满足指定的定时。这一增强的扫描时钟可以快捷运用于多个不同的应用中。在此例中,IP代码模块的操作与定时依赖性应当以文档的形式详细描述,以便该IP的用户了解其应用的定时行为将受到怎样的影响。

图6:一个扫描时钟IP代码模块范例

框图独立性
LabVIEW FPGA IP代码模块可以运用于使用不同编程模型的广泛应用中。许多LabVIEW FPGA特性采用while循环和for循环编写而成,这些循环并没有对代码、函数和其中所使用的VI作太多限制。然而,单周期定时循环可以运用于一些要求更短周期时长的应用。因此,如果可行的话,IP代码模块应当通过编写使其可以运用于一个单周期定时循环中。这将对IP代码模块内的代码施加一定的限制。然而,这些限制与前述讨论定时独立性的部分中所介绍的指导方针相似。

避免在您的IP代码模块中使用任何循环。
使用局部变量存储您的IP代码模块的一次调用以及下一次调用的状态信息。
避免在您的IP模块中使用任何定时函数。
避免在您的IP代码模块中使用与单周期定时循环不兼容的函数,如商余函数。
一些应用或许使用了一个IP代码模块的多个拷贝,该代码模块应当无缝支持这样的操作。如果代码模块子VI使用了任何局部变量存储状态信息,那么该子VI应当设置为可重入。这样将在编译过程中创建多个FPGA之上的子VI的实例,每个实例都拥有其专用存储空间用于存放状态信息。

文档、测试与范例
在IP代码模块开发过程中,文档、测试和范例构造也都应当成为开发过程中有意为之的一部分。其他不熟悉该代码模块的开发人员将在其自己的应用中使用该代码并且需要掌握关于如何正确使用该IP的信息。

作为实现的一部分,每个将为其他开发人员使用的子VI都应当包含有LabVIEW上下文帮助。当帮助窗口打开并且鼠标光标悬浮于子VI上方时,该上下文帮助将显示在LabVIEW中。该文档应当包含关于VI操作/功能的一个基本描述,以及关于每个输入输出参数的基本描述。还应当注意任何其他关于子VI的编程限制或约束,如在单周期定时循环中的使用或块存储的利用率。关于VI及其参数的更详细描述应当包含在一个单独的用户或参考手册文档中。

图7:PWM发生器IP的上下文帮助范例

一旦完成了IP代码模块的基本实现,测试与范例构造就成了开发过程中的下一个逻辑步骤。测试将确保该IP代码模块在各种不同的应用中完成预期的操作。IP代码模块的测试应当仔细进行,覆盖不同的输入值和不同的编程场景,而不是仅仅覆盖最初所考虑的内容。对于每个IP,应当完成多个实例的测试以及在不同编程结构中的使用。

最终的IP代码模块应当包括一些基本范例和可能更高级的范例,以阐述该代码模块如何在应用中使用。通常,对于围绕某个特定的IP的一项应用,这些范例将成为工作的起点。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top