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

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

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

相关文章

SpringAI系列 - ToolCalling篇(二) - 如何设置应用侧工具参数ToolContext(有坑)

目录 一、引言二、集成ToolContext示例步骤1: 在`@Tool`标注的工具方法中集成`ToolConext`参数步骤2:`ChatClient`运行时动态设置`ToolContext`参数三、填坑一、引言 在使用AI大模型的工具调用机制时,工具参数都是由大模型解析用户输入上下文获取的,由大模型提供参数给本地…

【RabbitMQ业务幂等设计】RabbitMQ消息是幂等的吗?

在分布式系统中&#xff0c;RabbitMQ 自身不直接提供消息幂等性保障机制&#xff0c;但可通过业务逻辑设计和技术组合实现消息处理的幂等性。以下是 8 种核心实现方案及最佳实践&#xff1a; 一、消息唯一标识符 (Message Deduplication) 原理 每条消息携带全局唯一ID&#xff…

网络可靠性要求

目录 一、背景介绍 二、环路引发的危害 1、广播风暴 2、MAC 地址表震荡 三、STP生成树 1、STP的作用 2、STP工作过程 3、根桥选举 4、根端口选举 5、指定端口选举 6、BPDU报文分析 7、计时器 8、端口状态转化 总结 一、背景介绍 为了提高网络可靠性&#xff0c;交换网络…

《STL 六大组件之容器探秘:深入剖析 string》

目录 一、string 类简介二、string 类的常用接口1. 构造函数&#xff08;constructor function&#xff09;2. 与容量相关的接口&#xff08;capacity&#xff09;3. 与迭代器有关的接口&#xff08;iterator&#xff09;4. 与元素访问有关的接口&#xff08;element access&am…

Unreal5从入门到精通之在编辑器中更新 UserWidgets

前言 在虚幻中创建越来越复杂和灵活的 UserWidget 蓝图时,一个问题是它们在编辑器中的外观与它们在游戏中的最终外观可能有很大不同。 库存面板示例 假设你想创建一个通用的库存显示小部件。我们可以在整个 UI 中使用它,无论我们需要在哪里显示某些内容。 标题,描述所显示…

计算机网络-OSI七层参考模型与数据封装,网络安全零基础入门到精通实战教程!

目录 一、网络 1、网络的定义 2、网络的分类 3、网络的作用 4、网络的数据传输方式 5、网络的数据通讯方式 二、OSI七层参考模型 1、网络参考模型定义 2、分层的意义 3、分层与功能 4、TCP\IP五层模型 三、参考模型的协议 1、物理层 2、数据链路层 3、网络层 4…

Python正则替换终极指南:用re.sub玩转字符串魔法

Python正则替换终极指南&#xff1a;用re.sub玩转字符串魔法 一、为什么re.sub是文本处理的瑞士军刀&#xff1f; 在Python的re模块中&#xff0c;re.sub()的周下载量突破5800万次&#xff08;2025年PyPI数据&#xff09;&#xff0c;它实现了&#xff1a; &#x1f4cd; 模…

gen_gauss_filter用于检测带方向的线条

目录 一、核心参数分析 1.1 方向覆盖范围 1.2 滤波器方向带宽 二、角度配置建议 三、参数选择依据 四、实施建议 五、模拟图测试(项目图档不好直接分享) 5.1 模拟图制作 5.2 检测伪代码 在Halcon中使用高斯滤波器检测多方向线条时,角度参数的选取需要综合考虑滤波…

C++17 中的 std::to_chars 和 std::from_chars:高效且安全的字符串转换工具

文章目录 1. 传统转换方法的局限性2. std::to_chars&#xff1a;数值到字符串的高效转换函数原型&#xff1a;返回值&#xff1a;示例代码&#xff1a;输出&#xff1a; 3. std::from_chars&#xff1a;字符串到数值的高效解析函数原型&#xff1a;返回值&#xff1a;示例代码&…

深入学习解析:183页可编辑PPT华为市场营销MPR+LTC流程规划方案

华为终端正面临销售模式转型的关键时刻&#xff0c;旨在通过构建MPRLTC项目&#xff0c;以规避对运营商定制的过度依赖&#xff0c;并探索新的增长路径。项目核心在于建设一套全新的销售流程与IT系统&#xff0c;支撑双品牌及自有品牌的战略发展。 项目总体方案聚焦于四大关键议…

Python正则表达式处理中日韩字符过滤全解析

Python正则表达式处理中日韩字符过滤全解析 一、核心原理&#xff1a;Unicode字符范围定位 中日韩字符在Unicode中的分布&#xff1a; 中文&#xff1a;\u4e00-\u9fff&#xff08;基本区&#xff09; \u3400-\u4dbf&#xff08;扩展A区&#xff09; \U00020000-\U0002a6df…

基于WOA鲸鱼优化的WSN网络最优节点部署算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 鲸鱼优化算法&#xff08;WOA&#xff09;是一种模拟座头鲸捕食行为的元启发式优化算法。其主要原理基于座头鲸独特的 “气泡网” 捕食策略&#xff0c;通过数学模…

【数据分析】3 数据分析成长之路

职业发展路径&#xff1a; 向上发展&#xff08;技术方向&#xff09;&#xff1a;可以详细说明成为数据科学家或专家所需的具体技能和步骤&#xff0c;包括学习的算法、工具等。向下发展&#xff08;业务方向&#xff09;&#xff1a;可以探讨结合业务知识的具体领域&#xff…

excel导入Mysql中时间格式异常

问题描述&#xff1a; 当使用xls/xlsx/csv导入mysql中&#xff0c;如果列是时间类型比如excel表中显示2024/02/20 09:18:00&#xff0c;导入后时间可能就会变成1900-01-01 09:18:00这样。 问题原因&#xff1a; 这是由于excel表中和数据库中的时间类型不匹配导致。 问题解决…

async checkpointing

Reducing Model Checkpointing Times by Over 10x with PyTorch Distributed Asynchronous Checkpointing | PyTorch 最初来源&#xff1a;IBM Research 核心思想&#xff1a;GPU->CPU&#xff0c;用的是blocking&#xff1b;CPU->Disk&#xff0c;用的是异步不阻塞训练…

Nginx稳定版最新1.26.2源码包安装【保姆级教学】

Nginx安装及配置 开源Nginx官网地址(https://nginx.org) Nginx源码包下载地址(https://nginx.org/en/download.html) Mainline version 主线版本 Stable version 稳定版本 Legacy versions 陈旧版本 下载Nginx源码文件 curl -O https://nginx.org/download/nginx-1.26.2.t…

在ubuntu上用Python的openpyxl模块操作Excel的案例

文章目录 安装模块读取Excel数据库取数匹配数据和更新Excel数据 在Ubuntu系统的环境下基本职能借助Python的openpyxl模块实现对Excel数据的操作。 安装模块 本次需要用到的模块需要提前安装(如果没有的话) pip3 install openpyxl pip3 install pymysql在操作前&#xff0c;需…

GeoHD - 一种用于智慧城市热点探测的Python工具箱

GeoHD - 一种用于智慧城市热点探测的Python工具箱 详细原理请参考&#xff1a;Yan, Y., Quan, W., Wang, H., 2024. A data‐driven adaptive geospatial hotspot detection approach in smart cities. Trans. GIS tgis.13137. 代码下载&#xff1a;下载 1. 简介 在城市数据…

16 中介者(Mediator)模式

中介者模式 1.1 分类 &#xff08;对象&#xff09;行为型 1.2 提出问题 实现一个机场的起飞管理系统&#xff0c;如果由驾驶员们讨论谁先飞&#xff0c;后果可能是灾难性的。 1.3 解决方案 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用&a…

最薄的机身,游最深的海

经济全球化的潮流&#xff0c;势不可挡。 “技术、通讯和全球化&#xff0c;正在消除传统的地理和经济边界&#xff0c;使竞争环境趋于平等。”《世界是平的》作者托马斯弗里德曼预言的"扁平化竞争"正加速演进。 在高端智能手机战场&#xff0c;一场由中国企业主导…