转载请标明出处:
原文发布于:浅尝辄止,未尝不可的博客
https://blog.csdn.net/qq_31019565
Using Register Abstraction Layer Classes(二)–Block Types
Block Types
block types 是需要 uvm_reg_block 扩展而来。一个单独的block type必须单独定义一个类。并且class 内必须包含 `uvm_object_utils
class my_blk_type extends uvm_reg_block;
`uvm_object_utils(my_blk_type)
endclass
block类型的实例需要用build()在其他的block或者verification Environment中创建实例。
class properties
block类型必须包含一个类属性,这个类属性是给它所容纳的address map 准备的。reg_map的属性不允许是随机类型,也不允许是数组类型。
class my_blk_type extends uvm_reg_block;
uvm_reg_map AHB;
uvm_reg_map WHS;
endclass
block必须包含它所容纳的所有的寄存器。
class my_blk_type extends uvm_reg_block;
rand my_r1_type R1;
rand my_r2_type R2[2];
endclass
block必须包含它所容纳的所有寄存器文件。
class my_blk_type extends uvm_reg_block;
rand my_rf1_type RF1;
rand my_rf2_type RF2[2];
endclass
block必须包含它所容纳的所有的memory
class my_blk_type extends uvm_reg_block;
my_mem1_type RAM1;
my_mem2_type RAM2[2];
endclass
block必须包含它所容纳的所有的block
class my_blk_type extends uvm_reg_block;
my_blk1_type BLK1;
my_blk2_type BLK2[2];
endclass
constraint
如果有constraint,不同的方面应该在不同的block中分开定义。这样可以达到可以分开关闭的效果。约束块的名称应该表示它的功能。约束应约束下级寄存器中字段的uvm_Reg_Fie