uvm_reg_block,包含类,包含底层的uvm_reg_block,uvm_reg, default_path,定义自己的hdl_path, lock,表明当前的model是lock住的,调用function lock_model() 自己的coverage设置,new的时候设置到has_cover,get的时候,得到cover_on。 uvm_reg_sequence,只是实现了调用map中的读写操作,不支持burst_read,burst_write,...
uvm_reg_map:每个寄存器在加入寄存器模型时都有其地址,uvm_reg_map就是存储这些地址,并将其转换成可以访问的物理地址(因为加入寄存器模型中的寄存器地址一般都是偏移地址,而不是绝对地址) 简单的寄存器模型 只有一个寄存器的寄存器模型 首先要从uvm_reg派生一个invert类: 在new函数中,要将invert寄存器的宽度作为参数...
(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_adapter::bus2reg()是从mcdf_bus_driver()将数据写回至mcdf_bus_sequence,而一直保持监听的reg2mcdf_adapter一旦从sequencer获取了RSP(mcdf_bus_trans)之后,就将自动调用bus2reg()函数。 bus2reg()函数的功能与...
uvm_reg_map:用于存储寄存器模型里寄存器的地址,在每个reg_block里至少有一个uvm_reg_map(通常也只有一个)。 接下来我们来分享如何定义一个最简单的寄存器模型(只有一个寄存器,且寄存器里只有一个寄存器域)。 首先,要先从uvm_reg类里派生一个寄存器类(即先生成一个寄存器的版图),在这个类里会有一个build函数(完...
uvm_reg_block,包含类,包含底层的uvm_reg_block,uvm_reg, default_path,定义自己的hdl_path, lock,表明当前的model是lock住的,调用function lock_model() 自己的coverage设置,new的时候设置到has_cover,get的时候,得到cover_on。 uvm_reg_sequence,只是实现了调用map中的读写操作,不支持burst_read,burst_write,...
1.2.1. status_reg 首先定义一个status_reg类,继承自uvm_reg,该类就表示了status寄存器。class...
在这个示例中,我们定义了 my_reg 类来表示一个寄存器,其中包含两个字段 field1 和field2。我们还定义了 my_reg_block 类来表示寄存器块,并在其中实例化了 my_reg。通过定义 uvm_reg_no_individual_field_access 宏,我们指示 UVM 验证环境在访问这些字段时应该将它们转化为对整个寄存器的访问。在编译时,我们需要...
reg_access参数可以分为两种类型:读取(read)和写入(write)。读取参数用于从寄存器中读取数据,而写入参数用于向寄存器中写入数据。这两种参数可以在UVM验证环境中灵活地使用,以实现对寄存器的访问和验证。 对于读取参数,我们可以使用reg_access.read()方法来读取寄存器中的数据。该方法需要传入三个参数:寄存器地址、寄存器...
适配器模式(Adapter Pattern)是结构性设计模式,其目的是协调不兼容的结构,把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 寄存器模型中的adapter就是一个适配器,提供了reg2bus和bus2reg的接口,充当uvm_reg_map和uvm_sequencer中的转换器。uvm_...