CN101753288A - 基于过采样的时钟数据恢复和串并转换电路 - Google Patents
基于过采样的时钟数据恢复和串并转换电路 Download PDFInfo
- Publication number
- CN101753288A CN101753288A CN200910219463A CN200910219463A CN101753288A CN 101753288 A CN101753288 A CN 101753288A CN 200910219463 A CN200910219463 A CN 200910219463A CN 200910219463 A CN200910219463 A CN 200910219463A CN 101753288 A CN101753288 A CN 101753288A
- Authority
- CN
- China
- Prior art keywords
- data
- clock
- module
- ckm
- recovery
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
一种用于高速串行收发器接收端的基于过采样的时钟数据恢复和串并转换电路,包括锁相环模块、数据空间过采样模块、边沿检测与数据恢复模块、判决模块、时钟恢复模块、时钟分频模块和SerDes模块。数据空间过采样模块利用锁相环模块输出的16相等间隔时钟对连续3个字节的24位数据进行采样,存放在16组、每组24个寄存器中。相邻两组寄存器的相应位进行异或以完成边沿检测,检测结果分组相加,那么距离数值最大的一组数据对应的采样时钟最远的时钟可作为恢复时钟,由该时钟采样的数据可作为恢复数据,将该时钟8分频后对恢复数据分字节同步,即完成时钟数据恢复和串并转换。本发明结构清晰、性能较高,工作可靠。
Description
技术领域
本发明涉及一种高速收发器的时钟数据恢复电路,特别是涉及一种用于高速串行收发器中的接收端的基于过采样的时钟数据恢复和串并转换电路,属于通信专用集成电路设计技术领域。
背景技术
高速串行数据收发器在高速双向数据传输系统,如千兆以太网、光纤传输网络、高速网络路由和无线基站等中有着广泛应用,具体表现在为电路板之间、电路板和处理器之间、板上的处理器和外设之间以及芯片和背板之间的通信提供高速接口。电信业务和互联网业务的迅猛发展进一步加大了对高速高性能收发器芯片的需求。
然而,在收发器的接收端接收并放大的数据不同步且含有噪声。为了保证对数据后续处理的同步,时钟等时序信息必须从数据中提取出来,而且必须对数据进行“重定时”以消除传输过程中积累的抖动(噪声)。这一时钟提取和数据重定时的过程就称为“时钟数据恢复”(CDR,Clock and Data Recovery),同时为了便于后续处理,往往需要对数据进行串并转换。
为了进行同步操作,比如对随机数据进行解复用和重定时,接收器必须产生时钟。时钟恢复电路通过对数据进行检测产生周期性的时钟,并由该时钟对数据进行重定时。时钟恢复电路产生的时钟必须满足三个重要条件:(1)时钟的频率必须与数据速率一致、或者与解复用后的数据速率一致;(2)时钟必须与数据有一个确定的相位关系,从而保证对数据的采样在最佳采样点进行,确切地说,时钟沿应与每个数据脉冲的中心对齐,这样采样的位置距离相邻的前一个和后一个数据跳变沿都最远,于是相对于抖动和其他的时序不确定性而言就提供了最大的裕度;(3)因为时钟的抖动是数据抖动的主要“贡献者”,因此时钟的抖动必须足够小。这三条原则是CDR电路设计的基础。
CDR电路的设计,经历了由最初的仅仅采用锁相环和判决电路的简单CDR电路、以及基于锁相环(PLL,Phase Locked Loop)和压控振荡器(VCO,VoltageControlled Oscillator)由粗调环路和细调环路构成的双环CDR结构,到目前的新双环CDR结构,该电路仍然是基于PLL/VCO的,但这里的PLL/VCO单独构成一个环路,只负责向具体完成时钟数据恢复的第二个环路提供一系列不同相位的参考时钟,并不直接参与时钟数据恢复工作,由于若由PLL/VCO环路提供任意相位的参考时钟,不仅导致PLL/VCO环路的结构复杂、功耗加大,同时也会加剧时钟数据恢复环路中控制电路的规模和复杂度,因此应由第二个环路根据鉴相结果对不同相位的时钟进行某种操作,如插值、选择等,生成恰当相位的时钟。
目前,在新双环CDR电路设计中,时钟产生工作是这样完成的:
参照图1,时钟恢复的完成首先选择一对相邻相位的时钟来定义插值的相位间隔,相邻的时钟相位呈正交关系。相位插值的结果是输出一个与输入数据相位对齐的参考时钟ReCk,插值操作可以在数字域或模拟域完成。模拟方法由于可以提供连续的相位插值,因而具有较好的抖动性能,而数字方法则存在量化误差。为了覆盖360°的插值范围,整个360°的插值范围被离散地划分为4个象限,参照图2(A),每个象限的插值范围是90°。当插值向量从一个象限转移到另一个象限时,一个时钟就被它的互补时钟所代替。为了降低抖动和相位不连续性,这种替换必须在不影响环路的情况下完成,可以利用一个象限边界控制单元来保证时钟的替换仅发生在时钟混频权重为0的时候。这样就实现了时钟相位象限的平滑转移。然而由于各种负面因素的存在,比如相位边界控制单元的偏移,会使得时钟替换并不是发生在混频权重精确为0的时刻。这样就会产生如图2(B)所示的相位阶跃,从而导致抖动性能的下降。同时,此类电路还需要额外电路单独完成数据的串并转换工作。
发明内容
本发明的目的是:针对现有问题,提出一种结构简单、时钟数据恢复与串并转换同步完成的基于过采样的时钟数据恢复和串并转换电路。
本发明的目的是这样实现的:一种用于高速串行收发器接收端的基于过采样的时钟数据恢复和串并转换电路,包括一个锁相环模块(U0)、一个数据空间过采样模块(U1)、一个边沿检测与数据恢复模块(U2)、一个判决模块(U3)、一个时钟恢复模块(U4)、一个时钟分频模块(U5)和一个SerDes模块(U6);
数据空间过采样模块(U1)利用锁相环模块(U0)输出的16相等间隔的、与输入数据同频的时钟cki,i=1,2,...,16对串行输入的连续3个字节的24位数据进行采样,得到16×24个数据cki_bj,i=1,2,...,16,j=1,2,...,24,存放在16组、每组24个寄存器中;
边沿检测与数据恢复模块(U2)将采样数据按照相邻两组寄存器的相应位进行异或以完成边沿检测,其中第一组数据ck1_bj,j=1,2,...,24要与上一次采样数据的最后一组的相应位进行异或运算,最后一组数据ck16_bj,j=1,2,...,24需要保留至下一轮采样并在下一轮运算中表示为ck0_bj,j=1,2,...,24;异或运算的结果有16×24个,表示为cki_i+1_dj,i=0,1,2,...,15,j=1,2,...,24;
判决模块(U3)将从边沿检测与数据恢复模块(U2)送入的16×24个异或结果分组相加,得到结果表示为cntk,k=1,2,...,16;对16个加法运算结果cntk,k=1,2,...,16进行比较,选出数值最大的一个cntk对应的k值送入时钟恢复模块(U4);
时钟恢复模块(U4)按照(k+8)%16=m的原则从输入的16相等间隔的时钟cki,i=1,2,...,16中选择出ckm,此即为最佳采样时钟,可作为恢复时钟;恢复时钟ckm被送入时钟分频模块(U5)和边沿检测与数据恢复模块(U2);边沿检测与数据恢复模块(U2)将由ckm采样的数据ckm_bj,m=1,2,...,16,j=1,2,...,24作为恢复数据送入串并转换SerDes模块(U6);
时钟分频模块(U5)将时钟ckm进行8分频,并由该分频后时钟在串并转换SerDes模块(U6)中对恢复数据ckm_bj,m=1,2,...,16,j=1,2,...,24分字节进行同步得到3个字节的数据ckm_b[1:8]、ckm_b[9:16]、ckm_b[17:24],并依次送出,均表示为ckm_b[1:8],此即为并行恢复数据。
这样就完成了时钟数据恢复和串并转换工作,本发明在完成数据重定时的过程中,因为空间过采样电路采用了16相时钟进行采样,那么相位的调整步伐可以达到数据周期的1/16,满足数据重定时的精度要求。本发明结构清晰、且时钟数据恢复与串并转换可以同步完成,从而减小了电路复杂度,缓解了控制电路的压力,提升了电路性能,保证了电路的可靠工作。
附图说明
图1是传统的时钟恢复系统框图;
图2(A)、(B)分别是模拟相位插值和象限转移时的相位不连续性示意图;
图3是本发明的电路模块图。
具体实施方式
下面结合附图具体介绍本发明所采用的技术方案和工作原理。
一种用于高速串行收发器接收端的基于过采样的时钟数据恢复和串并转换电路,包括一个锁相环模块U0、一个数据空间过采样模块U1、一个边沿检测与数据恢复模块U2、一个判决模块U3、一个时钟恢复模块U4、一个时钟分频模块U5和一个SerDes模块U6;
首先说明电路各模块的接口信号。本发明的电路信号流图如图3所示。其模块输入输出接口说明如表1所示;数据空间过采样模块(U1)输入输出接口说明如表2所示;边沿检测与数据恢复模块(U2)的输入输出接口说明如表3所示;判决模块(U3)的输入输出接口说明如表4所示;时钟恢复模块(U4)的输入输出接口说明如表5所示;时钟分频模块(U5)的输入输出接口说明如表6所示;串并转换SerDes模块(U6)的输入输出接口说明如表7所示。
表1,模块接口信号说明
信号名称 | 信号说明 | 含义 |
ck[1:16] | IN | 输入的16相、等相位间隔的采样时钟。 |
data | IN | 串行输入数据。 |
rst | IN | 全局复位信号。 |
ckm | OUT | 恢复时钟。 |
ckm_b[1:8] | OUT | 串并转换后的8位并行数据。 |
表2,数据空间过采样模块(U1)接口信号说明
信号名称 | 信号说明 | 含义 |
ck[1:16] | IN | 输入的16相、等相位间隔的采样时钟。 |
data | IN | 串行输入数据。 |
信号名称 | 信号说明 | 含义 |
cki_bj,i=1,2,...,16,j=1,2,...,24 | OUT | 过采样电路利用时钟ck[1:16]对连续输入的3个字节的24位数据进行采样的结果。 |
表3,边沿检测与数据恢复模块(U2)的接口信号说明
信号名称 | 信号说明 | 含义 |
cki_bj,i=1,2,...,16,j=1,2,...,24 | IN | 过采样电路利用时钟ck[1:16]对连续输入的3个字节的24位数据进行采样的结果。 |
ckm | IN | 输入的恢复时钟。 |
ckm_bj,j=1,2,...,24 | OUT | 恢复后数据。 |
cki_i+1_dj,i=0,1,2,…,15,j=1,2,…,24 | OUT | 相邻两组采样寄存器的相应位进行边沿检测的结果 |
表4,判决模块(U3)的接口信号说明
信号名称 | 信号说明 | 含义 |
cki_i+1_dj,i=0,1,2,…,15,j=1,2,…,24 | IN | 相邻两组采样寄存器的相应位进行边沿检测的结果 |
k | OUT | 距离数据边沿最近的采样时钟的编号,取值范围1~16。 |
表5,时钟恢复模块(U4)的接口信号说明
信号名称 | 信号说明 | 含义 |
ck[1:16] | IN | 输入的16相、等相位间隔的采样时钟。 |
k | IN | 距离数据边沿最近的采样时钟的编号,取值范围1~16。 |
ckm | OUT | 根据k值按照(k+8)%16计算得出的最佳采样时钟,即恢复时钟。 |
表6,时钟分频模块(U5)的接口信号说明
信号名称 | 信号说明 | 含义 |
ckm | IN | 恢复时钟。 |
ckm_div8 | OUT | 对时钟ckm进行8分频后的时钟。 |
表7,串并转换SerDes模块(U6)的接口信号说明
信号名称 | 信号说明 | 含义 |
ckm_div8 | IN | 对时钟ckm进行8分频后的时钟。 |
ckm_bj,j=1,2,...,24 | IN | 恢复后数据。 |
ckm_b[1:8] | OUT | 恢复后的并行数据。 |
参照图3,数据空间过采样模块U1利用锁相环模块U0输出的16相等间隔的、与输入数据同频的时钟cki,i=1,2,...,16对连续3个字节的24位数据进行采样,得到16×24个数据cki_bj,i=1,2,...,16,j=1,2,...,24,存放在16组、每组24个寄存器中。
边沿检测与数据恢复模块U2将采样数据按照相邻两组寄存器的相应位进行异或以完成边沿检测,其中第一组数据ck1_bj,j=1,2,...,24要与上一次采样数据的最后一组的相应位进行异或运算,最后一组数据ck16_bj,j=1,2,...,24需要保留至下一轮采样并在下一轮运算中表示为ck0_bj,j=1,2,...,24;异或运算的结果有16×24个,表示为cki_i+1_dj,i=0,1,2,...,15,j=1,2,...,24;具体运算公式为:
判决模块U3将从边沿检测与数据恢复模块U2送入的16×24个异或结果分组相加,得到结果表示为cntk,k=1,2,...,16;具体运算表示为:
cnt1=ck0_1_d1+ck1_2_d1+ck2_3_d1+ck3_4_d1+
ck4_5_d1+ck5_6_d1+ck6_7_d1+ck7_8_d1+
ck8_9_d1+ck9_10_d1+ck10_11_d1+ck11_12_d1+
ck12_13_d1+ck13_14_d1+ck14_15_d1+ck15_16_d1;
cnt2=ck0_1_d2+ck1_2_d2+ck2_3_d2+ck3_4_d2+
ck4_5_d2+ck5_6_d2+ck6_7_d2+ck7_8_d2+
ck8_9_d2+ck9_10_d2+ck10_11_d2+ck11_12_d2+
ck12_13_d2+ck13_14_d2+ck14_15_d2+ck15_16_d2;
cnt3=ck0_1_d3+ck1_2_d3+ck2_3_d3+ck3_4_d3+
ck4_5_d3+ck5_6_d3+ck6_7_d3+ck7_8_d3+
ck8_9_d3+ck9_10_d3+ck10_11_d3+ck11_12_d3+
ck12_13_d3+ck13_14_d3+ck14_15_d3+ck15_16_d3;
cnt4=ck0_1_d4+ck1_2_d4+ck2_3_d4+ck3_4_d4+
ck4_5_d4+ck5_6_d4+ck6_7_d4+ck7_8_d4+
ck8_9_d4+ck9_10_d4+ck10_11_d4+ck11_12_d4+
ck12_13_d4+ck13_14_d4+ck14_15_d4+ck15_16_d4;
cnt5=ck0_1_d5+ck1_2_d5+ck2_3_d5+ck3_4_d5+
ck4_5_d5+ck5_6_d5+ck6_7_d5+ck7_8_d5+
ck8_9_d5+ck9_10_d5+ck10_11_d5+ck11_12_d5+
ck12_13_d5+ck13_14_d5+ck14_15_d5+ck15_16_d5;
cnt6=ck0_1_d6+ck1_2_d6+ck2_3_d6+ck3_4_d6+
ck4_5_d6+ck5_6_d6+ck6_7_d6+ck7_8_d6+
ck8_9_d6+ck9_10_d6+ck10_11_d6+ck11_12_d6+
ck12_13_d6+ck13_14_d6+ck14_15_d6+ck15_16_d6;
cnt7=ck0_1_d7+ck1_2_d7+ck2_3_d7+ck3_4_d7+
ck4_5_d7+ck5_6_d7+ck6_7_d7+ck7_8_d7+
ck8_9_d7+ck9_10_d7+ck10_11_d7+ck11_12_d7+
ck12_13_d7+ck13_14_d7+ck14_15_d7+ck15_16_d7;
cnt8=ck0_1_d8+ck1_2_d8+ck2_3_d8+ck3_4_d8+
ck4_5_d8+ck5_6_d8+ck6_7_d8+ck7_8_d8+
ck8_9_d8+ck9_10_d8+ck10_11_d8+ck11_12_d8+
ck12_13_d8+ck13_14_d8+ck14_15_d8+ck15_16_d8;
cnt9=ck0_1_d9+ck1_2_d9+ck2_3_d9+ck3_4_d9+
ck4_5_d9+ck5_6_d9+ck6_7_d9+ck7_8_d9+
ck8_9_d9+ck9_10_d9+ck10_11_d9+ck11_12_d9+
ck12_13_d9+ck13_14_d9+ck14_15_d9+ck15_16_d9;
cnt10=ck0_1_d10+ck1_2_d10+ck2_3_d10+ck3_4_d10+
ck4_5_d10+ck5_6_d10+ck6_7_d10+ck7_8_d10+
ck8_9_d10+ck9_10_d10+ck10_11_d10+ck11_12_d10+
ck12_13_d10+ck13_14_d10+ck14_15_d10+ck15_16_d10;
cnt11=ck0_1_d11+ck1_2_d11+ck2_3_d11+ck3_4_d11+
ck4_5_d11+ck5_6_d11+ck6_7_d11+ck7_8_d11+
ck8_9_d11+ck9_10_d11+ck10_11_d11+ck11_12_d11+
ck12_13_d11+ck13_14_d11+ck14_15_d11+ck15_16_d11;
cnt12=ck0_1_d12+ck1_2_d12+ck2_3_d12+ck3_4_d12+
ck4_5_d12+ck5_6_d12+ck6_7_d12+ck7_8_d12+
ck8_9_d12+ck9_10_d12+ck10_11_d12+ck11_12_d12+
ck12_13_d12+ck13_14_d12+ck14_15_d12+ck15_16_d12;
cnt13=ck0_1_d13+ck1_2_d13+ck2_3_d13+ck3_4_d13+
ck4_5_d13+ck5_6_d13+ck6_7_d13+ck7_8_d13+
ck8_9_d13+ck9_10_d13+ck10_11_d13+ck11_12_d13+
ck12_13_d13+ck13_14_d13+ck14_15_d13+ck15_16_d13;
cnt14=ck0_1_d14+ck1_2_d14+ck2_3_d14+ck3_4_d14+
ck4_5_d14+ck5_6_d14+ck6_7_d14+ck7_8_d14+
ck8_9_d14+ck9_10_d14+ck10_11_d14+ck11_12_d14+
ck12_13_d14+ck13_14_d14+ck14_15_d14+ck15_16_d14;
cnt15=ck0_1_d15+ck1_2_d15+ck2_3_d15+ck3_4_d15+
ck4_5_d15+ck5_6_d15+ck6_7_d15+ck7_8_d15+
ck8_9_d15+ck9_10_d15+ck10_11_d15+ck11_12_d15+
ck12_13_d15+ck13_14_d15+ck14_15_d15+ck15_16_d15;
cnt16=ck0_1_d16+ck1_2_d16+ck2_3_d16+ck3_4_d16+
ck4_5_d16+ck5_6_d16+ck6_7_d16+ck7_8_d16+
ck8_9_d16+ck9_10_d16+ck10_11_d16+ck11_12_d16+
ck12_13_d16+ck13_14_d16+ck14_15_d16+ck15_16_d16;
对16个加法运算结果cntk,k=1,2,...,16进行比较,选出数值最大的一个cntk对应的k值送入时钟恢复模块U4;
时钟恢复模块U4按照(k+8)%16=m的原则从输入的16相等间隔的时钟cki,i=1,2,...,16中选择出ckm,此即为最佳采样时钟,可作为恢复时钟;恢复时钟ckm被送入时钟分频模块U5和边沿检测与数据恢复模块U2;边沿检测与数据恢复模块U2将由ckm采样的数据ckm_bj,m=1,2,...,16,j=1,2,...,24作为恢复数据送入串并转换SerDes模块U6;
时钟分频模块U5将时钟ckm进行8分频,并由该分频后时钟在串并转换SerDes模块U6中对恢复数据ckm_bj,m=1,2,...,16,j=1,2,...,24分字节进行同步得到3个字节的数据ckm_b[1:8]、ckm_b[9:16]、ckm_b[17:24],并依次送出,一次送出8位数据,均表示为ckm_b[1:8],此即为并行恢复数据。
传统的硬件电路设计通常采用电路图方式来详细描述电路的设计结构。用电路图方式描述硬件电路的结构是硬件设计的第二代设计工具,随着科学技术的迅猛发展,硬件描述语言(HDL)已经成为第三代硬件设计工具。所以该电路采用verilog硬件描述语言加以实施。
电路的Verilog语言描述:
module CDR(ck1,ck2,ck3,ck4,ck5,ck6,ck7,ck8,ck9,ck10,ck11,ck12,ck13,ck14,ck15,ck16,rst,data,ckm,ckm_b);
//the definitions of basic I/O ports
input ck1,ck2,ck3,ck4,ck5,ck6,ck7,ck8,ck9,ck10,ck11,ck12,ck13,ck14,ck15,ck16,rst,data;
output ckm;
output reg[7:0]ckm_b;
reg[23:0]
ck1_b,ck2_b,ck3_b,ck4_b,ck5_b,ck6_b,ck7_b,ck8_b,ck9_b,ck10_b,ck11_b,ck12_b,ck13_b,ck14_b,ck15_b,ck16_b;
reg[23:0]ck1_b_tmp,ck2_b_tmp,ck3_b_tmp,ck4_b_tmp,ck5_b_tmp,ck6_b_tmp,ck7_b_tmp,ck8_b_tmp,ck9_b_tmp,ck10_b_tmp,ck11_b_tmp,ck12_b_tmp,ck13_b_tmp,ck14_b_tmp,ck15_b_tmp,ck16_b_tmp;
reg[4:0]cnt_tier;
reg[23:0]n_buffer;
reg[3:0]state;
//complete the sampling of input serial data with 16-phase clock
always@(posedge ck1 or negedge rst)
if(!rst)
ck1_b<=24’h000000;
else
ck1_b<={ck1_b[22:0],data};
always@(posedge ck2 or negedge rst)
if(!rst)
ck2_b<=24’h000000;
else
ck2_b<={ck2_b[22:0],data};
always@(posedge ck3 or negedge rst)
if(!rst)
ck3_b<=24’h000000;
else
ck3_b<={ck3_b[22:0],data};
always@(posedge ck4 or negedge rst)
if(!rst)
ck4_b<=24’h000000;
else
ck4_b<={ck4_b[22:0],data};
always@(posedge ck5 or negedge rst)
if(!rst)
ck5_b<=24’h000000;
else
ck5_b<={ck5_b[22:0],data};
always@(posedge ck6 or negedge rst)
if(!rst)
ck6_b<=24’h000000;
else
ck6_b<={ck6_b[22:0],data};
always@(posedge ck7 or negedge rst)
if(!rst)
ck7_b<=24’h000000;
else
ck7_b<={ck7_b[22:0],data};
always@(posedge ck8 or negedge rst)
if(!rst)
ck8_b<=24’h000000;
else
ck8_b<={ck8_b[22:0],data};
always@(posedge ck9 or negedge rst)
if(!rst)
ck9_b<=24’h000000;
else
ck9_b<={ck9_b[22:0],data};
always@(posedge ck10 or negedge rst)
if(!rst)
ck10_b<=24’h000000;
else
ck10_b<={ck10_b[22:0],data};
always@(posedge ck11 or negedge rst)
if(!rst)
ck11_b<=24’h000000;
else
ck11_b<={ck11_b[22:0],data};
always@(posedge ck12 or negedge rst)
if(!rst)
ck12_b<=24’h000000;
else
ck12_b<={ck12_b[22:0],data};
always@(posedge ck13 or negedge rst)
if(!rst)
ck13_b<=24’h000000;
else
ck13_b<={ck13_b[22:0],data};
always@(posedge ck14 or negedge rst)
if(!rst)
ck14_b<=24’h000000;
else
ck14_b<={ck14_b[22:0],data};
always@(posedge ck15 or negedge rst)
if(!rst)
ck15_b<=24’h000000;
else
ck15_b<={ck15_b[22:0],data};
always@(posedge ck16 or negedge rst)
if(!rst)
ck16_b<=24’h000000;
else
ck16_b<={ck16_b[22:0],data};
//
always@(posedge ckm or negedge rst)
if(!rst)
begin
cnt_tier<=5’b00000;
n_buffer<=24’h000000;
end
else if(cnt_tier==5’d23)
begin
cnt_tier<=5’b00000;
n_buffer<=ck16_b;
end
else cnt_tier<=cnt_tier+5’b1;
always@(posedge ckm or negedge rst)
if(!rst)
begin
ck1_b_tmp<=24’h000000;
ck2_b_tmp<=24’h000000;
ck3_b_tmp<=24’h000000;
ck4_b_tmp<=24’h000000;
ck5_b_tmp<=24’h000000;
ck6_b_tmp<=24’h000000;
ck7_b_tmp<=24’h000000;
ck8_b_tmp<=24’h000000;
ck9_b_tmp<=24’h000000;
ck10_b_tmp<=24’h000000;
ck11_b_tmp<=24’h000000;
ck12_b_tmp<=24’h000000;
ck13_b_tmp<=24’h000000;
ck14_b_tmp<=24’h000000;
ck15_b_tmp<=24’h000000;
ck16_b_tmp<=24’h000000;
end
else if(cnt_tier==5’d0)
begin
ck1_b_tmp<=ck1_b;
ck2_b_tmp<=ck2_b;
ck3_b_tmp<=ck3_b;
ck4_b_tmp<=ck4_b;
ck5_b_tmp<=ck5_b;
ck6_b_tmp<=ck6_b;
ck7_b_tmp<=ck7_b;
ck8_b_tmp<=ck8_b;
ck9_b_tmp<=ck9_b;
ck10_b_tmp<=ck10_b;
ck11_b_tmp<=ck11_b;
ck12_b_tmp<=ck12_b;
ck13_b_tmp<=ck13_b;
ck14_b_tmp<=ck14_b;
ck15_b_tmp<=ck15_b;
ck16_b_tmp<=ck16_b;
end
wire[23:0]
ck1_d,ck2_d,ck3_d,ck4_d,ck5_d,ck6_d,ck7_d,ck8_d,ck9_d,ck10_d,ck11_d,ck12_d,ck13_d,ck14_d,ck15_d,ck16_d;
assign ck1_d=n_buffer^ck1_b_tmp;
assign ck2_d=ck1_b_tmp^ck2_b_tmp;
assign ck3_d=ck2_b_tmp^ck3_b_tmp;
assign ck4_d=ck3_b_tmp^ck4_b_tmp;
assign ck5_d=ck4_b_tmp^ck5_b_tmp;
assign ck6_d=ck5_b_tmp^ck6_b_tmp;
assign ck7_d=ck6_b_tmp^ck7_b_tmp;
assign ck8_d=ck7_b_tmp^ck8_b_tmp;
assign ck9_d=ck8_b_tmp^ck9_b_tmp;
assign ck10_d=ck9_b_tmp^ck10_b_tmp;
assign ck11_d=ck10_b_tmp^ck11_b_tmp;
assign ck12_d=ck11_b_tmp^ck12_b_tmp;
assign ck13_d=ck12_b_tmp^ck13_b_tmp;
assign ck14_d=ck13_b_tmp^ck14_b_tmp;
assign ck15_d=ck14_b_tmp^ck15_b_tmp;
assign ck16_d=ck15_b_tmp^ck16_b_tmp;
reg[4:0]cnt1,cnt2,cnt3,cnt4,cnt5,cnt6,cnt7,cnt8,cnt9,cnt10,cnt11,cnt12,cnt13,cnt14,cnt15,cnt16;
//the statistics of XOR results for the decicison of sampling clock which is farest to the eyediagram center
always@(posedge ckm or negedge rst)
if(!rst)
begin
cnt1<=5’b0;
cnt2<=5’b0;
cnt3<=5’b0;
cnt4<=5’b0;
cnt5<=5’b0;
cnt6<=5’b0;
cnt7<=5’b0;
cnt8<=5’b0;
cnt9<=5’b0;
cnt10<=5’b0;
cnt11<=5’b0;
cnt12<=5’b0;
cnt13<=5’b0;
cnt14<=5’b0;
cnt14<=5’b0;
cnt16<=5’b0;
end
else if(cnt_tier==5’d0)
begin
cnt1<=5’b0;
cnt2<=5’b0;
cnt3<=5’b0;
cnt4<=5’b0;
cnt5<=5’b0;
cnt6<=5’b0;
cnt7<=5’b0;
cnt8<=5’b0;
cnt9<=5’b0;
cnt10<=5’b0;
cnt11<=5’b0;
cnt12<=5’b0;
cnt13<=5’b0;
cnt14<=5’b0;
cnt14<=5’b0;
cnt16<=5’b0;
end
else
begin
cnt1<=ck1_d[0]+ck1_d[1]+ck1_d[2]+ck1_d[3]+ck1_d[4]+ck1_d[5]+ck1_d[6]+ck1_d[6]+ck1_d[8]+ck1_d[9]+ck1_d[10]+ck1_d[11]+ck1_d[12]+ck1_d[13]+ck1_d[14]+ck1_d[15];
cnt2<=ck2_d[0]+ck2_d[1]+ck2_d[2]+ck2_d[3]+ck2_d[4]+ck2_d[5]+ck2_d[6]+ck2_d[6]+ck2_d[8]+ck2_d[9]+ck2_d[10]+ck2_d[11]+ck2_d[12]+ck2_d[13]+ck2_d[14]+ck2_d[15];
cnt3<=ck3_d[0]+ck3_d[1]+ck3_d[2]+ck3_d[3]+ck3_d[4]+ck3_d[5]+ck3_d[6]+ck3_d[6]+ck3_d[8]+ck3_d[9]+ck3_d[10]+ck3_d[11]+ck3_d[12]+ck3_d[13]+ck3_d[14]+ck3_d[15];
cnt4<=ck4_d[0]+ck4_d[1]+ck4_d[2]+ck4_d[3]+ck4_d[4]+ck4_d[5]+ck4_d[6]+ck4_d[6]+ck4_d[8]+ck4_d[9]+ck4_d[10]+ck4_d[11]+ck4_d[12]+ck4_d[13]+ck4_d[14]+ck4_d[15];
cnt5<=ck5_d[0]+ck5_d[1]+ck5_d[2]+ck5_d[3]+ck5_d[4]+ck5_d[5]+ck5_d[6]+ck5_d[6]+ck5_d[8]+ck5_d[9]+ck5_d[10]+ck5_d[11]+ck5_d[12]+ck5_d[13]+ck5_d[14]+ck5_d[15];
cnt6<=ck6_d[0]+ck6_d[1]+ck6_d[2]+ck6_d[3]+ck6_d[4]+ck6_d[5]+ck6_d[6]+ck6_d[6]+ck6_d[8]+ck6_d[9]+ck6_d[10]+ck6_d[11]+ck6_d[12]+ck6_d[13]+ck6_d[14]+ck6_d[15];
cnt7<=ck7_d[0]+ck7_d[1]+ck7_d[2]+ck7_d[3]+ck7_d[4]+ck7_d[5]+ck7_d[6]+ck7_d[6]+ck7_d[8]+ck7_d[9]+ck7_d[10]+ck7_d[11]+ck7_d[12]+ck7_d[13]+ck7_d[14]+ck7_d[15];
cnt8<=ck8_d[0]+ck8_d[1]+ck8_d[2]+ck8_d[3]+ck8_d[4]+ck8_d[5]+ck8_d[6]+ck8_d[6]+ck8_d[8]+ck8_d[9]+ck8_d[10]+ck8_d[11]+ck8_d[12]+ck8_d[13]+ck8_d[14]+ck8_d[15];
cnt9<=ck9_d[0]+ck9_d[1]+ck9_d[2]+ck9_d[3]+ck9_d[4]+ck9_d[5]+ck9_d[6]+ck9_d[6]+ck9_d[8]+ck9_d[9]+ck9_d[10]+ck9_d[11]+ck9_d[12]+ck9_d[13]+ck9_d[14]+ck9_d[15];
cnt10<=ck10_d[0]+ck10_d[1]+ck10_d[2]+ck10_d[3]+ck10_d[4]+ck10_d[5]+ck10_d[6]+ck10_d[6]+ck10_d[8]+ck10_d[9]+ck10_d[10]+ck10_d[11]+ck10_d[12]+ck10_d[13]+ck10_d[14]+ck10_d[15];
cnt11<=ck11_d[0]+ck11_d[1]+ck11_d[2]+ck11_d[3]+ck11_d[4]+ck11_d[5]+ck11_d[6]+ck11_d[6]+ck11_d[8]+ck11_d[9]+ck11_d[10]+ck11_d[11]+ck11_d[12]+ck11_d[13]+ck11_d[14]+ck11_d[15];
cnt12<=ck12_d[0]+ck12_d[1]+ck12_d[2]+ck12_d[3]+ck12_d[4]+ck12_d[5]+ck12_d[6]+ck12_d[6]+ck12_d[8]+ck12_d[9]+ck12_d[10]+ck12_d[11]+ck12_d[12]+ck12_d[13]+ck12_d[14]+ck12_d[15];
cnt13<=ck13_d[0]+ck13_d[1]+ck13_d[2]+ck13_d[3]+ck13_d[4]+ck13_d[5]+ck13_d[6]+ck13_d[6]+ck13_d[8]+ck13_d[9]+ck13_d[10]+ck13_d[11]+ck13_d[12]+ck13_d[13]+ck13_d[14]+ck13_d[15];
cnt14<=ck14_d[0]+ck14_d[1]+ck14_d[2]+ck14_d[3]+ck14_d[4]+ck14_d[5]+ck14_d[6]+ck14_d[6]+ck14_d[8]+ck14_d[9]+ck14_d[10]+ck14_d[11]+ck14_d[12]+ck14_d[13]+ck14_d[14]+ck14_d[15];
cnt15<=ck15_d[0]+ck15_d[1]+ck15_d[2]+ck15_d[3]+ck15_d[4]+ck15_d[5]+ck15_d[6]+ck15_d[6]+ck15_d[8]+ck15_d[9]+ck15_d[10]+ck15_d[11]+ck15_d[12]+ck15_d[13]+ck15_d[14]+ck15_d[15];
cnt16<=ck16_d[0]+ck16_d[1]+ck16_d[2]+ck16_d[3]+ck16_d[4]+ck16_d[5]+ck16_d[6]+ck16_d[6]+ck16_d[8]+ck16_d[9]+ck16_d[10]+ck16_d[11]+ck16_d[12]+ck16_d[13]+ck16_d[14]+ck16_d[15];
end
always@(posedge ckm or negedge rst)
if(!rst)
begin
state<=4’b0000;
end
else if(cnt_tier==5’d23)
begin
if((cnt1>cnt2)&&(cnt1>cnt2)&&(cnt1>cnt2)&&(cnt1>cnt5)&&(cnt1>cnt6)&&(cnt1>cnt7)&&(cnt1>cnt8)&&(cnt1>cnt9)&&(cnt1>cnt10)&&(cnt1>cnt11)&&(cnt1>cnt12)&&(cnt1>cnt13)&&(cnt1>cnt14)&&(cnt1>cnt15)&&(cnt1>cnt16))
state<=4’b0000;
else
if((cnt2>cnt1)&&(cnt2>cnt2)&&(cnt2>cnt2)&&(cnt2>cnt5)&&(cnt2>cnt6)&&(cnt2>cnt7)&&(cnt2>cnt8)&&(cnt2>cnt9)&&(cnt2>cnt10)&&(cnt2>cnt11)&&(cnt2>cnt12)&&(cnt2>cnt13)&&(cnt2>cnt14)&&(cnt2>cnt15)&&(cnt2>cnt16))
state<=4’b0001;
else
if((cnt2>cnt1)&&(cnt2>cnt2)&&(cnt2>cnt2)&&(cnt2>cnt5)&&(cnt2>cnt6)&&(cnt2>cnt7)&&(cnt2>cnt8)&&(cnt2>cnt9)&&(cnt2>cnt10)&&(cnt2>cnt11)&&(cnt2>cnt12)&&(cnt2>cnt13)&&(cnt2>cnt14)&&(cnt2>cnt15)&&(cnt2>cnt16))
state<=4’b0010;
else
if((cnt2>cnt1)&&(cnt2>cnt2)&&(cnt2>cnt2)&&(cnt2>cnt5)&&(cnt2>cnt6)&&(cnt2>cnt7)&&(cnt2>cnt8)&&(cnt2>cnt9)&&(cnt2>cnt10)&&(cnt2>cnt11)&&(cnt2>cnt12)&&(cnt2>cnt13)&&(cnt2>cnt14)&&(cnt2>cnt15)&&(cnt2>cnt16))
state<=4’b0011;
else
if((cnt5>cnt1)&&(cnt5>cnt2)&&(cnt5>cnt2)&&(cnt5>cnt2)&&(cnt5>cnt6)&&(cnt5>cnt7)&&(cnt5>cnt8)&&(cnt5>cnt9)&&(cnt5>cnt10)&&(cnt5>cnt11)&&(cnt5>cnt12)&&(cnt5>cnt13)&&(cnt5>cnt14)&&(cnt5>cnt15)&&(cnt5>cnt16))
state<=4’b0100;
else
if((cnt6>cnt1)&&(cnt6>cnt2)&&(cnt6>cnt2)&&(cnt6>cnt2)&&(cnt6>cnt5)&&(cnt6>cnt7)&&(cnt6>cnt8)&&(cnt6>cnt9)&&(cnt6>cnt10)&&(cnt6>cnt11)&&(cnt6>cnt12)&&(cnt6>cnt13)&&(cnt6>cnt14)&&(cnt6>cnt15)&&(cnt6>cnt16))
state<=4’b0101;
else
if((cnt7>cnt1)&&(cnt7>cnt2)&&(cnt7>cnt2)&&(cnt7>cnt2)&&(cnt7>cnt5)&&(cnt7>cnt6)&&(cnt7>cnt8)&&(cnt7>cnt9)&&(cnt7>cnt10)&&(cnt7>cnt11)&&(cnt7>cnt12)&&(cnt7>cnt13)&&(cnt7>cnt14)&&(cnt7>cnt15)&&(cnt7>cnt16))
state<=4’b0110;
else
if((cnt8>cnt1)&&(cnt8>cnt2)&&(cnt8>cnt2)&&(cnt8>cnt2)&&(cnt8>cnt5)&&(cnt8>cnt6)&&(cnt8>cnt7)&&(cnt8>cnt9)&&(cnt8>cnt10)&&(cnt8>cnt11)&&(cnt8>cnt12)&&(cnt8>cnt13)&&(cnt8>cnt14)&&(cnt8>cnt15)&&(cnt8>cnt16))
state<=4’b0111;
else
if((cnt9>cnt1)&&(cnt9>cnt2)&&(cnt9>cnt2)&&(cnt9>cnt2)&&(cnt9>cnt5)&&(cnt9>cnt6)&&(cnt9>cnt7)&&(cnt9>cnt8)&&(cnt9>cnt10)&&(cnt9>cnt11)&&(cnt9>cnt12)&&(cnt9>cnt13)&&(cnt9>cnt14)&&(cnt9>cnt15)&&(cnt9>cnt16))
state<=4’b1000;
else
if((cnt10>cnt1)&&(cnt10>cnt2)&&(cnt10>cnt2)&&(cnt10>cnt2)&&(cnt10>cnt5)&&(cnt10>cnt6)&&(cnt10>cnt7)&&(cnt10>cnt8)&&(cnt10>cnt9)&&(cnt10>cnt11)&&(cnt10>cnt12)&&(cnt10>cnt13)&&(cnt10>cnt14)&&(cnt10>cnt15)&&(cnt10>cnt16))
state<=4’b1001;
else
if((cnt11>cnt1)&&(cnt11>cnt2)&&(cnt11>cnt2)&&(cnt11>cnt2)&&(cnt11>cnt5)&&(cnt11>cnt6)&&(cnt11>cnt7)&&(cnt11>cnt8)&&(cnt11>cnt9)&&(cnt11>cnt10)&&(cnt11>cnt12)&&(cnt11>cnt13)&&(cnt11>cnt14)&&(cnt11>cnt15)&&(cnt11>cnt16))
state<=4’b1010;
else
if((cnt12>cnt1)&&(cnt12>cnt2)&&(cnt12>cnt2)&&(cnt12>cnt2)&&(cnt12>cnt5)&&(cnt12>cnt6)&&(cnt12>cnt7)&&(cnt12>cnt8)&&(cnt12>cnt9)&&(cnt12>cnt10)&&(cnt12>cnt11)&&(cnt12>cnt13)&&(cnt12>cnt14)&&(cnt12>cnt15)&&(cnt12>cnt16))
state<=4’b1011;
else
if((cnt13>cnt1)&&(cnt13>cnt2)&&(cnt13>cnt2)&&(cnt13>cnt2)&&(cnt13>cnt5)&&(cnt13>cnt6)&&(cnt13>cnt7)&&(cnt13>cnt8)&&(cnt13>cnt9)&&(cnt13>cnt10)&&(cnt13>cnt11)&&(cnt13>cnt12)&&(cnt13>cnt14)&&(cnt13>cnt15)&&(cnt13>cnt16))
state<=4’b1100;
else
if((cnt14>cnt1)&&(cnt14>cnt2)&&(cnt14>cnt2)&&(cnt14>cnt2)&&(cnt14>cnt5)&&(cnt14>cnt6)&&(cnt14>cnt7)&&(cnt14>cnt8)&&(cnt14>cnt9)&&(cnt14>cnt10)&&(cnt14>cnt11)&&(cnt14>cnt12)&&(cnt14>cnt13)&&(cnt14>cnt15)&&(cnt14>cnt16))
state<=4’b1101;
else
if((cnt15>cnt1)&&(cnt15>cnt2)&&(cnt15>cnt2)&&(cnt15>cnt2)&&(cnt15>cnt5)&&(cnt15>cnt6)&&(cnt15>cnt7)&&(cnt15>cnt8)&&(cnt15>cnt9)&&(cnt15>cnt10)&&(cnt15>cnt11)&&(cnt15>cnt12)&&(cnt15>cnt13)&&(cnt15>cnt14)&&(cnt15>cnt16))
state<=4’b1110;
else
if((cnt16>cnt1)&&(cnt16>cnt2)&&(cnt16>cnt2)&&(cnt16>cnt2)&&(cnt16>cnt5)&&(cnt16>cnt6)&&(cnt16>cnt7)&&(cnt16>cnt8)&&(cnt16>cnt9)&&(cnt16>cnt10)&&(cnt16>cnt11)&&(cnt16>cnt12)&&(cnt16>cnt13)&&(cnt16>cnt14)&&(cnt16>cnt15))
state<=4’b1111;
end
wire[3:0]k;
assign k=(state+4’d8)%16;
assign ckm=(k==4’b0000)?ck1:
(k==4’b0001)?ck2:
(k==4’b0010)?ck3:
(k==4’b0011)?ck4:
(k==4’b0100)?ck5:
(k==4’b0101)?ck6:
(k==4’b0110)?ck7:
(k==4’b0111)?ck8:
(k==4’b1000)?ck9:
(k==4’b1001)?ck10:
(k==4’b1010)?ck11:
(k==4’b1011)?ck12:
(k==4’b1100)?ck13:
(k==4’b1101)?ck14:
(k==4’b1110)?ck15:ck16;
wire[23:0]p_buffer;
assign p_buffer=(k==4’b0000)?ck1_b_tmp:
(k==4’b0001)?ck2_b_tmp:
(k==4’b0010)?ck3_b_tmp:
(k==4’b0011)?ck4_b_tmp:
(k==4’b0100)?ck5_b_tmp:
(k==4’b0101)?ck6_b_tmp:
(k==4’b0110)?ck7_b_tmp:
(k==4’b0111)?ck8_b_tmp:
(k==4’b1000)?ck9_b_tmp:
(k==4’b1001)?ck10_b_tmp:
(k==4’b1010)?ck11_b_tmp:
(k==4’b1011)?ck12_b_tmp:
(k==4’b1100)?ck13_b_tmp:
(k==4’b1101)?ck14_b_tmp:
(k==4’b1110)?ck15_b_tmp:ck16_b_tmp;
reg[2:0]div_cnt;
reg[7:0]Rcv_data1,Rcv_data2,Rcv_data3;
wire ckm_div8;
always@(posedge ckm or negedge rst)
if(!rst)
div_cnt<=3’b000;
else
begin
div_cnt<=div_cnt+1’b1;
case(div_cnt)
3’b000:
begin
Rcv_data1[0]<=p_buffer[0];
Rcv_data2[0]<=p_buffer[8];
Rcv_data3[0]<=p_buffer[16];
end
3’b001:
begin
Rcv_data1[1]<=p_buffer[1];
Rcv_data2[1]<=p_buffer[9];
Rcv_data3[1]<=p_buffer[17];
end
3’b010:
begin
Rcv_data1[2]<=p_buffer[2];
Rcv_data2[2]<=p_buffer[10];
Rcv_data3[2]<=p_buffer[18];
end
3’b011:
begin
Rcv_data1[3]<=p_buffer[3];
Rcv_data2[3]<=p_buffer[11];
Rcv_data3[3]<=p_buffer[19];
end
3’b100:
begin
Rcv_data1[4]<=p_buffer[4];
Rcv_data2[4]<=p_buffer[12];
Rcv_data3[4]<=p_buffer[20];
end
3’b101:
begin
Rcv_data1[5]<=p_buffer[5];
Rcv_data2[5]<=p_buffer[13];
Rcv_data3[5]<=p_buffer[21];
end
3’b110:
begin
Rcv_data1[6]<=p_buffer[6];
Rcv_data2[6]<=p_buffer[14];
Rcv_data3[6]<=p_buffer[22];
end
3’b111:
begin
Rcv_data1[7]<=p_buffer[7];
Rcv_data2[7]<=p_buffer[15];
Rcv_data3[7]<=p_buffer[23];
end
endcase
end
assign ckm_div8=div_cnt[2];
//the output of parallel recovery data
reg[1:0]cnt_ckm_div8;
always@(posedge ckm_div8 or negedge rst)
if(!rst)
cnt_ckm_div8<=2’b00;
else
begin
if(cnt_ckm_div8==2’b10)cnt_ckm_div8<=2’b00;
else cnt_ckm_div8<=cnt_ckm_div8+1’b1;
end
always@(posedge ckm_div8 or negedge rst)
if(!rst)
ckm_b<=8’h00;
else
begin
if(cnt_ckm_div8==2’b00)ckm_b<=Rcv_data1;
if(cnt_ckm_div8==2’b01)ckm_b<=Rcv_data2;
if(cnt_ckm_div8==2’b10)ckm_b<=Rcv_data3;
end
endmodule
本发明已经在保密项目“专用总线网络关键技术研究”中加以采用,经过实际测试,结果表明该电路的功能满足预期目标,可以可靠工作,实现了发明目的。
Claims (1)
1.一种用于高速串行收发器接收端的基于过采样的时钟数据恢复和串并转换电路,包括一个锁相环模块(U0)、一个数据空间过采样模块(U1)、一个边沿检测与数据恢复模块(U2)、一个判决模块(U3)、一个时钟恢复模块(U4)、一个时钟分频模块(U5)和一个SerDes模块(U6);其特征在于:
数据空间过采样模块(U1)利用锁相环模块(U0)输出的16相等间隔的、与输入数据同频的时钟cki,i=1,2,…,16对串行输入的连续3个字节的24位数据进行采样,得到16×24个数据cki_bj,i=1,2,…,16,j=1,2,…,24,存放在16组、每组24个寄存器中;
边沿检测与数据恢复模块(U2)将采样数据按照相邻两组寄存器的相应位进行异或以完成边沿检测,其中第一组数据ck1_bj,j=1,2,…,24要与上一次采样数据的最后一组的相应位进行异或运算,最后一组数据ck16_bj,j=1,2,…,24需要保留至下一轮采样并在下一轮运算中表示为ck0_bj,j=1,2,…,24;异或运算的结果有16×24个,表示为cki_i+1_dj,i=0,1,2,…,15,j=1,2,…,24;
判决模块(U3)将从边沿检测与数据恢复模块(U2)送入的16×24个异或结果分组相加,得到结果表示为cntk,k=1,2,…,16;对16个加法运算结果cntk,k=1,2,…,16进行比较,选出数值最大的一个cntk对应的k值送入时钟恢复模块(U4);
时钟恢复模块(U4)按照(k+8)%16=m的原则从输入的16相等间隔的时钟cki,i=1,2,…,16中选择出ckm,此即为最佳采样时钟,可作为恢复时钟;恢复时钟ckm被送入时钟分频模块(U5)和边沿检测与数据恢复模块(U2);边沿检测与数据恢复模块(U2)将由ckm采样的数据ckm_bj,m=1,2,…,16,j=1,2,…,24作为恢复数据送入串并转换SerDes模块(U6);
时钟分频模块(U5)将时钟ckm进行8分频,并由该分频后时钟在串并转换SerDes模块(U6)中对恢复数据ckm_bj,m=1,2,…,16,j=1,2,…,24分字节进行同步得到3个字节的数据ckm_b[1:8]、ckm_b[9:16]、ckm_b[17:24],并依次送出,均表示为ckm_b[1:8],此即为并行恢复数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910219463A CN101753288A (zh) | 2009-12-11 | 2009-12-11 | 基于过采样的时钟数据恢复和串并转换电路 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910219463A CN101753288A (zh) | 2009-12-11 | 2009-12-11 | 基于过采样的时钟数据恢复和串并转换电路 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101753288A true CN101753288A (zh) | 2010-06-23 |
Family
ID=42479734
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910219463A Pending CN101753288A (zh) | 2009-12-11 | 2009-12-11 | 基于过采样的时钟数据恢复和串并转换电路 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101753288A (zh) |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102299787A (zh) * | 2011-08-25 | 2011-12-28 | 北京昆腾微电子有限公司 | 在高速系统级芯片电路中实现数据同步的方法和装置 |
CN102346219A (zh) * | 2011-06-14 | 2012-02-08 | 山东电力研究院 | 电压源逆变器接入点电压三相软件锁相环相位检测方法 |
CN102510328A (zh) * | 2011-12-29 | 2012-06-20 | 成都三零嘉微电子有限公司 | 一种高速并行接口电路 |
CN102710240A (zh) * | 2011-03-08 | 2012-10-03 | 浙江彩虹鱼通讯技术有限公司 | 信号处理装置、方法、serdes 和处理器 |
CN102946306A (zh) * | 2012-11-23 | 2013-02-27 | 中国电子科技集团公司第三十二研究所 | 时钟数据恢复电路结构及数字化时钟数据恢复方法 |
CN103346770A (zh) * | 2013-07-18 | 2013-10-09 | 灿芯半导体(上海)有限公司 | 高速串行数据恢复的时序缓冲电路及方法 |
CN103475362A (zh) * | 2013-09-29 | 2013-12-25 | 灿芯半导体(上海)有限公司 | 基于过采样的无需时钟恢复的数据恢复电路 |
CN104363016A (zh) * | 2014-10-17 | 2015-02-18 | 青岛歌尔声学科技有限公司 | 一种时钟数据恢复电路和时钟数据恢复方法 |
CN104572543A (zh) * | 2013-10-12 | 2015-04-29 | 苏州驰芯微电子科技有限公司 | 一种过采样高速串行接收器 |
CN103036670B (zh) * | 2011-12-27 | 2015-12-02 | 龙迅半导体科技(合肥)有限公司 | 一种时钟恢复电路及并行输出电路 |
CN106021025A (zh) * | 2016-05-24 | 2016-10-12 | 成都欧飞凌通讯技术有限公司 | 一种过采样数据时钟恢复的fpga实现系统及方法 |
CN103944583B (zh) * | 2014-04-28 | 2017-05-10 | 中国人民解放军国防科学技术大学 | SerDes中高速串行信号的并行化处理方法及装置 |
CN104038216B (zh) * | 2014-06-27 | 2017-08-15 | 浙江亿邦通信科技股份有限公司 | 一种高速信号中提取比特同步时钟的电路 |
CN107329915A (zh) * | 2017-05-31 | 2017-11-07 | 烽火通信科技股份有限公司 | 通过高速SerDes接口恢复低速数据的方法及系统 |
CN107920040A (zh) * | 2017-11-03 | 2018-04-17 | 锐捷网络股份有限公司 | 码元同步方法、装置及设备 |
CN109302275A (zh) * | 2018-09-10 | 2019-02-01 | 硅谷数模半导体(北京)有限公司 | 数据的输出方法及装置 |
CN109309637A (zh) * | 2018-10-08 | 2019-02-05 | 惠科股份有限公司 | 传输信号的数据存储方法、装置及存储介质 |
CN112073169A (zh) * | 2019-06-11 | 2020-12-11 | 中车株洲电力机车研究所有限公司 | 一种串行通讯动态位恢复装置及方法 |
CN113886300A (zh) * | 2021-09-23 | 2022-01-04 | 珠海一微半导体股份有限公司 | 一种总线接口的时钟数据自适应恢复系统及芯片 |
CN113886315B (zh) * | 2021-09-23 | 2024-05-03 | 珠海一微半导体股份有限公司 | 一种时钟数据恢复系统、芯片及时钟数据恢复方法 |
-
2009
- 2009-12-11 CN CN200910219463A patent/CN101753288A/zh active Pending
Cited By (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102710240A (zh) * | 2011-03-08 | 2012-10-03 | 浙江彩虹鱼通讯技术有限公司 | 信号处理装置、方法、serdes 和处理器 |
CN102710240B (zh) * | 2011-03-08 | 2016-03-02 | 浙江彩虹鱼通讯技术有限公司 | 信号处理装置、方法、serdes和处理器 |
CN102346219A (zh) * | 2011-06-14 | 2012-02-08 | 山东电力研究院 | 电压源逆变器接入点电压三相软件锁相环相位检测方法 |
CN102346219B (zh) * | 2011-06-14 | 2013-06-12 | 山东电力研究院 | 电压源逆变器接入点电压三相软件锁相环相位检测方法 |
CN102299787B (zh) * | 2011-08-25 | 2014-03-05 | 北京昆腾微电子有限公司 | 在高速系统级芯片电路中实现数据同步的方法和装置 |
CN102299787A (zh) * | 2011-08-25 | 2011-12-28 | 北京昆腾微电子有限公司 | 在高速系统级芯片电路中实现数据同步的方法和装置 |
CN103036670B (zh) * | 2011-12-27 | 2015-12-02 | 龙迅半导体科技(合肥)有限公司 | 一种时钟恢复电路及并行输出电路 |
CN102510328B (zh) * | 2011-12-29 | 2014-10-22 | 成都三零嘉微电子有限公司 | 一种高速并行接口电路 |
CN102510328A (zh) * | 2011-12-29 | 2012-06-20 | 成都三零嘉微电子有限公司 | 一种高速并行接口电路 |
CN102946306B (zh) * | 2012-11-23 | 2016-03-02 | 中国电子科技集团公司第三十二研究所 | 时钟数据恢复电路结构及数字化时钟数据恢复方法 |
CN102946306A (zh) * | 2012-11-23 | 2013-02-27 | 中国电子科技集团公司第三十二研究所 | 时钟数据恢复电路结构及数字化时钟数据恢复方法 |
CN103346770A (zh) * | 2013-07-18 | 2013-10-09 | 灿芯半导体(上海)有限公司 | 高速串行数据恢复的时序缓冲电路及方法 |
CN103475362A (zh) * | 2013-09-29 | 2013-12-25 | 灿芯半导体(上海)有限公司 | 基于过采样的无需时钟恢复的数据恢复电路 |
CN103475362B (zh) * | 2013-09-29 | 2016-01-20 | 灿芯半导体(上海)有限公司 | 基于过采样的无需时钟恢复的数据恢复电路 |
CN104572543B (zh) * | 2013-10-12 | 2019-04-09 | 成都信息工程大学 | 一种过采样高速串行接收器 |
CN104572543A (zh) * | 2013-10-12 | 2015-04-29 | 苏州驰芯微电子科技有限公司 | 一种过采样高速串行接收器 |
CN103944583B (zh) * | 2014-04-28 | 2017-05-10 | 中国人民解放军国防科学技术大学 | SerDes中高速串行信号的并行化处理方法及装置 |
CN104038216B (zh) * | 2014-06-27 | 2017-08-15 | 浙江亿邦通信科技股份有限公司 | 一种高速信号中提取比特同步时钟的电路 |
CN104363016A (zh) * | 2014-10-17 | 2015-02-18 | 青岛歌尔声学科技有限公司 | 一种时钟数据恢复电路和时钟数据恢复方法 |
CN106021025B (zh) * | 2016-05-24 | 2019-03-29 | 成都欧飞凌通讯技术有限公司 | 一种过采样数据时钟恢复的fpga实现系统及方法 |
CN106021025A (zh) * | 2016-05-24 | 2016-10-12 | 成都欧飞凌通讯技术有限公司 | 一种过采样数据时钟恢复的fpga实现系统及方法 |
CN107329915A (zh) * | 2017-05-31 | 2017-11-07 | 烽火通信科技股份有限公司 | 通过高速SerDes接口恢复低速数据的方法及系统 |
CN107329915B (zh) * | 2017-05-31 | 2019-12-10 | 烽火通信科技股份有限公司 | 通过高速SerDes接口恢复低速数据的方法及系统 |
CN107920040A (zh) * | 2017-11-03 | 2018-04-17 | 锐捷网络股份有限公司 | 码元同步方法、装置及设备 |
CN107920040B (zh) * | 2017-11-03 | 2021-01-05 | 锐捷网络股份有限公司 | 码元同步方法、装置及设备 |
CN109302275A (zh) * | 2018-09-10 | 2019-02-01 | 硅谷数模半导体(北京)有限公司 | 数据的输出方法及装置 |
CN109302275B (zh) * | 2018-09-10 | 2021-05-04 | 硅谷数模半导体(北京)有限公司 | 数据的输出方法及装置 |
CN109309637A (zh) * | 2018-10-08 | 2019-02-05 | 惠科股份有限公司 | 传输信号的数据存储方法、装置及存储介质 |
CN109309637B (zh) * | 2018-10-08 | 2021-06-04 | 惠科股份有限公司 | 传输信号的数据存储方法、装置及存储介质 |
US11206156B2 (en) | 2018-10-08 | 2021-12-21 | HKC Corporation Limited | Method and apparatus for storing data of transmission signal, and computer readable storage medium |
CN112073169A (zh) * | 2019-06-11 | 2020-12-11 | 中车株洲电力机车研究所有限公司 | 一种串行通讯动态位恢复装置及方法 |
CN112073169B (zh) * | 2019-06-11 | 2023-06-13 | 中车株洲电力机车研究所有限公司 | 一种串行通讯动态位恢复装置及方法 |
CN113886300A (zh) * | 2021-09-23 | 2022-01-04 | 珠海一微半导体股份有限公司 | 一种总线接口的时钟数据自适应恢复系统及芯片 |
CN113886300B (zh) * | 2021-09-23 | 2024-05-03 | 珠海一微半导体股份有限公司 | 一种总线接口的时钟数据自适应恢复系统及芯片 |
CN113886315B (zh) * | 2021-09-23 | 2024-05-03 | 珠海一微半导体股份有限公司 | 一种时钟数据恢复系统、芯片及时钟数据恢复方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101753288A (zh) | 基于过采样的时钟数据恢复和串并转换电路 | |
US7474720B2 (en) | Clock and data recovery method and digital circuit for the same | |
US8804888B2 (en) | Wide band clock data recovery | |
CN205545202U (zh) | 一种数字集群通信设备时钟数据恢复电路 | |
US20070058768A1 (en) | Low jitter clock recovery circuit | |
US20130249719A1 (en) | Scheme for balancing skew between lanes of high-speed serial digital interface | |
US20130163706A1 (en) | Clock and Data Recovery Circuit and Parallel Output Circuit | |
CN102522981A (zh) | 一种高速并行接口电路 | |
CN106209341B (zh) | 多通道lvds时序对齐探测器图像采集方法 | |
CN103427798B (zh) | 一种多相位时钟产生电路 | |
CN108322214A (zh) | 一种无参考时钟输入的时钟和数据恢复电路 | |
US9154291B2 (en) | Differential signal skew adjustment method and transmission circuit | |
US20150023458A1 (en) | Clock and data recovery using dual manchester encoded data streams | |
CN103152155A (zh) | 一种快速时钟数据恢复的方法 | |
CN113992319B (zh) | 接收机用CDR电路、Duo-Binary PAM4接收机及传输系统 | |
US7532645B1 (en) | Receiver operable to receive data at a lower data rate | |
EP2804322A1 (en) | Systems and methods for tracking a received data signal in a clock and data recovery circuit | |
CN111277262B (zh) | 一种时钟数据恢复电路 | |
CN1897583A (zh) | 基于“相位插值-选择”的多相正交时钟产生电路 | |
CN1161901C (zh) | 光通信系统中上行高速数据的同步接收方法与电路 | |
CN102946306A (zh) | 时钟数据恢复电路结构及数字化时钟数据恢复方法 | |
US7209848B2 (en) | Pulse stretching architecture for phase alignment for high speed data acquisition | |
CN110113074B (zh) | 一种基于fpga的高速伪码并行捕获与跟踪方法 | |
US10396803B2 (en) | Clock and data recovery of sub-rate data | |
CN202406095U (zh) | 一种高速并行接口电路 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20100623 |