UVM 源码
文章平均质量分 69
记录 UVM 源码学习日常
MangoPapa
LOVE IC. LOVE LIFE.
展开
-
UVM源码解读,UVM-1.2 code review notes
逐个文件解读uvm源码原创 2020-11-14 10:58:11 · 16403 阅读 · 44 评论 -
数字IC技能树
网上有几位大佬简单总结过IC技能树,但不够完善,远不如计算机类的各种技能树详尽完备。今日得闲,在前辈基础上我来 ① 做个总结,② 做点扩展,③ 埋下种子。原创 2021-11-15 07:45:24 · 9206 阅读 · 39 评论 -
【UVM源码学习】uvm_report_server
uvm_report_server.svh实现了uvm report server使用的两个类:uvm_report_server及uvm_default_report_server,用以处理uvm_report_handle生成的所有report。 uvm_report_server派生自uvm_object,其中定义了很多纯虚方法, uvm_report_server中具体实现的方法有summarize、do_copy、set_server、get_server:summarize直接调用了纯虚原创 2020-12-16 23:56:02 · 8767 阅读 · 0 评论 -
【UVM源码学习】uvm_recorder
uvm_recorder.svh里实现了两个类:uvm_recorder和uvm_text_recorder。uvm recorder规定了如何把field记录到record中,是uvm_tr_stream中record的抽象表示方法。 uvm_recorder类直接派生自uvm_object,定义的主要方法如下表所示。uvm_text_recorder类直接派生自uvm_recorder,是uvm_text_tr_database的默认recorder,具体实现了uvm_recorder类中的钩子原创 2020-12-16 00:20:21 · 6047 阅读 · 0 评论 -
【UVM源码学习】uvm_registry
如果对每个factory注册的component/object都创建其实例,内存、仿真/编译的开销会很大。为了减小这种开销,可以采用uvm_registry对factory注册的componnet/object类创建一个轻量级的代理(仅含有get/get_type/get_type_name等方法),只有使用到该component/object时才手动创建其实例(mycomp::type_id::create(name,parent),只有使用uvm_component_utils这类宏注册的才能使用t原创 2020-12-14 18:40:01 · 5222 阅读 · 0 评论 -
【UVM源码学习】uvm_event
uvm_event.svh中实现了uvm_event机制,实现了两个类:uvm_event_base和uvm_event。 uvm_event_base直接扩展自uvm_object,相当于在SystemVerilog event基础上包了层uvm的外衣。除了sv event支持的属性外,uvm_event_base还能保存waiter的数目且支持callback。uvm_event_base中实现的主要方法有:序号方法描述1wait_on等待事件on。事件触发函数tri原创 2020-12-13 13:06:39 · 5790 阅读 · 0 评论 -
【UVM源码学习】uvm_barrier
uvm_barrier直接扩展自uvm_object,提供多进程间的同步机制。简单讲就是用户设置一个阈值,每个等待同步的进程在执行完之后进入wait_for等待事假触发,当进入wait_for的进程数达到阈值时触发该事件,所有等待同步的进程跳出wait_for继续执行,从而实现多个进程的同步。uvm_barrier中主要实现了以下方法:序号方法描述1new创建并初始化barrier object,auto_reset默认为12wait_for进程等待事件触发。若已达原创 2020-12-12 18:28:43 · 5188 阅读 · 0 评论 -
【UVM源码学习】uvm_heartbeat
uvm_heartbeat.svh实现了uvm_heartbeat类及回调类uvm_heartbeat_callback。uvm_heartbeat,心跳检测仪,用以监测环境内指定component的生命活动,若component hang住了,会报fatal。uvm_heartbeat监测期间需在component中提起(或撤销)objection才能实现有效监测。监测模式有4中,定义在了枚举类型uvm_heartbeat_modes中,分别为UVM_ALL_ACTIVE、UVM_ONE_ACTIVE原创 2020-12-12 15:03:28 · 5388 阅读 · 0 评论 -
【UVM源码学习】uvm_object
uvm_object,直接从uvm_void扩展而来,是uvm库中唯一一个扩展自uvm_void的类,所有uvm类都直接或间接派生自uvm_object。uvm_object类中主要实现了读写object name、获取数据类型、数据打包/比对/复制等function。序号方法描述1reseed重新为随机数生成器分配seed,默认采用uvm seed生成机制,即将type_name & inst_name传递给uvm_create_random_seed,生成的see原创 2020-12-11 15:23:21 · 5750 阅读 · 2 评论 -
【UVM源码学习】uvm_object_globals
uvm_object_globals定义了uvm object用到的全局变量、参数等。与uvm_globals.svh相比,uvm_globals.svh重点定义了全局方法,uvm_object_globals.svh重点在全局变量参数的定义上,且绝大部分是枚举行变量的定义,初始化了uvm object的常用class,也有少了的方法实现。 uvm_object_globals中主要定义了以下变量:序号变量描述1uvm_bitstream_t位宽4096 bits log原创 2020-12-10 10:43:41 · 5215 阅读 · 0 评论 -
【UVM源码学习】uvm_misc
uvm_misc,UVM杂货铺,定义了uvm用到但不好归类的杂散的task、function、class。 uvm_void,基类,所有uvm类都直接或间接扩展自uvm_void。uvm_void中没有任何成员变量或方法,是个抽象类,其作用与C语言中的void相似。 uvm_scope_stack,用局部字符串类型队列m_stack实现了堆栈,用来存放uvm路径(scope)。该类中主要实现了以下方法:序号方法描述1depth获取堆栈m_stack的size2原创 2020-12-09 20:05:38 · 5338 阅读 · 0 评论 -
【UVM源码学习】uvm_comparer
uvm_comparer是个基类,提供了对象object比较的策略,比较结果(比较次数、成功与否)保存在comparer object中。uvm_object::compare及uvm_object::do_compare即调用了uvm_comparer对两个uvm_object类型的参数进行比较。uvm_comparer中主要实现了以下几个方法:序号方法描述1compare_feild比较两个uvm_bitstream_t类型的object lhs & rhs,两个原创 2020-12-09 14:03:54 · 7625 阅读 · 0 评论 -
【UVM源码学习】uvm_links
uvm_links.svh定义了基类uvm_link_base及派生类uvm_parent_child_link、uvm_cause_effect_link、uvm_related_link,采用这几个类可链接任意两个object。通过把存在一定关系(亲子关系、因果关系等)的object链接在一起,可确保编译安全进行。 uvm_link_base直接派生自uvm_object,主要实现了以下几个方法:序号方法描述1new创建uvm_link_base2set_lh原创 2020-12-09 00:55:21 · 4963 阅读 · 2 评论 -
【UVM源码学习】uvm_resource_specializations
uvm_resource中get_by_name/get_by_type会返回一个uvm_object类型的resource,但resource实际有int/string/object/bit/byte等多种类型,在实现一个resource时,往往需要根据resource的类型来重新定义get_by_name/get_by_type函数。uvm_resource_specializations.svh即提供了几种常用的派生自uvm_resource的resource基类:uvm_int_rsrc、uvm原创 2020-12-09 00:01:43 · 4786 阅读 · 0 评论 -
【UVM源码学习】uvm_resource_db
使用uvm_resource_base或uvm_resource来set/get resource时,往往需要多行code才能实现,uvm_resource_db则提供了一组接口,用一行代码实现resource set/get。其提供的主要接口如下。序号方法描述1get_by_name根据name在name table中查找resource,查找不到返回null2get_by_type根据type在type table中查找resource,查找不到返回null原创 2020-12-07 19:54:14 · 7480 阅读 · 0 评论 -
【UVM源码学习】uvm_resource
uvm_resource.svh引入了resource的概念,resource是一种参数化的容器,该容器可用来存放任意类型的数据(只要是SystemVerilog支持的数据类型都可以,例如列表、队列、向量、class handle、virtual interface等等)。resource可用于配置component、给sequence传递数据或者在测试平台各分立部件之间传递信息。 resource会以其name及type为标签(或称关键词、scope)存放在全局资源数据库的name table及t原创 2020-12-07 18:48:37 · 6018 阅读 · 0 评论 -
【UVM源码学习】uvm_pool
uvm_pool.svh中实现了两个class,其一是uvm_pool,另一是在uvm_pool基础上派生出可通过字符串对动态关联数组进行索引的通用类uvm_object_string_pool。uvm中用到uvm_object_string_pool的地方有uvm_event_pool、uvm_barrier_pool等。 uvm_pool直接派生自uvm_object,实现了一个动态关联数组的基类,可根据需求对稀疏数组进行定位、传递及存储。uvm_pool实现的主要方法有:序号方法原创 2020-12-04 19:49:00 · 6014 阅读 · 0 评论 -
【UVM源码学习】uvm_coreservice
uvm_coreservice.svh提供了一系列uvm_factory、uvm_report_server、uvm_root、uvm_component等UVM核心功能共同需要的方法。该文件中主要实现了两个类,一是uvm_coreservice_t,一是uvm_default_coreservice。 uvm_coeservice_t,基类,提供以下表格中的纯虚函数,用户使用时需自定义。uvm_default_coreservice,派生自uvm_coreservice_t,uvm_coreser原创 2020-12-04 07:13:09 · 6553 阅读 · 0 评论 -
【UVM源码学习】uvm_cmdline_processor
uvm_cmdline_processor,用以处理UVM命令行参数,这些参数用于仿真阶段,而非编译阶段。序号方法描述1get_args返回所有已调用的命令行参数2get_plusargs返回所有通过“+”自定义的命令行参数3get_uvm_args返回所有uvm的命令行参数,uvm参数以+/-开头4get_arg_matches返回所有符合匹配规则的参数,支持通配符5get_arg_value类似于系统函数valuevaluevalu原创 2020-12-03 19:23:01 · 6289 阅读 · 0 评论 -
【UVM源码学习】uvm_globals
uvm_globals,定义了一些uvm的全局基类、全局方法,其中很多是间接调用uvm_root下的方法。序号方法描述1run_test测试用例的入口,获取uvm_root并调用其run_test(testname),testname可以直接指定或通过命令行仿真选项"+UVM_TESTNAME=testname"传入2refresh_test获取uvm_root并调用其refresh_test(testname),该task用以在restore之后跑不同的test,原创 2020-12-03 16:42:38 · 6508 阅读 · 0 评论 -
【UVM源码学习】uvm_spell_chkr
uvm_spell_chkr,基类,用于uvm相关字符串拼写检查。该类中主要实现了两个方法:check和levenshtein_distance。 check。若待检查的字符串s已存在于字符串表strtab中,直接返回1,否则逐个对比strtab中的字符串与字符串s。strtab中的字符串key与待检查字符串s比对过程如下:求取key和s的levenshtein距离distance若举例小于0,表明key、s中有字符串未空,退出比较,否则继续若distance小于前一最小距离min(默认1原创 2020-12-03 14:02:56 · 5550 阅读 · 0 评论 -
【UVM源码学习】uvm_packer
uvm_packer,基类,提供了一系列适用于uvm的数据打包(pack)、解包(unpack)方法。序号方法描述1pack_field对uvm_bitstram_t类型的value进行打包,默认大端模式,打包size默认最大4096 (单位bit,最大size取决于宏UVM_MAX_STREAMBITS),打包数据放在uvm_pack_bitstream_t类型的m_bits中(最大size=UVM_MAX_STREAMBITS*8)2pack_field_int原创 2020-12-03 11:04:39 · 8490 阅读 · 0 评论 -
【UVM源码学习】uvm_queue
uvm_queue从uvm_object扩展而来,是对sv queue的扩展。 sv中,队列queue有以下几种方法(假设已定义int q[$]):q.push_back(a),元素a压入队尾q.push_front(a),元素a压入队首q.pop_front(),弹出队首元素q.pop_back(),弹出队列元素q.insert(n,a),队列q位置n插入元素aq.delete(n),删除队列q第n个元素q.size(),获取队列q的长度 uvm_queue实现了基于类.原创 2020-11-28 17:06:56 · 9110 阅读 · 0 评论 -
UVM获取文件名和行号
uvm_report机制,例如`uvm_info、`uvm_warning、`uvm_error、`uvm_fatal,打印出的信息包含有文件名和行号,那么uvm是如何获取文件名和行号的呢? 在uvm源代码中可以看到,调用了`uvm_file和`uvm_line这两个宏,这两个宏又分别指向了`__FILE__和`__LINE__这两个宏。再继续搜索`__FILE__和`__LINE__这两个宏的出处是搜索不到的。那么究竟如何实现的呢? ——编译器预编译文件的时候,会把`__FILE__替换为当.原创 2020-11-19 10:46:49 · 5820 阅读 · 0 评论 -
学习计划:UVM-1.2 源码
学习目标:两周看完UVM1.2源码学习内容:1、 uvm-1.2源码学习时间:1、 Mon - Fri, 6:00 am - 7:30 am, 6:30 pm - 7:30 pm2、 Sat - Sun, 8hrs学习产出:1、UVM源码阅读笔记 系列原创 2020-11-14 11:00:51 · 5950 阅读 · 0 评论