赞
踩
问题:
A时钟域发出数据,B时钟与去采样,A与B是异步的,
如何保证采样的位置远离数据变化的位置?
下面文档推荐了一种过采样方法。
xapp523
假设前提:
输入数据是0.5 CLK0时钟周期变化1次。
FPGA内部可以产生4倍频率的时钟去采样,但是时序要求太高。
于是想到采用将时钟移相来采样。
CLK0 :移动0度。
CLK90 :移动90度。
CLK180:移动180度。
CLK270:移动270度。
数据采用延时来实现移相45度。
这样组合起来,将1个时钟周期分成了8份:
0,、45、90、135、180、225、270和315
为了稳定的采样到输入数据,先要知道数据的边沿落在哪个相位区间,
例如数据变化沿在0-45区间,那么采样的点在90、135是合适的。
例如数据变化沿在45-90区间,那么采样的点在0、135是合适的。
例如数据变化沿在90-135区间,那么采样的点在0、45是合适的。
例如数据变化沿在135-180区间,那么采样的点在45、90是合适的。
如果数据在传输过程变化区间不会变化,那么只要校准一次采样位置。
当数据的采样点需要变化,在变化过程中会产生采样点的切换,切换周围可能会丢失bit。这是难点。
xilinx推荐用下图系统结构实现过采样。
下图是ISERDESE2模块的内部实现:
下图是数据流的采样点与比较点:
图中标记的解释:
Qx [M or S]x
Qx = the ISERDESE2 outputs Q1, Q2, Q3, or Q4
Mx or Sx =Qx的源是Mx还是Sx; the source ISERDESE2 (M = master, S = slave) of the data outputs (Qx)
其中
M :表示没延时45度。
Q1、Q2中的下标1、2是什么含义?—表示哪个时钟沿采样的。
CLK0 采样的数据下标是1;
CLK90 采样的数据下标是3;
CLK180采样的数据下标是2;
CLK270采样的数据下标是4;
M1、M2中的下标1、2是什么含义?
下标是时钟周期的序号。相同下标表示是同一个周期内的数据。
例如:Q1M1
在CLK0采样Master(没延时45度)的数据输出。
目的是找到数据的变化沿的范围。
E4[0:3]
手册上看的有点迷茫,下图可能会更加清晰一点。
在这一点上,应该很清楚数据是如何进入FPGA,然后馈送到DRU的用于边缘检测。DRU的下一步是处理比较数据。这很简单状态机,基于数据边缘所在的位置及其移动到的位置,然后选择远离数据边缘的采样点。
采样点右移:原先采样点左侧一个时隙有跳变了。
采样点左移:原先采样点右侧一个时隙有跳变了。
例子1:
当原先是90度采样,原先数据变化在E4[0],加入现在数据变化在E4[1],那么再用90度采样不合适了,得用135度或者0度采样,暂时定为135度来分析,因为0度移动了2个位置,不方便分析。
例子2:
状态机原先是10状态采样135,,Q3 \Q7有效,当E4[2]==1,状态变化到00,转换成0度Q0、Q4有效。
在检测到原先采样点左侧时隙存在跳变时,此时状态机还在10,没跳,00,数据已经采样了,数据可能存在无效。当到达下一状态00的第一拍,这个bit 是10采样的,需要丢弃。这称为负位跳过。负位跳过每个时钟输出五位。
参考
https://blog.csdn.net/haoxingheng/article/details/50320145
https://blog.csdn.net/leixj025/article/details/109810241
https://blog.csdn.net/qq_41332806/article/details/109863482
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。