Using Register Abstraction Layer Classes(二)--Block Types

本文详细介绍了在UVM中如何扩展`uvm_reg_block`来创建自定义的Block类型,包括类属性、约束、构造函数、`build()`方法的实现以及覆盖率模型的定义。Block类型需要包含寄存器、寄存器文件、内存和子Block,并在`build()`方法中实例化地址映射。同时,文章强调了约束应根据功能独立定义,并提供block级的覆盖率模型。
摘要由CSDN通过智能技术生成

转载请标明出处:
原文发布于:浅尝辄止,未尝不可的博客
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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值