我想在我的顶级测试平台中创建一个时钟,其周期可以通过测试进行控制。我所做的是将周期设置到 uvm_config_db 中并将其返回到测试台中。我必须输入 #1 以确保构建阶段已完成,否则 get 返回错误值:
module testbench_top;
int clk_period;
bit clk = 0;
initial begin
#1;
void'(uvm_config_db #(int) ::get(null, "uvm_test_top.env", "clk_period", clk_period));
// Create clk
forever begin
#(clk_period/2) clk = !clk;
end
end
我对#1感到恼火。有没有更好的方法来检查配置是否已设置?我可以以某种方式阻塞直到start_of_simulation_phase吗?
我发现它埋在类参考中:您可以使用以下命令访问每个阶段的全局单例版本<phase name>_ph
。然后我可以使用wait_for_state
函数阻塞直到模拟阶段开始。模拟了一下,似乎有效:
module testbench_top;
int clk_period;
bit clk = 0;
initial begin
start_of_simulation_ph.wait_for_state(UVM_PHASE_STARTED);
if(!uvm_config_db #(int) ::get(null, "uvm_test_top.env", "clk_period", clk_period))
`uvm_fatal("CONFIG", "clk_period not set");
// Create clk
forever begin
#(clk_period/2) clk = !clk;
end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)