如何将命令行覆盖应用于SystemVerilog ovm_序列对象?

如何将命令行覆盖应用于SystemVerilog ovm_序列对象?,verilog,system-verilog,Verilog,System Verilog,我想对ovm_序列对象应用命令行覆盖,如下所示: +ovm\u set\u config\u int=*,最大超时,100000 max\u timeout字段在ovm\u sequence\u utils宏中声明 有什么办法吗?我的理解是,ovm序列不是ovm层次结构的一部分,因此可能无法从命令行修改它们。我不知道有哪种机制可以让您从命令行设置这样的配置空间。OVM源代码的快速grep也不会显示任何内容 快速评论 ovm序列不是ovm层次结构的一部分 它们不是在构建时构建的,这是正确的。它们是

我想对ovm_序列对象应用命令行覆盖,如下所示:

+ovm\u set\u config\u int=*,最大超时,100000

max\u timeout
字段在
ovm\u sequence\u utils
宏中声明


有什么办法吗?我的理解是,ovm序列不是ovm层次结构的一部分,因此可能无法从命令行修改它们。

我不知道有哪种机制可以让您从命令行设置这样的配置空间。OVM源代码的快速grep也不会显示任何内容

快速评论

ovm序列不是ovm层次结构的一部分

它们不是在构建时构建的,这是正确的。它们是在sequencer上运行之前创建的,但是任何基于ovm_对象的类都可以通过get_config_int()查询配置整数


通常情况下,我会使用加号arg来处理类似的事情,然后在我的基本测试类中基于加号arg设置config int。例如,命令行将具有:

+max_timeout=100000
…然后,在我的基本测试类中,我的所有测试都从中继承:

function void build();
    int timeout;
    [....]
    if ($value$plusargs("max_timeout=%d", timeout)) begin
        `ovm_info(get_type_name(), "Setting timeout", OVM_MEDIUM);
        set_config_int("*", "max_timeout", timeout");
    end
    [....]
endfunction

通常情况下,我的使用不是那么字面化,有设置多个值的标志,但这是它的基本原理。

我不知道有一种机制可以让您从命令行设置这样的配置空间。OVM源代码的快速grep也不会显示任何内容

快速评论

ovm序列不是ovm层次结构的一部分

它们不是在构建时构建的,这是正确的。它们是在sequencer上运行之前创建的,但是任何基于ovm_对象的类都可以通过get_config_int()查询配置整数


通常情况下,我会使用加号arg来处理类似的事情,然后在我的基本测试类中基于加号arg设置config int。例如,命令行将具有:

+max_timeout=100000
…然后,在我的基本测试类中,我的所有测试都从中继承:

function void build();
    int timeout;
    [....]
    if ($value$plusargs("max_timeout=%d", timeout)) begin
        `ovm_info(get_type_name(), "Setting timeout", OVM_MEDIUM);
        set_config_int("*", "max_timeout", timeout");
    end
    [....]
endfunction
通常情况下,我的用法并不是那么直白,有设置多个值的标志,但这是它的基本原理。

我通过在任务体()中将以下内容添加到我的ovm_序列中,使其正常工作(遵循中的说明):

这里的关键是需要为sequencer设置命令行配置,序列可以使用上述代码获取该配置。

我通过在
任务体()
中的ovm_序列中添加以下内容使其工作(按照中的说明):

这里的关键是需要为sequencer设置命令行配置,序列可以使用上述代码获取该配置