当前位置:智城范文网>范文大全 > 征文 > 基于故障注入的PCIE2.0协议测试软件设计与实现

基于故障注入的PCIE2.0协议测试软件设计与实现

时间:2022-03-24 09:06:15 来源:网友投稿

摘要:高性能应用(包括服务器、存储设备、外设、图形设备和成像设备等)普遍采用PCIE总线进行互联。为了评测系统设备对PCIE总线故障的容错能力和可靠性,在研究PCIE总线规范的基础上,对市场上主流故障注入软件进行了分析,设计了一种基于PCIE协议的测试软件。经过验证,该软件可以实现发生在物理层、数据链路层和传输层中任一层的干扰,能够帮助系统设计人员在更接近真实环境的条件下完成测试,并缩短测试周期。

关键词关键词:故障注入;PCIE;测试软件

中图分类号:TP311文献标识码:A 文章编号:16727800(2014)002008002

0引言

PCIE是一种基于数据包的串行连接协议,它的复杂度在PCI并行总线的10倍以上。其复杂性主要体现在两个方面,首先这是数据包以千兆级的速度进行并行至串行的数据转换的需要,其次PCIE拥有多种组件类型,每种类型均采用了复杂的系统级折衷方案,以满足严格的目标,包括:性能、可靠性、可用性以及可服务性(RAS)、服务质量(QoS)等,而达到这些目标需要对诸如吞吐量、缓冲区大小、流量控制、信用度管理以及排序规则等参数进行多方面的优化。这使得PCIE系统和设备设计人员面临巨大的压力,他们需要开发可靠稳定的系统,并确保这些系统能够与飞速增加的PCIE设备实现互通。

PCIE的复杂性使测试面临着更大的挑战, 同时也使测试变得更加重要。常见的PCIE协议测试方式包括PCIE配置空间测试和故障注入测试。PCIE配置空间测试用来验证PCIE配置空间与PCIE规范的兼容性。故障注入测试是一种可靠性验证技术,其原理是根据预定的错误模型以及错误参数,人为产生错误并施加于运行特定工作负载的目标系统中, 以加速该系统错误和实效的发生,通过受控实验向系统中刻意引入错误,并观察系统中存在错误时的行为,它能够在最短的验证时间内保持产品的测试覆盖率。故障注入技术在容错机制的可靠性评测中被广泛使用。目前市面上主流的PCIE故障注入设备是N5323A。针对该设备的故障注入测试软件存在一定的缺陷,其用户界面不够友好,不支持抓取trace,对一些应用的实现不够方便。其高昂的价格,也让一些小规模公司无法承担。

本文在结合实际应用的基础上,设计开发了基于Xilinx Virtex6 FPGA的硬件平台和故障注入测试软件PCIE Corruptor。

1PCIE协议介绍

PCIE总线是PCI 总线的串行版本,主要用于采用多对高速串行的差分信号进行高速传输, 每对差分线上的信号速率可以是1代1.5Gbps 、2代5Gbps或现在正在逐渐开始应用的3代8Gbps。PCIE规范由PCISIG组织制定,目前PC和Server上应用的主要是PCIE 2.0。 PCIE属于高速串行点对点双通道高带宽传输,所连接的设备分配独享通道带宽,不共享资源,主要支持主动电源管理、错误报告、端对端的可靠性传输、热插拔以及服务质量(QoS)等功能。

PCIE采用了数据包方式在系统内传输数据,并用于数据接口与PCIE设备的各层之间。PCIE包含应用层、传输层、数据链路层、物理层4层,PCIE分层结构如图1所示。传输层用于将应用程序的请求转换成PCIE事务处理包。数据链路层用于为这个包添加一个序列编号和链路循环冗余校验码(LCRC),并确保双向事务处理能够得到正确接收。物理层具有管理许多能够发起链路并构建数据包的功能,最终通过PCIE链路发送请求。一些特殊序列(TS1,TS2)用于建立物理链路、进入和退出低功耗链路状态等。

2.2配置灵活

由于PCIE自身的复杂性以及具体的测试需求,要求故障注入具有相当高的灵活性。PCIE Corruptor的设计能够完全实现以位为单位的替换,可以根据实际需要修改任何一个数据包的任一位,同时它还具备重新计算LCRC 和 ECRC 的功能,能通过纠正LCRC 和 ECRC可以验证PCIE传输层设计的正确性。例如,一个CFG Read 数据包包括请求ID、需要读写的设备ID、 读写寄存器的地址等。测试中可以通过改变LCRC的值,然后根据接收端是否丢弃该数据包来验证其是否存在。

PCIE Corruptor支持63组条件配置,这样就允许用户配置相当复杂的条件运用到实际验证中。例如:修改指定方向的TLP Memory Read(Mrd)的 END 部分,要求先找到指定的TLP,检查该包是否是Mrd,然后寻找其END 部分再加以修改。

2.3可扩展性和可移植性

软件架构设计的好坏直接关系到其可扩展性。PCIE Corruptor软件设计初就考虑到了其可扩展性和可移植性。可移植性包括两个方面,一方面是OS 平台移植,如从Windows移植到Linux; 另一方面是硬件平台移植,如移植到SATA Corruptor。底层函数 IORead() 和 IOWrite() 在实现时和硬件分离,相关硬件部分通过一个通用接口去实现,这样做的好处是当我们开发类似产品时上层应用的代码无需重编写。

3软件实现

3.1功能模块设计

PCIE Corruptor通过图形化序列发生器进行故障注入,无需编写代码。任何操作系统、驱动程序和应用类型,都能在实际系统中注入错误,包括:可校正的错误、不可校正的非致命错误和不可校正的致命错误。系统功能模块如图2所示。

配置模块用来配置待测设备的工作带宽, 如2.5Gbps、5Gbps。

触发设置模块具有两个触发方向,即Host>Device和Device >Host。使用者可以设置触发条件,通过判断触发条件序列来实现触发操作。该模块支持63组条件判断,包括判断Pattern和掩码、触发条件、外部事件和时钟。当外部条件满足触发条件序列判断时,可以实时注入想要的故障, 包括Pattern、Disparity和Bus Idle。用户还可以设置三个计数器, 用来实现故障的重复替换。数据包被改变之后,故障注入逻辑可以校验或者重新计算新的CRC16、LCRC 或者ECRC。 该模块还支持用户加入注解,以帮助后续执行人员了解其设置意图。

操作模块包括控制、状态和查看Trace三个子模块。控制子模块用于设置是否启用抓Trace功能和替换功能, 也可用于配置缓存的大小和触发前后的比例。状态子模块可以用来实时监控PCIE Corruptor运行状态, 包括计数器和计时器的当前值。

工具模块包括脚本和数据IO两个子模块。脚本模块用于保存或加载配置序列,数据IO模块用于显示FPGA状态寄存器和控制寄存器的值,以及查看其缓存的大小。

3.2关键模块实现

通过读写寄存器来控制底层硬件是PCIE Corruptor的核心。下面的代码实现了将用户编辑的条件序列通过读写寄存器写入到硬件中。dataGridViewDetDW单元格的内容被编辑或改变时,会触发相应事件重新扫描dataGridViewDetDW单元格中的填充值,并通过接口缓存ioDataBuf将修改后的值复写入内存中。

3.3PCIE Corruptor应用测评

故障注入可以发生在物理层、数据链路层和传输层。物理层可以注入的错误包括:符号、通道和数据包上的不一致性错误、丢失 STP/END 字符、链路重新训练/恢复;数据链路层可以注入的错误包括:丢失指定的 DLLP、插入任意 DLLP、错误的 CRC 值、NAK 引入的 TLP、偏移序列号;传输层可以注入的错误包括:延迟 TLP、丢失/插入TLP、替换 TLP 净荷、修改 TLP 头。

下面用PCIE Corruptor通过丢弃数据链路层DLLP UpdateFC数据包的方式来验证终端设备对流控制是否存在问题。PCIE流控制(Flow Control)主要是通过DLLP UpdateFC 来实现, 每传输一定数量的数据包就会传输一个UpdateFC来通知对方可以接受的Header和Data数量。 在实际应用中通过拦截UpdateFC来验证对方是否发生溢出,详细步骤如下:

通过PCIE Corruptor更改所有UpdateFC的VC ID, 这样会导致该数据包发生LCRC错误, 接收端的物理层接收到有LCRC错误的数据包之后会丢弃所有的包, 最终导致超时发生溢出。VC ID位于UpdateFC的第一个字节的低三位,如图3所示。

经验证,PCIE Corruptor可以实现发生在物理层、数据链路层和传输层中任一层的干扰。例如,在物理层,Corruptor可以执行的干扰行为是提供符号、通道和数据包上的不一致错误、丢失STP/END字符。在数据链路层上能够提供丢失指定的DLLP、插入任意DLLP以及错误的CRC值等。在传输层上Corruptor可提供延迟TLP、丢失/插入TLP和替换TLP数据包。

4结语

PCI EXPRESS现已成为服务器、存储器、外设、图形等高性能应用进行互连的最佳选择。高效的验证方法在节约成本和缩短研发周期方面变得尤为重要,PCIE Corruptor支持的实时故障注入是验证芯片逻辑非常高效的一种方式。PCIE Corruptor不影响PCIE的层次结构, 只要将其插入工作系统便可开始测试,任何操作系统、驱动程序均能在实际系统中注入错误,能够充分评测系统设备,从而提高PCIE总线的故障容错能力和可靠性。

参考文献:

[1]电子技术设计[EB/OL].http:///ART_5865 2_17_0_OA_4e3d088c.HTM?jumpto=view_welcomead_1361941204107,20132.

[2]维基百科.PCI_Express[EB/OL]. http://en.wikipedia.org/ wiki/PCI_Express.

[3]IT168文库.PCIe 2.0 base specification protocol and software overview[EB/OL].http://wenku.it168.com/ d_000056880.shtml.

[4]SYNOPSYS.PCI Express基本工作原理[EB/OL].http://.cn/information/whitepaper/iptechnologywhitepaper.

[5]李金峰,张展,左德承,等. Linux平台上软件实现的PCIE总线故障注入系统[J].工业控制计算机,2012(8):13.

[6]PCISIG.PCI express basisce[EB/OL].http:///developers/main/training_materials/get_document?doc_id=db2e501c833c39720230814074816ba5b9581668.

[7]PCISIG. Detecting PCIe protocol problems and verifying interoperability[EB/OL].http:///developers/main/training_materials/get_document?doc_id=6775d75c94a5f7 d878fb3bce79c2b09885e958d3.

[8]PCISIG.Device emulation techniques for PCIE systems[EB/OL].http:///developers/main/training_materials/get_document?doc_id=6775d75c94a5f7d878fb3bce79c2b09 885e958 d3.

[9]National Instruments.PCI express–an overview of the PCI express standard[EB/OL].http:///whitepaper/3767/en.

[10]百度百科.pcie[EB/OL].http://baike.baidu.com/view/120058.htm.

[11]百度百科.PCIE控制器[EB/OL].http://baike.baidu.com/view /2794762.htm.

(责任编辑:云昭洁)

推荐访问: 注入 故障 协议 测试 设计

版权所有:智城范文网 2010-2025 未经授权禁止复制或建立镜像[智城范文网]所有资源完全免费共享

Powered by 智城范文网 © All Rights Reserved.。粤ICP备20058421号