当前位置:主页 > 书籍配套资源 > UVM配套资源
《UVM实战》源代码

《UVM实战》源代码

  • 更新:2022-04-07
  • 大小:3.29 MB
  • 类别:UVM
  • 作者:张强
  • 出版:机械工业出版社
  • 格式:PDF

  • 资源介绍
  • 相关推荐

本书从搭建一个完整的UVM平台开始,在书中使用了大量的例子,深入浅出的介绍UVM。除了介绍UVM的使用方法之外,本书还引导读者思考这种用法背后的UVM设计哲学。

封面图

目录

  • 前言
  • 第1章与UVM的第一次接触1
  • 1.1UVM是什么1
  • 1.1.1验证在现代IC流程中的位置1
  • 1.1.2验证的语言2
  • 1.1.3何谓方法学3
  • 1.1.4为什么是UVM4
  • 1.1.5UVM的发展史5
  • 1.2学了UVM之后能做什么6
  • 1.2.1验证工程师6
  • 1.2.2设计工程师6
  • 第2章一个简单的UVM验证平台7
  • 2.1验证平台的组成7
  • 2.2只有driver的验证平台8
  • *2.2.1最简单的验证平台8
  • *2.2.2加入factory机制13
  • *2.2.3加入objection机制14
  • *2.2.4加入virtual interface16
  • 2.3为验证平台加入各个组件20
  • *2.3.1加入transaction20
  • *2.3.2加入env23
  • *2.3.3加入monitor25
  • *2.3.4封装成agent28
  • *2.3.5加入reference model32
  • *2.3.6加入scoreboard36
  • *2.3.7加入field_automation机制38
  • 2.4UVM的终极大作:sequence41
  • *2.4.1在验证平台中加入sequencer41
  • *2.4.2sequence机制44
  • *2.4.3default_sequence 的使用48
  • 2.5建造测试用例50
  • *2.5.1加入base_test50
  • *2.5.2UVM中测试用例的启动52
  • 第3章UVM基础56
  • 3.1uvm_component与uvm_object56
  • 3.1.1uvm_component派生自uvm_object56
  • 3.1.2常用的派生自uvm_object的类57
  • 3.1.3常用的派生自uvm_component的类58
  • 3.1.4与uvm_object相关的宏61
  • 3.1.5与uvm_component相关的宏62
  • 3.1.6uvm_component的限制62
  • 3.1.7uvm_component与uvm_object的二元结构63
  • 3.2UVM的树形结构64
  • 3.2.1uvm_component中的parent参数64
  • 3.2.2UVM树的根66
  • 3.2.3层次结构相关函数67
  • 3.3field automation机制69
  • 3.3.1field automation机制相关的宏69
  • 3.3.2field automation机制的常用函数71
  • *3.3.3field automation机制中标志位的使用72
  • *3.3.4field automation中宏与if的结合74
  • 3.4UVM中打印信息的控制76
  • *3.4.1设置打印信息的冗余度阈值76
  • *3.4.2重载打印信息的严重性78
  • *3.4.3UVM_ERROR到达一定数量结束仿真79
  • *3.4.4设置计数的目标80
  • *3.4.5UVM的断点功能81
  • *3.4.6将输出信息导入文件中82
  • *3.4.7控制打印信息的行为84
  • 3.5config_db机制85
  • 3.5.1UVM中的路径85
  • 3.5.2set与get函数的参数87
  • *3.5.3省略get语句88
  • *3.5.4跨层次的多重设置89
  • *3.5.5同一层次的多重设置91
  • *3.5.6非直线的设置与获取93
  • *3.5.7config_db机制对通配符的支持94
  • *3.5.8check_config_usage95
  • 3.5.9set_config与get_config97
  • 3.5.10config_db的调试98
  • 第4章UVM中的TLM1.0通信100
  • 4.1TLM1.0100
  • 4.1.1验证平台内部的通信100
  • 4.1.2TLM的定义102
  • 4.1.3UVM中的PORT与EXPORT102
  • 4.2UVM中各种端口的互连104
  • *4.2.1PORT与EXPORT的连接104
  • *4.2.2UVM中的IMP106
  • *4.2.3PORT与IMP的连接109
  • *4.2.4EXPORT与IMP的连接111
  • *4.2.5PORT与PORT的连接111
  • *4.2.6EXPORT与EXPORT的连接113
  • *4.2.7blocking_get端口的使用114
  • *4.2.8blocking_transport端口的使用116
  • 4.2.9nonblocking端口的使用117
  • 4.3UVM中的通信方式119
  • *4.3.1UVM中的analysis端口119
  • *4.3.2一个component内有多个IMP121
  • *4.3.3使用FIFO通信124
  • 4.3.4FIFO上的端口及调试126
  • *4.3.5用FIFO还是用IMP128
  • 第5章UVM验证平台的运行132
  • 5.1phase机制132
  • *5.1.1task phase与function phase132
  • 5.1.2动态运行phase134
  • *5.1.3phase的执行顺序134
  • *5.1.4UVM树的遍历139
  • 5.1.5super.phase的内容140
  • *5.1.6build阶段出现UVM_ERROR停止仿真141
  • *5.1.7phase的跳转142
  • 5.1.8phase机制的必要性146
  • 5.1.9phase的调试147
  • 5.1.10超时退出147
  • 5.2objection机制148
  • *5.2.1objection与task phase148
  • *5.2.2参数phase的必要性152
  • 5.2.3控制objection的最佳选择152
  • 5.2.4set_drain_time的使用154
  • *5.2.5objection的调试156
  • 5.3domain的应用158
  • 5.3.1domain简介158
  • *5.3.2多domain的例子158
  • *5.3.3多domain中phase的跳转161
  • 第6章UVM中的sequence163
  • 6.1sequence基础163
  • 6.1.1从driver中剥离激励产生功能163
  • *6.1.2sequence的启动与执行165
  • 6.2sequence的仲裁机制166
  • *6.2.1在同一sequencer上启动多个sequence166
  • *6.2.2sequencer的lock操作170
  • *6.2.3sequencer的grab操作172
  • 6.2.4sequence的有效性172
  • 6.3sequence相关宏及其实现175
  • 6.3.1uvm_do系列宏175
  • *6.3.2uvm_create与uvm_send176
  • *6.3.3uvm_rand_send系列宏178
  • *6.3.4start_item与finish_item178
  • *6.3.5pre_do、mid_do与post_do180
  • 6.4sequence进阶应用181
  • *6.4.1嵌套的sequence181
  • *6.4.2在sequence中使用rand类型变量183
  • *6.4.3transaction类型的匹配185
  • *6.4.4p_sequencer的使用186
  • *6.4.5sequence的派生与继承189
  • 6.5virtual sequence的使用190
  • *6.5.1带双路输入输出端口的DUT190
  • *6.5.2sequence之间的简单同步191
  • *6.5.3sequence之间的复杂同步192
  • 6.5.4仅在virtual sequence中控制objection197
  • *6.5.5在sequence中慎用fork join_none198
  • 6.6在sequence中使用config_db200
  • *6.6.1在sequence中获取参数200
  • *6.6.2在sequence中设置参数201
  • *6.6.3wait_modified的使用203
  • 6.7response的使用204
  • *6.7.1put_response与get_response204
  • 6.7.2response的数量问题205
  • *6.7.3response handler与另类的response206
  • *6.7.4rsp与req类型不同208
  • 6.8sequence library209
  • 6.8.1随机选择sequence209
  • 6.8.2控制选择算法211
  • 6.8.3控制执行次数213
  • 6.8.4使用sequence_library_cfg214
  • 第7章UVM中的寄存器模型216
  • 7.1寄存器模型简介216
  • *7.1.1带寄存器配置总线的DUT216
  • 7.1.2需要寄存器模型才能做的事情218
  • 7.1.3寄存器模型中的基本概念220
  • 7.2简单的寄存器模型221
  • *7.2.1只有一个寄存器的寄存器模型221
  • *7.2.2将寄存器模型集成到验证平台中224
  • *7.2.3在验证平台中使用寄存器模型227
  • 7.3后门访问与前门访问229
  • *7.3.1UVM中前门访问的实现229
  • 7.3.2后门访问操作的定义231
  • *7.3.3使用interface进行后门访问操作233
  • 7.3.4UVM中后门访问操作的实现:DPI+VPI233
  • *7.3.5UVM中后门访问操作接口235
  • 7.4复杂的寄存器模型237
  • *7.4.1层次化的寄存器模型237
  • *7.4.2reg_file的作用239
  • *7.4.3多个域的寄存器241
  • *7.4.4多个地址的寄存器242
  • *7.4.5加入存储器244
  • 7.5寄存器模型对DUT的模拟246
  • 7.5.1期望值与镜像值246
  • 7.5.2常用操作及其对期望值和镜像值的影响247
  • 7.6寄存器模型中一些内建的sequence248
  • *7.6.1检查后门访问中hdl路径的sequence248
  • *7.6.2检查默认值的sequence249
  • *7.6.3检查读写功能的sequence250
  • 7.7寄存器模型的高级用法251
  • *7.7.1使用reg_predictor251
  • *7.7.2使用UVM_PREDICT_DIRECT功能与mirror操作253
  • *7.7.3寄存器模型的随机化与update255
  • 7.7.4扩展位宽257
  • 7.8寄存器模型的其他常用函数257
  • 7.8.1get_root_blocks257
  • 7.8.2get_reg_by_offset函数258
  • 第8章UVM中的factory机制260
  • 8.1SystemVerilog对重载的支持260
  • *8.1.1任务与函数的重载260
  • *8.1.2约束的重载261
  • 8.2使用factory机制进行重载264
  • *8.2.1factory机制式的重载264
  • *8.2.2重载的方式及种类268
  • *8.2.3复杂的重载271
  • *8.2.4factory机制的调试273
  • 8.3常用的重载275
  • *8.3.1重载transaction275
  • *8.3.2重载sequence277
  • *8.3.3重载component278
  • 8.3.4重载driver以实现所有的测试用例279
  • 8.4factory机制的实现280
  • 8.4.1创建一个类的实例的方法280
  • *8.4.2根据字符串来创建一个类281
  • 8.4.3用factory机制创建实例的接口282
  • 8.4.4factory机制的本质284
  • 第9章UVM中代码的可重用性285
  • 9.1callback机制285
  • 9.1.1广义的callback函数285
  • 9.1.2callback机制的必要性286
  • 9.1.3UVM中callback机制的原理287
  • *9.1.4callback机制的使用288
  • *9.1.5子类继承父类的callback机制291
  • 9.1.6使用callback函数/任务来实现所有的测试用例292
  • 9.1.7callback机制、sequence机制和factory机制293
  • 9.2功能的模块化:小而美294
  • 9.2.1Linux的设计哲学:小而美294
  • 9.2.2小而美与factory机制的重载294
  • 9.2.3放弃建造强大sequence的想法295
  • 9.3参数化的类297
  • 9.3.1参数化类的必要性297
  • *9.3.2UVM对参数化类的支持298
  • 9.4模块级到芯片级的代码重用299
  • *9.4.1基于env的重用299
  • *9.4.2寄存器模型的重用302
  • 9.4.3virtual sequence与virtual sequencer305
  • 第10章UVM高级应用308
  • 10.1interface308
  • 10.1.1interface实现driver的部分功能308
  • *10.1.2可变时钟311
  • 10.2layer sequence315
  • *10.2.1复杂sequence的简单化315
  • *10.2.2layer sequence的示例318
  • *10.2.3layer sequence与try_next_item321
  • *10.2.4错峰技术的使用324
  • 10.3sequence的其他问题326
  • *10.3.1心跳功能的实现326
  • 10.3.2只将virtual_sequence设置为default_sequence329
  • 10.3.3disable fork语句对原子操作的影响330
  • 10.4DUT参数的随机化332
  • 10.4.1使用寄存器模型随机化参数332
  • *10.4.2使用单独的参数类333
  • 10.5聚合参数335
  • 10.5.1聚合参数的定义335
  • 10.5.2聚合参数的优势与问题336
  • 10.6config_db340
  • 10.6.1换一个phase使用config_db340
  • *10.6.2config_db的替代者341
  • *10.6.3set函数的第二个参数的检查345
  • 第11章OVM到UVM的迁移349
  • 11.1对等的迁移349
  • 11.2一些过时的用法349
  • *11.2.1sequence与sequencer的factory机制实现349
  • 11.2.2sequence的启动与uvm_test_done350
  • *11.2.3手动调用build_phase351
  • 11.2.4纯净的UVM环境352
  • 附录ASystemVerilog使用简介353
  • 附录BDUT代码清单361
  • 附录CUVM命令行参数汇总366
  • 附录DUVM常用宏汇总369

资源下载

资源下载地址1:https://pan.baidu.com/s/1Oq4Add4b19euj2T7_J669Q

相关资源

网友留言