UVM driver和monitor中阻塞和非阻塞

news2024/11/26 8:52:24

为什么driver中使用non-blocking赋值,而monitor需要使用blocking赋值?
首先回顾一下 SystemVerilog 的 Scheduler 中的相关概念。

使用 blocking 或者 assign,在Active中更新左值,然后会触发新的评估事件,持续引发事件的评估。
使用 non-blocking 在 Active 中计算右值,在NBA中更新左值,左值的更新不会触发新的评估事件。

在使用 clocking 时进行 input 采样和 output 驱动,其中 input 如果没有任何显示的 skew 采样约束,它默认使用 #1 step; output 如果没有任何的驱动约束,它其实是加的 #0 ;

input 的几种 skew 约束:

#0: 在当前timeslot 的 Observed region 中采样
#1step: 在上一个timeslot 的postpone region 中采样,其实和当前 timeslot 中的 preponed region中采样的效果是相同的
#xps,#xns: 在时钟事件之前的特定时间采样
#x: 相对于上面的写法,它没有显示的单位,使用当前域的时钟单位,在时钟事件之前的特定时间采样

output的几种 skew 约束:

#0:在当前timeslot Re-NBA region驱动
#xps,#xns:在时钟事件之后的特定时间开始驱动
#x:相对于上面的写法,它没有显示的单位,使用当前域的时钟单位,在时钟事件之后的特定时间驱动,可以在波形上观测出来

所以 output 在 Re-NBA region 中驱动,它要求是 非阻塞赋值。对于 input 采样,它都是在特定的区域中采样,而且不会进行驱动,也就是只观测数据,并不会影响 scheduler 的重新返回,即不会引发新的评估事件,所以此时它是阻塞和非阻塞其实都可以采集到值。但是如果使用非阻塞赋值来采集数据,通常的做法是采集数据之后就发送给 scoreboard 或者其他的组件,那么可能在还没有采集完之前这个对象已经被发送给目标了,所以此时为了对方能够收到完整的值,我们一般都会使用阻塞赋值来采集 DUT 的信息。

此外我们看到在Re-NBA region 中驱动的信号,但是monitor 并不会采样到当前 timeslot 的最新值,除非在 Re-NBA region 中触发了新的 clocking event,所以 monitor 一般只会采样一次而且是当前 timeslot 中 driver 驱动前的旧值。

综合以上来看,将 driver 和 monitor 放在不同的 region 中进行,这样他们之间的顺序就是确定的。

以下是一个简单的demo:

driver 中驱动数据:

task run_phase( uvm_phase phase );
  int top_idx = 0;
 
  // Default conditions:
  ADPCM.frame <= 0;
  ADPCM.data <= 0;
  forever begin
    @(posedge ADPCM.clk);
     ADPCM.frame <= 1; // Start of frame
    for(int i = 0; i < 8; i++) begin // Send nibbles
      @(posedge ADPCM.clk);
      ADPCM.data <= req.data[3:0];
      req.data = req.data >> 4;
    end
 
    ADPCM.frame <= 0; // End of frame
    seq_item_port.item_done(); // Indicates that the sequence_item has been consumed
  end
endtask: run

monitor 中采集数据

task run_phase( uvm_phase phase );
    wb_txn txn, txn_clone;
    txn = wb_txn::type_id::create("txn");  // Create once and reuse
    forever @ (posedge m_v_wb_bus_if.clk)
      if(m_v_wb_bus_if.s_cyc) begin // Is there a valid wb cycle?
        txn.adr = m_v_wb_bus_if.s_addr; // get address
        txn.count = 1;  // set count to one read or write
  ...//You get the idea

drv 使用非阻塞赋值,会在 NBA region 中调度更新左值。monitor 中使用时钟事件触发,是在 Observed region 才会被触发,此时 DUT 中全部的阻塞和非阻塞都应该已经更新完毕,monitor 看到的就是最新值,此时它的采集是固定的,不需要使用非阻塞。 但是当前 timeslot 中driver 驱动的该数据对 monitor 是不可见。
clocking skew

另外一个问题是不同的clocking事件,下面是几种不同的写法,每种写法sv都会为他们生成不同的clocking event,虽然都是对时钟上升沿敏感,但是他们都有自己的clock event。

interface test(input clk);
  logic data;
  clocking dr_cb @(posedge clk);
    output data;
  endclocking
  clocking mon_cb @(posedge clk);
      input data;
  endclocking
endinterface

1. @(vif.drv_cb);
      vif.drv_cb.data <= 1'b0;
2. @(posedge vif.clk);
    vif.data <= 1'b0;
 
 3. @(vif.mon_cb);
     tr.data = vif.mon_cb.data;
 4. @(posedge vif.clk);
    tr.data = vif.data;
 5. @(posedge vif.clk);
    tr.data = vif.mon_cb.data;       //非法的

在上面列出的配对使用过程中前4种组合都是合法的,会有轻微的不同,但是第5个是非法的使用组合。虽然都是对时钟上升沿敏感,但是仿真过程中是会为每一种写法都创建一个clock event,第5中可能会出现clock event已经被调度到了,但是因为它是在 mon_cb clocking 中采样的,很可能会出现采样不到最新数据的情况。(很遗憾, 因为现在的EDA工具都是闭源的,我们并不能详细了解他们之间的区别,只能建议不能混合使用clocking。在SystemVerilog 2012 LRM 中14.13 “All clocking block inputs (input or inout) are sampled at the corresponding clocking event. When the same signal is an input to multiple clocking blocks, the semantics is straightforward; each
clocking block samples the corresponding signal with its own clocking event.”)

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

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

相关文章

centos7为例进行数据盘挂载详解

以centos7为例进行数据盘挂载的操作演示&#xff0c;挂载一个200G盘 1、切换至root用户 z 2、查看要挂载的硬盘 执行sfdisk -s 或 fdisk -l可以看到有一个200G。 sfdisk -s fdisk -l 需要挂载200G的这块硬盘。 3、执行lvs查看当前的lvm信息 4、执行pvcreate /dev/sdb创建…

【监督学习】基于合取子句进化算法(CCEA)和析取范式进化算法(DNFEA)解决分类问题(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

vue之elementui等表格单元格列合并

通用方法 <template><Table:columns"columns":data"tableData":loading"loading":span-method"handleSpan"></Table> </template> <script> export default {data(){return {mergeObj: {}, // 用来记录…

AI时代,当项目经理遇到ChatGPT,插上腾飞的翅膀!

文章目录 一、 ChatGPT 在项目管理中的应用1. 任务分配和跟踪2. 风险管理3. 沟通和协作 二、 ChatGPT 在项目管理中的优势1. 高效性2. 可靠性3. 灵活性 三、 ChatGPT 在项目管理中的应用场景1. 智能会议2. 智能文档3. 智能报告 结语AI时代项目经理成长之道&#xff1a;ChatGPT让…

Lazada、速卖通、亚马逊等跨境平台自养买家号测评的用处及解析

做跨境电商的卖家越来越多&#xff0c;也吸引了许多卖家入驻&#xff0c;拥有庞大的用户群体和出色的物流配送能力。接触过跨境电商的朋友就会知道&#xff0c;跨境电商的市场虽然说很好&#xff0c;但是&#xff0c;要想成功的开好一个店铺并没有那么容易。 在平台上经营一家…

线程池配置介绍

一、前言 我们收银台项目为了架构简单&#xff0c;一些异步化任务(如下单完成扣减库存、发送邮件等等)&#xff0c;没有使用MQ而是直接启动线程来做&#xff0c;但如果随意使用线程对系统性能反而会有影响&#xff0c;当线程数量大到一定的时候会耗尽CPU和内存资源&#xff0c…

配置中心比较Apollo与Nacos

1、Nacos Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集&#xff0c;帮助您实现动态服务发现、服务配置管理、服务及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构(例如微服…

【发布】Photoshop ICO 文件格式插件 3.0

备注&#xff1a;本文原文首发于博客园&#xff1a; https://www.cnblogs.com/hoodlum1980/p/17766287.html 【简介】 Photoshop ICO 插件是为 Photoshop 开发的功能扩展插件&#xff0c;使得 Photoshop 可以直接读写 ICO 格式文件。由于 Photoshop 具有强大的像素位图编辑功…

企业订货系统常见问题与解决方案|网站定制搭建|小程序APP开发

企业订货系统常见问题与解决方案|网站定制搭建|小程序APP开发 在企业经营中&#xff0c;订货系统是一个非常重要的工具&#xff0c;它可以帮助企业快速地获取客户需求&#xff0c;制定生产计划&#xff0c;提高供应链效率&#xff0c;帮助企业快速、准确地计算出所需物资的数量…

人声分离软件:iZotope RX 10 (WinMac) 中文汉化版

iZotope RX 10是一款在音频修复和增强领域中非常出色的软件。它提供了一套全面的音频问题解决方案&#xff0c;为后期制作专业人员、音频工程师和视频编辑者解决各种棘手问题。 iZotope RX 10的主要特点包括&#xff1a; 声音修复功能&#xff1a;可以去除不良噪音、杂音、吱吱…

“氛围感 真环绕”可拆卸自由观影新物种 ——索尼发布“积木音响”HT-AX7

2023年10月16日&#xff0c;索尼(中国)有限公司发布新款蓝牙音响——“积木音响”HT-AX7。该音响采用索尼360SSM技术(360空间声场映射技术&#xff0c;简称360SSM)和独特的可拆卸结构设计&#xff0c;在实现传统音响的功能基础上&#xff0c;进一步为用户提供了创新式可移动多场…

内容监管新纪元:探索TikTok AIGC的应用与挑战

在当今数字时代&#xff0c;社交媒体已成为人们分享生活、观点和创意的主要平台。而TikTok&#xff0c;作为短视频领域的领军者&#xff0c;一直在不断创新&#xff0c;以满足用户的需求。最近&#xff0c;TikTok引入了一项新功能&#xff0c;旨在标记由人工智能生成的内容&…

Qt实现三次样条Cardinal曲线

目录 1. 前言 2. 预备知识 3. 代码实现 1. 前言 在设计矢量图案的时候&#xff0c;我们常常需要用到曲线来表达物体造型&#xff0c;单纯用鼠标轨迹绘制显然是不足的。于是我们希望能够实现这样的方法&#xff1a;通过设计师手工选择控制点&#xff0c;再通过插值得到过控制…

全天在线的健康小助手,dido E55S Pro智能手表体验

如今只需要借助一块具有健康监测功能的智能手表&#xff0c;我们就可以轻松记录自己的日常健康数据&#xff0c;像是心率、血压和血氧等&#xff0c;通过每天规律性评估&#xff0c;我们可以及时发现身体的一些变化&#xff0c;排除一些潜在的健康隐患。最近我尝试了一款国产的…

three.js学习-智慧城市

前言 在前面基础知识&#xff08;摄像机&#xff0c;渲染器&#xff0c;轨道控制器&#xff0c;坐标轴&#xff0c;场景适配&#xff0c;渲染循环、几何体、材质、光等&#xff09;有了基础了解后&#xff0c;还需要对着色器&#xff08;坐标&#xff09;有一定的学习了解然后就…

关于Python爬虫就业与兼职方向

Python是一种强大的编程语言&#xff0c;可用于各种应用&#xff0c;如数据分析、机器学习、Web开发等。因此&#xff0c;越来越多的人开始学习Python&#xff0c;同时也有越来越多的Python引流兼职和就业机会出现。本文将探讨Python引流兼职和就业的情况。 Python引流兼职 P…

MacOS无法打开pkg,因为它来自身份不明的开发者。

解决方案&#xff1a; 低版本MacOS&#xff1a; 高版本MacOS&#xff1a;

源码分析RocketMQ之TransactionMQProducer-事物消息

Apache RocketMq 在4.3.0版本中已经支持分布式事物消息&#xff0c;采用了2PC的的思想实现提交事物消息&#xff0c;同时增加一个补偿逻辑来处理二阶段超时或者失败的消息。 一、事物消息生产者:TransactionMQProducer 发送事物消息 TransactionMQProducer#sendMessage…

手机通过WiFi连接调试UR机器人

1.测试物料 1.1ur机器人 https://item.taobao.com/item.htm?spma1z10.1-c.w4004-25069442759.18.2ff56d6bmuxX0Z&id740002623764 1.2 路由器&#xff08;TPLINK&#xff09; https://detail.tmall.com/item.htm?abbucket7&id548610924784&ns1&spma21n57.1.…