看本博文之前,读者需详细阅读xapp244,或者有相关串行数据恢复的经验,否则该博文不具任何参考价值。
其实,本文中,高速串行数据的恢复的基本原理是:利用过抽样,检测串行数据的边沿跳变,然后根据边沿提取处在数据相位正中央相邻的抽样值,将串行数据恢复过来。还有另一种方法:根据串行数据中包含的时钟信息恢复出串行时钟,在提取数据。
同理,上面的时域判断对下降沿也有效。
下面是过抽样采用的电路,用四级寄存器只要是为了保证时序收敛,寄存器与寄存器之间的延迟>=0.75period,而如果用两级寄存器,在下一级直接同步到CLK时钟域,而寄存器与寄存器之间的延时最小达到了0.25period。
当采样频率大于数据率时,时域从D变换到A,则AZ(3)~DZ(3)的输出无效,在这个转换过程到底发生什么?
由xapp224可知,MUX根据当前的时域选择有效的输出,并实时跟踪时域同时修改,所以我们可以根据上面的时序图画出时域从A变换到D的时序图。如下:
由上图可知,当时域从D变换到A时,照常规我们需要从Domain D-2中取出D相位的值,而在Domain A中取出A相位的值,这样我们就把连续两个相位的值记录下来,显然这是错误的。在上述的图中,高电平有两个比特,就是在高电平中的两个D值。
为什么会产生上述现象呢?根据上图,因为抽样时钟是来自本地PLL根据参考时钟产生的时钟,与实际输入的码率存在差异,如码率是270Mbps,而抽样时钟是270.01MHz(差异可以更大或者更小),并且本身串行数字输入信号存在抖动(jitter),造成在高电平抽样出9个值(如果抽样时钟和码率严格相等,并且不存在抖动,这种情况是不可能发生),从而造成时域D到时域A的转换,我们舍弃掉Domain D-2的D抽样值,也就是Domain D-2的四个相位无效,保证抽样数值和码率一致。
问题:当时域从A到B、B到C、C到D,为什么没有相关的判断?
上述的时域变换是完全有可能发生的,因为发生一次D到A的转换,就相当于把ABCD四个相位都抛弃,下一组ABCD四个相位中重新从A时域开始抽取抽样值,而当发生A到B、B到C等时钟域变换并不会发生在连续两个相位上提取抽样值。
同理,我们也可以知道,当采样频率略小于数据率时,时域从A变换到D,在ABCD四个相位,会产生两个有效抽样值。
以上只是从个人比较感性的理解,本人的数学功力远没有达到可以验证该算法的正确,如有人能给出详细的数学认证,望能通知,wind330不甚感激!
注意:原PDF中把时域A与时域D的变换给颠倒过来了,wind330是根据代码得出的结论,如果有人得出不同的结论,欢迎讨论。
文章评论(0条评论)
登录后参与讨论