基于Virtex-6的PCI Express高速采集卡设计
初始化KMemoryRang类的操作是在驱动程序启动例程中执行的,主要执行程序如下:
当驱动程序完成初始化时,应用端软件将通过inb()和outb()等函数对外部硬件电路进行访问,读写数据。
3.2 DMA传输实现
采用DMA传输能极大的减轻主机处理负担,特别适用于大数据量处理系统。采用DriverWorks提供的KDmaAdapter类可轻松建立一个DMA传输链路,实现DMA读写操作。用于FPGA总线协议模块软件层完成了相关DMA传输的控制,所以驱动程序DMA传输只需子在系统启动DMA传输时,身心相应的内存作为公共缓冲区,用于外部DMA控制器存入数据文件,这里需要调用DriverWorks提供的KCommonDmaBuffer类,该类常用函数如表2所示。
VirtaulAddress()函数返回的内核模式地址是提供给驱动程序读写公用缓冲区用的,而进行DMA传输时需要用到缓冲区的物理地址,也即需要写入DMA参数寄存器的是缓冲区的物理地址。
3.3 总线中断处理
采集卡一共需要处理三种中断请求,分别是DMA写完成,DMA读完成和错误中断请求。在Driver Works平台中,KInterrupt类可用于处理硬件中断,其主要函数包括中断寄存器初始化,中断连接函数,实现了将一个中断服务例程连接到一个中断和解除其连接等。
中断处理函数首先在驱动程序构造的函数中调用MEMBER_ISR(class_name,fuction_name),声明中断服务例程为该类的一个成员函数,接着在驱动程序驱动例程中调用InitializeAndConnect(),初始化中断类实例,并与中断服务例程连接起来。
这样就完成了对外部硬件中断的处理,当每次驱动程序检测到硬件产生中断脉冲时,中断服务函数随即被调用,从而转入相应中断处理程序中执行。
4 采集卡性能测试
为测试采集系统性能,自行设计了应用软件对采集卡数据传输速率进行统计,在Windows环境下,采用多种数据量进行DMA方式读写。应用端软件根据数设定的数据包大小,申请不同的内存空间,并将虚拟地址映射到FPGA的DMA寄存器。实际测试采集速率结果如图4所示。
根据图4的测试结果,总线DMA传输速率与数据块大小相关。当设定系统数据块(即开辟的主机内存)大于32 Mb时,采集卡的采集速率稳定在5.6 Gb/s。实验结果表明,该系统大幅度地提高了数据交互速度,发挥了PCI Express总线的优越性能。
5 结语
本文应用Xilinx公司的VirteX-6芯片设计了PCIExpress高速采集卡,通过调用FPGA内部的PCIE集成协议硬核,配合总线DMA控制器,能够快速可靠地采集外部差分数据,具有解码、整形,高速采集存储的功能,是大数据量交互的有效解决方案。
- 高速串行数据链路的自动化一致性测试(04-15)
- 用FPGA构建PCI Express端点器件的最佳平台(03-10)
- 基于PXI Express的NI FlexRIO模块满足自动化测试需求(10-17)
- 基于PCI ExPress总线传输的视频采集系统方案(03-23)
- 利用基于PXI Express的NI FlexRIO模块,满足自动化(07-13)
- 基于PCI Express接口的数据 采集存储系统设计(12-11)