基于FPGA的串行信号时钟同步方法、串转并方法及装置转让专利

申请号 : CN201710568619.6

文献号 : CN109254941B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李冰清杨艺杨坤

申请人 : 凌云光技术集团有限责任公司

摘要 :

本申请实施例公开一种基于FPGA的串行信号时钟同步方法,包括以下步骤:在高频时钟下,对从外部传入的第一串行信号进行过采样,得到第一采样信号;以所述高频时钟为写时钟,将循环计数器的计数值为中间值时的第一采样信号写入FIFO存储器;以本地时钟为读时钟,将写入FIFO存储器的信号从FIFO存储器中读出,得到同步到本地时钟域下的第二串行信号;其中,所述高频时钟是所述本地时钟的至少三倍;所述循环计数器的循环周期T与所述高频时钟的倍数相同。上述方案中的时钟同步方法,能够有效消除外部设备与FPGA之间进行通信时,串行信号在传输过程中引入的边沿抖动,避免在边沿处寄存数据带来的风险,进而经过移位寄存后得到正确的并行信号。

权利要求 :

1.一种基于FPGA的串行信号时钟同步方法,其特征在于,包括以下步骤:在高频时钟下,对从外部传入的第一串行信号进行过采样,得到第一采样信号;

以所述高频时钟为写时钟,将循环计数器的计数值为中间值时的第一采样信号写入FIFO存储器;

以本地时钟为读时钟,将写入FIFO存储器的信号从FIFO存储器中读出,得到同步到本地时钟域下的第二串行信号;

其中,所述高频时钟是所述本地时钟的至少三倍;所述循环计数器的循环周期T与所述高频时钟的倍数相同。

2.根据权利要求1所述的基于FPGA的串行信号时钟同步方法,其特征在于,所述得到第一采样信号的步骤之后,还包括:如果所述第一采样信号发生跳变,复位所述循环计数器。

3.根据权利要求2所述的基于FPGA的串行信号时钟同步方法,其特征在于,所述如果所述第一采样信号发生跳变,复位所述循环计数器的步骤之前,还包括:在所述高频时钟下对所述第一采样信号进行边沿检测,得到检沿信号;

根据所述检沿信号,判断所述第一采样信号是否发生跳变。

4.根据权利要求1所述的基于FPGA的串行信号时钟同步方法,其特征在于,以所述高频时钟为写时钟,将循环计数器的计数值为中间值时的第一采样信号写入FIFO存储器的步骤,包括:如果所述循环计数器的计数值为中间值,在所述高频时钟下寄存所述第一采样信号,得到第三串行信号;

以所述高频时钟为写时钟,将所述第三串行信号写入FIFO存储器。

5.根据权利要求1所述的基于FPGA的串行信号时钟同步方法,其特征在于,所述在高频时钟下,对从外部传入的第一串行信号进行过采样,得到第一采样信号的步骤包括:在高频时钟下,将所述第一串行信号延迟两个高频时钟周期进行寄存,得到第一采样信号。

6.一种基于FPGA的串转并方法,其特征在于,包括以下步骤:在高频时钟下,对从外部传入的第一串行信号进行过采样,得到第一采样信号;

以所述高频时钟为写时钟,将循环计数器的计数值为中间值时的第一采样信号写入FIFO存储器;

以本地时钟为读时钟,将写入FIFO存储器的信号从FIFO存储器中读出,得到同步到本地时钟域下的第二串行信号;

在所述本地时钟下,将所述第二串行信号移位寄存,得到并行信号;

其中,所述高频时钟是所述本地时钟的至少三倍;所述循环计数器的循环周期T与所述高频时钟的倍数相同。

7.根据权利要求6所述的基于FPGA的串转并方法,其特征在于,在所述本地时钟下,将所述第二串行信号移位寄存,得到并行信号的步骤包括:检测所述第二串行信号中的定位信号序列;

如果检测到所述定位信号序列,将所述定位信号序列的下一位作为起始位;

在本地时钟下,将以所述起始位为起点的第二串行信号移位寄存,得到并行信号。

8.一种基于FPGA的串行信号时钟同步装置,其特征在于,包括:过采样单元,用于在高频时钟下,对从外部传入的第一串行信号进行过采样,得到第一采样信号;

时钟同步单元,用于以所述高频时钟为写时钟,将循环计数器的计数值为中间值时的第一采样信号写入FIFO存储器;以及,用于以本地时钟为读时钟,将写入FIFO存储器的信号从FIFO存储器中读出,得到同步到本地时钟域下的第二串行信号;

其中,所述高频时钟是所述本地时钟的至少三倍;所述循环计数器的循环周期T与所述高频时钟的倍数相同。

9.根据权利要求8所述的基于FPGA的串行信号时钟同步装置,其特征在于,还包括与所述过采样单元连接的计数器校准单元,所述计数器校准单元用于在所述第一采样信号发生跳变时,复位所述循环计数器。

10.根据权利要求9所述的基于FPGA的串行信号时钟同步装置,其特征在于,还包括:边沿检测单元,用于对所述第一采样信号进行边沿检测,得到检沿信号;

跳变判断单元,分别与所述边沿检测单元和所述计数器校准单元连接,用于根据所述检沿信号,判断所述第一采样信号是否发生跳变。

11.根据权利要求8所述的基于FPGA的串行信号时钟同步装置,其特征在于,所述时钟同步单元包括:第一寄存单元,用于当所述计数值为中间值时,在所述高频时钟下寄存所述第一采样信号,得到第三串行信号;

写入单元,用于以所述高频时钟为写时钟,将所述第三串行信号写入FIFO存储器。

12.根据权利要求8所述的基于FPGA的串行信号时钟同步装置,其特征在于,所述过采样单元包括:第二寄存单元,在高频时钟下,将所述第一串行信号延迟两个高频时钟周期进行寄存,得到第一采样信号。

13.一种基于FPGA的串转并装置,其特征在于,包括:过采样单元,用于在高频时钟下,对从外部传入的第一串行信号进行过采样,得到第一采样信号;

时钟同步单元,用于以所述高频时钟为写时钟,将循环计数器的计数值为中间值时的第一采样信号写入FIFO存储器;以本地时钟为读时钟,将写入FIFO存储器的信号从FIFO存储器中读出,得到同步到本地时钟域下的第二串行信号;

移位寄存单元,用于在所述本地时钟下,将所述第二串行信号移位寄存,得到并行信号;

其中,所述高频时钟是所述本地时钟的至少三倍;所述循环计数器的循环周期T与所述高频时钟的倍数相同。

14.根据权利要求13所述的基于FPGA的串转并装置,其特征在于,所述移位寄存单元包括:定位信号检测单元,用于检测所述第二串行信号中的定位信号序列;

起始位确认单元,用于如果检测到所述定位信号序列,将所述定位信号序列的下一位作为起始位;

移位寄存子单元,用于在本地时钟下,将以所述起始位为起点的第二串行信号移位寄存,得到并行信号。

说明书 :

基于FPGA的串行信号时钟同步方法、串转并方法及装置

技术领域

[0001] 本申请涉及基于FPGA的通信领域,尤其涉及一种基于FPGA的串行信号时钟同步方法。此外,本申请还涉及基于FPGA的串行信号转并行信号的方法,基于FPGA的串行信号时钟同步装置以及串转并装置。

背景技术

[0002] 采集卡可以与相机等外部设备通信,并接收由相机等外部设备发来的图片等数据。FPGA(Field Programmable Gate Array,现场可编程门阵列)可以通过配置来实现采集卡的功能。FPGA与相机的通信过程包括:FPGA发送配置信息给相机,相机返回各种状态信息给FPGA。该通信过程中,配置信息与状态信息都是以串行信号的形式进行传输。FPGA在接收到串行信号以后,首先要准确地将它同步到本地时钟域下,然后通过移位寄存转换成并行信号。
[0003] 现有技术中,常见的串行通信,串行信号会伴随着随路时钟一起传输,例如SPI接口(Serial Peripheral Interface,串行外设接口)。随路时钟和串行信号是同源的,在接收端只要通过一个FIFO(First Input First Output,先进先出队列),以随路时钟为写时钟,将数据写入FIFO存储器,再以本地时钟读出,就能够将串行信号同步到本地时钟域下。
[0004] 而相机等外部设备在与FPGA通信时,没有随路时钟一起传输,所以通常要在FPGA上产生一个与串行信号发送端的时钟同频的本地时钟,以本地时钟来接收外部传入的串行信号。串行信号在传输的过程中可能会受到各种干扰,导致信号跳变的边沿发生抖动,例如提前跳变。而FPGA上产生的本地时钟与串行信号发送端的时钟不是同源的,因此在对串行信号进行移位寄存的过程中,就可能导致数据出错。

发明内容

[0005] 本申请提供了一种基于FPGA的串行信号时钟同步方法及装置,以解决FPGA在接收来自外部设备的串行信号时,容易因信号跳变的边沿发生抖动而得到错误的数据的问题。
[0006] 第一方面,本申请提供了一种基于FPGA的串行信号时钟同步方法,该方法包括:
[0007] 在高频时钟下,对从外部传入的第一串行信号进行过采样,得到第一采样信号;
[0008] 以所述高频时钟为写时钟,将循环计数器的计数值为中间值时的第一采样信号写入FIFO存储器;
[0009] 以本地时钟为读时钟,将写入FIFO存储器的信号从FIFO存储器中读出,得到同步到本地时钟域下的第二串行信号;
[0010] 其中,所述高频时钟是所述本地时钟的至少三倍;所述循环计数器的循环周期T与所述高频时钟的倍数相同。
[0011] 结合第一方面,在第一方面第一种可能的实现方式中,所述得到第一采样信号的步骤之后,还包括:
[0012] 如果所述第一采样信号发生跳变,复位所述循环计数器。
[0013] 结合第一方面,在第一方面第二种可能的实现方式中,所述如果所述第一采样信号发生跳变,复位所述循环计数器的步骤之前,还包括:
[0014] 在所述高频时钟下对所述第一采样信号进行边沿检测,得到检沿信号;
[0015] 根据所述检沿信号,判断所述第一采样信号是否发生跳变。
[0016] 结合第一方面,在第一方面第三种可能的实现方式中,以所述高频时钟为写时钟,将循环计数器的计数值为中间值时的第一采样信号写入FIFO存储器的步骤,包括:
[0017] 如果所述循环计数器的计数值为中间值,在所述高频时钟下寄存所述第一采样信号,得到第三串行信号;
[0018] 以所述高频时钟为写时钟,将所述第三串行信号写入FIFO存储器。
[0019] 结合第一方面,在第一方面第四种可能的实现方式中,所述在高频时钟下,对从外部传入的第一串行信号进行过采样,得到第一采样信号的步骤包括:
[0020] 在高频时钟下,将所述第一串行信号延迟两个高频时钟周期进行寄存,得到第一采样信号。
[0021] 第二方面,本申请提供了一种基于FPGA的串转并方法,包括以下步骤:
[0022] 在高频时钟下,对从外部传入的第一串行信号进行过采样,得到第一采样信号;
[0023] 以所述高频时钟为写时钟,将循环计数器的计数值为中间值时的第一采样信号写入FIFO存储器;
[0024] 以本地时钟为读时钟,将写入FIFO存储器的信号从FIFO存储器中读出,得到同步到本地时钟域下的第二串行信号;
[0025] 在所述本地时钟下,将所述第二串行信号移位寄存,得到并行信号;
[0026] 其中,所述高频时钟是所述本地时钟的至少三倍;所述循环计数器的循环周期T与所述高频时钟的倍数相同。
[0027] 结合第二方面,在第二方面第一种可能的实现方式中,在所述本地时钟下,将所述第二串行信号移位寄存,得到并行信号的步骤包括:
[0028] 检测所述第二串行信号中的定位信号序列;
[0029] 如果检测到所述定位信号序列,将所述定位信号序列的下一位作为起始位;
[0030] 在本地时钟下,将以所述起始位为起点的第二串行信号移位寄存,得到并行信号。
[0031] 第三方面,本申请还提供了一种基于FPGA的串行信号时钟同步装置,包括:
[0032] 过采样单元,用于在高频时钟下,对从外部传入的第一串行信号进行过采样,得到第一采样信号;
[0033] 时钟同步单元,用于以所述高频时钟为写时钟,将循环计数器的计数值为中间值时的第一采样信号写入FIFO存储器;以及,用于以本地时钟为读时钟,将写入FIFO存储器的信号从FIFO存储器中读出,得到同步到本地时钟域下的第二串行信号;
[0034] 其中,所述高频时钟是所述本地时钟的至少三倍;所述循环计数器的循环周期T与所述高频时钟的倍数相同。
[0035] 第四方面,本申请还提供一种基于FPGA的串转并装置,包括:
[0036] 过采样单元,用于在高频时钟下,对从外部传入的第一串行信号进行过采样,得到第一采样信号;
[0037] 时钟同步单元,用于以所述高频时钟为写时钟,将循环计数器的计数值为中间值时的第一采样信号写入FIFO存储器;以本地时钟为读时钟,将写入FIFO存储器的信号从FIFO存储器中读出,得到同步到本地时钟域下的第二串行信号;
[0038] 移位寄存单元,用于在所述本地时钟下,将所述第二串行信号移位寄存,得到并行信号;
[0039] 其中,所述高频时钟是所述本地时钟的至少三倍;所述循环计数器的循环周期T与所述高频时钟的倍数相同。
[0040] 上述实施例中的方法,首先在高频时钟下对第一串行信号进行过采样得到第一采样信号,然后在循环计数器的计数值取中间值时,在高频时钟下对第一采样信号进行跨时钟域FIFO,从而将第一串行信号正确同步到本地同频率的时钟域下,能够有效消除外部设备与FPGA之间进行通信时,串行信号在传输过程中引入的边沿抖动,避免在边沿处寄存数据带来的风险,进而经过移位寄存得到正确的并行信号。进一步地,每当第一采样信号发生边沿跳变时,就校准计数器,从而可以避免边沿抖动产生的错误累积,正确地将第一串行信号同步到本地时钟域下。

附图说明

[0041] 为了更清楚地说明本申请的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0042] 图1为本申请的基于FPGA的串行信号时钟同步方法的第一个实施例的流程示意图;
[0043] 图2为本申请的基于FPGA的串行信号时钟同步方法的第一个实施例中S200步骤的流程示意图;
[0044] 图3为本申请的基于FPGA的串行信号时钟同步方法的第二个实施例的流程示意图;
[0045] 图4为本申请的基于FPGA的串行信号时钟同步方法的第三个实施例的流程示意图;
[0046] 图5为本申请的基于FPGA的串行信号时钟同步方法的第三个实施例中S500步骤的流程示意图;
[0047] 图6为本申请的基于FPGA的串行信号时钟同步方法的第四个实施例中对第一串行数据进行6倍过采样的示意图;
[0048] 图7为本申请的基于FPGA的串行信号时钟同步方法的第四个实施例中第一串行信号提前跳变导致部分信号丢失的示意图;
[0049] 图8为本申请的基于FPGA的串行信号时钟同步方法的第四个实施例中对正确将第一串行信号同步到本地时钟域下的示意图;
[0050] 图9为本申请的基于FPGA的串行信号时钟同步装置的其中一个实施例的结构示意图;
[0051] 图10为本申请的基于FPGA的串行信号时钟同步装置的另一个实施例的结构示意图;
[0052] 图11为本申请的基于FPGA的串转并装置的其中一个实施例的结构示意图。

具体实施方式

[0053] 下面将结合附图,对本发明的实施例进行描述。
[0054] 请参考图1,图1为本申请第一个实施例中的基于FPGA的串行信号时钟同步方法的流程示意图,该方法可以包括以下步骤:
[0055] S100在高频时钟下,对从外部传入的第一串行信号进行过采样,得到第一采样信号;
[0056] S200以所述高频时钟为写时钟,将循环计数器的计数值为中间值时的第一采样信号写入FIFO存储器;
[0057] S300以本地时钟为读时钟,将写入FIFO存储器的信号从FIFO存储器中读出,得到同步到本地时钟域下的第二串行信号;
[0058] 其中,所述高频时钟是所述本地时钟的至少三倍;所述循环计数器的循环周期T与所述高频时钟的倍数相同。
[0059] 在通信领域,采样频率高于信号最高频率的两倍,这种采样被称为过采样。在S100的步骤中,过采样的倍数可以是3倍或3倍以上。
[0060] 在S100的步骤中,在高频时钟下对第一串行信号进行了过采样,得到第一采样信号,也就是对第一串行信号重复采样了T次,第一采样信号的每个比特位中包含了T个一样的相应的第一串行信号比特位。具体地,S100的步骤可以包括:在高频时钟下,将所述第一串行信号延迟两个高频时钟周期进行寄存,得到第一采样信号。
[0061] 这是由于第一串行信号是从FPGA芯片外部输入的,来自异步时钟域,因此延迟两个高频时钟域进行寄存,也就是常说的寄存两拍,第一拍将第一串行信号同步化,同步化后的输出可能带来建立/保持时间的冲突,产生亚稳态,因此再寄存一拍,减少亚稳态带来的影响。
[0062] 在S200的步骤中,循环计数器的计数值为中间值,这里的中间值是指循环周期内,除了两端的端值以外的其他值中的任一个。例如,循环计数器的循环周期T为6,从0到5循环计数,则两端的端值分别为0和5,中间值可以是1,2,3,4中的任一个。较佳地,当T为偶数时,取一个循环周期中的第T/2个或第(T/2+1)个计数值为中间值,当T为奇数时,取一个循环周期中的第(T+1)/2个计数值为中间值。例如,循环计数器的循环周期T为6时,从0到5循环计数,则中间值较佳地取2或取3;循环计数器的循环周期T为7时,从0到6循环计数,则中间值较佳地取3。
[0063] FIFO(First In First Out)是先进先出存储器的缩写,它是一种实现数据先进先出的存储器件。
[0064] 一般地,步骤S200中的以所述高频时钟为写时钟,将循环计数器的计数值为中间值时的第一采样信号写入FIFO存储器的步骤,可以包括以下步骤:
[0065] S210如果所述循环计数器的计数值为中间值,在所述高频时钟下寄存所述第一采样信号,得到第三串行信号;
[0066] S220以所述高频时钟为写时钟,将所述第三串行信号写入FIFO存储器。
[0067] 在S210的步骤中,在高频时钟下,当计数值为中间值时,可以先对第一采样信号采样一次进行寄存,每次采样持续一个高频时钟周期,从而得到第三串行信号。然后再在S220的步骤中,以高频时钟为写时钟,将第三串行信号写入FIFO存储器。这过程中,还产生一个与第三串行信号对应的写使能信号,写使能信号只持续一个高频时钟的时钟周期,从而将第三串行信号写入FIFO存储器。
[0068] 最后在S300的步骤中,当FIFO存储器为非空的时候,就以本地时钟为读时钟,将写入FIFO存储器的信号从FIFO存储器中读出,从而得到同步到本地时钟域下的第二串行信号。
[0069] 上述实施例中的方法,通过首先在高频时钟下对第一串行信号进行过采样得到第一采样信号,再在循环计数器的计数值取中间值时,在高频时钟下对第一采样信号进行寄存得到第三串行信号,然后对第三串行信号进行跨时钟域FIFO,从而将外部的第一串行信号正确同步到本地同频率的时钟域下,能够有效消除串行信号在传输过程中引入的边沿抖动的问题,避免最终得到的并行数据出错。
[0070] 请参考图3,图3为本申请第二个实施例中的基于FPGA的串行信号时钟同步方法的流程示意图,该方法可以包括以下步骤:
[0071] S100在高频时钟下,对从外部传入的第一串行信号进行过采样,得到第一采样信号;
[0072] S400如果所述第一采样信号发生跳变,复位所述循环计数器;
[0073] S200以所述高频时钟为写时钟,将循环计数器的计数值为中间值时的第一采样信号写入FIFO存储器;
[0074] S300以本地时钟为读时钟,将写入FIFO存储器的信号从FIFO存储器中读出,得到同步到本地时钟域下的第二串行信号;
[0075] 其中,所述高频时钟是所述本地时钟的至少三倍;所述循环计数器的循环周期T与所述高频时钟的倍数相同。
[0076] S100、S200和S300的步骤可以参考第一个实施例。
[0077] 如果提前跳变等边沿抖动情况不断发生,使错误累积,那么即便采用了第一个实施例中的时钟同步方法,也仍然可能会丢失部分比特位,从而使得同步到本地时钟域下的第二串行信号出错。为此,在S400的步骤中,通过不断地对循环计数器进行复位校准,避免第一采样信号边沿抖动导致循环计数器和第一串行信号不同步,使得一个本地时钟周期内,沿提前或者延后的影响无法累计到下一个本地时钟周期,从而避免错误累积。
[0078] 具体地,S400的步骤之前还可以包括:
[0079] S401在所述高频时钟下对所述第一采样信号进行边沿检测,得到检沿信号;
[0080] S402根据所述检沿信号,判断所述第一采样信号是否发生跳变。
[0081] 在S401的步骤中,边沿检测,就是检测输入信号,或者检测FPGA内部逻辑信号的跳变,即上升沿或者下降沿的检测。
[0082] S402的步骤中,如果第一采样信号发生跳变,那么复位循环计数器,使其计数值复位为起始值;如果没有发生跳变,循环计数器继续正常计数。
[0083] 请参见图4,在第三个实施例中,提供一种基于FPGA的串行信号转并行信号的方法,包括:
[0084] S100在高频时钟下,对从外部传入的第一串行信号进行过采样,得到第一采样信号;
[0085] S200以所述高频时钟为写时钟,将循环计数器的计数值为中间值时的第一采样信号写入FIFO存储器;
[0086] S300以本地时钟为读时钟,将写入FIFO存储器的信号从FIFO存储器中读出,得到同步到本地时钟域下的第二串行信号;
[0087] S500在所述本地时钟下,将所述第二串行信号移位寄存,得到并行信号;
[0088] 其中,所述高频时钟是所述本地时钟的至少三倍;所述循环计数器的循环周期T与所述高频时钟的倍数相同。
[0089] S100至S300的步骤可参考第一个实施例。
[0090] 请参见图5,S500的步骤具体可以包括:
[0091] S510检测所述第二串行信号中的定位信号序列;
[0092] S520如果检测到所述定位信号序列,将所述定位信号序列的下一位作为起始位;
[0093] S530在本地时钟下,将以所述起始位为起点的第二串行信号移位寄存,得到并行信号。
[0094] 在S510步骤中的定位信号序列是预设的信号序列,是相机等外部设备和FPGA之间实现约定好的。将第二串行信号逐位与约定好的定位信号序列进行比对,一旦与完全对上,也就是检测到第二串行信号中的定位信号序列,就将第二串行信号中定位信号序列的下一位作为起始位,在本地时钟下,将以起始位为起点的第二串行信号移位寄存,从而得到并行信号。本实施例中的串转并的方法,可以适用在非标准协议的串行数据的接收上,无需采用通用协议来进行传输。
[0095] 请参见图6至图8,在第四个实施例中,以接收到的第一串行信号rx_si的比特速率为20MHz,需要转换成10bit位宽的并行信号为例。
[0096] 高频时钟clk2和本地时钟clk1可以通过FPGA上的锁相环产生,clk1=20MHz,6倍频的高频时钟clk2=120MHz,其中,本地时钟与第一串行信号的发送端的时钟是同频的。在高频时钟clk2下产生一个循环计数器cnt,其循环周期为6,从0到5循环计数。
[0097] 请参考图6,首先在高频时钟clk2下对第一串行信号rx_si进行延迟一个高频时钟周期进行寄存,得到rx_si_d1;再将rx_si_d1延迟一个高频时钟周期进行寄存,得到第一采样信号rx_si_d2。这样就完成了对第一串行信号的过采样,每个比特位采样了6次。
[0098] 过采样同时,循环计数器在第一采样信号rx_si_d2为上升沿处从0开始循环计数。
[0099] rx_si在理想传输条件下,每一比特位都持续了6个高频时钟clk2的时钟周期,而循环计数器cnt也是以6为周期循环计数的。这样rx_si_d2的每一比特位的起始和截止都包含了cnt=[0 1 2 3 4 5]的6个状态。
[0100] 其次,在循环计数器cnt=3的时候,也就是rx_si_d2每一比特位的中间,在clk2下,当cnt=3时的rx_si_d2进行寄存,得到第三串行信号rx_so。
[0101] 再次,以高频时钟为写时钟,将第三串行信号rx_so写入FIFO存储器。这过程中,同时产生一个与第三串行信号rx_so对应的wr_en作为fifo存储器的写使能信号,wr_en只持续一个clk2时钟周期,
[0102] 最后,当FIFO存储器为非空的时候就以clk1作为读时钟将FIFO存储器中的信号读出,得到了同步到本地时钟域下的第二串行信号。
[0103] 采用上述方法,即便传输过程中发生边沿抖动,例如沿提前跳变了,写入FIFO存储器的信号也是cnt=3时的rx_si_d2,边沿提前跳变对写入FIFO存储器的信号没有影响,从而避免了在信号边沿处寄存带来的数据丢失的风险,进而避免对串行信号进行移位寄存转换为并行信号时数据出错。
[0104] 本实施例中,如果rx_si在传输过程中发生边沿抖动,例如沿提前跳变了,那么第一采样信号rx_si_d2中当前比特位对应的cnt=[0 1 2 3 4],而下一个比特位对应的cnt=[5 0 1 2 3 4]。这种沿提前跳变的情况,如果仅发生1次或者2次,对同步到本地时钟域下的第二串行信号还不会产生影响,但是如果沿提前跳变的情况累计发生3次,如图7所示,那么此时就会出现当前比特位的cnt=[4 5 0 1 2],下一个比特位的cnt=[34 5 0 1 2],由于只在cnt=3时对rx_si_d2进行寄存,此时就会丢掉当前比特位,从而导致最终数据出错。
[0105] 请参考图8,通过检测rx_si_d2是否发生跳变,如果发生跳变,就复位循环计数器cnt,使得这种沿提前或者延后的影响无法累积,即使发生沿提前的情况,当前比特位的cnt=[0 1 2 3 4],然后cnt就因rx_si_d2跳变而复位为0,下一个比特位的cnt=[0 1 2 3 4 5],即使累积多次,cnt每次都是从0开始计数,所以不会丢掉某一个比特位,进而避免了数据出错。
[0106] 请参考图8,在高频时钟clk2下对第一采样信号进行边沿检测,具体地,通过rx_si_d1和rx_si_d2,得到检沿信号change,rx_si_d1和rx_si_d2二者都为高电平或都为低电平时,对应的检沿信号change为低电平;rx_si_d1和rx_si_d2二者其中一个为高电平,另一个为低电平时,对应的检沿信号change为高电平。当检沿信号change由高电平变成低电平时,第一采样信号rx_si_d2发生跳变。
[0107] 得到同步到本地时钟域下的第二串行信号后,还可以包括将第二串行信号进行移位寄存,转换成10bit的并行信号的步骤。具体地,相机和FPGA之间可以约定好一个10bit的定位信号序列,例如,本实施例中定位信号序列可以采用10'b10_1000_0011。将第二串行信号逐位与约定好的定位信号序列进行比对,一旦与完全对上,也就是检测到第二串行信号中的定位信号序列,就将第二串行信号中定位信号序列的下一位作为起始位,在本地时钟下,将以起始位为起点的第二串行信号移位寄存,每十个比特位一组,从而得到并行信号。
[0108] 请参考图9,在第五个实施例中,提供一种基于FPGA的串行信号时钟同步装置,包括:
[0109] 过采样单元10,用于在高频时钟下,对从外部传入的第一串行信号进行过采样,得到第一采样信号;
[0110] 时钟同步单元20,用于以所述高频时钟为写时钟,将循环计数器的计数值为中间值时的第一采样信号写入FIFO存储器;以及,用于以本地时钟为读时钟,将写入FIFO存储器的信号从FIFO存储器中读出,得到同步到本地时钟域下的第二串行信号;
[0111] 其中,所述高频时钟是所述本地时钟的至少三倍;所述循环计数器的循环周期T与所述高频时钟的倍数相同。
[0112] 串行信号时钟同步装置外的锁相环60分别与过采样单元10和时钟同步单元20连接,锁相环60用于产生本地时钟和高频时钟。
[0113] 串行信号时钟同步装置外的循环计数器70与时钟同步单元70连接,循环计数器70是在高频时钟下产生的,其循环周期T与高频时钟相对于本地时钟的倍数相同。
[0114] 上述的串行信号时钟同步装置,首先通过过采样单元10对第一串行信号进行过采样得到第一采样信号,然后时钟同步单元20获取循环计数器的计数值,对计数值取中间值时的第一采样信号进行跨时钟域FIFO,从而将第一串行信号正确同步到本地同频率的时钟域下,有效消除串行信号在传输过程中引入的边沿抖动的问题,避免最终得到的并行数据出错。
[0115] 可选地,请参见图10,串行信号时钟同步装置还包括与过采样单元10连接的计数器校准单元30,计数器校准单元30还与串行信号时钟同步装置外的循环计数器70连接,用于在所述第一采样信号发生跳变时,复位所述循环计数器70。
[0116] 如果提前跳变等边沿抖动情况不断发生,使错误累积,那么即便采用了上述的时钟同步装置,也仍然可能会丢失部分比特位,从而使得同步到本地时钟域下的第二串行信号出错。为此,通过增加计数器校准单元30,不断地对循环计数器70进行复位校准,避免第一采样信号边沿抖动导致循环计数器70和第一串行信号不同步,使得一个本地时钟周期内,沿提前或者延后的影响无法累计到下一个本地时钟周期,从而避免错误累积。
[0117] 可选地,串行信号时钟同步装置还包括:
[0118] 边沿检测单元,用于对所述第一采样信号进行边沿检测,得到检沿信号;
[0119] 跳变判断单元,分别与所述边沿检测单元和所述计数器校准单元连接,用于根据所述检沿信号,判断所述第一采样信号是否发生跳变。
[0120] 上述的边沿检测单元分别与过采样单元10和跳变判断单元连接,跳变判断单元又与计数器校准单元30连接。
[0121] 可选地,时钟同步单元包括:
[0122] 第一寄存单元,用于当所述计数值为中间值时,在所述高频时钟下寄存所述第一采样信号,得到第三串行信号;
[0123] 写入单元,用于以所述高频时钟为写时钟,将所述第三串行信号写入FIFO存储器。
[0124] 可选地,所述过采样单元10包括:第二寄存单元,在高频时钟下,将所述第一串行信号延迟两个高频时钟周期进行寄存,得到第一采样信号。
[0125] 请参见图11,在第六个实施例中,提供一种基于FPGA的串转并装置,包括:
[0126] 过采样单元10,用于在高频时钟下,对从外部传入的第一串行信号进行过采样,得到第一采样信号;
[0127] 时钟同步单元20,用于以所述高频时钟为写时钟,将循环计数器的计数值为中间值时的第一采样信号写入FIFO存储器;以本地时钟为读时钟,将写入FIFO存储器的信号从FIFO存储器中读出,得到同步到本地时钟域下的第二串行信号;
[0128] 移位寄存单元40,用于在所述本地时钟下,将所述第二串行信号移位寄存,得到并行信号;
[0129] 其中,所述高频时钟是所述本地时钟的至少三倍;所述循环计数器70的循环周期T与所述高频时钟的倍数相同。
[0130] 可选地,所述移位寄存单元40包括:
[0131] 定位信号检测单元,用于检测所述第二串行信号中的定位信号序列;
[0132] 起始位确认单元,用于如果检测到所述定位信号序列,将所述定位信号序列的下一位作为起始位;
[0133] 移位寄存子单元,用于在本地时钟下,将以所述起始位为起点的第二串行信号移位寄存,得到并行信号。
[0134] 具体实现中,本发明还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时可包括本发明提供的串行信号时钟同步方法的各实施例中的部分或全部步骤。所述的存储介质可为磁碟、光盘、只读存储记忆体(英文:read-only memory,简称:ROM)或随机存储记忆体(英文:random access memory,简称:RAM)等。
[0135] 本领域的技术人员可以清楚地了解到本发明实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
[0136] 本说明书中各个实施例之间相同相似的部分互相参见即可。以上所述的本发明实施方式并不构成对本发明保护范围的限定。