以uvm_reg的set()方法为例,set()的作用是修改m_desired值,由于uvm_reg中没有m_desired值,所以uvm_reg的set()方法实际上是调用了uvm_reg_field的set()方法,从而修改uvm_reg_field中的m_desired值。 1functionvoiduvm_reg::set(uvm_reg_data_t value,2stringfname ="",3intlineno =0);4m_fname =fna...
(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的do_write会根据写入的值更新register model中寄存器...
UVM(十二)之各register model续 1. register model的必要性 假设有如下的DUT: 这个DUT相当的简单,它只有一个寄存器version,要为其建造register model。首先要从uvm_reg派生一个通用的寄存器类: 在new函数中,要把这个寄存器的宽度作为参数传递给super.new函数。这里的宽度并不是说这个寄存器的有效宽度,而是说这个寄存...
地址映射add_hdl_path("tb.dut");//添加后门访问需要的路径ra.add_hdl_path_slice(硬件中reg名,0,32);(名,偏移地址,位宽)lock_model();//构建完需要锁住,只有寄存器预测组件可以访问和改变内部,在reg_block索引不到reg内的field //field//结束模型的映射关系endfunctionendclass 集成了register model后需要集...
uvm_reg_model——寄存器模型(一)uvm_reg_model——寄存器模型(⼀) 对于⼀个复杂设计,寄存器模型要能够模拟任意数量的寄存器域操作。UVM提供标准的基类库,UVM的寄存器模型来⾃于继承⾃VMM 的RAL(Register Abstract Layer),现在可以先将寄存器模型进⾏XML建模,再通过脚本⼯具直接⽣产寄存器模型。
为了让uvm_reg_map能通过sequencer自动执行前门访问,再connect_phase中需要将转换器和bus_sequencer通过set_sequencer函数告知reg_model的default_map,并将default_map设置为自动预测状态。 当建立好一个寄存器模型后,可以很方便地在其他component中使用,只需要定义一个寄存器模型的指针,并将其关联到已经定义好的寄存器模型...
我们自然就联想到了adapter内的两个函数reg2bus和bus2reg。要实现register model与adapter和sequencer的...
reg_model.STATUS_REGread(status,value,UVM_FRONTDOOR); ... endtask 只要一句话就可以实现上述复杂的过程。像启动sequence,并把读取结果返回这些事情,都可以由register model来完成。 2. register model中一些常用的概念 uvm_reg_field:这是register model中最小的单位,什么是reg_field?加入有一个状态寄存器,它的...
UVM(十二)之各register model续 1.register model的必要性 假设有如下的DUT: 这个DUT相当的简单,它只有一个寄存器version,要为其建造register model。首先要从uvm_reg派生一个通用的寄存器类: 在new函数中,要把这个寄存器的宽度作为参数传递给super.new函数。这里的宽度并不是说这个寄存器的有效宽度,而是说这个寄存器...
一、reg_model的实现 uvm_reg_field 用来针对寄存器功能域来构建对应的比特位 uvm_reg 与寄存器相匹配,其内部可以例化和配置多个uvm_reg_field对象(uvm_object) uvm_mem 匹配硬件存储模型 uvm_reg_map 用来指定寄存器列表中各个寄存器的偏移地址、访问属性以及对应的总线 uvm_reg_block 可以容纳多个寄存器(uvm_reg)...