摘 要: 由于PCI总线属于并行总线,在数据传输的过程中,可能出现某个PCI设备故障或者无法产生响应信号,导致整个PCI总线系统瘫痪。为了解决这一难题,采用FPGA实现PCI总线硬件故障容错技术,保证PCI总线在总线设备偶发故障或者设备无响应信号情况下,能够恢复PCI总线传输功能,并有效地屏蔽故障的PCI设备。
关键词: PCI总线; 硬件故障; 容错技术; 数据传输
中图分类号: TN911⁃34 文献标识码: A 文章编号: 1004⁃373X(2016)14⁃0035⁃04
Error tolerance technology for PCI bus hardware fault
JIANG Xin 1, TANG Chao2, BAI Chen1
(1. AVIC Xi’an Aeronautic Computing Technique Research Institute , Xi’an 710068, China;
2. Military Representative Office at Xi’an Aeronautic Computing Technique Research Institute, Xi’an 710068, China)
Abstract: Since the PCI bus belongs to the parallel bus, a PCI device fault may occur or cause failure of response signal generation, which may result in paralysis of the entire PCI bus system during data transmission. That is why FPGA is used to realize the error⁃tolerant technology for PCI bus hardware fault to ensure that the PCI bus can recover its transmission function while the bus device occurs incidents or equipment has no response signal, and shield the PCI devices with fault effectively.
Keywords: PCI bus; hardware fault; error tolerance technology; data transmission
0 引 言
PCI总线(Peripheral Component Interconnect)是嵌入式计算机系统中最常使用的总线,但是由于PCI总线属于时分复用的双向应答总线,需要发起/应答信号间的相互配合,当PCI总线设备无响应的时候,PCI总线控制器就无法对其余的PCI设备进行正确的配置、读写等操作,会出现PCI总线时延较大,甚至总线瘫痪。
基于FPGA实现了一种硬件故障模式的PCI总线容错技术,通过可编程逻辑实现PCI桥的IP核,使得PCI总线控制器与其他PCI总线设备进行数据通信,解决了由于某个PCI总线设备无响应后,出现的PCI总线周期较长或将整个总线处于等待状态,并对故障设备进行隔离并恢复PCI总线数据传输功能。
1 PCI总线功能分析
1.1 PCI总线工作方式
PCI桥将CPU的数据与PCI设备的数据进行转换,并向PCI总线上的所有的PCI主设备(PCI总线的发送方,Master)和PCI从设备(PCI总线的接收方,Target)提供地址映射。
PCI总线是地址/数据线复用的非智能总线,也是一种时分复用双向应答总线[1]。PCI总线具有突发分组机制,总线传输协议步骤如下:
(1) 在PCI总线的地址周期中,PCI总线控制器通过C/BE[3:0]这4条PCI总线控制信号确定总线工作方式:I/O空间读写、存储器空间读写、总线配置空间读写或总线信息广播等;
(2) 通过REQ#和GNT#这2条PCI总线控制信号由仲裁机构确定总线的控制权;
(3) 在PCI总线的数据周期,根据步骤(1)的命令方式完成数据传输。
传统的PCI总线结构如图1所示。通过图1的PCI总线拓扑连接方式,发现PCI总线属于开放式连接,并无终端端接设备,这样的连接方式,决定了PCI总线信号传输是通过反射波实现。
当PCI总线主设备的总线驱动器驱动总线信号,总线驱动器只是将该信号的电平驱动到协议要求的电平一半,当该信号传输到PCI总线从设备后,将该信号完全反射回来,完成该信号的电平叠加,达到PCI总线协议要求的电平[2]。
根据PCI总线的信号传输的工作方式,同一PCI总线的主设备和从设备的总线接口驱动器的输入/输出阻抗必须保持一致。
1.2 PCI总线信号分类
PCI总线主设备:获取PCI总线主控权,能驱动地址/数据信号和控制信号,支持传统方式的读/写操作,同时也能支持突发传输,执行DMA操作,峰值数据率为132 MB/s,至少需要49根,比从设备多出的两根信号线分别是REQ#和GNT#(用来进行总线仲裁)。
PCI总线从设备:不能获取PCI总线控制权,只能被PCI主设备控制,被动接受主设备的读写操作,同时不支持DMA操作,至少需要47根信号线。
PCI总线信号描述如图2所示[3]。
PCI总线信号线的长度有要求:所有信号(除CLK信号)的最大走线长度为1 500 mil(1 mil=25.4 μm),CLK信号线的长度为(2 500±100) mil。REQ#和GNT#是点到点信号,与总线信号在输入建立时间和输出有效时延上有差别。
将32 b的PCI总线,设定的最高工作频率为33 MHz时,总线上的每一个信号在时钟的上升沿到来之前,都有一定的建立时间和保持时间,在这个时间段内不允许信号跳变。一旦过了时钟的上升沿,信号的值已经被设备采样,输入信号的建立时间<7 ns,输出信号[3]满足时钟上升沿至输出有效<11 ns,PCI总线主设备发出GNT#建立时间为10 ns,REQ#建立时间为12 ns。
2 PCI总线硬件故障模式分析
2.1 PCI总线硬件控制时序模式
PCI总线数据传输的整个过程是由主设备的FRAME#,IRDY#和从设备的TRDY#这三种信号相互配合完成,PCI总线数据传输分为3个阶段:
(1) FRAME#标明了一个完整的PCI总线数据传输的开始和结束,在其有效后的第一个时钟上升沿,主设备产生地址周期,分别在控制信号上传输总线命令和在地址/数据复用线上传输地址信息;
(2) 当下一个时钟的上升沿时,标志为一个或多个数据周期,主设备的IRDY#有效,同时从设备的TRDY#有效,开始数据传输,若主从设备的这两个信号无效,则PCI总线上主从设备可加入等待周期,等待主从设备产生有效的Ready信号;
(3) 最后一个数据周期开始时,在时钟的上升沿,首先主设备的FRAME#处于无效状态,保持主设备的IRDY#有效,等待从设备发出TRDY#无效,一旦TRDY#无效,标志着数据传输完成,同时主设备发出IRDY#无效,整个PCI总线数据传输完成,这时PCI总线的主设备释放总线控制权。
不管是主设备的数据写入从设备,还是主设备读出从设备的数据,都离不开FRAME#,IRDY#和TRDY#三种信号的相互配合,这三种信号任意信号无响应都会造成PCI总线的无限等待或者锁死,导致其他PCI设备无法正常响应,甚至PCI总线瘫痪。
PCI总线数据传输的终止过程要有主设备和从设备的相互配合,但是数据传输完成的最后一步需要由主设备发出IRDY#无效信号后完成。但是,不是任何一个开始或者即将开始的PCI总线数据传输都能够正常完成,在PCI总线协议设计之初,就涉及到了PCI总线数据传输中止情况,分为主设备主动发出的传输终止和从设备主动发出的传输终止:
(1) 主设备发出的终止情况。当主设备的GNT#无效且其主设备内部延时计数器已满,主设备强制FRAME#无效,同时产生IRDY#有效,同时从设备判定主设备提出传输中止请求,发出TRDY#有效,紧接着IRDY#无效,同时主设备IRDY#无效,满足数据传输完成的条件(FRAME#和IRDY#都无效)。或者当从设备在FRAME#信号建立后的至少5个周期还没有建立起DEVSEL#信号时,主设备将认为从设备没有能力响应或者地址有误且不能重复,而提前终止数据传输。
(2) PCI总线的某从设备处于非空闲状态或者某设备处于互斥访问的锁定状态,使得PCI从设备无法进行正常的信号响应或者由于从设备在其后来的等待时间内不能对主设备作出响应等原因,从设备向主设备发出STOP#信号以示请求终止,放弃本次PCI总线数据传输。
2.2 PCI总线容错机制实现
根据PCI总线的传输中止和正常完成的特点,为了保证整个PCI总线不被主、从设备无法正常产生信号握手响应,而导致PCI总线挂死,在FPGA内部实现一个PCI的IP_Core,PCI错误控制状态机和PCI标准接口。将FPGA作为一个带有容错机制的二级PCI⁃PCI透明桥模式控制器完成CPU与PCI设备之间的数据操作。
如图3所示,在FPGA内部实现一个开放性的PCI_IPCore,它内部的信号控制是受PCI错误控制状态机监控,在PCI总线正常传输完成时,PCI总线信号不受PCI错误控制状况干预,当PCI总线的传输没有信号响应的时候,PCI错误控制状态机接管FPGA内部主从设备的PCI_Interface接口的信号,模拟主从设备,给对方发出应该响应的信号,完成PCI总线传输中止的时序控制,同时在对应的FPGA内部寄存器(处理器PCI接口寄存器、PCI设备寄存器)中记录PCI设备或者处理器的错误代码,同时产生中断,上报处理器,处理器进入中断服务程序,并根据PCI设备的重要程度和PCI设备的主从特点,将按照以下三类情况,对PCI总线传输错误进行处理。
(1) 从PCI设备错误
处理器将标明ID号的PCI设备错误,通知系统控制单元,同时控制FPGA内的PCI错误控制状态机,将此PCI设备的IDSEL信号进行无效处理,并把PCI设备状态寄存器进行故障标明,提示PCI总线控制器不再访问此PCI设备,以免造成PCI总线的二次挂死。
(2) 主PCI设备错误
处理器将标明ID号的PCI设备错误,通知系统控制单元,同时控制FPGA内的PCI错误控制状态机,将此PCI设备的IDSEL信号进行无效处理,同时屏蔽该设备的GNT#,REQ#,IRDY#和FRAME#信号,并把PCI设备状态寄存器进行故障标明,提示PCI总线控制器不再访问此PCI设备,以免造成PCI总线的二次挂死。
(3) PCI总线控制器错误
FPGA内的PCI错误控制状态机释放主机的PCI接口信号,同时PCI_IPCore接管PCI总线控制器的角色,完成该次PCI总线操作,同时以高优先级的中断方式通知处理器,并将处理器的PCI接口故障以离散量的方式通知PCI总线主设备,并让其暂时接管PCI总线。
FPGA内部的PCI错误控制状态机的控制流程,如图4所示。
3 PCI总线容错机制验证
基于物理的故障注入方法(硬件注入)[4]结合软件故障注入方法[5],向正在运行的PCI总线中注入故障,观察FPGA内的PCI错误控制状态的运行情况,是否能够有效地处理3类型故障,并保证整个嵌入式设备不会因为PCI总线死等或者“挂起”,避免整个嵌入式系统瘫痪。PCI总线故障注入方式和PCI总线容错机制控制的响应时间的验证关系,如表1所示。
4 结 语
具有容错处理能力的PCI总线能够暂时接管总线或者恢复PCI总线的部分功能,以加速执行高吞吐量、高优先级的任务,增加了PCI总线的任务监控,发现硬件故障和隔离,发起故障恢复操作,降低了整个嵌入式设备的PCI总线规划难度和电路复杂程度,增加了嵌入式设备的可靠性。
表1 PCI总线容错机制时效控制表
参考文献
[1] Anon. PCI local bus specification draft: revision 2.2 [EB/OL]. (1998⁃06⁃08) [2012⁃05⁃30]. http:// www.wenku.baidu.com/view/213ba0146edb6f.
[2] 杨东,余松煜.PCI总线规范及其接口[J].微型机与应用,1996(8):21⁃24.
[3] 李贵山,陈今鹏.PCI局部总线及其应用[M].西安:西安电子科技大学出版社,2003.
[4] 唐志敏,董剑,吴智博,等.PCI总线故障注入器的研究与设计[J].计算机工程与设计,2012,33(1):173⁃179.
[5] 李金锋,张展,左德承,等.Linux 平台上软件实现的PCIE 总线故障注入系统[J].工业控制计算机,2012,25(8):1⁃3.
[6] 雷海鹏,刘久文.基于PCI的ARINC429总线适配器设计与驱动开发[J].测控技术,2005,24(1):43⁃46.
[7] 樊江锋,徐连波,叶波,等.基于PCI总线的PowerPC8245处理器嵌入式系统硬件的设计与实现[J].现代电子技术,2015,38(16):62⁃65.
[8] 许永辉,孙闯,李世斌.基于PCI总线的图像目标模拟器设计与实现[J].现代电子技术,2014,37(24):105⁃107.
[9] 杨红兵,余明洪,张宇,等.基于PCI总线的矩阵电路在压变温压补偿系统中的实现与应用[J].计算机测量与控制,2015,23(7):2570⁃2573.