APP下载

基于PCIE2.0的物理层弹性缓冲器设计

2014-06-07赵建中

计算机工程 2014年10期
关键词:指令集缓冲器字符

郑 乾,晏 敏,赵建中,李 优,张 锋

(1.湖南大学物理与微电子科学学院,长沙410082;

2.中国科学院微电子研究所专用集成电路与系统研究室,北京100020)

基于PCIE2.0的物理层弹性缓冲器设计

郑 乾1,2,晏 敏1,赵建中2,李 优2,张 锋2

(1.湖南大学物理与微电子科学学院,长沙410082;

2.中国科学院微电子研究所专用集成电路与系统研究室,北京100020)

弹性缓冲器是PCIE,USB等高速串行总线物理层接收器的重要组成部分,用于物理层接收器中恢复时钟与本地时钟的频率补偿和相位同步,对信号的传输质量起着重要作用。基于PCIE2.0协议,采用存储器常半满的实现方式,设计一款深度、宽度均为10的弹性缓冲器。该弹性缓冲器应用于PCIE2.0的物理层设计中,并采用SMIC 55 nm CMOS工艺实现。芯片测试结果表明,该弹性缓冲器满足PCIE2.0协议的要求,可正常工作于500 MHz的时钟频率下,实现恢复时钟与本地时钟的频率和相位补偿,保证了接收器正常接收数据。

弹性缓冲器;频率补偿;SKP指令集;半满方式;异步FIFO

1 概述

PCI Express(PCIE)是第三代高性能 I/O总线,主要用于计算机与通信平台等应用的外围I/O互连[1]。PCIE总线采用串行高速差分总线替代传统的并行总线,并采用端到端的连接方式,能够获得更高的系统吞吐量,正在逐渐全面取代PCI和AGP总线,成为新的局部总线工业标准[2]。采用PCIE总线进行通信时,发送器采用差分对的方式发送串行差分信号,接收器则采用时钟和数据恢复电路从接收到的串行差分信号中恢复出时钟和发送器传送过来的串行数据[3]。由于发送器与接收器均有自己的独立时钟源,两者的时钟频率及相位可能存在一定的偏差,即接收端恢复出来的时钟与本地的参考时钟可能存在一定偏差。当数据从恢复时钟域传至本地时钟域时,需要进行跨时钟域处理,保证信号传输的品质。PCIE总线采用弹性缓冲器进行频率补偿和相位同步[4],保证数据正常传输。针对PCIE总线的实际工程应用,本文采用半满方式设计了一款弹性缓冲器。

2 弹性缓冲器

弹性缓冲器的作用在于桥接2个存在一定偏差的时钟域以补偿频率和同步相位[5],即采用一个时钟域(恢复时钟)存放数据进入缓冲器,采用另一个时钟域(本地时钟)从缓冲器中移出数据,同时监测自身的状态并且在适当的时候插入或移除特定字符来补偿频率偏差,避免溢出错误,如图1所示。

图1 桥接2个不同时钟域的弹性缓冲器

2.1 时钟频率补偿

PCIE2.0协议规定总线的最高传输速率为5 Gb/s,容许的误差范围是+/-300 ppm,即总线允许的频率范围为4.998 5 GHz~5.001 5 GHz[6]。由于参考时钟源不同,发送器与接收器的时钟频率可能出现微小偏差。如果用单元间距 UI来计算的话, 5 Gb/s的一个时钟单元间距为 200 ps,由于有+/-300 ppm的余裕,因此最坏情况下时钟单元间距分别为199.94 ps和200.06 ps,即两端最大时钟间距偏差为0.12 ps。因而约每隔1 666个周期,可能位移一个时钟单元间距[1]。既然时钟有差异,那么势必要对数据进行缓存处理,才能避免错误的发生。在PCI Express总线中,通常在传送的SKP指令集中插入或移除SKP字符来补偿这种时钟频率偏差。

2.2 SKP指令集

PCIE总线协议规范了SKP指令集,该指令集由1个COM字符加3个SKP字符组成,如图2所示。发送端将在一定字符间隔间发送SKP指令集[6]。因为在最差情况下,2个时钟域之间大概每经过1 666个周期位移一个时钟单元间距,所以SKP指令集的传输间隔必须小于1 666个时钟周期。根据PCI Express总线协议规范,发送端在1 180个~1 538个字符时间间隔(不是位时间)输出SKP指令集,而弹性缓冲器在接收到SKP指令集时,最多可插入或移除2个SKP符号以补偿两端的时钟频率偏差。之所以不是位时间,是因为SKP符号的插入和移除每次都是整个字符在处理[7]。插入和移除的位置通常位于第一个SKP字符之后,目的是保证极性的正确性以避免8b/10b解码过程发生极性错误。

图2 SKP指令集

2.3 弹性缓冲器作用域

典型用于PCIE等高速接口的弹性缓冲器架构如图3所示。弹性缓冲器位于解串器之后,8b/10b解码器之前。因为弹性缓冲器是以符号的层次来补偿频率偏差,所以必须位于解串器之后。另外,PCIE总线协议规范了一种环回模式[7],即PCI Express设备可以将接收到的10位数据原封不动地通过发送端传送回去,数据必须通过弹性缓冲器进行同步,所以必须位于8b/10b解码器之前。

图3 高速接口弹性缓冲器典型架构

2.4 弹性缓冲器容量

SKP指令集通常依据规定的时间间隔周期性送出,但当TLP数据交易层封包很大的时候,必须等到整TLP封包发送完之后,才将累积的待传送SKP指令集发送出去[5]。所以,需要考虑弹性缓冲器的深度以保证最大TLP数据传送时,也能正常补偿时钟偏差而不出现溢出状态。

弹性缓冲器的大小通常取决于3个因素,分别是:传送SKP指令集的时间间隔,设备支持的最大数据承载量(payload)及链路宽度[5]。SKP指令集字符间隔则明文指出为1 180个~1 538个字符,即最大间隔为1 538个字符。弹性缓冲器最大数据位移量的计算公式如下:

PCIE总线允许的最大数据承载量是4 096个字符,TLP基本数据量则包括数据框开始符号(1个字符)、封包次序符号(2个字符)、封包标头(16个字符)、ECRC(4个字符)、LCRC(4个字符)以及数据框的退出符号(1个字符)总共28个字符[7]。而SKP指令集字符间隔则明文指出为1 180个 ~1 538个字符。

根据最大数据位移量计算公式可知,最坏情况即当两端PCI Express设备以x1的连接状态存在时,输出端刚好必须输出SKP指令集的时候,输出最大数据承载量的封包。计算可得数据位移量为3.4个。

3 弹性缓冲器原理及实现

3.1 基本原理

弹性缓冲器实质上是一个异步FIFO[8],其写时钟为恢复时钟,其读时钟为本地时钟,FIFO深度则取决于数据最大位移量。

若弹性缓冲器的读写时钟频率一致,弹性缓冲器正常传送SKP指令集[9],如图4所示。

图4 正常的SKP指令集传送示意图

若写时钟频率小于读时钟频率时,读出的数据多于写入的数据,弹性缓冲器在检测到SKP指令集输出时,根据实际的数据位移量在SKP指令集的第一个SKP字符之后插入1个或2个SKP字符[9],如图5所示。

图5 插入SKP字符的SKP指令集传送示意图

若写时钟频率大于读时钟时,写入的数据多于读出的数据,弹性缓冲器在检测到SKP指令集输入时,根据实际的数据位移量在SKP指令集的第一个SKP字符之后移除1个或2个SKP字符[9],如图6所示。

图6 移除SKP字符的SKP指令集传送示意图

3.2 实现方式

弹性缓冲器的实现方式通常有2种:常半满方式和流程控制方式[5]。常半满方式采用把缓冲器维持在半满状态的方式实现,当检测到SKP指令集的时候,若弹性缓冲器不处于半满状态,写时钟频率小于读时钟频率时,保持读地址指针不变,输出插入的SKP字符,写时钟频率大于读时钟频率时,则保持写地址指针不变,将写入的SKP字符移除[10]。流程控制方式则不同于常半满方式,该方式不把缓冲器维持在半满状态,而是只维持在一个底端进入点的状态[11],当检测到SKP指令集的时候,若写时钟频率大于读时钟时,其工作过程与常半满方式是一致的,而写时钟频率小于读时钟频率时,则产生相应的使能信号,控制读时钟而不让读时钟进行读操作。常半满方式与流程控制方式均有各自的优缺点,常半满方式实现的弹性缓冲器其缓冲器深度较深,等待时间较长,但其电路实现简单,而且不用门控时钟,有利于DFT的实现。流程控制方式则可降低缓冲器的深度,相应等待时间较短,但需要添加额外的电路模块去产生相应的使能信号,较复杂,同时该使能信号必须控制后续解码器等电路的时钟,即会产生门控时钟,不利于DFT的实现。本文基于常半满方式实现弹性缓冲器。

4 半满弹性缓冲器结构设计

根据弹性缓冲器容量计算知道,当PCIE总线允许的最大数据承载量是4 096个字符时,数据的位移量为3.4个,故弹性缓冲器的深度应该为8,以满足4个字符的位移量。考虑到读写时钟本身存在相位偏差,故实际设计弹性缓冲器的深度为10,以保证在最差情况下弹性缓冲器依然能正常工作。

本文的常半满弹性缓冲器的基本结构如图7所示,包括读写地址指针模块、读写地址指针同步模块、数据位移量检测模块、SKP指令集检测与增删模块和存储器模块。

图7 弹性缓冲器基本结构

4.1 读写地址指针

读写地址指针模块用来控制存储器的读写地址指针。因为弹性缓冲器的深度为10,需要4位来编码10个地址。考虑到读写地址指针以逐一递增的方式改变,故采用二进制码的编码方式,即从0000~1111中选取10个地址。考虑地址指针比较需要在同一个时钟域进行,而且采用格雷码实现时钟域过渡,故选取的地址范围为0011~1100,读地址read_addr从0011开始,写地址write_addr从1000开始,循环变化,插入或移除SKP字符时保持地址不变。

4.2 读写地址指针同步

读写地址指针分别在读写时钟控制下递增,由于读写时钟存在一定范围的频率差或者相位差,直接进行比较容易造成错误判断,因此需将读写地址指针分别同步到同一个时钟域下。二进制码的编码方式存在同时多位变化,为了避免毛刺的产生,需将二进制码转换为格雷码,同步到另一个时钟域,再将格雷码转换成为二进制码[12]。

4.3 数据位移量检测

数据位移量检测模块主要在于根据读写地址指针的差值来判断实际缓冲器中的数据位移量。理论上读写地址指针的初始差值应该为5。因为2个时钟可能存在相位偏移,所以超前时钟域对应的读写地址指针的初始差值为6,滞后时钟域对应的读写地址指针的初始差值为5。弹性缓冲器开启后,根据位移量的大小产生相应的控制信号,对于写时钟域,当位移量大于6时产生over信号,当位移量大于7时产生over_more信号,当位移量等于0时,产生弹性缓冲器full信号。对于读时钟域,当位移量小于4时,产生under信号,当位移量小于3时,产生under_ more信号,当位移量等于0时,产生弹性缓冲器empty信号。

4.4 SKP指令集检测与增删

SKP指令集检测与增删模块在于检测数据流中的SKP指令集并根据数据位移量检测模块产生的控制信号进行SKP字符插入或移除。由于COM字符为K28.5字符,SKP字符为K28.0字符,因此分别用k28p5_wr、k28p0_wr、k28p5_rd、k28p0_rd分别代表写入COM字符,写入SKP字符,读出COM字符,读出SKP字符。为了保证检测到SKP指令集以及在第一个SKP字符之后插入或移除SKP字符,采用三级流水线对这6个信号进行锁存。同时,根据数据位移量模块的控制信号,产生remove_skp以及insert_skp信号控制SKP字符的移除以及插入。当over_more信号有效时,对写入的SKP指令集移除2个SKP字符,当over_more信号无效,over信号有效时,对写入的SKP指令集移除一个SKP字符。当under_more信号有效时,对输出的SKP指令集插入2个SKP字符,当under_ more信号无效,under信号有效时,对输出的SKP指令集插入一个SKP字符。

4.5 存储器模块

该弹性缓冲器存储单元位宽为10 bit,深度为10,故没有采用专门的存储单元库实现,而是采用寄存器来实现。即寄存器实现的双口RAM结构。

5 弹性缓冲器的仿真验证与电路实现

本文的弹性缓冲器设计采用Verilog HDL硬件描述语言设计,通过VCS做功能仿真验证。仿真结果如图8~图11所示。

图8 移除单个SKP字符的仿真结果

图9 插入单个SKP字符的仿真结果

图10 累积移除3个SKP字符的仿真结果

图11 累积插入3个SKP字符的仿真结果

本文弹性缓冲器采用SMIC 55 nm CMOS工艺在不同的工艺角下进行综合,读、写时钟频率均为500 MHz,并采用较为保守的时序约束,综合所得电路的功耗和面积如图12所示。其中,SS代表PVT:ss corner,1.08 V,125℃;TT代表 PVT:tt corner,1.2 V,25℃;FF代表PVT:ff corner,1.32 V, -40℃。

图12 弹性缓冲器面积与动态功耗综合结果

6 结束语

本文设计一种弹性缓冲器,将该弹性缓冲器集成到PCIE2.0的物理层设计中,并采用SMIC 55 nm CMOS工艺进行流片,测试结果表明,该弹性缓冲器完全满足PCIE2.0协议的具体要求,读写时钟达到500 MHz,实现了频率补偿和相位同步,且数据能够正常传送。

[1] Budruk R,Anderson D,Shanley T.PCI Express System Architecture[M].[S.l.]:MindShare,Inc.,2003.

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

[3] Dhawan S K.Introduction to PCI Express——A New High Speed Serial Data Bus[C]//Proc.of Nuclear Science Symposium Conference Record.[S.l.]:IEEE Press,2005:687-691.

[4] Intel Corporation.PHY Interface for the PCI Express, SATA and USB 3.0 Architectures[EB/OL].(2013-10-23).http://www.intel.com/content/www/us/en/io/pciexpress/phy-interface-pci-express-sata-usb30-architectures. html.

[5] Winkles J.Elastic Buffer Implementations in PCI Express Devices[EB/OL].(2003-11-12).http:// www.docin.com/p-118906415.html.

[6] 刘瑞梅,韩晓毅.PCI Express总线PHY接口技术分析[J].河北建筑工程学院学报,2010,28(1):129-133.

[7] 陈乃塘.从PCIe探索弹性缓冲器真义[J].电子测试, 2005,(10):48-51.

[8] Cummings C E.Simulation and Synthesis Techniques for Asynchronous FIFO Design[EB/OL].(2005-06-16).http://www.docin.com/p-46476833.html.

[9] 陈乃塘.PCI Express数据连接层与物理层(上)[J].电子测试,2004,(8):39-50.

[10] 刘奇浩,翁惠辉.65 nm工艺下基于PCI Express2.0协议的物理编码子层设计[J].中国集成电路,2013, (3):40-45.

[11] Michelogiannakis G,Balfour J,Dally W J.Elastic-buffer Flow Control for On-chip Networks[C]//Proc.of the 15th International Symposium on High Performance Computer Architecture.Raleigh,USA:IEEE Press, 2009:151-162.

[12] Schutti M,Pfaff M,Hagelauer R.Data Transfer Between Asynchronous ClockDomainsWithoutPain[D]. [S.l.]:Research Institute for Integrated Circuits,2000.

编辑 任吉慧

Design of Elastic Buffer at Physical Layer Based on PCIE2.0

ZHENG Qian1,2,YAN Min1,ZHAO Jian-zhong2,LI You2,ZHANG Feng2
(1.School of Physics and Electronics,Hunan University,Changsha 410082,China;
2.ASIC&System Department,Institute of Microelectronics of Chinese Academy of Sciences,Beijing 100020,China)

Elastic buffer is a very important function in receiver at high-speed serial protocols such as PCI Express (PCIE)and USB.The frequency delta and phase delta are managed perfectly to ensure data integrity by the elastic buffer when bridging local clock domain and recovered clock domain.This paper proposes elastic buffer logic in primed method to satisfy PCIE2.0 protocol specification.The width and depth of the elastic buffer are both 10.The proposed logic is integrated into Physical Layer(PHY)and implemented based on 55 nm CMOS process of SMIC.The result to be measured well agreeds with the actual requirement.It can work well under the frequency of 500 MHz and ensure data to

ata correctly.

elastic buffer;frequency compensation;SKP instruction set;half-full method;asynchronous First Input First Output(FIFO)

1000-3428(2014)10-0071-05

A

TN942

10.3969/j.issn.1000-3428.2014.10.014

国家“863”计划基金资助项目(2011AA010403)。

郑 乾(1987-),男,硕士研究生,主研方向:高速接口电路设计,计算机体系结构设计;晏 敏,副教授;赵建中,助理研究员;李 优,博士研究生;张 锋,副研究员。

2013-11-04

2013-12-10E-mail:zhengqian@hnu.edu.cn

中文引用格式:郑 乾,晏 敏,赵建中,等.基于PCIE2.0的物理层弹性缓冲器设计[J].计算机工程,2014, 40(10):71-75.

英文引用格式:Zheng Qian,Yan Min,Zhao Jianzhong,et al.Design of Elastic Buffer at Physical Layer Based on PCIE2.0[J].Computer Engineering,2014,40(10):71-75.

猜你喜欢

指令集缓冲器字符
更正
重载货车用缓冲器选型的研究及分析
3DNow指令集被Linux淘汰
字符代表几
一种USB接口字符液晶控制器设计
HBM电子称与西门子S7-200系列PLC自由口通讯
消失的殖民村庄和神秘字符
实时微测量系统指令集及解析算法
什么是AMD64
基于覆盖率驱动的高性能DSP指令集验证方法