1.��ݴ�ӡԴ��
2.[UVM源代码研究] 如何定制一款个性化的快递快递打印格式
��ݴ�ӡԴ��
英语缩写词PC,常常被译为"打印代码",打印打印全称为"Printing Code"。源码源码本文将深入探讨这一缩写词的快递快递含义,包括其英文原词、打印打印中文拼音(dǎ yìn dài mǎ)以及在英语中的源码源码谁有网站源码使用频率(%)。PC主要属于商务领域,快递快递特别在银行业有广泛应用。打印打印
PC,源码源码即Printing Code的快递快递缩写,中文含义是打印打印打印代码,它在印刷行业中扮演着重要角色。源码源码例如,快递快递设计精良的打印打印印刷机专用于平版印刷和条形码打印,展示了PC在功能性和经济实用性上的源码源码优势。此外,还涉及到通过字体和线条打印功能实现条形码的制作方法,以及热转印色带在条码印制中的应用,保护源代码免于被查看和打印。
在激光打印、条码扫描、刀塔游戏源码工业焊接等众多领域,半导体激光器作为关键组件,显示了PC在技术应用中的广泛性。这些信息有助于理解PC作为"打印代码"的含义,以及它在现代科技领域的实际应用。
请注意,尽管PC的含义明确,但这里的知识主要用于学习和交流,版权归属于原作者。在使用过程中,捕鱼游戏游戏源码请自行甄别,以避免潜在的风险。内容仅供参考
[UVM源代码研究] 如何定制一款个性化的打印格式
使用默认的打印格式时,执行如下代码:
实际打印结果格式如下:
查看UVM源代码,我们首先定位`uvm_info宏定义的位置:
这段代码对uvm_info/uvm_warning/uvm_error/uvm_fatal等宏进行了描述,实际上是对uvm_report_*函数的封装。以`uvm_info为例,分析其执行过程,其中使用了全局函数uvm_report_enabled。
这里又调用了uvm_root中定义的电气cad vc源码uvm_report_enabled函数。需要注意的是,在uvm_root中并未找到这个函数的定义。经过查找源代码,发现uvm_report_object中定义了uvm_report_enabled。
为什么要通过uvm_root实例调用这个函数呢?这需要了解uvm类库的继承关系。通过分析,我们发现通过调用uvm_root中uvm_report_enabled的函数,是因为uvm_root支持单例模式,可以获取uvm_root的单例句柄执行uvm_report_object中定义的自动继承的函数,避免了创建额外的smms图床源码实例。
接下来分析函数执行过程,原本简单的获取severity对应的verbosity阈值设置,却涉及了severity的override问题。我们可以通过调用函数或运行时传入参数来对severity进行override。
所有severity的override都记录在uvm_pool键值对severity_id_verbosities中。
severity和verbosity枚举类型定义如下:
回到uvm_report_object中行的代码,可以认为调用`uvm宏传入的verbosity值如果大于设置的verbosity阈值,则uvm_report_enabled返回0。另外行还有一种函数返回0的情况。
关于uvm_action和verbosity的设置类似,不再展开。执行`uvm_info系列宏时,不仅需要考虑severity对应的verbosity_level的设置是否大于阈值,还需要考虑对severity设置的行为是否为UVM_NO_ACTION来判断uvm_report_enabled的返回值。
本质上,执行的是uvm_report_server中的compose_message函数,该函数规定了uvm_info系列宏的打印格式。
这个函数的参数filename和line是我们调用uvm_report_info传入的`uvm_file和`uvm_line。
`__FILE__和`__LINE__是systemverilog的编译指令,在编译阶段被替换:`__FILE__被替换为当前文件的文件名,以字符串形式存在;`__LINE__被替换为当前文件的行号,以十进制数字形式存在。
如果需要定义个性化的打印格式,可以通过从uvm_report_server继承一个类重写compose_message函数实现。需要注意的是,这里不能用set_type_override_by_type/name,因为uvm_report_server类没有使用uvm_object_utils注册,也没有实现get_type()函数,所以不能用传统的factory的override方法进行override。好在uvm_report_server已经预留好了子类server的覆盖函数set_server。
这个静态函数可以直接使用类uvm_report_server进行调用。接下来,我们通过一个例子来看看如何实现个性化打印的定制。
首先,我们定制自己的report_server:
然后,在base_test中实例化并set_server:
现在,我们来看看最初那句打印的执行情况:
通过以上步骤,我们便实现了个性化的打印定制,该定制对4种severity同时生效。