PCI Express协议实现与验证
扫描二维码
随时随地手机看文章
摘要:称为第3代I/O接口技术的PCI Express总线规范的出现,从结构上解决了带宽不足的问题,有着极为广阔的发展前景。基于Verilog HDL硬件描述语言及可综合化设计理念,完成了PCI Express IP核RTL代码的设计。IP核代码使用Verilog HDL语言编写,分模块、分层次地设计了事务层、数据链路层和物理层的逻辑子层,并进行了可综合化设计与代码风格检查。对设计的PCI Express IP核的功能分别从协议层次和应用层次进行了验证。具体实现上,采用Denali公司的PureSuite测试套件对IP核的协议兼容性进行验证,验证范围覆盖了IP核的3个层次以及配置空间,采用QuestaSim仿真工具对IP核的应用层进行验证。仿真结果表明,设计的PCI Express IP核工作正常,性能优良。
关键词:PCI Express协议;IP核;验证;I/O接口
0 引言
当下,计算机系统使用的主流内部总线技术为PCI总线。随着千兆以太网、RAID阵列等高带宽设备的出现,PCI总线133 MB/s的带宽已明显不能满足应用的需要。根据PCI总线的性能不足及计算机系统的应用需求,第3代I/O总线接口技术PCI Express应运而生。PCI Express是一种应用于各种计算与通信平台的高带宽、点对点串行互联协议,支持虚通道、流量控制机制及热插拨,具有错误处理及错误报告功能,并在软件上与PCI兼容,具有鲜明的技术优势和广阔的应用前景。基于将PCI Express理论优势转化为实际应用优势的考虑,设计了PCI Express IP核,并进行了可综合化设计与代码风格检查,最后对设计的PCI Express IP核分别从协议层次和应用层次进行了较为充分的功能验证。
1 PCI Express协议
较之PCI总线,PCI Express在总线技术与结构上实现了较大飞跃,提供了高速、高性能、点到点、双单工、串行、差分信号链路来互联设备。PCI Express的基本结构包括根复合体(Root Complex)、交换机(Switch)以及端点设备(Endpoint)等,本文设计的PCI Expresb;IP(Intellectual Property)核属于PCI Express端点设备。PCI ExpreSS总线典型拓扑结构如图1所示。
根复合体(RC)为下层I/O设备连接到CPU和主存储器系统提供了路径,一个根复合体可支持一个或多个PCI Express端口;端点设备(EP)是PCI Express事务的请求发起者(Requester)或应答者(Compieter),端点设备又分为传统端点、PCI Express端点和根复合体集成端点;交换机(Switch)是由多个虚拟PCI-to-PCI桥设备组成的,其主要功能是为上游器件和下游器件的通信选择路径。[!--empirenews.page--]
PCI Express规范规定对于设备的设计采用分层结构,由下向上可分为物理层(Physical Layer)、数据链路层(Data Link Layer)和事务层(Transaction Layer),物理层又由逻辑子层和电气子层组成。沿纵向来看,各层又可分为发送和接收2块功能。发送功能块构成了设备的发送部分,处理向外的传输事务;接收功能块构成了设备的接收部分,处理向内的传输事务。典型PCI Express层次结构如图2所示。
作为PCI Express协议的最高层,事务层主要负责以下任务,如:基于流水线的分割事务协议;处理事务包的机制;基于“信用”的流量控制;支持数据完整性。数据链路层位于事务层和物理层之间,为事务层TLP在链路中的传输提供可靠的传输机制。数据链路层完成的主要任务包括传递TLP、错误检测和裁决、初始化和电源管理、产生DLLP。
物理层位于PCI Express协议的最底层,决定了PCI Express总线接口的物理特性,如点对点串行连接、微差分信号驱动、热拨插、可配置带宽等。
2 PCI Express IP核设计
2.1 结构设计
从层次上来讲,PCI Express IP核实现了PCI Express协议定义的所有3个层次:事务、数据链路和物理的逻辑部分。从结构上来讲,PCI Express IP核主要由用户接口模块、发送数据包解析模块、电源管理模块、DLLP仲裁模块、TLP仲裁模块、重传缓冲模块、CRC生成模块、帧信息生成模块、数据链路层数据流仲裁模块、LTSSM状态机模块、SKP发生模块、LTSSM用有序集发生模块、物理层数据流仲裁模块、通道分配模块、通道合并模块、乱序模块、解乱序模块、PIPE接口模块、接收数据包解析模块和接收缓冲模块组成。本文重点介绍用户接口模块和发送数据包解析模块。
用户接口模块是用户逻辑与PCI Express IP核进行数据交互的桥梁,该模块分为发送接口和接收接口2部分。一方面,用户逻辑按照规定的时序通过该模块把欲发送的数据发送到PCI Express链路;另一方面,PCI Express IP核接收来自PCI Express链路上的数据,处理后通过该模块发送给用户逻辑。
发送数据包解析模块的主要任务之一负责解析TLP包,并提供给TLP仲裁模块进行传输。
发送数据包解析模块的第2个功能为实现流控机制。流控机制是PCI Express中最基本的机制之一,流控机制虽然是对本地缓存的一种有效保护,但对TLP的收发性能有很大的影响。流量的初始化和更新均使用DLLP来完成;初始化使用FC Initl和FC Init2DLLP来完成;更新使用FC Updata DLLP来完成。[!--empirenews.page--]
2.2 接口设计
接口设计主要包括本地接口设计、配置寄存器扩展接口设计和电源管理接口设计3部分。
本地接口用于用户逻辑与远端PCI Express设备之间传输TLP,在本地接口总线上所传输的TLP均需满足标准的PCI Express数据包格式。本地接口又分为发送接口和接收接口,PCI Express IP核通过发送接口在PCI Express链路上发送PCI Express包,通过接收接口从PCI Exp ress链路上接收PCI Express包。
配置寄存器扩展接口主要用于实现额外的PCI能力项和配置寄存器。根据PCI Express规范,原则上只有跟PCI Express配置相关的寄存器才可以放入配置空间。本文设计的PCI Express IP核是PCI Express端点(Endpoint),故使用标准Type0配置空间,该空间占用了0x000~0x0 BF地址范围,配置寄存器扩展接口可使用空间的地址范围从0x0C0~0xFFF。
3 PCI Express IP核功能验证
验证是比设计更重要的一个环节,它穿越了整个设计流程,以便尽早发现设计中可能存在的错误和缺陷。功能验证指验证RTL代码是否符合原始的设计需求和规格,在这里指验证设计的PCI Express IP核是否符合PCI Express规范。本文采用基于虚拟平台的验证方法对设计的PCI Express IP核进行协议层验证和应用层验证。
3.1 协议层验证
本文采用Denali公司的PureSuite测试工具对PCI Express IP核的协议层进行验证。PureSuite可以测试PCI Express设计的兼容性,包含完整的测试用例,且与PCI-SIG的兼容性验收列表完全匹配。PureSuite覆盖了物理层、数据链路层、事务层以及配置空间,包括定向测试和随机测试,使用PureSpec总线功能模型对待测设计施加合适的激励,该功能模型使用SOMA配置文件来约束功能模型的行为和特性。PureSu ite充分发挥了Denali的先进特性,自动产生测试激励,并报告测试结果。使用PureSuite对PCI Express IP核进行兼容性测试主要需要四个步骤,测试平台搭建、测试用例选择、运行仿真、查看结果。
测试平台搭建主要包括对DUT的实例化以及创建约束DUT特性的SOMA文件。首先,编写Testbench文件,把Denali的模型和监视器以及DUT连接起来,并指定对应的SOMA文件,分别对上述3个模块进行特性约束。其次,使用Denali的图形化工具PureView创建DUT监视器模块及其SOMA文件,需要把PCI Express IP核的特性全部写入该SOMA文件中。
由于Denali的PureSuite包含了一套完整的测试用例,其中有许多是DUT所不具备的能力,故在运行仿真前需要选择与DUT配套的测试用例,当然也可以指定一些测试用例进行单独测试,以禁止运行DUT所不具有的特性的测试用例。PureSuite提供5大类测试,包括事务层测试、PHY测试、数据链路层测试、配置空间测试和虚通道测试,本文的设计不包括PHY部分,故仅对DUT进行了其余4类测试。
在进行协议层仿真时,本文使用NC-SIM仿真工具在Linux系统下进行。仿真平台搭建好后,需要编写运行脚本文件。在编写脚本文件中,主要包括对代码进行编译、指定编译器及其参数、指定仿真顶层等。一切准备就绪后,便可以运行仿真。在仿真过程中需要查看仿真波形,要在仿真顶层文件“tb.v”中把保存波形数据库,在仿真过程中或仿真结束后用SimVision工具打开波形数据库查看波形。
仿真过程结束后,PureSuite会生成一个测试结果文件puresuite.status,该文件包含了仿真运行的详细结果及统计结果,整个设计的4类测试项均测试成功。[!--empirenews.page--]
3.2 应用层验证
在应用层验证中主要验证DUT是否能够正确处理数据包,包括是否能够正确发送用户逻辑产生的数据包和是否能够正确接收链路上的数据包,并路由到正确的目标地址。同时,兼顾测试PCI Express IP核的部分协议兼容性。应用层验证需要为DUT搭建一个应用环境,包括一个内部SRAM,一片FLASH存储器和通用输入输出接口。DUT的PHY使用Xilinx的GTP模型,主机模型使用由某公司提供的PCI Express根复合体仿真模型。
代码覆盖率是验证结果的重要质量标志,有助于指导验证计划的改进。通过QuestaSim 6.3d的代码覆盖率计算,如图3所示,PCI Expre ss IP核的代码覆盖率达到了令人满意的效果。
4 结语
攻克了基于信用的流量控制机制、电源管理机制、错误检测与处理报告机制、LTSSM状态机等多个技术难关后,本文完成了PCI Express IP核RTL代码的设计。基于PureSuite测试套件及QuestaSim仿真工具对设计的IP核进行了全方位的功能验证,并对验证过程发现的问题逐一进行修正。仿真结果表明,设计的PCI Express IP核实现了预期功能,达到了设计技术指标。