adapter、squencer、map三者的关系,首先需要在环境(一般在env层次时)需要连接三者通过map.set_sequencer(squencer,adapter),因为本身rgm充当sequence,adapter充当转换的桥梁,而rgm中因为有lock_model只有Map能访问内部reg的field,而对于传到bus上也需要用bus的sequencer进行和drv的传递,所以三者是要关联的,这样adapter才能工...
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...
在connect_phase中,adapter将uvm_reg_map和sequencer连接,实际就是调用set_sequencer给uvm_reg_map中的成员变量m_sequencerm_adapter赋值: functionvoidbase_test::connect_phase(uvm_phase phase); super.connect_phase(phase); ... rm.default_map.set_sequencer(env.bus_agt.sqr, reg_sqr_adapter); rm.defaul...
对于virtual sequence而言,它可以承载各个子模块环境的element sequence,而最后通过virtual sequencer中的各个底层sequencer句柄,各个element sequence可以分别挂载到对应的底层sequencer上。 使用`uvm_declare_p_sequencer,可以在后台新建一个p_sequencer变量,而将m_sequencer的默认变量(uvm_sequencer_base类型)通过动态转换($ca...
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(), 可以让在其中间...
set_sequencer 函数 会使m_sequencer 句柄指向执行当前 sequence 的 sequencer,即指向 env.vsqr 如果没有指定挂载的sequencer,则挂载到parent_sequence的sequencer上 `uvm_do() 宏: 相比直接调用start函数,uvm_do()宏节省了sequence的实例化和随机化的步骤 ...
2、uvm_config_db #(uvm_object_wrapper)::set(this, "*.seqr.main_phase", "default_sequence",seq::type_id::get()); // 缺点在于我们直接把一个sequence类指定到sequencer的default_sequence,所以这个sequence是在后台被UVMcreate的,它的实例名字是在后台被UVM创建并命名的,名字可能会很奇怪。所以在使用in...
4)local_model调用后,reg_model就不能再加入新的寄存器。 5)reset:如果不调用,默认都是0;调用后,都将变为复位值。 6)前门都是由uvm_reg_map完成,因此在connect_phase中,使用set_sequencer 将adapter 和bus_sequencer 告诉reg_model的 default_map。 7)将default_map 设置为自动预测状态。
is_active是agent的一个成员,缺省值是UVM_ACTIVE,这表示处在active模式的agent需要例化driver、monitor和sequencer;而如果is_active的值是UVM_PASSIVE,这表示agent是passive模式,只可以例化monitor。active模式的agent既有激励功能也有监测功能;passive模式的agent只有监测功能。
一种是通过在my_case的build_phase使用uvm_config_db设置default_sequence给sequencer,另一种方式是先实例化要启动的sequence,之后再通过default_sequence启动。两者的区别就在于config_db::set的第四个参数,即要设置的值的获取方式不同,前者通过type_id::get获取,后者则直接用实例化后的变量即可。当一个sequence...