uvm_severity master_pslverr_status_severity = UVM_WARNING
时间: 2023-07-05 21:22:45 浏览: 76
这段代码使用了 UVM 库中的 uvm_severity 枚举类型,并将其赋值为 UVM_WARNING。同时,它还声明了一个名为 master_pslverr_status_severity 的变量,并将其类型设置为 uvm_severity。这个变量可能会在某个测试中用于控制 UVM 报告的详细程度。更具体地说,它将控制在仿真过程中产生的 pslverr_status 错误的严重程度。如果错误的严重程度为 UVM_WARNING,则该错误将被视为警告,并且不会导致仿真停止。
相关问题
ask lvc_apb_master_driver::do_write(lvc_apb_transfer t); `uvm_info(get_type_name(), "do_write ...", UVM_HIGH) @(vif.cb_mst); vif.cb_mst.paddr <= t.addr; vif.cb_mst.pwrite <= 1; vif.cb_mst.psel <= 1; vif.cb_mst.penable <= 0; vif.cb_mst.pwdata <= t.data; @(vif.cb_mst); vif.cb_mst.penable <= 1; #10ps; wait(vif.pready === 1); #1ps; if(vif.pslverr === 1) begin t.trans_status = ERROR; if(cfg.master_pslverr_status_severity == UVM_ERROR) `uvm_error(get_type_name(), "PSLVERR asserted!") else `uvm_warning(get_type_name(), "PSLVERR asserted!") end else begin t.trans_status = OK; end repeat(t.idle_cycles) this.do_idle(); endtask: do_write
这段代码是一个 APB 总线驱动器的写操作,其中 `t` 是一个包含地址和数据等信息的传输结构体。具体操作如下:
1. 首先打印一条消息,说明正在进行写操作;
2. 等待 CB(Conduit Bundle)Master 的一个时钟周期;
3. 将传输结构体中的地址和数据写入 CB Master 中对应的寄存器中;
4. 设置 CB Master 的状态,表明有传输要进行,同时写信号被拉高;
5. 等待一个时钟周期,让 CB Master 的状态稳定;
6. 将 CB Master 的有效使能信号 `penable` 置为 1,表示传输开始;
7. 等待传输完成,即 CB Slave 的 `pready` 信号被置为 1;
8. 等待一个时钟周期,以保证 CB Slave 的状态稳定;
9. 判断传输是否成功,如果 `pslverr` 信号被置为 1,说明出现了传输错误,将传输结构体的状态设置为 ERROR;
10. 如果传输正常,则将传输结构体的状态设置为 OK;
11. 根据传输结构体中给定的空闲周期数,执行 `do_idle()` 函数,等待总线空闲。
uvm_status_e
uvm_status_e是SystemVerilog中的一个枚举类型,用于表示UVM(Universal Verification Methodology)中的不同状态。它包括以下值:
- UVM_IS_OK:表示操作成功完成。
- UVM_NOT_OK:表示操作未能成功完成。
- UVM_HAS_X:表示信号具有X值。
- UVM_NOT_OK_WITH_HIER:表示操作未能成功完成,但在层次结构中找到了相关实例。
- UVM_EXPECTED_FALSE:表示预期结果为False。
- UVM_EXPECTED_TRUE:表示预期结果为True。
- UVM_FATAL:表示发生致命错误,测试停止。
- UVM_ERROR:表示发生错误。
- UVM_WARNING:表示发生警告。
- UVM_NONE:表示没有状态。
这些状态在UVM测试中用于表示测试执行的结果,例如检查是否发生错误或警告。