結合通用驗證方法學(UVM)的可攜激勵標準(Portable Stimulus Standard,PSS)功能,並不等同於將兩種語言整合在一起。

在一篇先前的文章中,作者Aileen Honess說明了為什麼一個使用UVM和SystemVerilog的設計團隊,會希望藉由添加可攜激勵來擴展他們的驗證方法;透過結合不但理解組合約束而且理解設計時序方面的約束求解器(constraint solver),能產生針對特定驗證意圖的更有效測試。

本文將列出這種整合的基本策略。需要注意的是,整合PSS功能並不會對現有功能產生任何影響,現有的測試平台仍然有效並繼續提供相同的覆蓋範圍。但若在嘗試達到理想覆蓋水準時碰到問題,或者當希望測試案例被重定向至硬體模擬(emulation),或是被應用於晶片bring-up,PSS增加的新功能就有用了。

隨著時間推移,當你對PSS功能的信心逐步增強,可能會希望更改驗證方法以支援PSS生成的測試案例,而不是來自現有UVM環境的簡單、隨機測試案例。此外,PSS還提供了新的比對和評估覆蓋範圍的方法,相信這種方法也更直觀。

還有一點需要注意的是,PSS與UVM的整合與兩種語言之間的整合並不相同。PSS定義了一個利用工具生成測試案例的模型,它是與UVM整合生成的測試案例;這意味著當談到整合,就只能使用特定供應商的工具。我會盡可能以通用的詞句來描述整合步驟,其他供應商可能也會有類似的步驟,但自動化的細節或層級可能會有所不同。

整合的六個步驟如下:

1.識別UVM介面,包括事務級建模(transaction level modeling,TLM)介面、軟體介面和記憶體;配置工具並整合到UVM。

2.創建PSS暫存器類型描述(register-type description);此步驟可以透過軟/硬體介面(HSI)的暫存器定義手動完成,也可以透過轉換IP-XACT描述來完成。

3.識別設計(包括組件、操作、資源等)的整體PSS模型/表述。

4.提供每個「行動」(action)的詳細資訊;這些資訊來自於能與TLM或軟體導向驗證(SDV)測試合成的可移植基元(primitive)來定義。

5.編譯模型、合成測試案例,並執行UVM軟體模擬。

6.檢視並進行結果除錯,分析覆蓋範圍。

以下我們將採用一個非常簡單的設計來展示這些概念,源自於形式驗證工具供應商Breker發表的公版設計,包括兩顆CPU、兩個UART介面、一個DMA控制器(DMAC)和一個AES加密區塊(參考圖1)。

20190726TA31P1 圖1 包括兩個CPUS、兩個UART、一個DMAC和一個AES加密區塊的設計案例。(來源:Breker)

每個UART都有一個驗證IP(VIP),用以配置和發送/接收資料;除此之外,每個CPU都開放由AMBA先進周邊匯流排(Advanced Peripheral Bus,APB) VIP驅動的連接埠。TLM事務和TLM埠是為了UART VIP定義,在TLB模式中配置的處理器代理(processor agents),是為了APB VIP定義。同時定義記憶體資源以供DMAC運作使用。

步驟2建立了VIP的暫存器和記憶體映射;通常情況下,該映射已經以IP-XACT格式定義。IP-XACT是協力廠商IP功能區塊的通用格式,許多公司也用它來文件化其內部IP。如果是這種情況,會有一個實用程式(utility)執行必要的轉換。Breker採用了提議的HSI,HSI在PSS標準第一版中並未獲得批准。

20190726TA31P2 圖2 從可攜激勵工具生成的UVM程式碼。(來源:Breaker)

三個元件(UART、DMAC、AES)各自的暫存器描述,都可以利用隨設計發佈的IP-XACT檔中的trekhsi輕鬆創建,而且可以修改欄位名稱以提高可讀性。

20190726TA31P3 圖3 生成的程式碼用於將工具中的事務轉換為VIP使用的事務,類似於uvmregadapter。(來源:Breker)

步驟3是識別系統元件。在此設計案例中,主要的IP功能區塊是UART、DMA和AES,稱為「PSS元件」(PSS component)。每個模組都具有稱為「行動」(action)的核心功能,並表示為「PSS行動」。這些模組的關鍵功能(行動)可以定義如下:

˙UART——配置、接收、發送;

˙DMAC——輸出資料、輸入資料;

˙AES——加密、解密;

˙CPU——輸出資料、輸入資料。

需要注意的是,首次編寫PSS模型時,不一定要定義所有行動。首先,只用定義最重要的,隨著驗證任務的進展,再定義附加的、次級的行動。這不會影響任何已執行的驗證,只有可能會造成更多的序列。

20190726TA31P4 圖4 生成的treksequence等待來自模型的資料,使用上面的程式碼轉譯資料,並將其發送至VIP,即該程式碼用於實現兩種類型資料的轉換。亦可利用使用者創建的序列,當監視模組取動作或與比對模組一起使用時,反方向也存在類似的程式碼。(來源:Breker)

每一個運算元素(UART、DMAC、AES)會建立一個資源集區(resource pool);功能區塊內的介面利用流動物件(flow objects,如FIFO、Reg),以及每個運算元素相對應的集區來定義。最後,PSS鎖定對資源共用或獨家使用的控制;該調度程式(scheduler)將用以來確保硬體不會嘗試執行相互排斥的行動。

20190726TA31P5 圖5 UART (hsiuart.h)的HSI暫存器定義變為hsi::regblock。為了便於閱讀,原始IP-XACT規格中的欄位名稱作了修改。(來源:Breker)

參考圖6的PSS圖形,Entry行為(上方)同時安排了兩個UART場景,即加密(Encryp)和解密(Decrypt)作業。UART場景(左方)將為DUT選擇配置,配置VIP以匹配,同時並存執行多個接收和發送操作。加密和解密作業由DMAC傳輸(右下)饋入;資源鎖定用以確保同一硬體功能區塊上的兩項作業不會同時執行。

20190726TA31P6 圖6 顯示在Breker的TrekDesigner工具中的PSS圖形建立了模型。在該模型中,「元件」是綠色框,「行為」是淺藍色框,「資源」是深藍色菱形,「鎖定」是與「行為」相關聯的灰色框。「行為」區塊的輸入和輸出用藍色輸入/輸出埠表示。(來源:Breker)

整個模型的PSS程式碼均由工具生成。每個生成的行動都有一對// Start of user code和// End of user code標記,其間可能會加入每個行動的詳細作業。重新生成模型時,標記之間的程式碼會保留。PSS與UVM整合的餘下3個步驟我們會在未來的文章中繼續介紹。

本文同步刊登於電子工程專輯雜誌2019年7月號

(參考原文:Inside Portable Stimulus: UVM Integration,by Leigh Brad)