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

uvm白皮书练习_ch2_ch223_加入objection机制

UVM中通过objection机制来控制验证平台的关闭。
在每个phase中,UVM会检查是否有objection被提起(raise_ objection),如果有,那么等待这个objection被撤销(drop_objection)后停止仿真;如果没有,则马上结束当前phase。

目前将drop_objection语句当成是finish函数的替代者,只是在drop_objection语句之前必须先调用raise_objection语句,raise_objection和drop_ objection总是成对出现。

raise_objection语句必须在main_phase中第一个消耗仿真时间(所谓仿真时间,是指$time函数打印出的时间。与之相对的还有实际仿真中所消耗的CPU时间,通常说一个测试用例的运行时间即指CPU时间

如$display语句是不消耗仿真时间的,这些语句可以放在raise_objection之前,但是类似@(posedge top.clk)等语句是要消耗仿真时间的。

dut.sv

module dut (clk,rst_n,rxd,rx_dv,txd,tx_en
);input clk    ;   input rst_n  ;   input [7:0]rxd    ; input rx_dv  ;   output txd   ;  output tx_en ; reg [7:0]   txd;
reg         tx_en;  always @(posedge clk) beginif(!rst_n)begintxd     <=  8'h00;tx_en   <=  1'b0;endelse begintxd     <=  rxd;tx_en   <=  rx_dv;end
end
endmodule

TB

my_driver.sv

`ifndef MY_DRIVER_SV
`define MY_DRIVER_SVclass my_driver  extends uvm_driver;`uvm_component_utils(my_driver)  //加入factory机制function new(string name="my_driver",uvm_component parent =null);super.new(name,parent);endfunction //new()extern  virtual task main_phase(uvm_phase phase);//调用附近的代码
endclass //my_driver  extends uvm_drivertask my_driver::main_phase(uvm_phase phase);phase.raise_objection(this);//ch223加入objection机制top_tb.rxd      <= 8'b0;//初始值复位top_tb.rx_dv    <= 1'b0;while (!top_tb.rst_n) @(posedge top_tb.clk);//等个时钟for(int i =0;i<25;i++)begin@(posedge top_tb.clk);//等个时钟top_tb.rxd <= i[7:0];// top_tb.rxd <= $urand_range(0.255);top_tb.rx_dv    <= 1'b1;`uvm_info("my_driver","data is driver",UVM_LOW);end@(posedge top_tb.clk);top_tb.rx_dv    <=  1'b0;phase.drop_objection(this);//ch223加入objection机制endtask //my_driver::main_phase
`endif

top_tb.sv

`timescale 1ns/1ns
`include "uvm_macros.svh"import uvm_pkg::*;
`include "my_driver.sv"module top_tb ;
reg         clk     ;    //时钟
reg         rst_n   ;   //复位
reg [7:0]   rxd     ;   //接受数据
reg         rx_dv   ;   //接受数据
reg [7:0]   txd     ;   //发送数据
reg         tx_en   ;   //发送数据dut my_dut(
.clk   (clk  ),
.rst_n (rst_n),
.rxd   (rxd  ),
.rx_dv (rx_dv),
.txd   (txd  ),
.tx_en (tx_en)
);// initial begin
//     my_driver drv;
//     drv = new("drv",null);//传入数据
//     drv.main_phase(null);
//     $finish;
// end
initial beginrun_test("my_driver");
end
/*时钟模块*/
initial beginclk = 0;forever begin#100ns clk = ~clk;end
end
/*复位模块*/
initial beginrst_n = 1'b0;#1000;rst_n = 1'b1;
end/*fsdb*/
//initial begin
//    $fsdbDumpfile("verilog.fsdb");
//    $fsdbDumpvars(0);
//    $display("fsdbDumpfilrs is start at %d",$time);
//    // #1e7;
//    // $finish;
//end
endmodule

仿真结果

将发送激励改成了25次

fsdbDumpfilrs is start at                    0
UVM_INFO my_driver.sv(24) @ 13000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 15000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 17000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 19000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 21000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 23000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 25000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 27000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 29000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 31000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 33000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 35000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 37000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 39000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 41000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 43000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 45000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 47000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 49000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 51000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 53000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 55000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 57000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 59000: uvm_test_top [my_driver] data is driver
UVM_INFO my_driver.sv(24) @ 61000: uvm_test_top [my_driver] data is driver--- UVM Report Summary ---** Report counts by severity
UVM_INFO :   26
UVM_WARNING :    0
UVM_ERROR :    0
UVM_FATAL :    0
** Report counts by id
[RNTST]     1
[my_driver]    25

相关文章:

uvm白皮书练习_ch2_ch223_加入objection机制

UVM中通过objection机制来控制验证平台的关闭。 在每个phase中&#xff0c;UVM会检查是否有objection被提起&#xff08;raise_ objection&#xff09;&#xff0c;如果有&#xff0c;那么等待这个objection被撤销&#xff08;drop_objection&#xff09;后停止仿真&#xff1b…...

利用C++开发一个迷你的英文单词录入和测试小程序-增强功能

小玩具基本完成之后&#xff0c;在日常工作中&#xff0c;记录一些单词&#xff0c;然后定时再复习下&#xff0c;还真的有那么一点点用&#xff08;毕竟自己做的小玩具&#xff09;。 在使用过程中&#xff0c;遇到不认识的单词&#xff0c;总去翻译软件翻译&#xff0c;然后…...

kibana启动报错

1.响应 超过时间30000ms (1) docker rm elasticsearch #从docker中删除es docker rm kibana #从docker中删除kibana (2)重新安装启动es加大最大运行内存 :1024M docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \ -e "discovery.typesingle-node" \ -…...

排查内存泄露

1 通过Performance确认是否存在内存泄露 一个存在内存泄露的 DEMO 代码&#xff1a; App.vue <template><div><button click"myFn" style"width: 200px; height: 200px;"></button><home v-if"ishow"></hom…...

【LeetCode-简单题】501. 二叉搜索树中的众数

文章目录 题目方法一&#xff1a;暴力哈希方法二&#xff1a;利用二叉搜索树的特性&#xff08;递归双指针&#xff09; 题目 方法一&#xff1a;暴力哈希 这是针对于普通二叉树的解法 统计number出现次数 然后将次数最大的众数集 取出来 Map<Integer , Integer > map …...

MAC word 如何并列排列两张图片

系统&#xff1a;MAC os 参考博客 https://baijiahao.baidu.com/s?id1700824516945958911&wfrspider&forpc 步骤1 新建一个word文档和表格 修改表格属性 去掉自动重调尺寸以适应内容 插入图片 在表格的位置插入对应的图片如下 去除边框 最终结果如下...

PTA第三章作业题

文章目录 前言7-1 比较大小Ⅰ. 方法一 &#xff1a;直接判断法Ⅱ. 方法二&#xff1a;交换法 7-2 比较两个数的大小Ⅰ. 方法 &#xff1a;直接判断法 7-3 成绩等级Ⅰ. 方法 &#xff1a;直接判断法 7-4 打鱼晒网Ⅰ. 方法 &#xff1a;直接判断法 7-5 计算奖金Ⅰ. 方法 &#xf…...

vscode vue html 快捷键

css文件 选择多行 按下ctrl不放 按下鼠标滚轮不放&#xff08;鼠标中键&#xff09; 鼠标向下移动 同时修改多个相同的字符串 <style> .base-goods-item li {width: 304px;height: 404px;background-color: #eef9f4; } .base-goods-item li {display: block; } .base-…...

mysql锁相关的总结

1、参考文章 MySQL 主键索引在 RR 和 RC 隔离级别下的加锁情况总结_51CTO博客_mysql二级索引加锁 2、 show OPEN TABLES where In_use > 0; -- 类似rc的需求 show variables like innodb_locks_unsafe_for_binlog; SELECT * FROM INFORMATION_SCHEMA.INNODB_TRX; -- …...

计算机竞赛 深度学习乳腺癌分类

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度&#xff0c;召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…...

docker-compose搭建的mysql,如何定时备份数据

一、前言 使用docker-compose搭建的mysql中自带了mysqldump&#xff0c;所以在服务器上如何使用容器中的mysqldump命令是实现备份的原理&#xff0c;下面是主要实现的命令 docker exec -it mysql mysqldump -u root -p$mysql_password $database_name > $backup_file二、备…...

webpack:关于处理html文件的插件html-webpack-plugin、add-asset-html-webpack-plugin

简介 add-asset-html-webpack-plugin 将 JavaScript或CSS文件添加到由html-webpack-plugin插件生成的HTML中去。 html-webpack-plugin 默认配置会在出口目录中&#xff08;通过output.path选项配置&#xff09;生成一个index.html文件&#xff1b; 生成的index.html文件将会…...

如何两个不同的脚本文件之间传递参数

两个不同的Shell脚本之间如何访问传递的参数取决于它们是如何调用的。如果一个Shell脚本1调用另一个Shell脚本2并且想要将参数传递给被调用的脚本2&#xff0c;可以使用以下方法&#xff1a; 方法1&#xff1a;通过位置参数传递参数 这是一种常见的方法&#xff0c;其中一个脚…...

一篇文章彻底搞懂熵、信息熵、KL散度、交叉熵、Softmax和交叉熵损失函数

文章目录 一、熵和信息熵1.1 概念1.2 信息熵公式 二、KL散度和交叉熵2.1 KL散度(相对熵)2.2 交叉熵 三、Softmax和交叉熵损失函数3.1 Softmax3.2 交叉熵损失函数 一、熵和信息熵 1.1 概念 1. 熵是一个物理学概念&#xff0c;它表示一个系统的不确定性程度&#xff0c;或者说是…...

[架构之路-223]:数据管理能力成熟度评估模型DCMM简介

目录 一、背景 二、评估依据 三、评估内容 四、主要适用对象 五、能力等级 六、不同层次的文件&#xff1a; 一、背景 信息技术与经济社会的交汇融合引发了数据爆发式增长。数据蕴含着重要的价值&#xff0c;已成为国家基础性战略资源&#xff0c;正日益对全球生产、流通…...

十大排序算法的实现(C/C++)

以下是十大经典排序算法的简单 C 实现&#xff1a; 冒泡排序&#xff08;Bubble Sort&#xff09;&#xff1a; 思想&#xff1a;重复地遍历要排序的列表&#xff0c;比较相邻的两个元素&#xff0c;如果它们的顺序错误就交换它们。时间复杂度&#xff1a;最坏情况和平均情况…...

HTML+CSS综合案例一新闻详情

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>新闻详情</title><style>h1{text-align…...

【Spring Boot】实战:实现Session共享

🌿欢迎来到@衍生星球的CSDN博文🌿 🍁本文主要学习实现Session共享 🍁 🌱我是衍生星球,一个从事集成开发的打工人🌱 ⭐️喜欢的朋友可以关注一下🫰🫰🫰,下次更新不迷路⭐️💠作为一名热衷于分享知识的程序员,我乐于在CSDN上与广大开发者交流学习。 💠我…...

3、Elasticsearch功能使用

第4章 功能使用 4.1 Java API 操作 随着 Elasticsearch 8.x 新版本的到来&#xff0c;Type 的概念被废除&#xff0c;为了适应这种数据结构的改 变&#xff0c;Elasticsearch 官方从 7.15 版本开始建议使用新的 Elasticsearch Java Client。 4.1.1 增加依赖关系 <propertie…...

数据链路层协议

文章目录 数据链路层协议0. 数据链路层解决的问题1. 以太网协议(1) 认识以太网(2) 以太网帧格式<1> 两个核心问题 (3) 认识MAC地址(4) 局域网通信原理(5) MTU<1> 认识MTU<2> MTU对IP协议的影响<3> MTU对UDP协议的影响<4> MTU对TCP协议的影响<…...

千问3.5-9B模型切换指南:OpenClaw多模型动态调用

千问3.5-9B模型切换指南&#xff1a;OpenClaw多模型动态调用 1. 为什么需要多模型动态调用 上周我尝试用OpenClaw自动整理电脑里积压的300多份PDF文档时&#xff0c;遇到了一个有趣的现象&#xff1a;处理简单文件重命名任务时&#xff0c;轻量级模型响应飞快&#xff1b;但遇…...

从K8S配置到前端实现:用Vue3+Codemirror打造专业级YAML编辑器全流程

从K8S配置到前端实现&#xff1a;用Vue3Codemirror打造专业级YAML编辑器全流程 在云原生技术栈中&#xff0c;YAML文件如同空气般无处不在——从Kubernetes集群部署到CI/CD流水线配置&#xff0c;这种人类可读的数据序列化格式已成为基础设施即代码的核心载体。但当我们面对动辄…...

MIT-BEVFusion LiDAR Encoder 保姆级拆解:从点云到BEV特征图,手把手带你过一遍代码

MIT-BEVFusion LiDAR Encoder 深度解析&#xff1a;从点云到BEV特征图的完整实现路径 当自动驾驶系统需要理解周围环境时&#xff0c;LiDAR点云数据的高效处理成为关键挑战。MIT-BEVFusion框架中的LiDAR编码器模块&#xff0c;通过创新的稀疏卷积架构&#xff0c;将无序的三维点…...

别再死记硬背了!用C++手把手带你图解哈夫曼树构建全过程(附完整可运行代码)

从零开始&#xff1a;用C动态图解哈夫曼树构建与编码实现 哈夫曼树&#xff08;Huffman Tree&#xff09;是数据结构中一种经典的贪心算法应用&#xff0c;广泛用于数据压缩领域。对于初学者来说&#xff0c;理解其构建过程往往比单纯记忆代码更有价值。本文将用C结合动态图示的…...

告别GitHub下载卡顿:手把手教你配置Electron国内镜像(npmrc文件详解)

告别Electron下载困境&#xff1a;深度解析.npmrc配置与国内镜像实战指南 每次执行npm install electron时&#xff0c;看着进度条卡在node install.js阶段一动不动&#xff0c;或是突然蹦出RequestError: connect ETIMEDOUT的红色报错——这种体验对于国内开发者来说再熟悉不过…...

WPF项目实战视频《四》(主要为项目实战API设计)

30.WPF项目实战&#xff08;创建数据库&#xff09;31.WPF项目实战&#xff08;工作单元&#xff09;32.WPF项目实战&#xff08;待办事项接口&#xff09;33.WPF项目实战&#xff08;配置&#xff09;34.WPF项目实战&#xff08;备忘录接口&#xff09;35.WPF项目实战&#xf…...

esp-nimble-cpp:ESP32上轻量级BLE C++开发指南

1. 项目概述esp-nimble-cpp是专为 ESP32 平台设计的 C 封装库&#xff0c;其核心目标是为 Apache NimBLE BLE 协议栈提供面向对象、线程安全且资源高效的抽象层。该库并非简单封装&#xff0c;而是以工程实践为导向的深度重构&#xff1a;它在保持与 nkolban 经典cpp_utilsBLE …...

MusePublic助力Java开发者:SpringBoot集成指南

MusePublic助力Java开发者&#xff1a;SpringBoot集成指南 1. 为什么Java团队需要MusePublic能力 最近帮一家电商公司做推荐系统升级时&#xff0c;技术负责人跟我聊起一个现实问题&#xff1a;他们用传统协同过滤算法生成的商品推荐列表&#xff0c;点击率已经连续三个季度停…...

OpCore-Simplify:一键自动化黑苹果配置,让复杂技术变得简单

OpCore-Simplify&#xff1a;一键自动化黑苹果配置&#xff0c;让复杂技术变得简单 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify OpCore-Simplify是…...

向量化计算落地难?揭秘阿里/腾讯内部正在用的7个Java Vector API高危避坑场景

第一章&#xff1a;Java Vector API向量化计算落地的现实困境Java Vector API&#xff08;JEP 338、414、426、448&#xff09;虽在JDK 16起逐步成熟&#xff0c;但实际工程化部署仍面临多重结构性约束。其核心矛盾在于&#xff1a;API设计高度抽象&#xff0c;而底层硬件适配、…...