历史上的今天

今天是:2024年10月19日(星期六)

正在发生

2019年10月19日 | LabVIEW FPGA代码模块设计(IP核)

发布者:WhisperingWinds 来源: elecfans关键字:LabVIEW  FPGA代码  模块设计  IP核 手机看文章 扫描二维码
随时随地手机看文章

概览 
对于利用LabVIEW FPGA实现RIO目标平台上的定制硬件的工程师与开发人员,他们可以很容易地利用所推荐的组件设计构建适合其应用的、可复用且可扩展的代码模块。基于已经验证的设计进行代码模块开发,将使现有IP在未来应用中得到更好的复用,也可以使在不同开发人员和内部组织之间进行共享和交换的代码更好服用。 

目录 
1.代码模块 
2.可复用代码——知识产权 
3.I/O与资源的独立性 
4.定时独立性 
5.框图独立性 
6.文档、测试与范例 
7.总结 

代码模块 
任一项软件开发工作均包括函数、子例程、对象和代码模块,以及其他较大架构的基础构建模块的开发。当设计一个应用时,各个函数与操作均被识别和实现。然后,这些构建模块被组合与集成以形成更大的应用。通过长期开发不同应用的过程,一个开发小组或团队将创建表示常见操作的代码模块库,并对其进行复用以更快速地构建未来的应用。开发这样的代码库目的是通过一次构建和测试函数并多次复用它,减少开发的总工作量。模块化设计,除了促进现有代码的复用外,还提高了代码的可测试性与可维护性,从而允许开发人员和设计人员关注于应用相关的特性和代码段。 

每种编程语言以及某些情况下的编程环境都有一个优选的代码模块设计模型,以便改进代码模块的实现与集成。该优选设计可以因具体的开发人员而异,但通常一个开发组会根据共同的需要和考虑确定一组共享的设计准则。作为一种编程语言,LabVIEW自身拥有一组供世界各地的程序人员开发子VI使用的指导方针,以便子VI可以容易理解、而且运用于不同应用并由不同开发人员维护。LabVIEW FPGA,作为LabVIEW的一个子集,拥有其自身的一组用于利用FPGA特定行为构建代码模块(子VI)的指导方针,以便它们可以有效运用于广泛的基于FPGA的应用。 

可复用代码——知识产权 
FPGA平台上的可复用代码模块通常称为IP(知识产权)核——从传统芯片设计长时间演化来的名称。在LabVIEW FPGA中,这样的IP核由常用于LabVIEW编程和LabVIEW工具集的子VI组成。LabVIEW FPGA中的子VI支持我们一次实现不同的函数与操作,优化FPGA上的实现,然后将其运用至不同的应用。为使这样的子VI可以与不同的重叠需求和架构方便地协同使用,我们需要遵循某些基本指导方针,以确保子VI广泛可用,而不是专为一项特定应用而优化。 

为进一步促进和改善LabVIEW FPGA IP的复用,代码模块应当除子VI源码以外还包括一些组件。这些组件包括文档、测试代码和使用IP的基本范例。 

在LabVIEW FPGA应用中,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支持开发人员利用多个不同的函数访问FPGA上的块存储器,其中包括存储器读/写、FIFO、查询表及其他函数。这些函数中的大多数均在块存储中创建了一个唯一的地址空间,以避免发生IP与该应用其他IP间的存储器冲突。 

然而,LabVIEW FPGA 8.0存储器读函数和存储器写函数,对于其在作为当前FPGA功能特性一部分的任一VI中使用的所有实例,均使用了一个16 kB共有地址空间,这个共有地址空间被当前FPGA功能中任一VI的函数实例所使用。使用这些函数可能会与该应用其他部分使用的存储器产生冲突,因此不应当使用这些函数。如果需要在利用LabVIEW FPGA 8.0(或者更早版本)开发的IP代码模块中支持随机存储访问,您应当使用利用LabVIEW存储器扩展应用程序创建的一个存储器模块。 

在LabVIEW FPGA 8.20中,每个存储器读函数和存储器写函数引用一个特定的存储块(地址空间),典型情况下,它在LabVIEW项目中作为一项资源被创建。由于这些存储块在项目中被定义,因此,如果您将一个IP代码模块VI加载至一项新应用,它们不会自动转递给新的项目。为此,您可以在VI中定义一个存储块作为VI-Scoped存储配置,而不是LabVIEW项目。这一VI-Scoped存储块可以在IP中创建并使用;对于任一使用该IP的新应用,它将被自动创建。 

图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的一项应用,这些范例将成为工作的起点。 

图8:展示PWM发生器IP的使用方法的VI范例 

总结 
如果创建的IP代码模块灵活且易于使用,那么LabVIEW FPGA IP代码模块可以在应用开发中提供显著的优势和节约。该文档所介绍的指导方针将有助于确保IP可以方便地复用并无须为单个应用进行定制处理。

下面是在开发任何LabVIEW FPGA IP过程中应当遵循的指导方针的总结列表:

I/O资源不应嵌入在IP代码模块的框图中。
请勿在IP中使用项目引用的存储器读写函数或FIFO读写函数。如可能,使用一个VI scoped存储块或FIFO(LabVIEW 8.20)。
文档化表述IP中存储器(存储器拓展例程存储块、FIFO和查询表等)的所有使用。在IP的分布中包含任何存储器拓展例程存储块VI。
不要在IP中包含任何循环结构或等待/循环定时器函数,除非这便是该IP的主要目标。 
在IP中使用局部变量存储状态信息。 
文档化表述IP的任何非正常的定时行为。 


关键字:LabVIEW  FPGA代码  模块设计  IP核 引用地址:LabVIEW FPGA代码模块设计(IP核)

上一篇:基于LabVIEW和PXI的汽车数字仪表测控系统
下一篇:基于LabVIEW设计和开发用于分离稀有细胞的自动化系统

推荐阅读

搭载Qualcomm骁龙850移动计算平台的三星Galaxy Book2在纽约正式发布。时尚纤薄的二合一设计、突破性的千兆级LTE连接、多个工作日续航以及“即开即用”、 “始终更新”的特性,让三星Galaxy Book2为消费者带来了全新水平的移动生产力。 Qualcomm全球产品市场副总裁莫珂东(Don McGuire)出席了此次发布会,他表示:“PC用户应该享受到如同智能手机一般...
随着各种外接数码设备的出现,小小的接口选择变得重要起来。选择笔记本电脑的时候,不仅要关注它的配置、品牌、外观,接口的丰富与否也是一个重要的参考点。今天就解析一下常用的接口。 一、USB 接口这个大家都很熟悉了,USB 是笔记本电脑使用频率最高的接口。USB 是英文 Universal Serial Bus 的缩写,中文含义是“通用串行总线”。USB 经过多年的...
据最新消息,小米已经在为其下一代旗舰手机小米 11 做准备,这款机器将会搭载骁龙 875 处理器,而且还将获得限时的独占期。该信息来自爆料者@数码闲聊站,近日他在微博帖子中透露了该信息。小米 11 将是国内首款采用骁龙 875 处理器的手机,而三星的 Galaxy S21 系列将是全球首款采用该芯片的产品。这并不令人意外,但目前没有有关独占期将持续...
为了使用32.768 kHz 钟表晶体作为器件的时钟源,必须将熔丝位CKSEL 设置为“1001”以选择低频晶体振荡器。晶体的连接方式如Figure 13 所示。通过对熔丝位CKOPT 的编程,用户可以使能XTAL1 和XTAL2 的内部电容,从而去除外部电容。内部电容的标称数值为36 pF。选择了这个振荡器之后,启动时间由熔丝位SUT 确定,如Table 10 所示。

史海拾趣

问答坊 | AI 解惑

ADI推出新款高速高精度仪表放大器

美国模拟器件公司发布了两款数字可设置增益仪表放大器,它们具有出众的精度和带宽以及先进的工业和仪表仪器应用所需要的速度和精密度。这些应用,包括测试、控制和高速数据采集系统,都要求快速、精确测量以及在大电压范围内鲁棒性信号调理。  ...…

查看全部问答∨

求助哪里有卖单片机开发板的?(本人在保定)

大家好!我是一个单片机的初学者,很想把单片机学好所以想买一块开发板,但是不知道哪里有卖的,也不知道大概的市场价格是多少?大家给个建议好么?本人在保定,希望保定的朋友多多帮忙!另外还想问个低级问题:开发箱和开发板有什么区别?哪个比较好?…

查看全部问答∨

VDSL技术前景

:D 一、方便灵活的xDSL技术 INTERNET的迅速发展已经改变了我们工作和生活。随着计算机技术和通信技术的飞速发展,INTERNET已不仅仅是单纯意义上的网络,它还能向我们提供全面的数据和多媒体服务。目前互联网上许多新的应用已经可以提供大量的 ...…

查看全部问答∨

多串口RS485通讯程序的探讨

本人最近在做多串口的通讯工控软件,我的程序是通过研华的串口拓展卡, 每个串口连接5---10台仪器,通讯协议是通过MODBUS协议修改而成。 开发语言是C# ,使用Cserialport ,仪器信息是通过数据库读取的(数据库中设置了该仪器的串口号,仪器的地址) ...…

查看全部问答∨

仿真器总结与解决

我刚开始用它时出现过很多问题,现在把常用的留给大家:     1,iar使用中会出现电源灯不亮;      2,固件不匹配;      3,ccs的升级问题:   这张图片备用了一个降级软件 &nb ...…

查看全部问答∨

易电源试用3——纳米模块的测试(悲剧了!)

LMZ10501纳米模块改造并测试。将RB电阻换成240K,输出电压空载的时候达到3.3V,接上CREE R5 LED,测得如下数据:输入电压Ui(V)输入电流Ii(A)输出电压Uo(V)输出电流Io(A) 2.70.1352.71 2.80.2892.76 2.90.4432.82 3.00.6252.84 3.20.8992.88 3 ...…

查看全部问答∨

ADI汽车传感器和传感器接口解决方案

好东西不敢独享,拿出来大家看看…

查看全部问答∨

PCB制作中如何正确的敷铜

PCB制作中如何正确的敷铜 默认分类   2009-10-12 17:20   阅读66   评论0   字号: 大大  中中  小小 敷铜作为PCB设计的一个重要环节,不管是国产的青越锋PCB设计软件,还国外的一 ...…

查看全部问答∨

你们觉得恒流2A充电怎么弄比较好?输入电压可变的话

你们觉得恒流2A充电怎么弄比较好?输入电压可变的话~~~~~~~~~~~~~~~~…

查看全部问答∨

请帮忙看一下STM32L053R8中断用不了,但是不知道程序错在哪里。

我用的是STM32L053R8 Nucleo开发板 然后外接的其他学习板上的一个LED和一个按键。 LED接PB4,GPIO口低电平时LED点亮。 按键与PB3和3.3V电源相接,另一端接地。 程序是根据在官网上下的例程抄的,但是中断还是没反应。 请各位帮忙看看错在哪里 ...…

查看全部问答∨
小广播
最新测试测量文章

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved