一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

有趣的UVM_LOG用法

冬至子 ? 來(lái)源:CSDN ? 作者:谷公子 ? 2023-06-29 10:58 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

在項(xiàng)目中,一個(gè)TB通常是很多人一起開(kāi)發(fā)的,大家或多或少都會(huì)往log中打印一些信息(message),方便自己debug。但是如果log里信息太多,會(huì)造成自己感興趣的信息被淹沒(méi)了,只能通過(guò)關(guān)鍵字搜索的方式去查找。因此,本文推薦可以使用UVM提供的UVM_LOG功能,只需要增加少量的代碼,就可以根據(jù)ID或uvm_severity類(lèi)別,把自己感興趣的信息單獨(dú)提取到指定的文件。

UVM_LOG機(jī)制

為了使用UVM_LOG功能,需要在打印message之前打開(kāi)指定的文件,仿真結(jié)束時(shí)再關(guān)閉這個(gè)文件,并且需要把打開(kāi)文件的句柄傳遞給UVM的message管理系統(tǒng)??梢詫⒋蜷_(kāi)的文件設(shè)置為默認(rèn)文件指向、或關(guān)聯(lián)到指定的uvm_severity或id,或兩者都關(guān)聯(lián)。

在uvm_report_object和uvm_component類(lèi)里提供了接口函數(shù)給用戶去配置UVM_LOG功能,注意uvm_report_object是uvm_component的父類(lèi),因此大家只需要在uvm_component層次上調(diào)用這些接口函數(shù)就好了,而且可以控制UVM hierarchy上任何節(jié)點(diǎn)的消息打印行為。

具體的接口函數(shù)(API)分為兩類(lèi)。

第一類(lèi)是只適用于當(dāng)前uvm_component層次的,也就是這些接口函數(shù)的配置不會(huì)影響到UVM hierarchy的其它任何節(jié)點(diǎn),有這些函數(shù):

set_report_default_file(UVM_FILE file); //設(shè)置默認(rèn)輸出定向文件,如果id, severity都沒(méi)有關(guān)聯(lián)到輸出定
                                        //向文件的話,那么就默認(rèn)采用這里設(shè)置的文件。
set_report_id_file(string id, UVM_FILE file); //將id關(guān)聯(lián)到參數(shù)指定的輸出定向文件。
set_report_severity_file(uvm_severity severity, UVM_FILE file);  //將severity關(guān)聯(lián)到參數(shù)指定的輸出
                                                                 // 定向文件。
set_report_severity_id_file(uvm_severity severity, string id, UVM_FILE file);  // 將severity
                                                          // 和id一起關(guān)聯(lián)到參數(shù)指定的輸出定向文件。
get_report_file_handle(uvm_severity severity, string id); // 返回指定severity和id的輸出定向文件句柄

這些函數(shù)參數(shù)中傳遞的文件句柄必須是multi-channel描述符(mcd)或與$fdisplay兼容的文件id。UVM_FILE類(lèi)型其實(shí)就是int類(lèi)型。如果上述接口函數(shù)對(duì)id或severity重復(fù)指定輸出定向文件句柄,那么它們優(yōu)先級(jí)是set_report_severity_id_file() > set_report_id_file() > set_report_severity_file() > set_report_default_file()。

第二類(lèi)是除了適用于當(dāng)前uvm_component層次,它的子uvm_component也都全部適用,有這些函數(shù):

set_report_default_file_hier(UVM_FILE file);
set_report_id_file_hier(string id, UVM_FILE file);
set_report_severity_file_hier(uvm_severity severity, UVM_FILE file);
set_report_severity_id_file_hier(uvm_severity severity, string id, UVM_FILE file);

可以看出,第二類(lèi)接口函數(shù)的命令是在第一類(lèi)接口函數(shù)命名后面加上”_hier”,對(duì)應(yīng)的功能是類(lèi)似,只是作用的uvm_component范圍不一樣。

例子

說(shuō)了這么多,來(lái)幾個(gè)例子。

第一個(gè)例子,在uvm_component子類(lèi)里加入以下代碼:

UVM_FILE log_fh = $fopen("cpu.log");  // 打印cpu.log的文件,并把句柄傳給log_fh
this.set_report_id_action("cpu", (UVM_DISPLAY | UVM_LOG)); // 將”cpu”的id加上UVM_LOG功能
this.set_report_id_file("cpu", log_fh); // 將“cpu”的id管理到log_fh文件句柄
`uvm_info("cpu", "The message will be logged in log file", UVM_LOW);
`uvm_info("cpu0", "The message will not be logged in log file", UVM_LOW);
$fclose(log_fh);  // 關(guān)閉log_fh文件句柄

上述代碼執(zhí)行完之后,將會(huì)在仿真目錄下生成1個(gè)名為cpu.log的文件,里面包含代碼里第一個(gè)uvm_info打印的消息” The message will be logged in log file”。代碼里第二個(gè)uvm_info的打印消息不會(huì)定向到cpu.log里,因?yàn)樗膇d是”cpu0”。

第二個(gè)例子,在uvm_component子類(lèi)里加入以下代碼:

UVM_FILE log_fh = $fopen("cpu.log");
UVM_FILE default_fh = $fopen("default.log");
this.set_report_id_action("cpu" , (UVM_DISPLAY | UVM_LOG));
this.set_report_id_action("cpu0", (UVM_DISPLAY | UVM_LOG));
this.set_report_id_file("cpu", log_fh);
this.set_report_default_file(default_fh);
`uvm_info("cpu", "The message will be logged in cpu.log file", UVM_LOW);
`uvm_info("cpu0", "The message will be logged in default.log file", UVM_LOW);
$fclose(log_fh);
$fclose(default_fh);

上述代碼執(zhí)行完之后,將會(huì)在仿真目錄下生成cpu.log和default.log兩個(gè)文件,第一個(gè)uvm_info的id為”cpu”,它只會(huì)定向到cpu.log,而不會(huì)定向到default.log,因?yàn)閟et_report_id_file()設(shè)置的文件句柄優(yōu)先級(jí)高于set_report_default_file()設(shè)置的。第二個(gè)uvm_info的id為”cpu0”,它會(huì)定向到defualt.log,因?yàn)闆](méi)有顯示關(guān)聯(lián)到它的文件句柄,UVM會(huì)使用默認(rèn)的文件句柄,也就是set_report_default_file()設(shè)置的defualt_fh(default.log)。

友情提示:

UVM_LOG功能需要用戶自己創(chuàng)建文件句柄并關(guān)聯(lián)到對(duì)應(yīng)的id或severity上,因此用戶需要維護(hù)文件句柄的打開(kāi)和關(guān)閉,建議可以在report_phase()里去統(tǒng)一關(guān)閉它們,如果提前關(guān)閉的話。

有趣的功能衍生

讀者可以考慮 將id與UVM的uvm_cmdline_processor或SV自帶的valueplusargs (user_string, variable)功能聯(lián)系起來(lái) ,這樣通過(guò)Command Line可以很方便地控制要將哪些id定向到特定的log文件里, 這個(gè)功能很有用,也不需要重復(fù)編譯就可以去定向提取各式各樣的ID ,大家可以自己先去試試,需要源代碼的話在微信公眾號(hào)聊天窗口里輸入”id代碼”,兩種版本的代碼都有提供。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • UVM
    UVM
    +關(guān)注

    關(guān)注

    0

    文章

    182

    瀏覽量

    19532
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    IC驗(yàn)證"為什么要學(xué)習(xí)UVM呢"

    的產(chǎn)品在驗(yàn)證過(guò)程中能最大程度使用前一代產(chǎn)品的代碼。同樣的一件事情有多種實(shí)現(xiàn)方式,這多種方式之間分別都有哪些優(yōu)點(diǎn)和缺點(diǎn),在權(quán)衡利弊之下哪種是最合理的。一些OVM用法的遺留問(wèn)題。可以說(shuō),UVM特別適合欲
    發(fā)表于 12-01 15:09

    IC驗(yàn)證之UVM常用宏匯總分析(四)

    OVM中過(guò)時(shí)的用法,使用純凈的UVM環(huán)境:`define UVM_NO_DEPRECATED除了上述通用的宏外,針對(duì)不同的仿真工具需要定義不同的宏:QUESTA、VCS、INCA分別對(duì)應(yīng)Mentor
    發(fā)表于 12-02 15:24

    數(shù)字IC驗(yàn)證之“什么是UVM”“UVM的特點(diǎn)”“UVM提供哪些資源”(2)連載中...

    原文鏈接:https://zhuanlan.zhihu.com/p/345775995大家好,我是一哥,上章內(nèi)容主要講述兩個(gè)內(nèi)容,芯片驗(yàn)證以及驗(yàn)證計(jì)劃。那本章我們主要講述的內(nèi)容有介紹什么是uvm
    發(fā)表于 01-21 16:00

    什么是uvm?uvm的特點(diǎn)有哪些呢

    大家好,我是一哥,上章內(nèi)容我們介紹什么是uvmuvm的特點(diǎn)以及uvm為用戶提供了哪些資源?本章內(nèi)容我們來(lái)看一看一個(gè)典型的uvm驗(yàn)證平臺(tái)應(yīng)該是什么樣子的,來(lái)看一個(gè)典型的
    發(fā)表于 02-14 06:46

    談?wù)?b class='flag-5'>UVM中的uvm_info打印

      // UVM_DISPLAY - Sends the report to the standard output  // UVM_LOG - Sends the report to the file
    發(fā)表于 03-17 16:41

    UVM中seq.start()和default_sequence執(zhí)行順序

      1. 問(wèn)題  假如用以下兩種方式啟動(dòng)sequence,方法1用sequence的start()方法啟動(dòng)seq1,方法2用UVM的default_sequence機(jī)制啟動(dòng)seq2。那么seq1
    發(fā)表于 04-04 17:15

    LOG112,LOG2112,pdf(Precision Logarithmic and Log Ratio Ampli

    The LOG112 and LOG2112 are versatile integrated circuits that compute the logarithm or log ratio
    發(fā)表于 09-26 01:10 ?38次下載

    LOG101/LOG104偏流調(diào)零電路

    LOG101/LOG104偏流調(diào)零電路 如圖所示為LOG101/LOG104的偏流調(diào)零電路。 LOG101/
    發(fā)表于 05-13 16:10 ?1729次閱讀
    <b class='flag-5'>LOG</b>101/<b class='flag-5'>LOG</b>104偏流調(diào)零電路

    什么是UVM environment?

    UVM environment**包含多個(gè)可重用的驗(yàn)證組件,并根據(jù)test case的需求進(jìn)行相應(yīng)的配置。例如,UVM environment可能具有多個(gè)agent(對(duì)應(yīng)不同的interface)、scoreboard、functional coverage collec
    的頭像 發(fā)表于 03-21 11:35 ?1391次閱讀
    什么是<b class='flag-5'>UVM</b> environment?

    UVM學(xué)習(xí)筆記(一)

    driver應(yīng)該派生自uvm_driver,而uvm_driver派生自uvm_component。
    的頭像 發(fā)表于 05-26 14:38 ?1723次閱讀
    <b class='flag-5'>UVM</b>學(xué)習(xí)筆記(一)

    UVMuvm_config_db機(jī)制背后的大功臣

    本次講一下UVM中的uvm_config_db,在UVM中提供了一個(gè)內(nèi)部數(shù)據(jù)庫(kù),可以在其中存儲(chǔ)給定名稱下的值,之后可以由其它TB組件去檢索。
    的頭像 發(fā)表于 06-20 17:28 ?1879次閱讀

    如何用Verdi查看UVM環(huán)境中的變量?

    我們常用的debug UVM的方法是通過(guò)打印log實(shí)現(xiàn)。有沒(méi)有辦法像 debug RTL代碼一樣將 UVM 中變量拉到波形上看呢?答案是有的,下面讓我們看看是怎么做到的。
    的頭像 發(fā)表于 06-25 16:01 ?2365次閱讀
    如何用Verdi查看<b class='flag-5'>UVM</b>環(huán)境中的變量?

    有沒(méi)有辦法像debug RTL代碼一樣將UVM中變量拉到波形上看呢?

    我們常用的debug UVM的方法是通過(guò)打印log實(shí)現(xiàn)。有沒(méi)有辦法像 debug RTL代碼一樣將 UVM 中變量拉到波形上看呢?答案是有的,下面讓我們看看是怎么做到的。
    的頭像 發(fā)表于 06-29 15:14 ?2279次閱讀
    有沒(méi)有辦法像debug RTL代碼一樣將<b class='flag-5'>UVM</b>中變量拉到波形上看呢?

    UVMuvm_config_db機(jī)制背后的大功臣

    本次講一下UVM中的uvm_config_db,在UVM中提供了一個(gè)內(nèi)部數(shù)據(jù)庫(kù),可以在其中存儲(chǔ)給定名稱下的值,之后可以由其它TB組件去檢索。
    的頭像 發(fā)表于 06-29 16:57 ?2012次閱讀

    一文詳解UVM設(shè)計(jì)模式

    本篇是對(duì)UVM設(shè)計(jì)模式 ( 二 ) 參數(shù)化類(lèi)、靜態(tài)變量/方法/類(lèi)、單例模式、UVM_ROOT、工廠模式、UVM_FACTORY[1]中單例模式的補(bǔ)充,分析靜態(tài)類(lèi)的使用,UVM中資源池的
    的頭像 發(fā)表于 08-06 10:38 ?3378次閱讀
    一文詳解<b class='flag-5'>UVM</b>設(shè)計(jì)模式