uvm_sequence_library 中添加sequence类型的两种方式

news2024/11/17 14:28:13

uvm_sequence_library是从uvm_sequence扩展而来的,它是一个容纳了一系列其它sequences类型的容器,在启动时,它会根据模式从这系列sequences中选择并执行它们。如果处于UVM_SEQ_LIB_RAND模式,它的select_rand属性将会随机并作为选择sequences的索引。如果处于UVM_SEQ_LIB_RANDC模式,它的selec_randc属性将会随机并作为索引。如果处于UVM_SEQ_LIB_ITEM模式,仅生成并执行REQ类型的sequence items。如果处于UVM_SEQ_LIB_USER模式时,select_sequence()方法用来获取下一个执行sequence的索引,用户可以在子类中overwrite这个方法来实现自定义的选择算法。

既然uvm_sequence_library是一系列sequences类型的集合,那么如何将sequences类型添加或注册到sequence library里呢?UVM提供两类方式:全局方式私有方式

1. 全局方式

全局方式添加到uvm_sequence_library的sequences类型会被该类的所有实例(instances)选择,也就是所有实例里都会注册了这些sequences类型。与这功能相关的函数和变量有:

变量或函数定义描述
static protected uvm_object_wrapper m_typewide_sequences[$]使用全局方式注册到sequence library的sequences类型都存放在这里,所有实例共享,在创建出sequence library实例时,会将m_typewide_sequences[$]的内容复制到sequences[$]队列里
static function void add_typewide_sequence( uvm_object_wrapper seq_type )将sequence类型注册到sequence library里,每次调用只能注册一个
static function void add_typewide_sequences( uvm_object_wrapper seq_types[$] )将多个sequences类型一次性注册到sequence library里

从上述变量和函数可以看出,UVM是利用systemverilog的static机制来实现全局注册方式,sequences类型必须在sequence library被创建之前都注册进去。需要注意的是,要用这种方式,在创建sequence library的子类时,必须需要在其声明中调用uvm_sequence_library_utils宏,并在其构造函数中调用init_sequence_library()方法。

另外,全局的注册方式也可以使用uvm_add_to_seq_lib(TYPE,LIBTYPE)宏来完成。

2. 私有方式

私有方式添加到uvm_sequence_library的sequences类型会被该类的每个实例(instances)独享,也就是每个实例注册的sequences类型互不影响。与这功能相关的函数和变量有:

变量或函数定义描述
protected uvm_object_wrapper sequences[$]使用私有方式注册到sequence library的sequences类型都直接放在这里,实例之间不共享,在构造函数调用时,也会把m_typewide_sequences[$]的内容复制到这个队列里,之后所有的sequence选择操作其实都是对sequences[$]队列进行的
function void add_sequence( uvm_object_wrapper seq_type )将sequence类型注册到sequence library里,每次调用只能注册一个
virtual function void add_sequences( uvm_object_wrapper seq_types[$] )将多个sequences类型一次性注册到sequence library里

从上述变量和函数可以看出,它们都不是static的,也就是必须要等sequence library创建出实例后,才能注册到实例里,因此每个实例注册的sequences类型可以互不影响了。

3. 总结

这两种方式都有自己的使用场景,如果想让所有sequence library的实例都有的sequence类型,那么使用全局方式会更方便点。如果想让sequence library的实例想有一些额外的sequence类型,那么私有方式是最好的选择。下图总结了注册的两种方式以及涉及到的相关变量和函数。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/934782.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

集合框架-(Collection/Map)

1.单列集合 1.1基础概要 集合中存储的是对象的地址信息,想要输出对象的信息,需要在具体的类中重写toString()方法 Collection代表单列集合,每个元素数据只包含一个值 List集合:添加的元素可以是有序、可…

时序预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机时间序列预测(多指标评价)

时序预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机时间序列预测(多指标评价) 目录 时序预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机时间序列预测(多指标评价)效果一览基本描述程序设计参考资料 效果一览 基本描述 MATLAB实现DBN-SVM深度置信网络结合支持向量机…

11. 盛最多水的容器(c++题解)

11. 盛最多水的容器(c题解) 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大…

【linux进程概念】

目录: 冯诺依曼体系结构操作系统进程 基本概念描述进程-PCBtask_struct-PCB的一种task_ struct内容分类组织进程查看进程 fork()函数 冯诺依曼体系结构 我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺…

[C++] STL_vector 迭代器失效问题

文章目录 1、前言2、情况一:底层空间改变的操作3、情况二:指定位置元素的删除操作4、g编译器对迭代器失效检测4.1 扩容4.2 erase删除任意位置(非尾删)4.3 erase尾删 5、总结 1、前言 **迭代器的主要作用就是让算法能够不用关心底…

【业务功能篇85】微服务-springcloud-Nginx-反向代理-网关

Nginx域名 1.hosts文件 在c:/window/system32/drivers/etc/hosts文件,我们在这个文件中添加 192.168.56.100 msb.mall.com注意如果是没有操作权限,那么点击该文件右击属性,去掉只读属性即可 通过这个域名访问到Nginx服务 2.Nginx的方向代…

[GDOUCTF 2023]EZ WEB

进入环境有一个点击标签,点击 后触发提示,flag就在附近 习惯性查看源码,得到路径提示 访问后,得到源码,源码中存在三个路由,前两个都是GET方式,已经访问过了,最后一个PUT是什么请求…

MQ-整体回顾

one 异步、解耦、削峰 two 深入理解核心编程模型及消息应用场景 主要通过多了QUEUE进行交换消息 虚拟机的消息是不能发到另外虚拟机的Queue上的 生产者创建connection建立连接通过connection声明channel信道通过channel声明队列声明好队列后发送消息消费者拿到connectio…

SketchBook软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 SketchBook是一款由Autodesk公司开发的绘画和绘图软件,它适用于各种操作系统和平台,如Windows、macOS、iOS和Android等。 SketchBook是一款专业的绘图软件,旨在满足各种绘画和绘图需求。它提…

无涯教程-聚类算法 - K-Means

K-均值聚类算法计算质心并进行迭代,直到找到最佳质心为止,它假定群集的数目是已知的,它也称为扁平聚类算法。通过算法从数据中识别出的簇数以K均值中的" K"表示。 在该算法中,将数据点分配给群集,以使数据点…

Linux page migration源码分析

目录 概述 __unmap_and_move函数 step1: Lock the page to be migrated step2: Insure that writeback is complete. step3: Lock the new page that we want to move to. step4: All the page table references to the page are converted to migration entries. st…

Python学习笔记:正则表达式、逻辑运算符、lamda、二叉树遍历规则、类的判断

1.正则表达式如何写? 序号实例说明1.匹配任何字符(除换行符以外)2\d等效于[0-9],匹配数字3\D等效于[^0-9],匹配非数字4\s等效于[\t\r\n\f],匹配空格字符5\S等效于[^\t\r\n\f],匹配非空格字符6\w等效于[A-Za-z0-9]&…

推荐系统峰会:图与推荐系统

文章目录 图机器学习在京东视频召回中的应用提纲背景图召回架构图业务特色图召回总结 图算法在蚂蚁集团营销推荐场景的应用目录背景基金推荐长尾推荐 图模型在百度推荐系统的实践与思考目录图背景介绍常用算法Feed流图模型演进历程 GNN跨域推荐在微信业务上的应用目录GNN跨域遇…

Linux操作系统--常用指令(文件权限操作类)

(1).文件属性 Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。 为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。在Linux中我们可以使用ll或者ls -l命令来显示一个文件的属性以及文件所属的用…

【Git】在idea中多分支开发如何——合并分支、处理冲突

博主简介:22级计算机科学与技术本科生一枚🌸博主主页:是瑶瑶子啦每日一言🌼: “人间总有一两风,填我十万八千梦” 目录 一、背景二、具体操作 一、背景 我当前开发的分支——hfy我想将subject分支的最新代码拉取&…

最新Nmap入门技术

点击星标,即时接收最新推文 本文选自《web安全攻防渗透测试实战指南(第2版)》 点击图片五折购书 Nmap详解 Nmap(Network Mapper,网络映射器)是一款开放源代码的网络探测和安全审核工具。它被设计用来快速扫…

如何卸载mysql?windows版

查看电脑是否安装过mysql: cmd输入:mysql -V 卸载第一步: 停止Mysql服务:winR 打开运行,输入 services.msc 点击"确定"调出系统服务。 这个进程名为安装MySQL的进程名,是可以更改的,默认为MySQL80 打开控制…

独家采访WizardLM团队,详解WizardCoder/Math超越GPT4/ChatGPT的RLEIF算法

最新消息! 在Meta AI发布Code Llama后仅两天的时间,WizardLM 团队基于该模型及其最新的对齐算法训练的WizardCoder-Python 34B V1.0在权威代码生成评测榜单HumanEval上即达到了惊人的 73.2% pass1分值,同时超越了Claude-2(71.2%&…

python-下载数据-制作全球地震散点图:JSON格式

查看JSON数据 import json# 探索数据的结构 filename eq_data_1_day_m1.geojson with open(filename) as f:all_eq_data json.load(f)readable_file readable_eq_data.json with open(readable_file, w) as f:json.dump(all_eq_data, f, indent4)json.load() 将数据转换为P…

ExpressLRS开源之接收机固件编译烧录步骤

ExpressLRS开源之接收机固件编译烧录步骤 1. 源由2. 编译步骤2.1 推荐源代码指定方案2.2 方法一:ELRS Configurator步骤一:下载ELRS Configurator工具步骤二:安装ELRS Configurator工具步骤三:使用ELRS Configurator工具进行配置步…