前言:总是忘了sequence、sequencer与driver、transaction之间的关系,记篇笔记吧。
sequence:
1.派生自uvm_sequence,是uvm_object,在定义时需指定要产生的transaction的类型。
2.产生transaction并发送给sequencer(发给哪个sequecer呢?怎么指定?后面有回答)。其方法有uvm_do或者直接使用start_item与finish_item的方式产生transaction。
3.每个sequence都有一个body任务,sequence启动后,会自动执行body中的代码(产生transaction)。
sequencer:
1.派生自uvm_sequencer,是uvm_component,是一个参数化的类。
2.将sequence送来的transaction再送给driver。
那具体来说sequence、sequencer、driver三者之间是怎样交流通信的?
sequencer作为媒介需要做两件事:
1.sequence与sequencer之间
检测仲裁队列里是否有某个sequence发送transaction的请求。uvm_do就是创建transaction的实例,并随机化发给sequencer。那发送给哪个sequencer呢?(1)就需要在某个component的main_phase中启动这个sequence。start任务的参数时一个sequencer指针。(2)实际应用中,是通过default_sequ