时间:2024-07-28
贾毅婷1,, 张东来3, 李铁才, 王子才1, 张 斌
(1.哈尔滨工业大学 航天学院,黑龙江 哈尔滨 150001; 2.深圳航天科技创新研究院,广东 深圳 518057;3.哈尔滨工业大学(深圳),广东 深圳 518055)
目前复杂系统测试主要采用设备分为数字示波器和数据存储记录仪两类。数字存储示波器[1-3]主要提供单板测量和以合适的视觉显示效果为目的生成显示波形,因此采样率高但分辨率低,存储深度固定且可供回放的数据量少。数据存储记录仪[4-7]主要记录原始数据,并传给PC机做处理和分析。以NI的采集卡为例,其一般配备PCIe/PCI/USB等数据高速传输接口,可以在PC机上用演示软件以固定格式将数据存储到电脑。对于多路高速采样和大容量存储[8-10],USB和PCI接口不适用,而PCIe接口直连PC机较为不便。对于需要改变数据格式以便于解析的客户,数据存储需要用户在演示代码基础上进行修改,需要用户做二次开发,对于希望即拿即用的客户来说,其并不适用。日置(HIOKI)公司的存储记录仪一般兼顾记录仪和数据示波功能,以高端存储记录仪886x系列为例,具备LAN/USB/PC卡槽等各种接口,配备80 GB存储硬盘,能以20 MS/s采样速率和12-bit分辨率采集信号,能做到长期监控和瞬时记录同时进行,但REC高速存储记录仅在设定好时间轴范围内的采样数据中取出并保存峰峰值,MEM实时记录以10 MS/s采样速率及12-bit分辨率最多仅存储1.6 s时间长度的数据。国外厂家的数据存储记录仪不仅性能并不适用于复杂系统测试或老化试验,而且售价昂贵。为解决上述问题,本文设计了基于PCIe总线架构的高精度数据采集及大容量数据存储系统,并针对硬件设计和软件开发过程中的关键问题,给出了完善的解决方案。
大容量数据采集存储系统的数据存储方式如图1所示,硬件组成架构图2所示,由采样端、控制端和存储介质组成,其中采样和控制端位于采集存储系统内部,PCIe接口硬盘同样位于系统内部, USB2.0总线进行U盘存储、千兆以太网接口将数据传输至PC端进行存储,板载EMMC总线方式的可插拔SD卡存储方便用户数据随时可取。当采集存储设备的采样前端为高速多通道方式时,以6通道每通道采样率20 MS/s,16位精度为例,每秒将产生240 MB数据量,使得前述USB数据传输、以太网数据传输和EMMC数据传输方式都不适用,此时采用理论速率可达2 GB/s速率的PCIe 2.0×4总线方式配备PCIe AHCI硬盘进行大容量数据存储。
图1 数据存储方式示意图
该大容量数据采集存储系统以Altera Cyclone V SX系列SoC作为主控,其不仅包含传统FPGA架构,且集成了基于ARM Cortex A9的硬核处理器系统(Hard Processor System,HPS),如图2所示,以及高速收发器PCIe硬核IP子系统,主频可达800 MHz。该系统硬件架构总体可分为控制器单元、数据采集单元、数据采集硬件校准单元、数据存储单元、人机接口单元和上位机通信单元等,各单元模块之间协调工作,完成多通道隔离量测记录和显示,同一个时钟源和触发保证了各通道之间同步采样。由前所述,多通道高速采样后的数据根据使用情况可选择存至PCIe AHCI接口硬盘、U盘、SD卡或通过千兆以太网传至PC机,本文重点描述多通道高速采样后的大容量数据存储方式和数据流。
PCIe总线的物理链路如图3所示,端到端的数据传送以及差分数据传输方式,使得总线抗干扰能力强,且有效抑制电磁干扰(EMI)。PCIe总线采用双向的传输方式且可运行全双工模式,双单工连接能提供更高的传输速率和质量。双单工是指PCIe总线的物理层由双单工信道(Dual-Simplex Channel)组成,由发送对和接收对实现双向数据传输。PCIe总线上每个设备都有自己的专用连接,不需要向总线请求带宽,与传统PCI总线在单一时间周期内只能实现单向传输不同,PCIe的双单工连接能提供更高的传输速率和质量,二者之间的差异跟半双工与全双工类似。
图2 采集存储系统硬件组成架构
图3 PCIe总线的物理链路
主控SoC FPGA侧集成PCIe硬核IP,HPS侧可通过H2F桥和LwH2F桥来访问该IP核资源,数据存储控制模块框架如图4所示,PCIe IP通过Txs、控制寄存器访问(Control Register Access,Cra)、RP_master接口实现与HPS的互联访问。Cra端口可访问PCIe IP内部控制和状态寄存器,Txs端口控制数据输出,RP_master端口控制数据接收和MSI信号发送。FPGA与ARM协同工作进行数据存储,FPGA与ARM之间通过AXI总线进行数据传输,FPGA可操作ARM外挂的RAM存储器并可直接操作PCIe IP核,ARM可通过PCIe IP核读写硬盘数据。通过优化数据采集、传输、存储和读取动作,避免读写数据之间的带宽抢占,保证数据连续不丢失。
图4 数据存储控制模块框架图
为实现系统各部分间的通信,设计了FPGA与ARM之间,以及操作RAM和硬盘的通信协议。
HPS发送“开始记录”指令后,FPGA控制采集单元的FPGA对各通道ADC数据进行采集,采样频率为20 MS/s,每个通道分配128 MB的数据缓存区,各通道每往内存写入32 MB的数据,就发送一个中断给HPS,当128 MB写满时,再从头开始写入。其中命令和数据交互格式如表1所示,包含开始/停止采样的控制指令、指示灯控制指令、测试指令以及必要的采样通道配置指令等。
表1命令和数据交互格式
数据包类型(1字节)数据(N字节)说明0x10测试0x3141Byte:控制量选择2Byte:控制量数值1Byte:通道选择0x3321Byte:采样耦合方式选择1Byte:通道选择0x3421Byte:校准开启/关闭1Byte:通道选择0x3521Byte:高压衰减比例选择1Byte:通道选择0x36测试0x373控制指示灯0x11开始采样0x12停止采样
(1) FPGA与HPS的数据缓冲区。
需要在系统中分配多块缓冲区给FPGA写入采样数据,对应多个独立的数据采集通道,以两通道为例,如表2所示,每个通道对应一个缓存区,各通道128 MB的缓冲区空间分为4个大小相同的部分,每部分32 MB,FPGA每写32 MB的数据后向HPS发送一个中断,当写满128 MB的空间后再从起始地址开始写后,如此循环。
表2 数据缓冲区地址和大小分配
(2) 指令同步。
HPS发送指令给FPGA时,直接发送到相应地址即可,FPGA给HPS发送数据时,先将数据写到内存,再发送一个中断。
① HPS发送指令给FPGA的地址:0xC0000000 + 0x2000000;
② FPGA发送指令给HPS的地址:0xC0000000 + 0x2000000;
③ FPGA发送指令给HPS的中断号为6,地址为90~9F。
(3) FPGA写入采样数据到缓冲区。
每个通道采集的数据对应一个128 MB的数据缓冲区,每个通道采集的数据只能写入对应的缓冲区,每个通道每采集32 MB数据后将起始地址和结束地址写入内存,再发送一个中断,然后接着上一个32 MB的结束地址继续向内存写下一个32 MB的数据,每个通道的缓冲区循环写入(循环队列的形式)。FPGA发送的中断号为7,地址为A0~AF。
HPS启动时在启动参数中设置预留内存空间大小为512 MB,这样可以把HPS使用的SDRAM高地址的512 MB空间预留出来,这512 MB空间不能作为Linux系统和Linux程序运行使用的空间,但这部分空间在Linux系统中使用mmap映射后依然可以访问,而FPGA可以通过FPGA to SDRAM总线来访问挂载在HPS上的SDRAM,这样就建立了与FPGA传输大量数据的通道。FPGA采集的数据通过FPGA to SDRAM总线写入到HPS的SDRAM,从每个通道的起始地址开始写入,各通道每写满32 MB的数据时,FPGA发送一个中断来通知HPS读取数据,然后继续写下一个32 MB的空间,当128 MB的空间写满后,FPGA再从通道的起始地址开始写入,如此循环。HPS通过驱动程序来接收FPGA的中断,当接收到一个中断后,驱动程序会把中断的中断号发送给应用程序,应用程序用线程阻塞读的方式接收驱动程序的数据,每接收到一个数据,先写到队列中,这样做防止突发的访问导致接收的数据丢失,写数据线程中若读取到队列有数据,根据队列中数据的信息,将相应地址的数据写入到磁盘。
Cyclone V器件FPGA内部集成了PCIE硬核IP模块,HPS可以通过H2F Bridge和LwH2F来访问该IP模块,在HPS中加载PCIE AHCI驱动后,HPS会扫描该IP模块上接入的磁盘,识别成功后会在Linux根目录的dev下生成一个设备文件,将磁盘交给Linux文件系统管理。这时就可以使用Linux C库函数接口中的Open、Write、Read等函数在磁盘中创建文件,读写文件。 FPGA每发送一个中断,HPS就会读取相应的数据在磁盘中写一个二进制的文件,二进制文件与文本文件相比,同样的数据量体积是文本文件的1/3,读写速度更快,而且读写更加方便。
在写每个二进制数据文件时,会先在二进制文件的开头写入一个36 B的数据头,数据头记录了这个文件中数据的信息,如下所示。
//文件数据头
typedef struct
{
time_t time; //4字节 时间
unsigned int data_len; //4字节 数据的长度(Byte)
unsigned int sample_multiple; //4字节 采样数据抽点倍率(存数据时的抽点比例)
unsigned int sampling_gear; //4字节 采样的频率挡位(0~11档)
unsigned int sampling_freq; //4字节 采样频率(Hz)
unsigned short int Gear; //4字节 挡位(电压挡位)
float Software_Multiple; //4字节 软件倍数(用于计算实际电压值)
short int excursion; //4字节 偏移(用于计算实际电压值)
float Capacity; //4字节 最大量程(在当前电压挡位下的量程)
}Data_Head_Info;
在36 B的数据头之后,每两个字节表示一个采样值,高地址放高位字节,低地址放低位字节,图5所示为磁盘文件信息排布示意图,至此完成了将FPGA采集的数据写入到磁盘的全过程。
图5 磁盘文件信息排布示意图
该系统大容量数据存储时的数据流与总线速度如图6所示,由SoC FPGA部分的BLVDS总线采集ADC数据,为优化FPGA资源,采用32-bit BLVDS总线,包含16对差分BLVDS数据且采用DDR方式收发数据,理论速率可达3.2 GB/s。FPGA和HPS外扩DDR3存储器的理论速率可达6.25 GB/s,受外部存储器接口性能限制,实际速率可达1.17~1.56 GB/s。FPGA的PCIe硬核操作SSD理论速率可达2 GB/s。按PCIe总线负荷最大不超过50%设计,同时为保证同步时钟质量,FPGA BLVDS总线负荷按1/4设计,可配备20路20 MS/s采样速率的ADC,数据流实时性良好,优于目前同类装置,达到设计预期。
图7为显示界面程序流程图,在初始化界面时创建与FPGA通信线程、写文件线程及主线程等,阻塞读取底层来自FPGA的数据,并将读取的数据写入到队列,而写文件线程读到队列有数据,即将数据解析并写入磁盘。主线程监控按键、定时器及触发信号等事件,只要事件发生,就执行与事件绑定的函数。应用层显示界面如图8所示,可对设置采样参数启动采样,查看设定时间范围内的数据波形,导出该段数据、波形截图,设定网络连接将数据直接传至上位机,启动校准模式等。
图6 大容量存储的数据流与总线速度
图7 显示界面程序流程图
所设计的基于PCIe总线架构的大容量数据存储系统,实现了系统的总体框架设计和存储架构硬件设计,完成了系统通信协议以及数据存储流程设计。界面显示和测试结果表明,整个系统运行稳定,可以实现上述的功能。与现有数字示波器和数据存储记录仪相比,在相同的采样速率和分辨率下能存储记录的数据量更多,对于需要老化测试、对历史数据进行回顾的复杂系统而言其更为适用,目前该系统已应用于多种产品的环境试验和老化测试中,全程记录产品关键节点全过程变化趋势,为产品质量考核和问题分析提供完整数据支撑。
图8 应用层显示界面
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!