B(DC)码编码和解码的设计

文章正文
发布时间:2024-07-27 18:22

1 IRIG-B码格式与原理    IRIG-B码的时帧周期是1 s,包含100个码元,每个码元周期为10ms,即B码的码元速率为100 pps。B码有3种码元,位置识别标志P,二进制“1”和“0”,脉宽分别为8ms、5ms和2 ms。位置识别标志P0的前沿在帧参考点前一个索引计数间隔处,以后每10个码元有一个位置识别标志,分别为P1、P2、……、p9、P0,PR为帧参考点。脉冲信号如图1所示。


    一个时间格式帧从帧参考标志开始,由相邻两个帧参考标志之间的码元组成,每个时帧的准时为该时帧参考标志的前沿。如果连续出现两个8 ms的位置识别标志,则该时帧的开始是位于第2个8ms的位置识别标志前沿。
    IRIG-B码中第1个字段(PR~P1)传送的是秒信息,第2个字段(P1~P2)传送的是分信息,第3个字段(P2~P3)传送的是时信息,第4、5个字段(P3~P5)传送的是天数信息,即从1月1日开始计算的年积日,所以在第5个字段结束后时间信号已经解析并保存在寄存器中。另外,在第8个字和第10个字中分别有3位表示上站和分站的特标控制码元。不仅包含丰富的时间信息,也包含必要的控制信息和监测信息,方便后端用户进行使用。
    FPGA对B码的编码和解码时根据其格式和原理使用计数器和状态机来实现,其中会涉及到多个时钟信号,这些时钟信号都是由FPGA外部晶振40 MHz的时钟分频而来。编码时钟为5 MHz;解码的时钟有10 kHz、10 MHz,同时会输出时间信号,即天、时、分、秒信号。

2 IRIG-B码编码
   
时间模块由CPU进行处理,提取系统的时间信号,即秒信号sec_bcd[7..0],分信号min_bcd[7..0],时信号hour_bcd[6..0],天信号day_bcd[10..0],为FPGA的输入信号,这些输入信号都是并行信号,并且是BCD码。GPS模块为编码系统提供1 pps信号上升沿,即秒同步信号,也作为FPGA的输入信号。IRIG-B码编码的寄存器传输级(RTL)视图如图2所示。


    图2中,FPGA对IRIG-B码的编码主要由两个模块构成,一个为时钟分频模块,另一个为数据处理模块。系统的晶振时钟为40 MHz,通过分频,采用5 MHz的时钟,所以此处的误差最大为200ns。当GPS产生1个pps_in信号后,时间信号同时进入FPGA。为了产生的IRIG-B码和GPS产生的pps_in信号精确同步,所以IRIG-B码的准时位置应对准GPS模块发出的1 pps信号上升沿。B码编码的状态机流程图如图3所示。


    FPGA完成这个时刻的B码编码后,会立即不断地搜索下一个pps_in的上升沿,GPS模块每秒都会触发pps_in的上升沿,一旦发现pps_in上升沿,马上进入下一秒的编码。这样编程的好处是B码大致上可以与1 pps同步,延迟少且方便测试。FPGA对IRIG-B码秒信号的编码仿真波形如图4所示。


    如上图所示,第1行信号是40 MHz的晶振时钟;第2行信号是输入信号pps_in;第3行信号是复位信号,低电平有效;第4行信号是分频后的时钟信号5 MHz;第5行是输入秒信号,此时秒信号sec bcd[7..0]为8位二进制数10001000;最后一行信号是B码的编码信号。当pps_in上升沿到来时,FPGA对B码在5 MHz时钟的上升沿处立即产生高电平,首先是B码输出位置识别标志Pr(高电平8 ms,低电平2 ms),接着8位二进制的秒信号从低位至高位输出,实现计数器计数编码,放大波形可以知道,此时B码与pps_in有100 ns的滞后,100ns的延迟对时序同步影响很小,可以忽略不计。然后FPGA根据状态机的状态运行,直到下一个pps_in上升沿来临。

3 IRIG-B码解码
   
解码部分的设计采用两个时钟来处理,晶振的时钟为40 MHz,通过分频,可以得到一个是10 kHz的时钟,和一个10 MHz的时钟。先采用10 kHz的时钟,当连续监测到2个脉宽为8 ms的位置标示信号时,启动1个计时器,当计时器计时到990 ms时,产生1个使能信号EN,这个信号是传递给高频时钟的监测使能信号。接着计时器清零,等待下一次监测到连续2个脉宽为8 ms的信号出现时,计时器重新开始计时。
    如果只采用高频时钟的话,要监测2个脉宽为8 ms的信号与计时将会非常浪费逻辑资源。所以在前一部分的监测与计时用低频时钟进行;在准时对应的上升沿来临前2 ms为高频时钟部分提供1个使能信号;高频时钟处理部分接收到此使能信号EN后再监测B码的PR的上升沿,当监测到PR为高电平后,发出1个脉冲1 pps。经过这样的处理,就能精确的提取出1 pps信号以及与1 pps精确同步的10 MHz脉冲信号。1 pps对时信号的提取如图5所示。


    当检测到P5时,时间信号已经检测出来,这些时间信号都放在相应的寄存器(都是BCD码的并行信号)中,当有使能信号EN时,此时将已经检测出的时间信号加1 s,并在输出1 pps信号的同时输出时间信号,这样就保证了时间的准确性,也是用10 MHz的时钟同步,然后将时间信号在监测到2个脉宽为8 ms的位置标示信号时清零。FPGA对IRIG-B码的解码仿真如图6所示。


    如上图,当第3行的信号使能信号EN触发1个上升电平时,时间信号会在此时加上1 s。原先解码出来的时间信号秒、分、时、天信号为sec_out[7..0]、min_out[7..0]、hour_out[6..0]、day_out [10..0],加1 s后的时间信号放在寄存器sec_final[7..0]、min_final[7..0]、hour_final[6..0]、day_final[10..0]中,已经将它们化为十进制数,根据B码的格式,它们的第4位均为无效信号,即sec_out[4]、min_ out[4]、hour_out[4]、day_out[4]、sec_final[4]、min_final[4]、hour_final[4]、day_final[4]都是无效信号。
    当使能信号EN有效时,即在FPGA处理时间信号加1 s的过程中,当原先的秒信号sec_out寄存器为59 s时,加1 s后,输出的sec_final寄存器使其秒清零,并且在分信号寄存器加一。同理适用于分、时、天信号,它们都有一个上限,分信号的上限同样是59时信号的上限是23,而天信号的上限是365或366,需要进行判断后得出,一旦超过了各自信号的上限,输出寄存器就会自动清零,同时进位加一。
    由图6可以知道,寄存器sec_out的值为十六进制数45,使能信号EN有效后,即加上1 s后,sec_final的值为十六进制数46,因为其第4位无效,所以秒时间为26,最后解码出来的时间是145天11时41分26秒。这些时间信号存在FPGA的寄存器中,当1 pps输出时,它们会随10 MHz的时钟频率同步输出到外部总线上,外部总线接受到时间信号实现时间同步,去校准从设备的实时时间,实现了FPGA对IRIG-B的解码。

4 结论
   
随着通信技术和通信媒体的发展,如何解决时统信号在不同媒体中的传输,对靶场时间统一系统提出了更高的要求。
    本设计中用到Cyclone的EP1C6Q240C8芯片,并且使用modelsim实现功能和时序仿真。实践证明,通过FPGA完成了对IRIG-B码的编、解码设计,能够实现与系统时钟信号的精确同步,当GPS送入pps_in信号时,FPGA进行编码,输出的IRIG-B码暂时保存在FPGA的存储器中,当需要为外部设备提供精确的对时时钟时,FPGA进行解码操作,输出同步脉冲信号1pps和时间信号,从而去校准从设备的实时时间,使设备具有精度高的同步的时钟基准,获得精确且同步的控制效果,便于对从设备进行远程管理和监测。

首页
评论
分享
Top