Sequence基本的工作流程是通过sequencer将sequence_item发送给driver,那么自然需要有一个sequencer与之关联,而m_sequencer正是关联sequence和sequencer的纽带。 除此之外,m_sequencer可以被用来访问UVM component层次结构中的其他资源或者配置信息等。但有一点需要注意,m_sequencer的类型是uvm_sequencer_base,而我们通常绑定给se...
m_sequencer 是一个指向执行当前sequence的sequencer句柄。 p_sequencer: 可以理解为parent_sequencer,父类sequencer 使用`uvm_declare_p_sequencer(my_sequencer) 宏声明p_sequencer,宏本质是在当前sequence也就是case0_sequence中声明了一个成员变量p_sequencer。 类型为my_sequencer,定义在case0_sequence中。 p_sequenc...
也就是说your_sequence要访问your_sequencer中的成员变量dmac和smac,虽然这是your_sequence中的m_sequencer经过调用`uvm_do后已经指向了your_sequencer,但此时他的类型还是uvm_sequencer_base,而uvm_sequencer_base是your_sequencer的父类。父类句柄直接访问子类对象是不允许的。 因此我们需要将m_sequencer的类型转换成子...
其实,当在sequence中使用uvm_do宏时,其默认的sequencer就是此sequence启动时为其指定的sequencer(my_sequence.start(my_sequencer), 括号里的my_sequencer),sequence会将这个sequencer的指针my_sequencer放在其成员变量m_sequencer中,换句话说就是m_sequencer此时指向的就是my_sequencer。这里要注意,虽然m_sequencer句柄具...
嵌套sequence的启动可以通过start(m_sequencer)来完成,也可以通过uvm_do()系列宏来完成; m_sequencer是base_sequencer启动时所使用的sequencer的指针,也就是说,嵌套的seq启动时所使用的sequencer同所在的sequence所使用的sequencer一致。 classbase_sequenceextendsuvm_sequence#(transaction); ...
其涉及5个基本组件或object:agent/driver/sequence/sequencer/item。 A、agent中完成driver和sequencer的连接:my_drv.seq_item_port.connect(my_seqr.seq_item_export); B、driver中调用seq_item_port的函数获取下个item、进行相应驱动后,结束当前item:
在start()函数中,首先调用了函数set_item_context()函数,这个函数位于sequence的父类uvm_sequence_item中,负责给成员变量m_sequencer, m_parent_sequence赋值。 如果没有指定挂载的sequencer,则挂载到parent_sequence的sequencer上。 此处seq0显示传入了需要挂载的p_sqr0,则调用set_sequencer()函数完成挂载,给m_sequenc...
m_sequencer是uvm_sequencer_base类型的句柄,默认情况下在每个sequence中都可用。连接到driver 的真正的sequencer 是从uvm_sequencer_base类派生出来的,其 被参数化为用于与driver 通信的sequence item类型。 因此要访问正在运行sequence 的真实sequencer ,我们需要将m_sequencer类型转化为真实sequencer ,通常称为p_sequencer...
3.2.配置sequence——get_full_name() / m_sequencer 3.3.配置sequence——get_sequncer() 一、sequence的执行流程 uvm_sequence_item(包装数据):只能对数据进行封装,不存在自动执行的函数; uvm_sequence(生产数据):具有可自动执行的函数,可通过body()函数进行可执行操作,产生数据激励; ...
uvm_sequencer_base m_sequencer;是uvm_sequence中的protected变量。 my_sequencer是从uvm_sequencer中扩展来的,并拥有独特的dmac/smac的变量。 m_sequencer是uvm_sequencer_base类型的句柄,实际指向的对象是my_sequencer。 所以如果想通过基类的句柄m_sequencer来访问扩展类在中独有的damc/smac的变量是不合法的,解决方...