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