文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.179008
中文引用格式: 柏穎,馬玲芝,郭嘉,等. 基于硬件仿真加速平臺(tái)的PCIE系統(tǒng)級(jí)調(diào)測(cè)試方法[J].電子技術(shù)應(yīng)用,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].App-
lication of Electronic Technique,2017,43(8):28-31.
0 引言
PCIE驗(yàn)證較為復(fù)雜,首先,不同的功能點(diǎn)需要在不同的驗(yàn)證層次中完成[1]。其次,PCIE所參與的DMA訪問對(duì)cache一致性的維護(hù)帶來新的挑戰(zhàn)等[2];對(duì)于DUT為PCIE RC設(shè)備的設(shè)計(jì)來說,PCIE可外接各種PCIE設(shè)備橋[3],其驅(qū)動(dòng)程序需要在系統(tǒng)驗(yàn)證環(huán)境中進(jìn)行聯(lián)調(diào)。
即便基于硬件仿真平臺(tái)的PCIE系統(tǒng)級(jí)測(cè)試,也存在諸多調(diào)測(cè)試挑戰(zhàn):首先,為盡可能仿真各種測(cè)試場(chǎng)景,可能需要掛接多種EP設(shè)備并進(jìn)行相關(guān)測(cè)試,這既需聯(lián)調(diào)驅(qū)動(dòng)程序,又涉及各種PCIE EP設(shè)備的典型應(yīng)用測(cè)試,以及各PCIE應(yīng)用程序測(cè)試與內(nèi)核測(cè)試的各種組合以增強(qiáng)測(cè)試力度。這均需不停更換驅(qū)動(dòng)程序或測(cè)試程序,可能需要重新引導(dǎo)操作系統(tǒng),增加了測(cè)試壓力;其次,PCIE是動(dòng)態(tài)IO協(xié)議,在PCIE訪問過程中不能隨意暫停,這將極大削弱硬件仿真平臺(tái)的調(diào)試能力。
1 測(cè)試環(huán)境及流程
基于硬件仿真加速平臺(tái)的PCIE系統(tǒng)級(jí)測(cè)試方法主要有兩種:傳統(tǒng)的DUT+速度匹配橋+真實(shí)PCIE設(shè)備測(cè)試模式與DUT+AVIP的模式,分別如圖1(a)、圖1(b)所示。
其中,對(duì)于DUT+速度匹配橋+真實(shí)PCIE設(shè)備測(cè)試模式, PCIE Phy由于不可綜合[4],需如圖1(a)中所示用Wrapper來替換PCS與Serdes接口相關(guān)部分。Wrapper向下通過母板橋接SATA、Ethernet等不同類型PCIE設(shè)備。在該測(cè)試模式中,PCIE core及其余DUT運(yùn)行在仿真器上,SpeedBridge及母板、橋片、PCIE設(shè)備采用真實(shí)的設(shè)備,兩者間有緊密的時(shí)序握手,在測(cè)試中不可隨意暫停硬件仿真加速器,調(diào)試能力被極大削弱。
而在DUT+AVIP模式中,AVIP模擬了一個(gè)具有memory功能的PCIE EP設(shè)備,該AVIP與PCIE Core通過PIPE接口直接相連,無需PCS及Serdes接口。在該測(cè)試模式中,PCIE core及其DUT運(yùn)行在仿真器上,AVIP運(yùn)行在服務(wù)器端,中間采用TBA進(jìn)行交互。PCIE Core及AVIP的時(shí)鐘均由硬件仿真加速器產(chǎn)生并控制,因此該模式中大部分時(shí)間均可暫?;蚧謴?fù)測(cè)試。
上述兩種測(cè)試模式各有優(yōu)缺點(diǎn),也各有適用的測(cè)試場(chǎng)景。根據(jù)本部門多款自主CPU驗(yàn)證的經(jīng)驗(yàn),真實(shí)PCIE設(shè)備測(cè)試模式所占據(jù)的測(cè)試周期長(zhǎng),調(diào)試難度大。因此,本文就該模式下如何改善其調(diào)、測(cè)試效率,簡(jiǎn)單進(jìn)行總結(jié)分析。
2 優(yōu)化測(cè)試流程
如上所述,在PCIE系統(tǒng)級(jí)測(cè)試中,常需更換PCIE設(shè)備驅(qū)動(dòng)程序或測(cè)試程序。
最先采用圖 2(a)所示測(cè)試流程,將驅(qū)動(dòng)程序及測(cè)試程序(后文統(tǒng)稱程序)集成在OS鏡像文件中,并一同置于flash。在該方法中,一旦程序不正確,則需要替換新的OS鏡像,然后重新引導(dǎo)uboot、OS等。一方面重新引導(dǎo)OS將浪費(fèi)時(shí)間;另一方面,需在仿真器操作界面與測(cè)試程序命令行中多次切換,很難實(shí)現(xiàn)測(cè)試自動(dòng)化。因此,在測(cè)試流程上進(jìn)行優(yōu)化。
2.1 “抽屜式”Ramdisk管理
為避免因?yàn)楦鼡Q驅(qū)動(dòng)程序或應(yīng)用測(cè)試程序而頻繁引導(dǎo)OS,結(jié)合硬件仿真加速器具有直接操作memory空間的能力,采用了“抽屜式”Ramdisk調(diào)測(cè)試技術(shù)。通過為系統(tǒng)Ramdisk設(shè)備預(yù)留一塊連續(xù)的專用物理內(nèi)存,并以此構(gòu)建Ramdisk設(shè)備,在需要更換Ramdisk內(nèi)容時(shí)通過硬件模擬器把新的Ramdisk映像寫入預(yù)留的物理內(nèi)存中,然后在操作系統(tǒng)中重新掛載該Ramdisk文件系統(tǒng),實(shí)現(xiàn)了Ramdisk設(shè)備的熱插拔。整個(gè)操作類似于把抽屜拉開放入物品再合上的過程,因此稱之為“抽屜式”Ramdisk調(diào)測(cè)試技術(shù),如圖3所示。
主要技術(shù)點(diǎn)如下:
(1)預(yù)留連續(xù)的物理內(nèi)存
“抽屜式”Ramdisk調(diào)測(cè)試技術(shù)由于要通過硬件模擬器直接在內(nèi)存中寫入新的Ramdisk映像,因此,要求具有連續(xù)的物理內(nèi)存空間。
(2)構(gòu)建Ramdisk設(shè)備
傳統(tǒng)Ramdisk技術(shù)中,Ramdisk設(shè)備所使用的物理內(nèi)存是按需動(dòng)態(tài)分配的,只有當(dāng)確實(shí)需要訪問一個(gè)扇區(qū)的時(shí)候才會(huì)為之分配內(nèi)存并把該扇區(qū)從外設(shè)讀入到分配的物理內(nèi)存中,所有內(nèi)存頁(yè)面通過一個(gè)Radix Tree組織在一起。抽屜式Ramdisk技術(shù)基于連續(xù)的物理內(nèi)存來實(shí)現(xiàn),在預(yù)留連續(xù)物理內(nèi)存以后,會(huì)基于該內(nèi)存區(qū)域建立Ramdisk設(shè)備,并把Ramdisk設(shè)備與該內(nèi)存區(qū)域綁定在一起,不使用預(yù)留內(nèi)存區(qū)域以外的其它物理內(nèi)存。
采用抽屜式Ramdisk調(diào)測(cè)試方法后,測(cè)試流程如圖2(b)所示,與采用抽屜式Ramdisk技術(shù)之前的圖2(a)所示流程相比,在OS引導(dǎo)成功后多了一個(gè)Ramdisk掛載操作。當(dāng)需要替換新的驅(qū)動(dòng)程序或應(yīng)用測(cè)試程序時(shí),重新引導(dǎo)uboot、恢復(fù)到“健康”斷點(diǎn)、PCIE熱復(fù)位,然后掛接新的Ramdisk,即可完成程序替換功能。其余操作流程與采用抽屜式Ramdisk之前類似。
采用抽屜式Ramdisk調(diào)測(cè)試方法,將取得三方面的好處:首先,在將鏡像文件從Flash拷貝至內(nèi)存時(shí),由于驅(qū)動(dòng)程序及應(yīng)用測(cè)試程序不再集成在OS鏡像文件中,可節(jié)省OS引導(dǎo)時(shí)間;其次,可避免頻繁引導(dǎo)OS;再次,可提高整個(gè)測(cè)試的自動(dòng)化水平。
2.2 “on line”式程序管理
抽屜式Ramdisk調(diào)測(cè)試方法雖然能獲得上述收益,但也存在一定的開銷:一方面,恢復(fù)斷點(diǎn)及引導(dǎo)uboot、PCIE熱復(fù)位需要花費(fèi)一定的時(shí)間。另一方面,恢復(fù)到一個(gè)相對(duì)干凈的斷點(diǎn),不利于DUT狀態(tài)的累積,無形中降低了某些復(fù)雜情形的測(cè)試力度。因此,本部門對(duì)測(cè)試流程進(jìn)行了另一種優(yōu)化,采用了圖4所示的“on line”式的驅(qū)動(dòng)/測(cè)試程序管理。當(dāng)需要更新程序時(shí),如圖 4中虛線箭頭所示,通過Ethernet將新程序傳送至OS所約定位置,也可對(duì)錯(cuò)誤程序修改,然后啟動(dòng)新的測(cè)試。
與抽屜式Ramdisk調(diào)測(cè)試方法相比,本方法進(jìn)一步對(duì)測(cè)試流程進(jìn)行了優(yōu)化:首先,一旦驅(qū)動(dòng)加載或程序測(cè)試過程中報(bào)錯(cuò)且初步診斷為程序錯(cuò),無需重新引導(dǎo)uboot、恢復(fù)斷點(diǎn)、PCIE部件熱復(fù)位,更無需重新引導(dǎo)OS,而僅需通過Ethernet或NIO往內(nèi)存中修改、更換或新增測(cè)試程序即可,可最大程度節(jié)省時(shí)間;其次,該流程中無需暫停時(shí)鐘或“恢復(fù)”斷點(diǎn),DUT的狀態(tài)連續(xù),可實(shí)現(xiàn)狀態(tài)的累積,更能優(yōu)化一些深層的設(shè)計(jì)缺陷。
3 Sdl-to-wave:利用SDL提高調(diào)試能力
AVIP測(cè)試模式雖有其優(yōu)勢(shì),但尚難以完全替代真實(shí)PCIE設(shè)備測(cè)試模式,因此,如何提高PCIE設(shè)備測(cè)試模式的調(diào)試能力依然重要。
在調(diào)試方面,Palladium硬件仿真加速器提供了強(qiáng)大調(diào)試能力,如超長(zhǎng)的波形窗口、InfiniTrace模式、強(qiáng)大的SDL功能、靈活的探針模式,Palladium Z1對(duì)SDL進(jìn)行了進(jìn)一步的加強(qiáng)。但需求無止境,業(yè)內(nèi)常見利用TBA等驗(yàn)證技術(shù)提高硬件仿真平臺(tái)調(diào)試能力的嘗試。如AMD公司將PC值緩存后通過TBA輸出,處理后將PC反標(biāo)至反匯編程序,以實(shí)現(xiàn)測(cè)試激勵(lì)與仿真狀態(tài)的“準(zhǔn)同步”滾動(dòng)。該方法不僅需設(shè)計(jì)緩存、TBA實(shí)現(xiàn),還需謹(jǐn)慎處理緩存的空滿等問題。其實(shí),在Palladium中,軟件層面上設(shè)置了專門的Display buffer供SDL使用,軟件已對(duì)其空滿狀態(tài)進(jìn)行了控制,且大小可調(diào)節(jié)。本文通過有效利用該display buffer來捕捉關(guān)鍵信息以輔助debug,其基本流程如圖5所示。
SDL對(duì)所需數(shù)據(jù)進(jìn)行捕捉,然后將捕捉到的數(shù)據(jù)寫入Display buffer。在SDL對(duì)Display buffer進(jìn)行寫的同時(shí),UXE/VXE會(huì)將buffer中的數(shù)據(jù)驅(qū)動(dòng)進(jìn)fiber,然后取道server上的PCIE、NOC、DDR,最后進(jìn)入內(nèi)存,經(jīng)過后處理程序?qū)?shù)據(jù)轉(zhuǎn)換為波形。
該流程中有如下幾個(gè)實(shí)現(xiàn)細(xì)節(jié)需要說明:
(1)SDL將捕捉到的數(shù)據(jù)“寫入”的動(dòng)作用display而不能用EXEC調(diào)用put命令來實(shí)現(xiàn)。首先,后者并不對(duì)數(shù)據(jù)進(jìn)行緩存,因此每次打印都需暫停仿真器時(shí)鐘,這不僅嚴(yán)重降低仿真速度,且影響PCIE通路功能正確性;其次,當(dāng)運(yùn)行在Logic Analyser、Dynamic Target Mode或帶有不可控時(shí)鐘的IXCOM流程時(shí),由于時(shí)鐘是不能被暫停的,如果用EXEC來打印,將造成數(shù)據(jù)的丟失,而采用display來實(shí)現(xiàn),將極大降低此概率;最后就是時(shí)間的精確性,display命令捕捉的是trigger條件觸發(fā)時(shí)刻的數(shù)據(jù),而EXCE所捕捉的數(shù)據(jù)有一定的延時(shí),且在不同模式下,延時(shí)的大小并不一致,具體可參考Palladium的相關(guān)技術(shù)手冊(cè)。
(2)運(yùn)行在LA模式而不是STB模式。當(dāng)display數(shù)據(jù)滿時(shí),在LA模式與STB模式下的處理方式并不相同。在前者中,將停止數(shù)據(jù)捕捉,同時(shí),可報(bào)Warning或Error。而在后者中,將丟掉待寫入的數(shù)據(jù)直至有新的buffer空間,但并不停止數(shù)據(jù)的捕捉,也不報(bào)Warning或Error。當(dāng)運(yùn)行在STB模式時(shí),出現(xiàn)數(shù)據(jù)丟失時(shí)用戶無法感知,干擾后續(xù)debug。
對(duì)于真實(shí)PCIE設(shè)備測(cè)試模式,利用SDL來捕捉關(guān)鍵信號(hào)的數(shù)據(jù)并還原成波形,其調(diào)試效果的關(guān)鍵是連續(xù)波形的長(zhǎng)度,而決定連續(xù)波形長(zhǎng)度的核心是對(duì)display buffer的讀寫速度。
從上述數(shù)據(jù)“產(chǎn)生”、“消費(fèi)”的流程不難發(fā)現(xiàn),一旦仿真加速平臺(tái)的硬件條件,尤其是服務(wù)器一一確定,對(duì)Display buffer的讀取速度就已經(jīng)基本確定(受網(wǎng)絡(luò)繁忙情況的影響除外),決定能導(dǎo)出的連續(xù)波形長(zhǎng)度L_wave的主要因素是SDL產(chǎn)生數(shù)據(jù)的速度以及Display buffer本身的大小。因此,在實(shí)際應(yīng)用中,有效的優(yōu)化手段主要有如下幾個(gè)方面:
(1)盡可能精簡(jiǎn)所捕捉的信號(hào)數(shù)量。當(dāng)然,過于精簡(jiǎn)信號(hào)數(shù)量,可能會(huì)降低調(diào)試效率,這需要做合理權(quán)衡。
(2)增大Display buffer的深度。
(3)適當(dāng)降低被捕獲信號(hào)所在時(shí)鐘域的時(shí)鐘頻率。當(dāng)然,采用該策略的前提是DUT中的各時(shí)鐘域的頻率比能隨意改動(dòng)。對(duì)于那些有嚴(yán)格頻率比關(guān)系的部件(如DDR控制器與DDR phy),則需一起降頻、升頻。
為驗(yàn)證該方法的效果,在某真實(shí)自主多核處理器中進(jìn)行了驗(yàn)證。SDL在clk_sample上升沿對(duì)PCIE設(shè)備DMA操作過程中PIPE接口上的數(shù)據(jù)進(jìn)行采樣。
圖6(a)表示信號(hào)數(shù)量對(duì)L_wave的影響。當(dāng)clk_sample為1 000 kHz(Fclk設(shè)定為2 000 kHz)時(shí),Display buffer的寫入速度遠(yuǎn)大于buffer的讀出速度,此時(shí),信號(hào)數(shù)量對(duì)L_wave幾乎沒影響,L_wave主要由bufer深度決定。當(dāng)clk_sample為195 kHz時(shí),Display buffer稍大于buffer的讀出速度,此時(shí),信號(hào)數(shù)量對(duì)L_wave的影響較為明顯。需要說明的是,此實(shí)驗(yàn)中是用clk_sample上升沿作為display的觸發(fā)條件,因此ACTIVE的display的批數(shù)與信號(hào)數(shù)量無關(guān)。而在真實(shí)應(yīng)用中,display的觸發(fā)條件是信號(hào)發(fā)生變化,屆時(shí),信號(hào)數(shù)量不僅影響buffer的讀出速度,更影響ACTIVE的display的批數(shù)。因此,在實(shí)際應(yīng)用中,所需捕捉的信號(hào)應(yīng)盡量精簡(jiǎn)。
圖6(b)表示buffer深度對(duì)L_wave的影響。將buffer深度設(shè)為Palladium最大所支持的16 M。由于clk_sample=1 000 kHz時(shí)buffer的寫入速度遠(yuǎn)大于讀出速度,因此此時(shí)L_wave幾乎隨buffer深度線型增長(zhǎng)。然而,隨著buffer的寫入速度逐漸與讀出速度相近甚至小于讀出速度,該增長(zhǎng)趨勢(shì)將逐漸趨緩直至無窮大。
圖6(c)表示clk_sample頻率對(duì)L_wave的影響。當(dāng)clk_sample較大時(shí),buffer寫入熟讀遠(yuǎn)大于讀出速度,此時(shí)clk_sample頻率對(duì)L_wave的影響較小甚至可以忽略。當(dāng)采用時(shí)鐘sample_clk降到一定時(shí),L_wave隨clk_sample的減小而增加,直至無限(如圖中175 kHz所示情形)。
由上述分析可知,實(shí)際應(yīng)用中是否降頻、設(shè)置多大的buffer深度,完全取決于buffer的寫入速度與讀出速度的相對(duì)關(guān)系,由于讀出速度主要由硬件環(huán)境決定,因此在實(shí)際應(yīng)用中主要由display的ACTIVE情況及每批display的數(shù)據(jù)量決定,這兩方面均為SDL所捕捉的信號(hào)數(shù)量及其行為來決定。因此,對(duì)于不同的信號(hào)捕捉情況,采用的策略也各不相同,所能獲得的最大連續(xù)波形長(zhǎng)度也不盡相同。該方法主要用于查看指令執(zhí)行trace、PCIE控制器的LTSSM狀態(tài)機(jī)、PCIE鏈路訓(xùn)練過程時(shí)的信用情況等“稀疏”信號(hào)或僅有限區(qū)域內(nèi)頻繁變化的信號(hào)、錯(cuò)誤處理、中斷處理等。
4 總結(jié)
本文分別對(duì)帶真實(shí)PCIE設(shè)備的系統(tǒng)級(jí)驗(yàn)證流程及調(diào)試進(jìn)行了優(yōu)化。驗(yàn)證流程方面,一方面采用“抽屜式”內(nèi)存管理機(jī)制,通過ramdisk直接更換驅(qū)動(dòng)程序及benchmark,避免重復(fù)引導(dǎo)OS;另一方面,通過Ethernet通路實(shí)現(xiàn)程序更換,進(jìn)一步節(jié)省狀態(tài)恢復(fù)、PCIE熱復(fù)位時(shí)間。調(diào)試能力優(yōu)化方面,利用Display buffer,SDL捕捉關(guān)鍵信號(hào)并導(dǎo)出處理后還原成波形,并通過選定合適的捕捉信號(hào)、buffer深度、降頻操作,盡可能增大連續(xù)波形長(zhǎng)度,改善調(diào)試能力。
參考文獻(xiàn)
[1] 陳欣民.基于UVM的PCIe協(xié)議的驗(yàn)證[D].南京:南開大學(xué)電子信息與光學(xué)工程學(xué)院,2015.
[2] 王齊,等.PCI Express 體系結(jié)構(gòu)導(dǎo)讀[M].北京:機(jī)械工業(yè)出版社,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.
作者信息:
柏 穎1,馬玲芝1,郭 嘉1,陳少輝2
(1.天津飛騰信息技術(shù)有限公司,天津102209;2.Cadence,廣東 深圳518040)