深入浅出LabVIEWFPGA周喆颋LabVIEWFPGA软件工程师2ni.com/china|NICONFIDENTIAL我们在工程中面临的挑战电力控制发动机控制医疗仪器测试自动控制工业控制能源应用电力监控与控制建筑监测3ni.com/china|NICONFIDENTIAL基于LabVIEWRIO构架的解决方案•系统级设计平台•无缝集成多种硬件•图形化系统设计环境•提升开发效率4ni.com/china|NICONFIDENTIAL硬件平台CompactRIOPXI/PCI板卡•多功能通用测控(RIO)•测试验证(FlexRIO)•通信处理(VST)高可靠、耐恶劣环境低能耗、小体积热插拔、电学隔离5ni.com/china|NICONFIDENTIAL议程•搭建程序框架•FPGA算法开发技巧•与上位机通信•FPGAVI仿真6ni.com/china|NICONFIDENTIALFPGA项目基本结构7ni.com/china|NICONFIDENTIAL功能分配–主机还是FPGA•资源、实时性、调试复杂度硬件I/O信号处理控制逻辑测量控制显示存储主机(PC/RT)•资源灵活•调试方便•实时性差FPGA•实时性强•资源有限•调试困难模拟、数字IO……滤波、统计、FFT、调制、解调……PID、同步、触发、通讯应答……波形分析、频谱分析、联合时频分析、故障诊断、网络通信……测量显示、数据存储、网络服务……8ni.com/china|NICONFIDENTIALCompactRIO项目入门RTFPGA模块1……9ni.com/china|NICONFIDENTIALCompactRIO项目入门10ni.com/china|NICONFIDENTIALCompactRIO项目入门•LabVIEWFPGA设计嵌入式系统非常简单、方便•解决了底层开发的硬件细节•工程师可以将精力集中于所要解决的问题本身11ni.com/china|NICONFIDENTIAL算法开发技巧•搭建程序框架•算法开发技巧•算法移植•单周期定时循环•利用工具加速开发•FPGA与上位机通信•FPGAVI仿真12ni.com/china|NICONFIDENTIAL行为/算法设计•针对问题,采用LabVIEW设计算法•功能准确•无需考虑FPGA实现细节•采用高层函数•采用浮点数运算•采用数组结构•采用For/While循环13ni.com/china|NICONFIDENTIAL将算法移植至FPGA•FPGA的语法要比桌面环境更加严格•浮点数→定点数•数组运算→逐点运算•所作出的修改需要重新进行验证•我们正在努力让这些工作变得更简单!14ni.com/china|NICONFIDENTIAL各种数值类型的范围与精度问题•浮点数(双精度)•范围是动态的•精度较高•整数•范围是固定的•可能会有溢出和下溢的问题•定点数•采用分数的形式•范围通过手动设定•可能会有溢出和下溢的问题•例:?16,12•-2048~2047.9,△=0.0625整数字长(iwl)小数字长(fwl)字长(wl)指定的小数点位置符号位15ni.com/china|NICONFIDENTIAL避免强制转换标识•可能表明精度降低•可能表明资源占用量增多红色输出–数据类型超出LV所能表示的精度范围蓝色输出–数据类型已被改变红色输入–数据类型不匹配16ni.com/china|NICONFIDENTIALLabVIEW2013推出FPGAIPBuilder!•自动优化FPGAVI•方便将桌面算法转化成FPGAVI•快速评估性能和资源消耗设置性能&资源需求算法VI优化的FPGAVI17ni.com/china|NICONFIDENTIAL定时–较低频率•使用While循环及循环定时器•可指定等待的毫秒间隔/微秒间隔/时钟周期数•代码执行时间必须小于定时器的定时间隔•适合1MHz以下定时频率18ni.com/china|NICONFIDENTIAL定时–较高频率/精确定时•使用单周期定时循环•采样频率由连接的时钟源确定•适合较高频率定时/外部时钟源/多通道同步采样19ni.com/china|NICONFIDENTIAL单周期定时循环的实现细节•可以指定循环内的时钟•可达到更高的数据吞吐量,并消耗较少资源•需要通过代码控制数据流触发器触发器触发器编译器生成的触发器,用于确定数据流组合逻辑(不会生成触发器)触发器触发器20ni.com/china|NICONFIDENTIAL单周期定时循环使用案例•带窗FFT变换•数据吞吐量可达到1sample/cycle21ni.com/china|NICONFIDENTIAL有用的FPGA开发工具22ni.com/china|NICONFIDENTIALFPGA数学和分析面板•信号发生、控制•均值、周期、滤波器•FFT、重采样•时延、LUT等23ni.com/china|NICONFIDENTIAL高吞吐率数学函数面板(定点)•整数?OUT啦!•速度和资源的权衡•While循环/单周期定时循环•多周期/流水线24ni.com/china|NICONFIDENTIALLabVIEW2013支持线性代数模块!•点积•矩阵乘法•矩阵转置•范数平方25ni.com/china|NICONFIDENTIALXilinxIP生成器•在设计中集成Xilinx设计的IP核•DDS、滤波器、FFT……说明详尽、功能强大、资源利用充分26ni.com/china|NICONFIDENTIALSCTL利器–IP集成节点•在VI中嵌入VHDL代码或网表文件•仅可在单周期定时循环中使用•可支持双时钟addsub.ngcDiscreteDelay.vhdfir.coemultiplier.ngctop.vhd导入对话框Fir_compiler_v5_0.xco27ni.com/china|NICONFIDENTIALIPNet:分享FPGAIP•|NICONFIDENTIAL数字滤波器设计工具包•低通、高通、带通、带阻、波陷•频响均衡•升、降采样•重采样(阶次分析)•锁相环(超窄带滤波)•包络检测•时延•波束成形29ni.com/china|NICONFIDENTIALLabVIEWFPGA算法开发•FPGA算法移植•单周期定时循环•内置丰富的数字信号处理VI和高性能函数•开放并兼容多种开发方式•工具包辅助信号处理设计与实现30ni.com/china|NICONFIDENTIALFPGA与上位机通信•搭建程序框架•算法开发技巧•FPGA与上位机通信•FPGAVI仿真31ni.com/china|NICONFIDENTIALNICompactRIO软件架构可重复配置FPGALabVIEWFPGAVI实时操作系统UserInterfaceLabVIEWReal-TimeVIFPGA接口LabVIEWFPGALabVIEWReal-TimeWindowsPCWindows主机VI网络通信LabVIEWforWindows上位机下位机:嵌入式CompactRIO平台•高速及定制的采集•确定性的算法•CPU消耗大的运算•直接数据采集•嵌入式的分析或控制•FPGA的操作代码•与主机通信•数据记录•与下位机通信•人机界面•数据库连接32ni.com/china|NICONFIDENTIAL方式一:输入控件/显式控件•可读可写,但上位机更新速度较慢•适用于设置参数/监控状态上位机FPGA33ni.com/china|NICONFIDENTIAL方法二:DMAFIFO•可以传输连续数据•终端到主机/主机到终端•创建FIFO时选择DMA类型•每个终端仅包含有限个DMA通道34ni.com/china|NICONFIDENTIAL方法二:DMAFIFOFPGA上位机35ni.com/china|NICONFIDENTIAL避免FIFO溢出•需要估算数据吞吐量•必要时检查Timeout标志FIFOBufferDataelementLocalBusPCIBusPoint-by-pointwriteoperationBufferreadoperationDMAEngine36ni.com/china|NICONFIDENTIALFPGAVI仿真•搭建程序框架•算法开发技巧•FPGA与上位机通信•FPGAVI仿真37ni.com/china|NICONFIDENTIAL测试FPGAVI•相对于直接在硬件上运行:•可以更快地反复调试•可以使用探针或者其它LabVIEW调试工具•可以与桌面算法的结果比较38ni.com/china|NICONFIDENTIAL搭建FPGA测试台39ni.com/china|NICONFIDENTIAL配置仿真模式40ni.com/china|NICONFIDENTIAL总结•NIRIO硬件平台•创建工程•编写FPGAVI的技巧•数值类型、数组/内存•多多利用现有IP核•合理使用单周期定时循环•与上位机通信•输入控件/显式控件•DMAFIFO•功能仿真41ni.com/china|NICONFIDENTIAL更多资源•NICompactRIO开发者指南•ni.com/compactriodevguide•GSDZoneCompactRIO教学大楼•gsdzone.net/CompactRIO.aspx•NIDeveloperZone设计参考•zone.ni.com42ni.com/china|NICONFIDENTIAL