【UVM源码】寄存器模型reg model

寄存器模型源码文件介绍

Register Layer 类继承关系

Register Layer

UVM寄存器层定义了几个基类,当对这些基类进行适当的扩展后,这些类对DUT中的寄存器和memory读取/写入操作进行了抽象化。

寄存器模型通常由block层次结构组成,这些blocks通常映射到设计的层次结构。blocks包含寄存器、register files和memories。

UVM register layer类不能按原样使用。它们只提供通用和自省功能。它们必须通过扩展进行定制化,以提供与设计中的实际寄存器和memories相对应的抽象视图。由于设计中有大量寄存器,并且正确配置UVM寄存器层类涉及许多小细节,因此这种定制化通常由模型生成器完成。模型生成器根据设计中寄存器和存储器的规范工作,因此能够提供最新的、按构造更正的寄存器模型。模型生成器不在UVM库的范围内(比如nManager工具)。

寄存器层模型的类图如下所示。
在这里插入图片描述

uvm_reg_block.svh 源代码文件

uvm_reg_block类

类的介绍:
block抽象基类
块表示设计层次结构。它可以包含寄存器、寄存器文件、内存和子块。
一个块有一个或多个地址映射,每个地址映射对应于块上的一个物理接口。
在这里插入图片描述
类的方法:

方法名方法简介
Initialization初始化
new创建新实例和特定于类型的配置
configure特定于实例的配置
create_map在此块中创建地址映射
check_data_width检查指定的数据宽度(以位为单位)是否小于或等于`UVM_REG_data_width的值
set_default_map定义默认地址映射
default_map默认地址映射
lock_model锁定模型并构建地址映射。
is_locked如果模型被锁定,则返回TRUE。

Introspection

方法名方法简介
get_name获取简单名称
get_full_name获取分层名称
get_parent获取父块
get_root_blocks获取所有根块
find_blocks查找层次名称与指定名称glob匹配的块。
find_block查找层次名称与指定名称glob匹配的第一个块。
get_blocks获取子块
get_maps获取地址映射
get_registers获取寄存器
get_fields获取字段
get_memories获取记忆
get_virtual_registers获取虚拟寄存器
get_virtual_fields获取虚拟字段
get_block_by_name查找具有指定简单名称的子块。
get_map_by_name查找具有指定简单名称的地址映射。
get_reg_by_name查找具有指定简单名称的寄存器。
get_field_by_name查找具有指定简单名称的字段。
get_mem_by_name查找具有指定简单名称的内存。
get_vreg_by_name查找具有指定简单名称的虚拟寄存器。
get_vfield_by_name查找具有指定简单名称的虚拟字段。

Coverage覆盖率

方法名方法简介
build_coverage检查是否必须构建所有指定的覆盖模型。
add_coverage指定可用的其他覆盖率模型。
has_coverage检查块是否具有覆盖模型
set_coverage打开覆盖测量。
get_coverage检查覆盖率测量是否打开。
sample功能覆盖测量方法
sample_values字段值的功能覆盖测量方法

Access

方法名方法简介
get_default_path默认访问路径
reset重置此块的镜像。
needs_update检查是否需要写入DUT寄存器
update寄存器的批量更新。
mirror更新镜像值
write_reg_by_name写入命名寄存器
read_reg_by_name读取命名寄存器
write_mem_by_name写入命名内存
read_mem_by_name读取命名内存

Backdoor后门

方法名方法简介
get_backdoor获取此块中所有寄存器的用户定义后门
set_backdoor为此块中的所有寄存器设置用户定义的后门
clear_hdl_path删除hdl路径
add_hdl_path添加hdl路径
has_hdl_path检查是否指定了hdl路径
get_hdl_path获取增量hdl路径
get_full_hdl_path获取完整的分层hdl路径
set_default_hdl_path设置默认设计抽象
get_default_hdl_path获取默认设计抽象
set_hdl_path_root指定根hdl路径
is_hdl_path_root检查此块是否有绝对路径

uvm_reg_map.svh 源代码文件

uvm_reg_transaction_order_policy类
类的介绍:
在这里插入图片描述
类的方法:
在这里插入图片描述
order()函数可以对单个uvmreg事务(读/写)生成的总线事务序列进行重新排序。当寄存器宽度与总线宽度不同,并且一个寄存器访问导致一系列总线事务时,可以使用这种方法。
队列的第一个item(0)将是第一个总线事务(最后一个item($)将是最后一个事务)。

uvm_reg_map类

类的介绍:
此类表示地址映射。地址映射是通过特定物理接口访问的寄存器和内存的集合。地址映射可以组成更高级的地址映射。
地址映射是使用uvm_reg_block::create_map()方法创建的。
在这里插入图片描述
类的方法:

方法名方法简介
backdoor返回后门伪映射单例
Initialization初始化
new创建新实例
configure特定于实例的配置
add_reg添加寄存器
add_mem添加内存
add_submap添加地址映射
set_sequencer设置与此映射关联的序列器和适配器。
set_submap_offset将给定子映射的偏移设置为偏移。
get_submap_offset返回给定子映射的偏移量。
set_base_addr设置此映射的基址。
reset重置此地址映射中所有寄存器的镜像。

Introspection

方法名方法简介
get_name获取简单名称
get_full_name获取分层名称
get_root_map获取外部可见的地址映射
get_parent获取父块
get_parent_map获取高级地址映射
get_base_addr获取此映射的基偏移地址。
get_n_bytes获取与此映射关联的总线的宽度(以字节为单位)。
get_addr_unit_bytes获取映射中最小可寻址单元的字节数。
get_base_addr获取与此映射关联的总线的端号。
get_sequencer获取与此映射关联的总线的序列器。
get_adapter获取与此映射关联的总线的总线适配器。
get_submaps获取地址子映射
get_registers获取寄存器
get_fields获取字段
get_memories获取记忆
get_virtual_registers获取虚拟寄存器
get_virtual_fields获取虚拟字段
get_physical_addresses将本地地址转换为外部地址
get_reg_by_offset获取在偏移量处映射的寄存器
get_mem_by_offset获取偏移处映射的内存

Bus Access总线访问

方法名方法简介
set_auto_predict为他的地图设置自动预测模式。
get_auto_predict获取此映射的自动预测模式设置。
set_check_on_read为他的地图及其所有子地图设置读取检查模式。
get_check_on_read获取此映射的读取模式检查设置。
do_bus_write执行总线写入操作。
do_bus_read执行总线读取操作。
do_write执行写入操作。
do_read执行读取操作。
set_transaction_order_policy设置事务顺序策略
get_transaction_order_policy设置事务顺序策略

uvm_reg_file.svh 源代码文件

uvm_reg_file类
类的介绍:
在这里插入图片描述
注册文件抽象基类
寄存器文件是用于创建规则重复结构的寄存器文件和寄存器的集合。
寄存器文件通常实例化为数组。

类的方法:
Initialization初始化
new创建新实例
configure配置注册文件实例
Introspection 反省
get_name获取简单名称
get_full_name获取分层名称
get_parent获取父块
get_regfile获取父注册文件
Backdoor后门
clear_hdl_path删除hdl路径
add_hdl_path添加hdl路径
has_hdl_path检查是否指定了hdl路径
get_hdl_path获取增量hdl路径
get_full_hdl_path获取完整的分层hdl路径
set_default_hdl_path设置默认设计抽象
get_default_hdl_path获取默认设计抽象

uvm_reg类

类的介绍:
在这里插入图片描述
regisiter抽象基类
寄存器表示可作为单个实体访问的一组字段。
一个寄存器可以映射到一个或多个地址映射,每个地址映射具有不同的访问权限和策略。
类的方法:
Initialization初始化
new创建新实例和特定于类型的配置
configure特定于实例的配置
set_offset修改寄存器的偏移量
Introspection 反省
get_name获取简单名称
get_full_name获取分层名称
get_parent获取父块
get_regfile获取父注册文件
get_n_maps返回映射此寄存器的地址映射数
is_in_map如果该寄存器位于指定的地址映射中,则返回1
get_maps返回映射此寄存器的所有地址映射
get_rights返回给定映射中该寄存器的可访问性(“RW”、“RO”或“WO”)。
get_n_bits返回此寄存器的宽度(以位为单位)。
get_n_bytes返回此寄存器的宽度(以字节为单位)。
get_max_size返回所有寄存器的最大宽度(以位为单位)。
get_fields返回此寄存器中的字段
get_field_by_name返回此寄存器中的命名字段
get_offset返回此寄存器的偏移量
get_address返回此寄存器的基本外部物理地址
get_addresses标识此寄存器的外部物理地址
Access通道
set设置此寄存器的所需值
get返回寄存器中字段的所需值。
get_mirrored_value返回寄存器中字段的镜像值。
needs_update如果任何字段需要更新,则返回1
reset 重置此寄存器的所需/镜像值。
get_reset获取此寄存器的指定重置值
has_reset检查寄存器中的任何字段是否具有指定重置类型的重置值。
set_reset指定或修改此寄存器的重置值
write 将指定值写入此寄存器
read 从该寄存器读取当前值
poke将指定值存入此寄存器
peek 从该寄存器读取当前值
update 更新设计中寄存器的内容,以匹配所需的值
mirror 读取寄存器并更新/检查其镜像值
predict更新此寄存器的镜像值和所需值。
is_busy如果当前正在读取或写入寄存器,则返回1。
Frontdoor前门
set_frontdoor为此寄存器设置用户定义的前门
get_frontdoor返回此寄存器的用户定义前门
Backdoor 后门
set_backdoor为此寄存器设置用户定义的后门
get_backdoor返回此寄存器的用户定义后门
clear_hdl_path删除hdl路径
add_hdl_path添加hdl路径
add_hdl_path_slice将指定的hdl切片附加到指定设计抽象的寄存器实例的hdl路径。
has_hdl_path检查是否指定了hdl路径
get_hdl_path获取增量hdl路径
get_hdl_path_kinds获取已定义hdl路径的设计抽象
get_full_hdl_path获取完整的分层hdl路径
backdoor_read用户定义后门读取权限
backdoor_write用户定义的后门读取权限
backdoor_read_func用户定义的后门读取权限
backdoor_watch用户定义DUT寄存器更改监视器
Coverage
include_coverage指定必须包含在各种块、寄存器或内存抽象类实例中的覆盖模型。
build_coverage检查是否必须构建所有指定的覆盖率模型。
add_coverage指定可用的其他覆盖率模型。
has_coverage检查寄存器是否有覆盖模型
set_coverage打开覆盖测量。
get_coverage检查覆盖率测量是否打开。
sample功能覆盖测量方法
sample_values字段值的功能覆盖测量方法
Callbacks 回调
pre_write在寄存器写入之前调用。
post_write在寄存器写入后调用。
pre_read在寄存器读取之前调用。
post_read在寄存器读取后调用。

uvm_reg_field类

类的介绍:
在这里插入图片描述
字段抽象类
字段表示一组作为单个实体一致运行的位。
一个字段包含在单个寄存器中,但根据地址映射使用寄存器的访问权限(因此字段),可能有不同的访问策略。
类的方法:
value 镜像字段值。
Initialization 初始化
new新建字段实例
configure特定于实例的配置
Introspection 反省
get_name获取简单名称
get_full_name获取分层名称
get_parent获取父注册
get_lsb_pos返回字段的位置
get_n_bits返回字段的宽度(以位为单位)。
get_max_size返回最大字段的宽度(以位为单位)。
set_access修改字段的访问策略
define_access定义新的访问策略值
get_access获取字段的访问策略
is_known_access检查访问策略是否为内置策略。
set_volatile将字段的volatile修改为指定值。
is_volatile指示字段值是否为volatile
Access 通道
set设置此字段的所需值
get返回字段的所需值
get_mirrored_value返回字段的镜像值
reset 重置此字段的所需/镜像值。
get_reset获取此字段的指定重置值
has_reset检查字段是否指定了重置值
set_reset指定或修改此字段的重置值
needs_update检查抽象模型是否包含不同的期望值和镜像值。
write在该字段中写入指定值
read 从该字段读取当前值
poke将指定值存入此字段
peek 从该字段读取当前值
mirror 读取字段并更新/检查其镜像值
set_compare在镜像更新期间设置比较策略。
get_compare返回此字段的比较策略。
is_indv_accessible检查此字段是否可以单独写入,即。
predict更新此字段的镜像值和所需值。
Callbacks回调
pre_write在字段写入之前调用。
post_write在字段写入后调用。
pre_read在字段读取之前调用。
post_read在字段读取后调用。

uvm_mem类

类的介绍:
memory抽象基类
memory是连续位置的集合。可以通过多个地址映射访问内存。
与寄存器不同,内存不会被镜像,因为数据空间可能很大:遍历整个内存空间的测试将抵消稀疏内存建模技术的任何好处。建议使用后门通道,而不是mirror。
在这里插入图片描述
类的方法:
Initialization初始化
new创建新实例和特定于类型的配置
configure特定于实例的配置
set_offset修改内存的偏移量
修改内存的偏移量将使抽象模型偏离用于创建它的规范。
mam内存分配管理器
Introspection 反省
get_name获取简单名称
get_full_name获取分层名称
get_parent获取父块
get_n_maps返回映射此内存的地址映射数
is_in_map如果该内存位于指定的地址映射中,则返回TRUE
get_maps返回映射此内存的所有地址映射
get_rights返回此内存的访问权限。
get_access通过地址映射写入和读取时返回内存的访问策略。
get_size返回此内存中唯一内存位置的数量。
get_n_bytes返回每个内存位置的宽度(字节数)
get_n_bits返回每个内存位置的宽度(以位为单位)
get_max_size返回所有内存的最大宽度(以位为单位)
get_virtual_registers返回此内存中的虚拟寄存器
get_virtual_fields返回内存中的虚拟字段
get_vreg_by_name查找指定的虚拟寄存器
get_vfield_by_name查找命名的虚拟字段
get_vreg_by_offset查找在指定偏移量处实现的虚拟寄存器
get_offset返回内存位置的基偏移量
get_address返回内存位置的基本外部物理地址
get_addresses标识内存位置的外部物理地址
HDL Access HDL接入
write将指定值写入内存位置
read 从内存位置读取当前值
burst_write将指定值写入内存位置
burst_read从内存位置读取值
poke将指定值存放在内存位置
peek从内存位置读取当前值
Frontdoor前门
set_frontdoor为此内存设置用户定义的前门
get_frontdoor返回此内存的用户定义前门
Backdoor 后门
set_backdoor为此内存设置用户定义的后门
get_backdoor返回此内存的用户定义后门
clear_hdl_path删除hdl路径
add_hdl_path添加hdl路径
add_hdl_path_slice将指定的hdl切片添加到指定设计抽象的hdl路径。
has_hdl_path检查是否指定了hdl路径
get_hdl_path获取增量hdl路径
get_full_hdl_path获取完整的分层hdl路径
get_hdl_path_kinds获取已定义hdl路径的设计抽象
backdoor_read用户定义后门读取权限
backdoor_write用户定义的后门读取权限
backdoor_read_func用户定义的后门读取权限
Callbacks回调
pre_write在内存写入之前调用。
post_write在内存写入后调用。
pre_read在内存读取之前调用。
post_read在内存读取后调用。
Coverage
build_coverage检查是否必须构建所有指定的覆盖模型。
add_coverage指定可用的其他覆盖率模型。
has_coverage检查内存是否有覆盖模型
set_coverage打开覆盖测量。
get_coverage检查覆盖率测量是否打开。
sample 功能覆盖测量方法

寄存器模型原理介绍

——待补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值