1.为7.1.1的DUT建立寄存器模型。只有一个寄存器invert。首先从uvm_reg 派生一个invert 类:
1)new函数中,invert 的宽度作为参数传给super.new。不是有效宽度,而是这个寄存器总共的位数。
2)另一个参数是是否加入覆盖率的支持。这个不支持。
3)派生自uvm_reg的类都有一个build 函数。和build_phase不同,他不会自动执行,需要手工调用。都是在这里例化,之后调用data.configure配置。意义如下:
4)第四个参数表示此字段的存取方式。UVM提供如下25种:
2.第一好寄存器后,需要在由reg_block 派生的类中将其例化:
1)每个由uvm_reg_block 派生的类也要定义一个build 函数,在其中实现所有寄存器的例化。
2)一个uvm_reg_block 对应一个uvm_reg_map,default_map系统已经声明,只需在build中例化,调用create_map。
第一个参数是名字。
第二个参数是基地址。
第三个是系统总线宽度,单位是byte。
第四个是大小端。
第五个是是否按照byte寻址。
3)例化invert 并调用invert.configure。指定后门访问时的路径。
第一个是此寄存器所在uvm_reg_block 的指针,这里是this。
第二个是reg_file的指针。
第三个是此寄存器后门路径。
4)需要受到build,将invert中的field 例化。
5)将此寄存器加入default_map中。uvm_reg_map 作用是存储所有寄存器地址,因此必须加入,否则无法前门操作。
第一个是要加入的寄存器。
第二个是寄存器地址。
第三个是存取方式。