3.1 学习UVM中的uvm_component类分为几步?
文章目录
- 前言
- 一、定义
- 1.1 角色和功能:
- 1.2 与其他UVM类的区别:
- 1.3 主要属性和方法:
- 二、使用方法
- 2.1 定义和实例化:
- 2.2 生命周期管理:
- 2.3 组件间通信:
- 三、何时使用
- 3.1 使用场景
- 3.2 适用组件
- 3.3 与uvm_object的比较
- 四、具体示例
前言
联想到UVM的组件化思想,uvm_component作为基类,肯定承载着构建组件树和管理组件生命周期的重要职责。意识到uvm_component的树形结构和phase自动执行特性是其独特之处。
一些常用的方法,如get_full_name、get_parent等,这些方法在组件操作和调试中经常用到。
需要通过继承uvm_component来创建自定义组件,并在测试平台中实例化这些组件。同时,也考虑到uvm_component的生命周期管理,这涉及到UVM的各个phase,如build_phase、connect_phase等,
一、定义
1.1 角色和功能:
uvm_component是UVM中最基本的组件类,所有UVM组件都继承自该类。它提供了组件的基本功能,如层次化命名、工厂模式、配置机制等。uvm_component的主要功能包括:
- 形成UVM平台组件间的树形组织结构。
- 自动执行phase机制,使得组件能够在不同的phase中执行特定的任务。
1.2 与其他UVM类的区别:
uvm_component vs uvm_object:
-
生命周期:
- uvm_component具有静态生命周期,从仿真开始到结束一直存在。
- uvm_object具有动态生命周期,可以在仿真过程中创建和销毁。
-
层次结构:
- uvm_component具有层次化结构,可以包含子组件。
- uvm_object没有层次化结构。
-
用途:
- uvm_component用于表示验证环境中的静态组件(如Driver、Monitor等)。
- uvm_object用于表示动态对象(如Transaction、Sequence等)。
-
uvm_component派生自uvm_object,因此继承了uvm_object的特性,但又具有自己的特别属性。
-
uvm_component能够在new时指定parent参数,形成树形结构,而uvm_object没有这个特性。
-
uvm_component具有phase自动执行特点,而uvm_object没有。
1.3 主要属性和方法:
-
属性:
- name:组件的名称。
- parent:组件的父组件。
- type_id:组件的类型ID。
-
方法:
- new:创建一个新的组件实例。
- get_full_name:获取组件的全名。
- get_parent:获取组件的父组件。
- get_type_id:获取组件的类型ID。
- create:创建组件的实例。
- clone:克隆组件(不适用于uvm_component,因为新clone出来的类无法指定parent,但可以使用copy函数)。
二、使用方法
2.1 定义和实例化:
在UVM测试平台中,可以通过继承uvm_component来定义自定义组件。例如:
class my_component extends uvm_component;`uvm_component_utils(my_component)function new(string name, uvm_component parent);super.new(name, parent);endfunction// 其他方法和属性
endclass
在测试平台中实例化该组件:
my_component my_comp;
my_comp = my_component::type_id::create("my_comp", this);
2.2 生命周期管理:
- uvm_component的生命周期通过UVM的phase机制管理。主要的phase包括:
- build_phase:构建组件,实例化子组件。
- connect_phase:建立组件之间的连接。
- end_of_elaboration_phase:仿真开始前的准备工作。
- start_of_simulation_phase:仿真开始前的准备工作。
- run_phase:执行主要的仿真任务。
- extract_phase:提取仿真结果。
- check_phase:检查仿真结果。
- report_phase:生成仿真报告。
- final_phase:仿真结束后的清理工作。
2.3 组件间通信:
- uvm_component可以通过以下方式实现组件之间的通信:
- TLM(Transaction Level Modeling):通过TLM端口和出口进行通信。
- Analysis Port:用于将数据发送到其他组件。
- Analysis Export:用于接收其他组件发送的数据。
- Config DB:通过uvm_config_db进行配置信息的传递。
TLM(Transaction Level Modeling):使用uvm_analysis_port、uvm_blocking_put_port等端口实现组件之间的通信。
class my_driver extends uvm_component;uvm_blocking_put_port#(my_transaction) put_port;function new(string name, uvm_component parent);super.new(name, parent);put_port = new("put_port", this);endfunction
endclass
三、何时使用
3.1 使用场景
- 静态组件:用于表示验证环境中具有静态生命周期的组件,例如uvm_env、uvm_agent、uvm_driver等。
- 层次化结构:用于构建层次化的验证环境。
3.2 适用组件
- uvm_env:顶层环境。
- uvm_agent:代理,包含Driver、Monitor等。
- uvm_driver:驱动,用于驱动信号到DUT。
- uvm_monitor:监控,用于监控DUT的输出。
3.3 与uvm_object的比较
-
优势:
- 支持层次化结构。
- 具有静态生命周期,适合验证环境中的核心组件。
-
局限性:
- 不能动态创建和销毁。
- 不适合表示动态对象(如Transaction)。
四、具体示例
以下是一个完整的UVM测试平台示例,展示如何定义和使用uvm_component:
// 定义一个继承自uvm_component的自定义组件
class my_component extends uvm_component;`uvm_component_utils(my_component)function new(string name, uvm_component parent);super.new(name, parent);endfunctionvirtual function void build_phase(uvm_phase phase);super.build_phase(phase);$display("Building %s", get_full_name());endfunctionvirtual function void run_phase(uvm_phase phase);super.run_phase(phase);$display("Running %s", get_full_name());endfunction
endclass// 定义环境层
class my_env extends uvm_env;`uvm_component_utils(my_env)my_component my_comp;function new(string name, uvm_component parent);super.new(name, parent);endfunctionvirtual function void build_phase(uvm_phase phase);super.build_phase(phase);my_comp = my_component::type_id::create("my_comp", this);endfunction
endclass// 定义测试层
class my_test extends uvm_test;`uvm_component_utils(my_test)my_env env;function new(string name, uvm_component parent);super.new(name, parent);endfunctionvirtual function void build_phase(uvm_phase phase);super.build_phase(phase);env = my_env::type_id::create("env", this);endfunction
endclass// 主程序
module tb;initial beginrun_test("my_test");end
endmodule
运行结果:
Building my_test
Building my_test.env
Building my_test.env.my_comp
Running my_test
Running my_test.env
Running my_test.env.my_comp
实践建议
高效使用uvm_component:
- 层次化管理:利用uvm_component的层次化管理功能,构建清晰的组件树结构。
- Phase机制:合理利用各个phase,确保每个阶段的任务清晰明确。
- 组件间通信:使用TLM、Analysis Port和Config DB等机制,实现组件之间的高效通信。
常见错误和陷阱:
- 组件名称冲突:确保同一父组件下的子组件名称唯一。
- Phase顺序错误:确保各个phase的执行顺序正确,避免因phase顺序错误导致的仿真问题。
- 配置信息传递错误:使用uvm_config_db传递配置信息时,确保路径和类型正确。
相关文章:
3.1 学习UVM中的uvm_component类分为几步?
文章目录 前言一、定义1.1 角色和功能:1.2 与其他UVM类的区别:1.3 主要属性和方法: 二、使用方法2.1 定义和实例化:2.2 生命周期管理:2.3 组件间通信: 三、何时使用3.1 使用场景3.2 适用组件3.3 与uvm_obje…...
python:面向对象之魔法方法
概念:主要是提供一些特殊的功能。 1.__init__方法: 一.不带参数: python中类似__xx__() __init__():初始化对象class Car():def __init__(self):self.color blueself.type suvdef info(self):print(f车的颜色是:{self.color})p…...
postgresql 游标(cursor)的使用
概述 PostgreSQL游标可以封装查询并对其中每一行记录进行单独处理。当我们想对大量结果集进行分批处理时可以使用游标,因为一次性处理可能造成内存溢出。 另外我们可以定义函数返回游标类型变量,这是函数返回大数据集的有效方式,函数调用者…...
vivado 7 系列器件时钟
7 系列器件时钟 注释: 本章节以 Virtex -7 时钟源为例。 Virtex-6 的时钟资源与此类似。如果使用不同的架构,请参阅有关器件的 《时 钟资源指南》 [ 参照 40] 。 Virtex-6 和 Virtex-7 器件内含 32 个称为 BUFG 的全局时钟缓存。 BUFG 可满…...
Vue 3 部分新特性解析
1. 引言 Vue 3 引入了许多新特性和改进,使得开发更加高效和灵活。本文将深入探讨 Vue 3 的高阶部分,包括 Composition API、自定义指令、插件开发、状态管理和性能优化。 2. Composition API 2.1 引入 Composition API Composition API 是 Vue 3 中引…...
ubuntu24.04安装布置ros
最近换电脑布置机器人环境,下了24.04,但是网上的都不太合适,于是自己试着布置好了,留作有需要的人一起看看。 文章目录 目录 前言 一、确认 ROS 发行版名称 二、检查你的 Ubuntu 版本 三、安装正确的 ROS 发行版 四、对于Ubuntu24…...
数据结构与算法-链表
单向链表(带哨兵) public class SinglyLinkedList {private Node head new Node(Integer.MIN_VALUE, null); // 定义一个哨兵节点作为头部节点,避免对头节点进行特殊处理// 节点类,包含值和指向下一个节点的引用private static …...
【图片合并转换PDF】如何将每个文件夹下的图片转化成PDF并合并成一个文件?下面基于C++的方式教你实现
医院在为患者进行诊断和治疗过程中,会产生大量的医学影像图片,如 X 光片、CT 扫描图、MRI 图像等。这些图片通常会按照检查时间或者检查项目存放在不同的文件夹中。为了方便医生查阅和患者病历的长期保存,需要将每个患者文件夹下的图片合并成…...
协议-ACLLite-ffmpeg
是什么? FFmpeg是一个开源的多媒体处理工具包,它集成了多种功能,包括音视频的录制、转换和流式传输处理。FFmpeg由一系列的库和工具组成,其中最核心的是libavcodec和libavformat库。 libavcodec是一个领先的音频/视频编解码器库&…...
flask开发的网站,后端服务关闭后,可以找回之前的数据的吗
如果使用 Flask 开发的网页,后端服务关闭后,是否还能找回数据取决于数据的存储方式: 可能找回数据的情况: 数据库存储(MySQL、PostgreSQL、SQLite 等) 如果 Flask 连接的是持久化数据库,即使后…...
deepseek API开发简介
1、申请deepseek api key: https://platform.deepseek.com/api_keys创建API Key,并复制Key 2、安装python、pip,然后安装requests pip install requests3、.示例代码 import requests import json# DeepSeek API 地址 API_URL "ht…...
【AI】在Ubuntu中使用docker对DeepSeek的部署与使用
这篇文章前言是我基于部署好的deepseek-r1:8b模型跑出来的 关于部署DeepSeek的前言与介绍 在当今快速发展的技术环境中,有效地利用机器学习工具来解决问题变得越来越重要。今天,我将引入一个名为DeepSeek 的工具,它作为一种强大的搜索引擎&a…...
Baklib推进内容中台智能推荐系统的技术创新与执行方案
内容概要 在当前数字化快速发展的背景下,内容中台的智能化推荐系统显得尤为重要。通过技术创新,Baklib致力于提升平台的用户体验,实现精准的个性化推荐,满足多样化的用户需求。内容中台不仅能够高效管理和组织大量的信息与知识&a…...
MySQL8.0实现MHA高可用
一、简介 MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 功能。MHA 在监控到 master 节点故障时,会提升其中拥有最新数据的 slave 节点成为新的master 节点…...
ip地址是手机号地址还是手机地址
在数字化生活的浪潮中,IP地址、手机号和手机地址这三个概念如影随形,它们各自承载着网络世界的独特功能,却又因名称和功能的相似性而时常被混淆。尤其是“IP地址”这一术语,经常被错误地与手机号地址或手机地址划上等号。本文旨在…...
多光谱成像技术在华为Mate70系列的应用
华为Mate70系列搭载了光谱技术的产物——红枫原色摄像头,这是一款150万像素的多光谱摄像头。 相较于普通摄像头,它具有以下优势: 色彩还原度高:色彩还原准确度提升约 120%,能捕捉更多光谱信息,使拍摄照片色…...
21.2.6 字体和边框
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 通过设置Rang.Font对象的几个成员就可以修改字体,设置Range.Borders就可以修改边框样式。 【例 21.6】【项目ÿ…...
详解命令模式
引言 当遇到发送者和接受者之间不是直接连接关系,而是间接连接关系,即发送者和接受者之间需要解耦,我们通常需要命令模式。比如电灯和开关,开关设计时并不知道自己是控制电灯的,也可能控制排气扇、电力设备等等&#x…...
Debian 安装 Nextcloud 使用 MariaDB 数据库 + Caddy + PHP-FPM
前言 之前通过 docker在ubuntu上安装Nextcloud,但是现在我使用PVE安装Debian虚拟机,不想通过docker安装了。下面开始折腾。 安装过程 步骤 1:更新系统并安装必要的软件 sudo apt update && sudo apt upgrade -y sudo apt install…...
string 与 wstring 的字符编码
测试代码: #include<stdio.h> #include<stdlib.h> #include<windows.h> #include <locale.h> #include <string> #include <iostream>// 函数用于计算UTF-8字符串中的字符数 int utf8_strlen(const char* str) {int len = 0;for (; *s…...
golang 开启HTTP代理认证
内部网路不能直接访问外网接口,可以通过代理发送HTTP请求。 HTTP代理服务需要进行认证。 package cmdimport ("fmt""io/ioutil""log""net/http""net/url""strings" )// 推送CBC07功能 func main() {l…...
第九届华为ICT大赛实践赛中国总决赛举行通知及考试地址
经大赛组委会决定,第九届华为ICT大赛实践赛中国总决赛将于2025年3月8日-9日举行具体赛事安排如下,期待与您顶峰相见! 理论考试:线上答题,团队3名成员共同完成1套试题,统一提交一份答案【60分钟,20道试题(含判断、单选…...
FFmpeg 与 FFplay 参数详解:-f、-pix_fmt、-pixel_format 和 -video_size 的区别与用法
FFmpeg 与 FFplay 参数详解:-f、-pix_fmt、-pixel_format 和 -video_size 的区别与用法 在使用 FFmpeg 和 FFplay 进行视频处理和播放时,-f、-pix_fmt、-pixel_format 和 -video_size 是常用的参数。这些参数的作用和使用场景略有不同,理解它们的区别和用法对于正确处理和播…...
深入理解 C++17 std::is_swappable
文章目录 深入理解 C17 std::is_swappable引言std::is_swappable 概述std::is_swappable 的工作原理std::is_swappable 的变体注意事项结论 深入理解 C17 std::is_swappable 引言 在 C 编程中,交换两个对象的值是一个常见的操作。为了确保代码的通用性和安全性&am…...
直接插入排序
一:直接插入排序是什么。 二:如何实现直接插入排序 三:直接插入排序时间复杂度 一:直接插入排序它是排序得一种,其目的无非是将乱序通过排序排成有序的。 我们可以通过动画直观看什么是直接插入排序 这是我找的直接…...
基于可信数据空间的企业数据要素与流通体系建设(附ppt 下载)
近期,可信数据空间会议召开。大数据系统软件国家工程研究中心总工程师王晨发表了题为《基于可信数据空间的企业数据要素与流通体系建设》主旨演讲。 WeChat Subscription Account【智慧城市指北】,可搜索相关关键字“20250107”,可获取具体获…...
处理 this
this指向改变this this指向 构造函数和原型对象都指向 实例 改变this指向的三个方法: call()apply()bind() call() apply() 与call的区别就是call中参数任意,但是apply中参数必须是数组 bind()(最重要) 与…...
kafka服务端之日志存储
文章目录 日志布局日志索引日志清理日志删除基于时间基千日志大小基于日志起始偏移量 日志压缩总结 日志布局 Ka饮a 中的消息是以主题为基本单位进行归类的, 各个主题在逻辑 上相互独立。 每个主题又可以分为一个或多个分区, 分区的数量可以在主题创建的…...
【Apache Paimon】-- 15 -- 利用 paimon-flink-action 同步 postgresql 表数据
利用 Paimon Schema Evolution 核心特性同步变更的 postgresql 表结构和数据 1、背景信息 在Paimon 诞生以前,若 mysql/pg 等数据源的表结构发生变化时,我们有几种处理方式 (1)人工消息通知,然后手动同步到数据仓库中(2)使用 flink 消费 DDL binlog ,然后自动更新 Hi…...
正则表达式进阶(二)——零宽断言详解:\b \B \K \z \A
在正则表达式中,零宽断言是一种非常强大的工具,能够在不消费字符的情况下对匹配位置进行约束。除了环视(lookahead 和 lookbehind)以外,还有一些常用的零宽断言,它们用于处理边界、字符串的开头和结尾等特殊…...
java poi Excel 文件导入导出常见错误及解决方案
在使用 Apache POI 进行 Excel 文件的导入导出操作时,可能会遇到各种问题。以下是一些常见的错误及其解决方案: 一、文件格式相关问题 1. 文件格式不兼容 问题描述:尝试使用 HSSFWorkbook 读取 .xlsx 文件,或者使用 XSSFWorkbo…...
批量提取word表格数据到一个excel
新建一个excel到word同级目录altf11打开vba窗口并新建模块粘贴下方代码(修改一些必要参数)回到excel表格界面,altf8选择执行该宏注意要在信任中心开启运行vba宏 Sub 批量提取word表格数据到excel()Dim wdApp As Object, wdDoc As ObjectDim …...
快速建立私有化知识库(私有化训练DeepSeek,通过ollama方式)
简介 什么?!老是有人问你需求,不同版本的需求你记不清还得去扒拉过程文档、设计文档? 什么?!领导会询问功能使用情况、用户相关数据,你每次还得手动查询反馈? 什么?&…...
python 一句话打印行号
在C语言中,打印行号可以直接用预定义的宏__LINE__,打印当前行号,方便调试。 printf("%d", __LINE__); // C语言打印当前行号 python中没有这样的预定义宏。 但可以用这种方式,实现一句话打印行号: impor…...
设计模式-生产者消费者模型
阻塞队列: 在介绍生产消费者模型之前,我们先认识一下阻塞队列。 阻塞队列是一种支持阻塞操作的队列,常用于生产者消费者模型,它提供了线程安全的队列操作,并且在队列为空或满时,能够阻塞等待,…...
Kubernetes是什么?为什么它是云原生的基石
从“手工时代”到“自动化工厂” 想象一下,你正在经营一家工厂。在传统模式下,每个工人(服务器)需要手动组装产品(应用),效率低下且容易出错。而Kubernetes(k8s)就像一个…...
全国计算机等级考试(NCRE)四级计算机网络考试大纲(2025年版)
文章目录 基本要求1. 理解计算机网络的基本概念。2. 掌握局域网的基本工作原理。局域网(LAN)基本工作原理 3. 掌握TCP/IP及其相关协议。 TCP/IP协议及其相关协议1. TCP/IP协议的分层结构2. 主要协议详解(1)IP协议(2&am…...
扩展知识--缓存和分时复用cpu
在多核CPU中,缓存和分时复用CPU是两个重要的概念,它们分别涉及硬件架构和资源管理策略。以下将从缓存的层次结构、工作原理以及分时复用CPU的概念进行详细解释。 一、多核CPU中的缓存 缓存的定义与作用 缓存(Cache)是位于CPU与主…...
6.Centos7上部署flask+SQLAlchemy+python+达梦数据库
情况说明 前面已经介绍了window上使用pycharm工具开发项目时,window版的python连接达梦数据库需要的第三方包。 这篇文章讲述,centos7上的python版本连接达梦数据库需要的第三方包。 之前是在windows上安装达梦数据库的客户端,将驱动包安装到windows版本的python中。(开…...
如何将3DMAX中的3D文件转换为AutoCAD中的2D图形?
大家好,今天我们来探讨一下如何将3DMAX中的3D文件转换为AutoCAD中的2D图形。无论是出于设计交流、施工准备还是其他实际需求,这种转换在工程设计领域都是一项非常实用的技能。接下来,我将为大家详细介绍几种实现这一转换的方法,帮助大家轻松跨越3D与2D设计之间的鸿沟。让我…...
使用LLaMA Factory踩坑记录
前置条件:电脑显卡RTX 4080 问题:LLaMA-Factory在运行的时候,弹出未检测到CUDA的报错信息 结论:出现了以上的报错,主要可以归结于以下两个方面: 1、没有安装GPU版本的pytorch,下载的是CPU版本…...
四柱预测学
图表 后天八卦 十二地支不仅代表了时间,还代表了方位。具体来说: 子:代表正北方丑寅:合起来代表东北方卯:代表正东方辰巳:合起来代表东南方午:代表正南方未申:合起来代表西南方酉:代表正西方戌亥:合起来代表西北方四季-五行-六神…...
使用 JFreeChart 创建动态图表:从入门到实战
文章目录 前言一、JFreeChart 简介二、环境准备三、 创建第一个折线图四、自定义图表样式4.1 设置背景色4.2 设置折线颜色4.3 设置字体(解决中文乱码)4.4 设置横坐标的标签宽度和方向 五、导出图表六、实战:动态生成日报图表总结 前言 在数据…...
【自学笔记】文言一心的基础知识点总览-持续更新
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 文心一言知识点总览一、文心一言简介二、文心一言的核心功能三、文心一言的技术特点四、文心一言的应用场景五、文心一言的使用技巧六、文心一言的未来发展 总结 文…...
解锁AI语音魅力——yoyo鹿鸣在线语音合成器,让创意声音即刻绽放!
yoyo鹿鸣-在线语音合成 人工智能语音克隆生成,二次元~ AI工具 | AI探金 可以在AI探金社区来找我~ yoyo鹿鸣 - 在线语音生成器 需求人群: 有语音合成需求的用户。 使用场景示例: 合成yoyo鹿鸣语音 等等 产品特色&a…...
【无标题】堆
[TOC](优先级队列(堆)) 【本节目标】 1. 掌握堆的概念及实现 2. 掌握 PriorityQueue 的使用 # 1. 优先级队列 ## 1.1 概念 前面介绍过队列,**队列是一种先进先出(FIFO)的数据结构**,但有些情况下,**操作的数据可…...
【工具变量】上市公司企业绿色新闻数据(2013-2023年)
测算方式: 参考《中国工业经济》周泽将(2023)老师的做法,首先通过网络爬虫的方法检索并爬取上市公司相关新闻,并辅以人工检索补充校对;新闻文本清理,并通过公司相关性判定以及主题模型识别该新闻是否为上市公司环保主…...
【vue】高德地图AMap.Polyline动态更新画折线,逐步绘制
可以使用 setTimeout 或 setInterval 来逐个点绘制折线,确保每次添加新的点到 path 并更新 Polyline,如下所示: localPolyline(path) {console.log(逐点绘制 polyline...);let drawnPath []; // 用于存储当前绘制的点let index 0;let poly…...
Lecture8 | LPV VXGI SSAO SSDO
Review: Lecture 7 | Lecture 8 LPV (Light Propagation Volumes) Light Propagation Volumes(LPV)-孤岛惊魂CryEngine引进的技术 LPV做GI快|好 大体步骤: Step1.Generation of Radiance Point Set Scene Representation 生成辐射点集的场景表示:辐射…...
三种Excel文本连接方法!
大家好,我是小鱼。 在处理Excel表格数据时,有时需要对表格某些单元格中的文本进行连接组合。今天就跟大家分享3种Excel文本连接方法!学会后遇到Excel文本连接问题也不求人! 方法一、使用&符号连接 使用&符号连接文本的话…...