【问题标题】:Disabling a scoreboard from a sequence using UVM使用 UVM 从序列中禁用记分牌
【发布时间】:2015-03-19 10:57:10
【问题描述】:

我有一个 uvm_sequence 随机化一个启用位“feature_en”。根据是否启用此位,我想启用/禁用我的记分牌。我使用 config_db 设置变量,并使用 field_macros 自动获取它在记分牌中。

我的问题是,在记分牌中,我想用“feature_en”保护 run_phase 中的代码。但是,序列在测试的 run_phase 中运行,因此记分板的 run_phase 先行,从而保持 feature_en 默认值,而不是获取序列中设置的值。

我尝试使用 wait(feature_en != -1)(我已将其设置为 int),但我意识到 feature_en 没有在记分板中再次采样。

有没有办法在记分板中动态更新 feature_en?或者任何其他方式来做到这一点?

【问题讨论】:

    标签: system-verilog uvm


    【解决方案1】:

    feature_en 可以直接打开/关闭,而不是通过 config_db 假设您的记分牌是序列中的一个组件(您的记分牌扩展了 uvm_scoreboard):

    my_env env;
    ....
    $cast(env, get_sequencer().get_parent().get_parent()); //env.agent.sequencer 
    env.sb.feature_en = 1;
    

    【讨论】:

    • 问题是我正在将块级 sb 集成到我的顶级环境中。顶级 sb 是我有写权限的地方。我覆盖了顶级环境中的 sb 类型。问题是编译器现在失败了,因为它在块级 sb 中找不到 feature_en。它最终会在 build_phase 用顶层覆盖块级,但在编译期间它不知道。
    【解决方案2】:

    您可以创建一个专用的 uvm_object 来执行此操作。例如:

    class feature_options extends uvm_object;
        bit sb_enable=0;
        // ...
    endclass
    

    在你的顶层测试台中实例化它,然后把它放到uvm_config_db中:

    // in your top-level testbench:
    feature_options f_opt;
    initial begin
        f_opt = new("f_opt");
        uvm_config_db#(feature_options)::set(uvm_root::get(), "*", "FEATURE_OPTIONS", f_opt);
    end
    

    然后从您自己的记分牌和排序器中抓取对象:

    // add the class handle in your scoreboard and your sequencer
    feature_options my_opt;
    
    // ... inside your scoreboard/sequencer build phase, grab the object
    if (!uvm_config_db#(feature_options)::get(this,"","FEATURE_OPTIONS", my_opt)) begin
    $display("Ok");
    end
    

    在此之后,您可以动态同步您的序列和计分板,例如:

    // inside your scoreboard run phase
    wait (f_opt.sb_enable);
    

    // inside your sequence body()
    p_sequencer.my_opt.sb_enable = 1;
    // ... do some test, then disable scoreboard
    p_sequencer.my_opt.sb_enable = 0; // and so on
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多