寄存器模型中的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_map能通过sequencer自动执行前门访问,再connect_phase中需要将转换器和bus_sequencer通过set_sequencer函数告知reg_model的default_map,并将default_map设置为自动预测状态。 当建立好一个寄存器模型后,可以很方便地在其他component中使用,只需要定义一个寄存器模型的指针,并将其关联到已经定义好的寄存器模型...
作为sequencer,它会做两件事,一个是检测仲裁队列是否有请求;第二是检测driver是否申请transaction。 driver如何向sequencer申请transaction? 在uvm_driver中有seq_item_port,在sequencer中有seq_item_export,在i_agent中的build_phase中将它们连接起来,从而建立一个通道。当二者连接之后,就可以在driver中通过seq_item_por...
(1)寄存器的前门访问操作最终都将由uvm_reg_map完成(需要查看源代码); (2) 需要在connect_phase中,将转换器和bus_sequencer通过set_sequencer函数告知reg_model的default_map,并将default_map设置为自动预测状态; 1rm.default_map.set_sequencer(env.bus_agt.sqr, reg_sqr_adapter); ...
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 = regm.get_default_map();dmap.set_sequencer(m_env.apbm.m_seqr,reg_adp);regm.lock_...
4)local_model调用后,reg_model就不能再加入新的寄存器。 5)reset:如果不调用,默认都是0;调用后,都将变为复位值。 6)前门都是由uvm_reg_map完成,因此在connect_phase中,使用set_sequencer 将adapter 和bus_sequencer 告诉reg_model的 default_map。
每个前门寄存器的写/读操作都通过reg2bus和bus2reg API进行。对于不同的总线,例如APB和AXI,如果它们访问相同的RAL模型,则需要为每条总线创建适配器类。因此,对于每个寄存器映射,必须按如下所示设置RAL模型sequencer: 使用特定寄存器map访问RAL模型寄存器的示例: ...
也就是说uvm_reg_item中的这个local_map可以通过获取root map的方式间接拿到sequencer和adapter的句柄,...