首页 > 其他分享 >p_sequencer的使用

p_sequencer的使用

时间:2023-07-15 14:24:08浏览次数:31  
标签:... sequence uvm sequencer 使用 trans my

为什么要有p_sequencer?

sequence是从uvm_object拓展而来,所以不能访问uvm_component组成的uvm层次结构的,不能通过组件层次调用访问成员变量(如,在env中访问driver的成员变量htrans,可以通过m_env.m_agt.m_drv.htrans来访问)。那sequence如何访问uvm_component的成员变量呢?通过媒介:sequencer

怎么用?

UVM提供了强大的内建宏`uvm_declare_p_sequencer(SEQUENCER)来解决这个问题。呈上代码:

class case0_sequence extends uvm_sequence #(my_transaction);
	my_trasaction m_trans;
	`uvm_object_utils(case0_squence)
	`uvm_declare_p_sequencer(my_sequencer) //使用宏定义my_sequencer
	...
	
	virtual task body();
		...
	repeat(10) 
		begin
		`uvm_do_with(m_trans,{m_trans.dmac==p_sequencer.dmac;
		                      m_trans.smac==p_sequencer.smac;})
		end
	...
endclass

UVM通过`uvm_declare_p_sequencer宏将p_sequencer定义为my_sequencer,将m_sequencer通过$cast转换为q_sequencer类型(即my_sequencer类型)。

class case0_sequence extends uvm_sequence #(my_transaction);
	my_trasaction m_trans;
	`uvm_object_utils(case0_squence)
	...
	
	virtual task body();
		my_sequencer p_sequencer;
		...
		$cast(p_sequencer,m_sequencer);
		...
	repeat(10) 
		begin
		`uvm_do_with(m_trans,{m_trans.dmac==p_sequencer.dmac;
		                      m_trans.smac==p_sequencer.smac;})
		end
	...
endclass

`uvm_declare_p_sequencer(my_sequencer)宏干了两件事:

-声明了一个sequencer类型的句柄p_sequencer

-将m_sequencer句柄通过$cast(p_sequencer,m_sequencer)转化为p_sequencer 类型的句柄。

标签:...,sequence,uvm,sequencer,使用,trans,my
From: https://www.cnblogs.com/skyaha/p/17556059.html

相关文章

  • Python使用Flask开发Web服务-裴-从0到1创建Flask程序
     static下面放一些静态文件图片、css等,templates下面放置模板编写好的html文件等; app.run() 通过app.route找到要运行的函数,函数中通过render_template将参数传递给HTML模板文件,HTML中将提取出的数据展示出来; ......
  • [转]Linux终端更改字体(一般用来针对高分辨率屏幕使用大字体)
    原文地址:Linux终端更改字体-知乎1概述这里的终端是指通过F1-F6/F2-F7进入的纯命令终端。修改字体可以通过setfont命令。2查看字体可以通过查找目录consolefonts来确定本地机器上的字体位于哪里:find/-nameconsolefonts-typedupdatedblocateconsolefonts比如......
  • php在开发网络游戏上的使用
    PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及PHP自创的语法。利于学习,使用广泛,主要适用于Web开发领域。很多小伙伴在初学PHP的时候,都可能会有这样的疑问,PHP能开发游......
  • vue3 为什么使用 hooks?
    目的为了解决在组件中共享逻辑和状态的问题。 hooks提供了一种更简洁和直观的方式来共享逻辑和状态。vue3中的hooks是基于函数的组件模型,通过在函数组件内部使用特定的hook函数来实现。每个hook函数都有特定的用途,例如:useState用于创建和管理状态,useEffect用于......
  • 使用docker部署chatgpt-on-wechat
    目标:能够调用chatgpt接口并回复微信proxy部署(海外服务器不需要此选项)下载、配置proxymkdir-p/data/clashcd/data/clashwgethttps://github.com/Dreamacro/clash/releases/download/v1.17.0/clash-linux-amd64-v1.17.0.gzgzip-dclash-linux-amd64-v1.17.0.gzchmoda+......
  • 函数strtok()的使用
    #include<string.h>#include<stdio.h>intmain(){charstr[50]="lidan,wangyang;zhangwei:shunbin?yifan'xinyue";char*p[7];inti=0;p[i]=strtok(str,",;?':");while(p[i]!=NULL){ i++; p......
  • 将gephi文件导入到networkx中使用
    最近基于Transbigdata库编写代码获取了某市轨道交通网络的邻接表及shp文件,并使用Gephi对轨道交通网络进行了可视化处理,之后想尝试一下把Gephi的成果快捷地转为networkx格式来计算各种指标,编写了一些代码,步骤如下:1.将gephi成果导出打开gephi文件后点击文件—输出—图表文件选择......
  • RxJs 里的 using operator 的使用场景介绍
    RxJS的using操作符是一种创建可观察对象的方法,它可以处理订阅开始时和结束时的资源分配。这使得using在处理需要清理的资源(如数据库连接、文件句柄或网络连接)时非常有用。using操作符创建一个可观察对象,该对象会在订阅开始时创建一个资源,并在订阅结束时释放该资源。这使得......
  • Rxjs tap 操作符的使用场景介绍
    RxJS的tap操作符是一个非常有用的工具,它允许我们“查看”Observable流中的数据,同时不会对数据流产生任何影响。换句话说,它是一种副作用(sideeffect)操作符,允许我们在不更改主要数据流的情况下执行一些额外的操作,如日志记录、调试或其他副作用。在详细讨论tap操作符的使用场......
  • mysql使用记录
    mysql一些实际使用记录查看数据库showdatabases;选择某个数据库usexxxxx;创建数据库createdatabasetestdb;选择某个数据库后,查看该数据库下有那些表showtables;查看当前正在使用的数据库selectdatabase();表数据库当中最基本的单元是表:table;表中每一个字......