寄存器模型中的adapter就是一个适配器,提供了reg2bus和bus2reg的接口,充当uvm_reg_map和uvm_sequencer中的转换器。uvm_reg_map操作uvm_reg_bus_op类型的item,而uvm_sequencer操作uvm_sequence_item类型的item。 adapter 继承uvm_reg_adapter,重写reg2bus和bus2reg这两个pure virtual function。 classmy_adapterexte...
(1.1) FRONTDOOR write操作最终会转换为uvm_reg_map的do_write任务; (1.2) uvm_reg_map的do_write任务会查看系统是否设置了adapter,如果没有设置,就直接启动sequence, 让sequencer发送uvm_reg_item类型的transaction;如果设置了,那就调用do_bus_write任务. (1.3) uvm_reg_map的do_write完成后,如果auto predict功...
uvm_reg_sequence,只是实现了调用map中的读写操作,不支持burst_read,burst_write, 其中启动该sequence,需要reg_sequencer,连接一个driver。 或者在sequence中,直接调用已经存在的read,write task,这样配置的sequence,可以直接由此继承。 uvm_reg_item,uvm_sequence中的trnasaction类型,定义reg access的方式,包含一个uvm_...
dmap.set_sequencer(m_env.apbm.m_seqr,reg_adp); regm.lock_model(); endfunction 因为是最简单的寄存器模型,因此regm的configure我们全部采用默认参数,即regm不再处于某个uvm_reg_block中,且没有后门操作。 create_map,用于uvm_reg_block直接定义,创建并且配置一个uvm_reg_map对象,相关配置由本函数的参数提供...
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_block:寄存器块,里边可以包含很多uvm_reg和其它的uvm_reg_block,还会有uvm_refg_map。 uvm_reg:寄存器。 uvm_reg_field:寄存器域段,根据不同的bit代表不同的功能,reserved不算域段。为寄存器模型的最小单位。 uvm_reg_map:存储寄存器地址,并将其转换成可以访问的物理地址(因为加入寄存器模型中的寄存器...
4)local_model调用后,reg_model就不能再加入新的寄存器。 5)reset:如果不调用,默认都是0;调用后,都将变为复位值。 6)前门都是由uvm_reg_map完成,因此在connect_phase中,使用set_sequencer 将adapter 和bus_sequencer 告诉reg_model的 default_map。
1.直接通过p_sequener访问资源。sequencer中get获得资源,sequence中调用p_sequencer.m_regmodel访问资源。 2.直接赋值,在test中例化sequence时,seq.m_regmodel = m_regmodel。也可以封装到sequence中的function。 #seq virtual function set_regmodel(top_reg_model m_regmodel); ...
extern virtualfunctionvoid set (uvm_reg_data_t value,stringfname ="",intlineno =0); 使用示例 p_sequencer.p_rm.invert.set(16'h1); update:将期望值和镜像值比对,如果不一致则吧期望值写入到dut的寄存器中,同时更新寄存器模型镜像值。uvm_reg级别被调用, 也可以在uvm_reg_block级别被调用。
每个前门寄存器的写/读操作都通过reg2bus和bus2reg API进行。对于不同的总线,例如APB和AXI,如果它们访问相同的RAL模型,则需要为每条总线创建适配器类。因此,对于每个寄存器映射,必须按如下所示设置RAL模型sequencer: 使用特定寄存器map访问RAL模型寄存器的示例: ...