UVM实战指南第3部分

合集下载

UVM实战指南第部分

UVM实战指南第部分

(*)题外话:TLM可能是UVM中最重要的概念,掌握了TLM,就可以开场尝试编写一些小程序了。

翻译这篇文章,也是为了稳固加强对TLM的理解。

(*)几个名词:transaction翻译为事务或者交易;packet翻译为封包,packet属于transaction;monitor翻译为监视器;driver翻译为驱动器;scoreboard翻译为记分牌;有些词汇直接被运用到UVM源代码上,所以有时候用英文更容易描述清楚。

(*)语言的目的是为了交流,翻译不是为了纯粹的语言转换,而是为了传递思想。

4.6 UVM中事务级建模(TLM)20多年前,设计者从门级转向RTL级。

这次转换来自于标准Verilog/VHDL的RTL编码风格,以及RTL综合实现工具的推出。

使用RTL最大的好处是让设计者更多的专注于时序行为的设计以及功能的正确性,而很少考虑门级相关设计。

TLM(事务级建模)同样在抽象级别上更进了一步,在设计与验证领域都有出现。

通过TLM, 中心放在系统级别的各种事务流的建模,而更少关心时钟级别的行为。

TLM在测试向量中已经使用多年。

通常,在产生鼓励与覆盖率检查的时候使用事务而不是用时钟级别建模,这种方式就是TLM. 为了验证RTL级别的DUT(需要测试的模块),测试向量使用事务第 1 页发生器(transactor)(有时也称为总线功能模型(BFM)),将RTL 级与事务级进展转换。

在UVM中,此事务发生器也被叫做驱动(driver)或者收集器(collector)。

TLM中,事务通过方法调用与类对象来建模。

使用事务级而不是信号级别来建模有几个显著的好处:•TLM比RTL更简洁,仿真速度快。

•TLM模型的抽象级别更高,更加契合验证工程师或设计工程师对内部功能的考虑,从而使得建模更简单,并且更容易被其他工程师理解。

•TLM模型将不符合复用的局部移到模型之外,因此TLM很适合复用。

并且,TLM使用面向对象的技术,比方继承、实现与接口别离的技术。

UVM实战指南——第3部分【范本模板】

UVM实战指南——第3部分【范本模板】

(*)题外话:TLM可能是UVM中最重要的概念,掌握了TLM,就可以开始尝试编写一些小程序了。

翻译这篇文章,也是为了巩固加强对TLM的理解。

(*)几个名词:transaction翻译为事务或者交易;packet翻译为封包,packet属于transaction;monitor翻译为监视器;driver翻译为驱动器;scoreboard翻译为记分牌;有些词汇直接被运用到UVM源代码上,所以有时候用英文更容易描述清楚。

(*)语言的目的是为了交流,翻译不是为了纯粹的语言转换,而是为了传递思想。

4.6 UVM中事务级建模(TLM)20多年前,设计者从门级转向RTL级。

这次转换来自于标准Verilog/VHDL的RTL编码风格,以及RTL综合实现工具的推出。

使用RTL最大的好处是让设计者更多的专注于时序行为的设计以及功能的正确性,而很少考虑门级相关设计。

TLM(事务级建模)同样在抽象级别上更进了一步,在设计和验证领域都有出现.通过TLM, 中心放在系统级别的各种事务流的建模,而更少关心时钟级别的行为。

TLM在测试向量中已经使用多年。

通常,在产生激励和覆盖率检查的时候使用事务而不是用时钟级别建模,这种方式就是TLM. 为了验证RTL级别的DUT(需要测试的模块),测试向量使用事务发生器(transactor)(有时也称为总线功能模型(BFM)),将RTL级和事务级进行转换。

在UVM中,此事务发生器也被叫做驱动(driver)或者收集器(collector)。

TLM中,事务通过方法调用和类对象来建模。

使用事务级而不是信号级别来建模有几个显著的好处:•TLM比RTL更简洁,仿真速度快。

•TLM模型的抽象级别更高,更加契合验证工程师或设计工程师对内部功能的考虑,从而使得建模更简单,并且更容易被其他工程师理解。

•TLM模型将不符合复用的部分移到模型之外,因此TLM很适合复用。

并且,TLM使用面向对象的技术,比如继承、实现和接口分离的技术.TLM的采纳依赖于标准的TLM建模技术的出现,就像RTL综合流程的采纳归功于标准RTL 编码风格的实现.幸运的是,近些年来,几个重要的标准TLM应用程序接口(API)得到定义。

UVM实战指南——第3部分

UVM实战指南——第3部分

UVM实战指南——第3部分第3部分:UVM实战在前两部分中,我们介绍了UVM框架的基本概念和基本用法。

在这一部分,我们将进一步探讨UVM的实际应用,并提供一些实战技巧和建议。

1.重要性分析在开始UVM实战前,首先需要进行重要性分析。

这包括确定哪些功能是需要覆盖的,哪些功能是必要的,以及哪些可能引发错误的功能需要特殊关注。

这些分析可以帮助您确定测试计划的优先级,并在测试开发过程中更好地分配资源。

2.测试计划开发根据重要性分析的结果,您可以开始开发测试计划。

测试计划应该详细描述实施哪些测试以及对每个测试的期望结果。

它还应包括测试开发和验证团队的人员分配和时间表安排。

通过制定清晰的测试计划,您可以确保测试开发工作有条不紊地进行,并及时识别和解决问题。

3.环境开发在开发测试计划后,您可以开始开发UVM环境。

环境是UVM中最关键的部分之一,它包含了用于模拟验证环境的各种组件和接口。

在环境开发过程中,您需要根据测试计划中的需求,选择和实例化适当的UVM组件,并将它们连接在一起以形成完整的验证环境。

4.测试用例开发测试用例是验证过程中的核心功能。

在开发测试用例时,您需要通过实例化适当的测试类,指定测试目标,并配置测试环境。

您还需要定义测试封包,设置或生成输入数据,以及从模拟输出中提取和分析结果。

测试用例的开发应该遵循UVM的最佳实践,并确保测试覆盖范围广泛且有效。

5.仿真运行和调试一旦测试用例开发完成,您可以开始运行仿真并进行调试。

在仿真过程中,您可能会遇到各种问题,如信号不正确、仿真停滞、错误输出等。

为了有效解决这些问题,您可以使用UVM提供的调试功能,如消息和日志记录、波形查看和追踪。

通过运用这些工具,您可以更快地找到问题所在,并采取适当的措施进行修复。

6.结果分析和测试报告当仿真运行完成后,您需要对结果进行分析,并生成测试报告。

在UVM中,您可以通过访问测试类中的结果和统计信息来执行结果分析。

您还可以使用UVM提供的报告和日志功能,将结果以易于阅读和理解的方式呈现给项目团队和其他相关人员。

UVM实战指南——第3部分

UVM实战指南——第3部分

(*)题外话:TLM可能是UVM 中最重要的概念,掌握了TLM,就可以开始尝试编写一些小程序了。

翻译这篇文章,也是为了巩固加强对TLM的理解。

(*)几个名词:transaction翻译为事务或者交易;packet翻译为封包,packet属于transaction;monitor 翻译为监视器;driver翻译为驱动器;scoreboard翻译为记分牌;有些词汇直接被运用到UVM源代码上,所以有时候用英文更容易描述清楚。

(*)语言的目的是为了交流,翻译不是为了纯粹的语言转换,而是为了传递思想。

4.6 UVM中事务级建模(TLM)20多年前,设计者从门级转向RTL级。

这次转换来自于标准Verilog/VHDL的RTL编码风格,以及RTL综合实现工具的推出。

使用RTL最大的好处是让设计者更多的专注于时序行为的设计以及功能的正确性,而很少考虑门级相关设计。

TLM(事务级建模)同样在抽象级别上更进了一步,在设计和验证领域都有出现。

通过TLM, 中心放在系统级别的各种事务流的建模,而更少关心时钟级别的行为。

TLM在测试向量中已经使用多年。

通常,在产生激励和覆盖率检查的时候使用事务而不是用时钟级别建模,这种方式就是TLM. 为了验证RTL级别的DUT(需要测试的模块),测试向量使用事务发生器(transactor)(有时也称为总线功能模型(BFM)),将RTL级和事务级进行转换。

在UVM中,此事务发生器也被叫做驱动(driver)或者收集器(collector)。

TLM中,事务通过方法调用和类对象来建模。

使用事务级而不是信号级别来建模有几个显著的好处:TLM比RTL更简洁,仿真速度快。

TLM模型的抽象级别更高,更加契合验证工程师或设计工程师对内部功能的考虑,从而使得建模更简单,并且更容易被其他工程师理解。

TLM模型将不符合复用的部分移到模型之外,因此TLM很适合复用。

并且,TLM使用面向对象的技术,比如继承、实现和接口分离的技术。

(完整版)uvm实战-学习笔记

(完整版)uvm实战-学习笔记

《UVM实战(卷1)》学习笔记看了第1/2/3/4/5/6/8/9.1 这几个章节。

第一章是综述,第二章是一个具体的例子,学习笔记从第三章相关内容开始。

我个人觉得UVM重要的部分(特点的部分):1)factory机制(override config_db)2)TLM传递3)phase机制4)sequence-sequencer 以及virtual seq/sqr内容中的截图基本来自于UVM源代码、书自带的例子和《uvm1.1应用指南及源代码分析》这个PDF里的。

需要结合书(《UVM实战(卷1)》第1版)来看这个笔记。

第3章UVM基础3.1 uvm_component和uvm_object常用的类名字:这个图是从作者张强的《uvm1.1应用指南及源代码分析》里截得,不如书上3.1.1里的图好。

uvm_sequencer也是代码里必须有的,所以我加了uvm_sequenceruvm_void是一个空的虚类。

在src/base/uvm_misc.svh中定义:红框的是我们搭testbench的时候用的比较多的基类。

常用的uvm_object派生类:sequencer给driver的transaction要派生自uvm_sequence_item,不要派生自uvm_transaction所有的sequence要派生自uvm_sequence或者uvm_sequence的派生类,可以理解为sequence是sequence_item的组合(集合)。

driver向sequencer索要item,sequencer检查是否有sequence要发送item,当发现有item待发送时,就把这个item发给driver.常用的uvm_component派生类:所有的driver要派生自uvm_driver. driver用来把sequence_item中的信息驱动到DUT端口上,从transaction-level向signal-level的转换。

《UVM实战》读书笔记PPT模板思维导图下载

《UVM实战》读书笔记PPT模板思维导图下载

6.5 virtual sequence...
6.6 在 sequence中使
用conf...
6.7 response 的使用
6.8 sequence library
第7章 UVM中的寄存器模型
7.1 寄存器模型 简介
7.2 简单的寄存 器模型
7.3 后门访问与 前门访问
7.4 复杂的寄存 器模型
7.5 寄存器模型 对DUT的模拟
7.6 寄存器模型 中一些内建的 seque...
7.7 寄存器模型 的高级用法
7.8 寄存器模型 的其他常用函数
第8章 UVM中的factory机制
8.1 S y s t e m Ve r i l o g
对重载...
8.2 使用 factory机制进
行重载
8.3 常用的重载
第1章 与UVM的第一次接触
1.1 UVM是 什么
1.2 学了 UVM之后能 做什么
第2章 一个简单的UVM验证 平台
2.1 验证平台 1
的组成
2.2 只有
2
driver的验
证平台
3 2.3 为验证平
台加入各个组 件
4 2.4 UVM的
终极大作: sequenc...
5 2.5 建造测试
用例
感谢观看




08 第8章 UVM中的 factory机制
09Leabharlann 第9章 UVM中代码 的可重用性
011
第11章 OVM到 UVM的迁移
010
第10章 UVM高级应 用
附录A
012 SystemVerilog使 用简...
目录
013 附录B DUT代码清单

uvm实战-学习笔记

uvm实战-学习笔记

《UVM实战(卷1)》学习笔记看了第1/2/3/4/5/6/8/9.1 这几个章节。

第一章是综述,第二章是一个具体的例子,学习笔记从第三章相关内容开始。

我个人觉得UVM重要的部分(特点的部分):1)factory机制(override config_db)2)TLM传递3)phase机制4)sequence-sequencer 以及virtual seq/sqr内容中的截图基本来自于 UVM源代码、书自带的例子和《uvm1.1应用指南及源代码分析》这个PDF里的。

需要结合书(《UVM实战(卷1)》第1版)来看这个笔记。

第3章 UVM基础3.1 uvm_component和uvm_object常用的类名字:这个图是从作者张强的《uvm1.1应用指南及源代码分析》里截得,不如书上3.1.1里的图好。

uvm_sequencer也是代码里必须有的,所以我加了uvm_sequenceruvm_void是一个空的虚类。

在src/base/uvm_misc.svh中定义:红框的是我们搭testbench的时候用的比较多的基类。

常用的uvm_object派生类:sequencer给driver的transaction要派生自uvm_sequence_item,不要派生自uvm_transaction所有的sequence要派生自uvm_sequence或者uvm_sequence的派生类,可以理解为sequence是sequence_item的组合(集合)。

driver向sequencer索要item,sequencer 检查是否有sequence要发送item,当发现有item待发送时,就把这个item发给driver.常用的uvm_component派生类:所有的driver要派生自uvm_driver. driver用来把sequence_item中的信息驱动到DUT端口上,从transaction-level向signal-level的转换。

UVM实战指南

UVM实战指南

UVM实战指南&t=1&c=fks_000000084⽽为了在widget的对象中使⽤这个函数对象,必须事先在设计好的调⽤点对callback对象可以看出,在执⾏的过程中,可以对widget对象进⾏动态的添加callback,从⽽动态的改变widget对象的动作。

上⾯的例⼦⾮常简单,仅仅是输出⼀些讯息⽽已,有⼀些局限:1.这个callback结构并不能够真的改变widget对象的内部成员,以及处理的数据内容,仅仅能够输出⼀些讯息。

2.对每⼀个widget的对象,都需要单独添加相关callback对象,假如程序中⼜创建了⼀个新的widget对象,那么这个对象的callback queue初始是空的,也就是没有callback。

必须再次添加才能让这个新的widget调⽤相应的callback功能。

3.callback只有⼀个地⽅,可以扩展到多个地⽅。

另外也可以使⽤function,⽽不仅仅是task.⼯⼚模式的简单理解⾸先,如果⼀个客户要⽤到⼀款⼿机,⼀般的做法是客户去创建⼀款⼿机,然后拿来⽤:这时,客户需要知道怎么去创建⼀款⼿机,客户和⼿机就紧密耦合在⼀起了.为了降低耦合,就出现了⼯⼚类,把创建⼿机的操作放到了⼯⼚⾥⾯去,客户直接使⽤⼯⼚的创建⼿机⽅法,传⼊想要的⼿机型号就⾏了,⽽不必去知道创建的细节.随着⼿机种类越来越多,简单⼯⼚模式出现了弊端,每次新加⼊⼿机品种,⼯⼚类都要加⼊新的创建逻辑.这时我们就可以把⼯⼚类定义成了接⼝,⽽每增加⼀种新的⼿机,就增加该⼿机对应⼯⼚类的实现,这样⼯⼚的设计就可以扩展了,⽽不必去修改原来的代码:随着⼯⼚规模的继续扩⼤,⼯⼚开始⽣产充电器了.这时候⼯⼚有⼆个系列的产品:⼿机和充电器.⽽⼿机必须使⽤对应的充电器才能使⽤.这时候分别使⽤⼀个⼿机⼯⼚和⼀个充电器⼯⼚都不能满⾜我们的需求,我们必须确认⼿机跟充电器的对应关系.我们把⼯⼚改造⼀下,把⼿机⼯⼚跟充电器⼯⼚联系在⼀起:抽象⼯⼚模式⼯⼚⽅法模式简单⼯⼚模式UVM实战指南——第1部分2010-10-31 21:54:15| 分类:SystemVerilog| 标签:uvm |字号订阅验证的复杂度已经明显超过设计。

uvm实战-学习笔记

uvm实战-学习笔记

uvm实战-学习笔记uvm实战-学习笔记《UVM实战(卷1)》学习笔记看了第1/2/3/4/5/6/8/9.1 这⼏个章节。

第⼀章是综述,第⼆章是⼀个具体的例⼦,学习笔记从第三章相关内容开始。

我个⼈觉得UVM重要的部分(特点的部分):1)factory机制(override config_db)2)TLM传递3)phase机制4)sequence-sequencer 以及virtual seq/sqr内容中的截图基本来⾃于 UVM源代码、书⾃带的例⼦和《uvm1.1应⽤指南及源代码分析》这个PDF⾥的。

需要结合书(《UVM实战(卷1)》第1版)来看这个笔记。

第3章UVM基础3.1 uvm_component和uvm_object常⽤的类名字:这个图是从作者张强的《uvm1.1应⽤指南及源代码分析》⾥截得,不如书上3.1.1⾥的图好。

uvm_sequencer也是代码⾥必须有的,所以我加了uvm_sequenceruvm_void是⼀个空的虚类。

在src/base/uvm_misc.svh中定义:红框的是我们搭testbench的时候⽤的⽐较多的基类。

常⽤的uvm_object派⽣类:sequencer给driver的transaction要派⽣⾃uvm_sequence_item,不要派⽣⾃uvm_transaction所有的sequence要派⽣⾃uvm_sequence或者uvm_sequence的派⽣类,可以理解为sequence 是sequence_item的组合(集合)。

driver向sequencer索要item,sequencer检查是否有sequence要发送item,当发现有item待发送时,就把这个item发给driver.常⽤的uvm_component派⽣类:所有的driver要派⽣⾃uvm_driver. driver⽤来把sequence_item中的信息驱动到DUT端⼝上,从transaction-level向signal-level 的转换。

UVM实战指南——第3部分

UVM实战指南——第3部分

(*)题外话:TLM可能是UVM中最重要的概念,掌握了TLM,就可以开始尝试编写一些小程序了。

翻译这篇文章,也是为了巩固加强对TLM的理解。

(*)几个名词:transaction翻译为事务或者交易;packet翻译为封包,packet属于transaction;monitor翻译为监视器;driver翻译为驱动器;scoreboard翻译为记分牌;有些词汇直接被运用到UVM源代码上,所以有时候用英文更容易描述清楚。

(*)语言的目的是为了交流,翻译不是为了纯粹的语言转换,而是为了传递思想。

4.6 UVM中事务级建模(TLM)20多年前,设计者从门级转向RTL级。

这次转换来自于标准Verilog/VHDL的RTL编码风格,以及RTL综合实现工具的推出。

使用RTL最大的好处是让设计者更多的专注于时序行为的设计以及功能的正确性,而很少考虑门级相关设计。

TLM(事务级建模)同样在抽象级别上更进了一步,在设计和验证领域都有出现。

通过TLM, 中心放在系统级别的各种事务流的建模,而更少关心时钟级别的行为。

TLM在测试向量中已经使用多年。

通常,在产生激励和覆盖率检查的时候使用事务而不是用时钟级别建模,这种方式就是TLM. 为了验证RTL级别的DUT(需要测试的模块),测试向量使用事务发生器(transactor)(有时也称为总线功能模型(BFM)),将RTL级和事务级进行转换。

在UVM中,此事务发生器也被叫做驱动(driver)或者收集器(collector)。

TLM中,事务通过方法调用和类对象来建模。

使用事务级而不是信号级别来建模有几个显著的好处:∙TLM比RTL更简洁,仿真速度快。

∙TLM模型的抽象级别更高,更加契合验证工程师或设计工程师对内部功能的考虑,从而使得建模更简单,并且更容易被其他工程师理解。

∙TLM模型将不符合复用的部分移到模型之外,因此TLM很适合复用。

并且,TLM使用面向对象的技术,比如继承、实现和接口分离的技术。

UVM实战指南

UVM实战指南

U V M实战指南-CAL-FENGHAI.-(YICAI)-Company One1而为了在widget的对象中使用这个函数对象,必须事先在设计好的调用点对可以看出,在执行的过程中,可以对widget对象进行动态的添加callback,从而动态的改变widget对象的动作。

上面的例子非常简单,仅仅是输出一些讯息而已,有一些局限:1.这个callback结构并不能够真的改变widget对象的内部成员,以及处理的数据内容,仅仅能够输出一些讯息。

2.对每一个widget的对象,都需要单独添加相关callback对象,假如程序中又创建了一个新的widget对象,那么这个对象的callback queue初始是空的,也就是没有callback。

必须再次添加才能让这个新的widget调用相应的callback功能。

3.callback只有一个地方,可以扩展到多个地方。

另外也可以使用function,而不仅仅是task.工厂模式的简单理解首先,如果一个客户要用到一款手机,一般的做法是客户去创建一款手机,然后拿来用:这时,客户需要知道怎么去创建一款手机,客户和手机就紧密耦合在一起了.为了降低耦合,就出现了工厂类,把创建手机的操作放到了工厂里面去,客户直接使用工厂的创建手机方法,传入想要的手机型号就行了,而不必去知道创建的细节.随着手机种类越来越多,简单工厂模式出现了弊端,每次新加入手机品种,工厂类都要加入新的创建逻辑.这时我们就可以把工厂类定义成了接口,而每增加一种新的手机,就增加该手机对应工厂类的实现,这样工厂的设计就可以扩展了,而不必去修改原来的代码:随着工厂规模的继续扩大,工厂开始生产充电器了.这时候工厂有二个系列的产品:手机和充电器.而手机必须使用对应的充电器才能使用.这时候分别使用一个手机工厂和一个充电器工厂都不能满足我们的需求,我们必须确认手机跟充电器的对应关系.我们把工厂改造一下,把手机工厂跟充电器工厂联系在一起:抽象工厂模式工厂方法模式简单工厂模式UVM实战指南——第1部分2010-10-31 21:54:15|分类:SystemVerilog|标签:uvm|字号订阅验证的复杂度已经明显超过设计。

《UVM实战(卷1)》学习笔记

《UVM实战(卷1)》学习笔记

《UVM实战(卷1)》学习笔记看了第1/2/3/4/5/6/8/9.1这几个章节。

第一章是综述,第二章是一个具体的例子,学习笔记从第三章相关内容开始。

我个人觉得UVM重要的部分(特点的部分):1)factory机制(overrideconfig_db)2)TLM传递3)phase机制4)sequence-sequencer以及virtualseq/sqr里的。

需要也是item,当所有的driver要派生自uvm_driver.driver用来把sequence_item中的信息驱动到DUT端口上,从transaction-level向signal-level的转换。

uvm_driver需要参数(REQRSP),比uvm_component增加了几个成员。

重要的是seq_item_port和req/rsp.(src/comps/uvm_driver.svh)monitor/scoreboard派生自uvm_monitor和uvm_scoreboard,但是uvm_monitor和uvm_scoreboard并没有在uvm_component基础上做扩展。

src/comps/uvm_monitor.svh里没有增加2对于`uvm_component_utils(类名)uvm_component里的成员也可以像uvm_object里成员一样,用field_automation机制。

field_automation机制:对于uvm_object派生类来说,field_automation机制让对象自动有的copycompareprintpackunpack等函数,简化了实现uvm_component派生类里一些function/task的工作量对于uvm_component派生类来说,field_automation机制最重要的是可以在build_phase中自动获取uvm_config_db#()::set()的数值(必须加super.build_phase(phase))----也就是不用写uvm_config_db#()::get()注意:field_automation的macro的类型要和uvm_config_db的参数类型一致:如下示例代码,field_intvsuvm_config_db#(bit[47:0])这个时候super.build_phase()是不起作用的。

uvm实战-学习笔记

uvm实战-学习笔记

《UVM实战(卷1)》学习笔记看了第1/2/3/4/5/6/8/9.1这几个章节。

第一章是综述,第二章是一个具体的例子,学习笔记从第三章相关内容开始。

我个人觉得UVM重要的部分(特点的部分):1)factory机制(overrideconfig_db)2)TLM传递3)phase机制4)sequence-sequencer以及virtualseq/sqr内容中的截图基本来自于UVM源代码、书自带的例子和《uvm1.1应用指南及源代码分析》这个PDF里的。

需要结合书(第3也uvm_void常用的是item,当发现有常用的transaction-level向signal-level的转换。

uvm_driver需要参数(REQRSP),比uvm_component增加了几个成员。

重要的是seq_item_port和req/rsp.(src/comps/uvm_driver.svh)monitor/scoreboard派生自uvm_monitor和uvm_scoreboard,但是uvm_monitor和uvm_scoreboard并没有在uvm_component基础上做扩展。

src/comps/uvm_monitor.svh因为driver和envmacro1)对于2)对于对于`uvm_component_utils(类名)uvm_component里的成员也可以像uvm_object里成员一样,用field_automation机制。

field_automation机制:对于uvm_object派生类来说,field_automation机制让对象自动有的copycompareprintpackunpack等函数,简化了实现uvm_component派生类里一些function/task的工作量对于uvm_component派生类来说,field_automation机制最重要的是可以在build_phase中自动获取uvm_config_db#()::set()的数值(必须加super.build_phase(phase))----也就是不用写uvm_config_db#()::get()注意:field_automation的macro的类型要和uvm_config_db的参数类型一致:如下示例代码,field_intvsuvm_config_db#(bit[47:0])这个时候super.build_phase()是不起作用的。

UVM实战指南范文

UVM实战指南范文

UVM实战指南范文UVM(Universal Verification Methodology)是一种用于硬件验证的标准化方法学,它提供了一种强大的框架来设计和验证复杂的芯片和系统。

本文将介绍UVM的基本概念和使用方法,并提供一些实战指南,帮助读者深入了解和应用UVM。

UVM的基本框架包括四个主要组件:环境(Environment)、代理(Agent)、序列(Sequence)和驱动(Driver)。

环境是验证组件的容器,在其中实例化并连接各个代理,还负责配置和管理验证环境。

代理是验证环境中的一个子模块,负责实现和模拟芯片中的接口和功能。

序列是生成器和监控器之间的通信通道,用于生成和检查输入数据。

驱动是一个接口模块,负责向被测单元(DUT)发送序列。

UVM的使用方法可以分为以下几个步骤:1. 创建环境:首先,在UVM中创建一个环境(即testbench),并在其中实例化各个代理和其他必要的组件。

环境还负责配置和管理验证环境中的各个模块。

2.实例化代理和DUT:在环境中实例化代理和DUT,将它们连接起来。

代理模块负责实现和模拟芯片中的接口和功能,而DUT是待验证的芯片。

3.编写序列和生成器:根据测试需求,编写序列和生成器,用于生成输入数据和控制测试流程。

序列是生成器和监控器之间的通信通道,用于生成和检查输入数据,根据指定的顺序发送。

4.实现驱动和监控器:编写驱动和监控器代码,用于向DUT发送和接收数据。

驱动负责将序列中的数据发送给DUT,监控器负责检查和采集来自DUT的输出数据。

5. 运行仿真:通过调用uvm_config_db和uvm_top函数来完成对整个验证环境的配置和管理,并调用run_test函数来运行验证。

在实战中,我们需要注意以下几个关键点:1.数据驱动:UVM基于数据驱动的方法,即通过输入数据来驱动测试流程。

因此,在设计测试用例时,需要考虑各种可能的输入组合,并确保测试覆盖所有的边界条件。

《UVM实战》读书笔记思维导图

《UVM实战》读书笔记思维导图

第7章 UVM中的寄存器模型
7.1 寄存器模型简介
7.2 简单的寄存器模 型
7.3 后门访问与前门 访问
7.4 复杂的寄存器模 型
7.5 寄存器模型对 DUT的模拟
7.6 寄存器模型中一 些内建的seque...
7.7 寄存器模型的高 级用法
7.8 寄存器模型的其 他常用函数
第8章 UVM中的factory机制
的组成
2.2 只有
2
driver的验证
平台
3 2.3 为验证平
台加入各个组 件
4 2.4 UVM的终
极大作: c...
5 2.5 建造测试
用例
第3章 UVM基础
3.1
1
uvm_compo
n e n t 与 u v. . .
3.2 UVM的树 2
形结构
3 3.3 field
automation. ..
最新版读书笔记,下载可以直接修改
《UVM实战》
PPT书籍导读
读书笔记模板




本书关键字分析思维导图
代码
平台
用法 器
版权
信息
寄存
机制
参数
应用 模型
编程设计
第章
验证
迁移
基础
测试用例
使用
小而美
目录
01 第1章 与UVM的第 一次接触
02
第2章 一个简单的 UVM验证平台
03 第3章 UVM基础
04
4 3.4 UVM中打
印信息的控制
5 3.5
config_db机 制
第4章 UVM中的TLM1.0通信
4.2 UVM中各种端 口的互连

UVM实战指南

UVM实战指南

1. 这个callback结构并不能够真的改变widget对象的内部成员,以及处理的数据内容,仅仅能够输出一些讯息。

2. 对每一个widget的对象,都需要单独添加相关callback对象,假如程序中又创建了一个新的widget对象,那么这个对象的callback queue初始是空的,也就是没有callback。

必须再次添加才能让这个新的widget 调用相应的callback功能。

3. c allback只有一个地方,可以扩展到多个地方。

另外也可以使用function,而不仅仅是task.工厂模式的简单理解首先,如果一个客户要用到一款手机,一般的做法是客户去创建一款手机,然后拿来用:这时,客户需要知道怎么去创建一款手机,客户和手机就紧密耦合在一起了.为了降低耦合,就出现了工厂类,把创建手机的操作放到了工厂里面去,客户直接使用工厂的创建手机方法,传入想要的手机型号就行了,而不必去知道创建的细节.随着手机种类越来越多,简单工厂模式出现了弊端,每次新加入手机品种,工厂类都要加入新的创建逻辑.这时我们就可以把工厂类定义成了接口,而每增加一种新的手机,就增加该手机对应工厂类的实现,这样工厂的设计就可以扩展了,而不必去修改原来的代码:随着工厂规模的继续扩大,工厂开始生产充电器了.这时候工厂有二个系列的产品:手机和充电器.而手机必须使用对应的充电器才能使用.这时候分别使用一个手机工厂和一个充电器工厂都不能满足我们的需求,我们必须确认手机跟充电器的对应关系.我们把工厂改造一下,把手机工厂跟充电器工厂联系在一起:这一章主要包括:∙使用UVM库∙基本类∙TLM端口∙工厂模式∙消息和汇报∙配置机制4.1 使用UVM库为了使用UVM库,用户需要:∙编译UVM包的顶层文件:uvm_pkg.sv∙在所需要的地方导入uvm_pkg∙包含UVM宏4.1.1 Hello World例子下面的例子功能是在屏幕上显示消息:"Hello World!”1 // Compile the UVM package2 `include ―uvm_pkg.sv‖3 module hello_world_example;4 // Import the UVM library and include the UVM macros5 import uvm_pkg::*;6 `include ―uvm_macros.svh‖7 initial begin8 `uvm _info(“info1”,“Hello World!”, UVM _LOW)9 end10 endmodule: hello_world_example第1-2行:注释用来提醒需要编译UVM库。

uvm实战学习笔记

uvm实战学习笔记

uvm实战学习笔记《UVM实战(卷1)》学习笔记看了第1/2/3/4/5/6/8/9.1 这几个章节。

第一章是综述,第二章是一个具体的例子,学习笔记从第三章相关内容开始。

我个人觉得UVM重要的部分(特点的部分):1)factory机制(override config_db)2)TLM传递3)phase机制4)sequence-sequencer 以及virtual seq/sqr内容中的截图基本来自于UVM源代码、书自带的例子和《uvm1.1应用指南及源代码分析》这个PDF里的。

需要结合书(《UVM实战(卷1)》第1版)来看这个笔记。

第3章UVM基础3.1 uvm_component和uvm_object常用的类名字:这个图是从作者张强的《uvm1.1应用指南及源代码分析》里截得,不如书上3.1.1里的图好。

uvm_sequencer 也是代码里必须有的,所以我加了uvm_sequenceruvm_void是一个空的虚类。

在src/base/uvm_misc.svh中定义:红框的是我们搭testbench的时候用的比较多的基类。

常用的uvm_object派生类:sequencer给driver的transaction要派生自uvm_sequence_item,不要派生自uvm_transaction所有的sequence要派生自uvm_sequence或者uvm_sequence 的派生类,可以理解为sequence是sequence_item的组合(集合)。

driver向sequencer索要item,sequencer检查是否有sequence要发送item,当发现有item待发送时,就把这个item发给driver.常用的uvm_component派生类:所有的driver要派生自uvm_driver. driver用来把sequence_item中的信息驱动到DUT端口上,从transaction-level 向signal-level的转换。

uvm实战学习笔记

uvm实战学习笔记

《UVM实战(卷1)》学习笔记看了第1/2/3/4/5/6/8/9.1 这几个章节。

第一章是综述,第二章是一个具体的例子,学习笔记从第三章相关内容开始。

我个人觉得UVM重要的部分(特点的部分):1)factory机制(override config_db)2)TLM传递3)phase机制4)sequence-sequencer 以及virtual seq/sqr内容中的截图基本来自于UVM源代码、书自带的例子和《uvm1.1应用指南及源代码分析》这个PDF里的。

需要结合书(《UVM实战(卷1)》第1版)来看这个笔记。

第3章UVM基础3.1 uvm_component和uvm_object常用的类名字:这个图是从作者张强的《uvm1.1应用指南及源代码分析》里截得,不如书上3.1.1里的图好。

uvm_sequencer也是代码里必须有的,所以我加了uvm_sequenceruvm_void是一个空的虚类。

在src/base/uvm_misc.svh中定义:红框的是我们搭testbench的时候用的比较多的基类。

常用的uvm_object派生类:sequencer给driver的transaction要派生自uvm_sequence_item,不要派生自uvm_transaction所有的sequence要派生自uvm_sequence或者uvm_sequence的派生类,可以理解为sequence是sequence_item的组合(集合)。

driver向sequencer索要item,sequencer检查是否有sequence要发送item,当发现有item待发送时,就把这个item发给driver.常用的uvm_component派生类:所有的driver要派生自uvm_driver. driver用来把sequence_item中的信息驱动到DUT端口上,从transaction-level向signal-level的转换。

uvm实战学习笔记

uvm实战学习笔记

u v m实战学习笔记 WTD standardization office【WTD 5AB- WTDK 08- WTD 2C】《U V M实战(卷1)》学习笔记看了第1/2/3/4/5/6/8/ 这几个章节。

第一章是综述,第二章是一个具体的例子,学习笔记从第三章相关内容开始。

我个人觉得UVM重要的部分(特点的部分):1)factory机制(override config_db)2)TLM传递3)phase机制4)sequence-sequencer 以及virtual seq/sqr内容中的截图基本来自于 UVM源代码、书自带的例子和《应用指南及源代码分析》这个PDF里的。

需要结合书(《UVM实战(卷1)》第1版)来看这个笔记。

第3章 UVM基础uvm_component和uvm_object常用的类名字:这个图是从作者张强的《应用指南及源代码分析》里截得,不如书上里的图好。

uvm_sequencer也是代码里必须有的,所以我加了uvm_sequenceruvm_void是一个空的虚类。

在src/base/中定义:红框的是我们搭testbench的时候用的比较多的基类。

常用的uvm_object派生类:sequencer给driver的transaction要派生自uvm_sequence_item,不要派生自uvm_transaction所有的sequence要派生自uvm_sequence或者uvm_sequence的派生类,可以理解为sequence是sequence_item的组合(集合)。

driver向sequencer索要item,sequencer检查是否有sequence要发送item,当发现有item待发送时,就把这个item发给driver.常用的uvm_component派生类:所有的driver要派生自uvm_driver. driver用来把sequence_item中的信息驱动到DUT端口上,从transaction-level向signal-level的转换。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(*)题外话:TLM可能是UVM中最重要的概念,掌握了TLM,就可以开始尝试编写一些小程序了。

翻译这篇文章,也是为了巩固加强对TLM的理解。

(*)几个名词:transaction翻译为事务或者交易;packet翻译为封包,packet属于transaction;monitor翻译为监视器;driver翻译为驱动器;scoreboard翻译为记分牌;有些词汇直接被运用到UVM源代码上,所以有时候用英文更容易描述清楚。

(*)语言的目的是为了交流,翻译不是为了纯粹的语言转换,而是为了传递思想。

4.6 UVM中事务级建模(TLM)20多年前,设计者从门级转向RTL级。

这次转换来自于标准Verilog/VHDL的RTL编码风格,以及RTL综合实现工具的推出。

使用RTL最大的好处是让设计者更多的专注于时序行为的设计以及功能的正确性,而很少考虑门级相关设计。

TLM(事务级建模)同样在抽象级别上更进了一步,在设计和验证领域都有出现。

通过TLM, 中心放在系统级别的各种事务流的建模,而更少关心时钟级别的行为。

TLM在测试向量中已经使用多年。

通常,在产生激励和覆盖率检查的时候使用事务而不是用时钟级别建模,这种方式就是TLM. 为了验证RTL级别的DUT(需要测试的模块),测试向量使用事务发生器(transactor)(有时也称为总线功能模型(BFM)),将RTL级和事务级进行转换。

在UVM中,此事务发生器也被叫做驱动(driver)或者收集器(collector)。

TLM中,事务通过方法调用和类对象来建模。

使用事务级而不是信号级别来建模有几个显著的好处:•TLM比RTL更简洁,仿真速度快。

•TLM模型的抽象级别更高,更加契合验证工程师或设计工程师对内部功能的考虑,从而使得建模更简单,并且更容易被其他工程师理解。

•TLM模型将不符合复用的部分移到模型之外,因此TLM很适合复用。

并且,TLM使用面向对象的技术,比如继承、实现和接口分离的技术。

TLM的采纳依赖于标准的TLM建模技术的出现,就像RTL综合流程的采纳归功于标准RTL 编码风格的实现。

幸运的是,近些年来,几个重要的标准TLM应用程序接口(API)得到定义。

在EDA和ESL领域,两个最重要的标准是开放SystemC计划(OSCI)的TLM1.0以及TLM2.0标准。

OSCI TLM 1.0标准是一个简单通用的TLM API, 用来建模消息传递。

在消息传递时,对象(事务)在组件之间传递的方式和封包在网络之间传递的方式类似。

在发送封包的消息传递中,发送端和接收端之间没有共享的状态,他们之间的通讯讯息仅仅包含在消息中。

The OSCI TLM 2.0标准能够用来开发SystemC中的高速虚拟平台模型。

TLM2.0标准特别被用作片上存储映射的总线系统,包含许多能够进行片上总线互联的整合复用模块. OSCI TLM 1.0和TLM 2.0是互相独立的标准,满足不同的需要。

有人可能通过其命名方式认为TLM2.0优于TLM1.0,但是实际上并不是这样。

UVM提供的TLM 类和API是基于TLM1.0标准的。

这是因为TLM通用消息传递语法很好的满足了多种验证组件的事务级建模。

TLM1.0也适合多种语言之间的通信建模,比如SystemVerilog, SystemC以及e语言之间的建模。

UVM中TLM1.0接口甚至可以用来和SystemC中的TLM2.0模型进行通讯。

这一章节阐述了UVM中TLM的几个重要概念,让读者理解如何使用TLM来构造可复用的验证组件。

关于TLM各种类的更详细说明请参阅UVM参考手册。

4.6.1 UVM中TLM的关键概念4.6.1.1 对事务建模在UVM中, 从uvm_sequence_item继承而来的任何类都是事务。

用户根据需要定义事务类的字段和方法,用来在验证环境中不同组件之间进行信息交换。

例如,一个简单的包如下所示:1.class simple_packet extends uvm_sequence_item;2.rand int src_addr;3.rand int dst_addr;4.rand byte unsigned data[];5.constraint addr_constraint { src_addr != dst_addr; }6....7.endclass事务通常包含足够多的数据字段让驱动器(driver)或者事务产生器能够产生事务的真实信号级别的动作表示。

事务也可以包含更多的数据字段,来控制数据的随机产生,或者是验证环境中的其他目的。

可以通过继承方式来增加更多的数据成员,方法以及约束。

后续章节将会说明,如何通过继承事务,从而花费最小的代价来完成特定的验证任务。

4.6.1.2 TLM调用端口(Ports)和实现端口(Exports)UVM中的TLM使用一系列特殊的方法调用来进行模型之间的事务通讯。

在UVM中,一个port对象定义了一系列可以被调用的方法,而export对象提供了对这些方法的实现。

在构建验证环境的时候,port和export通过connect()函数进行连接,之后,调用port端的TLM方法将会执行export中对此TLM方法的实现。

实例4.7: 使用put方法将事务从生产者传递给消费者在UVM的TLM中,put接口能够被用来将transaction从生产者发送给消费者。

一个简单的生产者示例如下:class producer extends uvm_component;uvm_blocking_put_port #(simple_packet) put_port;function new(string name, uvm_component parent);put_port = new("put_port", this);endfunctionvirtual task run();simple_packet p = new();..put_port.put(p);endtaskendclass之前有提到,put port通过调用connect()函数连接到put export. 对上面的put方法的实现将由消费者组件来完成,如下:class consumer extends uvm_component;uvm_blocking_put_imp #(simple_packet, consumer) put_export;task put(simple_packet p);// consume the packetendtaskendclass将port连接到export之后,调用生产者的put方法将会触发消费者的put方法实现得到执行,从而使得simple_packet对象从生产者传递到了消费者。

TLM也引入了标准的图形化示意来描述不同类型的通讯。

put通讯流程的模块图如下:图4-2:简单的生产者/消费者的put通讯TLM接口定义了一些生产者和消费者都必须遵循的简单规则,在这个示例中,对于put接口,规则如下:•put方法的实现在执行时有可能阻塞,因此对put方法调用的对象必须负责确保在put方法阻塞的时候能够正常工作。

•生产者负责创建封包,而消费者不能修改封包(如果需要修改,必须先拷贝一份新的)满足了上述规则,能够很容易的将生产者或者消费者替换成其他的模型,只要这些模型满足相同的TLM接口即可。

TLM API提供了一个简单的能够互相操作的接口协议,类似硬件世界中的USB,以太网标准一样。

由于能够容易的替换模型,UVM的TLM在满足模型复用和验证目标上发挥了关键性的作用,我们可以在后续章节进一步了解。

上述示例,在生产者中存在单独一个进程,当调用put方法时,控制流转到消费者中的put 方法中。

put方法将事务沿着方法调用控制流相同的方向进行传送。

在某些情况,由于消费者中包含一个需要事务数据的进程,希望将事务沿着TLM方法调用控制流相反的方向传送。

在这种情形下,生产者/消费者将使用get接口来实现,示例如下:1.class producer_2 extends uvm_component;2.uvm_blocking_get_imp #(simple_packet, producer_2)get_export;3.task get(output simple_packet p);4.simple_packet p_temp = new();5. ...6.p = p_temp;7.endtask8.endclass9.class consumer_2 extends uvm_component;10.uvm_blocking_get_port #(simple_packet) get_port;11.function new(string name, uvm_component parent);12.get_port = new("get_port", this);13.endfunction14.virtual task run();15.simple_packet p;16. ...17.get_port.get(p);18.endtask19.e ndclass在上面的put接口示例中,UVM对使用put接口的生产者和消费者设定了如下规则:•get方法实现可能被阻塞。

因此调用方必须确保当此方法阻塞的时候也能够正确工作。

•get方法的实现必须创建并返回一个事务对象给get的调用方。

get接口通讯的图形化示意如下:图4-3:消费者调用生产者中的get方法4.6.1.3 连接port和export上面例子中,port对export的连接是通过调用connect方法完成的。

用户需要在消费者/生产者的父组件中的connect回调函数[仿真阶段函数connect())中调用此connect方法:class parent_comp extends uvm_component;producer producer_inst;consumer consumer_inst;...virtual function void connect();producer_inst.put_port.connect(consumer_inst.put_export);endfunctionendclass连接port和export的通用准则是:子组件中port的connect方法以子组件export作为参数进行调用.4.6.1.4 port和port的连接以及export和export的连接Verilog RTL中,模块的端口(port)代表信号级别的界面。

相关文档
最新文档