APP下载

PCIe总线物理层弹性缓冲设计与实现

2016-02-27廖寅龙

计算机技术与发展 2016年6期
关键词:缓冲区字符时钟

廖寅龙,田 泽,赵 强,马 超

(西安航空计算技术研究所 集成电路与微系统设计航空科技重点实验室,陕西 西安 710068)

PCIe总线物理层弹性缓冲设计与实现

廖寅龙,田 泽,赵 强,马 超

(西安航空计算技术研究所 集成电路与微系统设计航空科技重点实验室,陕西 西安 710068)

PCIe是在PCI总线的基础上提出的新一代总线和接口标准,它原来的名称为“3GIO”,是由英特尔在2001年提出的。PCIe属于高速串行点对点双通道高带宽传输,所连接的设备分配独享通道带宽,不共享总线带宽,主要支持主动电源管理、错误报告、端对端的可靠性传输、热插拔以及服务质量(QOS)等功能。PCIe作为高速串行数据总线以其众多的优点在计算机、通讯、航空航天等领域得到了广泛应用。为了实现稳定可靠的数据通讯,必须解决总线恢复时钟域数据和本地时钟域数据的同步问题,弹性缓冲区是实现PCIe总线接口数据同步机制的有效方法。文中根据PCIe协议要求,分析PCIe总线通信中时钟偏差的多种场景,设计了一款采用20位数据总线,读写时钟频率可达250 MHz的弹性缓冲,有效解决了PCIe总线通信中总线恢复时钟域与本地时钟域的数据同步问题。

PCIe;弹性缓冲;同步FIFO;半满

0 引 言

PCIe(PCI Express)是从PCI发展而来的一种系统互联接口标准。PCI和PCI-X都是基于32位以及64位的并行总线,而PCIe则使用高速串行总线。PCIe后向兼容于PCI,能够灵活地提供大峰值带宽。PCIe链路由多条通路组成,在链路中增加更多的通路可提高PCIe链路的带宽。规范支持的链路通路带宽有x1、x4、x8和x16等[1-3]。

PCIe总线是高速串行总线,并行数据在物理层经过字节拆分、扰频、8b/10b编码、并串转换等过程将数据包由差分驱动接口以2.5 Gbps(PCIe 2.0标准中此速率为5 Gbps)的速率传输出去,接收设备执行大致相反的过程完成串行数据包接收和并行数据重组。8b/10b编码的目的则是为了将高频时钟嵌入到串行数据中,接收端内嵌时钟和数据恢复电路(Clock and Data Recovery,CDR)可根据比特流中众多的0和1转换来重建接收时钟,这样就避免了在发送和接收端之间传输高达GHz的高频时钟[4-5]。

PCIe接收模块CDR电路恢复时钟及其本地时钟并不是同源时钟,虽然两者的时钟频率在标称上是一致的,但是也必然存在频率的轻微不一致。所以,为了保证可靠地将CDR恢复时钟域的数据同步到本地时钟域,必须要考虑时钟频率偏差的影响,而弹性缓冲区可以很好地达到这个目的[6]。

1 PCIe弹性缓冲区原理

根据协议要求,PCIe总线在2.5 Gbps的速率下通信,允许有300ppm的误差,所以总线频率在2.499 25~2.500 75 GHz范围内都是允许的。由于这个允许的总线偏差,两个互相通信的PCIe总线设备,其工作频率会有轻微的不一致。因此,在同一个设备中数据的发送和接收将处于两个不同的时钟域。弹性缓冲将在两个时钟域的数据同步中起到频率补偿的作用,使通过弹性缓冲向上提交的数据保持完整。

弹性缓冲拥有两个时钟,一个来自于CDR电路,用于接收数据写入弹性缓冲;另一个用于从弹性缓冲中读出数据。两个时钟可以是异步时钟,并且时钟频率也可以不一样。弹性缓冲具有上溢或者下溢的保护机制,用来监控弹性缓冲中数据的填充状态,并自动填充或者删除特定的字符数据。在PCIe总线中这个特定字符为SKP有序集中的SKP(K28.1)字符。每个SKP有序集由一个COM字符(K28.5)和3个SKP字符组成。为了保证弹性缓冲不上溢也不下溢,要求发送端周期性地发出SKP有序集。

SKP有序集的周期必须要考虑最坏情况,PCIe总线速率与标准速率最大可允许300ppm,那么总线上通信的两个PCIe设备时钟最大可以有600ppm。这意味着1 666个时钟周期就可能有一个2.5 GHz时钟周期的时钟偏差。这要求发送端发送SKY有序集的周期必须小于1 666个周期。根据协议定义要求,发送端在1 180~1 538个SKP有序集传输时间内,必须发出一个SKP有序集出来。接收端弹性缓冲接收到这个有序集后,根据恢复时钟和本地时钟的状态,可以决定在这个有序集中增加或者删除2个COM字符,从而达到消除发送端和接收端时钟偏差的目的。

在发送端正在发送大数据包的TLP(传输层包)而导致SKP有序集不能及时发送的情况下,为保证拥有足够的SKP有序集来保证弹性缓冲正常工作,这些不能按时发出的SKP有序集应该在发送端缓存起来,并等待TLP发送结束,然后立刻将缓冲的SKP有序集发送出去[7-9]。

2 PCIe弹性缓冲区设计

弹性缓冲的缓冲容量由3个因素决定:SKP有序集的发送周期、器件支持的最大数据包的大小及总线的链路宽度。这3个要素共同决定了到达接收端的SKP有序集的最大时间间隔。这个最大间隔时间是由可能大于协议要求的1 180~1 538个有序集产生的。比如,当需要发送一个SKP有序集时,发送端正在发送一个TLP包,那么SKP有序集必须在当前TLP包发送完成后才可以进行发送。最坏的情况是,PCIe总线处于X1状态,而且在需要发送SKP有序集的时候,发送端刚好已经开始发送总线所支持最大TLP包数据。

规划弹性缓冲的容量大小,必须基于最坏的情况来考虑,其最大可能偏差的计算公式如下:

Max_symbols_shifted=1 666-1((Max_Payload_Size+TLP_Overhead)Link_With-1+1 538)

(1)

式中,Max_symbols_shifted为缓冲最大可能偏差;Max_Payload_Size为器件支持的最大TLP包的数据负载长度;TLP_Overhead固定为28个字符时间,包含包起始字符、结束字符、帧头及CRC字段等;Link_With为总线通信通道数目,这个值通常取1。

弹性缓冲主要包含了一个FIFO,在正常模式下,这个FIFO应该是半满的。如果弹性缓冲的写入时钟与读出时钟频率严格相等,那么FIFO将总是处于半满状态。如果弹性缓冲的写入时钟与读出时钟频率存在频率偏差,那么弹性缓冲将缓存在弹性缓冲中的SKP有序集中的SKP字符删除或者插入,保持FIFO是半满的状态。根据式(1),在最坏情况下依然能保持FIFO半满状态,那么弹性缓冲中FIFO的深度必须大于Max_symbols_shifted的2倍。

在PCIe总线接收端,根据总线恢复时钟及本地时钟的快慢情况,弹性缓冲区可以分为以下几种情况进行处理:

(1)总线恢复时钟快于本地时钟。

当总线恢复时钟快于本地时钟的时候,写入弹性缓冲区的数据将会比读出数据多,本地时钟域在获得SKP有序集的COM字符时,弹性缓冲中FIFO数据将会超过半满状态,如图1所示。

如果本地时钟在弹性缓冲区获得SKP有序集的时候,弹性缓冲FIFO的数据超过半满状态大于2个字符,那么弹性缓冲控制弹性缓冲FIFO的读指针在读SKP有序集的时候加3;弹性缓冲FIFO的数据超过半满状态1个字符,那么弹性缓冲控制弹性缓冲FIFO的读指针在读SKP有序集的时候加2;弹性缓冲FIFO的数据刚好半满状态,那么弹性缓冲控制弹性缓冲FIFO的读指针在读SKP有序集的时候加1。

(2)总线恢复时钟慢于本地时钟。

当总线恢复时钟慢于本地时钟的时候,写入弹性缓冲区的数据将会比读出数据少,本地时钟域在获得SKP有序集的COM字符时,弹性缓冲中FIFO数据将会少于半满状态,如图2所示。

图1 恢复时钟快于本地时钟

图2 恢复时钟慢于本地时钟

如果本地时钟在弹性缓冲区获得SKP有序集的时候,弹性缓冲FIFO的数据少于半满状态达2个字符,那么弹性缓冲控制弹性缓冲FIFO的读指针在读SKP有序集的时候停顿2个本地时钟周期;弹性缓冲FIFO的数据少于半满状态1个字符,那么弹性缓冲控制弹性缓冲FIFO的读指针在读SKP有序集的时候停顿1个本地时钟周期;弹性缓冲FIFO的数据刚好半满状态,那么弹性缓冲控制弹性缓冲FIFO的读指针在读SKP有序集的时候加1[10-11]。

3 PCIe弹性缓冲区仿真

文中所描述的弹性缓冲采用Verilog HDL语言设计,保证逻辑设计与工艺无关,可方便应用于FPGA设计或者ASIC芯片设计中。对设计代码采用SPYGLASS工具进行代码风格检查及CDC(时钟域检查),保证代码的可靠性。同时构建仿真平台,模拟恢复时钟及本地时钟的频率差异的多种情况,保证弹性缓冲区正常工作[12-13]。

4 结束语

文中分析了高速串行总线PCIe数据通讯的同步问题,研究了弹性缓冲进行高速串行总线数据同步的基本原理,根据PCIe总线协议提出了一种适用于PCIe总线的弹性缓冲设计方法,并验证了其可行性。同时,该弹性缓冲设计方法的提出对其他高速串行通信的通信缓冲设计也有一定的参考意义。

[1] 马 萍,唐卫华,李绪志.基于PCI Express总线高速数采卡的设计与实现[J].微计算机信息,2008,24(25):116-118.

[2] 徐君明,裴先登,王海卫,等.高性能计算机I/O技术PCI Express分析[J].计算机工程,2004,30(12):6-7.

[3] 王 齐.PCI Express体系结构导读[M].北京:机械工业出版社,2010:350-362.

[4] 马鸣锦.PCI、PCI-X和PCI Express的原理及体系结构[M].北京:清华大学出版社,2007.

[5] Data book PEX 8311 detailed technical specification[M].[s.l.]:PLX Technology,2009.

[6] Joe Winkles J.Elastic buff implementation in PCI express device[M].[s.l.]:Mindshare Inc,2003.

[7] PCI-SIG.PCI ExpresTM base specification revision[S].[s.l.]:PCI-SIG,2005.

[8] PCI-SIG.PCI Express® 2.0 base specification revision[S].[s.l.]:PCI-SIG,2006.

[9] Dally W J.Virtual-channel flow control[J].IEEE Transactions on Parallel and Distributed Systems,1992,3(2):194-205.

[10] 刘洪波,龙 娟,郝晓莉,等.异步FIFO状态判断的研究与设计[J].微电子学与计算机,2007,24(3):81-84.

[11] 张维旭,贺占庄.基于FPGA的异步FIFO设计[J].计算机技术与发展,2006,16(7):168-170.

[12] 郭 蒙,田 泽,蔡叶芳,等.1553B总线接口SoC验证平台的实现[J].航空计算技术,2008,38(6):99-101.

[13] 韩 霞,杨洪斌,吴 悦.面向SoC的事务级验证研究[J].计算机技术与发展,2007,17(3):33-36.

Design and Implementation of PCIe Physical Layer Elastic-buffer

LIAO Yin-long,TIAN Ze,ZHAO Qiang,MA Chao

(Key Laboratory of Aeronautics Science and Technology of Integrate Circuit and Micro-system Design, AVIC Computing Technique Research Institute,Xi’an 710068,China)

PCIe is a new generation of bus and interface based on PCI bus,its original name is "3GIO",was introduced by Intel in 2001.PCIe belongs to dual channel high bandwidth transmission of high speed serial point to point,the connected equipment allocates unshared bandwidth of channel that do not share bus bandwidth,mainly supporting the functions including active power management,bug reports,end to end transmission of the reliability,hot swappable and Quality of Service (QoS) etc.PCIe had been widely applied in computer,communication,aeronautics and astronautics and other fields as the high-speed-serial data bus.In order to realize stable and reliable communication,elastic-buffer is considered as necessary in PCIe which is used to ensure data integrity between the recovered clock domain and the local clock domain.It analyzes the clock-skew under the variable scenes based on PCIe specification and designs a kind of elastic-buffer with 20 bits data bus and 250 MHz R/W clock frequency,solving the problem of data synchronization between bus recovery clock domain and local clock domain.

PCIe;elastic-buffer;synchronous-FIFO;half-full

2015-08-31

2015-12-09

时间:2016-05-25

中国航空工业集团公司创新基金(2010BD63111)

廖寅龙(1982-),男,工程师,研究方向为SoC设计与验证;田 泽,博士,研究员,中国航空工业集团首席技术专家,研究方向为SoC设计、嵌入式系统设计、VLSI设计等。

http://www.cnki.net/kcms/detail/61.1450.TP.20160525.1708.042.html

TP39

A

1673-629X(2016)06-0168-03

10.3969/j.issn.1673-629X.2016.06.037

猜你喜欢

缓冲区字符时钟
别样的“时钟”
古代的时钟
字符代表几
一种USB接口字符液晶控制器设计
图片轻松变身ASCⅡ艺术画
HBM电子称与西门子S7-200系列PLC自由口通讯
基于网络聚类与自适应概率的数据库缓冲区替换*
有趣的时钟
时钟会开“花”
一类装配支线缓冲区配置的两阶段求解方法研究