作者:ADI公司 Ashok Chandran,Sajeev Thomas,Saj Kapoor 基于驗證方法手冊(VMM)的驗證是非常有效的模塊級驗證環(huán)境實(shí)現方法。在系統級采用模塊級驗證組件可顯著(zhù)改善驗證質(zhì)量,縮短滿(mǎn)足系統級覆蓋率所需的時(shí)間。但是,這種方法也給系統級測試平臺帶來(lái)了一系列需要應對的挑戰,包括運行時(shí)間、隨機化質(zhì)量、系統存儲器管理、多寄存器訪(fǎng)問(wèn)接口、時(shí)鐘域和隨機穩定性。此外,模塊到系統的重用方法應當簡(jiǎn)單、可擴展。 對于具有專(zhuān)有內核和系統接口的片上系統(SoC),通過(guò)匯編語(yǔ)言編碼進(jìn)行各種外圍器件不同模式下的測試并不是一個(gè)可擴展的解決方案,也不大適合基于VMM的流程。在VMM流程中,會(huì )出現多個(gè)仿真線(xiàn)程同時(shí)訪(fǎng)問(wèn)外設的情況。例如,在配置一個(gè)外設時(shí),可能有另一個(gè)線(xiàn)程正在讀取同一寄存器空間以檢查中斷狀態(tài)。在匯編測試中,一個(gè)內核只有一個(gè)指令流,因此無(wú)法模擬這種行為。本文所述方法將內核替換為總線(xiàn)功能模型(BFM),直接驅動(dòng)系統接口總線(xiàn)。每個(gè)模塊測試平臺在不同的線(xiàn)程中處理,并可以訪(fǎng)問(wèn)相應的外圍組件。采用VMM寄存器抽象層(RAL)可確保由模塊級測試平臺遷移到系統級時(shí),僅發(fā)生極小的行為改變。 系統測試平臺需要根據外設要求對系統組件進(jìn)行編程。例如,通用異步接收機/發(fā)射機(UART)模塊在發(fā)射之前,需要配置直接存儲器訪(fǎng)問(wèn)(DMA)引擎并且初始化存儲器。由于系統架構是所有外設的公用資源,因此提供一個(gè)統一的平臺和一些實(shí)用任務(wù)來(lái)根據外設要求配置系統會(huì )更合理。多層架構能夠確保系統支持每個(gè)外圍組件。同時(shí)各層實(shí)現了隨機化,確保系統和外設覆蓋率最大化。 環(huán)境針對性能進(jìn)行了優(yōu)化,支持線(xiàn)程管理、條件編譯和模塊級測試平臺的即插即用。因此,這是一種自下而上的方法,模塊級需要遵守一套基本但寬泛的原則,以便簡(jiǎn)化集成。 本文將介紹傳統的系統級驗證方法,并說(shuō)明改進(jìn)的新方法,進(jìn)一步闡述分層架構及其優(yōu)勢。本文還將討論通過(guò)適當的線(xiàn)程和存儲器管理來(lái)改善運行時(shí)間的技術(shù),以及利用分離編譯和多核編譯技術(shù)解決編譯時(shí)間較長(cháng)問(wèn)題的方法。最后,本文將涉及該測試平臺如何利用VMM錄制/回放方法來(lái)避免隨機穩定性問(wèn)題,以及如何支持匯編格式的測試轉儲。 設計詳情 本文考慮的設計是一個(gè)復雜的通用SoC,它包含多個(gè)內核、一個(gè)中斷控制器、大量專(zhuān)有外設模塊、L1/L2/L3存儲器、存儲器控制器、DMA引擎和多個(gè)IP(知識產(chǎn)權)模塊。一些模塊可以通過(guò)內置的DMA引擎訪(fǎng)問(wèn)系統存儲器,另一些模塊則使用系統DMA引擎訪(fǎng)問(wèn)存儲器。雖然沒(méi)有明確顯示,但外設與存儲器之間有多個(gè)仲裁層。 該芯片還有多個(gè)模塊、電源和用于仲裁的系統交叉開(kāi)關(guān),如圖1的簡(jiǎn)化示意圖所示。外部引腳通過(guò)多路復用方案由多個(gè)外設共用。 ![]() 圖1 :設計概覽。 系統級驗證挑戰 系統級驗證旨在驗證系統配置與外設模式的不同組合,這會(huì )揭示許多有意義的情況,其中包括: 是否經(jīng)歷了所有可能影響外設的系統配置模式下的外設模式? 1.關(guān)于連接是否存在遺漏?一旦處在特定的系統/外設配置下,該連接就可能變得可見(jiàn)。 2.是否所有模塊都已連接到適當的時(shí)鐘域? 3.當多個(gè)外設為獲得系統資源而競爭時(shí),系統中是否存在帶寬問(wèn)題? 4.每個(gè)DMA/外設都有對整個(gè)存儲器空間的讀寫(xiě)權限嗎? 5.系統內的所有寄存器都可以訪(fǎng)問(wèn)嗎? 6.是否會(huì )產(chǎn)生流量模式,從而驗證系統真正支持使用案例? 7.模塊是否采用了在系統上無(wú)效的行為,或者模塊是否看到了它不是為此而設計的行為? 由于涉及到大量組合,對于如此復雜的SoC利用定向測試來(lái)驗證上述各種情況是不可行的。 使用模塊級VMM測試平臺可在系統級提供良好的覆蓋率,但是隨著(zhù)模塊數量的增加,將會(huì )帶來(lái)一系列全新的挑戰。 1.系統編程應與外設模式相關(guān)。例如,針對接收模式下的一個(gè)外設,需要在存儲器寫(xiě)入模式下對DMA進(jìn)行編程。當模塊級測試平臺在系統級工作時(shí),將系統配置信息封裝在外設交易(transaction)類(lèi)中,這種分層方法提供一種可在所有模塊上實(shí)現的通用方法。 2.大量模塊子環(huán)境和線(xiàn)程一起運行必然會(huì )拖慢仿真,因此必須對線(xiàn)程進(jìn)行管理,確保只有活動(dòng)的測試平臺占用CPU周期。 3.龐大的測試平臺和復雜的設計會(huì )導致編譯時(shí)間過(guò)長(cháng),形成嚴重的開(kāi)發(fā)瓶頸,必須利用工具的高級特性來(lái)克服這一障礙。 4.寄存器訪(fǎng)問(wèn)機制必須對所有模塊和系統測試平臺一致。VMM RAL提供了合理的解決方案,消除了寄存器訪(fǎng)問(wèn)的物理接口在模塊級與系統級之間改變時(shí)的所有問(wèn)題。 5.引起故障的測試案例必須能夠再現,以充分驗證解決辦法有效性。 多層框架 測試平臺組件在不同層工作。圖2所示的分層架構支持模塊到系統重用和系統級的即插即用功能。下面將從下至上描述各個(gè)不同的層。 ![]() 圖2:分層架構。 1. VMM寄存器抽象層 此層處理基于RAL的寄存器讀寫(xiě)操作。RAL對于測試平臺從模塊到系統的重用起著(zhù)重要的促進(jìn)作用。測試平臺獨立于物理總線(xiàn)協(xié)議。高級RAL交易轉化為RAL訪(fǎng)問(wèn)層內的物理層交易。物理層交易描述物理協(xié)議(如APB、AHB和AXI等)。物理層利用RAL訪(fǎng)問(wèn)層提供的交易驅動(dòng)總線(xiàn)信號。 2. 系統組件層 此層管理所有系統組件,如DMA、存儲器和中斷控制器等。該層與軟件API相似,提供一套任務(wù)、對象、協(xié)議和原則用于系統管理。例如,請求n個(gè)數據項將轉換為適當的DMA編程,利用所需數據初始化存儲器并處理DMA中斷。該層還增加了數據校驗以驗證數據路徑,并向外設層顯示中斷。 3. 外設層 此層管理模塊級子環(huán)境(subenv)。它還能同步系統事件,如中斷和利用模塊級子環(huán)境進(jìn)行配置等。 4. 測試層 此層利用VMM方案和多流方案發(fā)生器(MSSG)產(chǎn)生隨機交易。通過(guò)對外設屬性和系統配置應用限制條件,能夠產(chǎn)生定向隨機方案。 設計方法 本部分闡述如何實(shí)現分層結構,同時(shí)討論對系統級驗證有價(jià)值的其他內容。 內核無(wú)關(guān)的測試平臺 大部分SoC使用的內核要么是經(jīng)過(guò)充分驗證的,要么僅進(jìn)行了極少的更改。即使更改較大,其驗證也需要與系統級驗證完全不同的方法。因此,內核驗證應與系統驗證分開(kāi)進(jìn)行。測試平臺取代內核,直接驅動(dòng)到系統中,如圖3所示。這種方法可提供更強大的控制能力和更多的功能,并且無(wú)需更改便可支持模塊級VMM測試平臺。由于設計開(kāi)銷(xiāo)減少,其仿真速度更快。它還支持生成覆蓋率分級的匯編測試,以及在實(shí)際內核上運行測試。 ![]() 圖3 :BFM取代內核。 從模塊級到系統級的基本類(lèi)變化 基本類(lèi)從vmm_data轉變?yōu)橄到y級基本類(lèi),如圖4所示。用于轉變的基本類(lèi)是與外設和系統配置關(guān)系最密切的基本類(lèi),其參數能夠影響系統配置,包括外設方向和所有已使能的中斷等。系統特性現已嵌入此交易類(lèi)中,換言之,系統層插入發(fā)生級;編碼樣式如示例1所示。以下幾個(gè)優(yōu)點(diǎn)值得注意: ![]() 圖4 : 基本類(lèi)變化。 示例1 : 外設基本類(lèi)的編碼樣式。 ![]() 1.可以將更多限制條件添加到隨機系統級類(lèi)上,使外設模式與系統模式相關(guān)。因此,無(wú)需更改任何代碼,就能將同一組類(lèi)同時(shí)用于模塊和系統測試平臺。 2.使用VMM數據宏確保類(lèi)層級無(wú)縫改變。 3.唯一的peripheral_id識別系統內的外設。 4.系統基本類(lèi)中的寄存器功能和vmm_opts的使用確保當中斷改變或焊盤(pán)引腳位置改變時(shí),無(wú)需更改代碼。因此,測試平臺能夠在不同項目之間高效移植,系統中測試平臺的多個(gè)實(shí)例也能得到有效支持。 集成和管理子環(huán)境 在傳統的VMM流程中,所有模塊級子環(huán)境都被添加到頂層環(huán)境內部,然后從vmm_env調用subenv的配置、啟動(dòng)和停止等。這種流程會(huì )帶來(lái)以下問(wèn)題: 1.大量子環(huán)境會(huì )導致頂層環(huán)境變得異常復雜。 2.所有子環(huán)境的初始化任務(wù)混在一起導致移植更加困難。 3.子環(huán)境與性能下降之間存在相關(guān)性。 與傳統流程相同,在新方法中模塊級子環(huán)境在頂層VMM環(huán)境內分層次實(shí)例化,不同之處在于對子環(huán)境的管理由一個(gè)xactor接手。xactor產(chǎn)生于一個(gè)公共系統級類(lèi),它構成外設層與系統組件層之間的接口層。 xactor分階段處理子環(huán)境,就像它是在模塊級一樣。此外,系統級任務(wù)從xactor內部調用,以便配置外設所需的系統組件支持。此xactor內接收的系統中斷通知經(jīng)由通知或函數/任務(wù)調用傳遞到模塊測試平臺。這種方法的優(yōu)勢在于: 1.頂層無(wú)需執行子環(huán)境初始化任務(wù)。 2.使用VMM xactor迭代器可以實(shí)現即插即用功能。一旦一個(gè)xactor實(shí)例化,連接和共識(consensus)就會(huì )自動(dòng)添加。頂層針對實(shí)例化的唯一變化是只需調用xactor和子環(huán)境的構建器。 3.子環(huán)境的整個(gè)階段處理完全在xactor內部進(jìn)行,測試平臺的移植能力更強, 。 示例2為用于實(shí)現外設xactor的代碼示例。 示例2 :IO xactor的實(shí)現。 ![]() 下面的示例3說(shuō)明添加IO到系統vmm_env如何大大簡(jiǎn)化,無(wú)需連接通道或啟動(dòng)/停止xactor,這些任務(wù)將由VMM xactor迭代器完成,迭代器會(huì )尋找系統xactor基本類(lèi)的衍生類(lèi)。 示例3: Xactor插入env中。 ![]() 測試結束由系統狀態(tài)和外設狀態(tài)決定,外設狀態(tài)由子環(huán)境所傳遞的共識決定。結束測試之前,測試平臺會(huì )查看所有活動(dòng)組件的共識狀態(tài)。 指定交叉關(guān)系 在指定同一外設交易內不同類(lèi)型或模式的外設交易間關(guān)系上,使用VMM多流方案是一種有效的方法。如前所述,所有交易都產(chǎn)生自一個(gè)公共基本類(lèi),因此它們可以通過(guò)一個(gè)公共框架傳遞。一個(gè)路由器類(lèi)(產(chǎn)生自vmm_broadcast)將交易路由至相應的交易器,由其處理分組數據。該流程如圖5所示。 ![]() 圖5:交易流程。 路由器回調函數也可以根據需要丟棄或修改分組數據。當引腳通過(guò)多路復用方案由多個(gè)模塊共用時(shí),就需要進(jìn)行修改。這種情況下,可以丟棄引腳沖突的交易。由于路由器知曉所生成的交易,因此它可以決定僅針對那些在測試中處于活動(dòng)狀態(tài)的外設調用start_xactor(),從而避免不必要的線(xiàn)程。 功能覆蓋率 每個(gè)系統組件都會(huì )增加功能覆蓋率,這樣可以確保模塊與系統的功能覆蓋率之間有一個(gè)良好的交叉關(guān)系。由于模塊交易和xactor被重用,因此來(lái)自模塊級測試平臺的功能覆蓋率也可以在系統級重用。 流水線(xiàn)式RAL訪(fǎng)問(wèn) 在多核系統中,任何一個(gè)內核都可以訪(fǎng)問(wèn)外設寄存器,并沒(méi)有一種直接的方法來(lái)指定在RAL讀寫(xiě)期間外設在哪個(gè)內核上工作。間接方法則是通過(guò)讀寫(xiě)任務(wù)的data_id字段指定內核,但其缺點(diǎn)是data_id的這種用法無(wú)法對來(lái)源不同的模塊級環(huán)境實(shí)施。 另一種解決辦法是將交易隨機映射到任一內核,但是要求一個(gè)模塊的所有交易必須使用同一內核接口?梢酝ㄟ^(guò)將內核分配變?yōu)榉请S機方式進(jìn)行優(yōu)化 。然而,即便有多個(gè)接口可用,由于RAL訪(fǎng)問(wèn)任務(wù)execute_single()一次只能接受一個(gè)交易,其效率仍然低下。如果啟用流水線(xiàn)式RAL,則所有接口可以同時(shí)使用,接口的使用將得到進(jìn)一步優(yōu)化。 使用VMM-MAM進(jìn)行存儲器管理 對于本身具有DMA引擎的IP模塊,必須直接配置系統存儲器,這將需要分配存儲器段。使用VMM存儲器分配管理器(MAM)進(jìn)行系統存儲器分配,可以防止試圖訪(fǎng)問(wèn)存儲器的不同模塊發(fā)生沖突,并且有助于模塊到系統的重用。通過(guò)改變存儲器指針,模塊測試平臺可以訪(fǎng)問(wèn)不同的系統存儲器,但同時(shí)仍然在系統級運行。VMM-MAM還能分配具有所需存儲器對齊方式的隨機區域。 VMM錄制/回放 利用VMM錄制功能可以錄制交易,這有助于保存測試案例,即使測試平臺后來(lái)經(jīng)過(guò)多次變更,保存下來(lái)的測試案例仍然可以回放。如果沒(méi)有錄制,則在線(xiàn)程順序發(fā)生改變的情況下,測試可能無(wú)法利用種子再現相同的方案。 使用RAL回調函數進(jìn)行測試轉儲 通過(guò)附加RAL回調函數,可以將動(dòng)態(tài)完成的配置打印輸出為匯編語(yǔ)言格式,這將生成所執行測試的一個(gè)靜態(tài)版本;卣{函數可以在配置開(kāi)始之前插入,然后在配置完成時(shí)刪除,如下面示例4所示。 示例4 : RAL轉儲示例。 ![]() |