林凡淼,雷淑岚,陆晓峰,张 恒
(中科芯集成电路有限公司,江苏无锡 214072)
高速串行计算机扩展总线标准(PCIE)是外设部件互连标准(PCI)的一种,且具有带宽大、速度快、成本低等特点,因此越来越多的设备将PCI接口转换成PCIE接口来使用[1],但目前有的服务器主机上没有设计PCI槽位,导致越来越多的PCI设备无用武之地。鉴于这种大量PCI设备因接口问题而无法使用的情况,众多学者研究了数据转换技术及应用,如单纯的PCI交换技术[2]、基于PCI和PCIE的XMC/PMC载板设计[3]、PCIE总线及其交换技术[4]以及双向PCI-PCIE桥接电路的验证技术[5]等,使PCIE数据转换成PCI进行通信,可以在很大程度上节省投入的时间和成本,避免因接口不对而无法通信的局面,因此研究PCIE转PCI总线高速数据转换技术是很有必要的。
文献[6-7]均为PCIE转PCI总线的扩展槽,主要针对服务器主机机箱空间限制及PCI插槽数量问题做的一种线缆扩展装置,该装置无法实现数据的转换和交互及对PCI卡槽工作模式的设置,并且只局限在机箱主板内而无法应用在其他场合。本文以PI7C9X130芯片为核心,选择合适的通用器件来搭建外围电路,设计PCIE转PCI电路系统及简单有效的测试方法,配置完成后只需上电即可直接运行,满足数据转换和传输的需求。
根据功能及测试要求,整个电路系统在一块PCB板卡上实现,包括CPU、PCIE及PCI接口(上下游)模块、时钟模块、电源模块、CPLD模块、基本模式配置模块、EEPROM模块等,系统架构如图1所示。
图1 电路系统架构
上游为PCIE X4金手指(定义为P3),下游为2个PCI卡槽(定义为P1和P2),通过基本模式配置电路对CPU相关管脚进行配置,使CPU正常工作,给下游PCI卡槽提供数据和时钟信号,从而可以实现数据转换和传输。下游的2个卡槽共享时钟和数据且工作在相同的频率,通过中断及设备识别号(IDSEL)信号来区分。时钟分2种方式给入CPU,一种由金手指(P3)直接给入,此方式称为内部时钟输入且频率由CPU引脚配置;一种由33 MHz晶振通过CPLD配置时钟管理芯片后给入,此方式称为外部时钟输入,可输出不同的时钟频率。电源模块为整个电路系统提供稳定且干净的电源输入,保证整个系统工作稳定且高效。本文重点介绍几个重要模块的设计,模块之间相互配合,使得PCIE转PCI的数据转换和传递高速、高效且稳定。
本文采用Pericom公司的桥芯片PI7C9X130作为核心处理单元,该芯片具有高集成度、低功耗、小体积、低成本和外围电路简单等特点,广泛应用于服务器、存储器、网络交换器等设备,拥有众多工作模式及参数选择,因此配置比较灵活方便。该桥芯片可支持下游最多7路PCI端口(本文只需2个)且相互独立,因此十分符合本文的设计架构。其主要特征如下:
(1)支持PCIE-to-PCI桥规范1.0版本,PCIE基本规范1.1版本以及X4链接宽度(速率2.5 Gbit/s),最大有效载荷512 Byte;
(2)支持PCI总线标准3.0版本,PCI-to-PCI桥体系结构规范1.2版本,PCI-X补充协议2.0a,PCI热插拔规范1.1版本,PCI中断模式;
(3)支持正向或反向、透明桥或非透明桥、内部仲裁或外部仲裁、时钟频率配置等工作模式;
(4)具有I2C、SM总线、JTAG等接口;
(5)典型功耗仅为1.5 W,且具有辅助电源系统,可有效保护芯片避免电流的冲击影响;
(6)7个通用输入/输出引脚。
PI7C9X130配置寄存器完全与现有的PCI桥软件及防火墙兼容,在原始操作中不需要对PCI桥软件及防火墙进行更改操作,因此减轻了工作量,应用起来更加方便、快捷。
上游的PCIE端只需接金手指的时钟差分对(REFCLKP/REFCLKN)即可,下游的PCI卡槽端时钟来源是通过CPU时钟输入引脚CLKIN/M66EN(T6)来实现,分为内部时钟和外部时钟,不同的模式(PCI/PCI-X)使用不同的时钟来源。若要运行在PCI模式则使用内部时钟频率,通过CLKIN/M66EN(T6)、PCIXCAP(A4)和SEL100(E14)这3个引脚的配置来确定时钟频率并输出至下游卡槽,通过配置可运行在25~66 MHz不等。
若要运行在PCI-X模式则使用外部时钟电路,通过电路产生的时钟接入CLKIN/M66EN(T6)即可,且输出时钟CLKOUT[0:6]中的某一根必须反馈到CPU的FBCLKIN(B4)引脚。时钟电路采用33 MHz有源晶振接入ICS公司的可编程时钟管理芯片ICS307-02,通过CPLD对其配置可输出需要的时钟频率。该芯片通过时序来控制输出频率,最高可达200 MHz且在10 ms内锁定,工作高效稳定,满足电路功能需求。
为方便切换,相关引脚的高低电平配置利用拨码开关来实现。下游2个卡槽的时钟线即CLKOUT0和CLKOUT1需等长且各串联1个22Ω电阻来保证信号质量。
上游的PCIE接口与CPU的连接有4对差分输入信号、4对差分输出信号、1对差分时钟信号和1个复位信号,按照定义正确连接即可,在金手指的接收端和差分时钟信号上必须放上隔离直流的电容(0.1μF,封装0402)。SMBus接口和EEPROM接口通过0Ω电阻选焊的方式实现。
PRSNT1#、PRSNT2#和PRSNT3#是PCIE卡实现热插拔机制的边带信号,因上游金手指宽度为X4,因此需将PRSNT1#和PRSNT3#短路连接,PRSNT2#可选择悬空,这3个信号的金手指长度要比其他信号的金手指长度短一点,以便区分于其他重要信号。
下游的PCI接口与CPU的连接有64 bit数据线、控制线、中断等,2个卡槽除了设备识别号(IDSEL)、仲裁号(REQ#)、总线使用权(GNT#)及时钟线外均相同。2个卡槽的热插拔机制边带信号均作上拉处理。
JTAG为可选信号,本文采用上游的JTAG信号预留接口而下游的JTAG信号均作上拉处理。为保证信号完整性和信号质量,上下游总线均需符合标准的高速总线硬件设计规范,因此上游的发送端和接收端数据线阻抗控制在(85±8.5)Ω且等长,时钟阻抗控制在(100±10)Ω,下游的数据线阻抗控制在(65±6.5)Ω且等长。
CPU支持多种配置方式,不同的配置方式有其相对应的功能,因此在配置时要反复检查是否正确,本文从CPU模式配置及下游PCI/PCI-X模式及其频率配置两个方面进行介绍。
本文所需的模式是支持I2C、透明桥、内部仲裁、正向(PCIE-to-PCI)、支持热插拔等,因此只需令相关引脚置高或置低即可,通过拨码开关进行配置,部分重要信号取值如表1所示。
下游卡槽所使用的PCI或PCI-X模式也需要配置,CPU的PCIXUP(B3)和PCIXCAP(A4)引脚通过1 kΩ电阻连接并使用56 kΩ电阻上拉,通过电阻和电容的不同组合方式来确定使用的是哪种模式(PCI模式、PCI-X 66 MHz模式、PCI-X 100 MHz或133 MHz模式)。若运行在PCI-X 100 MHz或133 MHz模式,则由CPU的SEL100(E14)引脚的高低电平来确定,具体电路实现如图2所示。
表1 部分信号取值表
图2 下游PCI卡槽模式选择
通过对CPU的正确配置,整个电路系统工作正常,为数据交换提供了稳定环境。
电源模块分2路电源输入,一路是5 V稳压电源,该电源接通后经过2次LDO芯片[8]将5 V转换为3.3 V和1.8 V供CPLD使用,通过LED灯来判定CPLD是否工作正常,该路电源仅调试CPLD的功能。另一路为金手指输入,金手指可提供12 V和3.3 V电源,而下游PCI卡槽需±12 V、3.3 V和5 V,因此3.3 V和12 V由金手指直接获取,而-12 V则通过电平转换芯片LT1054CDWR将12 V转换得到。CPU有I/O口、内核、PLL及模拟和数字共10种电源,可分为4个功能模块。为了有效区分这4个功能模块,采用BGA封装且有4路输出的DC-DC电源芯片LTM4644来进行电压转换及供给,CPLD控制每路的使能(高电平有效),每路的输出电流可达4 A且转换效率在90%以上,可通过匹配电阻和启动电容来调节输出电压及上电时间(本文默认0.1μF,上电时间大约20 ms),满足电源功能需求。
由于下游卡槽有3.3 V和5 V两个电压环境(SVIO),因此做了可选择性设计即通过0Ω来选择电压环境,这样可兼容不同电压环境的PCI设备。整个电源模块设计架构如图3所示。
通过该电源方案,将CPU及外围器件的电源根据模块不同层层分开,各电源独立工作,模拟和数字互不干扰,可大大降低串扰的风险,减少各功能模块的电源压力,提高工作效率。
图3 电源模块设计架构
将各个模块整合在一块PCB上进行设计,最终实物如图4所示。在PCB布线方面,从金手指出来的信号走差分对接入PI7C9X130的PCIE接口,隔离直流电容要尽量靠近金手指,出来的时钟线接入下游的PCI卡槽必须等长,且尽量敷铜把时钟线保护起来,反馈于FBCLKIN引脚的时钟线要比接入下游卡槽的时钟线长大约2.5 mm。
图4 整板PCB实物
在板厚和板层方面,由于有金手指,所以采用标准板(厚1.6 mm)。该板有较多的差分对信号且PCIE信号为高速信号,因此板层不宜较多(本文为10层),否则会影响数据传输质量。
在方便调试方面,在板中一些重要的信号或引脚上设置测试点(尤其是时钟和电源),方便后续调试。对于BGA封装的元器件尽量多扇出,这样可以方便飞线进行连接。
上游为X4通道的PCIE金手指,用于接入宿主处理器系统(Linux系统)的PCIE总线,下游为2个PCI(64 bit)卡槽,能够插入任意PCI设备。将PCB板插入PC机或其他处理器主板的PCIE插槽上,下游卡槽分别插入一个PCI千兆网卡(BCM5704),再将测试系统的网络端口与外部测试电脑的网口通过网线全部接入网络交换器,构成测试环境,如图5所示。
图5 板卡测试环境
测试环境搭建完成后,按照如下步骤进行测试:
(1)在宿主处理器系统内通过扫描总线上挂载的全部设备列表,测试硬件挂载是否成功;
(2)下游卡槽在不同工作模式下通过外部测试电脑PC2对宿主处理器系统PC1进行网络ping包,统计ping包的传输时间及丢包率,验证电路系统的稳定性。
根据3.1节的介绍搭建好测试环境,在PC1上使用lspci命令扫描设备,扫描到的设备如图6所示,可以看到扫描到桥芯片PI7C9X130及网卡BCM5704。
挂载成功后进行网络ping包,并通过跳线及拨码开关来选择下游卡槽的不同工作模式,查看其性能指标,在这里网络ping包的量级统一使用115200,运行30 min后统计传输时间及丢包率,测试结果如表2所示。
图6 设备挂载
表2 下游卡槽不同工作模式下ping包性能
无论是PCI模式还是PCI-X模式均能上下游ping通,且随着传输速率的增加,传输时间及丢包率均有一定的增加,但均小于10 ms和5×10-4,满足设计指标。因UDP协议在高速数据传输过程中会有少量丢包的情况,因此该电路系统的各项指标均在可接受范围内且工作比较稳定。P2卡槽的情况与P1类似,不再赘述。将本文与文献[3]所设计的PCIE转PCI桥电路系统进行对比(仅列举几个重要模块设计),如表3所示。
表3 与文献[3]的电路系统对比
在电路系统设计方面,本文涉及的元器件较少且设计更加合理和科学,采用灵活配置的多种方式可在不同工作环境下选择;在结果方面,文献[3]采用FPGA模拟数据存入,最后用示波器来观察其输出波形,本文可在不同模式下进行ping包来测试性能,覆盖面更广且更接近实际应用,因此本文设计的电路系统具有更好的实际工程价值。
综上所述,该电路系统达到预期功能及稳定性指标,符合设计要求。
本文设计了一种基于PI7C9X130的PCIE转PCI的电路系统且集成于一块PCB上,通过搭建测试环境,根据测试步骤进行测试,测试结果表明该设计可靠稳定。从网络ping包的情况来看,UDP协议在数据包较大且高速传输下会存在一定的丢包率,实验结果表明随着数据传输速率的增加会有些延迟及丢包率,但满足传输时间小于10 ms、丢包率小于5×10-4的设计指标,符合设计要求;从设计复杂度和合理性情况看,外围电路较简单,所需器件较少且多处做了可选择性设计,方便按需切换。该设计可实现PCIE对PCI的数据转换且高效稳定,但在较苛刻的工作模式下仍有一定的丢包率,因此可继续优化电路方案及PCB布局布线,选用性能更优的元器件,进一步提高可靠性。