文章目录

  • 1.与sequencer之间完成握手。
  • 2.与sequence之间完成握手。
  • 总结
    • PS:sequencer 的仲裁机制

1.与sequencer之间完成握手。

当 driver 使用 get_next_item( ) 得到一个 transaction 时,sequencer 同时也会保留一份这个刚刚发送出去的 transaction。当 driver 没有得到 transaction 的情况下,sequencer会将这个 transaction 重新再发送一遍给driver。

那么 sequencer 如何得知 driver 没有收到这个 transaction 呢?

  • 就是通过 item_done 的方式告诉 sequencer。当driver 再次调用 get_next_item 获取下一个 transaction 时,如果此时 sesequencer 知道 driver 调用了 item_done,那么 sequencer 就认为上一次事务 driver 接受到了。
  • 反之,如果 driver 再次调用 get_next_item时,sequencer 发现上一次的 item_done 没有被调用,则 sequencer 认为 driver 没有接收到,会将保留的 transaction 再发送一遍。

2.与sequence之间完成握手。

当 sequence 中的调用宏 uvm_do 等创建事务时,它并不会立即返回执行下一次 uvm_do,而是等待 driver 返回 item_done 信号之后,此时,uvm_do 才算执行完毕,返回后执行下一次 uvm_do,产生新的 transaction。

当然,我们拆解宏 uvm_do。当我们调用宏时,在sequence的body( )任务中产生 transaction 的步骤如下:

  • 创建 item :调用 create_item( bus_trans::get_type() , m_sequencer , “rsp” )函数,返回一个uvm_sequence_item类型的对象;
  • 发送 item :调用 start_item( ) 函数,等待获取 sequencer 的授权许可(注:这里涉及到 sequencer 的仲裁,文末有解释),由于是函数,会立即返回结果;
  • 随机化 item :在获取到 sequencer 的授权后,对 item 做随机化;
  • 完成发送 item :随机化后,调用finish_item( )任务。但这是一个阻塞的任务,不会立即执行结束。需要等待 driver 的 item_done() 返回,才执行结束,完成握手;
class transaction extends uvm_sequence_item;rand int data;`uvm_object_utils_begin(transaction)`uvm_field_int(data,UVM_ALL_ON)`uvm_object_utils_end
endclassclass my_sequence extends uvm_sequence;`uvm_object_utils(my_sequence)...task body();uvm_sequence_item item;transaction req rsp;item = create_item(transaction::get_type(),m_sequencer,"req");void'($cast(req,item));start_item(req);req.randomize with{data == 1;}finish_item();endtask
endclass

总结

不难看出,item_done 完成了与 sequencer 和 sequence 之间的握手,以此提高了数据传输的可靠性。

  • 第一,与 sequencer 之间的握手,防止数据传输出错而丢包;
  • 第二,与 sequence 之间完成握手,告诉 sequence 可以结束上一次的 transaction ,开始产生下一个新事务。

PS:sequencer 的仲裁机制

这里还是想补充一下关于 sequencer 的仲裁机制,方便阅读。如下:
sequence 在向 sequencer 发送 transaction 之前,需要先向 sequencer 发送一个请求,sequencer 把这个请求放在一个仲裁队列中。

  • 如果仲裁队列中有发送请求,但是 driver 没有申请 transaction,那么 sequencer 将会一直处于等待 driver 的状态,直到 driver 申请新的transaction。此时,sequencer 同意 sequence 的发送请求,sequence 在得到 sequencer 的批准后,产生一个 transaction 并交给 sequencer,sequencer 把这个 transaction 交给 driver。
  • 如果仲裁队列中没有请求,但是 driver 向 sequencer 申请一个新的 transaction,那么 sequencer 将会处于等待sequence 的状态,一直到有 sequence 递交申请。此时,sequencer会马上同意这个请求,sequence 产生 transaction 并交给 sequencer,最终 driver 获得这个 transaction 。

UVM中item_done的作用?相关推荐

  1. UVM中Objection的作用

    objection机制用来控制验证平台的关闭.phase和objection与UVM验证平台息息相关,phase恰如铁轨,让UVM这趟列车在铁轨上向前运行,不会脱轨,不会跳过某一段而直接到达后一段,o ...

  2. UVM实战 卷I学习笔记10——UVM中的寄存器模型(3)

    目录 后门访问与前门访问 *UVM中前门访问的实现 后门访问操作的定义 *使用interface进行后门访问操作 UVM中后门访问操作的实现:DPI+VPI *UVM中后门访问操作接口 后门访问与前门 ...

  3. UVM中的sequence

    sequence基础 1. 如果将激励放在driver的main_phase中,是可行的,但是如果要对激励作修改,那么扩展性较差,所以我们将激励改为放在sequence中去写. driver就负责驱动 ...

  4. 《UVM实战》学习笔记——第四章 UVM中的TLM1.0通信

    文章目录 前言 一.TLM1.0 1.TLM的定义 2.数据流:数据流动的方向 3.控制流:动作发起者initiator.动作接收者target 4.各种端口的连接 5.transport 6.non ...

  5. 理解UVM中的virtual sequencer和virtual sequence

    这周看了Cliff的文章<Using UVM Virtual Sequencers & Virtual Sequences>,本文相当于是一个阅读记录. 一.什么时候需要virtu ...

  6. VMware虚拟机文件夹中各文件作用详解

    VMware虚拟机文件夹中各文件作用详解 虚拟机的文件管理由VMware Workstation来执行. 一个虚拟机一般以一系列文件的形式储存在宿主机中, 这些文件一般在由workstation为虚拟 ...

  7. Science:亚硝酸盐氧化细菌在黑暗海洋中的主要作用

    文章目录 亚硝酸盐氧化细菌在黑暗海洋中的主要作用 写在前面 摘要 热心肠日报 背景 结果 图1 非全长16S rRNA基因序列的系统发育树 图2 通过募集宏基因组片段的方法确定亚硝酸盐氧化细菌单扩增基 ...

  8. 丰度决定了细菌在复杂群落中的功能作用

    本文转载自"微生态笔记",已获授权 标题:Abundance determines the functional role of bacterial phylotypes in c ...

  9. tensorflow2.0中valid_data的作用是在训练的过程对对比训练数据与测试数据的准确率 损失率,便于判断模型的训练效果:是过拟合还是欠拟合(过拟合)

    tensorflow2.0中valid_data的作用是在训练的过程对对比训练数据与测试数据的准确率,便于判断模型的训练效果:是过拟合还是欠拟合 过拟合:训练数据的准确率较高而测试数据的准确率较低 欠 ...

最新文章

  1. 【EasyUI】Tree中自定义在节点前是否显示checkbox
  2. 深夜,学妹遇到了数据分析师生涯的第一个疑问
  3. linux-bzip2压缩
  4. django-自定义过滤器
  5. Java 老矣,尚能饭否?2020 Java生态系统报告出炉
  6. Google是如何识别原创文章的,以及外链建设意见
  7. 神华集团与360共设清洁能源大数据安全技术研究中心
  8. .NET:OrderBy和ThenBy
  9. matlab 小波分析实例,小波分析MATLAB实例
  10. WordPress 网站基于REST API 开发“微信小程序”实战
  11. 分析Kettle性能测试过程中的STARTDATE时间问题
  12. 批量查询网站收录情况的站长工具
  13. Mybatis Plus快速入门
  14. 安装谷歌插件,程序包无效,解决方法
  15. python基础教程python详细教程
  16. 错过了落日余晖 还有满天繁星
  17. R语言-用R眼看琅琊榜小说的正确姿势
  18. springboot 优雅关闭_springboot优雅的关闭应用
  19. [论文素材]Previous Work----自动仇恨言论检测和冒犯性语言问题
  20. 第六十七章 方法关键字 - Language

热门文章

  1. 5个设计类宝藏网站分享
  2. 周期噪声频域滤除、散粒噪声中值滤波
  3. 机房重构(C#)--七层登录(一)
  4. hrbust 哈理工oj 1418 夏夜星空【带权并查集】
  5. 二手奢侈品,会是一门好生意吗?
  6. apache friends - xampp
  7. android 没有权限报错,android PowerManager 等权限问题
  8. 如何利用sugarnms快速实现网管软件定制开发?
  9. 【Katalon Studio】失败用例重跑
  10. linux基于GTX1080TI的NVIDIA GPU驱动安装、配置、测试