【導(dǎo)讀】PSS和UVM的集成在一起不同于將兩種語言進行集成。本文將列出這種集成的基本策略,以盡可能通用的語言來描述集成的六個步驟以及本文會詳細介紹前三個步驟。
PSS和UVM的集成在一起不同于將兩種語言進行集成。本文將列出這種集成的基本策略,以盡可能通用的語言來描述集成的六個步驟以及本文會詳細介紹前三個步驟。
將便攜式刺激標(biāo)準(zhǔn)(Portable Stimulus Standard,PSS)功能與通用驗證方法學(xué)(UVM)集成在一起不同于將兩種語言進行集成。
在我們之前的專欄中,Aileen Honess提供了這樣一個背景,shuoming 為什么那些使用通用驗證方法學(xué)(UVM)和SystemVerilog的團隊會希望通過增加Portable Stimulus來擴展他們的驗證方法。通過結(jié)合不僅理解組合約束而且理解設(shè)計時間方面的約束求解器,可以生成針對特定驗證意圖的更有效的測試。
本博客將列出這種集成的基本策略。需要注意的是,集成Portable Stimulus Standard (PSS)功能并沒有對現(xiàn)存的功能產(chǎn)生任何影響,現(xiàn)有的測試平臺仍然有效,繼續(xù)提供相同的覆蓋范圍。但若在嘗試達到理想覆蓋水平時碰到問題,或者當(dāng)希望測試用例被重定向為仿真或被用于芯片啟動時,PSS增加的新功能就有用了。
隨著時間的推移,對PSS功能的信心逐步增強,您可能會希望更改驗證方法以支持PSS生成的測試用例,而不是來自現(xiàn)有UVM環(huán)境的簡單、隨機的測試用例。此外,PSS還提供了新的比對和評估覆蓋范圍的方法,相信這種方法也更直觀。
還有一點需要注意,PSS和UVM的集成與兩種語言之間的集成不同。PSS定義了一個利用工具生成測試用例的模型。它是與UVM集成生成的測試用例。這意味著,當(dāng)談到集成,就不能使其獨立于特定供應(yīng)商的工具。我會以盡可能通用的語言來描述集成的步驟,其他供應(yīng)商可能也會有類似的步驟,但自動化的細節(jié)或級別可能會有所不同。
集成的六個步驟如下:
1.識別UVM接口,包括事務(wù)級建模(TLM)接口、軟件接口和內(nèi)存。配置工具并集成到UVM。
2.創(chuàng)建PSS寄存器類型描述。這一步可以通過硬件/軟件接口(HSI)的寄存器定義來手工完成,也可以通過轉(zhuǎn)換IP-XACT描述來完成。
3.識別設(shè)計(包括組件、操作、資源等)的整體PSS模型/表示。
4.提供每個“操作”(action)的詳細信息。這些信息根據(jù)可合成TLM或軟件驅(qū)動驗證(SDV)測試的可移植基元定義。
5.編譯模型、合成測試用例,并運行UVM仿真。
6.查看和調(diào)試結(jié)果,并分析覆蓋范圍。
下面我們將采用一個非常簡單的設(shè)計來演示這些概念。該設(shè)計源自Breker發(fā)布的公共域示例,示例中有兩個CPUS、兩個UART、一個DMAC和一個AES加密塊。
圖1:本示例包括兩個CPUS、兩個UART、一個DMAC和一個AES加密塊。(來源:Breker)
每個UART都有一個驗證IP(VIP),用于配置和發(fā)送/接收數(shù)據(jù)。此外,每個CPU都開放其由AMBA高級外設(shè)總線(APB)VIP驅(qū)動的端口。為UART VIP定義TLM事務(wù)和TLM端口; 并在TLB模式中為APB VIP定義處理器代理。同時定義存儲器資源以供DMAC操作使用。
圖2:從Portable Stimulus工具生成的UVM代碼。(來源:Breaker)
圖3:生成的代碼用于將工具中的事務(wù)轉(zhuǎn)換為VIP使用的事務(wù),類似于uvm_reg_adapter。(來源:Breker)
圖4:生成的trek_sequence等待來自模型的數(shù)據(jù),使用上面的代碼轉(zhuǎn)換數(shù)據(jù),并將其發(fā)送給VIP。即該代碼用于實現(xiàn)兩種類型數(shù)據(jù)的轉(zhuǎn)換。這里也可以使用用戶創(chuàng)建的序列。當(dāng)監(jiān)視模塊捕獲動作或與比對模塊一起使用時,反方向也存在類似的代碼。(來源:Breker)
步驟2建立了VIP的寄存器和存儲器映射。通常情況下,該映射已經(jīng)以IP-XACT格式定義。IP-XACT是第三方IP模塊的通用格式,許多公司也用它來記錄其內(nèi)部IP。如果是這種情況,將采用實用程序執(zhí)行必要的轉(zhuǎn)換。Breker采用了建議的HSI,HSI在PSS標(biāo)準(zhǔn)第一版中并未獲得批準(zhǔn)。
三個組件(UART、DMAC、AES)中每個組件的寄存器描述都可以利用隨設(shè)計發(fā)布的IP-XACT文件中的trekhsi輕松創(chuàng)建,而且可以修改字段名稱以提高可讀性。
圖5:UART(hsi_uart.h)的HSI寄存器定義變?yōu)閔si :: reg_block。為了便于閱讀,原始IP-XACT規(guī)范中的字段名稱作了修改。(來源:Breker)
步驟3是識別系統(tǒng)組件。該設(shè)計中,主要的IP模塊是UART、DMA和AES,稱為“PSS組件”。每個模塊都具有稱為“操作”(action)的核心功能,并表示為“PSS操作”。這些模塊的關(guān)鍵功能(actions) 可以定義如下:
·UART - 配置、接收、發(fā)送
·DMAC - 輸出數(shù)據(jù)、輸入數(shù)據(jù)
·AES - 加密、解密
·CPU - 輸出數(shù)據(jù)、輸入數(shù)據(jù)
需要注意的是,首次編寫PSS模型時,不一定要定義所有操作。首先,只用定義最重要的,隨著驗證任務(wù)的進展,再定義附加的、次級的操作。這不會對已執(zhí)行的驗證有任何影響,只會造成更多的序列。
為每個計算元素(UART、DMAC、AES)創(chuàng)建資源池。
并使用流對象(FIFO,Reg)和為每個元素創(chuàng)建的相應(yīng)“池”來定義到塊的接口。
最后,PSS鎖定對共享資源或獨占資源使用的控制。調(diào)度程序?qū)⒗盟鼇泶_保不會嘗試使硬件同時執(zhí)行互斥操作。
圖6:Breker的TrekDesigner中顯示的PSS圖表創(chuàng)建了模型。在該模型中,“組件”是綠色框,“操作”是淺藍色框,“資源”是深藍色菱形,“鎖”是與“操作”相關(guān)聯(lián)的灰色框。“操作”塊的輸入和輸出用藍色輸入/輸出端口表示。 (來源:Breker)
Entry操作(頂部)同時安排了兩個UART場景,即加密和解密操作。UART場景(左下方)將為DUT選擇配置,配置VIP以匹配,同時并行執(zhí)行多個接收和發(fā)送操作。加密和解密操作由DMAC傳輸(右下)提供。資源鎖用于確保同一硬件塊上的兩個操作不會同時執(zhí)行。
整個模型的PSS代碼均由工具生成。每個生成的動作都有一對//用戶代碼開始和//用戶代碼結(jié)束標(biāo)記,標(biāo)記中間即為動作的詳細描述。重新生成模型時,標(biāo)記間的代碼會保留。