UVM重点归纳(快收藏 !)

factory机制

利用工厂机制的一般实现步骤:

1.继承

范式:

class comp_type/obj_type extends uvm_component/uvm_object;

实例:

class comp1/obj1 extends uvm_component/uvm_object;

2.注册

范式:

`uvm_component/object_utils(comp_type/obj_type);

实例:

`uvm_component/object_untils(comp1/obj1);

3.new函数声明

范式:

function new (string name=“comp1/obj1”,uvm_compinent parent=null(obj1无此项));

实例:

function new (string name=“comp1/obj1”,uvm_compinent parent=null(obj1无此项));

4.实例化

范式:

comp_type/obj_type 实例名

实例:

comp1 c1,c2;
obji o1,o2;

5.覆盖

范式:

类型覆盖:

orig_type::type_id::set_type_override(new_type::get_type());

实例覆盖:

orig_type::type_id::set_inst_override(neew_type::get_type(),“orig_inst_path”);

实例:

类型覆盖:

comp1::type_id::set_type_override(comp2::get_type());

实例覆盖:

obj1::type_id::set_type_override(obj2::get_type(),“”);

6.创建

范式:

comp_type::type_id::create(string name, uvm_component parent);
obj_type::type_id::create(string name);

实例:

c1=comp1::type_id::create(“c1”,null);
o1=obj1::type:🆔:create(“o1”);

一些细节:

1.在uvm中的创建一定使用以上范式,尽管使用new函数也可以实现,但是会使后边很多工厂自带的方法失效;

2.覆盖一定在创建之前;

3.特别注意覆盖中返回的句柄,有时需要根据实际情况进行cast转换;

1.2 uvm_coreservice_t 类

factory 机制并不是object类型也不是component 类型,它存在于uvm_coreservice_t类中;uvm_coreservice_t在仿真开始时例化(run 0 时刻),用户无需额为例化;另外以上关于工厂机制的覆盖,创建也可以通过直接使用factory的方法实现;

uvm_coreservice_t 主要包括:

  1. 唯一的uvm_factory,该组件用来注册,覆盖和例化;

2.全局的report_server,该组件用来做消息统筹和报告;

3.全局的tr_database,该组件用来用来记录transaction,便于后续调试;

4.get_root()方法用来返回当前uvm环境的结构顶层对象;

1.3 域的自动化

范式:

uvm_(object/component)_utils_begin(object_type/component_type) uvm_field_{int,enum,real,object,string,event,array_int}(ARG,FLAG);

ARG:表示成员变量;

FLAG:标记的数据操作(UVM_ALL_ON/ UVM_COPY);

`uvm_(object/component)_utils_end

实例:

uvm_component_utils_begin(com1)
uvm_field_int(volume,UVM_ALL_ON)
uvm_field_enum(color_t,color,UVM_ALL_ON) uvm_field_string(name,UVM_ALL_ON) `uvm_component_utils_end

域的自动化是uvm环境搭建中重要的一部分,可以减少验证人员的工作量,大大解放验证人员的双手。

phase 机制

phase机制,phase机制主要是使得UVM的运行仿真层次化,使得各种例化先后次序正确。SV 中可以通过构建函数来实现对象的例化,但是只通过new函数无法实现层次化;在UVM 中,phase机制的出现正好解决了这个问题,而且层次化的构建是在例化之前就已经确定的。

UVM 的 phase机制主要有9个,外加12个小phase。主要的 phase有 build phase、connect phase、run phase、report phase、final phase等,其中除了run phase是 task,其余都是function,然后build phase和 final phase都是自顶向下运行,其余都是自底向上运行。Run phase和12个小phase( reset phase、configure phase、main phase、shutdown phase)是并行运行的,有这12个小phase主要是进一步将run phase 中的事务划分到不同的phase进行,简化代码。

注意,run phase和 12个小phase最好不要同时使用。从运行上来看,9个phase顺序执行,不同组件中的同一个phase执行有顺序,build phase为自顶向下,只有同一个phase全部执行完毕才会执行下一个phase。

run_phase 和 main_phase 的区别:

run_phase和main phase(动态运行)都是task phase,且是并行运行的,后者称为动态运行(run-time)的phase。如果想执行一些耗费时间的代码,那么要在此phase下任意一个component中至少提起一次objection,这个结论只适用于12个run-time的phase。对于run_phase则不适用,由于run_phase与动态运行的phase是并行运行的,如果12个动态运行的phase有objection被提起,那么run_phase根本不需要raise_objection就可以自动执行。

phase机制时序图:

图片

UVM仿真的开始:

在顶层环境中调用全局函数run_test(),验证人员可以考虑在调用时传递test名称,也可以不传递,而选择在仿真时通过传递参数+UVM_TESTNAME=来选择test。

uvm_root:

run_test()的方法是由uvm_root提供的,uvm_root作为UVM唯一的顶层类,其继承于uvm_

component,注意在uvm环境中,顶层类有且只有一个。uvm_root的职责是通过创建组件是指定的parent来构成层次,如果parent设置为null,那么他将作为uvm_root 的子组件;调用其方法run_test()将进行如下的初始化:

1.得到正确的test_name;

2.初始化objection机制;

3.创建uvm_test_top实例;

4.调用phase中的控制方法,安排所有组件的执行顺序;

5.等待phase结束,关闭进程;

6.报告总结和结束仿真;

UVM仿真的结束:

结束当真的机制有且只有一种,就是利用objection挂起机制来控制仿真的结束;

run_phase 机制的挂起与落下objection:

raise_objection();

drop_objection();

set_drain_time():设置退出时间

注意:run开始后至少要有一个组件立即挂起objection,否则仿真将会立即退出。

建议:在sequence中使用objection机制,可以在body()的首尾部分挂起的落下objection.

岗位咨询→IC入行了解/资料获取

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

组件开发系列--Apache Commons Chain

一、前言 Commons-chain是apache commons中的一个子项目,主要被使用在"责任链"的场景中,struts中action的调用过程,就是使用了"chain"框架做支撑.如果你的项目中,也有基于此种场景的需求,可以考虑使用它. 在责任链模式里,很多对象由每一个对象对…

Python中运行取消Python console模式

在Python里run的时候突然会发现,进入的不是run模式,而是console模式,这种运行模式能保留你每次的运行历史,因为会重开一个运行小页面,关闭操作如下:

opencv-18 什么是色彩空间?

1.什么是色彩空间类型? 色彩空间类型,也称为颜色空间类型或色彩模型,是一种表示图像中颜色的方式。在计算机图形学和数字图像处理中,有许多种色彩空间类型,每种类型有不同的表达方式和特点。 常见的色彩空间类型包括&a…

虹科新闻 | 虹科与Berghof正式建立合作伙伴关系

近日,虹科与德国Berghof公司达成战略合作,虹科正式成为Berghof Automation在大中华区的认证授权代理商。未来,虹科将携手Berghof一同为机器制造商、系统集成商和工业设备制造商提供先进的解决方案,从而在最小的空间内实现最高的性…

STM32使用HAL库BH1750光照度传感器

开发环境 单片机:STM32F103C8T6 光照度传感器:BH1750 IDE:KEILSTM32CUBEMX 单片机配置 1、STM32CUBEMX BH1750代码 1、头文件 /* ************************************************* BH1750光照数据计算(LUX) …

React Flow

// 创建项目 npm create vitelatest my-react-flow-app -- --template react // 安装插件 npm install reactflow // 运行项目 npm run dev 1、App.jsx import { useCallback, useState } from react; import ReactFlow, {addEdge,ReactFlowProvider,MiniMap,Controls,useNode…

50条必背JAVA知识点(二)

16.强制类型转换:将容量大的数据类型转换为容量小的数据类型,但可能造成精度降低或溢出。 17.字符串不能直接转换为基本类型,但通过基本类型对应的包装类则可以实现把字符串转换成基本类型。 18.计算机底层都以二进制补码的方式来存储数据。…

图数据库Neo4j学习三——cypher语法总结

1MATCH 1.1作用 MATCH是Cypher查询语言中用于从图数据库中检索数据的关键字。它的作用是在图中查找满足指定条件的节点和边,并返回这些节点和边的属性信息。 在MATCH语句中,通过节点标签和边类型来限定查找范围,然后通过WHERE语句来筛选符合…

解决VScode下载太慢的问题记录

最近突然想重新下载vscoded便携免安装版,发现下载很慢,于是乎查询一下,以便记录 下载地址 VScode官方网站: https://code.visualstudio.com/ 根据个人的需求选择下载,页面加载下载需要等一会, 然后就会…

kotlin高阶函数

kotlin高阶函数 函数式API:一个函数的入参数为Lambda表达式的函数就是函数式api 例子: public inline fun <T> Iterable<T>.filter(predicate: (T) -> Boolean): List<T> {return filterTo(ArrayList<T>(), predicate) }上面这段函数: 首先这个函…

使用EM算法完成聚类任务

EM算法&#xff08;Expectation-Maximization Algorithm&#xff09;是一种基于迭代优化的聚类算法&#xff0c;用于在无监督的情况下将数据集分成几个不同的组或簇。EM算法是一种迭代算法&#xff0c;包含两个主要步骤&#xff1a;期望步骤&#xff08;E-step&#xff09;和最…

态势标绘专题介绍

介绍 这个专栏是专门针对基于Cesium来实现态势标绘的专题专栏,专栏主要实现了30余种态势几何形状的标绘和编辑、文本的标绘和编辑、图片的标绘和编辑以及简单模型的标绘,同时支持标绘结果的导出以及导入。包括最终编写成的一个完整的Vue3.2+TS+Cesium1.107.2的标绘组件。专栏…

Java JVM虚拟机内部体系结构

JVM(Java虚拟机)是一个抽象机器。 它是一个提供可以执行Java字节码的运行时环境的规范。JVM可用于许多硬件和软件平台(即JVM是平台相关的)。 什么是JVM&#xff1f; JVM(Java虚拟机)是&#xff1a; 指定Java虚拟机的工作的规范。 但实现提供程序是独立的选择算法。 其实现是由…

【Hive实战】Hive的压缩池与锁

文章目录 Hive的压缩池池的分配策略自动分配手动分配隐式分配 池的等待超时Labeled worker pools 标记的工作线程&#xff08;自定义线程池&#xff09;Default pool 默认池Worker allocation 工作线程的分配 锁Turn Off ConcurrencyDebuggingConfigurationhive.support.concur…

如何跳出Java中的多层嵌套循环?

在Java中&#xff0c;要跳出多层嵌套循环&#xff0c;可以使用带有标签的break语句。通过在外层循环前加上一个标签&#xff0c;然后在内层循环中使用break语句后跟标签名称&#xff0c;可以实现跳出多层循环的目的。 以下是使用标签和break语句跳出多层嵌套循环的示例代码&…

BUG:pm2启动verdaccio报错:Invalid or unexpected toke

输入命令&#xff1a; pm2 state verdaccio 问题描述&#xff1a; pm2 logs verdaccio报错翻译&#xff1a;数据格式错误 导致我呢提原因&#xff0c;没有找到运行文件&#xff0c; 发现问题&#xff1a;因为命令默认查找verdaccio是去系统盘查找。 解决方式 1&#xff1a;…

Hadoop_HDFS_常见的文件组织格式与压缩格式

参考资料 1. HDFS中的常用压缩算法及区别_大数据_王知无_InfoQ写作社区 2. orc格式和parquet格式对比-阿里云开发者社区 3.Hadoop 压缩格式 gzip/snappy/lzo/bzip2 比较与总结 | 海牛部落 高品质的 大数据技术社区 4. Hive中的文件存储格式TEXTFILE、SEQUENCEFILE、RCFILE…

【家庭公网IPv6】

家庭公网IPv6 这里有两个网站&#xff1a; 1、 IPV6版、多地Tcping、禁Ping版、tcp协议、tcping、端口延迟测试&#xff0c;在本机搭建好服务器后&#xff0c;可以用这个测试外网是否可以访问本机&#xff1b; 2、 IP查询ipw.cn&#xff0c;这个可以查询本机的网络是否IPv6访问…

Java面向对象 - 常用类——Object类

什么是Object类 Java中有一个比较特殊的类&#xff0c;就是 Object类&#xff0c;它是所有类的父类&#xff0c;如果一个类没有使用extends关键字明确标识继承另外一个类&#xff0c;那么这个类就默认继承 Object类。因此&#xff0c;Object 类是 Java 类层中的最高层类&#x…

c++11 标准模板(STL)(std::basic_filebuf)(七)

定义于头文件 <fstream> template< class CharT, class Traits std::char_traits<CharT> > class basic_filebuf : public std::basic_streambuf<CharT, Traits> std::basic_filebuf 是关联字符序列为文件的 std::basic_streambuf 。输入序…