眾所周知的事實(shí)是,驗(yàn)證消耗了大約 70% 的產(chǎn)品周期時(shí)間,根據(jù) 2018 年進(jìn)行的一項(xiàng)調(diào)查,驗(yàn)證工程師花費(fèi)大約 44% 的時(shí)間進(jìn)行調(diào)試。 SoC 復(fù)雜性的增加導(dǎo)致驗(yàn)證環(huán)境中使用的組件數(shù)量增加,這導(dǎo)致日志文件龐大,因?yàn)閺倪@些組件中打印了一些信息。改進(jìn)這些日志變得勢在必行,因?yàn)樗鼈兪亲畛S玫恼{(diào)試手段之一。這就需要開發(fā)一種定制打印機(jī),它可以有效地打印有用的信息以進(jìn)行調(diào)試。自定義事務(wù)打印機(jī),稱為 xaction_custom_printer,是一種自定義打印機(jī),有助于提高調(diào)試效率,減少日志大小,提高可讀性,從而提高整體生產(chǎn)力。
隨著片上系統(tǒng)(SoC)設(shè)計(jì)面積和復(fù)雜性的增加,驗(yàn)證的責(zé)任和工作量巨大,成為整個(gè)SoC設(shè)計(jì)流程的瓶頸。因?yàn)轵?yàn)證就是檢查設(shè)計(jì)的正確性,所以任何驗(yàn)證環(huán)境中最關(guān)鍵的部分之一就是預(yù)期輸出計(jì)算。此類 SoC 的每個(gè)模塊之上都有許多驗(yàn)證組件,每個(gè)設(shè)計(jì)驗(yàn)證組件通常由一個(gè)監(jiān)視器組成。這些預(yù)期和實(shí)際輸出由監(jiān)視器觀察,監(jiān)視器直接/間接在日志中打印此信息。
如果實(shí)際輸出與預(yù)期輸出之間存在任何差異,則設(shè)計(jì)驗(yàn)證工程師會花費(fèi)大量時(shí)間進(jìn)行調(diào)試。盡管有冗長的機(jī)制,但驗(yàn)證工程師需要最少的消息進(jìn)行調(diào)試,因?yàn)橥ǔ蟹浅iL的日志包含詳盡的事務(wù)數(shù)據(jù)包。為了解決這個(gè)問題,開發(fā)了 xaction_custom_printer。
第 2 節(jié)解釋了定制轉(zhuǎn)換打印機(jī)如何解決驗(yàn)證工程師面臨的問題以及對這個(gè)組件的需求。第 3 節(jié)展示了如何開發(fā)組件的基本思想。第 4 節(jié)顯示了可以使用此自定義事務(wù)打印機(jī)的兩種方式以及一些代碼,以便更好地理解。第 5 節(jié)強(qiáng)調(diào)了自定義事務(wù)打印機(jī)相對于使用通用事務(wù)數(shù)據(jù)包的行、樹和表格打印機(jī)的優(yōu)勢。
為什么我們需要自定義事務(wù)打印機(jī)?
在驗(yàn)證過程中,尤其是在初始階段,當(dāng) RTL 設(shè)計(jì)不成熟時(shí),在測試過程中可能會出現(xiàn)很多故障。工程師可以通過日志文件識別故障原因。通常情況下,工程師需要查看交易數(shù)據(jù)包以查看特定變量在特定時(shí)間戳的狀態(tài)。理想情況下,日志文件中會打印數(shù)百個(gè)此類數(shù)據(jù)包以進(jìn)行測試。
以任何協(xié)議的數(shù)據(jù)包為例,它包含很多信息,如地址、讀地址、寫數(shù)據(jù)、讀數(shù)據(jù)、操作(讀/寫)和模式(單次/突發(fā))。數(shù)據(jù)包中的這些變量中的至少一個(gè)可以具有數(shù)組。對于數(shù)組大小從幾十到幾百不等的情況,日志文件會變得非常龐大,這些數(shù)據(jù)包會打印多次。除此之外,調(diào)試過程還需要花費(fèi)大量時(shí)間查看這些日志。在這些日志中,來自組件的轉(zhuǎn)換數(shù)據(jù)包被非常頻繁地打印出來,并在每次從組件調(diào)用它們時(shí)以不同的時(shí)間戳顯示存儲在其中的數(shù)據(jù)。為了調(diào)試,當(dāng)使用 uvm_default_table_printer 時(shí)日志的數(shù)組大小很大時(shí),用戶需要在日志中來回切換。
SystemVerilog UVM包含一個(gè) uvm_printer 類,它為打印各種格式的 uvm_objects 提供了一個(gè)接口。uvm_printer 的子類型實(shí)現(xiàn)不同的打印格式或策略。這些子類型包括 uvm_printer、uvm_line_printer、uvm_tree_printer、uvm_table_printer。我們已經(jīng)開發(fā)了一個(gè)用戶定義的打印機(jī),它將致力于消除 uvm_table_printer 的缺點(diǎn)。
xaction_custom_printer 是從 uvm_printer 擴(kuò)展而來的,打印機(jī)的輸出格式看起來像是 uvm_table_printer 和 uvm_line_printer 的混合體,因此結(jié)合了兩者的優(yōu)點(diǎn)。xaction_custom_printer 簡潔地顯示數(shù)據(jù)包,以像表格打印機(jī)一樣分區(qū)良好的方式顯示變量的名稱和值,并且在某種程度上類似于行式打印機(jī)的多行。
這臺打印機(jī)的輸出可以在一行中使用,直到某個(gè)預(yù)定義的字符,之后它會在不同的行中繼續(xù)。這種類型的輸出在數(shù)組很大的地方很容易閱讀。如果在 uvm_table_printer 中打印了相同的數(shù)組,工程師將需要多次上下滾動日志。由于是單行,所以不需要上下多次。打印機(jī)的格式允許清楚地看到變量的名稱和值,這是調(diào)試所需的全部內(nèi)容。
這臺打印機(jī)是如何開發(fā)的?
為了開發(fā)自定義打印機(jī),所需的打印格式在 emit() 函數(shù)中進(jìn)行了編程,該函數(shù)覆蓋了父類 (uvm_printer) 的相同函數(shù)。此處顯示了有關(guān)如何開發(fā)組件的基本思想的圖示。
圖 1. 如何開發(fā)自定義事務(wù)打印機(jī)的頂級理念
如何使用這臺打印機(jī)?
用戶只需要將文件包含在包或文件列表中即可包含在編譯流程中,并且需要將其作為函數(shù)調(diào)用。有兩種使用本打印機(jī)的方法。
默認(rèn)打印機(jī)機(jī)制 - 用戶可以將此打印機(jī)設(shè)置為 uvm_default_printer,如下圖 2 所示,因此項(xiàng)目/SoC 中的所有打印都將以這種格式打印。
圖 2. 將自定義事務(wù)打印機(jī)設(shè)置為 uvm_default_printer
選擇性打印機(jī)機(jī)制 - 用戶只能通過在 sprint 中的交易項(xiàng)目的 convert2string 中傳遞打印機(jī)來為僅選定的塊配置此打印機(jī),如下面的圖 3 所示。
圖 3:為選定塊使用 xaction_custom_printer 的方法
為了用這臺打印機(jī)打印數(shù)據(jù)包,可以通過調(diào)用這個(gè)函數(shù)來完成,如下圖4所示。
圖 4:使用 convert2string 打印交易項(xiàng)目的方法
用戶還可以使用自定義事務(wù)打印機(jī)打印事務(wù)數(shù)據(jù)包,以便將數(shù)組打印在單獨(dú)的行中,并將標(biāo)量變量保持在同一行中。這種類型的交易數(shù)據(jù)包打印機(jī)制將幫助用戶一次讀取數(shù)組內(nèi)容。5.5 節(jié)展示了這個(gè)交易包的外觀示例
插圖
這是一個(gè)例子來展示 xaction_custom_printer 相對于其他三個(gè) uvm_printer 的優(yōu)越性。在示例中,我們采用了一個(gè)通用數(shù)據(jù)包。以下變量用于解釋此自定義打印機(jī)相對于默認(rèn)打印機(jī)的優(yōu)勢。
圖 5:uvm_sequence_item 中的通用數(shù)據(jù)包(事務(wù)項(xiàng))
1.1 使用行式打印機(jī)輸出
1.2 使用樹形打印機(jī)輸出
5.3 使用臺式打印機(jī)輸出
5.4 使用自定義打印機(jī)輸出
5.5 使用具有在單獨(dú)行中打印陣列的功能的自定義打印機(jī)輸出。
定制打印機(jī)的優(yōu)勢
顯示調(diào)試最需要的信息
減少日志大小
提高可讀性
通過提高調(diào)試效率來節(jié)省時(shí)間
簡潔的外觀
Custom Transaction Printer 是我們在 eInfochips 開發(fā)的一個(gè)組件,旨在為驗(yàn)證工程師面臨的問題之一提供解決方案。使用通用數(shù)據(jù)包示例顯示了這款定制打印機(jī)相對于內(nèi)置 uvm 打印機(jī)的優(yōu)勢。
審核編輯:郭婷
-
soc
+關(guān)注
關(guān)注
38文章
4192瀏覽量
218680 -
打印機(jī)
+關(guān)注
關(guān)注
10文章
776瀏覽量
45834
發(fā)布評論請先 登錄
相關(guān)推薦
評論