自 序
人是什么单位,人生又如何衡量?
熊培云在《思想国》中讲,人是时间单位,因为我们在提到某人的时候,总是在人名后面跟上一个括号,并注明生卒年份,以示起止。
除了这个差值,还用什么衡量?
数学上,通常将时间看成一个维度,即以时间为坐标系的横轴,那纵轴呢?见仁见智,人的选择和作为应该是一个维度,人物传记是这样写的,什么时间做了什么事。
那号称知识分子的我们,若早已过了彷徨的年龄,其使命又当如何?
打破框架,探索未知。
打破框架,何其难也。文明得以发展,在于经验和知识的累积,而这种累积,多数又来源于各种权威的言传身教,就像父母告诫小朋友,冰激凌吃多会肚子痛一样,一一得到了验证,长此以往,框架得以形成,触碰不得。框架有利于知识的传授,也会束缚人的头脑,意大利的水手Amerigo Vespucci发现了一个大的岛屿,而权威《圣经》中竟然没有记载,就觉得不可思议,不可理喻。
而终有人会承认这种事实存在、证据确凿的未知,于是,框架终究会被打破,美洲America就此诞生。
所以人虽无往不在枷锁之中,却是生而自由的,知识分子在解决温饱问题后,可以思其力之所不及,忧其智之所不能,嫦娥奔月不也从神话变成了现实吗?
所以应心怀梦想,坚韧追寻,应王国维先生的“昨夜西风凋碧树,独上高楼,望尽天涯路”之境界,而社会的残酷、自扰、抵触、牵制、掣肘、诱惑终究共存,所以有隐忍、有退让,学胡适先生的“不降志、不屈身、不追赶时髦,也不回避危险”,虽有拘有束有碍,仍可自斟自饮自开怀。
人总是会老的,所谓百忧感其心,万事劳其形,渥然丹者为槁木,黟然黑者为星星,纵然头发稀少,两眼昏花,颈肩酸痛,双腿僵直,仍不觉辛苦,因为余心所善,不想了无意义。
本书的形成,历经波折,构思萌芽于2012年年底,苦于自身知识匮乏,算不上一份大餐,积累沉淀,到2014年年底渐觉内容充实,可一吐为快了,于是查阅典献,收集资料,匆忙恍惚间,2015年已过了大半,竟不能再迟疑。
总线技术是在多个项目实践中提取出来的,如高速存储、图像处理、信号处理、系统集成等,亲力躬行,才知深浅。本文中提到的各种总线,并不是3年之功,从2006年算起,已有10年。10年时间积累了这300多页内容,也不知是多还是少?2006年第一次接触PCI总线,2007年将PCI提升到了PCIX,2007年用会了SRIO总线,当时还是Virtex-2Pro盛行,现在已不见踪影,2008—2009年主要是SATA、SAS,2010年接触了PCIE/CPCIE,2011年闲暇时摸了Serdes技术,终于在2013年应用成熟,JESD204/Aurora也在这一年完成,2014年做了VPX架构的整机,2015年将SRIO的交换结构收入骰中。这也就是本书的主体内容,并在此基础上增加了对总线的发展历程、现状及后续趋势的描述与预测。而最后则是关于目前嵌入式系统中常用的其他串行总线(FC、Infiniband)了,作者并没有亲身实现,只是自行理解并资料汇编罢了。
当我们回首往事时,会发现很多激荡人心的故事,有的显焕一些,有的黯淡一些,当看到自己为发展而努力,为自由而奋斗,总是心底暖暖的。我们对于过去,固然可以看到无穷的光辉,对于将来,也必须抱着更大的期待。
努力吧,勤能补拙,不至虚度。
努力活吧,以时间的长度弥补智力的不足。
怀念过去,不畏将来,是为序。
张 峰
2016年9月于成都
前 言
总线概述及分类
总线,英文为“Bus”,Bus一词最初起源于拉丁文“omnibus”,意为“for all”,有三个含义:公共汽车、作家的作品合集、作为形容词意为综合性多功能的。最早始用于计算机领域,总线是指汇集在一起的多种功能的线路。后经深化和延伸,指计算机内各模块及计算机之间的一种通信系统,涉及硬件(器件、线缆)和软件(通信协议)。
IT行业以摩尔定律(Moore’s Law)在飞速发展,总线的性能也要与之适应并水涨船高。自从第一代计算机及总线问世以来,总线领域爆发了三次更新换代的革命:第一代总线以1984年IBM推出的PC/AT(Personal Computer/Advanced Technology)总线为蓝本,其速率最初不足1 Mbps,并最终形成了ISA(Industry Standard Architecture)标准,在1993年被PCI总线代替;PCI(Peripheral Component Interconnect Local Bus)总线是第二代总线的典型代表,2002年并行传输的PCI总线被串行传输的PCIE(PCI Express)总线代替;而目前PCIE 3.0版本的速率为8 Gbps,是最初的PC/AT总线的800倍,PCIE 4.0将支持16.0 Gbps,也即将问世。
在总线的发展过程中,有多种分类方式。
按传输速率分类:分为低速总线、高速总线。按业内规律,总线的传输时钟在66 MHz以下为低速总线,高于66 MHz为高速总线。
按连接类型分类:分为系统总线、外设总线、扩展总线等。
按适用范围分类:分为内部总线和外部总线。计算机机箱内的总线称为内部总线,如PCI;计算机机箱外的称为外部总线,如连接打印机的USB总线等。而有些总线内外都适用,如SATA为内部总线,而eSATA(external SATA)为外部总线。
按应用领域分类:有计算机系统应用总线、嵌入式系统应用总线等,PCI为计算机类总线,而CPCI(Compact PCI)则归为嵌入式系统类的应用总线。
按使用环境分类:分为航天、航空、车载、航载等总线,以满足不同的使用环境要求,如ARINC-429、ARINC-629、MIL-STD-1553B、CAN总线等。
按传输方式分类:分为并行总线和串行总线,并行总线通常采用1个时钟信号+多位并行数据信号的方式传输数据,如前面的ISA、PCI都为并行数据总线,在一个时钟周期内,传输多位数据;串行总线则将时钟嵌入到数据内,在一个时钟周期内传输1 bit数据,以串行比特流的方式实现数据通信。
本书关注的是嵌入式系统中的高速串行总线技术。
串行总线通信正当时
早期的总线多采用多位数据并行传输方式,通过提升并行数据位宽、数据运行频率,提升总线传输速率,如早期的PC/XT总线数据位宽是8 bit,运行频率为kHz级别,到1999年出现了PCIX总线,其数据位宽是64 bit,运行频率为133 MHz,总线的传输速率达到了1066 MBps。
总线的并行数据位宽及频率的提升带来了数据传输速率的飞跃,但也带来了其他问题:总线并行数据信号间的同步变得日益困难,且无法解决串扰问题,这导致多种并行总线协议的更新速率越来越慢,耗时越来越长,限制了总线性能的进一步提升,影响处理器性能的发挥,即通过提升总线的并行数据位宽及运行频率,以提升总线速率的方法走到了“死胡同”,业内迫切需要一种新的变革方式。
2000年前后,多个国际组织将眼光瞄向了基于比特流通信的串行总线结构,多种串行总线标准也如雨后春笋出世,如现在大名鼎鼎的PCIE、SRIO、SATA、FC等总线,也有推出后不久就“夭折”的,如Starfabric总线。Starfabric总线当时吸引了大量的风投,还推出了Starfabric的协议转换芯片,而最终还是以失败告终——Starfabric总线技术针对性不足。
目前,在PC领域和嵌入式系统中,基于比特流的高速串行通信总线正全面代替传统的并行数据总线方式,如前期广泛用于PC系统的并行数据总线PCI/PCIX,正被串行的PCIE总线所代替;曾经在存储领域独占江山的ATA(parallel ATA)总线、SCSI总线,分别被串行的SATA(Serial ATA)、SAS(Serial attached SCSI)所代替;与PC领域相对应的工业及嵌入式应用领域,串行总线的应用更是一发而不可收,出现了FC(Fiber Channel)、SRIO(Serial RapidIO)、Aurora等多种协议标准,即使针对ADC、DAC这种专用接口,也吸收了串行总线传输的思想,出现了JESD204协议,以代替传统的基于LVCMOS电平、多位数据线并行的ADC、DAC接口方式。鉴于目前高速串行总线的广泛应用,VITA组织推出了一种针对高速串行总线通信架构的标准——VPX,以规范上述多种串行总线的互连。
与串行总线的高速、先进相对应的是其开发过程的困难重重,串行的二进制比特流不能提供更多有效参考信息,只能以眼图判断信号完整性,而各种总线的协议分析仪,价格却不够亲民,调试手段有限,针对常用的高速串行总线,如何进行快速开发,尤其是FPGA内的应用开发,一直是业内的难题。本书试图对多种高速串行的共性技术进行提取,并对具体协议加以具体分析,实现过程具体展现,以实现基于FPGA甚至于整个嵌入式系统的高速串行总线的通信。
FPGA让一切皆有可能
既然总线是现代通信系统的神经,那相应处理器是就关节了。目前主流的处理器厂商推出的PowerPC、DSP、FPGA等芯片,均含有一种或多种高速串行通信总线接口,如高端的PowerPC、DSP通常含有SRIO及PCIE,有的还含有SATA存储接口。ASIC厂商的目标就是将这些复杂的总线功能做成如傻瓜相机一样,只要存在就会使用,而FPGA则是另类,除了总线的简单验证,还提供了二次开发功能,甚至还能玩“深沉”,DIY一些自主的IP核,可谓男女老少都喜欢,满足高中低各个层次的需求。