关于高速信号传输的总结(LVDS/CAN//camaralink/ADC等),第八天,重写selectIO

2020/5/28 11:37:27 人评论 次浏览 分类:学习教程

这段时间一直在做某高速信号传输,在此做一个小的总结。

一、前提:问题及描述

    高速信号传输最害怕什么问题?干扰。

    高速信号传输,任何环境发生改变都会导致数据传输的不准确。比如接口、布线、温度、磁场、抖动等等,。这也是高速信号和低速信号传输最主要的区别。

    为什么会导致这种区别?

    低速信号一般设置采样点,根据时钟频率,比如几次甚至十几次采集一次,靠谱点的都会加上crc校验(crc以后再说),简单的方式就是以中间采样点作为数据采集,用这种方式保证数据传输的稳定性。而高速信号传输一般只能采集一次,甚至目前大部分高速接口都是双边沿传输。如果外界环境变化,比如温度变化就会让时钟发生抖动或者偏移等现象。时钟抖动是晶振内部问题产生,在此不讨论。在此主要讨论两个器件之间因为布线或者接口等问题导致时钟偏移现象wp249。

    时钟偏移理解,如下图更加直观。

以时钟2为基准时钟,1和3都是偏移现象的一种。比如lvds传输,目前时钟和数据一般不做同步处理。在发送过程中一定会产生时钟采集与数据不对齐的现象。比如采集点在数据的建立或保持时间,导致数据采集错误。这篇博文就是问了解决这个问题。

2、怎么处理

       对该问题的处理,其实属于对时钟的处理,FPGA中对时钟的处理,无非就是设计和约束。设计是通过修改代码逻辑和流程从而让时序满足时序要求,而约束即是设置时序条件,通过约束设置的方式来确定时序。

      针对时钟约束,参考之前的文章了解,最主要的就是要确定CO,也就是时钟通过电路的延迟,该延迟和芯片设计有关,一般也都是各类芯片的强约束。确定Tco后的输入延迟,只是确定了大概的输入路径,对于低速信号,当然基本上能保证时钟采集数据的稳定,也就是采集在数据的中间,但高速信号,本来时间间隔就很短,这时候就需要要更精确的方式来确定时钟采集不在数据的建立和保持时间上,从而办证数据采集的稳定性。

     时序设计,时序设计分两类,一类的逻辑款图类似的流程图,保证数据之间的交互。而另一种,就是对时钟偏移和抖动的设计。在xilinx的器件中,提供了IOdealy来保证数据采集的微小偏移,其偏移量主要和抽头数量和一级抽头的单位有关。T=n*1/(32*2*refclk),假设idealy总共只能移32次,因为上下边沿采集,所以需要*2,然后再除以参考时钟,就是一级抽头能移动的时间,refclk一般大于200M,这样数据一级能移动的就很小,从而保证约束后的时钟可以通过调整抽头位置来改动偏移值。剩下的就是慢慢调整抽头值来保证数据的稳定。

3、训练和验证方法

验证也分两种,一种是fpga能控制外设提供连续稳定的训练字,另一种是外设间隔提供训练字。

针对第一种就很简单了,一直改变抽头,能出现连续正确的数据后设为初始值,再改变几次,数据就会不正确了。然后以中间值设为抽头值。一般在做这种手动调整的时候,用VIO。

针对第二种,秘密,可私聊。

还有一些自动训练算法,思想就是在抽头值为零的时候,不做 不管数据如何。对串并转换后的数据进行判断,当出现零的时候,计数器为0,当出现全1的时候,计数器为n,抽头值就是n/2,如果该值大于32,就减去32的倍数小于32。然后再对训练字进行判断。

 

 

相关资讯

    暂无相关的资讯...

共有访客发表了评论 网友评论

验证码: 看不清楚?
    -->