网吧可以做网站吗,做动画视频的网站有哪些,阿里云轻量级wordpress,社保个人网站文章目录 1.LVDS接收端概述2逻辑框图3.xapp855训练代码解读4.接收端发送端联调5.传送门 1.LVDS接收端概述
接收端的传输模型各个属性应该与LVDS发送端各属性一致#xff0c;例如#xff0c;如果用于接收CMOS图像传感器的图像数据#xff0c;则接收端程序的串化因子、通道个… 文章目录 1.LVDS接收端概述2逻辑框图3.xapp855训练代码解读4.接收端发送端联调5.传送门 1.LVDS接收端概述
接收端的传输模型各个属性应该与LVDS发送端各属性一致例如如果用于接收CMOS图像传感器的图像数据则接收端程序的串化因子、通道个数等将要与设备一致。在硬件设计上LVDS时钟线和LVDS数据线应该等长设计但由于布线制板工艺的影响难免数据线和时钟线无法同时到达接收端在传输速度快时微乎其微的偏差都可能让数据出错这就是LVDS接收端要解决的问题即在数据稳定窗口的中心采样保持数据的稳定这个动作称之为位对齐。此外当在数据线上重复发送ABCDEFGH假设一个字母代表一个bit有可能接收到的是BCDEFGHA产生字偏移通过ISERDES2的bitslip可以完成数据的平移这个动作称之为“字对齐”。接收端通过IBUFDS进行差分转单端信号便于逻辑处理将lvds传输线上的串行数据经过IDELAY2进行位对齐操作随后利用ISERDES2将该串行数据并行化即字对齐操作将发送端的数据恢复。其难点就在于如何实现字对齐和位对齐操作。Xilinx提供了多个例程适用于不同系列的FPGA如xapp860和xapp855适于V5xapp585适用于7系列还有适用于ultrascale的例程。本例程基于xapp855修改使之适配7系列并满足既定传输模型属性要求。
2逻辑框图
以下框图截取自xapp855与示例程序并不一致。数据差分信号经IBUFDS转化为单端信号进入IDELAY2由于xapp855适用于V5而当前程序适用于7系列因此原语的名称有所不同将数据位对齐后进入ISEDERS2转换成并行数据时钟差分信号经过IBUFDS转化成单端信号进入IDELAY2此处为0以时钟到达为基准由BUFR倍频出并行时钟经BUFIO产生串行时钟。此外使用IDELAY必须要使用IDELAYCTRL输入200MHz作为参考时钟。还有两个逻辑模块一个是Bit Align Machine实现位对齐字对齐产生ISERDES2和IDELAY2所需的信号完成当前LVDS传输线的对齐操作。Resource sharing control实现通道切换和训练完成的指示。 3.xapp855训练代码解读
通道选择模块较为简单主要介绍Bit Align Machine模块是如何完成单通道的数据训练操作。将ISERDES2模块传入的并行数据A打一拍得到B当A不等于B的时候认为此时遇到了亚稳态即建立时间或者保持时间不满足要求的情况。当连续几个周期B等于pattern数据时认为此时的采样点可用字对齐也完成。完成数据训练的主要思路是先使用IDEALY延迟直到找见一个亚稳态的点未找见就延迟加1然后继续增加延迟并加入字节对齐的判断直到找到Pattern数据认为此时找到了数据窗口的左值继续增加延时值直到找见下一个亚稳态的采样点。从第一个pattern数据出现增加延时值到下一个亚稳态的出现之间就是数据有效窗口然后通过减去延迟值找到采样中心点此后再次判断字对齐的情况当字对齐结束后认为此LVDS传输线数据训练完成。由Resource sharing control控制开始训练下一个LVDS传输线。
以上截图出自xapp855的解释说明步骤①即是假定数据和时钟到达时二者的相对位置关系。步骤②是经过延时找到了第一个亚稳态窗口Transition图中斜线部分代表此时数据采样不稳定。步骤③是通过延时和bitslip寻找到数据有效窗口的左值Eye。步骤④是通过延时找到下一个亚稳态窗口由此在③和④之间便是数据有效的窗口。步骤⑤是将采样点控制到数据有效窗口的中心位置。需要注意IDELAY2总共只有32个阶当参考时钟是200MHz时每一阶延时78ps即总共可延时32*782496ps2.5ns。因此数据传输的线速率不能太低线速率太低时需要采用别的方法或者调整该状态机否则会错误的找到最佳采样点出现不稳定的情况因此使用该程序其线数据传输速率建议大于400Mbps。 下面对该模块中状态机简单分析便于理解。
00000不动指各计数模块idelay、bitslip均不做操作后同保证不与通道切换指令冲突。00001不动 比较前一个后一个不相等认为找见第一个亚稳态窗口。01000 SAMPLE指代码中信号含SAMPLE的128bit计数器后同计数器加1连续抓15次判断是否为亚稳态窗口。01011 IDELAY延时加1两个计数器清0。00100 SAMPLE控制7个周期后判断是否亚稳态如此循环直到找到亚稳态窗口即进入01111状态。上述五个步骤必定能找见亚稳态窗口01111 SAMPLE清0 IDEALAY加1 准备寻找pattern。01101 SAMPLE加1 JC添加8周期等待 找等于check pattern 找见就准备记录 重复上述步骤直到找见稳态check pattern即渡过第一个窗口 bitslip1。01100 SAMPLE清0 进入IDLE状态。10000 第二个idle 不动作。00010再次确认是否退出了窗口 如果没有退出重复上述步骤直到退出。01110 确认跳出第一个亚稳态窗口该状态CNT开始计数找左值。01001 idelay值加1 CNT开始计数(记录的是数据有效窗口的大小CNT指代码中不含SAMPLE的128计数器) 找下一个亚稳态区域。00011 SAMPLE计数控制8周期后比较数据复制当前的CNT中的计数值找见第二个就退出找不见就重复上面步骤。10010 计数器全部清0 无动作跳转。01010 idelay减一减到有效采样的中间处即可清0CNT。思考假如taps的值不够用怎么办即前文提到线数据速率不能太慢否则会出现这种情况。00101 CNT控制延时再次确认是否word对齐默认当前已经到了采样中心点 word对齐则进入成功完成数据训练状态word没有对齐就再次进入word对齐状态00110 bitslip一次00111 指示当前通道训练完成准备切换到下一个通道重复上述步骤进行训练
注意 将该程序移植到7系列的板卡时需要注意7系列的原语ISERDES2与V5不同bitslip信号不能一直给一旦一直给将无法穷举所有的可能值在bitslip使能之后要拉低两个周期继续使能否则这个系统的状态机可能出错。
4.接收端发送端联调
将发送端和接收端写在一个工程里验证LVDS的收发其结果如下,可以看到发送端发送的数据与接收的数据一致data_aglin信号拉高代表数据训练完成。 总结 ①本文只是提供了众多实现lvds收发方法中的一种例如可以使用ODDR原语产生差分信号IDELAY有四种模式本文使用VARIABLE模式还可以尝试VAR_LOAD模式xilinx提供了一个名为SelectIO Interface Wizard的ip核其中涵盖了LVDS收发使用的全部selectio资源在领悟本例精神后可以用其练手。 ②寻找数据中心的方式也是可以灵活多变的。 ③xapp855的代码结构以及代码风格可以提供一种新的思考包括通道与训练的管理计数器的服用以及状态指示训练完成的写法都值得学习和总结。 ④Xapp585提供了基于7系列的原语设计便于工程的移植和扩展另外其位对齐和字对齐分开实现是数据训练的另外一种思路。 ⑤关于文中提到的原语的使用可返回目录查看对应文章。 ⑥7系列的iserdes2原语要求bitslip后三个周期才能下一次bitslip因此在LVDS收发程序中加入了这里的控制。
5.传送门
我的主页FPGA通信接口专栏汇总导航源码链接
END 文章原创首发于CSDN论坛。 欢迎点赞❤❤收藏⭐⭐打赏 欢迎评论区或私信指出错误❌提出宝贵意见或疑问❓。