随着无线通信业务的飞速发展,频谱资源显得越来越缺乏,而实际中像广播电视等频段的频谱利用率却并不高,提高频谱的利用率成为一种共识。认知无线电是一种按伺机方式充分利用频谱的共享频谱技术,因此可以用来提高频谱利用率。快速准确的数字频谱分析对认知无线电的频谱感知有非常重要的影响。在认知无线电系统中,数字频谱分析仪与下一级的处理模块的数据传输速率是制约认知无线电系统处理速度的一个瓶颈,因此需要选择一种高速稳定的数据传输接口技术。
本文利用PXI总线技术来实现数字频谱分析仪与下一级处理模块的数据传输接口。PXI是CompactPCI extend for Instrumentation的简称,即面向仪器系统的PCI扩展,由NI(美国国家仪器公司)于1997年10月率先推出。它将CompactPCI规范定义的PCI总线技术发展为适合于工业控制、测量、数据采集和试验应用的电气、机械和软件规范,从而形成了新的虚拟仪器体系结构。PXI总线是一种高性能的32/64位地址数据复用总线,支持突发传输,是一种坚固的基于PC的测量和自动化平台,它的数据传输速率的峰值于33MHz、32bit的总线上可达132MB/s;于66MHz、64bit的总线上则可高达528MB/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总线的数据传输。
1 PCI9054接口芯片
PCI9054是PLX公司提供的一款PCI专用接口芯片,它兼容PCI V2.2的协议规范。其内部结构图如图1所示。由图可知,PCI9054实现的是PCI Bus端和Local Bus端的信号转换,使得Local Bus端不需要进行复杂的PCI协议逻辑的设计,只需要进行简单的数据传输逻辑的设计就能实现符合PCI协议规范的信号生成。
图1 PCI9054内部结构示意图
PCI9054内部状态机给用户提供了三种传输方式:PCI Initiator传输方式、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所示。
图4 PCI DMA数据传输状态转移图
图4中,S0为空闲状态;S1若在PCI9054对Local Bus进行写的操作中为数据接收状态,若在PCI9054读Local Bus的操作中为数据准备状态;S2为PCI 9054读Local Bus的操作中的数据发送状态;S3为读写操作的终止状态。图中各状态转移触发信号均为PCI 9054Local Bus端的控制信号。
图5 PCI 9054内部寄存器读写操作的状态转移图
图5中,S0为空闲状态,在读写启动信号en_rwreg=1的情况下进入工作状态;S1为读写周期开始状态,有效Local Bus端的读写周期开始信号;S2为读写周期等待状态,等待PCI9054的LREADY#有效;S3为突发读写方式下的响应状态,突发读写方式下,PCI9054的LREADY#有效后,使能内部逻辑进行相应的响应;S4为读写周期响应状态,在非突发读写方式下或者突发读写的终止周期中的响应状态。
在实现了上述两个状态机模块后,FPGA的程序还需要包括对FFT处理器的输出数据进行数据帧封装,即给每一次FFT处理器根据相应的配置参数进行处理输出的数据加上帧头,帧头中包含了此次传输的FFT数据所覆盖的频段以及数据的长度信息。这样做的好处是上位机不需要额外的同步信息,只需要根据帧头中的频段信息以及长度信息就可以判断当前数据帧所表示的频谱信息。利用PCI9054内部寄存器中的MailBox寄存器组来实现数字频谱仪与上位机之间的参数传递。由于数字频谱仪需要的参数信息比较少,只需要频段选择信息,以及开始和结束数字频谱仪的控制信号,选择MailBox寄存器组中的第七个位宽为32位的寄存器来传递控制信息。
整个FPGA程序的流程示意图如图6所示。
图6 FPGA程序流程示意图
3.2接口驱动程序的设计
接口驱动程序的设计可以通过两种方式实现,一种是通过专用的驱动程序开发工具进行驱动程序的设计,如DDK、DriverStudio和WinDriver等,另外一种方式是通过PLX公司提供的PCI软件工具包SDK(Software Development Kit)实现接口的驱动设计,它提供了能够实现各种传输方式所需要的基本API函数。
为了缩短开发周期,本文采用由PLX公司提供的SDK工具包进行驱动程序的开发。运用其SDK提供的工作API函数实现Block DMA模式下的Burst Forever(无限突发)方式的数据传输。主要用到的函数如表1所示。
由于本系统的特殊应用,还需要增加一些上层的应用程序,才能实现整个数字频谱仪数据的正常工作,主要包括数字频谱仪的参数控制字的生成和写PCI9054内部寄存器MailBoxReg7,以及对接收的数据帧进行解封装的相关程序开发。
表1 Block DMA模式下的SDK API函数应用列表
4 结论
本文使用了PCI9054的DMA传输方式,并且在Local端发起DMA传输,在上位机上采用中断的形式进行响应,可以减少占用上位机CPU处理时间,使得上位机在进行数据传输的同时可以进行其他的操作。PXI接口加上PCI9054的开发模式,使得开发周期缩短了很多,避免了复杂的PXI总线协议的逻辑设计和验证工作。本系统采用的PXI总线的传输位宽32位,采用无限突发的传输方式,在数据传输周期中的数据传输速率为132MB/s,但是由于增加了额外的控制周期以及其他的一些控制逻辑,使得数据的平均传输速率并没有达到这个值,但是完全可以匹配目前FFT处理器的处理速率,可以保证数据传输的实时性。