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