uvm学习杂记

  1. 一个类,只定义了而没有实例化,是没有任何意义的,但也有特殊情况,对于一个静态类,即其成员变量都是静态的,不实例化也可以正常使用;
  2. 类要想和DUT通信,不能在类里定义接口,会报错,只能在类里定义虚拟接口;若直接基于sv的测试平台中是在new函数中调用接口,在UVM中则通过uvm_config_db::get来得到从top module传递而来的interface;
  3. UVM中,各个component(driver,monitor等功能部件)通信使用TLM事务级模型方式,其中要发送信息的一方,使用uvm_analysis_port#(my_transaction),是UVM库中的一个参数化的类;
  4. driver是最底层的,这里不必进行实例化,只需在build_phase中,也要完成类的实例化工作,只需调用super.build_phase(phase);In_agent实现driver,monitor,sequencer的实例化,而In_agent的实例化则在env的build_phase中完成;
  5. build_phase中除了完成实例化之外,还要完成config_db机制的get行为,即把其它component设置给此component的一些参数接收过来;
  6. 任何一个派生自uvm_component类的主要的动作都是在main_phase中完成的,main_phase的第一句话是super.main_phase,即调用父类的main_phase;seq_item_port是用于连接driver和sequencer的一个端口,driver如果想要发送数据就要从这个端口获得;sequence如果有数据要给driver,也要通过这个端口给driver;seq_item_port中my_driver的父类中,即uvm_driver类中,它的实例化也是在uvm_driver的build_phase中完成的;
  7. agent有两种形式,UVM_PASSIVE和UVM_ACTIVE,以前者方式运转的agent只监测总线而不驱动总线;以后者方式运行的agent驱动总线,也可以监测总线;
  8. uvm_blocking_get_port也是一个TLM事务级端口,用来接收一个uvm_analysis_port发送的信息,而uvm_analysis_port是发送信息的;uvm验证平台的各个组件之间通过这两个端口来实现事务级别通信;
  9. scoreboard中一般使用一个队列来暂存从reference model得到的期望数据;
  10. uvm验证平台可以使用uvm_tlm_analysis_fifo把uvm_blocking_get_port和uvm_analysis_port连接;
  11. 在uvm中,即使driver,monitor,reference model和scoreboard的main_phase都是无限循环的,但是也不需要显式的调用$finish,只需要使用objection机制即可。在发包之前,通过调用starting_phase.raise_objection(this)告诉UVM可以开始发包了,当包发送完后,调用starting_phase.drop_objection(this)来告诉UVM可以使用$finish了;当调用drop_objection时,UVM会检查其它的component的objection是否已经被drop了,直到被drop后,才会调用$finish.

原文地址:https://www.cnblogs.com/zeushuang/p/8325929.html

时间: 2024-10-11 20:42:30

uvm学习杂记的相关文章

[Flask]学习杂记--模板

这个学习杂记主要不是分享经验,更多是记录下falsk的体验过程,以后做东西在深入研究,因为django之前用的时间比较长,所以很多概念都是一看而过,做个试验了解下flask的功能. flask中使用是jinja2 模板,和django自带的模板很类似,但又比django的模板强大,提供了更多有用的工具,基本使用上基本都是一致的. 写了一个小案例,把模板渲染的基本步骤和变量传递的基本使用练习了下. jinjia2 模板文档 http://jinja.pocoo.org/docs/dev/ flas

emacs学习杂记

1.下载emacs源码编译安装后,安装路径在:/usr/local/bin 也可在emacs源码下生产的Makefile查看安装的路径:prefix=/usr/local bindir=${exec_prefix}/bin 2.emacs学习:Emacs 编辑环境,第 1 部分: 学习 Emacs 的基础知识 替代sourceinsight 用emacs 让emacs强于sourceinsight 3.cscope在emacs的配置与使用

学习杂记之root密码的更改

1  在学习linux过程中总会出现忘记root密码的时候,这是要在开机启动的系统选项中按上下键.使得它的页面停留在你要更改密码的选项后按e,之后会进入一个文本,在他的最后第2行会有这样的字眼ro  rd.XXXX  这是你将光标移到到对应位置,将原有的ro  rd.  更改为rw  rd.break 然后按ctrl+r这时系统会进入一个假root,输入chroot sysroot 可以变成真的root 然后passwd  改密码即可,如果系统的selinux 是开的话 要touch /.aut

Linux学习杂记

最近一口气看完了韩顺平老师讲的Linux视频教程,自己也在学习的过程中做了些笔记,记载如下,希望帮助到一些喜欢研究Linux的同学,也算是在云端备份一下笔记吧,以免电脑出现不可控的因素而遗失自己的心血. 首先声明,这篇笔记不是按照韩老师讲的顺序来写的,可能有些凌乱,但我相信,你总能找到你想要的信息: Linux必看书籍: 鸟哥的私房菜 Linux编程从入门到精通 Linux内核安全剖析 命令: shutdown -h now  立刻关机 shutdown -r now   重启 reboot  

学习杂记1:c#,顺序泛型栈,泛型委托,Lambda,拓展方法

最近又重新回过头来学习C#,才发现之前学习的知识有多么的浅显,有些东西还是挺难懂的,但是比较有意思,例如协变,逆变,不变就挺有意思,但是也挺绕,下面是学习过程中写的一些代码,有点乱,就当日记记叙一下. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Genericity泛型 { //泛型委托 p

Disruptor学习杂记

慎入,有点乱,只是学习记录,disruptor_2.10.4 1.Disruptor对象有一个EventProcessorRepository对象 2.EventProcessorRepository里储存的是EventProcessorInfo和EventHandler(既创建Disruptor对象时设置的EventHandler)的映射关系, 及EventProcessorInfo和EventProcessor(实际为BatchEventProcessor)的映射关系 2.1 首先看看Bat

Python学习杂记_4_分支和循环

分支 和 循环 分支和循环这俩结构在各语言中都有着很重要的地位,当然我之前都没有学好,这里总结一下在Python学习中对这俩结构的认识. 分支结构 # 单分支 if 条件判断: 执行语句- # 双分支 if 条件判断: 执行语句- else: 执行语句- #多分支 if 条件判断: 执行语句- elif: 执行语句- else: 执行语句- 循环结构 1. while循环 ,需要定义循环变量来控制循环. i = 0初始化一个控制循环的变量 while 有关循环变量的条件判断: 执行循环语句 -

UVM学习记录1:验证平台的各个组件

首先,UVM的验证平台的各个组件的使用与否完全取决于工程师本人,验证工程师本人出于对项目的大小,RTL设计的spec以及可复用性等其他因素对项目的验证平台的整体flow有了大体的思路之后,撰写相应的文档并且搭建UVM环境. 通常来说,一个相对简单完整的验证平台包括了sequence.sequencer.reference model.agent.driver.monitor.scoreboard等组件.下面来说说各个组件的作用. sequence:sequence不是验证env下面的组件,其主要

go语言学习杂记

go语言在windows下下载安装 推荐在golang中国下载 http://www.golangtc.com/download 安装.... go环境变量与工作目录 根据约定GOPATH需要建立3个目录 bin(存放编译后生成的可执行文件) pkg(存放编译后生成的包文件 .a) src(存放项目源码 比如:.go .c .h .s等)使用go env查看环境 常用命令 go get:获取远程包(git或hg(google code)) go run :直接运行程序 go bulid :测试编