基于PXI总线的数据传输接口设计与实现方案
使用PCI9054 提供的DMA 传输方式,并由其Local 端配置和启动DMA 传输来完成数字频谱数据的传输,达到用PXI 总线实现数字频谱分析仪与工控机的高速数据传输的目的。
本文引用地址:http://www.amcfsurvey.com/article/150167.htm随着无线通信业务的飞速发展,频谱资源显得越来越缺乏,而实际中像广播电视等频段的频谱利用率却并不高,提高频谱的利用率成为一种共识。认知无线电是一种按伺机方式充分利用频谱的共享频谱技术,因此可以用来提高频谱利用率。快速准确的数字频谱分析对认知无线电的频谱感知有非常重要的影响。在认知无线电系统中,数字频谱分析仪与下一级的处理模块的数据传输速率是制约认知无线电系统处理速度的一个瓶颈,因此需要选择一种高速稳定的数据传输接口技术。
本文利用 PXI 总线技术来实现数字频谱分析仪与下一级处理模块的数据传输接口。PXI是CompactPCI extend for Instrumentation 的简称,即面向仪器系统的PCI 扩展,由NI(公司) 于1997 年10 月率先推出。它将CompactPCI 规范定义的PCI 总线技术发展为适合于工业控制、测量、数据采集和试验应用的电气、机械和软件规范,从而形成了新的虚拟仪器体系结构。PXI 总线是一种高性能的32 /64 位地址数据复用总线,支持突发传输,是一种坚固的基于PC 的测量和自动化平台, 它的数据传输速率的峰值于33 MHz、32 bit 的总线上可达132 MB/s; 于66 MHz、64 bit 的总线上则可高达528 MB/s,远高于GPIB (General-Purpose Interface Bus,通用接口总线)与VXI (VME bus eXtension for Instrumentation,面向仪器系统的VME 总线的扩展)接口的传输速率。基于PCI 总线发展而来的PXI 系统具有较好兼容性、存取延时小、成本低等优点。PXI 总线数据传输接口以其高传输速率和稳定可靠的传输性能得到了越来越广泛的应用。
PXI 总线协议比较复杂, 工程应用中一般采用两种方式, 一是采用FPGA(FieldProgrammable Gata Array,现场可编程门阵列)来设计控制接口, 缺点是控制接口难度较大、开发周期长、成本大; 二是采用接口芯片, 将复杂的PXI 总线接口转换为相对简单的用户接口, 用户只要设计转换后的总线接口。本文采用PXI 总线专用接口芯片PCI9054 来实现PXI总线的数据传输。
PCI9054 是PLX 公司提供的一款PCI 专用接口芯片,它兼容PCI V2.2 的协议规范。其内部结构图如图1 所示。由图可知,PCI9054 实现的是PCI Bus 端和Local Bus端的信号转换,使得Local Bus 端不需要进行复杂的PCI 协议逻辑的设计,只需要进行简单的数据传输逻辑的设计就能实现符合PCI 协议规范的信号生成。
传输方式、PCI Target 传输方式以及PCI DMA 传输方式。PCI Initiator 传输方式下,PCI9054 成为PCI Bus 端的主机,同时是Local Bus 端的从机,由Local Bus 端主动发起数据传输,PCI9054 被动后再主动向PCI Bus 发起传输。PCI Target 传输方式下PCI9054 的角色刚好与PCI Initiator 方式相反,成为PCI Bus端的从机以及Local Bus端的主机。而在PCI DMA方式下PCI9054同时是PCI Bus端和Local Bus 端的主机。在PCI9054 内部分别提供了这三种传输方式下的内部寄存器,方便设计者来对每一种传输方式进行配置。
PCI9054 的本地端支持可编程的特点,通过两个模式选择管脚MODE[1:0]来设置LocalBus 端分别工作在C 模式、J 模式、M 模式。这样可以使得PCI9054 的Local Bus 可以挂载不同类型的其他设备。
PCI9054 提供了两个独立的可编程DMA (Direct Memory Access,直接存储器存取) 控制器;每个通道均支持块和分散/集中的DMA 方式;在PCI 总线端支持32 位的数据位宽,时钟速率达到33MHz;本地端可以编程实现8、16 或32 位的数据宽度;传输速率最高可达132MB/s;本地总线端时钟最高可达50MHz 支持复用/非复用的32 位地址数据。
2 接口电路设计
PXI 总线接口电路的设计主要是对PCI9054 芯片的外围电路进行设计,主要包括四个部分:电源方案的设计、时钟方案的设计、EEPROM 电路的设计,Local 端的连线方案设计。
PCI9054 芯片的正常工作电压是3.3V,而在上位机的PXI 接口中,提供了三种电压,3.3V、5V 和12V,因此PCI9054 的供电完全可以由上位机来提供。设计中,可以增加一个外部电压的接入接口,方便开发过程中的调试。
PCI9054 芯片需要两个工作时钟,一个是PCI Bus 端的工作时钟,一个是Local Bus 端的工作时钟,这两个工作时钟是独立的,均需要外部逻辑输入。PCI Bus 端的工作时钟由上位机的PXI 接口提供,主要在PCB(Printed Circuit Board, 印刷电路板);布线的时候需要对该时钟线进行蛇形走线处理。Local Bus 端的工作时钟由晶振提供,本方案中采用50MHz 的晶振。
EEPROM 电路的设计中需要注意EEDI 和EEDO 两个管脚的连接,电路原理图如图2所示。注意在没有挂载Local 端的设备同时又没有EEPROM 时,EEDI 和EEDO 需要通过一个1KΩ的电阻拉低。设计中,往往需要加上一个EEPROM 用来存储对PCI9054 芯片的内部寄存器的设置。这些设置在每次上电时自动进行加载,对PCI9054 芯片的内部寄存器进行配置,使得每次上电后,PCI9054 能按事先所配置的方式工作。因此,在设计电路完成之后还需要对EEPROM 的内容进行设置,并通过PlxMon 工具写入。
图 2 EEPROM 电路设计原理图
在 Local 端的连线方案设计中,需要注意两点:一是本地时钟的接入,本地时钟作为PCI9054 识别Local 端是否有设备的依据,若在EEPROM 的EEDI 和EEDO 没有下拉的情况下,一定要接入本地时钟,不然连接上位机后,上位机进入不了系统。二是若需要用到PCI Initiator 传输方式,则必须将LBE[3:0]#全部拉低,否则就会造成读写出现上位机死机现象。
3 接口程序设计
由于数据传输接口涉及到数字频谱仪和上位机,其程序设计也包括两个部分:一部分是数字频谱仪端的程序设计,即PCI9054 Local 端的程序设计,由于本项目中在PCI9054 的Local端挂载的是FPGA 芯片,需要在FPGA 中进行Local 端的接口逻辑程序设计;另一部分是上位机端的程序设计,主要是基于操作系统的驱动程序以及上层应用程序设计。
3.1 FPGA 程序设计
FPGA 程序的设计主要是对PCI9054 的Local 端时序逻辑进行设计。由图2 可知,在PCI9054 内部的Local 端存在三种传输方式状态机:PCI Initiator 方式、PCI Target 方式、PCIDMA 方式。因此,在对Local 端的控制进行设计时,可以用不同的状态机来匹配PCI9054的内部状态机,达到实现各种方式的数据传输。
本文根据系统的特点,选择使用PCI DMA的传输方式。在FPGA端的程序采用层次化和模块化的设计,分为上下两层结构:下层是链路层,实现PCI DMA 方式下,长字(4Bytes)数据流的双向传输链路的建立;上层是链路适配层,实现数字频谱仪的数据按照一定的帧格式封转成帧。PCI DMA 方式的设置和启动也在FPGA 中完成,程序采用模块化的设计方式,将数据传输模块与控制模块区分。在控制模块中,分成三层:第一层是寄存器读写层,实现对PCI9054 内部寄存器的读写操作;第二层是参数获取与PCI DMA 方式配置层,实现从PCI9054 内部消息寄存器获取数字频谱仪的控制参数以及对PCI DMA 方式进行配置与启动控制;第三层是上层控制层,用来解析控制参数以及控制生成数据帧。整个程序结构图如图3 所示。
图3 FPGA程序结构图
上述 FPGA 程序中主要包括了两个状态机的设计,一个PCI DMA 数据传输方式的状态机设计,一个是PCI 9054 内部寄存器读写操作的状态机设计。它们的状态转移图分别如图4和图5 所示。
评论