【UVM】UVM中打印信息的控制

重载打印信息的严重性

UVM默认有四种信息严重性:UVM_INFO、UVM_WARNING、UVM_ERROR、UVM_FATAL。这四种严重性可以互相重载。如果要把driver中所有的UVM_WARNING显示为UVM_ERROR,可使用如下的函数:

virtual function void connect_phase(uvm_phase phase);
env.i_agt.drv.set_report_severity_override(UVM_WARNING, UVM_ERROR);
//env.i_agt.drv.set_report_severity_id_override(UVM_WARNING, "my_driver", UVM_ERROR);
endfunction

重载严重性可以只针对某个component内的某个特定的ID起作用:env.i_agt.drv.set_report_severity_id_override(UVM_WARNING, “my_driver”, UVM_ERROR);

UVM不提供递归的严重性重载函数。严重性重载用的较少,一般只会对某个component内使用,不会递归的使用。

重载严重性也可在命令行中实现,其调用方式为:

<sim command> +uvm_set_severity=<comp>,<id>,<current severity>,<new severity>
如:<sim command> +uvm_set_severity="uvm_test_top.env.i_agt.drv,my_driver,UVM_WARNING,UVM_ERROR"
//若要设置所有的ID,可以在id处使用_ALL_:
<sim command> +uvm_set_severity="uvm_test_top.env.i_agt.drv,_ALL_,UVM_WARNING,UVM_ERROR"
  • +UVM_VERBOSITY=UVM_NONE 将整个UVM环境钟的verbosity级别都设置为了UVM_NONE。

  • +uvm_set_verbosity=<comp>,<id>,<verbosity>,time,<time>将设置特定的component下指定ID的verbosity。

  • 例如:“+uvm_set_verbosity=tb_top.pcie_inst*,_ALL_,UVM_NONE,time,0”就是设置tb_top.pcie_inst下面所有ID的verbosity为UVM_NONE。

  • <sim command> +uvm_set_verbosity=uvm_test_top.env0.agent1.*,_ALL_,UVM_FULL,time,800

  • UVM目前定义了6种啰嗦等级,UVM_NONE -> UVM_LOW -> UVM_MEDIUM -> UVM_HIGH-> UVM_DEBUG -> UVM_FULL是越来越啰嗦。

  • 这里的<comp>是uvm component 的路径,支持*号通配符(跟uvm_config_db set/get时的用法类似,只是这里必须用绝对路径)。

  • <id>是uvm_info的第一个参数(如果选择component的所有打印语句,就写_ALL_)。

  • <phase>可以指定从某个uvm phase开始生效。xxx_phase直接写xxx就可以了,_phase省略掉。

  • <time>可以指定从某个仿真时刻开始生效

这些plusargs是在仿真刚开始但RTL时间还未推进之前就解析并执行的,也就是说在0时刻之前。
对于全局配置,如果指定了多次,会按照最低的容忍等级来执行。也就是说,如果在一长串的仿真参数里,先给了一个+UVM_VERBOSITY=UVM_LOW,又给了一个+UVM_VERBOSITY=UVM_HIGH,最终会按照UVM_LOW来过滤信息。这有点像木桶短板理论。
注意:这时候另外加上参数+uvm_set_verbosity=uvm_test_top.env0.agent0,msg_a,UVM_HIGH,run,可以单独指定系统对uvm_test_top.env0.agent0里info id为“msg_a”的打印信息的容忍等级改为高,并且从run phase开始生效。

另外,uvm_set_action,直接贴源码,解释的很清晰。

UVM (Universal Verification Methodology) 中,交易(Transaction)的信息通常通过UVM的日志系统来记录和跟踪。UVM提供了一个层次化的日志框架,允许你在各个层次(如环境、模块、任务等)上设置不同的日志级别,以便控制信息的详细程度。 如果你想要打印交易的相关信息,可以在`uvm_sequence_base`或具体的交易类`uvm_transaction`中实现以下步骤: 1. **声明观察者**: 首先,在交易类中声明一个观察者接口,比如`uvm_printer`,用于接收并处理打印操作。 ```c++ class my_transaction extends uvm_sequence_item; typedef uvm_printer#(my_transaction) printer_type; ``` 2. **添加打印机到交易**: 在构造函数或适当的时机,创建并关联一个`printer_type`实例到交易实例上。 ```c++ my_transaction dut_tx(this); dut_tx.printer = new printer_type(dut_tx); ``` 3. **触发打印**: 当需要打印交易信息时,调用观察者的`print()`方法,并传递相关信息,如交易状态、数据等。 ```c++ void do_something() { // ... printer.print("Transaction info:", this.get_name(), "status:", get_status()); // ... } ``` 4. **配置日志级别**: 可以在`run_phase()`或其他适当阶段调整全局日志级别,确保交易信息会被记录。 ```c++ virtual void run_phase(uvm_phase phase) { super.run_phase(phase); uvm_config_db#(uvm_component) db = uvm_config_db::get(); db.set(null_id, "", "uvm_root", "log_severity", UVM_INFO String); // 其他配置... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值