UVM1.1应用指南及源代码分析-20111211版.pdf
- 文档编号:30838869
- 上传时间:2024-01-30
- 格式:PDF
- 页数:636
- 大小:3.10MB
UVM1.1应用指南及源代码分析-20111211版.pdf
《UVM1.1应用指南及源代码分析-20111211版.pdf》由会员分享,可在线阅读,更多相关《UVM1.1应用指南及源代码分析-20111211版.pdf(636页珍藏版)》请在冰豆网上搜索。
UVM1.1应用指南及源代码分析UVM1.1ApplicationGuideandSourceCodeAnalysis张强著在这里,读懂UVMI序序写这本书的难度超出了我的预料。
从8月初开始写,一直到现在,4个多月的时间,从刚开始的满含激情,到现在的精疲力尽。
现在写出来的东西,距离我心目中的作品差距十万八千里,有太多的地方没有讲述清楚,有太多的地方需要仔细斟酌,有太多的语句需要换一种表述方式。
做为一个完美主义者,我应该努力的把所有的不完美的地方消除。
可是,世间存在完美的东西么?
作为一个工程师,必须要在理想和现实之间做出一些妥协。
理想总是很美好,但是现实中的资源总是有限,一个优秀的工程师不是不惜代价的实现完美,而是在现有的资源情况下做到最好。
8月份开始写的时候,自己时间颇多,但是现在则是时间已经处于不够用的状态,已经无力再支撑自己去仔细的修改写出来的东西。
正因为如此,我停止对这本书的修改,把其对外公布。
做出这个决定,我要对小学、初中、高中和大学的语文老师说一声:
对不起,我给你们丢脸了;我要对那些从小到大培养我思维严谨性的数学老师、物理老师、化学老师、电路老师、编程老师等说一句:
对不起,虽然我已经尽量追求严谨,但是书中依然有太多不严谨的地方;我要对广大的读者说:
对不起,要阅读此书请自动开启你们的“超强纠错”功能,否则可能无法正常阅读。
写这本书,只是想把自己会的一点东西完全的落于纸上。
在努力学习UVM的过程中,自己花费了很多时间和精力。
我只想把学习的心得记录下来,希望能够给后来的人以启发。
如果这本书能够给一个人带来一点点的帮助,那么我的努力就不算是白费。
这本书的前半部分(第1到第9章)介绍了UVM的使用,其用户群较为广泛;II而后半部分(第10到第19章)则介绍UVM背后的工作原理,用户群相对稀少。
通常来说,一般的用户只要看懂前半部分就可以了。
但是我想,世上总有像我一样有好奇心的人,不满足知其然再不知其所以然,会有人像我一样,会因为一个技术问题而彻夜难眠,如果你是这样的人,那么恭喜,这本书的后半部分就是为你准备的。
读者在阅读过程中如果有任何意见或者建议,或者发现了任何错误,请发邮件到,我非常期待有人能和我探讨关于UVM的问题。
笔者,2011.12.11于浙江图书馆III简要目录简要目录序.I简要目录.III详细目录.VII图目录.XVII1.初识UVM验证平台.11.1.什么是UVM.21.2.UVM验证平台的组成.51.3.一个简单的UVM验证平台ponent与object.332.1.UVM的树形组织结构.332.2.uvm_object是UVM中最最基本的类.362.3.经常用到的uvm_object和uvm_component.382.4.factory机制.402.5.uvm_component与uvm_object的思考.433.phase及objection.453.1.UVM中的phase.453.2.UVM中的objection.523.3.用domain来划分不同的家庭.554.transaction及field_automation.594.1.field_automation机制.604.2.transaction使用时的一些技巧.675.sequence机制.735.1.UVM中的sequence机制.735.2.写出强大的sequence.795.3.virtualsequence的使用.83IV6.config机制.916.1.config机制的前世今生.916.2.强大的config.946.3.聚合config变量.987.UVM的各种port.1037.1.port与TLM.1037.2.UVM中各种port的连接.1107.3.用port实现monitor和scoreboard的通信.1178.registermodel的使用.1258.1.registermodel简介.1258.2.搭建一个简单的registermodel.1298.3.复杂的registermodel.1378.4.registermodel中的常用操作.1459.callback的使用.1479.1.callback简介.1479.2.UVM中callback的使用.1499.3.callback与sequence机制.15210.uvm_component源代码分析.15510.1.uvm_component.15610.2.uvm_root.16111.report机制源代码分析.17111.1.uvm_error宏的执行.17111.2.uvm_report_server.17712.factory机制源代码分析.18712.1.根据字符串创建一个类的实例.18712.2.uvm_object_utils宏.18912.3.factory机制的应用.19612.4.uvm_component_utils宏.20112.5.其它用于factory注册的宏.20312.6.override功能.20613.phase机制源代码分析.22913.1.探索phase.22913.2.初识uvm_domain.23313.3.浅探uvm_phase.23813.4.objection机制.27613.5.phase的高级应用.29514.field_automation机制源代码分析.30714.1.简单的field_automation.30814.2.高级的field_automation机制.31415.sequence机制源代码分析.327V15.1.uvm_do系列宏.32715.2.sequence_item的产生与发送.34415.3.sequence的常用功能.36315.4.sequence的response.36816.config_db机制源代码分析.37516.1.基本的数据结构.37516.2.资源的写入.37916.3.资源的读出.40116.4.uvm_config_db类对resource_db机制的扩展.40217.TLM1.0源代码分析.41117.1.TLM端口简介.41117.2.uvm_port_base类.41617.3.常用的port的定义.43118.registermodel源代码分析.44318.1.基本的数据结构.44318.2.模型的建立.45218.3.registermodel的锁定.47618.4.uvm_reg的write操作:
FRONTDOOR.49018.5.uvm_reg的write操作:
BACKDOOR.52018.6.uvm_reg的read操作.53318.7.registermodel的其它常用操作.54519.callback机制源代码分析.57719.1.从uvm_register_cb宏说起.57719.2.callback的使用.586附录A:
术语.607附录B:
函数索引.609VII详细详细目录目录序.I简要目录.III详细目录.VII图目录.XVII1.初识UVM验证平台.11.1.什么是UVM.21.1.1.UVM主要用在什么地方.21.1.2.何谓方法学?
.41.2.UVM验证平台的组成.51.2.1.何谓验证平台.51.2.2.UVM验证平台.61.3.一个简单的UVM验证平台.71.3.1.类的定义与实例化.81.3.2.UVM验证平台中的driver
(一).81.3.3.UVM验证平台中的transaction.121.3.4.UVM验证平台中的driver
(二).131.3.5.UVM验证平台中的monitor.151.3.6.UVM验证平台中的agent.161.3.7.UVM验证平台中的referencemodel.191.3.8.UVM验证平台中的scoreboard.211.3.9.UVM验证平台中的env.221.3.10.UVM验证平台中的sequence.241.3.11.UVM验证平台中的case.261.3.12.UVM验证平台中的top.29VIII1.3.13.UVM验证平台的启动ponent与object.332.1.UVM的树形组织结构.332.1.1.uvm_component中的parent.342.1.2.UVM树的根在哪里?
.342.1.3.uvm_component的phase自动执行.352.2.uvm_object是UVM中最最基本的类.362.2.1.uvm_object与uvm_component是两个对等的概念吗.362.2.2.有哪些类派生自uvm_object.372.3.经常用到的uvm_object和uvm_component.382.3.1.常用的uvm_component.382.3.2.常用的uvm_object.392.4.factory机制.402.4.1.UVM认证准生证.402.4.2.override功能.412.4.3.根据类名创建类的实例.422.4.4.factory的本质:
重写了new函数.432.5.uvm_component与uvm_object的思考.433.phase及objection.453.1.UVM中的phase.453.1.1.为什么要分成phase.453.1.2.taskphase和functionphase.473.1.3.phase的自动执行.483.1.4.UVM中同一phase的执行顺序.483.1.5.UVM中的动态运行(run_time)phase.493.2.UVM中的objection.523.2.1.objection是如何控制验证平台的关闭的.523.2.2.参数phase的含义.543.2.3.一般在什么地方raise_objection.543.3.用domain来划分不同的家庭.553.3.1.domain的例子.563.3.2.多domain与单domain的区别.564.transaction及field_automation.594.1.field_automation机制.604.1.1.为什么要使用field_automation机制.604.1.2.field_automation机制的使用.624.1.3.field_automation机制都做了哪些事情.644.1.4.如何排除某些字段.654.2.transaction使用时的一些技巧.674.2.1.“尽量做到”.67IX4.2.2.在uvm_field_*宏前后使用if语句.715.sequence机制.735.1.UVM中的sequence机制.735.1.1.激励信息的产生与驱动的分离.745.1.2.数据流的独立.765.1.3.sequence的启动与执行.775.1.4.通过sequence来控制验证平台的关闭.785.2.写出强大的sequence.795.2.1.使用uvm_do系列宏.795.2.2.把sequence做为uvm_do宏的参数.815.3.virtualsequence的使用.835.3.1.用事件做sequence之间的同步.835.3.2.复杂的同步:
virtualsequence.845.3.3.在sequence中慎用forkjoin_none.875.3.4.在virtualsequence中控制验证平台的关闭.896.config机制.916.1.config机制的前世今生.916.1.1.验证平台中要配置的众多的参数.916.1.2.config机制的本质:
半个全局变量.926.1.3.config机制是用来传递数据的.936.2.强大的config.946.2.1.省略get的config.946.2.2.跨层次的多重set.966.2.3.同一层次的多重set.966.3.聚合config变量.986.3.1.用专门的类来组织config变量.986.3.2.实时的改变config值.1006.3.3.在sequence中设置driver要发送的包的数量.1017.UVM的各种port.1037.1.port与TLM.1037.1.1.uvm_component之间的通信.1037.1.2.TLM级别的通信.1057.1.3.UVM中常见的port.1077.2.UVM中各种port的连接.1107.2.1.使用connect建立连接关系.1107.2.2.PORT与IMP的连接.1117.2.3.EXPORT与IMP的连接.1137.2.4.PORT和EXPORT的连接.1147.2.5.UVM中的analysisport和analysisexport.1157.3.用port实现monitor和scoreboard的通信.117X7.3.1.UVM中port连接时的层次关系.1177.3.2.用analysisport实现monitor和scoreboard的通信.1197.3.3.有多个uvm_analysis_imp存在的情况.1207.3.4.用fifo实现monitor和scoreboard的通信.1217.3.5.用fifo还是直接用IMP.1238.registermodel的使用.1258.1.registermodel简介.1258.1.1.registermodel的必要性.1258.1.2.registermodel中一些常用的概念.1268.1.3.registermodel与UVM验证平台.1278.2.搭建一个简单的registermodel.1298.2.1.只有一个寄存器的registermodel.1298.2.2.把registermodel集成到验证平台中.1338.3.复杂的registermodel.1378.3.1.层次化的registermodel.1378.3.2.regfile用以区分不同的hdl路径.1398.3.3.具有多个域的寄存器.1408.3.4.跨越多个地址的寄存器.1428.3.5.在registermodel中加入存储器.1438.4.registermodel中的常用操作.1458.4.1.registermodel对DUT寄存器的模拟.1458.4.2.常用操作对镜像值和渴望值的影响.1459.callback的使用.1479.1.callback简介.1479.1.1.最简单的callback函数.1479.1.2.callback:
让一切丰富多彩.1499.2.UVM中callback的使用.1499.2.1.UVM中的callback.1499.2.2.pre_tran功能的具体实现.1519.3.callback与sequence机制.1529.3.1.callback与sequence机制有关系吗.15210.uvm_component源代码分析.15510.1.uvm_component.15610.1.1.uvm_component的派生图.15610.1.2.为什么要指定一个parent.15710.1.3.uvm_component的树形组织结构的实现.15810.2.uvm_root.16110.2.1.uvm_root的应用.16110.2.2.uvm_root的单实例实现.16110.2.3.回顾uvm_component的new函数.165XI10.2.4.run_test函数.16711.report机制源代码分析.17111.1.uvm_error宏的执行.17111.1.1.uvm_report_enabled.17211.1.2.uvm_report_error函数.17611.2.uvm_report_server.17711.2.1.类的实例化.17711.2.2.report函数.17911.2.3.UVM对于信息打印的精细控制.18512.factory机制源代码分析.18712.1.根据字符串创建一个类的实例.18712.1.1.创建类的实例的方法.18712.2.uvm_object_utils宏.18912.2.1.uvm_object_utils宏展开.18912.2.2.m_uvm_object_registry_internal宏.19012.2.3.uvm_object_utils_begin宏的其它部分.19212.2.4.uvm_factory类.19212.3.factory机制的应用.19612.3.1.根据类名创建类的一个实例.19612.3.2.factory机制下独特的实例化的方法.19812.3.3.factory机制的反思.19912.4.uvm_component_utils宏.20112.4.1.uvm_component_utils宏的展开.20112.4.2.m_uvm_component_registry_internal.20212.5.其它用于factory注册的宏.20312.5.1.uvm_object_param_utils宏.20312.5.2.uvm_component_utils_begin宏.20512.5.3.uvm_component_param_utils宏.20512.6.override功能.20612.6.1.用于override功能的数据结构.20712.6.2.set_type_overide_by_type函数.20812.6.3.类型被override时实例的创建.21112.6.4.set_type_override_by_name.21612.6.5.set_inst_override_by_type.21812.6.6.实例被override时实例的创建.22112.6.7.set_inst_override_by_name函数.22312.6.8.find_override_by_name函数.22512.6.9.override功能总结.22813.phase机制源代码分析.22913.1.探索phase.229XII13.1.1.从run_test说起.22913.1.2.m_run_phases函数.23113.2.初识uvm_domain.23313.2.1.get_common_domain.23313.2.2.get_uvm_domain.23513.2.3.uvm_domain类小结.23713.3.浅探uvm_phase.23813.3.1.uvm_phase的类型.23813.3.2.构造函数new.23913.3.3.uvm_build_phase.24213.3.4.add函数.24413.3.5.正常情况运行的execute_phase:
普通函数phase.25213.3.6.正常情况运行的execute_phase:
taskphase.26513.3.7.同一层次的component的build_phase的执行.27313.4.objection机制.27613.4.1.uvm_phase中的phase_done.27613.4.2.raise_objection.27813.4.3.drop_objection.28313.4.4.m_forked_drop.28713.4.5.systemverilog中关于函数的调度语义.29313.4.6.可以写一点与execute_phase相关的.29513.5.phase的高级应用.29513.5.1.phase的jump.29513.5.2.domain的使用.30013.5.3.进程的同步.30214.field_automation机制源代码分析.30714.1.简单的field_automation.30814.1.1.一个简单的例子.30814.1.2.uvm_field_utils_begin宏.30914.1.3.操作的类型.31114.1.4.uvm_field_int宏.31214.2.高级的field_automation机制.31414.2.1._m_uvm_status_containerpare等操作.31514.2.3.set_*_local操作.32014.2.4.自动get_config功能的实现.32214.2.5.小结.32615.sequence机制源代码分析.32715.1.uvm_do系列宏.32715.1.1.宏的展开.327XIII15.1.2.uvm_create_on宏.32915.1.3.SEQ_OR_ITEM是一个sequence_item.33315.1.4.SEQ_OR_ITEM是一个sequence.33415.2.sequence_item的产生与发送.34415.2.1.start_item.34415.2.2.UVM的sequence的仲裁机制.34815.2.3.finish_item.35815.3.sequence的常用功能.36315.3.1.default_sequence的自动启动.36315.3.2.p_sequencer与m_sequencer的区别.36615.4.sequence的response.36815.4.1.put_respont与get_response.36815.4.2.使用response_handler.37216.config_db机制源代码分析.37516.1.基本的数据结构.37516.1.1.资源的存放形式.37616.1.2.资源的存放地点.37716.2.资源的写入.37916.2.1.uvm_resource_db类.37916.2.2.uvm_resource#(T)的new函数.38016.2.3.uvm_resource#(T)的write函数.38216.2.4.uvm_resource_pool的set函数.38516.2.5.uvm_config_db的set_default函数.38816.2.6.uvm_config_db的set_anonymous函数.38916.2.7.uvm_config_db的set_override函数.39016.2.8.uvm_config_db的set_override_type函数.39016.2.9.uvm_config_db的set_override_name函数.39116.2.10.uvm_config_db的write_by_name函数.39216.2.11.uvm_resource_db的write_by_type函数.39816.3.资源的读出.40116.3.1.read_by_name和read_by_type函数.40116.3.2.uvm_resource#(T)的read函数.40216.4.uvm_config_db类对resource_db机制的扩展.40216.4.1.uvm_config_db的set函数.40216.4.2.uvm_config_db的get函数.40717.TLM1.0源代码分析.41117.1.TLM端口简介.41117.1.1.UVM中两类TLM端口
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- UVM1 应用 指南 源代码 分析 20111211