$hdl_xmr_force,$value$plusargs

 1、$hdl_xmr_force:

task trigger reset();
    $hdl_xmr_force("rkv timer tb.apb rstn","0");
    //rkv timer tb.apb rstn <= 0;
    #20ns;
    $hdl_xmr_force("rkv timer tb.apb rstn",“1");
    //rkv timer tb.apb rstn <= 1;
endtask

在 SystemVerilog 中,`$hdl_xmr_force` 是 UVM(Universal Verification Methodology)框架中的一种信号处理(Signal Handle)操作。这个操作主要用于强制设置信号的值,即在仿真过程中主动改变信号的状态。

具体来说,`$hdl_xmr_force` 中的各部分含义如下:

  • `$hdl`: 表示 Signal Handle 操作,用于处理信号。
  • `xmr`: 表示跨模块层次引用(Cross-Module Reference),这是一种允许在不同模块之间引用信号的机制。
  • `force`: 表示强制设置信号的值。

然后是括号中的两个参数:

  • 第一个参数是信号的层次引用,即信号的完整路径。在代码中,这是 "rkv_timer_tb.apb_rstn"。
  • 第二个参数是要设置的值,可以是 0 或 1。在代码中,分别是 "0" 和 "1"。

因此,`$hdl_xmr_force("rkv_timer_tb.apb_rstn", "0");` 这行代码的作用是强制设置信号 "rkv timer tb.apb rstn" 的值为 0。而后续的 `$hdl_xmr_force("rkv_timer_tb.apb_rstn", "1");` 则将该信号的值强制设置为 1。

这样的操作通常在仿真中用于测试特定条件或情景,以确保设计在各种情况下的行为正确。但是需要注意,过度使用强制设置可能会掩盖设计中的问题,因此应该谨慎使用。

2、$value$plusargs:

if(SvalueSplusargs("COV ENABLE-d",cfg.cgm enable)) begin
    uvm info("PLUSARGS",Ssformatf("get runtime option +COV ENABLE=%Od", cfg.cgm enable),UVM HIGH)
end 

在 SystemVerilog 中,$value$plusargs 是一个系统任务,用于从仿真运行时的命令行参数中获取特定的值。它主要用于在仿真运行时接收用户通过命令行传递的参数。

具体来说,$value$plusargs 的用法如下:

$value$plusargs("format string", arg1, arg2, ...);

其中:

  •  "format string" 是一个格式化字符串,用于指定期望的命令行参数的格式。

  • arg1, arg2,... 是接收参数的变量,可以是整数、字符串等,根据格式字符串的要求。

这个任务的返回值是一个布尔值,表示是否成功匹配命令行参数。如果匹配成功,参数的值将被写入相应的变量中。

例如,如果你想从命令行获取一个整数参数,可以这样使用:

int myParameter;

if ($value$plusargs("+my_parameter=%0d", myParameter)) begin
    // 成功获取参数,myParameter 中包含命令行传递的整数值
    $display("Got parameter: %0d", myParameter);
end else begin
    // 未找到匹配的命令行参数
    $display("Parameter not found in command line");
end

 

在上面的例子中,"+my_parameter=%0d",是格式字符串,指定了期望的命令行参数格式。%0d 表示一个十进制整数。如果命令行中包含了类似 +my_parameter+=42 的参数,那么成功匹配,+my_parameter 中将包含值 42。如果没有匹配的参数,任务返回 0,并且 +my_parameter 的值不会被修改。

请注意,$value$plusargs 通常在 initial 块中使用,因为它主要用于仿真开始时获取命令行参数。

你可能感兴趣的:(前端,uvm,systemverilog,系统函数)