发明内容
本发明的目的在于解决上述现有技术的缺陷,提供了一种应用于分布式系统的高精度时钟外同步系统及其时钟同步方法。本发明在不影响计算机实时计算任务的前提下,能成功完成精确同步功能,尤其能克服外部秒脉冲时钟信号出现毛刺、脉冲丢失等情况对系统造成的干扰,从而更可靠地完成时钟同步任务,并能实现微秒级的同步精度。
本发明的技术目的是通过以下技术方案实现的:
本发明所提供的时钟外同步系统,用于向其外部的计算机提供准确的时间信息。该系统包括核心控制电路、重锁定控制电路、存储单元和通信接口。其中,核心控制电路接收本时钟外同步系统的外部提供的1PPS秒脉冲时钟信号;该核心控制电路跟踪锁定秒脉冲时钟信号后,向存储单元发送计秒信号。本系统中的重锁定控制电路也接收本时钟外同步系统的外部提供的1PPS秒脉冲时钟信号;该重锁定控制电路在核心控制电路失锁后进行信号重锁定过程,向核心控制电路输出重锁信号或者重置信号。存储单元与核心控制电路进行双向通信,存储单元中存储核心控制电路和重锁定控制电路工作所需的信息,并将时间信息记录在时间寄存器中。通信接口与存储单元进行双向通信;通信接口还连接到计算机,与计算机进行双向通信。
上述技术方案将时钟外同步系统的硬件构成按照功能划分为核心控制电路、重锁定控制电路、存储单元和通信接口四个主要部分。这四部分电路的协同工作就能实现对1PPS秒脉冲信号的跟踪锁定、毛刺处理、脉冲丢失重锁定处理、以及对时间信息的计算与输出。外部时钟源提供的1PPS秒脉冲时钟信号同时发送至核心控制电路和重锁定控制电路,一般情况下,由核心控制电路完成对秒脉冲信号的跟踪锁定,输出计秒信号。当出现脉冲丢失情况时,一方面,核心控制电路按照本模块自身的时钟频率计时,输出计秒信号,保障时钟系统的稳定运行;与此同时,重锁定控制电路开始工作,协助核心控制电路重新锁定到外部时钟源发来的1PPS信号。外部的计算机,通过通信接口设置、修改或读取存储单元中的各种寄存器,如控制命令字、中断状态字、时间寄存器及各项参数等。
本发明提供了上述时钟外同步系统的时钟同步方法,该方法从本质上讲,就是本发明的时钟外同步系统中各硬件部件的工作所遵循的一套策略。具体地,该方法采用以下步骤进行:
第一步,核心控制电路等待接收用户发出的同步启动命令:若接收到,则继续执行第二步;否则,继续等待接收;
第二步,进行初始化过程;
第三步,等待接收外部发送来的上升沿信号:若接收到,则继续进行第四步;否则,继续等待接收;
第四步,清零并启动有效脉冲间隔计数器kern_cnter开始计数;
第五步,判断是否接收到新的上升沿信号:若接收到,则继续进行第六步;否则,继续进行第七步;
第六步,判断计数器kern_cnter的计数值kc是否处于有效脉冲间隔理想计数值mcr的误差范围内:若是,则执行第十一步;否则,返回第五步;
第七步,判断计数器kern_cnter的计数值kc是否达到有效脉冲间隔理想计数值mcr的误差上限:若达到,则执行第八步;否则,继续进行第九步;
第八步,核心控制电路执行强制触发过程;重锁定控制电路执行信号重锁定过程;
第九步,判断是否接收到重锁定控制电路发送来的重锁信号:若接收到,则继续进行第十一步;否则,继续进行第十步;
第十步,判断是否接收到重锁定控制电路发送来的重置信号:若接收到,则返回第三步;否则,返回第五步;
第十一步,核心控制电路向存储单元发送计秒信号,使得存储单元更新其内部的时间寄存器;然后返回第四步。
上述技术方案就实现了对1PPS秒脉冲信号进行跟踪锁定的一系列处理策略。该方案的好处在于:
1.接收到同步启动命令后,首先进行初始化,初始化完毕后方进入正常的跟踪锁定过程。这就能确保外部时钟源的1PPS信号足够稳定后,本系统才开始正常工作,也就进一步确保了本系统输出到外部计算机的时钟信息的准确性。
2.设计计数器kern_cnter,对接收到脉冲间隔进行计数,并设计参数mcr表达有效脉冲间隔理想计数值,从而可通过判断计数器kern_cnter的计数值kc与理想计数值mcr的差值|kc-mcr|来判断接收到的脉冲信号是否准确、接收到的上升沿信号是否能在一定误差允许范围内表达秒时刻,从而为下一步操作提供决策依据。
3.上述方案实现了对毛刺信号的检测与处理:若计数值kc小于理想计数值mcr的误差下限,则表明接收到的是脉冲毛刺。此时,核心控制电路对该毛刺不予理会,计数器kern_cnter继续计数,直到接收到又一上升沿信号。
4.上述方案还实现了对脉冲丢失情况的检测与处理:若计数值kc已达到理想计数值mcr的误差上限而核心控制电路仍然尚未接收到上升沿信号,则表明该脉冲已丢失。此时,核心控制电路首先执行强制触发过程,使得时间寄存器得以更新,以确保时间系统的稳定;然后继续接收外部时钟源发送来的信号,以期再次跟踪锁定到秒脉冲信号。与此同时,重锁定控制电路开始执行信号重锁定过程,与核心控制电路相互独立地进行秒脉冲信号的捕获,目的在于协助核心控制电路再次跟踪锁定到秒脉冲信号。
5.重锁定控制电路执行完信号重锁定过程后,若核心控制电路仍未再次锁定,则向核心控制电路发送重锁信号或者重置信号,使得核心控制电路得以恢复到正常工作状态。
具体说来,上述第二步中的初始化过程可采用以下步骤进行:
步骤A1,核心控制电路等待接收外部发送来的上升沿信号:若接收到,则继续执行步骤A2;否则,继续等待接收;
步骤A2,清零并启动相邻脉冲间隔计数器lock_cnter;
步骤A3,判断是否接收到新的上升沿信号:若接收到,则继续进行步骤A4;否则,继续进行步骤A5;
步骤A4,判断计数器lock_cnter的计数值lc是否处于有效脉冲间隔初始参照值pcr的误差范围内:若是,则继续进行步骤A6;否则,将初始化连续有效脉冲计数器init_cnter的值重置为初始值,然后返回步骤A1;
步骤A5,判断计数器lock_cnter的计数值lc是否达到初始参照值pcr的误差上限:若是,则将计数器init_cnter的值重置为初始值,然后返回步骤A1;否则,返回步骤A3;
步骤A6,将计数器init_cnter的值加1或者减1;
步骤A7,判断计数器init_cnter的值是否达到预设值:若是,则输出初始化完毕信号,结束本初始化过程;否则,返回步骤A2。
上述初始化过程中,设计相邻脉冲间隔计数器lock_cnter对接收到的两个上升沿信号之间的间隔进行计数,用以判断接收到的上升沿信号能否在一定误差允许范围内表达秒时刻。在初始化过程中,只要出现脉冲毛刺或者脉冲丢失情况,均返回步骤A1重新开始初始化。并且,设计计数器init_cnter表达初始化连续有效脉冲数,该计数值在每次接收到有效脉冲后递增或递减,在每次有效脉冲接收失败后复位,因此只有连续收到预设个数的有效脉冲后,计数器init_cnter的值才会达到预设值,才认为外部时钟源的秒脉冲输出已稳定,初始化过程至此方结束。这样的技术方案有助于更准确可靠地判断外部时钟源的秒脉冲输出是否已稳定,从而有利于系统时钟的稳定。
上述第八步中核心控制电路执行的强制触发过程,可采用直接进行第十一步的方法实现:即,核心控制电路向存储单元发送计秒信号,使得存储单元更新其内部的时间寄存器;然后清零并启动计数器kern_cnter开始计数,对下一个上升沿信号进行捕获。这种方式简单易行,即使核心控制电路无法自行完成再次锁定,重锁定控制电路也会在执行信号重锁定过程后,协助核心控制电路完成锁定。
上述第八步中核心控制电路执行的强制触发过程,也可采用以下步骤进行:
步骤C1,核心控制电路向存储单元发送计秒信号,使得存储单元更新其内部的时间寄存器;
步骤C2,清零并启动有效脉冲间隔计数器kern_cnter开始计数;
步骤C3,核心控制电路判断是否接收到新的上升沿信号:若接收到,则继续进行步骤C4;否则,继续进行步骤C5;
步骤C4,判断计数器kern_cnter的计数值kc的校正值kc’是否处于有效脉冲间隔理想计数值mcr的误差范围(mcr-Δt,mcr+Δt)内:若是,则继续执行第十一步;否则,返回步骤C3;
步骤C5,判断计数器kern_cnter的计数值kc的校正值kc’是否达到有效脉冲间隔理想计数值mcr的误差上限(mcr+Δt):若达到,则返回步骤C1;否则,继续进行第九步。
采用上述优选方案主要有以下两方面好处:
1.由于核心控制电路在计数值kc已达到理想计数值mcr的误差上限(记为(mcr+Δt))时才会执行强制触发过程,因此,执行步骤C1的时刻已经比理想时刻延迟了Δt。在强制触发后、进行下一个时钟脉冲捕获时,若直接将计数值kc作为判断是否接收到有效脉冲的依据,则很容易错过这个时钟脉冲。因此,上述优选方案对计数值kc的值进行校正,采用校正值kc’作为判断脉冲间隔是否有效的依据,更有利于核心控制电路自行完成再次锁定。
2.当外部时钟源出现故障、本系统长时间无法正常接收秒脉冲信号时,核心控制电路和重锁定控制电路均无法锁定1PPS信号。此时,时间寄存器内的时间信息均要依靠核心控制电路执行强制触发过程进行更新。因此,采用上述优选方案,每一次都采用计数值kc的校正值kc’作为判断依据,就能将计秒信号的发送时刻与理想时刻的误差始终控制在Δt,而不会带来误差的累积,从而有利于系统运行的稳定和精确。
进一步地,为了确保计数器kern_cnter工作的可靠性,在对计数值kc进行校正时,不直接对计数器kern_cnter的计数值kc进行运算,而是设计一有效脉冲间隔校准计数值aux_cnter,该计数值aux_cnter的值始终等于误差限Δt与计数值kc的值之和,即,aux_cnter=kc+Δt。校正值kc’的值取即可直接取为有效脉冲间隔校准计数值aux_cnter的值。这就完成了对计数值kc的校正。
重锁定控制电路检测到核心控制电路执行上述强制触发过程后,可采用以下方法进行信号重锁定过程:
步骤B 1,重锁定控制电路等待接收外部发送来的上升沿信号:若接收到,则继续执行步骤B2;否则,继续等待接收;
步骤B2,清零并启动相邻脉冲间隔计数器lock_cnter;
步骤B3,判断是否接收到新的上升沿信号:若接收到,则继续进行步骤B4;否则,继续进行步骤B5;
步骤B4,判断计数器lock_cnter的计数值lc是否处于有效脉冲间隔理想计数值mcr的误差范围内:若是,则继续进行步骤B6;否则,返回步骤B1;
步骤B5,判断计数器lock_cnter的计数值lc是否达到有效脉冲间隔理想计数值mcr的误差上限:若是,则返回步骤B1;否则,返回步骤B3;
步骤B6,判断重锁定连续有效脉冲计数器rl_cnter的计数值是否达到预设值:若是,则执行步骤B7;否则,返回步骤B2;
步骤B7,判断核心控制电路是否已正常锁定到最新的有效脉冲:若是,则继续进行步骤B9;否则,继续进行步骤B8;
步骤B8,判断计数器kern_cnter的计数值kc是否小于重锁定时间间隔限rl_limit的值:若是,则重锁定控制电路向核心控制电路发送重置信号,然后继续进行步骤B9;否则,重锁定控制电路向核心控制电路发送重锁信号,然后继续进行步骤B9;
步骤B9,结束本信号重锁定过程。
上述信号重锁定过程中,采用相邻脉冲间隔计数器lock_cnter对接收到的两个上升沿信号之间的间隔进行计数,用以判断接收到的上升沿信号能否在一定误差允许范围内表达秒时刻。在这一过程中,与初始化过程类似地,只要出现脉冲毛刺或者脉冲丢失情况,均返回步骤B1重新开始信号重锁定。并且,设计计数器rl_cnter对重锁定连续有效脉冲数进行计数,只有连续收到预设个数的有效脉冲后,才认为重锁定控制电路已重新锁定秒脉冲信号。这时,若核心控制电路已自行锁定到最新的秒脉冲信号,则重锁定控制电路可直接结束信号重锁定过程;否则,表明核心控制电路需要协助方能重新锁定信号,重锁定控制电路需向核心控制电路发送重锁信号或者重置信号。这样的技术方案就使得系统具备了故障自恢复能力,从而能更稳定可靠地输出时间信息。
本发明时钟外同步系统中的存储单元内部有一时间寄存器,该时间寄存器由秒以上时间计数器UTR和秒以下时间计数器DTR构成。秒以下时间计数器DTR的计数值dtr,每n个系统时钟周期计数一次;并且,每收到计秒信号后,计数器DTR清零并重新启动。秒以上时间计数器UTR的计数值utr,每收到计秒信号后增一。因此,时间寄存器表达的时间信息TIME由以下公式确定:
作为本发明时钟外同步系统的再一种优选方案,时钟外同步系统还包括频率校正电路。频率校正电路向核心控制电路输出经校正的系统时钟频率。相应地,可采用初始校正和动态调整两部分过程进行频率校正,确定有效脉冲间隔理想计数值mcr的值。其中,初始校正过程可采用以下方法进行:频率校正电路对个数m个连续有效脉冲的间隔进行计数;然后,取m个计数值的平均值m0,并将m0的值作为理想计数值mcr的初始值;至此完成初始校正部分。动态调整过程可采用以下方法进行:在核心控制电路执行第六步,并判定计数器kern_cnter的计数值kc处于理想计数值mcr的误差范围内后,频率校正电路判断计数值kc与理想计数值mcr的值的差值|kc-mcr|是否大于晶振频率误差限ε:若是,则将理想计数值mcr的值取为计数值kc的值,然后重复本动态调整过程;否则,直接重复本动态调整过程。
由于普通晶振的标称频率只是一个参考值,其真实频率受系统工作环境、老化、漂移等多种因素的影响,是动态变化的。因此,若始终以某个固定频率计算,会引入相当大的误差。上述技术方案引入频率校正电路,并基于该电路设计了频率校正的方法,用以确定有效脉冲间隔理想计数值mcr的值,这就能动态校正晶振频率带来的误差。实质上,采用这个技术方案,可将有效脉冲间隔理想计数值mcr的误差控制在误差限ε以内,进一步确保系统的时钟精度。
具体实施方式
下面结合附图和具体实施方式对本发明的技术方案做进一步详细说明。
本发明所提供的时钟外同步系统200,用于向其外部的计算机300提供准确的时间信息。该系统200包括核心控制电路201、重锁定控制电路202、存储单元204和通信接口205,参见图1所示。其中,核心控制电路201接收本时钟外同步系统200外部的时钟源100提供的1PPS秒脉冲时钟信号;该核心控制电路201跟踪锁定秒脉冲时钟信号后,向存储单元204发送计秒信号。本系统200中的重锁定控制电路202也接收本时钟外同步系统200外部的时钟源100提供的1PPS秒脉冲时钟信号;该重锁定控制电路202在核心控制电路201失锁后进行信号重锁定过程,向核心控制电路201输出重锁信号或者重置信号。存储单元204与核心控制电路201进行双向通信,存储单元204中存储核心控制电路201和重锁定控制电路202工作所需的信息,例如控制命令字、中断状态字、系统参数等,并将时间信息记录在时间寄存器2041中。通信接口205与存储单元204进行双向通信;通信接口205还连接到计算机300,与计算机300进行双向通信。
上述技术方案将时钟外同步系统200的硬件构成按照功能划分为核心控制电路201、重锁定控制电路202、存储单元204和通信接口205四个主要部分。这四部分电路的协同工作就能实现对1PPS秒脉冲信号的跟踪锁定、毛刺处理、脉冲丢失重锁定处理、以及对时间信息的计算与输出等。具体如下:
(1)核心控制电路201负责全局控制,主要跟踪锁定1PPS秒脉冲信号,并解决脉冲毛刺及脉冲丢失问题。核心控制电路201的工作过程可设计一主状态机来实现。
(2)重锁定控制电路202负责信号的重锁定,在出现故障而锁偏的情况下,辅助核心控制电路201重新捕获到有效的1PPS脉冲,使系统200回到正确的轨道上。重锁定控制电路202的工作过程可设计一从状态机来实现。
(3)通信接口205取为一PCI控制器,负责解析PCI协议,实现PCI总线接口功能。
(4)存储单元204是存储系统200与用户计算机300进行交互所需的各种寄存器,如控制命令字、中断状态字、时间寄存器2041及各项参数等。
结合图1可知,外部时钟源100提供的1PPS秒脉冲时钟信号同时发送至核心控制电路201和重锁定控制电路202。一般情况下,由核心控制电路201完成对秒脉冲信号的跟踪锁定,输出计秒信号。当出现脉冲丢失情况时,一方面,核心控制电路201按照系统200自身的时钟频率计时,输出计秒信号,保障时间寄存器2041的持续更新,使得用户计算机得以稳定运行;与此同时,重锁定控制电路202开始工作,协助核心控制电路201重新锁定到外部时钟源100发来的1PPS信号。外部的计算机300,通过通信接口205设置、修改或读取存储单元204。
本发明还提供了上述时钟外同步系统200的时钟同步方法,该方法从本质上讲,就是本发明的时钟外同步系统200中各硬件部件的工作所遵循的一套策略。具体地,该方法可采用以下步骤进行,参见图2所示:
第一步,核心控制电路201等待接收用户发出的同步启动命令:若接收到,则继续执行第二步;否则,继续等待接收;
第二步,进行初始化过程;
第三步,等待接收外部时钟源100发送来的上升沿信号:若接收到,则继续进行第四步;否则,继续等待接收;
第四步,清零并启动有效脉冲间隔计数器kern_cnter开始计数;
第五步,判断是否接收到新的上升沿信号:若接收到,则继续进行第六步;否则,继续进行第七步;
第六步,判断计数器kern_cnter的计数值kc是否处于有效脉冲间隔理想计数值mcr的误差范围内:若是,则执行第十一步;否则,返回第五步;
第七步,判断计数器kern_cnter的计数值kc是否达到有效脉冲间隔理想计数值mcr的误差上限:若达到,则执行第八步;否则,继续进行第九步;
第八步,核心控制电路201执行强制触发过程;重锁定控制电路202执行信号重锁定过程;
第九步,判断是否接收到重锁定控制电路202发送来的重锁信号:若接收到,则继续进行第十一步;否则,继续进行第十步;
第十步,判断是否接收到重锁定控制电路202发送来的重置信号:若接收到,则返回第三步;否则,返回第五步;
第十一步,核心控制电路201向存储单元204发送计秒信号,使得存储单元204更新其内部的时间寄存器2041;然后返回第四步。
在图2所示实施方式中,将有效脉冲间隔理想计数值mcr的误差限记为Δt,则有效脉冲间隔理想计数值mcr的误差范围为(mcr-Δt,mcr+Δt)。在上一步结束后的下一个时钟周期时进行判断:若接收到上升沿信号的时刻在计数值kc小于(mcr-Δt)时,则核心控制电路201对这个上升沿信号不予理会,返回第五步等待接收下一上升沿信号。若在计数值kc达到(mcr+Δt)时仍未接收到上升沿信号,则认为丢失了一个1PPS脉冲。此时,核心控制电路201执行强制触发过程;并且,检测到核心控制电路201执行强制触发过程后,重锁定控制电路202开始执行信号重锁定过程,协助核心控制电路201重新锁定到1PPS信号。这样的实现方式就实现了对1PPS秒脉冲信号进行跟踪锁定的一系列处理策略,参见图8所示。该方案的好处在于:
1.接收到同步启动命令后,首先进行初始化,初始化完毕后方进入正常的跟踪锁定过程。这就能确保外部时钟源100输出的1PPS信号足够稳定后,本系统200才开始正常工作,也就进一步确保了本系统200输出到外部计算机300的时钟信息的准确性。
2.设计计数器kern_cnter,对接收到脉冲间隔进行计数,并设计参数mcr表达有效脉冲间隔理想计数值,从而可通过判断计数器kern_cnter的计数值kc与理想计数值mcr的差值|kc-mcr|来判断接收到的脉冲信号是否准确、接收到的上升沿信号是否能在一定误差允许范围内表达秒时刻,从而为下一步操作提供决策依据。正常锁定误差限Δt作为系统参数的一部分存储在存储单元204中,并且,作为系统同步误差的重要影响因素,误差限Δt应取得适当小些,例如,可取为1e+4(约0.2毫秒)。
3.上述实施方式还实现了对毛刺信号的检测与处理:若计数值kc小于理想计数值mcr的误差下限(mcr-Δt),则表明接收到的是脉冲毛刺。此时,核心控制电路201对该毛刺不予理会,计数器kern_cnter继续计数,直到接收到又一上升沿信号。
4.上述方案还实现了对脉冲丢失情况的检测与处理:若计数值kc已达到理想计数值mcr的误差上限(mcr+Δt)而核心控制电路201仍然尚未接收到上升沿信号,则表明该脉冲已丢失。此时,核心控制电路201首先执行强制触发过程,使得时间寄存器2041得以更新,以确保时间系统的稳定;然后继续接收外部时钟源100发送来的信号,以期再次跟踪锁定到秒脉冲信号。与此同时,重锁定控制电路202开始执行信号重锁定过程,与核心控制电路201相互独立地进行秒脉冲信号的捕获,目的在于协助核心控制电路201再次跟踪锁定到秒脉冲信号。
5.重锁定控制电路202执行完信号重锁定过程后,若核心控制电路201仍未再次锁定,则向核心控制电路201发送重锁信号或者重置信号,使得核心控制电路201得以恢复到正常工作状态。
具体说来,上述第二步中的初始化过程可采用以下步骤进行,参见图3所示:
步骤A1,核心控制电路201等待接收外部时钟源100发送来的上升沿信号:若接收到,则继续执行步骤A2;否则,继续等待接收;
步骤A2,清零并启动相邻脉冲间隔计数器lock_cnter;
步骤A3,判断是否接收到新的上升沿信号:若接收到,则继续进行步骤A4;否则,继续进行步骤A5;
步骤A4,判断计数器lock_cnter的计数值lc是否处于有效脉冲间隔初始参照值pcr的误差范围内:若是,则继续进行步骤A6;否则,将初始化连续有效脉冲计数器init_cnter的值重置为初始值,然后返回步骤A1;
步骤A5,判断计数器lock_cnter的计数值lc是否达到初始参照值pcr的误差上限:若是,则将计数器init_cnter的值重置为初始值,然后返回步骤A1;否则,返回步骤A3;
步骤A6,将计数器init_cnter的值加1或者减1;
步骤A7,判断计数器init_cnter的值是否达到预设值:若是,则输出初始化完毕信号,结束本初始化过程;否则,返回步骤A2。
在图3所示初始化过程中,设计相邻脉冲间隔计数器lock_cnter对接收到的两个上升沿信号之间的间隔进行计数,并将相邻脉冲间隔计数器lock_cnter的误差限记为lcr,用以判断接收到的上升沿信号能否在误差范围(pcr-lcr,pcr+lcr)内表达秒时刻。初始参照值pcr和初始锁定误差限lcr的值均作为系统参数的一部分存储在存储单元204中,可由用户计算机300通过通信接口205进行修改。对于晶振频率50MHz的时间系统,初始参数值pcr的值可取为晶振的标称频率5e+7;而为了在正常工作之前尽快地完成初始化锁定,初始锁定误差限lcr的值可适当取得略大,例如,可取为1e+5(约2毫秒)。
在初始化过程中,只要出现脉冲毛刺或者脉冲丢失情况,均返回步骤A1重新开始初始化。并且,设计计数器init_cnter表达初始化连续有效脉冲数,该计数值在每次接收到有效脉冲后递增或递减,在每次有效脉冲接收失败后复位,因此只有连续收到预设个数的有效脉冲后,计数器init_cnter的值才会达到预设值,才认为外部时钟源100的秒脉冲输出已稳定,初始化过程至此方结束,参见图7所示。这样的技术方案有助于更准确可靠地判断外部时钟源100的秒脉冲输出是否已稳定,从而有利于系统时钟的稳定。计数器init_cnter的初始值也作为系统参数存储在存储单元204中,可由用户300修改。在判断连续接收到的有效脉冲个数是否达到预设个数时,采用对计数器init_cnter进行递增或递减的方式均可,二者等效。例如,可将计数器init_cnter的初始值取为8,每接收到一个有效1PPS信号后计数器init_cnter减1,则可设定当检测到计数器init_cnter的值减为1时,核心控制电路201完成初始化过程,此时还应将计数器init_cnter复位。
上述第八步中核心控制电路201执行的强制触发过程,可采用直接进行第十一步的方法实现:即,核心控制电路201向存储单元204发送计秒信号,使得存储单元204更新其内部的时间寄存器2041;然后清零并启动计数器kern_cnter开始计数,对下一个上升沿信号进行捕获。这种方式简单易行,但是,由于核心控制电路201在计数值kc已达到理想计数值mcr的误差上限(mcr+Δt)时才会执行强制触发过程,因此,发送计秒信号的时刻实际上已经比理想时刻延迟了Δt。因此,核心控制电路201很容易错过下一个有效脉冲。不过,由于核心控制电路201执行强制触发过程后,重锁定控制电路202也会执行信号重锁定过程,因此,即使核心控制电路201无法自行完成再次锁定,重锁定控制电路202也会在执行信号重锁定过程后,协助核心控制电路201成功完成锁定。
上述第八步中核心控制电路201执行的强制触发过程,也可采用以下步骤进行,参见图4所示:
步骤C1,核心控制电路201向存储单元204发送计秒信号,使得存储单元204更新其内部的时间寄存器2041
步骤C2,清零并启动有效脉冲间隔计数器kern_cnter开始计数;
步骤C3,核心控制电路201判断是否接收到新的上升沿信号:若接收到,则继续进行步骤C4;否则,继续进行步骤C5;
步骤C4,判断计数器kern_cnter的计数值kc的校正值kc’是否处于有效脉冲间隔理想计数值mcr的误差范围(mcr-Δt,mcr+Δt)内:若是,则继续执行第十一步;否则,返回步骤C3;
步骤C5,判断计数器kern_cnter的计数值kc的校正值kc’是否达到有效脉冲间隔理想计数值mcr的误差上限(mcr+Δt):若达到,则返回步骤C1;否则,继续进行第九步。
采用上述优选方案主要有以下两方面好处:
1.由于核心控制电路201在计数值kc已达到理想计数值mcr的误差上限(记为(mcr+Δt))时才会执行强制触发过程,因此,执行步骤C 1的时刻已经比理想时刻延迟了Δt。在强制触发后、进行下一个时钟脉冲捕获时,若直接将计数值kc作为判断是否接收到有效脉冲的依据,则很容易错过这个时钟脉冲。因此,上述优选方案对计数值kc的值进行校正,采用校正值kc’作为判断脉冲间隔是否有效的依据,更有利于核心控制电路201自行完成再次锁定。
2.当外部时钟源100出现故障、本系统200长时间无法正常接收秒脉冲信号时,核心控制电路201和重锁定控制电路202将均无法锁定1PPS信号。此时,时间寄存器2041内的时间信息均要依靠核心控制电路201执行强制触发过程进行更新。若每次进行强制触发发送计秒信号的时刻均比理想时刻延迟Δt,则会带来误差的累积。因此,采用图4所示的实施方式,每一次都采用计数值kc的校正值kc’作为判断依据,就能将计秒信号的发送时刻与理想时刻的误差始终控制在Δt,而不会带来误差的累积,从而有利于系统长时间运行的稳定和精确。校正值kc’应在计数值kc的基础上加上误差Δt。
进一步地,为了确保计数器kern_cnter工作的可靠性,在对计数值kc进行校正时,不直接对计数器kern_cnter进行运算,而是设计一有效脉冲间隔校准计数值aux_cnter用来直接地表征校正值kc’。该计数值aux_cnter的初值取为误差限Δt,随着计数器kern_cnter的工作,计数值aux_cnter的值随之同步更新,始终等于误差限Δt与计数值kc的值之和,即,aux_cnter=kc+Δt。因此,校正值kc’的值取即可直接取为有效脉冲间隔校准计数值aux_cnter的值。这就完成了对计数值kc的校正。
重锁定控制电路202检测到核心控制电路201执行强制触发过程后,可采用以下方法进行信号重锁定过程,参见图5所示:
步骤B 1,重锁定控制电路202等待接收外部发送来的上升沿信号:若接收到,则继续执行步骤B2;否则,继续等待接收;
步骤B2,清零并启动相邻脉冲间隔计数器lock_cnter;
步骤B3,判断是否接收到新的上升沿信号:若接收到,则继续进行步骤B4;否则,继续进行步骤B5;
步骤B4,判断计数器lock_cnter的计数值lc是否处于有效脉冲间隔理想计数值mcr的误差范围内:若是,则继续进行步骤B6;否则,返回步骤B1;
步骤B5,判断计数器lock_cnter的计数值lc是否达到有效脉冲间隔理想计数值mcr的误差上限:若是,则返回步骤B 1;否则,返回步骤B3;
步骤B6,判断重锁定连续有效脉冲计数器rl_cnter的计数值是否达到预设值:若是,则执行步骤B7;否则,返回步骤B2;
步骤B7,判断核心控制电路201是否已正常锁定到最新的有效脉冲:若是,则继续进行步骤B9;否则,继续进行步骤B8;
步骤B8,判断计数器kern_cnter的计数值kc是否小于重锁定时间间隔限rl_limit的值:若是,则重锁定控制电路202向核心控制电路201发送重置信号,然后继续进行步骤B9;否则,重锁定控制电路202向核心控制电路201发送重锁信号,然后继续进行步骤B9;
步骤B9,结束本信号重锁定过程。
上述信号重锁定过程中,采用相邻脉冲间隔计数器lock_cnter对接收到的两个上升沿信号之间的间隔进行计数,用以判断接收到的上升沿信号能否在一定误差允许范围内表达秒时刻。在这一过程中,与初始化过程类似地,只要出现脉冲毛刺或者脉冲丢失情况,均返回步骤B1重新开始信号重锁定。并且,设计计数器rl_cnter对重锁定连续有效脉冲数进行计数,只有连续收到预设个数的有效脉冲后,才认为重锁定控制电路202已重新锁定秒脉冲信号,且重锁定控制电路202完成重锁定后计数器rl_cnter复位。这时,若核心控制电路201已自行锁定到最新的秒脉冲信号,则重锁定控制电路202可直接结束信号重锁定过程;否则,表明核心控制电路201需要协助方能重新锁定信号。
重锁定控制电路202在重新锁定秒脉冲信号后,“理论上”可以向核心控制电路201发送重锁信号,使得核心控制电路201发出计秒信号。但是,由于核心控制电路201最后一次发送计秒信号的时刻与收到重锁信号后发出计秒信号的时刻之间的间隔不可控,很可能会出现两次计秒信号之间的间隔太短,这就与实际情况不符。因此,设计一重锁定时间间隔限rl_limit作为判断间隔是否合理的依据。由于上述两次计秒信号之间的间隔可用计数器kern_cnter的计数值kc来表达,因此,亦即判断kc的值是否小于rl_limit的值。若存在kc<rl_limit,则表明核心控制电路201最后一次发送计秒信号的时刻(往往是执行强制触发过程中发出的计秒信号)与重锁定控制电路202重新锁定秒脉冲信号的时刻太接近,两次计秒信号之间的间隔太短,系统不应在这么短的时间内连续发出两次计秒信号,因此,此时重锁定控制电路202需向核心控制电路201发送重置信号,使得核心控制电路201能顺利锁定到下一个有效1PPS脉冲。这样的技术方案就使得系统具备了故障自恢复能力,从而能更稳定可靠地输出时间信息。
本发明时钟外同步系统200中的存储单元204内部有一时间寄存器2041,该时间寄存器2041由秒以上时间计数器UTR和秒以下时间计数器DTR构成。秒以下时间计数器DTR的计数值dtr,每n个系统时钟周期计数一次;并且,每收到计秒信号后,计数器DTR清零并重新启动。秒以上时间计数器UTR的计数值utr,每收到计秒信号后增一。因此,时间寄存器2041表达的时间信息TIME由以下公式确定:
由于计数器DTR位宽的限制,为防止溢出,可将上述n取为5,即每5个系统时钟周期计数器DTR计数一次,则时间分辨率约为0.1微秒。本地时钟的计算公式亦调整为:
如图1所示,作为本发明时钟外同步系统200的再一种优选方案,时钟外同步系统200还包括频率校正电路203。频率校正电路203用于检测校正本地晶振频率,补偿初始频率误差,并克服晶振的动态漂移,为系统提供精确的时间度量标准。频率校正电路203向核心控制电路201输出经校正的系统时钟频率。频率校正电路203可采用初始校正和动态调整两部分过程进行频率校正,确定有效脉冲间隔理想计数值mcr的值,参见图6所示。其中,初始校正过程可采用以下方法进行:频率校正电路203对个数m个连续有效脉冲的间隔进行计数;然后,取m个计数值的平均值m0,并将m0的值作为理想计数值mcr的初始值;至此完成初始校正部分。动态调整过程可采用以下方法进行:在核心控制电路201执行第六步,并判定计数器kern_cnter的计数值kc处于理想计数值mcr的误差范围内后,频率校正电路203判断计数值kc与理想计数值mcr的值的差值|kc-mcr|是否大于晶振频率误差限ε:若是,则将理想计数值mcr的值取为计数值kc的值,然后重复本动态调整过程;否则,直接重复本动态调整过程。
由于普通晶振的标称频率只是一个参考值,其真实频率受系统工作环境、老化、漂移等多种因素的影响,是动态变化的。因此,若始终以某个固定频率计算,会引入相当大的误差。因此,图1所示实施方式中引入频率校正电路203,并基于该电路设计了频率校正的方法,用以确定有效脉冲间隔理想计数值mcr的值。具体地,
(1)在系统正常工作之前,先采用容错平均值法进行初始校正以获得晶振的初始准确频率。并且,若将初始化连续有效脉冲计数器init_cnter的初始值与上述个数m的值取得一致,就可在核心控制电路201执行初始化过程的同时完成晶振频率的初始校正,参见图7所示。同样地,m的值也作为系统参数存储在存储单元204中,可由用户300修改。
(2)受普通晶振频率漂移的影响,系统工作一段时间后(几天或更长),初始校正得到的频率与真实频率会产生较大的偏差,因此,还需采用偏差控制平均值法进行动态校正。在系统正常锁定1PPS信号时,跟踪有效脉冲间隔计数器kern_cnter对最近两个脉冲间隔进行计数的计数值kc,kc值即可看做是当前时刻晶振实际频率的近似。通过对计数值kc与理想计数值mcr的值的差值|kc-mcr|的限定,即可将有效脉冲间隔理想计数值mcr的误差控制在误差限ε以内。这就能动态校正晶振频率带来的误差进一步确保系统的时钟精度。
本发明的技术方案可采用分立门电路等组件实现,但由于系统相当复杂,因此,优选采用FPGA可编程器件来实现。使用硬件描述语言Verilog HDL进行设计,采用模块化设计及全同步设计思想,有利于提高系统的扩展性和稳定性。利用FPGA软编程的特点,还可将时钟信号接口和时钟同步逻辑处理集成到一片FPGA中,既省略了信号接口板,又能独立于用户计算机进行时间同步,从而既提高了时间同步的精度,又能避免对计算机实时任务的影响。
总的来说,与现有技术相比,本发明所采用的基于FPGA模块化设计思想,使得系统功能更加灵活,且提供了PCI通信接口,允许用户计算机在线修改系统参数。本发明的技术方案可以在EP1SGX40D芯片上实现,系统能够稳定运行于50MHz,同步精度在硬件层次能达到数十纳秒,几乎可以忽略。若考虑操作系统层次的延迟,例如在VxWorks环境下运行,软件最终获得的本地时钟精度为微秒量级,远高于用通用时钟板所能达到同步精度,更好地满足实际应用的需求。并且,由于本发明对脉冲毛刺和脉冲丢失情况的处理方式、系统故障自恢复能力、频率校正等多方面的设计,能很好地解决现有技术的缺陷,实现本发明的技术目的。