1、概述
在通信系统的设计实现过程中,都需要 测试 系统的误码性能。而常见的误码率测试仪多数专用于测试各种标准高速信道,不便于测试实际应用中大量的专用信道,并且价格昂贵,搭建测试平台复杂。随着大规模 集成电路 的迅速发展, FPGA 在保持其集成度高,体积小,功耗低,性价比高特性的同时,能够实现越来越复杂设计功能,日益广泛的应用于通信设备的设计实现。
本文提出了一种基于FPGA的误码率测试仪的方案,使用一片 Altera 公司的Cyclone系列的FPGA(EP1C6-144T)及相关的外围 电路 ,实现误码测试功能,主控 计算机 可以通过FPGA内建的异步串行 接口 ( UART )配置误码测试仪并读取误码信息,由计算机完成误码分析。同时,该方案还提供了简易的数据显示,可以在脱离计算机的情况下,进行通信系统工作性能的定性分析。
2、系统构成和工作流程
按照完成的功能,整个系统可以分为测试码生成单元、误码测试单元、接口单元、显示单元和 时钟 生成单元以及主控计算机上运行的控制测试软件六个部分,具体框图如图1所示。
图1误码测试仪框图 利用误码率测试仪进行误码率测试的闭环测试平台结构如图2所示。对照图1、图2,将系统的工作流程描述如下。
图2 通信系统误码测试框图
根据待测通信系统的数据速率由计算机通过UART配置时钟生成单元,得到工作时钟和各使能计数器的参数,使得系统按照预定时钟工作;由测试码生成单元按照设置好的时钟将 测试码发送给待测系统的发送设备;发送信号经过信道 仿真器 后,由待测系统的接收单元接收、判决,再将接收数据和恢复的数据时钟送入误码测试仪;误码测试仪中的误码测试单元完成输入数据和本地数据的同步后,对输入数据同本地数据进行比较,统计误码数,每完成两个测试码周期的数据比较,就将误码信息通过UART发送给计算机,进行误码统计,同时将误码数传送给显示单元,进行处理后驱动外部的四个七段数码管,显示本测试码周期内的误码率。
3、关键技术及其实现
3.1 测试码的产生
本设计使用m序列作为测试码,m序列发生器按照CCITT建议,生成用于低速数据传输设备测试误码的m序列,其特征多项式为x9+x4+1,周期为512。利用m序列的伪随机特性,可以很好的测试在不同的输入组合下,系统的通信性能,同时,m序列极强的自相关性,便于测试仪实现输入数据同本地测试码同步,以便进行误码计数。
3.2 误码测试单元的实现
误码测试单元是整个系统的核心单元,其功能框图如图3所示。序列同步跟踪单元的功能是利用m序列的自相关特性,将输入的数据同本地的m序列同步起来,并将同步信息传给码元比较单元。
我们利用测试序列—m序列的自相关性实现接收序列与本地序列的同步。m序列的捕获有很多方法,通常使用的有相关器法和循环累加法。相关器法的优点是捕获速度快,通常捕获时间不超过两个m序列的周期,但是相关器最大的问题就是所需的逻辑资源太多。相比之下,循环累加法所需的逻辑资源很少,虽然捕获时延较长,但在测试环境下,通常是可以忍受的,另外,我们还可以采取一定的措施进一步减少捕获时延。循环累加器的工作原理如下,系统复位后,m序列发生器按照预设的参数生成m序列,存入m序列缓冲区,码元同步后,在地址发生器的控制下,将m序列从缓冲区中读出,同输入序列按位进行同或运算后进行算术加,相加得到的和经D 触发器 缓冲一个时钟周期后,输入加法器,作为下一次加法运算的一个加数,从而实现本地序列同输入序列的循环累加。累加和送入门限检测器同所设门限比较,如低于门限,则地址发生使能和同步指示输出均无效,为‘0’,如果高于所设门限,则两信号置高。后面的码元比较单元开始工作,进行输入序列和本地序列的比较。地址发生器产生的地址由两部分组成,即:
地址输出=累加地址+偏移地址
两个地址的初值均为‘0’,累加地址计数范围同m序列的长度一样,每个时钟周期加1,第一个周期输出的m序列从第一个码元开始输出,加完一个m序列周期后,地址发生器检查由门限检测输入的地址发生控制信号,如果该信号为‘0’,那么表示输入序列同本地序列没有同步,存在相位差,此时,偏移地址加1,累加地址重新开始累加计数,使得第二个周期输出的m序列从第二个码元开始输出,实现了本地m序列相对于输入序列的“滑动”。
经过本地码的滑动,同输入序列完全同步,根据m序列的相关性,累加值会出现相关峰,超过门限检测的门限值,此时,门限检测单元就会将地址发生控制信号置‘1’,地址发生器的偏移地址不再变化,累加地址继续循环计数,m序列缓冲区按照输入的地址,将与输入序列同步的m序列输出至门限检测单元和码元比较单元,同时,经过UART向主控PC发送开始误码测试的消息。
当序列同步完成之后,门限检测单元继续工作,检查序列的同步状况,当某一时刻,相关峰值低于门限,则可以判断系统误码率过高,或者数据传输过程中出现丢帧的情况。此时,门限检测单元将同步指示和地址发生使能同时置为无效,开始新一轮捕获,同时经过UART向主控PC发送停止误码测试的报警,等待下一次统计的开始。可以看出,系统误码性能的设计指标同门限检测单元中的门限可以建立对应关系,便于测试前的参数设置。图4是测试码捕获的时序仿真图,为了测试误码统计功能,我们将测试码的前三个码取反,以便形成误码。从图中可以看出,当累加器的和高于门限时,同步指示为高,当一个新的测试码周期开始时,误码计数开始,前三个测试码是错的,可以看到误码计数正确的统计了误码个数。
码元比较单元将接收到的序列通本地产生的m序列按位作异或运算,每出现一个误码,就会输出一个计数脉冲。误码计数单元按照预先设置好的参数,每检测完两个测试码周期,就通过UART向传送一次误码个数,便于主控计算机统计误码信息。
误码测试单元通过UART同PC机进行通信,将误码信息发送给PC机,由PC机进行误码数据的分析统计处理,并形成报表。UART?通过系统提供的10MHz的时钟分频得到57.6Kbps的波特率。
3.3 误码率实时显示的实现
误码率的实时显示是通过四个共阴极的七段数码管实现的,主要用于误码测试仪脱离主控计算机工作时,通过对每两个测试码周期的误码统计,将这一时段的实时误码率用科学计数法在七段数码管上显示出来,以便对通信系统的运行情况进行定性的分析。第一个数码管显示个位和小数点,第二个数码管显示小数点后第一位,第三个显示负号,第四个显示一位数字,表示科学计数法的负几次方。下面以两个测试码周期(1024个码)中统计到256个误码为例,说明如何得到实时显示。首先,将误码数送入 比较器 ,分别同11、102进行比较,256大于102,说明误码率在101数量级,第四个数码管显示1,再将 1/101×256=2560= (1010 0000 0000)2的第12位和第11位取出,即(10)2=2,作为第一个数码管显示的个位数,取出第10位、第9?位和第8?位,即(100)2按二进制小数计算为0.5,则第二个数码管显示5。计算小数部分时,可用查表法,直接得到输出数值,以简化计算。
3.4 软件测试平台的设计
我们采用Visual C++ 和 matlab 混合编程来实现软件测试平台。Visual C++是微软公司推出的功能强大的软件开发调试工具,对计算机底层操作十分方便,通过A PI 函数对串口进行编程更是一项十分成熟的技术。matlab是Math Work公司发布的科学计算软件,具有功能很强的绘图功能和及其丰富的函数库,给数据的分析、图表的制作提供强大的支持。软件测试平台的基本思想是利用Visual C++编制平台的人机交互界面,以及完成同误码测试核的 数据通信 ,再调用matlab里的函数,对得到的测试数据进行分析输出,同时在人机交互界面上显示误码事件及其发生时刻。
4、结束语
本文提出了一种基于FPGA的误码率测试仪的设计实现方案,具有体积小,成本低,使用灵活,通过内建的UART同主控计算机进行数据交换,同时发挥了FPGA速度快和计算机数据处理能力强的优势,获得了较好的系统性能,可以方便的运用于通信设备的研制和测试。
同时,利用FPGA的在线可编程(ISP)能力,可以不断升级、完善,实现更多的功能。在此基础上,还能够进一步的进行系统扩展,如使用加入 单片机 并移植嵌入式操作系统,将用点阵液晶代替数码管,增加外部存储(flash, RAM 等),从而构成一个手持的误码测试系统,可以完全脱离主控计算机工作。
责任编辑:gt