自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 UVM TLM_FIFO理解

uvm_tlm_fifo继承了uvm_tlm_fifo_base,并没有再额外声明端口,只是重写了uvm_tlm_fifo_base中的方法(如下图),其中m是mailbox,put_ap是uvm_tlm_fifo_base中例化的端口。2.虽然uvm_tlm_fifo_base定义了很多端口,但仔细看这些端口的声明,很多都是一样的,一共只有三类:uvm_put_imp uvm_analysis_port uvm_get_peek_imp。以get_ap为例,大意是所有连接到tlm_fifo的。

2024-07-17 23:43:14 281

原创 UVM寄存器模型之predictor,do_predictor()

预测的作用:更新field中的m_mirrored、m_desired和value更新的方式:调用do_predict(),见图寄存器模型的预测分为:显式和隐式(自动)显示:通过predictor.write()来调用do_predict()隐式:通过do_write()或do_read()来调用do_predict()与前后门访问的关系:前门访问:显示预测和自动预测都可后门访问:只能使用自动预测 原因:显示预测需要检测总线事务,而后门访问完全避开了总线。

2024-07-11 10:39:13 592

原创 UVM寄存器模型(中):reg_field读写函数、随机化、set()

reg_field的读写函数首先明确,reg_field的读写函数的意思是下面介绍的函数是用于读写软件寄存器模型中reg_field的值的,并非读写硬件DUT的寄存器,切记。set():设置m_desiredset()函数修改的是寄存器模型中调用该函数的uvm_reg_field的m_desired(期望值),并且根据configure()时配置的m_access(访问类型)来给m_desired赋值(函数中case…endcase中间的内容),同时将value值更新为最新的m_desir

2024-07-10 15:52:53 762

原创 UVM寄存器模型(上):reg_field的内部结构与复位函数详解

重点关注四个变量:value:唯一一个没有被local修饰的值类型,即寄存器模型可以直接访问,也是唯一一个用rand修饰的字段,用于对寄存器模型里的reg进行randomize后存储随机值,同时也是我们对寄存器模型收集覆盖率所sample的值,value与m_desired关系密切m_mirrored(镜像值):存放我们认为此时DUT里寄存器的实际值。m_desired(期望值):存放我们期望DUT寄存器被赋予的值。m_reset[“HARD”](复位值):存放硬复位值。

2024-07-10 10:16:28 706

原创 sequence与sequence_item创建、挂载的比较与详解

对于一个seq来说,内部即可以包含子seq,也可以包含item,所以总结一下在一个seq中创建和发送二者的异同。结论:对首先明确一下类的层级关系:尽管在实例对象的层次上,seq包含item,但在类的层次上,item类是seq的父类。

2024-07-09 11:20:46 971

原创 UVM之sequence的启动:start()与宏uvm_do详解

如果SEQ_OR_ITEM是item,则cast(_seq,SEQ_OR_ITEM)会失败返回0,因为SEQ_OR_ITEM和_seq虽然平辈,但是不是_seq亲生的;这里的区分很巧妙,先定义了一个uvm_sequence_base类句柄_seq,然后cast(_seq,SEQ_OR_ITEM),这里SEQ_OR_ITEM是工厂刚创建好的对象句柄。1.UVM中提供了多个宏,`uvm_do,`uvm_do_with,`uvm_do_on_with等,但。最终都是调用uvm_do_on_pri_with宏。

2024-07-08 17:49:36 770

原创 UVM中不同级别的组件的创建方式:root、UVM_test_top

UVM中创建组件的方式有多种,按照组件的等级不同,总结不同的创建方法将组件按等级分为:组件类型 组件等级其他 普通run_test( )是UVM的入口,位于uvm_global.svh文件中。该函数的真正的定义位于uvm_root类中。uvm_global.svh将uvm_root : : run_test( )封装成了一个全局可见的函数,方便直接调用。

2024-06-25 16:56:01 426

原创 UVM中工厂机制factory覆盖(override)的方法总结

在UVM中,用新类型去覆盖工厂中注册的旧类型的方法,以类型覆盖为列,有以下几种:1.uvm_{component, object} _registry类中的 set_type_override2.uvm_component 类中的 set_type_override 和 set_type_override_by_type3.uvm_factory类中的set_type_override_by_name 和 set_type_override_by_type上述几种覆盖方法之间的关系如下:

2024-06-25 15:54:29 143

原创 UVM中工厂机制详解(下):工厂创建对象的过程

其中的关键就在于静态变量。my_driver类是继承于uvm_component类的,也就是说最后调用了了 uvm_component_registry::creat_component()type_id代表当前已经参数化过的类:uvm_component_registry#(my_driver,“my_driver”)它会被替换为 `m_uvm_component_registry_internal(my_driver,my_driver)

2024-06-25 15:26:25 570

原创 UVM中event资源池详解

首先,明确一下继承关系:uvm_object_string_pool是参数类, 通过传入参数T来创建关于类型T的全局唯一资源池(单例)

2024-06-21 23:06:35 241

原创 UVM中工厂机制详解(上):UVM源码下载、目录结构、学习网站

本篇主要记录在学习UVM工厂机制中的问题和自己的理解,上篇主要介绍工厂注册与创建源码中的基础语法知识,帮助后续更快理解代码逻辑。

2024-05-24 00:18:41 390 1

原创 UVM中工厂机制详解(中):预备SV语法知识:宏定义、参数化的类、静态变量

很少有验证工程师使用宏来处理一些其他的事情,即使作为验证验证工程师人手必备的绿皮书也只是在数据结构章节简略提到了使用定义参数。宏作为中最强大的功能之一,如果透彻的了解,正确地应用于验证平台中,可以节省大量的时间,提高代码的可读性和高效性。

2024-05-24 00:13:07 1153 1

原创 SV中虚拟接口的作用及仿真

验证的环境可以分为软件和硬件两部分,分别对应动态和静态。接口更加偏向于硬件的module,在硬件世界中实例化。

2024-05-17 00:15:42 306

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除