1. reg_model.get_reg_by_name()
如上所示,`reg_model.get_reg_by_name()` 是一个方法,用于根据寄存器的名称获取对寄存器对象的引用。如果找到了寄存器,我们可以对它执行读写操作;如果没有找到,我们可以记录一个错误。
2.$isunknown
在 SystemVerilog 中,$isunknown() 是一个系统任务,用于检查给定的值是否包含未知位(unknown bits),即逻辑 'x' 或 'z'。这个系统任务通常用于验证和测试环境中,以确保信号或变量具有确定的值,而不是未知或未定义的状态
3.covergroup uart_packet_covergroup with function sample(uart_packet uart_tr)
名为 uart_packet_covergroup 的 covergroup 的示例,它与 uart_packet 数据结构关联,并且包含一个名为 sample 的函数,该函数用于在仿真中“采样”或记录 uart_packet 的实例
4.订阅者uvm_subscriber
uvm_subscriber 是一个虚拟类,因为它包含纯虚方法 write。
派生自 uvm_subscriber 的子类必须实现 write 方法来处理接收到的数据。
analysis_export (本质上是uvm_analysis_imp)用于实现数据的输入,而订阅者本身实现数据的接收和处理
5.如何将monitor检测的数据发给uart_packet_coverage?
uart_i_agent.mon.analysis_port.connect(uart_pkt_cov.analysis_export);
6.设置UVM_ERROR到达数量退出仿真
使用了uvm_report_serve组件,使用get_severity_count获取error的数量,通过判断来打印信息,但是不会退出仿真
uvm_report_server server = uvm_report_server::get_report_server();
server.set_max_quit_count(5); // 遇到5个错误后仿真退出
但是这样就没有打印信息了
uvm_report_server server = uvm_report_server::get_report_server();
server.stop_on_error(1); // 设置在遇到错误时停止仿真
使用 uvm_root::get().set_report_max_quit_count(100); 这种方法将影响整个仿真环境, 适用于所有测试和组件。
uvm_report_server::set_report_max_quit_count(100);影响的是特定的test
7.在run-time phase中可以设置set_drain_time,来确定阶段完成后的等待时间
8.run-time phase中的task phase是顺序执行的,但是run-time phase和run_phase是并行的
9.uvm_cmdline_processor 解析和处理仿真时从命令行传递给仿真器的参数
uvm_cmdline_processor 是一个单例,可以通过 uvm_cmdline_processor::get_inst() 方法获取其唯一实例。
它提供了方法来检索命令行参数的值,例如 get_arg_value(),该方法可以根据参数名获取其值。
atoi是一个常用的函数,用于将字符串(string)转换为整数(integer)
10.get_type()和type_id::get()的区别
get_type()
和 type_id::get()
都可以用于配置数据库的设置,但是 type_id::get()
由于其轻量级的特性,可能在某些情况下性能更优。然而,UVM 社区通常推荐使用 get_type()
方法,因为它更加直观和易于理解。
uvm_config_db#(uvm_object_wrapper)::set(this,
”env.uart_i_agent.seqr.main_phase”,”default_sequence”,
uart_packet_stop_bit_0_sequence:type_id::get())