当前位置:首页 > 公众号精选 > 芯片验证工程师
[导读]​UVM中的消息有三种属性,分别是:严重度(severity)、冗余度(verbosity)、以及消息的关联行为,此外还有消息的标签ID。UVM的消息机制基于该三种属性和标签ID,实现对消息的处理。a.严重度(severity):在调试和仿真的过程中,我们需要输出消息,那么如何区...

​UVM 中的消息有三种属性,分别是:严重度(severity)、冗余度(verbosity)、以及消息的关联行为,此外还有消息的标签 ID。UVM 的消息机制基于该三种属性和标签 ID, 实现对消息的处理。


a. 严重度(severity):
在调试和仿真的过程中,我们需要输出消息,那么如何区分消息的严重度?UVM 中用对应的枚举值来标识,更具体来说是用消息宏来标识。不同严重度的枚举值及其缺省的关联操作:

枚举值 属性 缺省操作
UVM_INFO 有用的消息 UVM_DISPLAY
UVM_WARNING 显示一个潜在的问题 UVM_DISPLAY
UVM_ERROR 显示一个问题,仿真将继续,并且计数ERROR CNTUVM_DISPLAY|
UVM_COUNT
UVM_FATAL 显示一个导致仿真无法恢复的问题,仿真将退出 UVM_DISPLAY|
UVM_EXIT

b. 冗余度(verbosity)
UVM 定义了一些枚举值表示预定义的消息冗余(消息的冗余就是该条消息是否被打印出来的敏感阈值,敏感阈值越小,则越容易被打印出来)。这些值被用在两个地方。一个是消息自身有一个冗余度,另一个是发出消息的uvm_compoment 也有一个冗余度。这些枚举值为:

枚举值 属性
UVM_NONE 值为 0,不可屏蔽的关键消息
UVM_LOW 值为 100,可屏蔽消息,在仿真过程中极少输出
UVM_MEDIUM 值为 200,对每个数据项或者序列(sequence)仅仅发生一次的消息
UVM_HIGH 值为 300,更详细的数据项信息,包括打印封包的值
UVM_FULL 值为 400,剩余的部分,包括特定方法的消息打印
UVM_DEBUG* 值为 500,调试模式下的调试信息

UVM_NONE 阈值最低,为 0;UVM_DEBUG的阈值最高,为 500。对于UVM 来说,阈值越高,则越不容易被打印出来,这里是和我们平常的思维是相反的。


在 UVM 中,一个有着低冗余等级的消息会更容易打印出来。一个有着UVM_NONE 冗余等级的消息总会打印出来。

对于一条消息来说,这条消息本身有一个冗余等级,此外,发出该消息的组件也会有一个冗余等级,当这两个冗余等级发生冲突时,将如何处理?对于 UVM来说,发出该消息组件的冗余等级的优先级高于消息本身的冗余等级的。即当一个冗余等级为 UVM_DEBUG 的 compoment 发出所有等级的消息时,该消息总是会被打印出来的;而一个冗余等级为 UVM_NONE 的 compoment 发出一条所有等级的消息时,只有等级为 UVM_NONE 的消息才会被打印出来。


这里说明:给一个组件设置更高的冗余等级将会暴露该组件更多的细节。组件和消息缺省的冗余等级是 UVM_MEDIUM。

task run_phase(uvm_phase phase);`uvm_info({get_type_name(),”::run_phase”},”starting run_phase”,UVM_HIGH)...`uvm_info({get_type_name(),”::run_phase”},”checkpoint 1 of run_phase”,UVM_MEDIUM)...`uvm_info({get_type_name(),”::run_phase”},”checkpoint 2 of run_phase”,UVM_LOW)...`uvm_info({get_type_name(),”::run_phase”},”Ending run_phase”,UVM_HIGH)endtask :run_phase

在缺省情况下运行这段代码只有 Checkpoint 1 Checkpoint 2 消息打印出来。


c. 关联行为(action)
关联行为是指仿真平台执行到该消息时执行的动作。关联行为对应的枚举值
如下:

枚举值 属性
UVM_NO_ACTION 不采取任何行动
UVM_DISPLAY 发送该报告到标准输出

UVM_LOG 发送该报告到该冗余等级和 id(severity, id)对应的文件
UVM_COUNT 对该属性的报告进行计数,当计数值到达最大 quit 数量时,仿真终止
UVM_STOP 执行$stop 指令,使仿真进入交互模式
UVM_EXIT 立即终止仿真
UVM_CALL_BACK 回调报告 hook 方法
在仿真过程中 UVM 对消息严重度为 warning、 error、 fatal 的条目自动进行计数,不需要另外配置。(这个特性可以用于用例的仿真pass/error控制)


d. 关联 ID
每一个打印出来的消息都包括一个和该消息相关的 ID。该 ID 字段可以用来完成用户指定的、甚至在仿真之外的任何鉴别或者过滤工作。在仿真中,该 ID能够指示严重度、等级等消息的属性或者做其他修改或者废止该报告的决定。因为冗余等级能够处理一个 ID 的粒度级别,一般建议将 get_type_name()和第 二 个 字 符 串 连 接 在 一 起 的 模 式 。 这 个 get_type_name() 函 数 ( 由`uvm_component/object_utils() 宏生成)能够通知用户该字符串来自哪个类。第二个字符串被用于表示消息来自那个函数/任务或用于进一步需要的粒度。

我的理解:关联 ID 类似于一个标签,消息之所以有关联 ID 是为了标识同一类型的消息,这样通过 ID 和其他属性就可以对该类型的消息进行处理。比如可以设置具有该 ID 的消息不输出、冗余度为 UVM_HIGH、对其进行计数等等。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
关闭
关闭