当前位置: 首页 > news >正文

uvm中的激励是如何发送出去的

在UVM中,Sequence生成的激励(Transaction)通过以下协作流程发送到Driver并最终驱动到DUT,其核心机制如下:

+---------------+       +---------------+       +------------+       +-----+
| Sequence      | →     | Sequencer     | →     | Driver     | →     | DUT |
+---------------+       +---------------+       +------------+       +-----+生成事务(Transaction)  管理事务队列与仲裁     拉取并处理事务       实际驱动信号

2. 激励发送的详细步骤

步骤1:Sequence生成事务
  • Sequence通过uvm_do宏或手动调用start_item/finish_item生成事务。

  • class my_sequence extends uvm_sequence #(my_transaction);task body();my_transaction tx;repeat(10) begintx = my_transaction::type_id::create("tx");start_item(tx);       // 请求发送权限assert(tx.randomize());// 随机化事务finish_item(tx);      // 将事务提交给Sequencerendendtask
    endclass

步骤2:Sequencer管理事务队列

 事务缓存finish_item()将事务放入Sequencer的请求队列。

 仲裁机制:Sequencer根据配置的仲裁算法(如优先级、公平性)选择下一个发送的事务。

  • Driver在run_phase中循环调用get_next_item从Sequencer获取事务。

步骤3:Driver拉取事务
  • Driver在run_phase中循环调用get_next_item从Sequencer获取事务。

  • class my_driver extends uvm_driver #(my_transaction);virtual task run_phase(uvm_phase phase);forever beginmy_transaction req;seq_item_port.get_next_item(req);  // 阻塞获取事务drive_to_dut(req);                // 驱动到DUTseq_item_port.item_done();        // 通知事务完成endendtask
    endclass

    get_next_item 的作用:

    •         功能:从Sequencer的请求队列中阻塞获取下一个事务

      • 关键行为

        • 阻塞等待:若Sequencer的队列为空,Driver会在此处挂起,直到Sequence产生新事务。

        • 获取事务对象:返回的requvm_sequence_item类型,通常需要转换为具体的Transaction类型。

  • item_done 的作用

  • 功能:通知Sequencer当前事务已处理完毕,允许Sequencer释放资源并继续后续操作。

  • 关键行为

    • 同步握手:解除Sequence中finish_item()的阻塞,使Sequence能继续发送下一个事务。

    • 可选响应传递:通过参数返回响应数据(如读操作结果)

  • Sequence与Driver的交互
+-------------------+       +-------------------+       +-------------------+
| Sequence          |       | Sequencer         |       | Driver            |
+-------------------+       +-------------------+       +-------------------+
| start_item(req)   | -->   | 将req放入队列      | <--   | get_next_item(req)|
|                   |       |                   |       |                   |
| finish_item(req)  | <--   | 等待item_done()   | --(阻塞)-+                 |
|                   |       |                   |       | 处理req并驱动DUT |
|                   |       |                   |       | item_done()       |
+-------------------+       +-------------------+       +-------------------+

 

 步骤4:事务完成确认

  • Driver调用item_done()通知Sequencer事务处理完毕,触发以下行为:

    • 释放Sequence阻塞:解除finish_item()的阻塞,允许Sequence继续发送下一个事务。

    • 响应传递(可选):若需要返回响应数据(如读取DUT结果),可通过item_done(rsp)传递。

3. 关键交互机制

(1) 阻塞握手协议
  • start_item():请求发送权限,若Sequencer未授权则阻塞。

  • finish_item():将事务提交到Sequencer队列,等待Driver处理完成(item_done)后解除阻塞。

(2) 事务生命周期
Sequence生成事务 → Sequencer缓存 → Driver拉取 → 驱动到DUT → 确认完成 → Sequence继续

4. 多Sequence并发场景

当多个Sequence同时向同一个Sequencer发送事务时:

  • Sequencer仲裁:通过set_arbitration方法设置仲裁策略(如UVM_SEQ_ARB_FIFOUVM_SEQ_ARB_PRIORITY)。

  • 优先级控制:可通过set_priority调整Sequence优先级。

5. 示例:完整交互流程

// 场景:一个Sequence发送3个事务
// ----------------------------
// Sequence代码
class test_sequence extends uvm_sequence #(my_transaction);task body();for (int i=0; i<3; i++) beginmy_transaction tx;tx = my_transaction::type_id::create("tx");start_item(tx);tx.data = i;finish_item(tx);  // 阻塞直到Driver调用item_done()endendtask
endclass// Driver代码
class my_driver extends uvm_driver #(my_transaction);task run_phase(uvm_phase phase);forever beginmy_transaction req;seq_item_port.get_next_item(req);  // 阻塞直到事务到达$display("Driving transaction: data=%0d", req.data);#10ns;  // 模拟驱动时序seq_item_port.item_done();         // 解除finish_item阻塞endendtask
endclass

相关文章:

uvm中的激励是如何发送出去的

在UVM中&#xff0c;Sequence生成的激励&#xff08;Transaction&#xff09;通过以下协作流程发送到Driver并最终驱动到DUT&#xff0c;其核心机制如下&#xff1a; --------------- --------------- ------------ ----- | Sequence | → | Seque…...

一只企鹅如何改变世界

一、历史的转折点:一只企鹅如何改变世界 1991年,芬兰大学生Linus Torvalds在邮件列表中写道:“我正在做一个自由的操作系统(只是爱好,不会像GNU那样庞大专业)”。这个后来被称为Linux内核的项目,与GNU项目的结合,点燃了开源运动的燎原之火。 关键演化: 1996年:Tux企…...

拦截器VS过滤器:Spring Boot中请求处理的艺术!

目录 一、拦截器&#xff08;Interceptor&#xff09;和过滤器&#xff08;Filter&#xff09;&#xff1a;都是“守门员”&#xff01;二、如何实现拦截器和过滤器&#xff1f;三、拦截器和过滤器的区别四、执行顺序五、真实的应用场景六、总结 &#x1f31f;如果喜欢作者的讲…...

C语言预处理学习笔记

1. 预处理器的功能 预处理器&#xff08;Preprocessor&#xff09;在编译C语言程序之前对源代码进行预处理。预处理指令以#号开头&#xff0c;主要包括文件包含、宏定义、条件编译等功能。 2. 文件包含 文件包含功能用于在一个文件中包含另一个文件的内容&#xff0c;通常用…...

LLM基础环境准备-云服务器

软件环境 腾讯云 操作系统&#xff1a; TencentOS Server 3.1 (TK4) Python: 3.9.0(使用 conda的虚拟python环境&#xff0c;可根据实际需要更换版本&#xff0c;当前使用的是3.9.0的版本) CUDA Version: 12.2&#xff08;腾讯云会自动安装&#xff09; Driver Version: 5…...

网络协议相关知识有哪些?

前言 网络协议的基础是OSI和TCP/IP模型,这两个模型是理解协议分层的关键。 正文(仅是个人理解,如有遗漏望海涵) 网络协议是网络中设备间通信的规则和标准,涉及数据传输、路由、错误控制等多个方面。以下是网络协议相关知识的系统梳理: 一、网络协议分层模型 1、OSI七…...

基于Llama 3.2-Vision的医学报告生成

记录运用大模型解决医学报告实例&#xff0c;仅介绍本地调用的情况。 前情提要 已安装 Python 显存不少于8G&#xff08;8G设备上测试成功&#xff0c;其他环境可以自行测试&#xff09;。 需要安装Ollama (Ollama 是一个允许在本地运行多模态模型的平台)。 方式1&#xff1…...

离线部署大模型:ollama+deepseek+open-webui

ollama 是一个开源的本地大语言模型运行框架&#xff0c;它提供了非常简单便捷的使用形式&#xff0c;让用户可以十分方便的在本地机器上部署和运行大型语言模型&#xff0c;从而实现免费离线的方式使用 LLM 能力&#xff0c;并确保私有数据的隐私和安全性。 1 ollama 安装 o…...

如何看nginx.conf文件?

是的&#xff0c;你的理解是对的&#xff01;在 Nginx 配置中&#xff0c;最内层的 location 确实是决定请求最终处理的“入口”。当请求进入 Nginx 时&#xff0c;Nginx 会根据请求的路径&#xff08;即 URL&#xff09;匹配 location 块&#xff0c;然后按照匹配的顺序逐层向…...

3月营销日历:开启春日盛宴,绽放生活魅力

关键营销节点∶惊蛰、女生节、妇女节、 植树节、315消费者权益日、春分 营销关键词 养生、女生魅力、感恩女性、环保、品质 01.重点关注品类 春季服饰&#xff1a;如轻薄外套、春装等&#xff0c;适合惊蛰后的市场需求&#xff1b; 美妆护肤&#xff1a;妇女节期间&#xf…...

pdf预览在vue项目中的使用兼容ie浏览器

一、下载pdf预览插件 链接: https://pan.baidu.com/s/1wuzay-saAfiqtS-efd-cvw?pwd6m78 提取码: 6m78 二、创建一个pdf文件夹&#xff0c;将下载下来的文件build和web文件夹复制到pdf文件夹下 三、项目中使用 (路径由两部分组成&#xff0c;第一部分是项目存放pdf插件的路径…...

Unity面板介绍_Project工程面板(23.1.1)

一、project(工程界面) 显示当前工程所有资源文件&#xff08;场景、脚本、音频、图片。。&#xff09; Assets资源文件、Library库文件、Project setting项目设置、Temp临时文件 二、面板大致...

使用Termux将安卓手机变成随身AI服务器(page assist连接)

通过以下方法在安卓手机上运行 Ollama 及大模型&#xff0c;无需 Root 权限&#xff0c;具体方案如下&#xff1a; 通过 Termux 模拟 Linux 环境运行 核心工具&#xff1a; 安装 &#xff08;安卓终端模拟器&#xff09;()]。借助 proot-distro 工具安装 Linux 发行版&#xf…...

MacOS安装Emacs

个人博客地址&#xff1a;MacOS安装Emacs | 一张假钞的真实世界 在MacOS X上可以使用Homebrew 安装Emacs&#xff1a; $ brew install emacs --with-cocoa 或者用MacPorts&#xff1a; $ sudo port install emacs-app OSX Emacs 网站提供了通用的二进制包。 前两种方法安装…...

OpenCV机器学习(10)训练数据的一个核心类cv::ml::TrainData

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::ml::TrainData 类是 OpenCV 机器学习模块中用于表示训练数据的一个核心类。它封装了样本数据、响应&#xff08;标签&#xff09;、样本权重…...

3.1 actor基本框架(c#的Akka.Actor模式)

1.最简单的一个框架 代码如下&#xff08;代码容易理解&#xff09;&#xff1a; using System; using Akka.Actor; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Security.Cryptography.X509Certi…...

Git使用[同一电脑多个账户ssh-key的管理]

同一电脑多个账户ssh-key的管理 现在遇到一个问题,我同一台电脑既要通过VPN访问内网的git也要访问对外释放的gitee,刚开始我直接把原来的SSH-key添加到内网的gitlab发现可以访问,但是后来再方位外网的gitee就出问题了,看来要换一种手段才行 本文引用&#xff1a;https://cloud…...

使用Python结合`stable-baselines3`库(包含PPO和TD3算法)以及`gym`库来实现分层强化学习的示例代码

以下是一个使用Python结合stable-baselines3库&#xff08;包含PPO和TD3算法&#xff09;以及gym库来实现分层强化学习的示例代码。该代码将环境中的动作元组分别提供给高层处理器PPO和低层处理器TD3进行训练&#xff0c;并实现单独训练和共同训练的功能。 代码实现 import g…...

【论文笔记】MambaGlue: Fast and Robust Local Feature Matching With Mamba

【引用格式】&#xff1a;Ryoo K, Lim H, Myung H. MambaGlue: Fast and Robust Local Feature Matching With Mamba[J]. arXiv preprint arXiv:2502.00462, 2025. 【网址】&#xff1a;https://arxiv.org/pdf/2502.00462 【开源代码】&#xff1a;https://github.com/uri-Ka…...

基于 Stanford CoreNLP 的中文自然语言处理

一、概述 Stanford CoreNLP 是斯坦福大学开发的一款强大的自然语言处理&#xff08;NLP&#xff09;工具&#xff0c;支持多种语言的文本处理&#xff0c;包括中文。本文将详细介绍如何使用 Stanford CoreNLP 实现中文文本的分词、词性标注、命名实体识别、句法分析等功能&…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist

现象&#xff1a; android studio报错&#xff1a; [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决&#xff1a; 不要动CMakeLists.…...