XILINX GTX/GTP 使用小结
FPGA高速串行收发器GTPGTX
高速数据连接功能简介
10.1.1 高速数据传输的背景
由于现代通信以及各类多媒体技术对带宽的需求迅猛增长,促使一系列基于差分、源同步、时钟数据恢复(clockand data recovery,CDR)等先进技术的互连方式应运而生。在传统设计中,单端互连方式易受干扰、噪声的影响,传输速率最高只能达到200~250Mbps/Line;在更高速率的接口设计中,多采用包含有源同步时钟的差分串行传输方式(如LVDS、LVPECL等),但在传输过程中时钟与数据分别发送,传输过程中各信号瞬时抖动不一致,破坏了接收数据与时钟之间的定时关系,因而传输速率很难超越1Gbps/通道。因此迫切需要新的高速数据传输技术。
在目前系统级互连速率已达到Gbps的设计中,先进的高速串行技术迅速取代传统的并行技术,成为业界的主流。高速串行技术不仅能够带来更高的性能、更低的成本和更简化的设计,克服了并行的速度瓶颈,还节省了I/O资源,使印制板的布线更简单。因此,被越来越广泛地应用于各种系统设计中,包括PC、消费电子、海量存储器、服务器、通信网络、工业计算和控制、测试设备等。高速串行传输一般采用差分线,迄今业界已经发展出了多种串行系统接口标准,例如千兆以太网、万兆以太网、PCI-Express、串行RapidIO、串行ATA 等。
10.1.2 Xilinx公司高速连接功能的解决方案
基于高速的需求和传统技术的弊端,Xilinx公司在Virtex2 Pro以及更高系列的部分FPGA内部集成了能实现高速数据收发RocketI/O模块,采用了CML(CurrentModeLogic)、CDR、线路编码(8B/10B)和预加重等技术的RocketI/O硬核模块,可极大地减小时钟扭曲、信号衰减和线路噪声对接收性能的影响,从而使传输速率进一步提高,最高可达10Gbps以上,可用于实现吉比特以太网、PCI-Express等常用接口。
除了底层的物理层技术,Xilinx还提供带32 bitLocalLink用户接口的Aurora协议引擎参考设计。Aurora协议是为私有上层协议或标准上层协议提供透明接口的串行互连协议,它允许任何数据分组通过Aurora协议封装,并在芯片间电路板间甚至机箱间传输。Aurora链路层协议在物理层采用千兆位串行技术,每物理通道的传输波特率可从622Mbps扩展到3.125Gbps。Aurora还可将1至16个物理通道绑定在一起,形成一个16个通道绑定而成的虚拟链路,可提供50Gbps的传输波特率和最大40Gbps的全双工数据传输速率。Aurora可支持广泛的应用范围,如:路由器和交换机、远程接入交换机、HDTV广播系统、分布式服务器和存储子系统。在协议中,每个高速串行链接被称为“弄”。
协议引擎通过与高速收发器配合,可创建带LocalLink用户接口逻辑的串并、并串收发器。通过这一串行接口方案,用户无须自己设计有关串行接口所涉及的编解码、同步、速率匹配等问题。用户接口部分包含了所有必要的信号,如协议引擎的状态信号等。
Xilinx通过高品质的技术支持材料来支持其先进的芯片产品,这些材料包括广泛的知识产权核、参考设计、模拟电路模块、信号完整性(SI)设计套件、数字仿真的质量行为模型等。此外,Xilinx还提供了众多设计服务、开发平台以及最佳的FPGA实现工具,可确保用户的所有设计需求都能获得最佳产品和技术支持。
第2节实现吉比特高速串行I/O的相关技术
10.2.1 吉比特高速串行I/O的特点和应用
吉比特收发器(MGT)是吉比特级串行器/解串器(SERDES)的别名。
1.优点
1)速度高。高速串行I/O的线速可超过吉比特,甚至数十吉位。而并行传输线速不可能超越吉比特。吉比特串行I/O的主要优势是速度。在从片内/片外、板内/板外或盒内/盒外获取数据时,没有任何技术可以超越高速串行链路。高速串行链路的线速范围为1Gb/s~ 12Gb/s,有效负载范围为0.8Gb~10Gb。
2)节省管脚数。将大量数据传入/出芯片或电路板时所遇到的第一个问题是引脚数,电路板设计时间和成本会随着管脚数的增加而急剧增加。在大数据量应用下,串行I/O可节省大量的管脚(在低速以及小数据量应用中,MGT比传统并行模式需要更多的电源和接地引脚)。
3)简化同步转换输出。采用单端并行总线时,设计者应考虑同步转换输出(SSO,即大量寄存器的值在某一时刻同时翻转,会对电源和地平面产生一定的影响,甚至影响到器件内部时钟和逻辑的正常工作)。如果出现太多的同步转换,触地反弹会产生大量噪声。设计者还可以在所有I/O上都使用差分信号处理技术,以此来消除SSO问题,但是这样做就会使引脚数翻倍。如果数据流需求比较适中,设计者可以使用具有适当引脚数的并行接口。
4)EMI指标优。经验表明:时钟越快,放射测试就越难进行,因此,吉比特设计的EMI测试看起来是不可能实现的。但是,通常高速串行链路的辐射量比以较低速度工作的大型总线低。这是因为运行时的吉比特链路需要出色的信号完整性,正如经典论断“辐射问题实际上就是信号完整性问题”所言,因此吉比特串行IO具有更好的EMI指标。
5)成本低。采用MGT通常会降低系统总成本。连接器采用较小、较经济的封装时,引脚数较少,电路板设计也更简单。
6)预设协议。采用MGT的另一个好处是可以使用预先定义好的协议和接口标准。如Xilinx提供了从Aurora到XAUI的多种协议,满足不同的用户需求。
2.缺点
吉比特高速串行I/O的最大缺点在于对信号完整性的严格要求。而且,阻抗控制的PC(印刷电路)板、高速连接器和电缆的费用较高。因此,必须处理数字仿真中的复杂性和时基较小的问题。并且,在利用预设协议的时候,必须为集成过程计划时间,以及为协议的开销安排额外的逻辑电路或CPU时钟周期。
3.应用范围
起初,吉比特级串行器/解串器(SERDES)仅局限于用在电信行业和少数缝隙市场(如广播视频)。如今,MGT应用出现在电子行业的各个角落——军事、医疗、网络、视频、通信等等。MGT也可以用于背板或机箱之间的PCB上。对于电子行业的发展前景而言,MGT至关重要。下面是采用吉比特级SERDES的行业标准示例。
·光纤通道(FC)
·PCI Express
·RapidIO串行
·先进的交换互连(Advanced Switching Interface)
·串行ATA
·1Gb以太网
·10Gb以太网(XAUI)
·Infiniband 1X、4X、12X
吉比特级通信似乎强加了一些苛刻限制。串行设计者必须考虑信号完整性、较小的时基以及可能出现的对额外门电路和CPU周期的需求。但是,在盒间以及芯片间通信中采用吉比特级技术的优势远远超过了那些可以察觉到的缺点。例如:高速、引脚数少、低EMI和低成本等,这些都使它成为了众多高速设计的理想之选,并保证了其在未来通信系统中得到广泛的使用。
10.2.2 吉比特串行I/O系统的组成
吉比特串行传输是一种通用的传输标准,虽然不同FPGA厂家的模块和组件名不同,但其关键技术都具备下列共同点。
1.系统整体结构
吉比特串行传输的系统整体结构如图10-1所示。下面对其中的主要模块进行简要介绍。
图10-1 吉比特高速串行I/O的系统结构示意图
串行器:将速率为y的n位宽并行数据转变成速率为n*y的串行数据。
解串器:将速率为n*y的串行数据转变成速率为y的n位宽并行数据。
Rx(接收)对齐:将接收的数据对齐到合适的字边界。可以使用不同的方法,从自动检测和对齐特殊的预留比特序列(通常也称作comma字符),到用户控制的比特调整。
时钟管理器:管理各种时钟操作,包括时钟倍频,时钟分频,时钟恢复。
发送FIFO(先进先出):在输入数据发送之前,暂时保存数据。
接收FIFO:在接收数据被提取之前,暂时保存数据。在需要时钟修正的系统中,接收FIFO是必须的。
接收线路接口:模拟接收电路,包括差分接收器,还可能包括有源或者无源均衡电路。
发送线路接口:模拟发送电路,可以支持多种驱动负荷。通常还带有转换的预加重部分。
线路编码器:将数据编码成适应不同线路的格式。编码器通常会消除长的无转变位的序列,同时还可以平衡数据中0、1的出现次数。需要注意的是,线路编码器是一个可选模块,某些SERDES可能没有。
线路译码器:将线路上的编码数据分解成原始数据。(这是一个可选模块,编码可能在SERDES外完成)。
时钟修正和通道绑定:修正发送时钟和接收时钟之间的偏差,同时也可实现多通道间的歪斜修正。(通道绑定是可选的,并不一定包含在SERDES中)。
其他可能包括的功能模块有:循环冗余检测(CRC)码生成器、CRC检测器、多种编码
和解码(4b/5b、8b/10b、64b/66b)、可调的扰码器、各种对齐和菊花链选项、可配置的时钟前端和后端以及不同等级的自环。
2.参考时钟的要求
1)时钟精度
吉比特级收发器的输入时钟、或是参考时钟的规格定义是非常严格的。其中包含非常严格的频率要求,通常用每百万次容许频率错误的单位PPM来定义。抖动要求也是十分严格的,通常用时间(皮秒)或者时间间隔(UI)定义。下面给出这些相关定义。
·PPM:百万分之一;用来描述非常小的比率。
·UI:时间间隔;等价于一个符号的时间长度,例如:0.2UI = 20%的符号时间。
·抖动:理想传输位置的偏差。
如此严格的规定才使得PLL和时钟提取电路能够正常工作。通常系统的每一个印刷电路板都需要有一个精确石英晶体振荡器供MGT使用。这些晶体振荡器的精确度比大多数用在数字系统中的晶体振荡器要高一个级别,而且价格也要高出一截。很多情况下,一般的时钟
发生芯片和PLL因为带有很大的抖动,而不能用于MGT。
2)时钟修正策略
传输时钟有非常严格的抖动要求,所以吉比特SERDES通常不能将恢复时钟作为传输时钟。每一个PCB集合都有唯一的振荡器和唯一的频率。如果两个1GHz的振荡器仅仅有1PPM的频差,同时我们提供1/20的参考时钟,则数据流的时钟每秒钟可能会增加或者缺失20,000个周期。因此,在8b/10b编码的系统中,每秒将会额外增加或者损失2万个符号。
大多数的SERDES都有时钟修正选项。时钟修正需要使用唯一的符号或者符号序列,它们在数据流中是不会出现的。因为时钟修正是对齐的后续处理,所以可以比较容易地通过保留一个K字符、或者一组有序的K字符、或者一个时钟修正数据序列来实现。时钟修正进行的频数必须足够多,从而可以通过丢弃或者重复来补偿时钟的差异。当然,有些系统并不需要时钟修正。例如,相同的参考时钟和相同的速率意味着不需要进行时钟修正。同样,如果所有接收电路的时钟都来自恢复时钟,那么时钟修正也是不需要的。如果FIFO的写入速率和读出速率相等,也没有必要进行时钟修正。如果所有的传输参考时钟都是通过一个外部的PLL锁定在一个公共的参考频率上,那么也不需要时钟修正。
3线路编码机制
线路编码机制将输入的原始数据转变成接收器可以接收的格式。同时,线路编码机制还必须保证有足够的切换提供给时钟恢复电路。编码器还提供一种将数据对齐到字的方法,同时线路可以保持良好的直流平衡。线路编码机制也可选择用来实现时钟修正、块同步、通道绑定和将带宽划分到子通道。线路编码机制主要有两种:数值查找机制和自修改数据流或扰码器机制。目前常用的有:8B/10B编码、4B/5B编码以及扰码。
1)8b/10b编码
8b/10b编码机制是由IBM开发的,已经被广泛采用。8b/10b编码机制是Infiniband,吉比特以太网,FiberChannel以及XAUI 10G以太网接口采用的编码机制。它是一种数值查找类型的编码机制,可将8位的字转化为10位符号。这些符号可以保证有足够的跳变用于时钟恢复。8b/10b编码具有良好的直流平衡特性,通过“运行不一致性”的方法来实现,即只使用有相同个数0和1的符号,但这会限制符号的数量。同时,8b/10b中的comma字符(用于表示对齐序列的一个或两个符号)可辅助数据对齐。
8b/10b机制能带来字对齐、时钟修正机制、通道绑定机制和子通道生成等功能,其唯一的缺陷是开销。为了获得2.5Gbit的带宽,它需要3.125Gb/s的线路速率。从减小开销的角度讲,下面所讲述的扰码技术可以很容易地解决时钟发送和直流偏置问题,并且不需要额外的带宽。
2)4b/5b编码
4b/5b和8b/10b是类似的,但是要简单些,将4个比特编码成5个比特。4b/5b的控制字符要少一些,但不能处理直流平衡和不一致性问题。由于编码开销相同但是功能却比较少,4b/5b编码机制并不经常使用。它的最大优势是设计的尺寸,不过随着逻辑门价格的降低这个优势也不再明显。目前,4b/5b仍用在各种低速标准中,包括低速率版本的光纤通路、音频标准AES-10以及多通道数字音频复接标准MADI接口中。
3)扰码
扰码是一种将数据重新排列或者进行编码以使其随机化的方法,但要求必须能够通过解扰恢复。加扰的目的就是打乱长的连0和长的连1序列,将数据随机化。一般将那些在解扰时不需要额外对齐信息的扰码称作自同步码。扰码发生器通常由移位寄存器组成,所占用的硬件资源很少。
扰码器消除了长连0和长连1序列以及其它会对接收器接收能力有负面影响的序列,但并不能取代8b/10b编码。在实际中,由于存在不允许的数值,所以需要设计数据流中不能出现连0或连1的长度。长的连0、连1会被扰码器打乱,并在解扰时进行恢复。接收数据流的解扰逻辑在数据流中搜寻这些符号并对齐数据。
4.接收和发送缓冲器
接收和发送缓冲器,是吉比特级收发器的主要数字接口,通常是高速FIFO。发送端通常有一个小型的FIFO,它要求读取和写入的时钟是等时同步的(频率匹配但相位不一定匹配)。如果接收和发送的选通信号不是工作在精确相同的频率,则通常需要使用一个较大的FIFO,并持续检测FIFO的当前状态。如果FIFO被不断地填充,将最终导致溢出。在这种情况下,必须在输入数据流中检测idle符号。如果检测到idle符号,则不把idle符号写入FIFO;反过来,如果FIFO运行较慢则在输出数据流会出现idle符号,数据被传送给用户。此时写指针保持不动,不断重复idle符号。相对于发送缓冲器而言,MGT内建的接收FIFO通常需要有更深层次的考虑。它的主要目的是为了实现时钟修正和通道绑定。
5.线路均衡
线路均衡主要用于补偿由频率不同而引起的阻抗/衰减差异。均衡器有很多种形式,但总体上可以分为有源和无源两种。均衡器通常包含在SERDES的模拟前端,或者作为系统的一个独立部分。
1)均衡技术简介
无源均衡器是无源电路,其频率响应可以补偿传输衰减。它也可以看作一个滤波器,将传输线所使用的各个频率通过,而将传输线没有使用的其他频率滤除,那么整体的频率响应就会变得平坦许多。有源均衡器可以认为是依赖频率的放大器/衰减器。
有源均衡器主要有两种:固定形式有源均衡器和自适应有源均衡器。对于任意的输入数据流,固定形式有源均衡器的频率响应都是一样的。固定形式均衡器比较适合于不变系统中,例如:芯片到芯片,平衡化的背板系统以及固定长度电缆的系统;自适应均衡器要复杂的多,自适应均衡器需要分析输入信号并检测哪些频率在传输通道中被削弱。在该均衡器中,测量和调节是以闭环形式实现的。自适应均衡器的频率响应取决于输入的比特流,它通常和特殊形式的线路编码机制协同工作。自适应均衡器对于可变通道的链路来说是最合适的,可变通道可以是可变的电缆长度,或是显著的位置依赖的背板系统。
2)预加重/取加重技术
预加重是一种非常普遍的均衡技术。在发送端,通过增加一串相同符号中首位符号的输出级,降低随后符号的输出级,来预先抬高输出信号频谱中的高频分量,补偿传输通道的低通滤波效应。这样,在接收端就可以得到相对均衡的眼图,使接收器能够准确地接收和恢复信号。这种技术对于高数据速率的设计而言,简单而有效。发送预加重技术主要是通过采用FIR多抽头的有限冲激响应均衡滤波器来实现的。输入到滤波器中的是当前、过去和将来要发送的数据位。滤波的系数取决于通道特性,最佳的滤波长度取决于影响当前正在发送数据的比特数量。在具体实现中,一般采用二抽头FIR,进行双电流控制。在电路转换时,为了克服传输通道的滤波效应,发送器分发额外的动态电流。在转换后,则提供一个更低的驱动电流。不同的通道损耗补偿需要不同程度的信号预加重;因此,在发送器设计中,预加重功能一般是编程可控的。为了和发送端预加重相匹配,则在接收端必须有去加重。
6.数据包的概念
通过吉比特串行链路传输的数据大都是嵌入在某种类型的数据包中的。包是一种确切定义的字节集合,包括头部、数据和尾部。如果系统通过包来完成时钟修正,发送特殊的比特序列或者comma字符。时钟修正序列常常是比较理想的字符,comma字符是指示帧的开始和结束的天然标识。在数据中加入有序集合用于指示包的开始、结束以及包的特殊类型之后,就构成了简单而高速的传输通道。其中,空闲符号(Idle)或序列是包的概念的另一要点。如果没有信息需要发送,则发送idle符号,从而保证数据的连续传输并使其保持对齐,
10.2.3 吉比特串行I/O的设计要点
解决工程问题的关键在于充分的理解。在设计吉比特级收发器时,面临的挑战包括:理解收发器协议、信号完整性、阻抗和功率要求、屏蔽性要求、印刷电路板(PCB)设计要求以及连接器和电缆的选择要求。
1.电源
电源传送也是使用吉比特级收发器时需要考虑的重要因素。多数的MGT都需要多个电源供电。典型的电源包括:RX模拟电源、TX模拟电源、模拟地、RX终端电压、TX终端电压、数字电源以及数字地。所有的模拟发送和接收电源以及相关的模拟地必须是极其干净的,这一点是十分重要的。所以,MGT制造商通常都会使用特定电路。因此至少要求每个电压值都有各自的模拟电压校准器(如果不是每个MGT都有各自独立的校准器),并且要求使用无源的电源滤波器(由一个电容和一个铁氧体磁珠组成)。典型的电源滤波电路如图10-2所示。
图10-2 MGT电源滤波电路
某些MGT将电容包含在封装的内部,此时通常只需要铁氧体磁珠。如果制造商建议使用特定电路,则通常最好遵从其建议。原因之一是,在公共部分配置了多个MGT的情况下,通常只需要一个单独的线性调整器即可。滤波器电路可以防止电源噪声进入MGT,同时它还可以防止来自某个MGT的噪声滤进其它MGT。此滤波器既是输入滤波器也是输出滤波器。有时制造商会基于自己所需的输出滤波性能,在输入滤波器和输出滤波器性能间做出折衷。
2.匹配电阻
实现信号完整性的第一步就是在差分传输线上传送这些信号。根据通常的定义,传输线都有一定的固定阻抗。实际上,阻抗值并不是恒定的,而是变化的。这个问题在下面的几种情况下尤其突出:信号由一层转移到另一层时,信号遇到元件的焊盘时,或信号通过连接器或电缆时。当运行在吉比特级速率范围内,些许的阻抗增加都会是潜在的问题。吉比特级链路需要使用阻抗无限制通道,否则其无法工作。
我们需要对传输通道进行模拟,并在布线之前使用CAD的信号完整性工具来最终确定连接器和电缆。我们在获取初始原型时,需要用时域反射测量法(TDR)来检验通道的阻抗。100欧姆和50欧姆的传输线是最常用的传输线。部分收发器可以适配两种传输线,而部分收发器可能只能支持其中的一种。对于10Gb/s范围的应用,50欧姆显然是最通常的选择。如果收发器同时支持100欧姆和50欧姆,那么连接器和电缆的选择问题应当慎重考虑。
3.印制电路板的设计
对于优秀的PCB设计者来说,设计用于吉比特级操作的PCB也会是一个挑战。设计者需要注意:差分线路必须匹配,阻抗受限的差分线路的几何形状必须随着层数的增加而相应变化,电源分配也必须严格分析。因为可能存在成千上万的独立的设计折衷和决定,所以全面列出所面临的问题可能会有所帮助。主要包括如下的几个方面:
·材料选择
·叠层结构/板厚度
·电源层和地层
· 差分线路对
·差分线路的宽度和间隔
·过孔
·线路对之间的间隔
·电源布局
在实际设计中,必须参考不同FPGA厂家对PCB设计的详细说明文档,否则系统很可能不能正常工作。
4.数字设计部分
吉比特级链路的模拟仿真需求让我们进入了一个崭新的EDA工具世界,而其数字部分的影响则要小得多。尽管如此,数字仿真时还是有几个事项需要考虑的。
1)MGT行为模型都是以特殊的加密形式出现的。这些模型都是复杂的内核,而且都是非常有价值的知识产权(intellectual property,IP)核。所以,厂商为了保护他们的知识产权,通常只会以IP-safe的格式发布这些模型。最流行的格式称作smart模型或者swift。通常,模型经过加密后,仿真器可以读取模型但是用户不能。模型内部的节点和层次对于用户来说是不可见的;用户只能看见模型的输入和输出。
2)数字仿真
MGT数字仿真的另一个问题是仿真速度。通常的数字电路大多数工作在100-300MHz的范围,因此。需要把仿真的时标调整到几个纳秒。但是如果添加一个MGT的线速度模型,则信号速度就会比之前最快的信号还要快20倍以上。MGT模型都有一个并行的输入和输出端口,因此如果在大多数的测试台中使用这些措施,并创建一个实际运行在全数据速率的小型测试组件,则MGT对全局验证时间的影响将会大大减小。
第1节 基于Rocket I/O高速串行技术
10.3.1 Rocket I/O技术简介
Rocket I/O是一种高速的串行收发器,采用两对差分对来进行数据的发送和接收,可以实现两个单工或一对全双工的数据传输。Rocket I/O支持从622 Mbps至3.75Gbps的全双工传输速率,还具有8B/10B编解码(平衡编码)、时钟生成及恢复等功能,可以理想地适用于芯片之间或背板的高速串行数据传输。Aurora协议是为专有上层协议或行业标准的上层协议提供透明接口的第一款串行互连协议,可用于高速线性通路之间的点到点串行数据传输,同时其可扩展的带宽,为系统设计人员提供了所需要的灵活性。
Rocket IO收发器发送和接收串行差分信号,工作于2.5V的直流电压下,采用CML(Current Mode Logic)模式,内部带有50Ω或75Ω的匹配电阻。此外,Rocket IO采用了预加重技术,可以补偿传播媒质中的高频损耗,极大地降低了共模信噪比和线路衰减。由香农公式:
可以得到,当信道容量一定时,信道带宽W的增加会造成信噪比下降。由于Rocket IO单路传输速率最高可达3.75 Gbps,因此可允许很低的信噪比。总体来讲,Rocket IO的显著特点包括:
·速率范围介于100Mbp到3.75Gbp之间;
·业内最低的功耗:在3.2Gbps下每个通道的功率均低于100mW;
·可在单个FPGA中实现多个协议(标准的和定制的);
·设计用来与Virtex-5 LXT和SXT平台FPGA内的PCI Express®端点与三态以太网 MAC模块一起使用;
·符合芯片到芯片、背板与光学器件接口的常见标准和协议;
·先进的Tx/Rx均衡技术,可以驱动背板和其它困难通道;
·内置式PRBS发生器/检验器可以加速调试;
·在Virtex-5 LXT平台器件中的收发器多达24个;
10.3.2 Aurora协议
1.Aurora协议简介
Aurora是一个相对简单的协议,只控制链路层和物理层。Aurora的设计理念是使其它高层协议,例如TCP/IP和以太网,可以很容易的运行在Aurora之上。Aurora协议使用1个或多个高速的串行通道构成更高速的通路,如图10-3所示。
图10-3Aurora链路结构示意图
Aurora不仅定义了物理接口,而且定义了包结构、嵌入其它协议包的推荐程序、数据提取和流量控制。协议中定义了有效链路的初始化程序,同时还描述了禁止使用发生过量错误的链路的相关程序。由于协议中没有寻址时序,所以不支持交换。协议中也没有定义错误检测、重传或有效载荷的纠错。此协议是由Xilinx开发的,并且无限制地开放给公众自由使用,也可以将Aurora数据包加载到其他协议。
2.定制协议
在某些情况下,用户可能希望制定自己的协议。特别是当标准协议不能满足要求,或者标准协议对于用户的应用来说太过宽泛时,制订用户自己的协议是个很好的选择。当然,有时用户可能也需要一个新的复杂协议,但是这种情况通常留给制定标准的专业协会。这里我们给出一个简单的例子,来了解在制定自己的协议时应当考虑的各种事项。在这个简单的应用中,需要将恒定的1.8 GHz信号流从一块板传送到另一块板。系统的输入输出使用12位的总线,工作在150MHz。针对这个简单的应用需求,协议中需要定义的内容包括:数据帧结构、对齐和idle(空闲)字符。此例中,我们使用8b/10b作为线路编码机制,并从其它8b/10b标准中借用标记及comma字符的定义。链路的基本结构如图10-4所示。
图10-4 基本帧结构
首先需要为SF(帧开始)、EF(帧结束)和idle(空闲)指定字符或者有序的字符集,之后再确定线路速率和数据帧大小。适当设置数据帧的大小,以保证对齐时有充足的SF符号,并且进行时钟修正能够有足够的idle符号。如果要传送1.8 GHz的载荷,那么传输线速率为2.5Gb/s,其有效载荷速率为2Gb/s,可以满足1.8GHz的数据需求,其额外的容量还可用于所需开销。
10.3.3Rocket I/O硬核模块的体系结构
Xilinx公司不同的系列芯片中集成的RocketIO是不同的,本节以经过大量应用的Virtex-2Pro系列为例进行介绍。
1.Rocket IO架构
Virtex-2 Pro系列FPGA最多可包含16个Rocket IO模块,基本上分布于FPGA的上下两端,如图10-5所示。每通道可提供622Mbps~3.125Gbps的传输能力,且不需要在发送端配置串行数据速率,这是因为接收端的工作时钟是从接收数据中提取出来的。
图10-5Rocket IO在Virtex-2Pro芯片中分布示意图
Rocket IO包括PMA(Physical Media Attachment,物理媒介适配层)和PCS(PhysicalCoding Sublayer,物理编码子层)两个子层,其内部结构如图10-6所示。其中PMA子层主要用于串行化和解串,PCS主要包括线路编码和CRC校验编码。
图10-6Rocket I/O收发器的内部结构示意图
PMA子层中集成了SERDES,发送和接收缓冲,时钟发生器及时钟恢复电路。SERDES是一个串并转换器,负责FPGA中本地的32位并行数据(也可以是16位或8位)与Rocket IO接口的串行数据之间的转换。采用串行数据收发,可以在高频条件下很好地避免数据间的串扰。时钟发生器及时钟恢复电路用于将时钟与数据绑定发送,以及将时钟从接收到的数据流中恢复出来,从而避免了在高速传输条件下时钟与数据分开传输所带来的时钟抖动等问题。
PCS子层负责8B/10B编码解码和CRC校验,并集成了负责channel绑定和时钟修正的弹性缓冲。8B/10B编码可以避免数据流中出现连0连1的情况,便于时钟的恢复。channel绑定通过在发送数据流中加入P字符来将几个RocketIO通道绑定成一个一致的并行通道,从而来提高数据的吞吐率。最多支持24个通道的绑定。弹性缓冲可以解决恢复时钟与本地时钟的不一致问题,并进行数据率的匹配,从而使得channel绑定成为可能。对Rocket IO模块的配置,可以通过下面两种方式进行:静态特性可以通过HDL代码设置;动态特性可以通过Rocket IO的原语端口进行配置。
2.Rocket IO硬核模块说明
Rocket IO硬核模块可通过原语和CoreGenerator调用,其模块结构如图10-7所示。可以看出,该硬核分为时钟合成器、时钟和数据恢复器、发送器、接收器、环回器、缓冲器、CRC校验模块、配置模块以及复位模块等九个主要组成部分。
1)时钟合成器
在实际设计中,高性能的通信质量要求有高稳定性和高精度的时钟源,而抖动和频偏是衡量时钟源的两个重要指标。RocketI/O内部的工作时钟需要将输入时钟经过数十倍的倍频,但其可容忍的时钟偏差为40ps,因此建议选择高精度的差分时钟。Xilinx公司推荐选用Epson EG22121CA 2.5V(LVPECL Outputs)或者Pletronics LV1145B(LVDS Outputs)晶振。当Rocket I/O在2.5G波特以上时,参考时钟应采用差分输入方式(如LVDS、LVPECL),由专用差分时钟引脚输入,然后引到相同或相邻通道中RocketI/O的参考时钟输入端;当RocketI/O在2.5G波特以下时,不要使用FPGA内部的DCM模块来产生参考时钟,因为经过DCM倍频的时钟会引入较大的抖动,使RocketI/O的接收锁相环无法稳定地锁定发送时钟。
Rocket IO采集数据的同步时钟则是通过时钟/数据恢复电路来提取的,该电路由一个单片的PLL集成块实现,不需要任何外部组件。恢复电路从接收的数据流中提取出时钟的频率和相位,并通过20倍分频后送到输出管脚RXRECCLK上。
图10-7Virtex-2 Pro系列Rocket IO模块说明
当高精度输入到FPGA中后,吉比特发送器对参考时钟输入管脚REFCLK的信号完成20倍倍频操作后,来作为自己的工作时钟。同样,该倍频器已集成在芯片中,不需要额外的组件。RXRECCLK和REFCLK二者之间没有固定的相位关系,且都为专用时钟信号,不能连接到其他管脚上作为他用。当使用4字节或1字节数据接收路径时,RXUSRCLK和RXUSRCLK2具有不同的频率,但是频率低的时钟下降沿要和频率高的时钟下降沿对齐。同样的关系也适用于TXUSRCLK和TXUSRCLK2信号。
例如,在Virtex-2Pro系列FPGA中,由于Rocket IO模块内部将输入参考时钟20倍频,而Rocket IO模块可容忍的输入参考时钟抖动公差仅为40ps,可见参考时钟的抖动对其性能有直接影响。
典型的时钟输入如图10-8所示,外部时钟由差分或单端引脚馈入后,只经过一级全局时钟缓冲(BUFG)布设到时钟树上,再连接到Rocket I/O的参考时钟上,可最大幅度地减小抖动。
图10-8Rocket I/O的时钟、复位连接示意图
2)时钟和数据恢复器
如果没有数据存在,时钟/数据恢复器(CDR)电路会自动锁相到参考时钟上。为了使操作达到最佳性能,参考时钟的精度必须在100ppm之内。同时要满足供电系统的低噪声。如果有数据,则恢复电路会自动同步锁相到输入数据上。
3)发送器
发送器模块包括发送接口、8B/10B编码器、不均匀控制、发送FIFO、串行器、发送终端以及预加重电路。
(1)FPGA发送接口
发送接口可发送1、2或4个数据字符到发送器,每个字符都是8比特或10比特位宽。当选择8比特位宽时,多出的两比特就变成8B/10B编码器的控制信号。如果同时将8B/10B编码旁路后,10比特字符的顺序如图10-9所示。
图10-9 旁路掉8B/10B编码后的字符顺序
(2)8B/10B编码器
8B/10B编码器是一个可选的硬件组件,意味着它可以被旁路掉。在吉比特以太网、光纤信道以及infiniBand应用中,编码器都是用256个字数据符和12个控制字符。编码器在K-字符(单比特)后读入8个数据比特,由这9个比特数据生成10比特编码输出。当K-字符为高时,数据将被编码成8B/10B码中可用的12个K-字符组合中的1个;当K-字符为低时,8比特数据将被标准编码。
线路编码将8个数据位转换为不连续五个以上的“1”或“0”的10位比特码,以获取更好的直流平衡性,能提高数据传输速率、平衡码流中“0”、“1”概率,并且可以减小码流中长连“0”和长连“1”串。
8b/10b编码是属于基于块编码的mbnb线路码中的一种,很多串行标准Infiniband、光纤通道千兆以太网ATM ESCON和DVB-ASI都针对原始数据流采用8B/10B编码和解码。其编码过程是将8个比特分成5B/6B与3B/4B两部分分别编码,如图10-10所示。
图10-108B/10B线路编码原理
8b/10b编码集合中包括数据字串和控制字串两部分数据字串,包括256个可能数值。其中,包括可作为控制字串K23.7 K28.0~K28.7 K27.7 K29.7 K30.7的码字。当传送的字串作为控制字串时,由Rocket IO模块相应的控制字标志输入引脚,如TX_CHARISK指定该字为控制字串。尽管8B/10B编码后,数据的传输效率只有80%,但还是在各类应用中获得广泛应用,其原因在于下面几个方面:
①转换密度:其目的是保证在发送数据流中有足够的信号转换,以保证PLL正常工作。如果没有8B/10B 编码方法,数据中的一串1或0有可能引起接收时钟漂移或同步丢失,从而引起数据丢失。
② DC补偿:8B/10B还保证对信号进行DC补偿,这意味着链路中不会随着时间推移而出现DC偏移,8B/10B编码将用户数据按字节8位块变换成多个10位的输出值,用这些值进行DC补偿。
③纠错:8B/10B编码遵循特定规则,根据这些规则,很多信号传输错误都可立即检测出来。
④特殊字符:8B/10B编码采用10位字符,其数量是8位字符空间中字符数的4倍,这样可以将特殊字符编码放入数据流中,它们不会被解码成数据字符,这些特殊字符可用作分隔符或其他命令。
8B/10B模块在设计中可以旁路掉,也可以用其余的线路编码方式代替,如64B/66B编码等。将发送器的TXBYPASS8B10B[n]控制信号设置成1,则可将发送端的线路编码模块旁路;在接收器中将RX_DECODE_USE设置为FALSE,就可把接收端的解码模块旁路。
在实际设计中,依据互连双方接口的电气标准的不同,有两种耦合方式:直流耦合和交流耦合。在直流耦合方式下,并不一定要求采用8b/10b编码,可以选择其它的线路码型或不用线路编码。但在较高的传输速率条件下,如2.5Gbaud以上,为了达到良好的抗干扰性能和低的误码率,应该考虑采用8b/10b编码。而在交流耦合方式下必须要选择8b/10b编码,否则接收端的漂移会使接收器无法正常工作。
(3)不均匀性控制(Disparity Control)
8B/10B编码器被连续的“-”不均匀初始化,统一控制当前状态为不均匀性运行状态。TXRUNDISP表明了不均匀性的状态。
TXCHARDISPMODE和TXCHARDISPVAL可控制对每个接收字节使能不均匀性控制。例如,收发器可通过反向指定第二、第四字节的running disparity,产生以下序列:
K28.5+ K28.5+ K28.5– K28.5– 或 K28.5– K28.5– K28.5+ K28.5+
(4)发送FIFO
发送FIFO的长度为4,可通过配置旁路掉。只要当信号TXUSRCLK锁频到参考时钟REFCLK上,就可以使用FIFO,允许1个时钟周期的相位差。
(5)串行化输出接口
由于Rocket IO将参考时钟完成20倍频作为自身的工作时钟,因此数据需要经过并串转换后,才能通过TXP和TXN这一对差分端口发送出去,其中时隙0发送第一个比特,时隙19发送最后一个比特。TXP和TXN的电气连接特性是配置可改变的,可通过发送端的控制输入信号TXPOLARITY来实现。如果PCB上连线接反的话,可通过对TXPOLARITY信号的编程来修正。
(6)发送终端
发送器提供了发送终端,有75欧姆和50欧姆两种可编程终端,无需额外的片外终端。默认值为50欧姆。
(7)预加重
预加重的原理如10.2.3节所述,在Rocket I/O中,预加重电路有4个可选程度:10%、20%、25%以及33%,默认值为10%,可通过编程实现。选择最佳的预加重参数,可使发送器以最高波特率驱动20英寸的FR4。
4)接收器
接收器模块主要包括解串器、接收终端和8B/10B解码器。下面进行简要介绍。
(1)解串器
Rocket I/O收发器核通过RXP和RXN这一对差分接口接收差分数据,并通过芯片内部的锁相环从中提取时钟,再按照此同步时钟来采样数据,无需片外PLL芯片。从数据中提取的同步时钟包括频率和相位信息,经过20分频后送到RXRECCLK。
接收端不仅可以处理跳变丰富的8B/10B编码流或加扰流,也可以处理没有跳变的连续的75比特数据流。如果使能了comma检测器,收发器可能识别的字符最多为两个10比特预编码字符。如果检测到字符/字符串,comma检测器输出将被拉高,并且数据将被同步排列,这时不会发生队列更替的现象。如果收到一个comma且队列需要重排时,数据则会被重新排列,并在接收端给出指示信息,此时,收发器会连续检测数据,寻找10比特预编码字符。如果将comma检测旁路掉,数据将不会在任何模式下重排。
可编程选项允许用户以comma+、comma-、comma+与comma-混合或用户自定义的序列来排列数据。此外,接收器也允许更改RXP和RXN上差分信号的极性,在PCB电路设计极性颠倒的情况下非常有用。
(1)接收终端
接收机提供了片上的接收终端,可配置为50欧姆或75欧姆,默认为50欧姆。
(2)8B/10B解码器
8B/10B解码器是和编码器配对出现的,如果发送端存在编码器,则接收端也必须具备该模块,不能旁路。
5)环回器
为了便于测试RocketI/O,提供了两类可编程的环回器,它们无需在外部添加吉比特的数据端和测试终端。
一种方法是串行环回,将吉比特发送端的数据直接送到吉比特接收端,可以验证Rocket I/O模块发送端和接收端的完整性,该环回路径在发送端的输出端口上。
另一类是并行环回,用于检查整个传输电路的正确性。当使能并行环回时,串行环回的功能将失效。但是发送端的输出仍然保持有效,且可将数据通过链路发送出去,如果将TXINHIBIT拉高,则TXP将被强制为0直到TXINHIBIT重新拉低为止。
6)弹性传送缓冲器
(1)接收缓冲器
接收缓冲器为深度64、位宽13比特的FIFO,写时钟为恢复时钟RXRECCLK,读时钟为RXUSRCLK,其作用有两个:一是用来调节读、写时钟的相位差和频率差;另一个是支持通路绑定,允许将接收流重组,以便被多个收发器读取。此外,接收缓冲器是一个弹性缓冲,其“弹性”特征指的是,可以修正其读取指针。
当然,接收缓冲器可以被旁路掉,其控制属性为:
RX_BUFFER_USE = FALSE
在该模式下,不能完成时钟校正和通路绑定,RXUSRCLK必须由RXRECCLK直接产生,但由于布线等因素,二者的相位是无法预测的,无法保证接收端可靠地接收数据。因此,一般不允许将该缓冲器旁路。
(2)接收端时钟校正器
在发送端,每隔一定的包长都会插入一些特定的修正字符,在接收端这些字符仅用来实现时钟校正,然后就会被丢掉。恢复时钟RXRECCLK的频率反映了到来数据的速率,时钟RXUSRCLK定义了FPGA接收数据的速率,在理想情况下,二者应当是同步的,即频率和相位都一致。但由于在实际中,它们来自不同的时钟源,属于异步时钟,再加上抖动,因此频率、相位上肯定存在一定的偏差,二者需要通过接收缓冲来调节。常见的异步时钟情况如图10-11所示。
(a) 理想情况下(读时钟=写时钟)缓冲器半满示意图
(b) 读时钟>写时钟时,缓冲器少于半满示意图
(c) 读时钟<写时钟时,缓冲器多于半满示意图
图10-11 不同读写时钟模式下缓冲器状态示意图
其中,(a)是理想情况,弹性缓冲器的读时钟RXUSRCLK和写时钟RXRECCLK保持同步,缓冲器处于半满状态;当没有接收到有效数据时,接收数据将插入空闲(Idle)字符以及其余无效数据。(b)情况下读时钟快于写时钟,缓冲器将出现读空的状态,为了避免这个后果,需要进行一些重复读取或空读的操作,调整读数数据指针,对时钟完成降低校正;如果字节序列长度大于1,且属性CLK_COR_REPEAT_WAIT为0,则接收端会重复读取相同的内容,一直到缓冲器的长度达到理想的半长。(c)情况下,读时钟慢于写时钟,缓冲器将出现溢出的状态,为避免该后果,需要丢掉一些数据,调整数据指针,对时钟完成加快校正;当CLK_COR_REPEAT_WAIT为1时,接收端会跳过两个连续的、可删除的字节序列来清空缓冲器。因此,时钟校正器总是保持缓冲器处于半满状态。
以上操作要求时钟校正逻辑能够识别那些需要重复和删除的字节序列,这些冗余序列都是在发送端插入的。此外,时钟校正和振荡器的频率、关系很大,因此晶振的精度一般应该在50ppm以内。
(3)通道绑定
通道绑定是指将多个串行通道组合在一起构成一个并行通道,以此来提高收发的数据吞吐率。由于每个通道在收发器互连时钟再生和数据接收延迟上各不相同,会使接收到的数据产生“错位”的情况,因此要在发送端数据流中加入一个特殊的序列——通道绑定序列,如图10-12中的“P字符”。每个绑定通道都设定“P字符”为通道绑定序列,在接收端指定一个通道为主通道,其余通道都依据主通道的CHBONDO有效指示进入绑定状态,进而锁定本通道在Elastic Buffer中接收到通道绑定序列的位置。由弹性缓冲向内部逻辑电路输出数据时,所有经过绑定的通道都以绑定序列指定的弹性缓冲中的偏移位置进行对齐输出。通道绑定完成后,为了使绑定维持在稳定状态,各通道收发器也要以主通道收发器为基准进行时钟修正操作。
在实现时,FPGA的布线原则是使绑定指示信号在模块间传输的延迟尽量小,尽量使两个互连模块间的连线不要穿越整个芯片。在FPGA布线时要对绑定指示互连线设置严格的时延约束参数。
典型的通道绑定的示意图如图10-12所示,左边为原始数据,右边为经过通道绑定的数据示意图。
图10-12 通道绑定原理图
(4)发送缓冲期
发送缓冲器为深度4、位宽20比特的FIFO,写时钟为恢复时钟TXUSRCLK,读时钟为收发器的参考时钟,其作用是用来调整读、写时钟之间的相位差,完成发送端时钟校正。
发送缓冲器也可以被旁路掉,其控制属性为:
TX_BUFFER_USE = FALSE
在该模式下,不能完成时钟校正和通路绑定,TXUSRCLK和REFCLK的相位是无法预测的,无法保证发送端可靠发送数据。因此,一般不允许将该缓冲器旁路。
7)CRC校验模块
Rocket I/O收发器支持固定的32比特CRC校验算法,其编码公式为:
该算法可支持Infiniband、光纤信道以及吉比特以太网等传输协议。在发送端,CRC逻辑识别出CRC校验字节应添加的位置,统计包头和包尾,并在数据包尾上添加四个计算出的CRC占位符,因此需要在发送缓冲器预留4字节的CRC码空间。在接收端,CRC完成CRC值的校验。同样,CRC逻辑也支持用户模式,以用户定义的包头和包尾来定义简易数据包。
8)配置模块
下面列出可通过配置选择或控制的功能,Xilinx实现软件工具支持16个收发原语,其简要说明如表10-1所列。
表10-1 Rocket I/O可配置的原语说明
以上的每个原语都有其默认值,都允许允许修改,原语的使用方法见3.4节,详细地参数说明和更多的细节可参照文献[1]。
9)复位模块
Rocket I/O模块的复位引脚分为发送复位和接收复位两部分。由于DCM在输出时钟锁定之前处于不稳定状态,不能用作内部逻辑电路时钟,所以要在DCM模块锁定后,再经过适当延迟才能将片内逻辑复位。
发送部分的复位主要包括TXPMARESET和TXPCSRESET,接收部分的复位主要包括RXPMARESET 和RXPCSRESET。TXPMARESET复位用于复位PMA和重新初始化PMA 功能。其引脚电平为高时,复位PLL控制逻辑和内部的PMA分频器,同时也使发送器PLL LOCK信号为低并且迫使TX PLL进行校验。TXPMARESET引脚的高电平至少要持续3个USRCLK时钟周期。当TXPCSRESET引脚电平为高时,TX PCS模块被复位。TX PCS模块包括:TX Fabric接口,8B/10B编码器,10GBASER编码器,TX缓冲器,64B/66B扰码器和10GBASER自适应同步器。TXPCSRESET复位与TXPMARESET 复位是相互独立,互不影响的。Rocket I/O模块要求复位输入至少保持两个USRCLK时钟周期,才能完成FIFO的初始化。
TXPCSRESET复位的要求如下:
(1)在TXPCSRESET复位时,TXUSRCL K和PCS 的TXCL K时钟必须已经保持稳定,以便初始化发送缓冲器。
(2)TXPCSRESET 引脚电平为高,至少要持续3个TXUSRCL K或TXUSRCL K2时钟周期。
(3)在TXPCSRESET 复位结束后,TX PCS 模块至少需要5 个时钟周期(以TXUSRCL K或TXUSRCLK2中最长的时钟周期为准)来完成各个子模块的复位。
发送部分的复位时序图如图10-13所示。接收部分的复位时序图和复位要求与发送部分类似,请参见Xilinx公司的技术文档[13]。
图10-13 发送部分的复位时序图
10)上电顺序
虽然RocketI/O模块对于上电顺序没有要求,任意的上电顺序也不会损坏芯片,但为了减少上电的瞬间电流,最好按照下面的上电顺序:
(1)首先以任意顺序加载FPGA的VCCINT以及VCCAUX电源;
(2)其次加载AVCCAUXRX电源;
(3)最后以任意顺序加载AVCCAUXRX、VTTX以及VTRX电源。
3.RocketI/O硬核模块接口信号说明
1)时钟信号
Rocket I/O时钟信号分为两类:一类用于收发器高质量的时钟,另一类用于接收/发送缓冲器进行数据交换的同步时钟,具体如表10-2所列。
表10-2 Rocket I/O时钟信号简要说明列表
2)数据发送模块信号
数据发送模块的信号类型众多,包括数据信号、发送模块的控制信号、状态控制信号、内部组件的配置信号等,其简要功能如表10-3所列。
表10-3 Rocket I/O数据发送模块信号简要说明列表
3)数据接收信号
数据接收模块信号和发送模块的信号对应,包括数据信号、发送模块的控制信号、状态控制信号、内部组件的配置信号等,其简要功能如表10-4所列。
表10-4 Rocket I/O数据接收模块信号简要说明列表
4)模块控制信号
模块控制信号主要用于使能RocketI/O模块以及控制反馈输入,其简要功能如表10-5所列。
表10-5 Rocket I/O模块控制信号简要说明列表
10.3.4 Rocket I/O的时钟设计方案
Virtex 2 Pro FPGA内嵌的RocketI/O模块支持全速率(Full Rate)和半速率(Half Rate)两种数据传输速率,前者将外部参考时钟倍频20倍,单周期传输20比特数据,数据速率为1.0Gbps~3.125Gbps;后者将外部参考时钟倍频10倍,单周期传输10比特数据,数据速率为0.5 Gbps~1Gbps。
1.RocketI/O的时钟简介
每个RocketI/O的收发器具备8个时钟输入,按照功能可以分为3类:
1)外部输入时钟
REFCLK、REFCLK2、BREFCLK以及BREFCLK2都是由外部时钟源提供的差分参考时钟,但只有一个时钟能驱动Rocket I/O模块,通过REFCLKSET信号来选择,其组成结构如图10-14所示。
图10-14 外部差分时钟的内部选择结构示意图
当数据速率高于2.5Gbps时,必须选择BREFCLK(BREFCLK2)作为参考时钟;在其它情况下可任意挑选。BREFCLK(BREFCLK2)要求低抖动的时钟源,用来驱动串/并、并/串以及DCM模块的时钟输入。
2)接口时钟
接收时钟包括TXUSRCLK2和RXUSRCLK2,主要用于控制Rocket I/O和FPGA的接口逻辑,包括缓冲器和数据交换器,由DCM模块提供。
3)内部时钟
内部时钟包括TXUSRCLK和RXUSRCLK,主要用于Rocket I/O模块发送、接收缓冲器数据的处理和时钟修正,一般由DCM模块提供,可以利用外部参考时钟。
Rocket I/O的速度等级由SERDES_10B选择,若SERDES_10B = FALSE,则为全速率数据传输;否则为半速率数据传输。此外,TXUSRCLK2和RXUSRCLK2控制着Rocket I/O和FPGA的交互接口,当数据位宽不同时,其与TXUSRCLK和RXUSRCLK的频率值比值也是不同的,如表10-6所示,默认情况下TXUSRCLK2=TXUSRCLK,即支持两字节数据传输。
表10-6 数据位宽和TXUSRCLK/RXUSRCLK列表
2.全速率的时钟方案
全速率模式下,需要将SERDES_10B设为FALSE,REFCLK时钟的倍频倍数为20倍。
1)单字节位宽全速率的时钟方案
单字节位宽全速率方案中,TXUSRCLK2和RXUSRCLK2的频率是TXUSRCLK和RXUSRCLK的2倍,相位差180度。REFCLK、TXUSRCLK和RXUSRCLK的时钟频率为40MHZ~85MHz,相应的TXUSRCLK2和RXUSRCLK2的时钟频率为80MHz~170MHz,时钟提供方案如图10-15所示。
图10-15 单字节位宽全速率时钟解决方案示意图
2)双字节位宽全速率的时钟方案
双字节位宽全速率方案中,TXUSRCLK2和RXUSRCLK2的频率和TXUSRCLK和RXUSRCLK的频率相等,无相位差。REFCLK、TXUSRCLK和RXUSRCLK的时钟频率为40MHZ~156.25MHz,TXUSRCLK2和RXUSRCLK2直接由REFCLK经过DCM模块的CLK0信号提供,相应的时钟提供方案如图10-16所示。
图10-16 双字节位宽全速率时钟解决方案示意图
3)四字节位宽全速率的时钟方案
四字节位宽全速率方案中,TXUSRCLK2和RXUSRCLK2的频率是TXUSRCLK和RXUSRCLK的一半。 REFCLK、TXUSRCLK和RXUSRCLK的时钟频率范围为40MHZ~156.25MHz,相应的TXUSRCLK2和RXUSRCLK2的时钟频率范围为280MHz~78.125MHz,相应的时钟提供方案如图10-17所示。
图10-17 四字节位宽全速率时钟解决方案示意图
3.半速率的时钟方案
半速率模式下,需要将SERDES_10B设为TRUE,REFCLK时钟的倍频倍数为10倍。
1)单字节位宽半速率的时钟方案
在该方案中,REFCLK的倍频倍数为10,RXUSRCLK2/TXUSRCLK2=2*RXUSRCLK/ TXUSRCLK=REFCLK,REFCLK、TXUSRCLK以及RXUSRCLK的频率范围为50MHz~ 100MHz,TXUSRCLK2/RXUSRCLK2的时钟频率范围为25MHz~50MHz,相应的时钟解决方案如图10-18所示。
图10-18 单字节位宽半速率时钟解决方案示意图
2)双字节位宽半速率的时钟方案
在该方案中,REFCLK的倍频倍数为10,RXUSRCLK2/TXUSRCLK2=RXUSRCLK/ TXUSRCLK=REFCLK/2,REFCLK、TXUSRCLK、RXUSRCLK以及TXUSRCLK2、RXUSRCLK2的时钟频率范围为25MHz~50MHz,相应的时钟解决方案如图10-19所示。
图10-19 双字节位宽半速率时钟解决方案示意图
3)四字节位宽半速率的时钟方案
在该方案中,REFCLK的倍频倍数为10,2*RXUSRCLK2/2*TXUSRCLK2 =RXUSRCLK/ TXUSRCLK=REFCLK/2,REFCLK的时钟频率范围为50MHz~100MHz、TXUSRCLK和RXUSRCLK的时钟频率范围为25MHz~50MHz,TXUSRCLK2和RXUSRCLK2的时钟频率范围为12.5MHz~25MHz,相应的时钟解决方案如图10-20所示。
图10-20 四字节位宽半速率时钟解决方案示意图
10.3.5 Rocket I/O的开发要素
1.时钟和数据恢复
1)时钟考虑
Rocket I/O对于参考时钟的要求是较为苛刻的,其精度一般要求在几十个ppm以下。例如EPSON EG-2121CA 2.5V的振荡器可以满足要求,振荡器的供电方案可参考其数据手册。此外,将振荡器的LVPECL输出转化成收发器的LVDS参考时钟,必须利用图10-21所示的参考电路。
图10-21 参考时钟振荡器的接口电路示意图
2)数据恢复
串行收发器的输入通过内嵌的时钟和数据恢复单元锁存,切断数据的下降沿和上升沿,并驱动一个频率和数据速率相同的时钟信号RXRECCLK。该时钟在FPGA内部表现为数据速率的1/20。只要时钟频率处于一定范围内,才能被收发器提取出来,各项条件如表10-7所列。
表10-7 时钟和数据恢复电路的参数范围
为了使CDR正常工作,在数据流里要有足够多的跳变发生。此外,还要保证CDR电路可以与8B/10B编码协同工作。在上电时,CDR大概需要5000次跳变才可以锁定到输入数据速率上。一旦完成了该锁定,那么在丢失对输入数据流的锁定之前,允许遗漏75个之多的跳变。如果用户对其串行数据流进行设计,那么必须注意满足8B/10B编码所需的跳变频率。CDR的另一个特征是它可以接收一个外部精确时钟(REFCLK)作为一个可选的输入,REFCLK要么是输入数据的时钟,要么是通过同步得到的RXRECCLK。更明确地讲,对于来自FPGA核且送往TX FIFO的数据,使用TXUSRCLK来作为它们的时钟。FIFO的深度决定了这两个时钟之间的微小相位差别,如果时钟在频率上得以锁定,那么FIFO就相当于一个直通的缓存。
2.PCB设计要求
为了保证RocketI/O收发器的可靠操作,设计者必须注意满足的PCB设计要求,主要涉及电源过滤网络,高速差分信号路径和参考时钟等方面。如果不能满足下列要求,则Rocket I/O可能无法正常工作。
1)电源以及电源滤波电路
每个RocketI/O收发器包括5个电源管脚,所有的管脚对噪声的影响都比较敏感。为保证电路可靠工作,Rocket I/O收发器需要和外围噪声源进行一定的隔离,需要进行专门的供电。为Rocket I/O收发器供电的电压调节器可以和收发器中其它有相同供电电压的管脚共用,但是不能和其他部分电路共用电源,每一个电源管脚必须有自己独立的LC滤波网络。表10-8中列出了其管脚名以及相应的电压。
表10-8 收发器的电源
为了确保Rocket I/O收发器正常工作,必须对周围的噪声源进行隔离。因此,对电源芯片有一定的要求,即需要用专用电压校准器来给Rocket I/O供电。这些电源电路不能被其他任何电源所共享(包括FPGA电源VCCINT,VCCO,VCCAUX和VREF),但电压校准器可以在有相同电压的收发电源之间共享。这里,所需的电压校准器型号为凌特公司(Linear Technology)的LT1963-2.5。在原理图设计时,必须按照数据手册上的说明来完成,如图10-22所示的2.5V电源的示意图,该电源可用于AVCCAUXRX和AVCCAUXTX。读者可以参考网站http://www.linear-tech.com以获得有关该设备的更多信息。
图10-22Rocket电源电路示意图
为了达到所需的电源噪声隔离,需要在电源管脚处设置滤波网络。在图10-23中给出了这些电容器和铁氧体磁珠电路的结构。
图10-23 收发器的电源滤波电路示意图
每个收发电源管脚都需要一个电容器和一个铁氧体磁珠来构成滤波电路,其中电容为0.22 μF,在X7R绝缘材料的0603 SMT封装中,容许误差为10%,电压为5V,且必须放在距离管脚的1cm内。磁珠型号为Murata BLM18AG102SN1。
为验证已完成的PCB上的差分阻抗,不仅要利用时域反射(Time Domain Reflectometry,TDR)测量来进行,还要对PCB上的电源和地的线路进行设计,使其有最小的自感系数。为了达到这一目的,必须添加地线专用层。如果转接线路是电源分布线路的组成部分(当连接一个旁路电容到它相应电源和地层时,就会发生这一现象),那么就必须使用多个转接线路来降低电源分布线路上总的自感。如果电源滤波电容与FPGA在板子的同一侧,设计者可使电源层更靠近板子的表面,缩短电源线的路径长度。
2)高速布线设计
对于高速设计来讲,正确布线是一项非常艰巨的任务,因为要克服串扰、电磁辐射以及阻抗匹配以及等长线等诸多不利现象。下面对Rocket I/O的布线进行一定的说明。
(1)串行路径的布线
所有RocketI/O收发器的I/Os都位于BGA封装的外围,这可方便布线和检查(因为在串行I/O管脚没有JTAG)。在Rocket I/O收发器里有两个可选的输出/输入阻抗,分别为50Ω和75Ω,因此可用受控的阻抗线路以及相应的阻抗,将Rocket I/O收发器连接到其他可匹配的收发器上。在芯片-芯片的PCB应用中,推荐使用50Ω的终端和100Ω的差分传输线。在布线一个差分对时,必须使互补的线路在走线上等长,否则长度的不匹配会导致普通模式的噪声和辐射,而严重的长度不匹配则导致接收端处的抖动和无法预测的时序问题。一般来讲,如果在50mils(1.27mm)内匹配了差分线路,是比较稳定的。由于FR4 PCB线路中的信号大概以每英寸180ps的速度传送,因此50mils的差别就会导致大约9ps的时序偏移。在具体板设计时,可以利用相应的CAD工具来验证上述的假设条件。
所有的信号线路在其之下都必须有一个完整的参考面,该面板可采用带状线或微波传输带结构。而参考面到线路任何一边的延伸距离不可以超过五倍线路宽度,以保证可以预测传输线的特性。差分对的布线要以点到点的最优方式来完成,并且最好在相同的PCB布线层上,这是由于转接线路会带来阻抗的不连续性。因此应当尽可能地避免层到层的变化,但可以横穿PCB的多层结构而直接到达发送和接收封装的管脚。
如果串行线路必须换层,那么必须注意应当保证有一个完整的电流回环路径。因此,高速串行线路的布线必须在信号层上,而这些信号层共享一个参考面。如果信号层不共享一个参考面,那么必须在两个参考面板间跨接一个0.01 μF的电容,并且其靠近于信号换层处的转接线路。如果两个参考层都是DC耦合的,它们可以通过转接线路来连接,且该线路靠近信号换层的位置。
为了控制串扰,串行差分线路必须至少与其它PCB布线间隔五个线路宽度,这里的其它PCB布线包括了其它串行对。如果其它PCB布线承载噪声很大的信号,如TTL以及类似的布线,那么该间距就必须更大。利用两个高带宽的连接器,即可让Rocket I/O收发器在20英寸的FR4上实现3.125Gb/s的传输速率。如果线路更长,那么就需要一个低损耗的绝缘体或者是更宽的串行线路。
(2)差分信号的走线设计
Rocket I/O收发器的高速差分信号线,应尽量选用性能良好的微波传输线和带状线。由于传输的差分信号频率很高,两根差分信号线必须在长度上尽量匹配,长度失配会产生共模噪声和辐射,严重的失配会产生时钟抖动(Jitter)和不可预知的时序问题。差分线必须尽量匹配终端电阻50Ω和75Ω,可选50Ω用于芯片和芯片之间互连,75Ω用于芯片和电缆之间互连。高速差分线不要打孔,要布在电路板中的同一层。
Rocket I/O收发器需要100Ω或150Ω的差分线路阻抗(取决于是否选择了50Ω或75Ω终端的可选项)。但实际上差分线路对的特征阻抗不仅与每条线路的宽度有关,而且还与两者间的距离有关。为了实现这一差分阻抗要求,每个线路的特征阻抗必须稍稍高于目标差分阻抗的一半,通过电磁场仿真软件来确定适合于特定应用的准确线路结构,如图10-24所示。
图10-24 单端路径和几何结构示意图
Xilinx公司推荐差分线路采用紧密耦合,相对于宽松耦合它可使得两者在所有位置都与对方很靠近。由于紧密耦合线路的差分阻抗在很大程度上取决于它们和对方的靠近程度,因此它们的间距必须在所有位置都保持不变。如果要使布线通过一个管脚区域或其它PCB障碍,那么就必须分离线路。一个有效的办法是,在靠近障碍处修改线路结构,纠正阻抗的不连续性(在线路分离处,增加每个线路的宽度)。图10-25和图10-26给出了微带线和带状线差分信号的PCB几何结构的示意图,这两种几何结构具有100Ω的差分阻抗。
图10-25 微带线边沿耦合差分对连接示意图 图10-26 带状线边沿耦合差分对连接示意图
(3)AC、DC耦合
在收发器差分电压兼容时,必须使用AC耦合(在信号路径上使用DC阻塞电容),但是对于普通模式的电压就不需要了。此外,某些设计需要AC耦合以适用热插拔,和/或在不同收发器处有不同电源电压也都需要AC耦合。典型的AC耦合电路如图10-27所示。
图10-27 AC耦合电路示意图
在Rocket I/O收发器与其它Rocket I/O收发器或其它Mindspeed的收发器(该收发器有兼容的差分和普通模式电压规格)连接时,DC耦合更为可取。在使用DC耦合时,不需要额外的无源器件。典型的DC耦合电路如图10-28所示。
图10-28 DC耦合电路示意图
10.3.6 Rocket IO IP Core的使用
1.支持Rocket IO芯片族
如前所示,Rocket IO作为Xilinx FPGA芯片中内嵌的硬件模块,并不是任何一款FPGA都提供的,只有在Virtex 2 Pro以上的部分高端FPGA内部才具备。支持RocketIO的FPGA型号如表10-9所列。
表10-9 内嵌Rocket IO的FPGA芯片型号列表
2.Rocket IO IP Core的配置页面
Rocket IO和DCM模块、硬核乘法器、块RAM一样,属于FPGA内部的集成固件,可通过原语或者IP Core调用,其相关参数已在10.3.3、10.3.4节进行了详细说明。
该IP Core位于“FPGA Feature and Design” “IO Intrerfaces”目录下,后缀为.xaw,表明其属于FPGA底层基本组件单元。Rocket IO的IP Core有5个配置向导页面,分别如图10-29(a)~(e)所示。
(a) Rocket IO配置向导1 (b)Rocket IO配置向导2
(c) Rocket IO配置向导3 (d)Rocket IO配置向导4 (e)Rocket IO配置向导5
图10-29Rocket I/O IP Core的用户配置界面
1)配置页面1——General Setup
本页面主要用于配置收发器工作模式、参考时钟以及终端阻抗。在“Select the transceiver”栏下拉框的可选工作模式有:Aurora协议、Custom、Ethernet、FibreChannel、Infiniband以及XAUI等6种模式;Data Width下拉框可设定数据位宽,有1Byte、2Byte和4Byte等3种选择;选中Transmitter和Recevier复选栏,则表示在Rocket IO硬核中使能相应的组件,否则旁路掉相应的组件,默认值为都选中。
“Reference clock selection”栏用于选择时钟,有CLKREF和BCLKREF两种选择,当收发器的工作频率高于2.5Gbps时,则必须选择BCLKREF时钟;选中Bypass PCS features(Uses SERDES with CDR Only)复选框,可旁路PCS功能;选中Half-rate Mode复选框,可启动半速率模式。“Termination impedence”栏用于配置终端阻抗,有50欧姆和75欧姆两种选择。
2)配置页面2——TransmitterSetup
本页面主要配置发送端功能。“Encoding”栏用于线路编码配置栏,有Disable encoding(旁路编码器)、Dynamic encoding control(动态控制编码器)以及Static encoding control(使能8B/10B编码)等3个选项。“Pre-emphasis”栏为预加重控制栏,从弱到强,有10%、20%、25%、33%等4类强度。“Output Voltage swing”为输出电压摆动功率设置栏,有400mW、500mW、600mW、700mW以及800mW等5级数值。“CRC”栏用于配置发端校验编码器,选中“Use CRC for transmitter”复选框后,才能配置相关参数;CRC Format栏用于选择校验模式,有User-Mode、Ethernet、FibreChannel以及Infiniband等4种模式;Start-Of-Packet K-Parameter用于选择起始包的K参数;End-Of-Packet K-Parameter用于选择结束包的K参数。
3)配置页面3——ReceiverSetup
本页面主要配置接收端功能。“Decoding”栏的参数和配置页面两种Encoding栏的选项是一致的,接收端选择的解码方式由输入数据在远端的编码方式决定,二者必须保持一致。“8B/10B Synchronization”栏用于设定检测同步头,选中Decet the loss on RXLOSSODSYNC复选框,可设定同步操作的有效步长以及门限值。同样,USE CRC for recevier复选框由输入数据决定,如果输入数据经过编码,则选中该复选框。
4)配置页面4——RecevierClock Correction Setup
本页面用于配置接收机时钟修正参数。选中“Retain at least one clock Correction sequence”可以启用至少保持一个时钟修正序列的功能。“The minimum number of RXUSERCLK without clock”栏用于设定没有时钟时,最小的RXUSERCLK周期数。“Length of clock correctuion sequence(in Byte)”栏用于设定时钟修正序列的长度,可选值有1、2、3和4,单位为Byte。“Define clock correction sequence(11-bit vector)”栏用于设定时钟修正序列。
5)配置页面5——Summary
本页面主要显示用户定义Rocket IO的特性。“Feature Summary”栏用于显示用户配置参数的主要特征,如参考时钟的配置。“Files To Be Generated”栏用于显示即将生成的文件,如my_rocketio.xaw。“Block Attributes”栏用于显示模块属性,如CRC起始包和结束包的K-字符、发送数据宽度等。“Show all modifiable attributes”复选框用于显示所有可修改的属性。“Show only the modifiable attributes whose values differform the default”复选框只显示和缺省值不同的可修改属性。
配置完成后,可在工程管理区选中RocketI/O,在过程管理区,点击“View HDLInstantiation Template”命令,查看其例化代码,其在代码中的例化方法和一般IP Core的方法是一样的。
第4节基于XilinxFPGA的千兆以太网控制器的开发
10.4.1 千兆以太网技术
1.千兆以太网技术简介
以太网技术是当今应用广泛的网络技术,千兆以太网技术继承了以往以太网技术的许多优点,同时又具有许多新的特性,例如传输介质包括光纤和铜缆,使用8B/10B的编解码方案,采用载波扩展和分组突发技术等。正是因为具有良好的继承性和许多优秀的新特性,千兆以太网已经成为目前局域网的主流解决方案。
千兆以太网利用了原以太网标准所规定的全部技术规范,其中包括CSMA/CD协议、以太网帧、全双工、流量控制以及IEEE 802.3标准中所定义的管理对象。千兆以太网的关键技术是千兆以太网二层(MAC层)的交换与以太网接口的实现。随着多媒体应用的普及,千兆以太网必将成为各类以太网技术的主力军。
2.Xilinx的千兆以太网解决方案
1)IP的支持
Xilinx提供了可参数化的10/1Gbps以太网媒体访问控制器功能LogiCORE解决方案。该核设计用来同最新的Virtex-5、Virtex-4和Virtex-II Pro平台FPGA一起工作,并可以无缝集成到Xilinx设计流程中。吉比特级以太网媒体访问控制器核(GEMAC)是针对1Gb/s(Gbps)以太网媒体访问控制器功能的可参数化的LogiCORE IP解决方案。GEMAC核的设计符合 IEEE 802.3-2002规范。GWMAC核支持两个PHY端接口选项:GMII或RGMII。并且,Xilinx 全面的1Gb/s以太网解决方案包含吉比特MAC和PCS/PMA IP核产品。Xilinx吉比特以太网MAC解决方案还包括带有内置处理器本地总线(PLB)接口(PLB GEMAC)的配置。该配置通过Xilinx嵌入式开发套件(EDK)提供。GEMAC LogiCORE IP可以实现与1000 Base-X PCS/PMA或SGMII核的无缝集成,并提供3种选项用来与PHY器件接口:1000 BASE-X或10位接口(TBI)或SGMII。
GEMAC核非常适合开发高密度吉比特级以太网通信和存储设备,其关键特性有:
·单速全双工11 Gbps MAC控制器;
·设计符合IEEE 802.3-2002规范;
·具有最小缓冲的直通操作,以最大限度地实现客户端接口的灵活性;
·通过可选的独立微处理器中的接口进行配置和监控;
·直接与以太网统计数据核接口,以便实现功能强大的统计数据收集;
· 通过MAC控制暂停帧实现对称的或非对称的可选的流程控制;
·VLAN帧的可选技术支持符合IEEE 802.3-2002规范的要求;
·支持任意长度的“jumbo帧”(可选);
·可选的地址滤波器,具有数量可选的地址表输入。
2)相应的开发板套件
Xilinx提供的千兆以太网开发套件为Virtex-5ML505/ML506开发板(使用的FPGA芯片为:XC5VLX50T-1FF1136),该开发板支持10/100兆、1/10吉以太网,加上Xilinx公开的基于ML505/506的设计,可为基于以太网开发的设计提供全方位的参考。此外,ML505/506还具备SFP、PCI E、SATA以及SMA接口等其余吉比特接口,是学习和研发高速连接设备的理想平台。
10.4.2 基于FPGA的千兆以太网MAC控制器实现方案
1.整体设计方案
以太网控制器的FPGA设计工作包括以太网MAC子层的FPGA设计、MAC子层与上层协议的接口设计以及MAC与物理层(PHY)的MII接口设计。该以太网控制器的总体结构设计框图如图10-30所示。整个系统分为发送模块、接收模块、MAC状态模块、MAC控制模块、MII管理模块和主机接口模块六部分。发送模块和接收模块主要提供MAC帧的发送和接收功能,其主要操作有MAC帧的封装与解包以及错误检测,它直接提供了到外部物理层芯片的并行数据接口。在实现中物理层处理直接利用商用的千兆PHY芯片,主要开发量集中在MAC控制器的开发上。
图10-30 以太网控制器的结构设计框图
MAC控制模块则用于执行全双工模式中的流量控制功能。MAC状态模块可用来监视MAC操作过程的各种状态信息,并作修改。MII管理模块提供了标准的IEEE 802.3介质独立接口,可用于连接以太网的链路层与物理层。主机接口则提供以太网控制器与上层协议(如TCP/IP协议)之间的接口,以用于数据的发送、接收以及对控制器内各种寄存器(控制、状态和命令寄存器)的设置。
2.MAC控制器结构和工作流程
1)MAC发送模块
MAC发送模块可将上层协议提供的数据封装之后通过MII接口发送给PHY。发送模块可接收主机接口模块的数据帧开始和数据帧结束标志,并通过主机接口从外部存储器中读取要发送的数据,然后对数据进行封装,再通过PHY提供的载波侦听和冲突检测信号,在信道空闲时由MII接口将数据以4位的宽度发送给PHY芯片,最后由PHY将数据发送到网络上。
发送模块由CRC生成模块(crc_gen)、随机数生成模块(random_gen)、发送计数模块(tx_cnt)和发送状态机(tx_statem_machine)模块等四个主要子模块组成,其内部结构如图10-31所示。
图10-31 以太网MAC发送模块的结构示意图
发送状态机由Idle_State、Preamble_State、Data0_State、Data1_State、PAD_State、FCS_State、IPG_State、Jam_State、BackOff_State、Defer_State 等十个状态组成。其状态转移图如图10-32所示。
图10-32 发送状态机的状态转移图
系统复位后,发送模块即进入Defer_State状态,并一直检测载波侦听(CarrierSense)信号。当载波侦听信号变成无效(表示信道空闲)时,状态机进入IPG_State状态。此后,在等待一个帧间间隙之后,状态机进入Idle_State状态。如果在帧间间隙的前2/3个周期检测到信道忙信号,状态机将重新回到Defer_State状态。
状态机进入Idle_State状态之后,发送模块将检测载波侦听信号和主机接口的发送请求。若主机模块请求发送,状态机将进入Preamble_State状态,发送模块即通知PHY发送开始,同时开始发送前序码(7个0x5), 然后发送帧起始定界符(SFD, 0xd)。状态机进入Data0_State后,发送模块将发送一个数据字节的低4位(LSB nibble),当其进入Data1_State状态后,发送模块则发送数据字节的高4位(MSB nibble)。随后,状态机一直在data0和data1之间循环,直到数据发送完毕。当还剩一个字节时,主机模块将通过发送帧结束信号来通知发送模块。如果数据帧的长度大于最小帧并且小于最大帧,状态机就进入FCS_State状态,此时发送模块则将CRC生成模块生成的CRC值添加到帧的FCS字段中并发送给PHY。
帧发送完之后,状态机进入Defer_State状态,之后是IPG_State和Idle_State状态。此后状态机又回到初始状态,以重新等待新的发送请求。如果数据帧的长度小于最短帧,状态机就进入PAD_State状态,发送模块根据系统设置确定是否在数据之后添加填充码。然后,状态机进入FCS_State状态。如果数据帧的长度大于最大帧,而系统设置又支持发送超长帧,那么,状态机就进入FCS_State状态;如果不支持发送超长帧,发送模块将放弃发送,状态机直接进入Defer状态,然后是IPG状态,最后回到Idle状态。
在发送数据的过程中,发送模块会一直检查冲突检测信号(collision detected)。如果发现冲突且状态机正处于Preamble_State,状态机将在发送完前序码和SFD之后进入Jam_State,并发送拥塞码,然后进入BackOff状态,以等待重试。之后,状态机经过Defer和IPG回到Idle状态。如果此时重试次数计数器的值没有达到额定值,发送模块将重新开始发送刚才的帧,并将重试次数计数器的值加1;如果发现冲突且状态机处于data0、data1或FCS状态,而且没有超过冲突时间窗,那么状态机将马上进入Jam状态发送拥塞码,之后经过BackOff、Defer、IPG、回到Idle,并根据重试计数器的值决定是否重新发送刚才的数据帧;如果检测到发生冲突的时间超过了冲突时间窗,状态机将进入Defer状态,然后经过IPG到IDLE状态,并放弃重试。
在全双工模式中发送帧时,不会进行延迟(defer), 发送的过程中也不会产生冲突。此时,发送模块将忽略PHY的载波侦听和冲突检测信号。当然,帧与帧之间仍然需遵守帧间间隙的规则。因此,全双工模式下的发送状态机没有Jam_State、BackOff_State、Defer_State三个状态。
2)MAC接收模块
MAC接收模块结构如图10-33所示,负责数据帧的接收。当外部PHY将通信信道的串行数据转换为半字节长的并行数据并发送给接收模块后,接收模块会将这些半字节数据转换为字节数据,然后经过地址识别、CRC校验、长度判断等操作后,再通过主机接口写入外部存储器,并在主机接口模块的接收队列中记录帧的相关信息。此外,接收模块还负责前序码和CRC的移除。
图10-33 以太网MAC接收模块的结构示意图
接收过程的接收状态机由Idle_State、Drop_State、Preamble_State、SFD_State、Data0_
State、Data1_State等六个状态组成, 其状态转移图如图10-34所示。
图10-34 接收状态机的状态转移图
当接收模块检测到数据有效信号之后,,状态机将进入Preamble_State,并开始接收前序码。此后状态机进入SFD_State,接收一个字节的帧起始定界符,之后根据IFGcnt计数器的值进入不同的状态。如果IFGcnt所确定的时间大于96个比特时间,状态机将进入Data0状态以接收字节的低4位,然后是Data1状态,并接收字节的高4位,之后又回到Data0状态。状态机就一直在这两个状态之间循环,直到数据接收完毕(PHY清除MRxDV信号)后进入Idle,以重新等待接收新的数据;如果接收到帧起始定界符时,IFGcnt计数器所确定的时间小于96个比特时间,那么状态机将进入Drop_State状态,并一直维持该状态直到数据有效信号结束(PHY清除MRxDV信号)。之后,状态机再回到Idle等待接收新的数据。如果在接收前序码、帧起始定界符和数据期间,数据有效信号被清除,那么状态机将回到Idle。
3)MII管理模块
MII管理模块用于控制MAC与外部PHY之间的接口,用于对PHY进行配置并读取其状态信息。该接口由时钟信号MDC和双向数据信号MDIO组成。MII管理模块则由时钟生成模块、移位寄存器模块和输出控制模块三部分组成。
时钟生成模块可以根据系统时钟和系统设置中的分频系数来产生MII 管理模块的时钟信号MDC(10 Mbps速率时为2.5 MHz, 100 Mbps速率时为25 MHz)。移位寄存器模块既可用于对PHY的控制数据进行写入操作,也可用于对PHY的状态信息进行读出操作。写控制数据时,移位寄存器根据其他模块的控制信号将并行控制数据转换为串行数据;而在读状态信息时,移位寄存器则将PHY的串行数据转换为并行数据,MAC中的其他模块可将该并行数据写入适当的寄存器。
由于MDIO是双向信号,因此输出控制模块就用来决定MDIO是处于输入状态还是输出状态。当MDIO处于输出状态时,移位寄存器输出的串行控制数据在经过时钟同步后发送到PHY;当MDIO处于输入状态时,移位寄存器将数据线上的串行数据转换为并行数据
4)主机接口模块
主机接口是运行以太网的上层协议(如TCP/IP协议)与MAC控制器的接口。通过该接口,上层协议可以设置MAC的工作模式并读取MAC的状态信息。该接口还可用于上层协议与MAC之间的数据交换。
主机接口模块内有一组寄存器,可用于存储上层协议对MAC设置的参数以及MAC的状态信息。上层协议对MAC设置的参数包括接收超短帧的使能、添加填充码使能、发送超长帧的使能、添加CRC校验值使能、全双工模式或半双工模式、持超长延迟使能、混杂模式
(Promiscuous)、接收广播帧使能、发送和接收使能、中断源和中断使能、帧间间隙的长度、最大帧和最小帧的长度、重试限制和冲突时间窗、MII地址和MII控制命令、接收和发送队列的长度以及本机MAC地址等。
上层协议通过MAC发送和接收数据的操作主要由主机接口模块内的两个队列来进行管理,这两个队列用于对等待发送的多个帧和接收到的多个帧进行排队。发送队列主要记录等待发送的帧的相关信息、发送该帧时对MAC的设置以及该帧发送完之后产生的状态信息。帧的相关信息包括帧的长度、帧在外部存储器中的地址、该帧是否准备好发送以及队列中是否还有其它帧等待发送;对MAC的设置则包括中断使能、填充使能、CRC使能;产生的状态信息包括成功发送之前的重试次数、由于达到重试限制而放弃发送、发送时产生的滞后冲突以及成功发送之前发生过的延迟。
接收队列主要对接收到的数据帧进行排队并记录每个接收到的帧信息。这些信息包括帧的长度、是控制帧还是普通数据帧、帧中包含无效符号、接收到的帧太长或太短、发生CRC错误、接收的过程中发生滞后冲突、帧是否接收完、队列中是否还有其它已接收到的帧以及帧存储在外部存储器中的地址等。同时队列中还有针对每个帧的设置位,用来设置是否在接收到帧时产生中断。发送队列和接收队列的长度都可以在控制寄存器中进行设置。
10.4.3Xilinx 千兆以太网MAC IP Core
1.GMAC IPCore的应用场景和架构
Xilinx提供了三态以太网MAC控制器的IP Core,可实现单条吉比特以太网链路,通过交换机或路由器可与任意以太网端口相连。由于MAC控制器的速率很高,底层传输必须依赖Rocket I/O,在客户端还需要利用FIFO来交换数据,其完整的设计方案如图10-35所示。
图10-35 千兆以太网MACIP Core的应用场合示意图
2.GMAC IP Core的配置界面和接口信号
图10-36 千兆以太网MACIP Core的配置界面
千兆以太网MACIP Core的配置界面如图10-36所示。GEMAC控制器所实现的主要功能如图10-37所示,包括发送引擎、接收引擎、流控制、GMII接口、客户发送接口、客户接收接口以及客户管理接口。
图10-37 千兆以太网MACIP Core的主要功能示意图
下面给出相应模块的功能和接口信号说明。
1)发送引擎
发送引擎通过客户发送端口接收以太网的数据帧,并在帧头添加帧引导区域,甚至在帧长小于最短要求时,添加一定的冗余比特。同时,该模块还会在连续的数据帧之间插入以太网协议所规定的最小延时,将用户数据转化成标准的GMII数据帧,并送至GMII模块。在应用时,面向用户的操作就是将用户数据读入GEMAC核内部
该模块接口信号的简要信息如表10-10所列。
表10-10 发送引擎接口信号列表
发送引擎的时序如图10-38所示。当客户端有数据发送时,将tx_data_valid拉高,同时将数据的第一个字节置于tx_data端口;当GEMAC将第一字节数据读入后,会将tx_ack信号拉高,用户端逻辑检测到tx_ack为高时,要在下一个时钟上升沿将其余的数据发送到数据端口上,当数据发送完毕后,将tx_data_valid拉低。
图10-38 发送引擎的时序图
2)接收引擎
接收引擎接收来自GMII模块的数据,去掉帧头的引导区域,包括为了增加帧长的冗余比特。此外,该模块还能根据数据帧中的检验序列区域、接收到的GMII错误码字以及帧长信息完成错误检测,主要接口信号的简要说明如表10-11所列。
表10-11 接收引擎接口信号列表
接收引擎的时序如图10-39所示。客户端逻辑必须在任何时候都准备好接收数据,因为在GEMAC核中没有接收缓存,有时延就会丢失数据,因此用户可自己添加缓冲逻辑。rx_data_valid为高时立即开始接收连续数据,在检测到rx_data_valid变低后,判断rx_good_frame信号的电平,如果为高则继续处理该帧数据,否则直接丢弃。
图10-39 接收引擎的时序图
3)流控制
流控制模块是根据IEEE802.3-2002标准的31项条款设计的,在发送时附带暂停帧,接收时也需要对其处理。在GEMAC核中,它是自动配置的,同时,也提供了用户自定义的配置端口,如表10-12所列。
表10-12 流控制接口信号
4)可选的管理接口
管理接口是一个独立的可选端口,其地址、数据和控制信号相对于其他模块是独立的,提供了和CoreConnec总线的交互能力,可挂在MicroBlaze软核或PowerPC硬核处理器,可用于配置GEMAC核以及通过MDIO接口直接读写外部PHY芯片的内部配置寄存器。该模块包括用户管理的接口和MDIO接口两部分,后者直接与PHY芯片相连,全部接口信号的简要说明如10-13所列。
表10-13 管理模块的接口信号
5)复位操作
管理模块具备自己独立的软件复位信号,但当管理接口模块被旁路掉,其相应的配置信号被作为configuration_vector[64:0]输入信号使用。此外,GEMAC核提供了硬件复位信号,如表10-14所列。
表10-14 复位信号列表
6)GMII模块
GMII模块的接收信号一般都是直接连到PHY芯片上,负责和PHY芯片的数据交互,其信号和PHY芯片的接口是一一对应的,如表10-15所列。
表10-15 GMII模块接口信号列表
配置完成后,可在工程管理区选中GEMAC核,在过程管理区,点击“View HDL Instantiation Template”命令,查看其例化代码,它在代码中的例化方法和一般IP Core的方法是一样的。
10.5 本章小结
高速串行传输技术是FPGA未来的三大应用领域之一,本章主要介绍了Xilinx公司的Rocket I/O解决方案。首先给出高速传输的背景,指出串行方式是吉比特以及更高速率链路的必然选择。其次,给出了吉比特串行传输的通用架构,为后文做好铺垫。接着重点介绍了Xilinx公司Rocket I/O的系统组成、相关协议、时钟设计方案、开发要素以及Rocket I/O的使用方法。最后说明了千兆以太网MAC控制器IP Core的使用方法。读者需要注意的是Rocket I/O是Xilinx高端FPGA中的内嵌组件,和DCM、硬核乘法器、块RAM等的使用方法是一样的,可通过IP Core调用。高速传输是一种新技术,开发难度较大,本章只是介绍了其中的主要核心部分和基本原理,还需要读者阅读大量的文献和实际操作才能熟练开发相关系统。
参考文献
<<待续>>