前言
在uvmc中能够提供对uvm testbench根本档次信息的打印和信息打印级别的管制,管制过程能够systemC layer实现操作
一. UVM testbench topology 例化档次信息打印
uvmc_print_topology(context,depth)
参数阐明:
context
: 开始打印拓扑的组件的层次结构门路。如果未指定,则拓扑打印将从uvm_top
开始。能够应用通配符(*和)指定多个组件,例如“top.env.* .driver”
。可通过将contxt括在前斜杠中来指定POSIX扩大正则表达式,例如“/a[hp]b/”
。默认值:" (uvm_top)
、
depth
:要打印的层次结构的级别数。如果没有指定,则打印从给定上下文开始的所有层次结构。默认值:-1(递归所有子元素)
例子:
void top::show_uvm_print_topology(){ cout << endl << endl << "Waiting for UVM to reach build phase..." << endl; uvmc_wait_for_phase("build", UVM_PHASE_STARTED); cout << endl << endl << "Topology before build phase:" << endl; uvmc_print_topology(); uvmc_wait_for_phase("build", UVM_PHASE_ENDED); cout << endl << endl << "Topology after build phase:" << endl; uvmc_print_topology();}
打印后果:
Topology before build phase:UVM_INFO /home/shawntan/Project/uvmc/uvmc-2.3.2/src/connect/sv/uvmc_commands.sv(502) @ 0 ns: reporter [TRACE/UVMC_CMD/PRINT_TOPOLOGY] Topology for component uvm_top:----------------------------------------------------------------------Name Type Size Value----------------------------------------------------------------------<unnamed> uvm_root - @172 prod_out UVMC_PROXY_FOR_uvm_tlm_b_transport_port - @366 sb_actual_in UVMC_PROXY_FOR_uvm_analysis_export - @382 e env - @336 prod_out uvm_tlm_b_transport_port - @345 sb_actual_in uvm_analysis_export - @355 ---------------------------------------------------------------------- UVM_INFO /home/shawntan/Project/uvmc/uvmc-2.3.2/src/connect/sv/uvmc_commands.sv(208) @ 0 ns: reporter [UVMC_WAIT_FOR_PHASE] Waiting for phase 'build' to be 'UVM_EQ' to state 'UVM_PHASE_ENDED'. Currently its state is 'UVM_PHASE_EXECUTING'Topology after build phase:UVM_INFO /home/shawntan/Project/uvmc/uvmc-2.3.2/src/connect/sv/uvmc_commands.sv(502) @ 0 ns: reporter [TRACE/UVMC_CMD/PRINT_TOPOLOGY] Topology for component uvm_top:-----------------------------------------------------------------------------Name Type Size Value-----------------------------------------------------------------------------<unnamed> uvm_root - @172 prod_out UVMC_PROXY_FOR_uvm_tlm_b_transport_port - @366 sb_actual_in UVMC_PROXY_FOR_uvm_analysis_export - @382 e env - @336 prod producer - @402 analysis_out uvm_analysis_port - @422 out uvm_tlm_b_transport_port - @412 prod_out uvm_tlm_b_transport_port - @345 sb scoreboard - @432 actual_in uvm_analysis_imp - @441 exp_fifo uvm_tlm_analysis_fifo #(T) - @461 analysis_export uvm_analysis_imp - @510 get_ap uvm_analysis_port - @500 get_peek_export uvm_get_peek_imp - @480 put_ap uvm_analysis_port - @490 put_export uvm_put_imp - @470 expect_in uvm_analysis_export - @451 sb_actual_in uvm_analysis_export - @355 -----------------------------------------------------------------------------
能够看到通过phase管制当前,build phase 前后所print 的testbench topology的构建档次后果存在显著的差别
二 report 管制函数
uvmc_report_enabled(verbosity, severity,id, context)
该函数用于管制指定组件contxt中生成的报告具备verbosity、severity
和id
,设定胜利则返回true
。
用于精密管制组件的对应打印级别。如果UVM_INFO
的verbosity
大于为其收回的组件配置的verbosity
,则疏忽该报告。低于该级别的报告不受影响。没有设置severity
和id
的组件的行为报告形式默认为UVM_NO_ACTION,
不思考任何已注册的report_catchers
的过滤。参数阐明:
verbosity
:打印冗余级别,和UVM 的级别统一serverity
:报告的信息的重大水平, 默认UVM_INFO
, 另外有UVM_WARNING, UVM_ERROR, UVM_FATAL
Id
: 报告的标识符字符串(自定义)。必须是齐全匹配的。如果没有指定,那么uvmc_report_enabled
仅在UVM_NO_ACTION
是指定上下文中给定严重性的配置操作时才进行查看。默认值:"(wildcard)“context
: 收回假如报告的组件的层次结构门路。如果没有指定,则上下文是全局的,即uvm_top
。不是由组件收回的报告来自uvm_top
。默认值:"全局"
示例:if (uvmc_report_enabled(UVM_HIGH, UVM_INFO, "PRINT_TRANS") {string detailed_msg;...prepare message string here...uvmc_report(UVM_INFO, "PRINT_TRANS", detailed_msg, UVM_HIGH);}
uvmc_set_report_verbosity(level, context, recurse)
为组件在指定上下文中收回的所有UVM_INFO-severity
报告设置运行时具体级别。来自组件上下文的任何报告,如果其具体水平超过此最大值,将被疏忽。
SC通过uvmc_report
公布的报告只受全局上下文的具体级别设置的影响,即context= " "。要对sc公布的报告进行更细粒度的管制,请应用uvm_top
注册一个uvm_report_catcher
。参数阐明:
level
:信息冗余程度。指定UVM_NONE、UVM_LOW、UVM_MEDIUM、UVM_HIGH或 UVM_FULL
。必填的context
:组件的档次门路。能够应用通配符*和?指定多个组件,例如“top.env.*.driver”
。能够通过将contxt
括在前斜杠中来指定POSIX扩大正则表达式,例如“/a[hp]b/”
。默认值:"(uvm_top)
recurse
:如果为真,则设置匹配上下文的组件child节点的具体水平。默认值:假例子:
uvmc_set_report_verbosity(UVM_FULL)
: 设置所有组件的打印级别到UVM _FUL
Luvmc_set_report_verbosity(UVM_NONE, "top.env.agent1.driver")
; 为top.env.agent1.driver
禁用所有可过滤的信息报告。不蕴含child 节点uvmc_set_report_verbosity(UVM_LOW, true);
uvmc_set_report_verbosity(UVM_HIGH, "top.env.troublemaker");
将所有组件的具体报告设置为UVM_LOW
,独自对top.env,troublemaker
设置UVM_HIGH
的信息冗余度, 最初一个示例中, 递归标记被设置为false
,因而所有top.env,troublemaker
的child节点(如果有的话)都将放弃为UVM_LOW
简短uvmc_report(severity, id, message, verbosity, context, filename, line)
将报告发送到UVM进行解决,可能会受到简短、动作和流动报告捕获器的过滤,应用UVM报告机制而不是$display和其余非凡办法来确保输入的一致性,并管制是否收回报告,以及在收回报告时是否采取了任何操作。所有的报告办法都有雷同的参数,只是在UVM_INFO-severity
报告中利用了冗余级别
参数阐明:
severity
:报告重大水平:指定UVM_INFO、UVM_WARNING、UVM_ERROR
或UVM_FATAL
。必须参数id
: 报告id字符串(自定义),用于辨认和指标过滤。无关报表id如何影响筛选的详细信息,请参阅上下文形容。须要的参数Message
: 音讯内容,如果须要,能够对单个字符串进行预格式化。必须参数Verbosity
: 音讯冗余度,指定UVM_NONE、UVM_LOW、UVM_MEDIUM、UVM_HIGH或UVM_FULL
。默认值:UVM_MEDIUM
。Context
: 收回报告的sc side组件的层次结构门路。上下文字符串在SV端以层次结构名称的模式呈现在报告中,但它在所有状况下都不会在报告过滤中发挥作用。所有的sc side报告都是从UVM的全局上下文收回的,即uvm_top
。要利用过滤器设置,请从该上下文中创立它们,例如uvm_top.set_report_id_action()。固定了上下文之后,只有报告的id能够用来惟一地标识要过滤的SC报告。然而,报告捕获器是通过报告的上下文传递的,因而能够基于SC上下文和id
. 默认“”filename
: 收回报告的可选文件名。应用文件。如果指定,文件名将显示为报告的一部分。默认值:"“line
: 收回报告的文件名中的可选行号。应用线。如果指定,行号将显示为报告的一部分。默认值:0示例:
uvmc_report(UVM_INFO, "SC_READY", "SystemC side is ready");
:发送一个全局(uvm_top-source)的信息报告给UVMuvmc_report(UVM_INFO, "SC_READY", "SystemC side is ready",UVM_LOW, "", __FILE__, __LINE__);
收回雷同的报告,这次应用较低的简短度,文件名和行号UVM_LOW
verbosity并不意味着更低的输入。相同,如果运行时具体度设置不是UVM_NONE,则打印具备UVM_LOW
具体度的报告。应用UVM_NONE
verbosity收回的报告不能通过运行时verbosity设置进行筛选。
下一个示例从一个sc side生产者组件发送一个正告和信息报告。在SV中,咱们通过将其无效ID的操作设置为UVM_NO_ACTION
来禁用正告。咱们还将无效ID为UVM_NONE
的信息音讯的具体度阈值设置为UVM_NONE
。这导致INFO报告被过滤,作为运行时的冗余度class producer : public sc_module { ... void run_thread() { ... uvmc_report(UVM_WARNING, "TransEvent", "Generated error transaction.",, this.name()); ... uvmc_report(UVM_INFO, "TransEvent", "Transaction complete.", UVM_HIGH, this.name()); ... } } uvm_top.set_report_id_action("TransEvent@top/prod",UVM_NO_ACTION); uvm_top.set_report_id_verbosity("TransEvent@top/prod",UVM_NONE); uvm_top.set_report_id_verbosity("TransDump",UVM_NONE);
最初一条语句禁用具备ID“TransDump”的全局上下文
(uvm_top)
的所有报告。目前无奈应用通配符同时为多个上下文设置报表过滤器。此外,SC的档次分隔符能够在模拟器中进行配置,因而可能会影响这些命令的上下文准确度
几个等效serverity函数:uvmc_report_info()
uvmc_report_warning()
uvmc_report_error()
uvmc_report_fatal()
为方便使用uvmc_report
提供了一系列封装好的打印宏:UVMC_INFO (ID, message, verbosity, context);
UVMC_WARNING (ID, message, context);
UVMC_ERROR (ID, message, context);
UVMC_FATAL (ID, message, context);
在发送报告之前,宏首先调用uvmc_report_enabled
来防止发送报告,如果报告的冗余度或操作会阻止它达到报告服务器的话。该报告则应用提供的文件名和行号参数调用uvmc_report
。
对这些宏的调用必须以分号完结,这合乎为SC_REPORT
宏建设的SystemC约定。UVMC未来的版本可能会提供一个UVMC sc_report_handler
,您能够应用它将所有SC_REPORTs
重定向到UVM
。
示例:UVMC_ERROR("SC_TOP/NO_CFG","Missing required config object", name());