p_sequencer是由uvm_decalre_p_sequencer宏产生的 p_sequencer是用户指定的sequence的成员变量(这里是your_sequence的成员变量,因为`uvm_decalre_p_sequencer宏是在your_sequence中使用的) p_sequencer是指向用户指定的类型的句柄(这里是your_sequencer的成员变量) p_sequencer源代码如下: `defineuvm_declare_p_sequence...
`uvm_declare_p_sequencer,使得virtualsequence可以使用声明后的p_sequencer(类型为mcdf_virtual_sequencer),来进一步回溯到其内部的各个sequencer句柄。在这里,使用`uvm_declare_p_sequencer是较为方便的,因为这个宏在后台,可以新创建一个p_sequencer变量,而将m_sequencer的默认变量 ...
在使用start()或`uvm_do()挂载sequence时,会将其挂载到m_sequencer指定的sequencer上,但是一般情况下,这个sequencer是一个自定义的sequencer子类。父类句柄指向子类对象本身合理,但无法访问子类扩展的数据类型,为了能在发送时访问子类的成员,就需要使用`uvm_declare_p_sequencer(),比如: (参考UVM实战6.4.4的内容) cl...
`uvm_declare_p_sequencer(mcdf_bus_sequencer) ... task body(); uvm_status_e status; uvm_reg_data_t data; uvm_reg_hw_reset_seq reg_rst_seq=new();// uvm_reg_bit_bash_seq reg_bit_bash_seq=new(); uvm_reg_access_seq reg_acc_seq=new(); if(!uvm_config_db#(mcdf_rgm)::get(nu...
因为m_sequencer 是uvm_sequencr_base (uvm_sequencr 的基类)类型,而不是my_sequencer 类型。 所以要cast:把m_sequencer 转换成my_sequencer: 但是好麻烦。所以内建了一个宏:uvm_declare_p_sequencer(SEQUENCER) 相当于声明如下变量: 自动将m_sequencer cast 成p_sequencer。在pre_body()前完成。
Class system_virtual_sequencer extends uvm_sequencer; //References to non-virtual sequencer usb_sequencer usb_seqr; axi_sequencer axi_seqr; function new (string name=”usb_ltssm_bulk_test”, uvm_component parent=null); … endfunction: new ...
在这里,使用`uvm_declare_p_sequencer是较为方便的,因为这个宏在后台,可以新创建一个p_sequencer变量,而将m_sequencer的默认变量(uvm_sequencer_base类型)通过动态转换,变为类型为mcdf_virtual_sequencer类型的p_sequencer。只要声明的挂载sequencer类型正确,用户可以通过这个宏,完成方便的类型转换,因此才可以通过p_...
uvm_object_utils(my_base_sequence)uvm_declare_p_sequencer(my_sequencer) function new(string name = “my_base_sequence”); super.new(name); endfunction : new task body(); //create packet //give some value //send packet to driver
rgm.map.set_sequencer(agent.sequencer, reg2mcdf); agent.monitor.ap.connect(mcdf2reg_predictor.bus_in); endfunction endclass uvm_reg的访问方法 在给出寄存器模型的常见应用模式之前,首先从下表中更全面地了解uvm_reg_ block、 uvm_reg 和uvm_reg_ field 三个类提供的用于访问寄存器的方法。
uvm_reg_bus_op与总线transaction中各自的数据映射。 reg2bus()和bus2reg()两个函数实现两种transaction的数据映射。 如果总线支持byte访问,可以使能supports_byte_enable;如果总线UVC要返回response数据则应使能provides_response。mcdf_bus_driver在读数时会将读回的数据填入到RSP并返回至sequencer,因此需要在adapter中...