基于赛灵思Virtex 6的PCI Express高速采集卡设计
输的目的地址写入相应的DMA控制寄存器。在接收到采集命令后,采集卡开始接收外部数据,并对数据进行解码、整形,按顺序将数据依次通过高速FIFO送入外部SDRAM进行缓存。当SDRAM数据有效后,通过触发信号启动DMA传输,DMA控制器将申请从 SDRAM中将数据写入到数据发送FIFO,由发送模块将发送数据FIFO中的数据按照EndpointBlockPlus核的事务(TRN)接口的格式提交给IP核,由IP核按照PCIExpress总线规范将数据传至FPGA的GTP收发器,GTP收发器直接连接了PCI-E的差分数据传输对,于是通过PCI-Ex8通道将数据以DMA方式直接存入主机物理内存中。当存完一个数据包后发出中断消息通知主机上层应用程序处理数据以及将物理内存中的数据转存至硬盘,之后即进入下一个数据包的传输,如此反复,直到收到主机的停止DMA传输命令,即完成当前帧的采集和传输并停止下一帧的采集和传输。
3 PCIExpress采集卡驱动设计
本系统驱动程序在WindowsXP操作系统下,应用微软公司的DriverStudio平台进行开发。DriverStudio平台提供了驱动程序开发所需的WDM(Windows DriverMode,Windows驱动程序模型),包括VtoolsD、DriverWorks、DriverNetWorks和SoftICE等开发工具,应用该平台开发降低了驱动程序开发的难度,同时了提高了代码的可靠性。
3.1硬件驱动驱动程序
对外部硬件的访问是通过DriverWorks提供的2个类来实现的,其中,KioRang类实现对I/O映射芯片的访问,KMemoryRang类实现对内存映射芯片的访问。本系统选择了KMemoryRang完成PCI Express硬件的访问,主要调用函数如表1所示。
表1 主要调用函数
KMemoryRang类主要函数初始化KMemoryRang类的操作是在驱动程序启动例程中执行的,主要执行程序如下:NTSTATUSPCIeDevice(KIrpI)
{…
PCM_RESOURCE_LIST pResListRaw=I.AllocatedResources();PCM_RESOURCE_LIST pResListTranslated=I.TranslatedResources();m_MemoryRange.Initialize(pResListTranslated,pResListRaw,0);…
}当驱动程序完成初始化时,应用端软件将通过inb()和outb()等函数对外部硬件电路进行访问,读写数据。
3.2DMA传输实现
采用DMA传输能极大的减轻主机处理负担,特别适用于大数据量处理系统。采用DriverWorks提供的KDmaAdapter类可轻松建立一个DMA 传输链路,实现DMA读写操作。用于FPGA总线协议模块软件层完成了相关DMA传输的控制,所以驱动程序DMA传输只需子在系统启动DMA传输时,身心相应的内存作为公共缓冲区,用于外部DMA控制器存入数据文件,这里需要调用DriverWorks提供的KCommonDmaBuffer类,该类常用函数如表2所示。
VirtaulAddress()函数返回的内核模式地址是提供给驱动程序读写公用缓冲区用的,而进行DMA传输时需要用到缓冲区的物理地址,也即需要写入DMA参数寄存器的是缓冲区的物理地址。
3.3总线中断处理
采集卡一共需要处理三种中断请求,分别是DMA写完成,DMA读完成和错误中断请求。在Driver-Works平台中,KInterrupt类可用于处理硬件中断,其主要函数包括中断寄存器初始化,中断连接函数,实现了将一个中断服务例程连接到一个中断和解除其连接等。
表2KCommonDmaBuffer类主要函数中断处理函数首先在驱动程序构造的函数中调用 MEMBER_ISR(class_name,fuction_name),声明中断服务例程为该类的一个成员函数,接着在驱动程序驱动例程中调用 InitializeAndConnect(),初始化中断类实例,并与中断服务例程连接起来。
这样就完成了对外部硬件中断的处理,当每次驱动程序检测到硬件产生中断脉冲时,中断服务函数随即被调用,从而转入相应中断处理程序中执行。
4采集卡性能测试
为测试采集系统性能,自行设计了应用软件对采集卡数据传输速率进行统计,在Windows环境下,采用多种数据量进行DMA方式读写。应用端软件根据数设定的数据包大小,申请不同的内存空间,并将虚拟地址映射到FPGA的DMA寄存器。实际测试采集速率结果如图4所示。
图4实际测试数据采集速率
根据图4的测试结果,总线DMA传输速率与数据块大小相关。当设定系统数据块(即开辟的主机内存)大于32Mb时,采集卡的采集速率稳定在5.6Gb/s.实验结果表明,该系统大幅度地提高了数据交互速度,发挥了PCIExpress总线的优越性能。
5结语
本文应用Xilinx公司的Virtex-6芯片设计了PCI Express高速采集卡,通过调用FPGA内部的PCIE集成协议硬核,配合总线DMA控制器,能够快速可靠地采集外部差分数据,
- 一种消防应急灯具专用控制芯片的设计(11-02)
- 基于FPGA的8段数码管动态显示IP核设计(02-03)
- 基于FPGA和IP Core的定制缓冲管理的实现(08-14)
- 基于Altera ASI IP核的ASI发送卡实现(02-25)
- FPGA的高速多通道数据采集控制器IP核设计(04-22)
- 基于EDA或FPGA的IP保护的实现(09-16)