使用 UVM 从序列中禁用记分牌
Disabling a scoreboard from a sequence using UVM
我有一个 uvm_sequence 可以随机化一个启用位 "feature_en"。根据是否启用此位,我想 enable/disable 我的记分牌。我使用 config_db 设置变量,并使用 field_macros 自动在记分牌中获取它。
我的问题是,在计分板中,我想用"feature_en"来保护run_phase中的代码。但是,测试的 run_phase 中的顺序是 运行,因此,记分牌的 run_phase 先行,从而保持 feature_en 默认值,而不是获取值集我的顺序。
我尝试使用 wait(feature_en != -1)(我将其设置为 int),但我意识到 feature_en 是未在记分牌中再次采样。
有没有办法在记分牌中动态更新feature_en?或者有其他方法吗?
feature_en可以直接切换on/off,不能通过config_db
假设您的记分牌是序列中的一个组件(您的记分牌扩展 uvm_scoreboard ):
my_env env;
....
$cast(env, get_sequencer().get_parent().get_parent()); //env.agent.sequencer
env.sb.feature_en = 1;
您可以创建一个专用 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
我有一个 uvm_sequence 可以随机化一个启用位 "feature_en"。根据是否启用此位,我想 enable/disable 我的记分牌。我使用 config_db 设置变量,并使用 field_macros 自动在记分牌中获取它。
我的问题是,在计分板中,我想用"feature_en"来保护run_phase中的代码。但是,测试的 run_phase 中的顺序是 运行,因此,记分牌的 run_phase 先行,从而保持 feature_en 默认值,而不是获取值集我的顺序。
我尝试使用 wait(feature_en != -1)(我将其设置为 int),但我意识到 feature_en 是未在记分牌中再次采样。
有没有办法在记分牌中动态更新feature_en?或者有其他方法吗?
feature_en可以直接切换on/off,不能通过config_db 假设您的记分牌是序列中的一个组件(您的记分牌扩展 uvm_scoreboard ):
my_env env;
....
$cast(env, get_sequencer().get_parent().get_parent()); //env.agent.sequencer
env.sb.feature_en = 1;
您可以创建一个专用 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