logo资料库

UVM1.1应用指南及源代码分析_20111211版.pdf

第1页 / 共636页
第2页 / 共636页
第3页 / 共636页
第4页 / 共636页
第5页 / 共636页
第6页 / 共636页
第7页 / 共636页
第8页 / 共636页
资料共636页,剩余部分请下载后查看
封面
正文.pdf
简要目录
详细目录
图目录
1. 初识UVM验证平台
1.1. 什么是UVM
1.1.1. UVM主要用在什么地方
1.1.2. 何谓方法学?
1.2. UVM验证平台的组成
1.2.1. 何谓验证平台
1.2.2. UVM验证平台
1.3. 一个简单的UVM验证平台
1.3.1. 类的定义与实例化
1.3.2. UVM验证平台中的driver(一)
1.3.3. UVM验证平台中的transaction
1.3.4. UVM验证平台中的driver(二)
1.3.5. UVM验证平台中的monitor
1.3.6. UVM验证平台中的agent
1.3.7. UVM验证平台中的reference model
1.3.8. UVM验证平台中的scoreboard
1.3.9. UVM验证平台中的env
1.3.10. UVM验证平台中的sequence
1.3.11. UVM验证平台中的case
1.3.12. UVM验证平台中的top
1.3.13. UVM验证平台的启动
2. component与object
2.1. UVM的树形组织结构
2.1.1. uvm_component中的parent
2.1.2. UVM树的根在哪里?
2.1.3. uvm_component的phase自动执行
2.2. uvm_object是UVM中最最基本的类
2.2.1. uvm_object与uvm_component是两个对等的概念吗
2.2.2. 有哪些类派生自uvm_object
2.3. 经常用到的uvm_object和uvm_component
2.3.1. 常用的uvm_component
2.3.2. 常用的uvm_object
2.4. factory机制
2.4.1. UVM认证准生证
2.4.2. override功能
2.4.3. 根据类名创建类的实例
2.4.4. factory的本质:重写了new函数
2.5. uvm_component与uvm_object的思考
3. phase及objection
3.1. UVM中的phase
3.1.1. 为什么要分成phase
3.1.2. task phase和function phase
3.1.3. phase的自动执行
3.1.4. UVM中同一phase的执行顺序
3.1.5. UVM中的动态运行(run_time) phase
3.2. UVM中的objection
3.2.1. objection是如何控制验证平台的关闭的
3.2.2. 参数phase的含义
3.2.3. 一般在什么地方raise_objection
3.3. 用domain来划分不同的家庭
3.3.1. domain的例子
3.3.2. 多domain与单domain的区别
4. transaction及field_automation
4.1. field_automation机制
4.1.1. 为什么要使用field_automation机制
4.1.2. field_automation机制的使用
4.1.3. field_automation机制都做了哪些事情
4.1.4. 如何排除某些字段
4.2. transaction使用时的一些技巧
4.2.1. “尽量做到”
4.2.2. 在uvm_field_*宏前后使用if语句
5. sequence机制
5.1. UVM中的sequence机制
5.1.1. 激励信息的产生与驱动的分离
5.1.2. 数据流的独立
5.1.3. sequence的启动与执行
5.1.4. 通过sequence来控制验证平台的关闭
5.2. 写出强大的sequence
5.2.1. 使用uvm_do系列宏
5.2.2. 把sequence做为uvm_do宏的参数
5.3. virtual sequence的使用
5.3.1. 用事件做sequence之间的同步
5.3.2. 复杂的同步:virtual sequence
5.3.3. 在sequence中慎用fork join_none
5.3.4. 在virtual sequence中控制验证平台的关闭
6. config机制
6.1. config机制的前世今生
6.1.1. 验证平台中要配置的众多的参数
6.1.2. config机制的本质:半个全局变量
6.1.3. config机制是用来传递数据的
6.2. 强大的config
6.2.1. 省略get的config
6.2.2. 跨层次的多重set
6.2.3. 同一层次的多重set
6.3. 聚合config变量
6.3.1. 用专门的类来组织config变量
6.3.2. 实时的改变config值
6.3.3. 在sequence中设置driver要发送的包的数量
7. UVM的各种port
7.1. port与TLM
7.1.1. uvm_component之间的通信
7.1.2. TLM级别的通信
7.1.3. UVM中常见的port
7.2. UVM中各种port的连接
7.2.1. 使用connect建立连接关系
7.2.2. PORT与IMP的连接
7.2.3. EXPORT与IMP的连接
7.2.4. PORT和EXPORT的连接
7.2.5. UVM中的analysis port和analysis export
7.3. 用port实现monitor和scoreboard的通信
7.3.1. UVM中port连接时的层次关系
7.3.2. 用analysis port实现monitor和scoreboard的通信
7.3.3. 有多个uvm_analysis_imp存在的情况
7.3.4. 用fifo实现monitor和scoreboard的通信
7.3.5. 用fifo还是直接用IMP
8. register model的使用
8.1. register model简介
8.1.1. register model的必要性
8.1.2. register model中一些常用的概念
8.1.3. register model与UVM验证平台
8.2. 搭建一个简单的register model
8.2.1. 只有一个寄存器的register model
8.2.2. 把register model集成到验证平台中
8.3. 复杂的register model
8.3.1. 层次化的register model
8.3.2. reg file用以区分不同的hdl路径
8.3.3. 具有多个域的寄存器
8.3.4. 跨越多个地址的寄存器
8.3.5. 在register model中加入存储器
8.4. register model中的常用操作
8.4.1. register model对DUT寄存器的模拟
8.4.2. 常用操作对镜像值和渴望值的影响
9. callback的使用
9.1. callback简介
9.1.1. 最简单的callback函数
9.1.2. callback:让一切丰富多彩
9.2. UVM中callback的使用
9.2.1. UVM中的callback
9.2.2. pre_tran功能的具体实现
9.3. callback与sequence机制
9.3.1. callback与sequence机制有关系吗
10. uvm_component源代码分析
10.1. uvm_component
10.1.1. uvm_component的派生图
10.1.2. 为什么要指定一个parent
10.1.3. uvm_component的树形组织结构的实现
10.2. uvm_root
10.2.1. uvm_root的应用
10.2.2. uvm_root的单实例实现
10.2.3. 回顾uvm_component的new函数
10.2.4. run_test函数
11. report机制源代码分析
11.1. `uvm_error宏的执行
11.1.1. uvm_report_enabled
11.1.2. uvm_report_error函数
11.2. uvm_report_server
11.2.1. 类的实例化
11.2.2. report函数
11.2.3. UVM对于信息打印的精细控制
12. factory机制源代码分析
12.1. 根据字符串创建一个类的实例
12.1.1. 创建类的实例的方法
12.2. uvm_object_utils宏
12.2.1. uvm_object_utils宏展开
12.2.2. m_uvm_object_registry_internal宏
12.2.3. uvm_object_utils_begin宏的其它部分
12.2.4. uvm_factory类
12.3. factory机制的应用
12.3.1. 根据类名创建类的一个实例
12.3.2. factory机制下独特的实例化的方法
12.3.3. factory机制的反思
12.4. uvm_component_utils宏
12.4.1. uvm_component_utils宏的展开
12.4.2. m_uvm_component_registry_internal
12.5. 其它用于factory注册的宏
12.5.1. uvm_object_param_utils宏
12.5.2. uvm_component_utils_begin宏
12.5.3. uvm_component_param_utils宏
12.6. override功能
12.6.1. 用于override功能的数据结构
12.6.2. set_type_overide_by_type函数
12.6.3. 类型被override时实例的创建
12.6.4. set_type_override_by_name
12.6.5. set_inst_override_by_type
12.6.6. 实例被override时实例的创建
12.6.7. set_inst_override_by_name函数
12.6.8. find_override_by_name函数
12.6.9. override功能总结
13. phase机制源代码分析
13.1. 探索phase
13.1.1. 从run_test说起
13.1.2. m_run_phases函数
13.2. 初识uvm_domain
13.2.1. get_common_domain
13.2.2. get_uvm_domain
13.2.3. uvm_domain类小结
13.3. 浅探uvm_phase
13.3.1. uvm_phase的类型
13.3.2. 构造函数new
13.3.3. uvm_build_phase
13.3.4. add函数
13.3.5. 正常情况运行的execute_phase:普通函数phase
13.3.6. 正常情况运行的execute_phase:task phase
13.3.7. 同一层次的component的build_phase的执行
13.4. objection机制
13.4.1. uvm_phase中的phase_done
13.4.2. raise_objection
13.4.3. drop_objection
13.4.4. m_forked_drop
13.4.5. systemverilog中关于函数的调度语义
13.4.6. 可以写一点与execute_phase相关的
13.5. phase的高级应用
13.5.1. phase的jump
13.5.2. domain的使用
13.5.3. 进程的同步
14. field_automation机制源代码分析
14.1. 简单的field_automation
14.1.1. 一个简单的例子
14.1.2. uvm_field_utils_begin宏
14.1.3. 操作的类型
14.1.4. uvm_field_int宏
14.2. 高级的field_automation机制
14.2.1. __m_uvm_status_container
14.2.2. compare等操作
14.2.3. set_*_local操作
14.2.4. 自动get_config功能的实现
14.2.5. 小结
15. sequence机制源代码分析
15.1. uvm_do系列宏
15.1.1. 宏的展开
15.1.2. uvm_create_on宏
15.1.3. SEQ_OR_ITEM是一个sequence_item
15.1.4. SEQ_OR_ITEM是一个sequence
15.2. sequence_item的产生与发送
15.2.1. start_item
15.2.2. UVM的sequence的仲裁机制
15.2.3. finish_item
15.3. sequence的常用功能
15.3.1. default_sequence的自动启动
15.3.2. p_sequencer与m_sequencer的区别
15.4. sequence的response
15.4.1. put_respont与get_response
15.4.2. 使用response_handler
16. config_db机制源代码分析
16.1. 基本的数据结构
16.1.1. 资源的存放形式
16.1.2. 资源的存放地点
16.2. 资源的写入
16.2.1. uvm_resource_db类
16.2.2. uvm_resource#(T)的new函数
16.2.3. uvm_resource#(T)的write函数
16.2.4. uvm_resource_pool的set函数
16.2.5. uvm_config_db的set_default函数
16.2.6. uvm_config_db的set_anonymous函数
16.2.7. uvm_config_db的set_override函数
16.2.8. uvm_config_db的set_override_type函数
16.2.9. uvm_config_db的set_override_name函数
16.2.10. uvm_config_db的write_by_name函数
16.2.11. uvm_resource_db的write_by_type函数
16.3. 资源的读出
16.3.1. read_by_name和read_by_type函数
16.3.2. uvm_resource#(T)的read函数
16.4. uvm_config_db类对resource_db机制的扩展
16.4.1. uvm_config_db的set函数
16.4.2. uvm_config_db的get函数
17. TLM1.0源代码分析
17.1. TLM端口简介
17.1.1. UVM中两类TLM端口
17.1.2. uvm_tlm_if_base
17.1.3. uvm_sqr_if_base
17.2. uvm_port_base类
17.2.1. uvm_port_component_base类
17.2.2. uvm_port_component
17.2.3. uvm_port_base的基本定义
17.2.4. connect函数
17.2.5. resolve_bindings
17.3. 常用的port的定义
17.3.1. uvm_*_imp
17.3.2. uvm_*_port与uvm_*_export
17.3.3. uvm_analysis_*
17.3.4. fifo的使用
17.3.5. sequencer与driver之间的连接关系
18. register model源代码分析
18.1. 基本的数据结构
18.1.1. 存储数据的基本单位:uvm_reg_field
18.1.2. 逻辑上比较独立的数据单位:uvm_reg
18.1.3. 比较大的容器:uvm_reg_block
18.1.4. 略显单薄的uvm_reg_file
18.1.5. memory的模型uvm_mem
18.1.6. 实现FRONTDOOR操作的uvm_reg_map
18.1.7. uvm_reg_item与uvm_reg_bus_op
18.2. 模型的建立
18.2.1. 把uvm_reg_field加入到uvm_reg中
18.2.2. 把uvm_reg加入到uvm_reg_block中
18.2.3. 把uvm_reg加入到uvm_reg_map中
18.2.4. 把uvm_mem加入到uvm_reg_block中
18.2.5. 把uvm_mem加入到uvm_reg_map中
18.2.6. 把uvm_reg_file加入到uvm_reg_block中
18.2.7. 把子uvm_reg_block加入到父uvm_reg_block中
18.3. register model的锁定
18.3.1. uvm_reg_block的lock_model函数
18.3.2. Xinit_address_mapsX函数
18.3.3. uvm_reg_map的get_physical_addresses函数
18.4. uvm_reg的write操作:FRONTDOOR
18.4.1. reset操作及uvm_reg的原子操作
18.4.2. uvm_reg::write
18.4.3. uvm_reg::do_write(一)
18.4.4. uvm_reg:: Xcheck_accessX
18.4.5. uvm_reg::do_write(二)
18.4.6. uvm_reg_map::do_write
18.4.7. uvm_reg::do_bus_write
18.4.8. uvm_reg::do_write(三)
18.4.9. uvm_reg::do_predict
18.4.10. uvm_reg_field::do_predict(一)
18.4.11. uvm_reg::do_write(四)
18.5. uvm_reg的write操作:BACKDOOR
18.5.1. uvm_reg::do_write(五)
18.5.2. uvm_reg::backdoor_read
18.5.3. uvm_reg:: backdoor_read_func(一)
18.5.4. uvm_reg::get_full_hdl_path(一)
18.5.5. uvm_reg_block::get_full_hdl_path
18.5.6. uvm_reg_file::get_full_hdl_path
18.5.7. uvm_reg::get_full_hdl_path(二)
18.5.8. uvm_reg:: backdoor_read_func(二)
18.5.9. uvm_reg::do_write(六)
18.6. uvm_reg的read操作
18.6.1. uvm_reg的read与XreadX
18.6.2. uvm_reg::do_read(一)
18.6.3. uvm_reg_field::do_predict(二)
18.6.4. uvm_reg::do_read(二)
18.7. register model的其它常用操作
18.7.1. uvm_reg的poke和peek操作
18.7.2. uvm_reg_field的write操作
18.7.3. uvm_reg_field的poke操作
18.7.4. uvm_mem的write与burst_write操作
18.7.5. uvm_reg的set和get操作
18.7.6. uvm_reg的update操作
18.7.7. uvm_reg的mirror操作
19. callback机制源代码分析
19.1. 从uvm_register_cb宏说起
19.1.1. callback的实例
19.1.2. 类的继承关系及数据结构
19.1.3. uvm_register_cb宏的展开
19.1.4. m_register_pair
19.2. callback的使用
19.2.1. uvm_callbacks::add(一)
19.2.2. uvm_callbacks_base:: check_registration
19.2.3. uvm_callbacks::add(二)
19.2.4. 加入适用于某一类型的callback
19.2.5. uvm_do_callbacks
19.2.6. 子类继承父类的callback
19.2.7. 子类继承父类callback的使用
附录A:术语
附录B:函数索引
UVM1.1 应用指南及 源代码分析 UVM1.1 Application Guide and Source Code Analysis 张强 著
在这里,读懂 UVM
序 写这本书的难度超出了我的预料。从 8 月初开始写,一直到现在,4 个多月的 时间,从刚开始的满含激情,到现在的精疲力尽。现在写出来的东西,距离我心目 中的作品差距十万八千里,有太多的地方没有讲述清楚,有太多的地方需要仔细斟 酌,有太多的语句需要换一种表述方式。 做为一个完美主义者,我应该努力的把所有的不完美的地方消除。可是,世间 存在完美的东西么? 作为一个工程师,必须要在理想和现实之间做出一些妥协。理想总是很美好, 但是现实中的资源总是有限,一个优秀的工程师不是不惜代价的实现完美,而是在 现有的资源情况下做到最好。 8 月份开始写的时候,自己时间颇多,但是现在则是时间已经处于不够用的状 态,已经无力再支撑自己去仔细的修改写出来的东西。 正因为如此,我停止对这本书的修改,把其对外公布。做出这个决定,我要对 小学、初中、高中和大学的语文老师说一声:对不起,我给你们丢脸了;我要对那 些从小到大培养我思维严谨性的数学老师、物理老师、化学老师、电路老师、编程 老师等说一句:对不起,虽然我已经尽量追求严谨,但是书中依然有太多不严谨的 地方;我要对广大的读者说:对不起,要阅读此书请自动开启你们的“超强纠错” 功能,否则可能无法正常阅读。 写这本书,只是想把自己会的一点东西完全的落于纸上。在努力学习 UVM 的 过程中,自己花费了很多时间和精力。我只想把学习的心得记录下来,希望能够给 后来的人以启发。如果这本书能够给一个人带来一点点的帮助,那么我的努力就不 算是白费。 这本书的前半部分(第 1 到第 9 章)介绍了 UVM 的使用,其用户群较为广泛; I
而后半部分(第 10 到第 19 章)则介绍 UVM 背后的工作原理,用户群相对稀少。 通常来说,一般的用户只要看懂前半部分就可以了。但是我想,世上总有像我一样 有好奇心的人,不满足知其然再不知其所以然,会有人像我一样,会因为一个技术 问题而彻夜难眠,如果你是这样的人,那么恭喜,这本书的后半部分就是为你准备 的。 读者在阅读过程中如果有任何意见或者建议,或者发现了任何错误,请发邮件 到 zhangqiang1227@gmail.com,我非常期待有人能和我探讨关于 UVM 的问题。 笔者,2011.12.11 于浙江图书馆 II
简要目录 1.1. 1.2. 1.3. component与object 2.1. 2.2. 2.3. 2.4. 2.5. UVM的树形组织结构 uvm_object是UVM中最最基本的类 经常用到的uvm_object和uvm_component factory机制 uvm_component与uvm_object的思考 序 ......................................................................................................................................... I ........................................................................................................................... III 简要目录 ......................................................................................................................... VII 详细目录 .......................................................................................................................... XVII 图目录 1. 初识UVM验证平台 .................................................................................................... 1 ................................................................................................ 2 ................................................................................ 5 ........................................................................ 7 .................................................................................................... 33 .............................................................................. 33 ........................................................ 36 .............................................. 38 ................................................................................................ 40 ...................................................... 43 ....................................................................................................... 45 ......................................................................................... 45 ................................................................................... 52 .................................................................... 55 ................................................................................... 59 ................................................................................ 60 .................................................................. 67 ............................................................................................................. 73 ............................................................................ 73 ................................................................................. 79 .............................................................................. 83 3.1. 3.2. 3.3. transaction及field_automation 4.1. field_automation机制 4.2. transaction使用时的一些技巧 sequence机制 5.1. 5.2. 5.3. UVM中的phase UVM中的objection 用domain来划分不同的家庭 UVM中的sequence机制 写出强大的sequence virtual sequence的使用 什么是UVM UVM验证平台的组成 一个简单的UVM验证平台 3. phase及objection 2. 4. 5. III
6. config机制 6.1. 6.2. 6.3. 7. UVM的各种port uvm_component uvm_root port与TLM UVM中各种port的连接 用port实现monitor和scoreboard的通信 register model简介 搭建一个简单的register model 复杂的register model register model中的常用操作 ................................................................................................................. 91 config机制的前世今生 ............................................................................. 91 ............................................................................................. 94 强大的config 聚合config变量 ......................................................................................... 98 ...................................................................................................... 103 ............................................................................................... 103 .......................................................................... 110 ................................................. 117 .............................................................................................. 125 ................................................................................... 125 ............................................................... 129 ............................................................................... 137 ................................................................... 145 ........................................................................................................ 147 ............................................................................................ 147 ........................................................................... 149 .......................................................................... 152 ........................................................................... 155 ....................................................................................... 156 .................................................................................................. 161 .................................................................................... 171 ............................................................................... 171 ................................................................................... 177 .................................................................................. 187 .............................................................. 187 .................................................................................. 189 .................................................................................. 196 .......................................................................... 201 ...................................................................... 203 ............................................................................................ 206 .................................................................................... 229 ................................................................................................ 229 .................................................................................... 233 ....................................................................................... 238 ........................................................................................... 276 .................................................................................... 295 .................................................................. 307 .......................................................................... 308 .................................................................. 314 ............................................................................... 327 phase机制源代码分析 13.1. 探索phase 13.2. 初识uvm_domain 13.3. 浅探uvm_phase 13.4. 13.5. objection机制 phase的高级应用 field_automation机制源代码分析 14.1. 简单的field_automation 14.2. 高级的field_automation机制 sequence机制源代码分析 7.1. 7.2. 7.3. register model的使用 8.1. 8.2. 8.3. 8.4. callback的使用 9.1. 9.2. 9.3. callback简介 UVM中callback的使用 callback与sequence机制 uvm_component源代码分析 10.1. 10.2. 11.1. 11.2. report机制源代码分析 `uvm_error宏的执行 uvm_report_server factory机制源代码分析 12.1. 根据字符串创建一个类的实例 12.2. 12.3. 12.4. 12.5. 其它用于factory注册的宏 12.6. uvm_object_utils宏 factory机制的应用 uvm_component_utils宏 override功能 8. 9. 10. 11. 12. 13. 14. 15. IV
config_db机制源代码分析 16.1. 基本的数据结构 16.2. 资源的写入 16.3. 资源的读出 16.4. TLM1.0 源代码分析 TLM端口简介 17.1. 17.2. uvm_port_base类 17.3. 常用的port的定义 register model源代码分析 uvm_config_db类对resource_db机制的扩展 uvm_do系列宏 sequence_item的产生与发送 sequence的常用功能 sequence的response ........................................................................................ 327 .................................................................. 344 ............................................................................... 363 ................................................................................. 368 ............................................................................. 375 ...................................................................................... 375 ............................................................................................. 379 ............................................................................................. 401 ......................................... 402 ....................................................................................... 411 ......................................................................................... 411 ..................................................................................... 416 ................................................................................... 431 ............................................................................... 443 ...................................................................................... 443 ............................................................................................. 452 ............................................................................... 476 ................................................... 490 ..................................................... 520 ................................................................................ 533 ............................................................... 545 ................................................................................ 577 ....................................................................... 577 ........................................................................................ 586 callback的使用 .................................................................................................................. 607 ........................................................................................................... 609 register model的锁定 uvm_reg的write操作:FRONTDOOR uvm_reg的write操作:BACKDOOR uvm_reg的read操作 register model的其它常用操作 18.1. 基本的数据结构 18.2. 模型的建立 18.3. 18.4. 18.5. 18.6. 18.7. callback机制源代码分析 19.1. 从uvm_register_cb宏说起 19.2. 附录A:术语 附录B:函数索引 15.1. 15.2. 15.3. 15.4. 16. 17. 18. 19. V
分享到:
收藏