微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > ovm验证时出现问题

ovm验证时出现问题

时间:10-02 整理:3721RD 点击:
请教各位高手一个问题:
class my_driver extends ovm_driver;
`ovm_component_utils(my_driver)
function void new(.....)
...
endfunction: new
function void build();
....
endfunction: build
task run;
...
seq_item_port.get_next_item(...);
...
endtask
endclass: my_driver

class my_agent extends ovm_agent;
`ovm_component_utils(my_agent)
my_driver driver;
my_sequencer sequencer;
function void new(...)
...
endfunction: new
function void build();
super.build();
sequencer = my_sequencer::type_id::create("sequencer",this);
sequencer.build();
driver = my_driver::type_id::create("driver",this);
driver.build();
driver.seq_item_port.connect(sequencer.seq_item_export);
endfunction: build
endclass: my_agent
class my_env extends ovm_env;
`ovm_component_utils(my_env)
my_agent agent;
function void new(...)
...
endfunction: new
function void build();
super.build();
agent = my_agent::type_id::create("agent",this);
agent.build();
endfunction: build
task run;
....
endtask
endclass:my_env
仿真结果显示,my_env 中的run()函数跑起来了,但driver的run()没有跑起来,agent, driver,sequencer都已经创建了,就是driver的run跑不起来,一直等在那里进行不下去了,请各位高手指点原因啊,小弟在此谢过

sequencer里面的sequence 呢? 没有看到sequence的类啊。没有子弹,driver怎么s啊!

sequencer没有贴上来
class my_sequencer extands ovm_sequencer;
`ovm_sequencer_utils(my_sequencer)
function void new(...)
super.new();
endfunction:new
function void build();
super.build();
`ovm_update_lib...
endfunction:build
endclass: my_sequencer
class my_seqitem extends ovm_sequence_item;
.....
endclass:my_seqitem

class my_test extends ovm_test;
`ovm_componet_utils(my_test)
my_env env;
function void new(...)
...
endfunction: new
function void build();
super.build();
env=my_env::type_id::create("env",this);
env.assign_vi(test_top.dut_if)
endfunction: build
task run;
`run_sequence(env.agent.sequencer,"simple_seq");
global_stop_request();
endtask:run
endclass: my_test
module test_top;
my_interface dut_if;
dut dut(...);
initial
run_test("my_test");
...
endmodule

建议在driver内的run函数内第一行添加一行打印信息,看看究竟是根本没执行run还是执行run了,但执行过程中遇到了问题,再做进一步调试

加过的,没有执行driver的run()。

run()phase不执行,好奇怪,感觉只有一个原因能让他不执行,就是run() phase之前的phase没能正常执行下去

你把那个simple_seq的class贴一下,特别是里面的body 部分,没有看到这个class的定义啊

First you should learn clearly the OVM Construct and run your test according to the LAB!

后来找到问题了,之前是driver::run()不执行,在monitor::run()中加上触发条件就可以了,就是@(posedge ...)之类的条件
总之谢谢你啊

帮你顶 我也想知道


这个是根本原因吗?这个触发条件不应该会影响是否执行monitor的run函数啊。我觉得是你driver的build函数第一行没有写super.build()吧。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top