1functionuvm_reg::new(stringname="",intunsignedn_bits,inthas_coverage);2super.new(name);3if(n_bits ==0)begin4`uvm_error("RegModel", $sformatf("Register \"%s\" cannot have 0 bits", get_name()));5n_bits =1;6end7m_n_bits =n_bits;8m_has_cover =has_coverage;9m_atomic = ne...
(1) m_atomic本质上是一个semaphore,用于实现进程的同步; uvm_reg的new函数中会为其分配一个key; functionvoiduvm_reg::reset(stringkind ="HARD");foreach(m_fields[i]) m_fields[i].reset(kind);//Put back a key in the semaphore if it is checked out//in case a thread was killed during an...
classreg_mineextendsuvm_reg;randuvm_reg_fieldreg_data;virtualfunctionvoidbuild();reg_data=uvm_reg_field::type_id::create("reg_data");reg_data.configure(parent,size,lab_pos,access,volatile,resetvalue,has_reset,is_rand,is_alone);endfunctionendclass 与上文提到的new函数的size参数不同,configure的...
首先从uvm_reg 派生一个invert 类: 1)new函数中,invert 的宽度作为参数传给super.new。不是有效宽度,而是这个寄存器总共的位数。 2)另一个参数是是否加入覆盖率的支持。这个不支持。 3)派生自uvm_reg的类都有一个build 函数。和build_phase不同,他不会自动执行,需要手工调用。都是在这里例化,之后调用data.con...
同uvm_reg派生的类一样,每一个由uvm_reg_block派生的类也要定义一个build函数,一般在此函数中实现所有寄存器的实例化。 一个uvm_reg_block中一定要对应一个uvm_reg_map,系统已经有一个声明好的default_map,只需要在build中将其实例化。这个实例化的过程并不是直接调用uvm_reg_map的new函数,而是通过调用uvm_re...
1.2.2. reg_block 建立完所有的reg类之后,需要建立一个reg_block类,将一组reg包含进对应的reg_block中。reg_block继承自uvm_reg_block。 class reg_block extends uvm_reg_block; 然后声明之前定义的reg类。 status_reg status; threshold_reg thres; 然后例化这些reg,同样例化在reg_block的new函数中。 functio...
这个DUT相当的简单,它只有一个寄存器version,要为其建造register model。首先要从uvm_reg派生一个通用的寄存器类: 在new函数中,要把这个寄存器的宽度作为参数传递给super.new函数。这里的宽度并不是说这个寄存器的有效宽度,而是说这个寄存器中总共的位数。如对于一个16位的寄存器,其中可能只使用了8位,那么这里要填写的...
1、通过在new函数时指定parent参数来形成树形结构。只有uvm_component派生的类,才有节点。 2、phase机制自动执行 build_phase的内容,一般有:利用config_db set/get传递参数;实例化成员变量。 build_phase是一个function,不消耗仿真时间;main_phase是一个task,消耗仿真时间 ...
然后就是每个类中都需要有的new()函数。这里的super.new()需要3个argument,第一个是string类的寄存器名称,第二个一般是表征寄存器大小的int数值,在本例中REG_CTRL为32-bits长,因此第二个argument为32。最后一个参数表示在这个寄存器上使用的功能覆盖率模型(functional coverage model)。
m_add_child函数用于添加子组件,该函数在new函数中被调用。此外,uvm_component内还包含一些查询children的方法,以遍历环境树结构。创建环境组件时,一般通过create的工厂方法,最终调用uvm_component的new函数完成树结构的连接。每个组件在树结构中的hierarchy路径由get_full_name函数获取。类似地,uvm_reg也...