LabVIEW FPGA PCIe开发:上位机PC端Memory应用开发教程
FPGA PCIe开发中的上位机PC端Memory应用程序开发: LabVIEW与DLL集成应用
引言
在FPGA设计领域,系统识别成功之后的下一步是构建上位机应用程序与硬件间的通信。本文将聚焦一点一高专业度的方案,即如何在PC端通过LabVIEW利用动态链接库(DLL)进行FPGA内存通道读写,实现高效的data flow穿梭于PC与FPGA之间。基于本书配套的开发指南和云盘资源,我们将深入探讨封装的关键技术点。
DLL的依赖与预置
首次接触外部库文件的用户可能会遇到系统(尤其是Win7和Win10)缺少ucrtbased.dll和vcruntime140d.dll动态库的问题。直接使用生成的“Xillybus_PC_for_LV_DLL_8Chs.dll”,Win7系统将提示缺失的依赖库名称,但Win10系统可能会直接报错,可见该部分内容是需要加以优化的用户体验环节。
为解决兼容性与简化用户端操作,将上述依赖库直接与“Xillybus_PC_for_LV_DLL_8Chs.dll”文件置于同一目录,以确保无论通过何种方式调用dll,用户都能轻松访问并进行应用。这一步的实施充分体现了对用户便利性和操作环境兼容性的高度重视。
LabVIEW上位机工具设计与构建
LabVIEW作为FPGA应用编程的利器,通过lvlib库的一个封装,用户只需将该库拖拽至项目中,即可高效地完成与下位机FPGA的PCIe通信。这部分功能为工程师提供了直观的路径建立与配置界面,如图775所示的实例截屏,展示了构建的上位机项目库内容,其中包括PCIe DMA FIFO相关的多态VI和Memory通道读写相关的多态VI。
PCIe Memory功能封装详解
本文重点介绍了lvlib库中Memory相关函数的封装与管理,旨在通过明确的步骤简化编程流程,其中包括是DMA FIFO的初始化、数据读取与关闭,以及Memory通道的初始化、写入、读取与关闭等关键操作,并通过图776展示其中的核心函数配置界面。
初始化(FPGA_Memory_Read_Poly_Init_DLW30.vi):根据用户选中的16位或32位Memory通道,打开指定的读取通道,返回唯一句柄,便于后续的读取操作。
读取(FPGA_Memory_Read_Poly_Receive_DLW30.vi):通过句柄和指定地址,从FPGA内存中读取数据,详实展现读取过程中涉及的系统调用(lseek 和 read)。
关闭(FPGA_Memory_Read_Poly_Close_DLW30.vi):释放读通道引用,避免内存泄露,确保FPGA内存资源的正常管理。
写入(FPGA_Memory_Write_Poly_Send_DLW30.vi):通过句柄和给定地址,对FPGA内存执行数据写入操作,以支持数组或内存内容的实时更新。
关闭(FPGA_Memory_Write_Poly_Close_DLW30.vi):同上操作,确保写通道的有效管理。
实际应用提示
所有涉及DLL调用的子VI必须设置为“任意线程”,避免对读写操作的阻塞时导致LabVIEW应用响应中断,影响开发与调试效率。为确保用户能充分理解并避免此类错误,同时也在程序设计中进行了大量优化,以提高整体的用户使用体验。