|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
看了下ovm库里面,他们俩的区别就是有两点,但是小弟对这两点理解得不是很透彻,希望大神多指点。
- // MACRO: `ovm_update_sequence_lib
- //
- // This macro populates the instance-specific sequence library for a sequencer.
- // It should be invoked inside the sequencer¿s constructor.
- `define ovm_update_sequence_lib \
- m_add_builtin_seqs(0); \
- ovm_update_sequence_lib();
- // MACRO: `ovm_update_sequence_lib_and_item
- //
- // This macro populates the instance specific sequence library for a sequencer,
- // and it registers the given ~USER_ITEM~ as an instance override for the simple
- // sequence's item variable.
- //
- // The macro should be invoked inside the sequencer's constructor.
- `define ovm_update_sequence_lib_and_item(USER_ITEM) \
- factory.set_inst_override_by_type( \
- ovm_sequence_item::get_type(), USER_ITEM::get_type(), \
- {get_full_name(), "*.item"}); \
- m_add_builtin_seqs(1); \
- ovm_update_sequence_lib();
复制代码
1.ovm_update_sequence_lib_and_item会将里面simple sequence的item类型改变为user定义的sequence里面的item类型
这个的话还比较好理解
2.m_add_builtin_seqs()这个函数参数一个是0,一个是1
我看了下这个函数的内容,如下。感觉就是添加了三个默认的系统自带的sequence。前两个自带的sequence会默认执行user定义的某些sequence,但最后一个simple_sequence的作用我还是真没看懂。
- virtual function void m_add_builtin_seqs(bit add_simple = 1);
- if(!sequence_ids.exists("ovm_random_sequence"))
- add_sequence("ovm_random_sequence");
- if(!sequence_ids.exists("ovm_exhaustive_sequence"))
- add_sequence("ovm_exhaustive_sequence");
- if(add_simple == 1)
- if(!sequence_ids.exists("ovm_simple_sequence"))
- add_sequence("ovm_simple_sequence");
- endfunction
复制代码
那么好,问题来了,请问ovm_update_sequence_lib_and_item与ovm_update_sequence_lib分别用在哪里?(自己感觉前者用于base的sequencer,后者用于extend的sequencer)
还有就是这个m_add_builtin_seqs的意义是什么?
simple_sequence难道会对应一个user自己定义的sequence来进行执行吗? |
|