《电子技术应用》

基于硬件仿真加速平台的PCIE系统级调测试方法

2017年电子技术应用第8期 作者:柏 颖1,马玲芝1,郭 嘉1,陈少辉2
2017/8/25 13:03:00

柏  颖1,马玲芝1,郭  嘉1,陈少辉2

(1.天津飞腾信息技术有限公司,天津102209;2.Cadence,广东 深圳518040)


    摘  要: 在带真实PCIE设备的系统级测试环境中,由于驱动程序或应用测试程序的更换,可能需要频繁引导操作系统,造成额外时间开销;同时,由于真实外设的存在,系统调试能力急剧降低,给调试带来巨大挑战。分别对带真实PCIE设备的系统级验证流程及调试进行了优化。验证流程方面,一方面采用“抽屉式”内存管理机制,通过ramdisk直接更换驱动程序及benchmark,避免重复引导OS;另一方面,通过Ethernet通路实现程序更换,进一步节省状态恢复、PCIE热复位时间。调试能力优化方面,利用display buffer,SDL捕捉关键信号并导出处理后还原成波形,并通过选定合适的捕捉信号、buffer深度、降频操作,尽可能增大连续波形长度,改善调试能力。

    关键词: 硬件仿真加速ICE系统级仿真;PCIE

    中图分类号: TN91;TN409

    文献标识码: A

    DOI:10.16157/j.issn.0258-7998.179008


    中文引用格式: 柏颖,马玲芝,郭嘉,等. 基于硬件仿真加速平台的PCIE系统级调测试方法[J].电子技术应用,2017,43(8):28-31.

    英文引用格式: Bai Ying,Ma Lingzhi,Guo Jia,et al. The system level debug method of pcie based on emulator platform[J].Application of Electronic Technique,2017,43(8):28-31.

0 引言

    PCIE验证较为复杂,首先,不同的功能点需要在不同的验证层次中完成[1]。其次,PCIE所参与的DMA访问对cache一致性的维护带来新的挑战等[2];对于DUT为PCIE RC设备的设计来说,PCIE可外接各种PCIE设备桥[3],其驱动程序需要在系统验证环境中进行联调。

    即便基于硬件仿真平台的PCIE系统级测试,也存在诸多调测试挑战:首先,为尽可能仿真各种测试场景,可能需要挂接多种EP设备并进行相关测试,这既需联调驱动程序,又涉及各种PCIE EP设备的典型应用测试,以及各PCIE应用程序测试与内核测试的各种组合以增强测试力度。这均需不停更换驱动程序或测试程序,可能需要重新引导操作系统,增加了测试压力;其次,PCIE是动态IO协议,在PCIE访问过程中不能随意暂停,这将极大削弱硬件仿真平台的调试能力。

1 测试环境及流程

    基于硬件仿真加速平台的PCIE系统级测试方法主要有两种:传统的DUT+速度匹配桥+真实PCIE设备测试模式与DUT+AVIP的模式,分别如图1(a)、图1(b)所示。

wdz2-t1.gif

    其中,对于DUT+速度匹配桥+真实PCIE设备测试模式, PCIE Phy由于不可综合[4],需如图1(a)中所示用Wrapper来替换PCS与Serdes接口相关部分。Wrapper向下通过母板桥接SATA、Ethernet等不同类型PCIE设备。在该测试模式中,PCIE core及其余DUT运行在仿真器上,SpeedBridge及母板、桥片、PCIE设备采用真实的设备,两者间有紧密的时序握手,在测试中不可随意暂停硬件仿真加速器,调试能力被极大削弱。

    而在DUT+AVIP模式中,AVIP模拟了一个具有memory功能的PCIE EP设备,该AVIP与PCIE Core通过PIPE接口直接相连,无需PCS及Serdes接口。在该测试模式中,PCIE core及其DUT运行在仿真器上,AVIP运行在服务器端,中间采用TBA进行交互。PCIE Core及AVIP的时钟均由硬件仿真加速器产生并控制,因此该模式中大部分时间均可暂停或恢复测试。

    上述两种测试模式各有优缺点,也各有适用的测试场景。根据本部门多款自主CPU验证的经验,真实PCIE设备测试模式所占据的测试周期长,调试难度大。因此,本文就该模式下如何改善其调、测试效率,简单进行总结分析。

2 优化测试流程

    如上所述,在PCIE系统级测试中,常需更换PCIE设备驱动程序或测试程序。

    最先采用图 2(a)所示测试流程,将驱动程序及测试程序(后文统称程序)集成在OS镜像文件中,并一同置于flash。在该方法中,一旦程序不正确,则需要替换新的OS镜像,然后重新引导uboot、OS等。一方面重新引导OS将浪费时间;另一方面,需在仿真器操作界面与测试程序命令行中多次切换,很难实现测试自动化。因此,在测试流程上进行优化。

wdz2-t2.gif

2.1 “抽屉式”Ramdisk管理

    为避免因为更换驱动程序或应用测试程序而频繁引导OS,结合硬件仿真加速器具有直接操作memory空间的能力,采用了“抽屉式”Ramdisk调测试技术。通过为系统Ramdisk设备预留一块连续的专用物理内存,并以此构建Ramdisk设备,在需要更换Ramdisk内容时通过硬件模拟器把新的Ramdisk映像写入预留的物理内存中,然后在操作系统中重新挂载该Ramdisk文件系统,实现了Ramdisk设备的热插拔。整个操作类似于把抽屉拉开放入物品再合上的过程,因此称之为“抽屉式”Ramdisk调测试技术,如图3所示。

wdz2-t3.gif

    主要技术点如下:

    (1)预留连续的物理内存

    “抽屉式”Ramdisk调测试技术由于要通过硬件模拟器直接在内存中写入新的Ramdisk映像,因此,要求具有连续的物理内存空间。

    (2)构建Ramdisk设备

    传统Ramdisk技术中,Ramdisk设备所使用的物理内存是按需动态分配的,只有当确实需要访问一个扇区的时候才会为之分配内存并把该扇区从外设读入到分配的物理内存中,所有内存页面通过一个Radix Tree组织在一起。抽屉式Ramdisk技术基于连续的物理内存来实现,在预留连续物理内存以后,会基于该内存区域建立Ramdisk设备,并把Ramdisk设备与该内存区域绑定在一起,不使用预留内存区域以外的其它物理内存。

    采用抽屉式Ramdisk调测试方法后,测试流程如图2(b)所示,与采用抽屉式Ramdisk技术之前的图2(a)所示流程相比,在OS引导成功后多了一个Ramdisk挂载操作。当需要替换新的驱动程序或应用测试程序时,重新引导uboot、恢复到“健康”断点、PCIE热复位,然后挂接新的Ramdisk,即可完成程序替换功能。其余操作流程与采用抽屉式Ramdisk之前类似。

    采用抽屉式Ramdisk调测试方法,将取得三方面的好处:首先,在将镜像文件从Flash拷贝至内存时,由于驱动程序及应用测试程序不再集成在OS镜像文件中,可节省OS引导时间;其次,可避免频繁引导OS;再次,可提高整个测试的自动化水平。

2.2 “on line”式程序管理

    抽屉式Ramdisk调测试方法虽然能获得上述收益,但也存在一定的开销:一方面,恢复断点及引导uboot、PCIE热复位需要花费一定的时间。另一方面,恢复到一个相对干净的断点,不利于DUT状态的累积,无形中降低了某些复杂情形的测试力度。因此,本部门对测试流程进行了另一种优化,采用了图4所示的“on line”式的驱动/测试程序管理。当需要更新程序时,如图 4中虚线箭头所示,通过Ethernet将新程序传送至OS所约定位置,也可对错误程序修改,然后启动新的测试。

wdz2-t4.gif

    与抽屉式Ramdisk调测试方法相比,本方法进一步对测试流程进行了优化:首先,一旦驱动加载或程序测试过程中报错且初步诊断为程序错,无需重新引导uboot、恢复断点、PCIE部件热复位,更无需重新引导OS,而仅需通过Ethernet或NIO往内存中修改、更换或新增测试程序即可,可最大程度节省时间;其次,该流程中无需暂停时钟或“恢复”断点,DUT的状态连续,可实现状态的累积,更能优化一些深层的设计缺陷。

3 Sdl-to-wave:利用SDL提高调试能力

    AVIP测试模式虽有其优势,但尚难以完全替代真实PCIE设备测试模式,因此,如何提高PCIE设备测试模式的调试能力依然重要。

    在调试方面,Palladium硬件仿真加速器提供了强大调试能力,如超长的波形窗口、InfiniTrace模式、强大的SDL功能、灵活的探针模式,Palladium Z1对SDL进行了进一步的加强。但需求无止境,业内常见利用TBA等验证技术提高硬件仿真平台调试能力的尝试。如AMD公司将PC值缓存后通过TBA输出,处理后将PC反标至反汇编程序,以实现测试激励与仿真状态的“准同步”滚动。该方法不仅需设计缓存、TBA实现,还需谨慎处理缓存的空满等问题。其实,在Palladium中,软件层面上设置了专门的Display buffer供SDL使用,软件已对其空满状态进行了控制,且大小可调节。本文通过有效利用该display buffer来捕捉关键信息以辅助debug,其基本流程如图5所示。

wdz2-t5.gif

    SDL对所需数据进行捕捉,然后将捕捉到的数据写入Display buffer。在SDL对Display buffer进行写的同时,UXE/VXE会将buffer中的数据驱动进fiber,然后取道server上的PCIE、NOC、DDR,最后进入内存,经过后处理程序将数据转换为波形。

    该流程中有如下几个实现细节需要说明:

    (1)SDL将捕捉到的数据“写入”的动作用display而不能用EXEC调用put命令来实现。首先,后者并不对数据进行缓存,因此每次打印都需暂停仿真器时钟,这不仅严重降低仿真速度,且影响PCIE通路功能正确性;其次,当运行在Logic Analyser、Dynamic Target Mode或带有不可控时钟的IXCOM流程时,由于时钟是不能被暂停的,如果用EXEC来打印,将造成数据的丢失,而采用display来实现,将极大降低此概率;最后就是时间的精确性,display命令捕捉的是trigger条件触发时刻的数据,而EXCE所捕捉的数据有一定的延时,且在不同模式下,延时的大小并不一致,具体可参考Palladium的相关技术手册。

    (2)运行在LA模式而不是STB模式。当display数据满时,在LA模式与STB模式下的处理方式并不相同。在前者中,将停止数据捕捉,同时,可报Warning或Error。而在后者中,将丢掉待写入的数据直至有新的buffer空间,但并不停止数据的捕捉,也不报Warning或Error。当运行在STB模式时,出现数据丢失时用户无法感知,干扰后续debug。

    对于真实PCIE设备测试模式,利用SDL来捕捉关键信号的数据并还原成波形,其调试效果的关键是连续波形的长度,而决定连续波形长度的核心是对display buffer的读写速度。

    从上述数据“产生”、“消费”的流程不难发现,一旦仿真加速平台的硬件条件,尤其是服务器一一确定,对Display buffer的读取速度就已经基本确定(受网络繁忙情况的影响除外),决定能导出的连续波形长度L_wave的主要因素是SDL产生数据的速度以及Display buffer本身的大小。因此,在实际应用中,有效的优化手段主要有如下几个方面:

    (1)尽可能精简所捕捉的信号数量。当然,过于精简信号数量,可能会降低调试效率,这需要做合理权衡。

    (2)增大Display buffer的深度。

    (3)适当降低被捕获信号所在时钟域的时钟频率。当然,采用该策略的前提是DUT中的各时钟域的频率比能随意改动。对于那些有严格频率比关系的部件(如DDR控制器与DDR phy),则需一起降频、升频。

    为验证该方法的效果,在某真实自主多核处理器中进行了验证。SDL在clk_sample上升沿对PCIE设备DMA操作过程中PIPE接口上的数据进行采样。

    图6(a)表示信号数量对L_wave的影响。当clk_sample为1 000 kHz(Fclk设定为2 000 kHz)时,Display buffer的写入速度远大于buffer的读出速度,此时,信号数量对L_wave几乎没影响,L_wave主要由bufer深度决定。当clk_sample为195 kHz时,Display buffer稍大于buffer的读出速度,此时,信号数量对L_wave的影响较为明显。需要说明的是,此实验中是用clk_sample上升沿作为display的触发条件,因此ACTIVE的display的批数与信号数量无关。而在真实应用中,display的触发条件是信号发生变化,届时,信号数量不仅影响buffer的读出速度,更影响ACTIVE的display的批数。因此,在实际应用中,所需捕捉的信号应尽量精简。

    图6(b)表示buffer深度对L_wave的影响。将buffer深度设为Palladium最大所支持的16 M。由于clk_sample=1 000 kHz时buffer的写入速度远大于读出速度,因此此时L_wave几乎随buffer深度线型增长。然而,随着buffer的写入速度逐渐与读出速度相近甚至小于读出速度,该增长趋势将逐渐趋缓直至无穷大。

    图6(c)表示clk_sample频率对L_wave的影响。当clk_sample较大时,buffer写入熟读远大于读出速度,此时clk_sample频率对L_wave的影响较小甚至可以忽略。当采用时钟sample_clk降到一定时,L_wave随clk_sample的减小而增加,直至无限(如图中175 kHz所示情形)。

wdz2-t6.gif

    由上述分析可知,实际应用中是否降频、设置多大的buffer深度,完全取决于buffer的写入速度与读出速度的相对关系,由于读出速度主要由硬件环境决定,因此在实际应用中主要由display的ACTIVE情况及每批display的数据量决定,这两方面均为SDL所捕捉的信号数量及其行为来决定。因此,对于不同的信号捕捉情况,采用的策略也各不相同,所能获得的最大连续波形长度也不尽相同。该方法主要用于查看指令执行trace、PCIE控制器的LTSSM状态机、PCIE链路训练过程时的信用情况等“稀疏”信号或仅有限区域内频繁变化的信号、错误处理、中断处理等。

4 总结

    本文分别对带真实PCIE设备的系统级验证流程及调试进行了优化。验证流程方面,一方面采用“抽屉式”内存管理机制,通过ramdisk直接更换驱动程序及benchmark,避免重复引导OS;另一方面,通过Ethernet通路实现程序更换,进一步节省状态恢复、PCIE热复位时间。调试能力优化方面,利用Display buffer,SDL捕捉关键信号并导出处理后还原成波形,并通过选定合适的捕捉信号、buffer深度、降频操作,尽可能增大连续波形长度,改善调试能力。

参考文献

[1] 陈欣民.基于UVM的PCIe协议的验证[D].南京:南开大学电子信息与光学工程学院,2015.

[2] 王齐,等.PCI Express 体系结构导读[M].北京:机械工业出版社,2010.

[3] Li Jun,Wang Wei.PCI Expression interface design and verification based on Spartan-6 FPGA[C].IEEE International Conference on Communication Technology,2010:305-307.

[4] Liao Chunlin.Terence Rodrigues,Bhyrav Mutnury.Challenges of high-speed channel design on GPU accelerated system[C].IEEE 24th Electrical Performance of Electronic Packaging and Sysytems,2015:221-224.

继续阅读>>