【sequence进阶 config_db message_2024.03.14】

sequence进阶

sequence的仲裁

多个sequence发送给一个sequencer的情况,使用的两种方式:

class virtual_seqence extends uvm_sequence;
	virtual task body();
		sub_sequene seq_0;
		sub_sequene seq_1;
		
		//第一种方式
		p_sequencer.apb_mst_sqr.set_arbitration(SEQ_APB_STRICT_FIFO);
		fork
			`uvm_do_on_pri_with(seq_0,p_sequencer.apb_mst_sqr,100,{seq_0.addr==0;});
			`uvm_do_on_pri_with(seq_1,p_sequencer.apb_mst_sqr,200,{seq_1.addr==1;});
		join
		
		//第二种方式
		p_sequencer.apb_mst_sqr.set_arbitration(SEQ_APB_WEIGHTED);
		fork
			`uvm_do_on_pri_with(seq_0,p_sequencer.apb_mst_sqr,1,{seq_0.addr==0;});
			`uvm_do_on_pri_with(seq_1,p_sequencer.apb_mst_sqr,2,{seq_1.addr==1;});
		join
endclass	

lock & grab

允许sequence获得对sequencer的独占访问权
lock()和unlock():被插入sequencer仲裁队列的最后面
grab()和ungrab():直接被放入sequencer仲裁队列的最前面

response

应用:如AXI乱序操作则需要response
sequence需根据driver对transaction的反应决定接下来发送数据→在sequence中使用get_response,在driver中使用put_reponse
当只有put的情况而没有get情况下,队列中存满8个response时,会发出溢出错误提示
solution:用response_handler,调用函数use_response_handler(1),此值默认是0

sequence library

一个sequence可以加入多个不同的sequence library中;
可以有多个sequence加入同一个sequence library中。

layer sequence

注意端口连接问题
在这里插入图片描述

config_db

使用uvm_config_db配置机制来传递接口,可以将接口的传递与获取彻底分离开

//四个参数,前两个参数决定路径;第一个参数null等于uvm_root::get()
uvm_config_db#(type T)::get( uvm_component  cntxt, string inst_name, string field_name, T value )

uvm_config_db#(type T)::set( uvm_component  cntxt, string inst_name, string field_name, T value )

uvm_config_db#(type T)::exists(uvm_component  cntxt,string  inst_name,string   field_name,bit  spell_chk = )

uvm_config_db#(type T)::wait_modified( uvm_component  cntxt, string inst_name, string field_name)

配置接口

top_tb文件中set interface:
在这里插入图片描述
即可在driver中get该interface:
在这里插入图片描述
若为uvm_test_top.apb_env.* 则env下的component都能get到该interface
若为uvm_test_top.apb_env* 则env下的component,包括env都能get到该interface

配置sequence/ 配置参数

在这里插入图片描述

配置到object:config类

整合需要配置的变量,放置到一个uvm_object中,再使用其在验证环境中传递
在这里插入图片描述
定义test case,将该config实例化并传递给apb_env中所有的component:
在这里插入图片描述
driver中get该cfg,并做类型转化;输出得到config中的值:
在这里插入图片描述
在这里插入图片描述

create和new的区别:create可用factory机制,new不行

得到seqence路径的两种方法

component里的值传到object sequence里:
在这里插入图片描述

多重set/get发送覆盖规则:
	同层次set,后执行覆盖先执行
	非同层次set,高层次覆盖低层次

message

//某个component的冗余度阈值
get_report_verbosity_level()
set_report_verbosity_level()
//把env.i_agt及其下所有的component的冗余度阈值设置为UVM_HIGH
env.i_agt.set_report_verbosity_level_hier(UVM_HIGH);
`define uvm_info(ID,MSG,VERBOSITY)
typedef enum
{
	UVM_NONE=0,
	UVM_LOW=100,
	UVM_MEDIUM=200,//默认,小于等于阈值显示
	UVM_HIGH=300,
	UVM_FULL=400,
	UVM_DEBUG=500
}uvm_verbosity
`define uvm_warning(ID,MSG)
`define uvm_error(ID,MSG)
`define uvm_ fatal(ID,MSG)//会结束仿真

越关键的阈值越小
warning、error、fatal默认UVM_NONE
error和fatal区别:发现一个error继续仿真,fatal直接停止

设置uvm_error计数结束
	//退出阈值为5,0表示此值不可以被后面的设置语句重载
	<sim command>+UVM_MAX_QUIT_COUNT=5,0

message的实现(信息打印到log中)

在monitor中定义打印信息:
在这里插入图片描述
base_test中创建file,读取文件,action并将error放入err_result_file中:
在这里插入图片描述
err_result.log中显示:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】基于机器学习的分类算法对比实验

摘要 基于机器学习的分类算法对比实验 本论文旨在对常见的分类算法进行综合比较和评估&#xff0c;并探索它们在机器学习分类领域的应用。实验结果显示&#xff0c;随机森林模型在CIFAR-10数据集上的精确度为0.4654&#xff0c;CatBoost模型为0.4916&#xff0c;XGBoost模型为…

Android视角看鸿蒙第六课(module.json5中的各字段含义之pages)designWidth的用法

Android视角看鸿蒙第六课(module.json5中的各字段含义之pages&#xff09; 导读 前面几篇文章&#xff0c;我们陆续分析了entry->src->main下的module.json5中的各个字段的含义及作用。目前剩余pages和abilities两个字段&#xff0c;本篇文章一起来了解pages。 过程有错…

递归算法c++

主页:(*∇&#xff40;*) 咦,又好了~ xiaocr_blog 算法概述&#xff1a;递归算法是一种直接或者间接调用自身函数或者方法的算法。说简单了就是程序自身的调用。 算法实质&#xff1a;递归算法就是将原问题不断分解为规模缩小的子问题&#xff0c;然后递归调用方法来表示问题的…

[C语言]指针详解一、数组指针、二维数组传参、函数指针

一、数组指针 对一个数组&#xff0c;如果我们想要让一个指针指向这个数组&#xff0c;我们应该如何定义呢?我们知道一个数组定义本来就是一个指针&#xff0c;那为何要多定义一个数组指针呢?我们来看看下面这个代码就理解了 #include <stdio.h> int main() {int arr…

Docker与containerd:容器技术的双璧

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Docker幻想曲&#xff1a;从零开始&#xff0c;征服容器宇宙》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、前言 1、Docker和containerd的背景…

SpringBoot如何优雅实现远程调用

微服务之间的通信方式 常见的方式有两种&#xff1a; RPC——代表-dubbo HTTP——代表-SpringCloud 在SpringCloud中&#xff0c;默认是使用http来进行微服务的通信&#xff0c;最常用的实现形式有两种&#xff1a; RestTemplate Feign

深度学习_ResNet_5

ResNet学习目标 什么是ResNet为什么要引入ResNet&#xff1f;ResNet网络结构的特点利用ResNet完成图像分类 什么是ResNet&#xff1f; ResNet&#xff08;Residual Network&#xff09;是一种深度残差网络&#xff0c;由何凯明等人在2015年提出&#xff0c;是深度学习领域中一…

Gartner发布安全运营指南:迈向卓越安全运营的 5 项举措

顶级组织通常会实施一套通用的安全运营活动&#xff0c;以实现成熟&#xff0c;但是&#xff0c;他们在应对快速发展的威胁方面仍然面临挑战。安全和风险管理领导者可以利用这五项举措来加强他们的网络防御工作&#xff0c;同时促进安全投资的更大回报。 主要发现 旨在提升威胁…

【Java多线程】面试常考 —— JUC(java.util.concurrent) 的常见类

目录 1、JUC&#xff08;java.util.concurrent&#xff09; 1.1、Callable 接口 1.2、ReentrantLock 可重入锁 1.3、Semaphore 信号量 1.4、CountDownLatch 1、JUC&#xff08;java.util.concurrent&#xff09; 这是java中的一个包&#xff0c;存放着多线程编程中常见的…

电机学(笔记一)

磁极对数p&#xff1a; 直流电机的磁极对数是指电机定子的磁极对数&#xff0c;也等于电机电刷的对数。它与电机的转速和扭矩有直接关系。一般来说&#xff0c;极对数越多&#xff0c;电机转速越低&#xff0c;扭矩越大&#xff0c;适用于低速、高扭矩的场合&#xff1b;相反&…

MATLAB的使用(一)

一&#xff0c;MATLAB的编程特点 a,语法高度简化&#xff1b; b,脚本式解释型语言&#xff1b; c,针对矩阵的高性能运算&#xff1b; d,丰富的函数工具箱支持&#xff1b; e,通过matlab本体构建跨平台&#xff1b; 二&#xff0c;MATLAB的界面 工具栏:提供快捷操作编辑器…

HCIP的学习(2)

TCP----传输控制协议 是一种面向连接的可靠传输协议。 注&#xff1a;与我之前博客HCIA的学习&#xff08;2&#xff09;结合一起看 面向连接&#xff1a;数据传输前收发双方建立一条逻辑通路 特点&#xff1a; TCP是一种面向连接的传输协议每一条TCP连接有且只能存在两个端…

kafka2.x版本配置SSL进行加密和身份验证

背景&#xff1a;找了一圈资料&#xff0c;都是东讲讲西讲讲&#xff0c;最后我还没搞好&#xff0c;最终决定参考官网说明。 官网指导手册地址&#xff1a;Apache Kafka 先只看SSL安全机制方式。 Apache Kafka 允许客户端通过 SSL 进行连接。默认情况下&#xff0c;SSL 处于…

婴儿专用洗衣机哪个牌子比较好?热诚安利五大出类拔萃婴儿洗衣机

婴儿洗衣机可以用于单独清洗宝宝的衣物&#xff0c;可以有效避免了与大人衣物一起混洗带来的细菌交叉感染。毕竟&#xff0c;在婴儿吃奶或者接触其他材料时&#xff0c;其抵抗力是比较弱的&#xff0c;再加上普通洗衣机无法对婴儿的衣物进行有效的消毒处理&#xff0c;轻则会对…

SpringCache和redis区别?什么是SpringCache?

目录 一、Redis介绍1.1 Redis缓存1.2 redis缓存使用前提1.3 redis使用缓存的时机 二、实际操作案例2.1 常规准备工作2.2 引入配置redis2.2.1 引入redis的启动依赖2.2.2 在application.yml里面配置redis的地址信息等2.2.3 创建redisTemplate的配置类&#xff0c;指定键值序列化方…

探索区块链世界:从加密货币到去中心化应用

相信提到区块链&#xff0c;很多人会想到比特币这样的加密货币&#xff0c;但实际上&#xff0c;区块链技术远不止于此&#xff0c;它正在深刻地改变我们的生活和商业。 首先&#xff0c;让我们来简单了解一下什么是区块链。区块链是一种分布式数据库技术&#xff0c;它通过将…

Linux docker1--环境及docker安装

一、基础环境要求 Docker分为ce版本&#xff08;免费&#xff0c;试用7个月&#xff09;和ee版本&#xff08;收费&#xff09;。 最低配置要求&#xff1a;64位操作系统&#xff0c;centOS 7及以上&#xff0c;内核版本不低于3.10 二、部署docker 1、查看服务的基础环境是否满…

MVC接收请求教程

mvc接收各种请求 1-环境搭建 1.1-准备apifox发送请求 1.2-项目搭建 ①创建Web骨架的Maven项目 ​ --打开2023-IDEA &#xff0c;选择New Project ​ --选择Maven Archetype ​ --注意点&#xff1a;Catalog默认就行了 ​ --Archetype选择webapp ​ --JDK跟着黑马敲最好…

情感书单图片怎么制作?书单制作教程分享

情感书单图片怎么制作&#xff1f;情感书单图片制作是一项富有创意和挑战性的任务&#xff0c;它要求我们不仅要有对书籍的热爱&#xff0c;还要有一定的审美和设计能力。幸运的是&#xff0c;现在市面上有许多专业的软件可以帮助我们实现这一目标&#xff0c;让情感书单图片的…

好书推荐 《ARM汇编与逆向工程 蓝狐卷 基础知识》

《ARM 汇编与逆向工程 蓝狐卷 基础知识》 与传统的 CISC&#xff08;Complex Instruction Set Computer&#xff0c;复杂指令集计算机&#xff09;架构相比&#xff0c;Arm 架构的指令集更加简洁明了&#xff0c;指令执行效率更高&#xff0c;能够在更低的功耗下完成同样的计…