也就是说register model中的default_map里的set_sequencer方法实现了将三者的关联,传递的两个参数分别对应着实际的sequencer和adapter。 我们看看这个default_map的声明和类型定义 于是寄存器模型的default_map就把对应的sequencer和adapter存放在了default_map中的m_sequencer和m_adapter中。 下面在看看uvm_reg_adapter中re...
uvm_report_fatal("SEQ",{"neither the item's sequencer nor dedicated sequencer has been supplied to start item in ",get_full_name()},UVM_NONE); return; end item.set_item_context(this, sequencer); if (set_priority < 0) set_priority = get_priority(); sequencer.wait_for_grant(this, s...
因此要用一个trick:sequence一旦活动起来,它必须挂载到一个sequencer上(发送item),也就是sequence能够获取sequencer的句柄,通过句柄来访问sequencer中的成员变量或等信息,那么这样sequence可以依赖于sequencer的结构关系,间接通过sequencer来获取顶层的配置和更多信息。 明确划分模块职责的话,sequence应该只负责生成item的内容, ...
UVM内建了一个宏uvm_declare_p_sequencer(SEQUENCER),这个宏声明了一个SEQUENCER类型的成员变量,在定义sequence时,使用这个宏声明对应sequencer的类型如下 class case0_sequence extends uvm_sequence #(my_transaction);my_transaction my_trans;`uvm_object_utils(case0_sequence)`uvm_declare_p_sequencer(my_sequencer...
可以指定map,通过选定的map访问寄存器。举例:CPU的 IBUS 和 SBUS访问的地址范围不同,可以分别建立相对应的uvm_reg_map,通过map的set_sequencer设置对应BUS的sequencer。 调用uvm_reg的do_write(rw)。 // uvm_reg.svh task uvm_reg::write(output uvm_status_e status, ...
env.i_agt.sqr.set_arbitration(SEQ_ARB_STRICT_FIFO); 仲裁算法详细讲解可参考:UVM Tutorial for Candy Lovers – 26. Sequence Arbitration 2.4 sequence对sequencer的占用或失效 1. 用lock()和grab()排他性占用sequencer 在sequence的body()中使用lock()...unlock()或grab()...ungrab(), 可以让在其中间...
在多个sequence挂载到一个seuqencer的情况下,uvm_sequencer类自建了仲裁机制来保证多个sequence在同时挂载到sequencer时,可以按照仲裁规则允许特定sequence中的item优先通过。 在实际使用中,我们可以通过uvm_sequencer::set_arbitration(UVM_SEQ_ARB_TYPE val)函数来设置仲裁模式,这里的仲裁模式UVM_SEQ_ARB_TYPE有如下几种...
sequencer的仲裁特性及应用 uvm_ sequencer 类自建了仲裁机制用来保证多个 sequence 在同时挂载到 sequencer 时, 可以按照仲裁规则允许特定 sequence 中的 item 优先通过。在实际使用中, 我们可以通过uvm_sequencer: :set_ arbitration(UVM _ SEQ_ ARB_TYPE val)函数来设置仲裁模式,这里的仲裁模式UVM_SEQ_ ARB_ TYPE...
uvm_sequencer(发送数据):将数据发送给driver; sequence item是每一次driver与DUT互动的最小粒度内容,在sequence与driver之间起到桥梁作用的是sequencer,sequencer与driver均是component组件,它们之间的通信也是通过TLM端口实现的。UVM序列的连接传送如下图所示: ...
virtual sequencer `uvm_do_on宏的使用 首先实现一个virtual sequencer,在这个virtual sequencer中,例化上述所需的sequencer。如下代码所示: class virtual_sequencer extends uvm_sequencer; `uvm_component_utils(virtual_sequencer) my_sequencer ifu_sqr; // sequencerA ...