基于PCIe总线的B码解码卡的设计与实现

2021-09-18 07:29霍海强陈旭东赵岩
计算机与网络 2021年15期

霍海强 陈旭东 赵岩

摘要:针对计算机时间同步需求,设计了一种基于PCI Express(PCIe)总线的IRIG-B码(B码)解码卡,该板卡接收外部B码信号并解调出B码时间信息,通过PCIe总线将B码时间信息传递给计算机进而完成计算机时间同步。测试结果表明,计算机能够同步到B码时间,且B码解码精度优于100 ns,能够满足多数应用需求。

关键词:PCIe;B码;FPGA

中图分类号:TN253文献标志码:A文章编号:1008-1739(2021)15-51-4

0引言

时间是靶场、电力系统、导航定位、计算机网络通信等领域的一个非常重要的参数,同步精度指标直接影响着系统工作的稳定性与可靠性。为保障系统中各个设备之间时间的准确性,通常配备时钟源作为时间基准,将B码等时频信号传输到用时设备,系统中计算机则配置B码解码卡从时钟源获取高精度的时间[1],从而与系统时间保持一致。鉴于B码解码卡仅用于传输时间信息,传输的数据量小,因此设计采用内嵌PCIe硬核的FPGA实现PCIe总线通信,通过这样的方式简化设计难度,降低制作成本,同时能够为计算机提供基于PCIe总线的时间信息[2]。

1总体设计

1.1 B码授时原理

GJB 2991A-2008《B时间码接口终端通用规范》规定,B码的时帧速率为1帧/秒,1帧包含100个脉冲(码元),码元周期为10 ms。每个码元序号由索引计数所确定,索引计数由准时点起,0~99。码元脉宽分为5 ms,2 ms,8 ms,2 ms表征二进制0;5 ms表征二进制1;8 ms表征位置识别标志P[3]。在B码的帧格式中,时帧的参考标志由一个位置识别标志和相邻的参考码元组成,Pr为帧参考点,其宽度为8 ms。每10个码元有一个位置识别标志:P1,P2,P3,…,P9,P0,它们均为8 ms宽度。一个时间格式帧从帧参考标志开始,因此连续2个8 ms宽脉冲表明时帧中秒的开始,从第2个8 ms开始对码元进行编码,分别为第0,1,2,…,99个码元。B码共100个码元,使用部分码元表示年、天、时、分、秒、润秒锋信息,第2个8 ms的上升沿代表秒始信号,通过对B码进行解码进而获得时间信息及秒始信号,即完成B码授时,B码格式如图1所示[4]。

2总体架构设计

基于PCIe总线的B码解码卡由解码卡、驱动和上位机软件三部分组成。B码解码卡完成B码解码、搭建底层PCIe链路功能;驱动程序构建上位机软件与解码卡之间的PCIe链路;上位机软件通过驱动读取B码解码卡解出的时间信息,进而更新本地时间,完成计算机B码授时,总体架构设计如图2所示。

3解码卡设计

3.1硬件电路设计

解码卡主要由电平转换芯片、FPGA、Flash及电源芯片等组成,其中FPGA选用XILINX公司内置PCIe硬核的SPARTAN 6系列,鉴于计算机上电过程中BIOS需要在500 ms内扫描到PCIe硬件,因此FPGA及Flash需要在500 ms内具备运行状态,为了保证FPGA上电程序导入时间满足上述要求,解码卡采用并行BPI Flash保证程序导入时间。硬件设计框图如图3所示。

解码卡通过电平转换芯片将外部B(DC)码转换为LVTTL电平送入FPGA,FPGA可使用内时频或外时频解调出B码时间信息及1 PPS信号建立本地时间基准,计算机通过金手指为解码卡供电,并通过PCIe通信链路设置解码卡参数,读取B码解码时间。

3.2 FPGA程序设计

3.2.1 B码解码程序设计

根据B码特性,2个连续8 ms码元的第2个8 ms代表秒始,因此搜索这2个码元最为关键[5-6],在获得秒始后,根据码元计数可得B码时间信息,具体流程如下。

①FPGA以晶振的10 MHz为参考时钟分频出1 kHz脉冲,对外部输入B码脉宽进行计数,判别出各个码元的脉宽;

②根据连续2个8 ms脉宽码元,获得秒始信号Pr;

③根据Pr位置及后续码元脉宽,获得各个位置码元值;

④存储各个码元值,根据国军标规定的年、天、时、分、秒、润、秒对应的码元位置及码元值,确定B码解码时间;

⑤根据Pr位置提取秒始信号,获得秒沿1 PPS信号并输出。

在1 PPS信号上升沿秒以上进行加一秒操作,秒以下计数清零,同时秒以下计数以晶振10 MHz为时钟进行累加,提供秒以下时间信息。

3.2.2 PCIe通信链路程序设计

解码卡FPGA的PCIe通信链路程序由PCIe硬核及逻辑程序组成,通过例化FPGA厂家封装的IP核即可调用PCIe硬核,另外,可根据具体需求对PCIe IP核的各个寄存器进行设置,其中包括BAR、ID、性能寄存器、结构寄存器等多个参数。需要注意的是,当需要插入2张解码卡时,2张卡的ID不能相同,否则会造成冲突。

完成IP核设置之后,在FPGA顶层文件中,根据上位机动态库寄存器地址及对应的操作、IP核参数等设计PCIe读写操作模块,建立与上位机之间的PCIe总线通信基础。FPGA建立PCIe硬核之后,需要调用PCIe的Tx_Engine、Rx_Engine才能进行PCIe收发操作,发送引擎和接收引擎状态机如图4和图5所示,根据Tx_Engine、Rx_Engine状态机,在FPGA中建立对应的控制逻辑即可完成FPGA的PCIe鏈路通信工作。

4上位机驱动及软件设计

上位机需要使用驱动才能建立PCIe通信,完成对解码卡的读写操作。为简化应用程序设计、扩展用户应用,在安装驱动的基础上,建立动态库完成驱动函数的调用,然后用户可根据动态库接口,在相应的软件中调用动态库函数即可完成解码卡状态设置、B码时间提取等工作。

4.1驱动及动态库设计

为简化设计流程,使用Jungo公司的Windriver软件包完成驱动开发,该软件包可以大幅简化设备驱动程序开发和硬件访问程序,将底层芯片复杂操作(如DMA传输等)封装起来,并提供动态库接口调用说明即可。

基于Windriver驱动接口,在Visual Studio环境下开展了动态库函数设计工作,动态库函数的优势在于用户应用软件不再关心底层硬件,有助于后续各种上位机应用软件开发。驱动及动态库函数是底层硬件与应用程序之间通信的桥梁,如图6所示。

根据实际工程应用需求,设计了动态库接口函数,如表1所示。上位机用户软件通过调用动态库的接口函数即可完成解码卡状态设置及时间读写工作。当需要增加新功能时,在动态库函数中增加新的定义函数,并在FPGA中增加对应寄存器的操作即可。

4.2软件设计

完成驱动及动态库函数设计后,在上位机使用Visual Studio开展应用软件设计。为满足多种应用需求,软件界面设计97/08版本选择、内B码/外B码选择、内时钟/外时钟选择、外部B码状态、B码时间设置等功能,可设置解码卡工作在不同版本、不同B码源、不同时钟源(外部有高性能时钟源)。在软件运行过程中,将自动存储B码时间及B码状态,每小时保存一个“.txt”文件,当外部B码丢失或B码时间错误时,可为后续分析问题及解决问题提供数据支撑。软件界面如图7所示。

5测试结果分析

对解码卡进行测试,测试框图如图8所示。时频信号产生器内置铷钟,产生B码、10 MHz和1 PPS信号,分别送入解码卡及计数器;解码卡插到计算机PCIe×1槽位,解调外部B码并将解出的1 PPS送入计数器进行测量,同时,计算机存储测量结果及解码卡解码时间信息。

解码卡时间存储结果如图9所示,最后一位为标志位,当外部B码有效时为A,无效时为V。

时间间隔计數器测试结果如图10所示,时频信号产生器1 PPS与解码1 PPS存在55 ns左右的偏差,经分析,由于B码传输为单向传输,传输路径将导致时频信号产生器输出端B码与解码卡输入端B码信号存在12 ns固定的偏差,该偏差与线缆类型及线缆长度有关,解码卡解调1 PPS与B码输入存在33 ns左右偏差,该偏差与信号在FPGA内部传输路径有关。当前B码解码精度一般在200 ns,能够满足大多数应用的需求。

6结束语

介绍了基于PCIe总线的B码解码板卡的设计与实现,鉴于PCIe总线数据流量较小,板卡使用内嵌PCIe硬核的FPGA实现底层B码解码及PCIe通信,解码精度优于100 ns,与使用专用PCIe桥接芯片方案相比,方案更加简洁,同时降低了生产成本。另外,在上位机使用Windriver建立PCIe驱动,然后设计与FPGA程序对应的动态库及应用程序即可通过PCIe总线读取B码解码时间信息,最终完成对计算机的授时,实现计算机时间与系统时间同步。

参考文献

[1]任连芳.基于PCI+Express总线的数据传输与存储[D].南京:南京理工大学,2010.

[2]张森峰.基于PCI+Express的数据传输适配卡设计[D].太原:中北大学,2009.

[3]张明迪.基于FPGA的IRIG-B码解码设计[D].哈尔滨:哈尔滨工程大学,2011.

[4]陈利.基于FPGA的IRIG-B码基带产生电路的设计与实现[D].苏州:苏州大学,2014.

[5]耿家庆.新一代的GPS-B码解码授时系统设计[D].济南:山东大学,2014.

[6]吴炜,周烨,黄子强.FPGA实现IRIG-B(DC)码编码和解码的设计[J].电子设计工程,2010,18(12):162-164.