- 前言
- 数据包介绍
- 参考时钟要求
- 参考文章
前言
上一篇文章:高速串行总线设计基础(五)揭秘SERDES高速面纱之多相数据提取电路与线路编码方案[1]这篇文章介绍了提出了问题,关于SERDES或者Transceiver为什么能跑这么高的速度?当然有它的独特技术特点,上篇文章中介绍了两种技术,一是多相提取技术,另一种是线路编码方案。本篇文章继续这个话题。
数据包介绍
熟悉Xilinx的Transceiver的工程师一定知道,Xilinx有很多基于Transceiver的高速串行协议,例如aurora,srio,pcie等,它们都有自己的数据包,当然自己还可以自定义协议,例如跑Transceiver裸核时候就可以自由定义协议,协议也定义数据包等,只要通信双方都按照这个协议走,就没有任何问题。下面给出数据包的定义:数据包即定义明确的字节集合,由头,数据和尾部组成。
一些设计人员认为,除了局域网(LAN)(local area network)以外,通过数据包发送数据都是一种浪费。真的是这样吗?我们接着看。
请注意,定义中没有关于源地址和目标地址,CRC,最小长度或开放系统互连(OSI)(Open Systems Interconnection)协议层的内容。数据包只是具有定义的起点和终点的数据结构。虽然LAN数据包通常具有许多这些特征,但还有许多其他更简单的数据包用法。
数据包和吉比特串行接口有什么联系呢?
大多数在千兆串行链路上传输的数据都嵌入在某种数据包中。SERDES需要一种方法将传入的数据流对齐成字,这是非常自然的。如果系统需要时钟校正,就必须发送这种特殊的位序列或逗号。逗号可以是一个帧的开始或结束的自然标记。这在上一节中:高速串行总线设计基础(五)揭秘SERDES高速面纱之多相数据提取电路与线路编码方案[2]
如果需要时钟校正,时钟校正序列通常是理想的字符。在添加几个有序集来表示数据包的结束或开始,以及一个有序集来表示特殊类型的数据包后,我们就有了一个简单而强大的传输路径。
空闲符号或序列是另一个重要的数据包概念。每当没有信息要发送时,就会发送这个符号。连续传输数据可以确保链路保持对齐,PLL保持恢复的时钟锁定。下图展示了一些来自不同标准的样本数据包格式。
数据包格式举例
注:Preamble为报文头,SF类似,EF为文件尾部,数据包其他部分具体看数据包定义格式或者数据包协议。
参考时钟要求
千兆位收发器(MGT)的输入或参考时钟具有非常严格的规格。它包括严格的频率要求,通常以频率误差的百万分之几(PPM)指定。它还将有严格的抖动要求,以时间单位(皮秒)或单位间隔(UI)来定义。下面介绍这几个专业术语:
PPM( Parts per million):百万分之一;一种描述很小比例的方法。PPM的应用很广泛,在其他领域也有应用,例如:
- one inch in 16 miles,
- one second in 11.5 days,
- one minute in two years.
它是一个很小比例的概念。
UI(Unit intervals):单位间隔;与符号的时间长度相同,即0.2 UI =符号时间的20%。例如测量眼图的时候,就常用到UI的概念,如下图的中间一个眼的位置就是一个UI,一个符号的长度。
眼图示例
眼图示例
Jitter:抖动,理想过渡位置的变化。通俗点说:时钟抖动是时钟源和时钟信号环境的一种特性。它可以定义为 "时钟边缘与理想位置的偏差"。时钟抖动通常由时钟发生器电路、噪声、电源变化、附近电路的干扰等引起。抖动是导致时序闭合所规定的设计裕度的一个因素。
jitter定义
可参考:【 FPGA 】时钟抖动浅记[3]
Clock Jitter[4]
这样严格的要求使得PLL和时钟提取电路能够工作。这往往需要在使用MGT的系统中的每块印刷电路板(PCB)上安装一个精确的晶体振荡器。这些晶体振荡器比大多数用于数字系统的晶体振荡器高一档,成本会更高。
在很多情况下,时钟生成芯片和PLL的抖动太多,无法使用,因此需要选择一种低抖动的晶体振荡器。
低抖动石英振荡器
参考文章
- Eye Diagram[5]
- What does ppm mean?[6]
- 【 FPGA 】时钟抖动浅记[7]
- Clock Jitter[8]
- Jitter[9]
- Tutorial: Clock jitter measurement and effects[10]
注:本系列博文首发:https://www.ebaina.com/articles/140000005140
参考资料
[1]
高速串行总线设计基础(五)揭秘SERDES高速面纱之多相数据提取电路与线路编码方案: https://www.ebaina.com/articles/140000005095?utm_source=articleindex&utm_medium=list&utm_campaign=140000005095
[2]
高速串行总线设计基础(五)揭秘SERDES高速面纱之多相数据提取电路与线路编码方案: https://www.ebaina.com/articles/140000005095?utm_source=articleindex&utm_medium=list&utm_campaign=140000005095
[3]
【 FPGA 】时钟抖动浅记: https://blog.csdn.net/Reborn_Lee/article/details/84933106?ops_request_misc=%7B%22request%5Fid%22%3A%22160752917019721940234520%22%2C%22scm%22%3A%2220140713.130102334.pc%5Fblog.%22%7D&request_id=160752917019721940234520&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v1~rank_blog_v1-1-84933106.pc_v1_rank_blog_v1&utm_term=抖动&spm=1018.2118.3001.4450
[4]
Clock Jitter: https://vlsi.pro/clock-jitter/
[5]
Eye Diagram: https://www.sciencedirect.com/topics/engineering/eye-diagram
[6]
What does ppm mean?: https://www.adelaide.edu.au/arcpoh/dperu/fluoride/ppm.html
[7]
【 FPGA 】时钟抖动浅记: https://blog.csdn.net/Reborn_Lee/article/details/84933106?ops_request_misc=%7B%22request%5Fid%22%3A%22160752917019721940234520%22%2C%22scm%22%3A%2220140713.130102334.pc%5Fblog.%22%7D&request_id=160752917019721940234520&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v1~rank_blog_v1-1-84933106.pc_v1_rank_blog_v1&utm_term=抖动&spm=1018.2118.3001.4450
[8]
Clock Jitter: https://vlsi.pro/clock-jitter/
[9]
Jitter: https://en.wikipedia.org/wiki/Jitter
[10]
Tutorial: Clock jitter measurement and effects: https://www.planetanalog.com/tutorial-clock-jitter-measurement-and-effects/