一种串行数据解码的时钟恢复方法及系统与流程

文档序号:12308995阅读:406来源:国知局
一种串行数据解码的时钟恢复方法及系统与流程

本发明涉及数字电路串行解码技术领域,具体涉及一种用于2.5mhz-20mhz串行解码的时钟恢复方法及系统。



背景技术:

随着国家大力发展智能电网建设,传统电力设备的智能化程度越来越高,基本所有的电力设备都具有数字化接口。这类数字化接口需要与其他电力设备之间交换数据及信息。基于iec60044-7/8的编解码规范就使用于智能电力设备中。这种编解码规范是典型的串行编解码方式,只不过它根据不同的设备的功能,其编解码的速率可以在2.5mhz-20mhz之间选择。

作为测试这些智能电力设备的监测装置,单台监测装置需要具有自适应满足各种速率的能力,这样才能方便现场工作人员使用单台监测装置调试完所有的被测智能装置。

传统的解码电路及方法会将所有的信号编码速率采用穷举法的形式,用数字电路和模块枚举出来,然后逐一解码,如图1所示。如果采用大容量的fpga,则所有解码模块可以集成到单台监测装置中,但成本和复杂度提高。如果采用小容量的fpga,则每种速率都需要一种监测设备,不方便工程师现场调试。



技术实现要素:

有鉴于此,本申请提供一种串行数据解码的时钟恢复方法及系统,采用该方法的解码模块可以放在小容量的单片fpga中,能够自适应不同串行数据速率,降低了单台监测设备的成本并提高了集成度。

为解决以上技术问题,本发明提供的技术方案是一种串行数据解码的时钟恢复方法,包括:

生成鉴相时钟信号,所述鉴相时钟信号周期为生成串行数据的设备可设置的最短时钟周期的1/n,n为大于1的正整数;

计算接收的串行数据中各同向信号跳变点之间的时间间隔包含的鉴相时钟信号周期的个数值并存储;

获取存储的个数值中的最小值,根据个数值中的最小值确定串行数据的时钟信号周期;

根据串行数据的时钟信号周期恢复串行数据的时钟信号。

优选地,所述同向信号跳变点为上升沿信号跳变点。

优选地,所述同向信号跳变点为下降沿信号跳变点。

优选地,所述根据个数值中的最小值确定串行数据的时钟信号周期步骤前,还包括将个数值中的最小值加入冗余误差的步骤。

优选地,所述根据串行数据的时钟信号周期恢复串行数据的时钟信号的方法,包括:

生成校准时钟信号,所述校准时钟信号周期为所述确定的串行数据的时钟信号周期的1/n,n为大于1的正整数;

当接收的串行数据出现信号跳变点时,控制校准时钟信号的周期计数器从0开始计数,且执行下述串行数据的时钟信号生成过程:当校准时钟信号的周期计数值为0到n/2-1,且接收的串行数据没有发生跳变时,控制校准时钟信号持续输出电平1;当校准时钟信号的周期计数值为n/2到n-1,且接收的串行数据没有发生跳变时,控制校准时钟信号持续输出电平0;

若校准时钟信号的周期计数值到n-1,控制校准时钟信号的周期计数器从0开始重新计数,返回执行上述串行数据的时钟信号生成过程。

优选地,所述根据串行数据的时钟信号周期恢复串行数据的时钟信号的方法,还包括:

若接收的串行数据发生跳变,则从接收的串行数据发生跳变的时刻,控制校准时钟信号的周期计数器从0开始重新计数,返回执行上述串行数据的时钟信号生成过程。

优选地,所述信号跳变点包括上升沿信号跳变点和下降沿信号跳变点。

本发明还提供了一种串行数据解码的时钟恢复系统,包括:

生成模块,用于生成鉴相时钟信号,所述鉴相时钟信号周期为生成串行数据的设备可设置的最短时钟周期的1/n,n为大于1的正整数;

计算模块,用于计算接收的串行数据中各同向信号跳变点之间的时间间隔包含的鉴相时钟信号周期的个数值并存储;

获取模块,用于获取存储的个数值中的最小值;

确定模块,根据个数值中的最小值确定串行数据的时钟信号周期;

恢复模块,根据串行数据的时钟信号周期恢复串行数据的时钟信号。

优选地,该串行数据解码的时钟恢复系统还包括加入模块,用于在存储的个数值中的最小值中加入冗余误差。

本申请与现有技术相比,其有益效果详细说明如下:本发明实施例提供的串行数据解码的时钟恢复方法和系统,通过生成鉴相时钟信号,计算接收的串行数据中各同向信号跳变点之间的时间间隔包含的鉴相时钟信号周期的个数值并存储,获取存储的个数值中的最小值,根据个数值中的最小值确定串行数据的时钟信号周期,根据串行数据的时钟信号周期恢复串行数据的时钟信号的方法,能够根据不同的串行数据速率自适应恢复出串行数据的时钟信号,解决了由于传统时钟恢复方法复杂导致单台监测设备成本高的问题,采用本发明的串行数据解码的时钟恢复方法的解码模块可以放在小容量的单片fpga中,能够自适应不同串行数据速率,降低了单台监测设备的成本并提高了集成度。

附图说明

图1为传统的解码电路及方法;

图2为本发明实施例串行数据解码的时钟恢复方法的流程图;

图3为本发明实施例中根据串行数据的时钟信号周期恢复串行数据的时钟信号的方法流程图。

具体实施方式

为了使本领域的技术人员更好地理解本发明的技术方案,下面结合附图和具体实施例对本发明作进一步的详细说明。

基于iec60044-7/8编解码规范的智能电力设备,根据其不同功能的需求,其编解码的速率可以在2.5mhz-20mhz之间选择。作为测试这些智能电力设备的监测装置,单台监测装置需要具有自适应满足各种速率的能力,这样才能方便现场工作人员使用单台监测装置调试完所有的待测智能电力设备。

如图2所示,本发明提供一种串行数据解码的时钟恢复方法,通过该方法能将不同速率下的串行数据解码大大简化,具体包括:

s1:生成鉴相时钟信号,鉴相时钟信号周期为生成串行数据的设备可设置的最短时钟周期的1/n,n为大于1的正整数;

其中,生成串行数据的设备可设置的时钟频率为2.5mhz-20mhz,则最短时钟周期为50纳秒。

s2:计算接收的串行数据中各同向信号跳变点之间的时间间隔包含的鉴相时钟信号周期的个数值并存储;

其中,同向信号跳变点可以为上升沿信号跳变点或者下降沿信号跳变点。上升沿信号跳变点为接收的串行数据从0到1跳变,下降沿信号跳变点为接收的串行数据从1到0跳变。

s3:获取存储的个数值中的最小值,根据个数值中的最小值确定串行数据的时钟信号周期;

其中,个数值中的最小值需要加入冗余误差后,再根据个数值中的最小值确定串行数据的时钟信号周期。

s4:根据串行数据的时钟信号周期恢复串行数据的时钟信号。

如图3所示,根据串行数据的时钟信号周期恢复串行数据的时钟信号的方法,包括:

s41:生成校准时钟信号,所述校准时钟信号周期为所述确定的串行数据的时钟信号周期的1/n,n为大于1的正整数。

s42:当接收的串行数据出现信号跳变点时,控制校准时钟信号的周期计数器从0开始计数,且执行下述串行数据的时钟信号生成过程:当校准时钟信号的周期计数值为0到n/2-1,且接收的串行数据没有发生跳变时,控制校准时钟信号持续输出电平1;当校准时钟信号的周期计数值为n/2到n-1,且接收的串行数据没有发生跳变时,控制校准时钟信号持续输出电平0。

其中,信号跳变点包括上升沿信号跳变点和下降沿信号跳变点。上升沿信号跳变点为接收的串行数据从0到1跳变,下降沿信号跳变点为接收的串行数据从1到0跳变。

s43:若校准时钟信号的周期计数值到n-1,控制校准时钟信号的周期计数器从0开始重新计数,返回执行步骤s42中串行数据的时钟信号生成过程。

s44:若接收的串行数据发生跳变,则从接收的串行数据发生跳变的时刻,控制校准时钟信号的周期计数器从0开始重新计数,返回执行步骤s42中串行数据的时钟信号生成过程。

对外部的串行数据进行解码需要同源的时钟才能完成,因为其他外部智能电力设备的输入数据接口只有单光纤的数据,没有传送时钟信号,所以就需要监测装置从传送过来的数据中恢复出同源的时钟。整个串行数据解码的时钟恢复方法的工作原理为:首先将接收的串行数据分为两路,一路是用于串行解码,但是需要同源的时钟来帮助解码;而另一路就是用于恢复同源时钟使用的。用恢复出的同源时钟来对接收的串行数据进行解码,解码后的数据经过串并转换变成了并行数据。该数据按照不同设备应用层规定的格式,进一步解析出数据帧头,应用层数据及数据校验方法等。解出的应用层数据根据该格式规定的数据校验方法进入数据校验模块,通常是通过crc校验或奇偶校验的方法来校验已解码的数据。最终校验过的数据可以经过电力相应算法以后进入用户界面显示。

串行数据解码的时钟恢复方法都能在单片的fpga片内实现,通过verilog编程语言来完成各模块代码,通过开发软件综合器综合为rtl级电路,最终在fpga片内布局布线并实现所有功能,现场工程师通过采用一台集成本发明方法的设备就可以调试多个智能电力设备

下面详细描述串行数据解码的过程,由于生成串行数据的设备可设置的时钟频率为2.5mhz-20mhz,因此设置一个200mhz的时钟用于鉴相,该200mhz时钟是由fpga本地的锁相环产生,与接收的串行数据被恢复的时钟属于异步时钟。

以下以接收信号为20mhz驱动时钟的情况来说明,首先接收信号被20mhz时钟驱动,如果该信号为0101……每个时钟周期都翻转,那么他的上升沿和下降沿之间的时间就是50纳秒。但实际上被传输的信号不可能是0101交替发生的,会出现持续的1或0,比如有可能是0110……或其他情况,这时候信号的上升沿和下降沿之间的时间就是100纳秒或更长时间(也都是50纳秒的整数倍)。如果我们是用200mhz时钟来鉴相,每次计数的周期是5纳秒,那么计数终值有可能是10(当信号是0101……的时候,上升沿和下降沿之间的时间为50纳秒),也可能是20(当信号是0110……的时候,上升沿和下降沿之间的时间为100纳秒),也可能是30(当信号是01110……的时候,上升沿和下降沿之间的时间为100纳秒),以此类推。不论如何,我们需要恢复的时钟是20mhz,也就是要找到最小的计数终值,因此鉴相过程是在不停的取计数终值的最小值。

具体的鉴相过程如下:在接收的串行数据从0到1跳变时,开启200mhz时钟的计数器,计算包含的200mhz时钟周期的个数值,当下一次串行接收数据从0到1跳变时,将计数终值存入寄存器中,同时清除计数器的值,重新开始计数,到下一次串行接收数据从0到1跳变时,又将计数终值存入寄存器中,同时清除计数器的值,又重新开始计数,整个鉴相过程持续不断的进行。取所有计数终值里最小的值确定接收的串行信号的最小周期,也就是接收的串行信号的驱动时钟周期。

以上所描述的情况是接收信号为20mhz驱动时钟和200mhz鉴相时钟是同源时钟或同步时钟的情况下。实际上由于硬件晶振的的差异,20mhz驱动时钟可能是19.99m,而200mhz时钟也可能是200.01mhz,这样导致的结果是计数终值不一定是整数10,有可能是9,也有可能是11,所以才把计数终值的判断条件放为一个区间:8~12。

根据接收的串行信号的驱动时钟通常为2.5mhz,5mhz,10mhz和20mhz中的其中一种,因此鉴相的计数终值根据以下区间来判断接收信号输驱动时钟频率:计数终值为8-12,对应的驱动时钟频率为20mhz;计数终值为16-24,对应的驱动时钟频率为10mhz;计数终值为32-48,对应的驱动时钟频率为5mhz;计数终值为64-96,对应的驱动时钟频率为2.5mhz。由于接收信号时钟和系统本地时钟为异步时钟,考虑到两地晶振偏差,因此计数终值引入了±20%的冗余误差。

例如接收时钟为20mhz,前面通过200mhz的时钟鉴相得出的计数终值在8-12之间,那么就按照20mhz来恢复时钟,同样用200mhz的时钟来分频恢复时钟。如果不考虑同步性,则用200mhz时钟计数,高电平持续5个时钟周期,低电平持续5个时钟周期,总共50纳秒,则可以产生200mhz同步的20mhz时钟,但这并不是与接收信号同步的。

因此恢复20mhz时钟的方法为:当接收信号沿跳变时(从0到1或者从1到0),此时200mhz开始计数,同时被恢复的时钟输出电平1,当计数到4的时候,被恢复的时钟输出电平0,当计数到9时,计数器清0,同时被恢复时钟输出电平1。

在上述过程中如果接收信号沿出现跳变,则200mhz计数器清零,并且被恢复的时钟强制输出电平1,这个优先级最高,再重复前面的恢复时钟的方法。

用200mhz时钟来产生被恢复时钟,当计数值从0-4时,此时被恢复时钟输出电平为1,持续25纳秒。接着计数值从5-9时,被恢复时钟输出电平为0,也持续25纳秒。如果不考虑接收信号时钟和200mhz本地时钟的误差,则计数值到9以后,就应该归0,然后被恢复时钟输出电平1,以此往复。但在实际情况是肯定存在偏差的,以接收信号时钟19.9mhz为例,由于比200mhz时钟分出来的20mhz时钟慢,因此计数值会先到9,此时计数值归0,同时输出电平1。随后在19.99mhz时钟下驱动的接收信号会有跳变,由于该方法中设置的跳变优先级最高,因此计数值会再次归0,同时输出电平1的时间被延长一些,这就保证了被恢复时钟的总周期延长到了和19.99mhz一样,因此恢复出了19.99mhz的接收信号时钟。

同理,如果接收信号时钟为20.1mhz,由于比200mhz时钟分出来的20mhz时钟快,因此计数值还未到9时,在20.1mhz时钟下驱动的接收信号会有跳变,由于该方法中设置的跳变优先级最高,因此计数值会提前归0,同时输出电平0的时间被缩短了一些,这就保证了被恢复时钟的总周期缩短到了和20.1mhz一样,因此恢复出了20.1mhz的接收信号时钟。

综上所述,当获得到计数终值以后,我们只是知道了接收信号时钟是20mhz,不是10mhz或者5mhz,但此时并未有将接收信号时钟恢复出来。如前所述,因为晶振存在误差,假设被恢复的时钟是19.9m,那就需要被恢复的时钟与接收信号的上升沿或下降沿对齐,因此就有前面的描述:当接收信号跳变(上升沿或下降沿)时,我们将被恢复时钟的计数值归0(注意:此处的计数值和前面的计数终值是不同概念,前面的计数终值是用于鉴相,用于确定串行数据的驱动时钟频率是20mhz、10mhz、5mhz还是2.5mhz。而此处的计数值是用于产生恢复的时钟,校准恢复的时钟)。

以上过程需要说明三点:1.接收信号沿的跳变(从0到1或从1到0)是由于其驱动时钟的上升沿触发的,因此这个时间点就是被恢复时钟的上升沿。2.计数值是从0到9,总共10个时钟周期,因此到9的时候就自动清零。3.接收信号跳变触发的优先级最高,这是由于以下原因:如果接收信号时钟快于fpga本地时钟,则本地时钟计数不到9的时候就会出现归零并拉高被恢复时钟,这就实现了被恢复时钟与接收信号时钟的同步。如果接收信号时钟慢于fpga本地时钟,则本地时钟会先计数到9,此时被恢复时钟提前拉高了,但是由于接收信号跳变沿触发的优先级最高,随后来的接收信号跳变会又让计数器做一次清0,这就保证了两个时钟之间不会产生累计误差,也就是实现了被恢复时钟与接收信号时钟的同步。所以,不管是接收信号时钟和本地时钟哪个速率更快,都会成功恢复出同步的时钟。

同样,对于10mhz,5mhz和2.5mhz的时钟的计数总值分别是20,40和80,在10,20和40时输出低电平。

至此,一次时钟恢复的过程结束,随后进入后续模块进行数据校验,如果时钟恢复失败,则采集到的数据必定有误,因此会造成校验失败,则状态就会跳转到初始状态重新开始时钟恢复。

本发明实施例还提供了一种串行数据解码的时钟恢复系统,与串行数据解码的时钟恢复方法相对应,包括:

生成模块,用于生成鉴相时钟信号,所述鉴相时钟信号周期为生成串行数据的设备可设置的最短时钟周期的1/n,n为大于1的正整数;

计算模块,用于计算接收的串行数据中各同向信号跳变点之间的时间间隔包含的鉴相时钟信号周期的个数值并存储;

获取模块,用于获取存储的个数值中的最小值;

加入模块,用于在存储的个数值中的最小值中加入冗余误差。

确定模块,根据个数值中的最小值确定串行数据的时钟信号周期;

恢复模块,根据串行数据的时钟信号周期恢复串行数据的时钟信号。

通过上述实施方式,该串行数据解码的时钟恢复方法及系统可实现对2.5mhz-20mhz的串行数据进行时钟恢复,然后用同一条流水线的模块来进行解码及后续数据处理。采用该方法的解码模块可以放在小容量的单片fpga中,包含该解码模块的监测设备,满足相关行业标准的要求,能够帮助现场工作人员简化调试过程,并获得很好的用户体验。

以上仅是本发明的优选实施方式,应当指出的是,上述优选实施方式不应视为对本发明的限制,本发明的保护范围应当以权利要求所限定的范围为准。对于本技术领域的普通技术人员来说,在不脱离本发明的精神和范围内,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1