引言
频谱分析仪是微波测量仪器中最基础、最常用的仪器之一,被誉为频域示波器,广泛应用于电子对抗、航空航天、移动通信、广播电视、科研生产等各种领域,是军用和民用电子测试不可或缺的设备[1]。随着现代科研向精、深和尖的方向发展,频谱测量在各领域内发挥的影响越发显得深远。目前,频谱分析仪的开发在国内也处于前沿阵地。综合起来看,由于超外差式频谱分析仪在分析射频或微波毫米波范围内的高频信号频谱上具有明显优势,本文便采取了这种由射频前端、数字扫频、中频滤波、视频检波以及频谱数据实时采集与显示的整机设计方案。
现代频谱仪除了对测量精度和测频带宽要求越来越高外,同时也更加强调低成本、便携性以及可靠性。那么,智能仪器开发中就客观要求在不影响其测量性能的前提下构建一种满足这种新需求的软硬件平台。频谱仪在实际测量中,需要实现频谱数据在仪器显示屏上的实时刷新,那么频谱数据的实时采集就显得尤为重要。
WindCE作为保护模式的操作系统,运行其上的应用程序只能访问系统管理的虚拟内存地址。本文在以总线方式进行数据访问操作时,首先完成外部设备的物理地址到系统内存地址虚拟映射[2],从而使外部数据FIFO所构成的缓存逻辑成为可操作的设备单元。其次,由于频谱仪扫频时间过程是根据前端射频、中频及滤波器等硬件特性决定的,频谱数据的产生快慢受到扫描时间的限制,扫描时间越长则经过FFT或者滤波及检波算法后的数据在缓存FIFO中的写入速度就越慢。为了满足频谱数据的实时读取和显示,ARM与FPGA间的数据通信利用频谱数据的实时有序读取机制。
1 系统概述
该平台使用的主控CPU型号为Samsung公司具有ARM9内核的S3C2440A,用于频谱数据滤波、检波等。数据缓存FIFO用的FPGA为Xilinx公司的Spartan 3AN,SDRAM与NAND Flash均为64 MB,Flash存储设备支持SD卡和USB存储。软件层采用了WinCE 5.0作为操作系统平台。WinCE系统的应用程序只能访问虚拟地址,当.exe可执行代码装载入内存时,通过地址重定位实现了地址映射,使之能够访问实际的外设物理地址[3]。在数据实时采集过程中,为了满足有序读取的要求,在FPGA中设计独立的FIFO数据缓存单元和记录其中数据缓存量的RAM单元。通过实时监测RAM中的数据量记录值,以保证监控程序依据扫频及硬件处理的频率扫描时间完成实时适量数据采集过程。嵌入式ARM频谱仪系统数据采集平台结构框图如图1所示。
图1 系统数据采集平台结构框图
2 频谱数据缓存FIFO的访问机制
2.1 内存管理机制
WinCE5.0是保护模式下的基于优先级的多任务32位操作系统[8],因此WinCE系统的虚拟寻址能力可达到4 GB。但是与桌面Windows操作系统的内存管理相比,其虚拟内存管理是独特的。Windows XP的每个进程独享4 GB的虚拟地址空间,而WinCE中所有进程共享一个4 GB的虚拟地址空间。这4 GB的虚拟地址空间又被分为两个2 GB区域: 低地址2 GB是用户空间,为应用程序所使用,应用程序申请的内存都会从低2 GB地址空间中返回;高地址2 GB是内核空间,供WinCE操作系统本身使用[2]。
从0x8000 0000开始是WinCE内核使用的虚拟地址空间。虚拟地址0x8000 0000~0x9FFF FFFF是带缓冲的虚拟内存,用来静态映射所有的物理地址;而虚拟地址0xA000 0000~0xBFFF FFFF是不带缓冲的,它会重复映射所有的物理内存,如图2所示。 由于在驱动程序中会直接访问设备I/O或者寄存器,就要使用0xA000 0000这段物理地址。
图2 内核映射的物理内存
2.2 内存映射的实现
2.2.1 映射关系
在ARM处理器中,WinCE的静态内存映射关系是由OAL层中的OEMAddressTable数组决定的,如表1所列。当选择NGCS2作为外设的片选信号时,其有效的物理内存起始地址是0x1000 0000,对应的虚拟内存起始地址为0x8400 0000;地址空间对应关系为128 MB与32 MB。通过这个映射表还可以看到I/O和内存控制器的映射。由于内存的虚拟映射只能选择无缓冲区,故其虚拟映射首地址都必须再增加0x2000 0000,分别成为0xB160 0000、0xA400 0000、0xB080 0000。
表1 OEMAddressTable
2.2.2 映射实现
虚拟内存映射主要用到3个API函数: VirtualAlloc、VirtualCopy和VirtualFree。VirtualAlloc函数申请虚拟内存,用于在本进程的虚拟地址空间中申请一块空间;VirtualCopy完成外设物理地址与虚拟空间地址的绑定;而VirtualFree用来释放所申请的进程虚拟空间,以及映射绑定关系[4]。具体映射步骤为: 映射I/O控制寄存器→配置片选信号→映射内存控制器→配置位宽、时序等→映射FPGA中的外设端口地址[3]。
2.3 ARM与FPGA通信时序逻辑
在程序实现时,为了提高程序的模块化和可移植特性,自定义两个读写FPGA中数据缓存FIFO的接口函数: UINT ReadEXDevice(const int port)和void WriteEXDevice(const int port,unsigned short data)。Port号为程序读写数据FIFO的地址端口号,通过映射关系,相应虚拟地址的片选信号nGCS2有效。当设置Data Bus的数据宽度是32位时,则Address Bus的有效地址线为A2~A31。读写使能信号nOE与nWE连同地址信号在FPGA中经逻辑译码,实现了对FIFO和RAM的有序访问。时序过程参考总线访问时序图,如图3所示。
图3 总线访问时序图
3 数据读取机制
3.1 频谱测量数据缓存及实时监测
FPGA中数据缓存FIFO以及缓存量记录单元RAM的逻辑设计,解决了ARM与DSP、滤波检波逻辑模块之间数据的跨时钟域传输以及实时监测数据缓存量的问题。设计的FIFO为频谱数据缓冲FIFO,数据位宽为32位,数据缓存深度为1024个单元;记录数据量的RAM单元类似一个寄存器,ARM通过总线方式访问其地址空间即可得到其中的记录值,作为实时读取量的判断依据。这两者的设计均可在Xilinx ISE集成开发环境下通过调用IP Core实现[6]。
3.2 扫描时间及读取次数与单次读取数据量的关系频谱仪的射频前端、扫频、中频处理以及RBW和VBW各处理环节的硬件响应特性是仪器扫描时间[5]的根本性决定因素,RBW越小或者扫频宽度SPAN越宽,其扫描时间越长,则频谱数据产生速度就越慢。扫描时间ST(Sweep Time)的经验参考关系式如下:
其中,k为滤波器系数。频谱仪在不同的硬件条件下,k的取值也是不同的。
频谱仪在实际测量中,其前端各硬件模块需要实现它本身的功能,即在特定的扫描时间ST内产生满足用户要求测量精度的有效扫频点数Ns。
在同等条件下,若频谱数据点数越多,则其测频精度会越高,本方案中选择了全部有效扫频点数Ns为1000点(1000p)。经处理转换后频谱数据在送LCD显示时,由于数据线带宽、时钟频率和屏幕视频帧刷新率等的限制,每刷新一次则需要一定的刷新时间Tr。那么,要实现谱线的实时刷新,就需要有对整个Ns的读取次数k和单次读取量Ms的算法关系。具体算法如下:
其中,mod表示Ns对k求余函数,以下同。
由式(4)知道,若M1=0,则读取次数k沿用式(2),单次读取量Ms沿用式(3)。
若M1不为0,如果M1<Ms,则:
k=k+1(7)
且最后一次读取量为M1。
又如果M1≥Ms,则:
k=k+Δk+1(8)
且根据式(6)知,最后一次读取量为M2。
刷新全屏误差时间计算公式为:
ΔST=Tr,或者ΔST=(Δk+1)×Tr(9)
经式(8)分析计算得知,Tr单位为ms级,而Δk不会超过5,那么总的误差时间ΔST不会超过0.5 s。在频谱仪的实际测量中,这完全满足LCD上的频谱刷新显示高保真度的要求精度。经验证,该算法具有实际应用价值。
3.3 数据采集、处理与实时显示的程序实现流程与协调机制
应用层软件集成开发环境采用EVC4.0,是微软公司提供的一种专门针对嵌入式设备进行软件开发的工具[7]。程序开发方法与步骤与常用的VC++6.0类似,而且也自带了大多数与VC++6.0相同的函数库,极大地缩短了开发周期。对于用户监控程序来讲,其执行流程与设计框架将决定着仪器性能能否充分发挥、是否符合用户操作习惯等。本系统监控软件数据读取流程如图4所示。
图4 数据读取流程
4 测试结果及误差分析
系统人机监控软件分别进行了2次数据读取测试,第1次用户设置扫描时间ST为1 s,则有:
M1=mod(Ns,k)=mod(1000p,13次)=12p,可知M1<Ms,则k=k+1=(13+1)次,那么全频带数据读取次数为14次,且最后一次数据读取量为M1=12p,显示过程时间误差由式(9)得ΔST为Tr,即为0.075 s。总线访问时序结果如图5所示。
图5 总线访问时序(理论值ST=1 s)
第2次用户设置扫描时间为8 s,则有:
M1=mod(Ns,k)=mod(1000p,106次)=46p,可知M1>Ms,则k=k+Δk+1=(106+Δk+1)次,其中Δk=M1Ms=46p9p/次=5次。则k=k+Δk+1=(106+5+1)次,那么全频带数据读取次数为112次,且最后一次数据读取量由式(6)可知为1p,显示过程时间误差由式(9)得ΔST为(Δk+1)×Tr,即为0.45 s。总线访问时序结果如图6所示。
结语
本文设计并实现了一种基于FPGA+ARM的硬件平台, 以及在WinCE操作系统运行环境下对频谱数据进行实时有序读取并完成实时刷新显示的频谱仪上层交互式软件控制系统。通过WinCE虚拟映射机制,可以有效实现ARM与外围设备的无缝连接,完成大量数据的快速传输通信。频谱分析仪在对信号频率测量中是实时扫描过程,那么人机监控软件的实时有序读取数据,保证了谱线在LCD上的高真度显示。该系统的实现使得频谱仪具有更好的便携性和更完善的功能,而且开发周期短,在同领域的开发中有借鉴意义。
图6 总线访问时序(理论值ST=8 s)