谈UVM之sequence-item见解 sequencer特性及应用(下)
- 格式:doc
- 大小:17.50 KB
- 文档页数:4
UVM中常用类的派生关系在UVM(Universal Verification Methodology)中,常用类的派生关系是指各个类之间的继承和派生关系。
UVM是一种用于验证集成电路设计的标准方法学,它提供了一套丰富的类库,包括一些常用的基础类,如uvm_component、uvm_object和uvm_sequence等。
这些基础类可以根据需要进行扩展和派生,以创建具有特定功能的自定义类。
在UVM中,常用的类之间通常存在着继承和派生的关系。
继承是一种面向对象的编程概念,它允许一个类继承另一个类的属性和方法,并可以在此基础上添加或修改功能。
在UVM中,类的继承关系有助于代码的重用和组织,可以简化验证环境的设计和维护。
常用的派生关系可以分为以下几种:1. 组件(Component)的派生关系:在UVM中,uvm_component是所有组件类的基类。
组件是UVM验证环境的基本构建块,可以代表各种功能模块,如驱动器、监视器和环境等。
其他类型的组件类常常派生自uvm_component,以实现特定的功能和接口。
例如,可以派生出uvm_driver和uvm_monitor等类,用于驱动信号和监视信号。
2. 对象(Object)的派生关系:uvm_object是所有对象类的基类。
对象是UVM中的一种基本数据结构,用于存储和传递数据。
在UVM中,可以派生出自定义的对象类来保存测试用例和配置信息等。
通过继承和派生关系,可以在不影响基础功能的情况下,为对象添加额外的数据和操作。
3. 序列(Sequence)的派生关系:uvm_sequence是所有序列类的基类。
序列是一系列事务或事件的集合,用于描述设备或设计的操作序列。
通过派生自uvm_sequence,可以创建具有不同功能的自定义序列类,以满足各种测试场景的需求。
例如,可以创建uvm_sequence_item的子类,并通过添加新的数据字段或覆盖已有方法,来扩展序列的功能和行为。
uvm验证方法学的理解摘要:1.UVM简介2.UVM信息级别3.UVM冗余度控制4.如何应用UVM进行验证5.总结正文:UVM(Universal Verification Methodology)是一种验证方法学,广泛应用于电子设计自动化(EDA)领域。
UVM旨在提供一种统一、可重用的验证环境,以提高验证效率和可靠性。
本文将详细介绍UVM的基本概念、信息级别、冗余度控制以及如何应用UVM进行验证。
1.UVM简介UVM起源于1995年,由Mentor Graphics公司的David Flannery首次提出。
它是一种面向对象的验证方法学,基于组件架构,可以轻松地集成到现有的验证环境中。
UVM提供了一套丰富的库,包括常用的验证组件、传输层协议和消息机制等,使得验证工程师可以快速构建复杂的验证环境。
2.UVM信息级别UVM信息级别分为以下几种:- uvmNone:最低级别,不输出任何信息。
- uvmLow:输出较少的信息,主要用于错误诊断。
- uvmMedium:默认级别,输出较为详细的信息。
- uvmHigh:输出详细的信息,用于调试和问题定位。
- uvmDebug:最高级别,输出极为详细的信息,适用于深入分析。
通过设置不同的信息级别,UVM可以控制输出的日志信息,帮助我们专注于关心的内容。
3.UVM冗余度控制UVM通过冗余度级别的设置,提高了仿真日志的可读性。
在打印信息之前,UVM会比较要显示信息的冗余度级别与默认的冗余度阈值。
如果小于等于阈值,就会显示,否则不会显示。
默认的冗余度阈值为uvmMedium,所有低于等于uvmMedium的信息都会被打印出来。
4.如何应用UVM进行验证应用UVM进行验证的基本步骤如下:- 创建UVM环境:定义UVM域、组件和消息类型。
- 编写测试序列:针对待验证的IP(Intellectual Property)编写测试用例,生成激励。
- 应用激励:将测试序列应用到待验证的IP上,进行仿真。
UVM序列篇之七:sequence的层次化(上)因此,我们本节也就MCDF的实际验证场景出发,引申出下⾯的⼏个概念完善sequence的层次化:hierarchical sequencevirtual sequencelayering sequence通过对这三个与sequence层次化有关的概念的解读和实际场景的分析,我们希望读者在读了本⽂之后,可以就不同的sequence场景复⽤设计出适合⾃⼰验证场景的sequence结构。
⽽这三者之间,在⼀些特定情况下,也会实现有机组合,最终为整体的验证复⽤提供良好的⽀持。
Hierarchical Sequence在验证MCDF中的寄存器模块时,verifier将SV的验证环境进化到了UVM环境之后,有了下⾯的这样⼀幅验证框图。
有了验证结构,就进⼊了构建验证场景的环节,在这⾥⾯,关于测试寄存器模块的场景,可以将其拆解为:设置时钟和复位测试通道1的控制寄存器和只读寄存器测试通道2的控制寄存器和只读寄存器测试通道3的控制寄存器和只读寄存器也许读者对此会有不同的测试环节,然⽽⽆论怎么设计,这其中的理念都脱离不开对于底层测试sequence的合理设计。
⽽上⾯的场景拆解下的sequence需要挂载的都是reg_master_agent中的sequencer。
这⾥我们给出⼀段代码⽤来表⽰底层sequence的设计和顶层hierarchical sequence对这些底层sequence的结构化使⽤。
在sequence 与driver 之间传送item 时,对于item 应该包含的数据内容在之前的《sequence 和item 》⼀节中就介绍过,⽽在上⾯的这段简单例码,对于item 类bus_trans 的定义也包含了⼏个简单的域cmd 、addr 和data 。
在后续的clk_rst_seq 和reg_test_seq 这两个底层的sequence 在例化和传送item 时,就通过随机化bus_trans 中的域来实现不同的命令和数据内容。
uvm 基础知识UVM是一种基于SystemVerilog语言的硬件验证方法学,它为验证工程师提供了一套验证环境和方法,帮助他们设计和开发复杂的硬件验证测试台。
以下为UVM的基础知识:1. UVM环境:UVM环境由各种组件组成,包括顶层测试环境,验证IP,驱动(driver),监控(monitor),事务(transaction),序列(sequence)和配置参数等。
2. UVM顶层测试环境:UVM顶层测试环境是UVM环境的主体,它实例化和连接各种验证组件,管理验证过程和数据路径。
3. 驱动(Driver):驱动是UVM环境的一个组件,负责将测试向硬件发送数据。
它接收事务(transaction)并将其转换为物理信号发送到被测设备。
4. 监控(Monitor):监控是UVM环境的一个组件,用于监听硬件信号并将其转换为事务(transaction)。
它将被测设备的输出信号捕获并生成与之对应的事务。
5. 事务(Transaction):事务是UVM环境中的一种数据结构,它封装了验证过程中的数据和控制信息。
事务用于在驱动和监控之间传递数据。
6. 序列(Sequence):序列是UVM环境中的一个组件,用于生成一系列的事务。
序列定义了事务的数据和控制信息,以及生成和管理事务序列的逻辑。
7. UVM Testbench:UVM Testbench是UVM环境的一部分,它是整个验证环境的顶层组织结构。
UVM Testbench包含了顶层测试环境、监控、驱动、序列等组件。
8. 配置参数:UVM使用一种叫作配置参数(configuration parameter)的机制,用于动态地配置和管理各种验证组件的行为和功能。
9. UVM测试用例:UVM测试用例是UVM环境中的一个组件,它描述了验证目标的特定功能和行为。
测试用例通常由一个或多个序列组成,用来生成一系列的事务。
以上是UVM的基础知识,了解这些概念可以帮助你更好地理解和应用UVM验证方法学。
uvm知识点总结UVM 架构UVM 的架构包括以下几个重要部分:1. UVM 库 (UVM Library): UVM 库是一个可复用的验证组件集合,包含了多个验证类,如uvm_component、uvm_object、uvm_sequence 等,这些类组成了 UVM 框架。
2. UVM Testbench: UVM Testbench 是一个验证环境框架,它是基于 UVM 库构建起来的,用于创建验证环境、生成测试用例、进行仿真等。
3. UVM Test: UVM Test 是一个测试用例,主要由 UVM sequence 和 UVM 配置对象构成,它是用来验证被测试设计的功能是否正确。
4. UVM Agent: UVM Agent 是一个验证组件,是用于连接被测试设计和验证环境的中间层;它包括了 driver、monitor、sequence、sequencer 等。
基本概念UVM 中的一些基本概念包括以下内容:1. UVM Component: UVM 组件是 UVM 测试环境中的基本单元,用于组织和管理验证环境中的各种功能。
UVM 组件包括了 uvm_component、uvm_object、uvm_sequence 等。
2. UVM Object: UVM 对象是 UVM 中的一个基本概念,它是 uvm_component、uvm_sequence 和 uvm_transaction 的基类,用于实现类似于面向对象编程的功能。
3. UVM Phase: UVM 通过阶段 (Phase) 来管理验证环境的初始化、运行和结束等过程。
UVM 提供了一系列的任务来进行阶段的管理,如 uvm_phase、uvm_sequence、uvm_objection 等。
4. UVM Transaction: UVM 事务是指在验证中进行的交互过程,包括了数据传输、信号传递、命令执行等;UVM 提供了 uvm_transaction 类来实现事务级建模。
uvm验证方案介绍UVM验证方案介绍引言在现代芯片设计过程中,验证是至关重要的一步。
为了确保设计的正确性和可靠性,需要进行全面的验证工作。
UVM(Universal Verification Methodology)是一种通用的验证方法学,被广泛应用于芯片设计领域。
本文将介绍UVM验证方案的基本概念、组成部分以及常见的应用场景。
一、UVM验证方案的基本概念1.1 UVM的定义UVM是一种基于SystemVerilog语言开发的验证方法学,旨在提供一种通用的、可重复使用的验证环境。
它通过使用预定义的验证组件和方法,简化了验证工作的复杂性。
1.2 UVM的特点UVM具有以下几个特点:- 可重用性:UVM提供了一套标准的验证组件和方法,可以在不同的项目中重复使用。
- 可扩展性:UVM允许用户根据自己的需求进行扩展,以适应不同的验证场景。
- 易学易用:UVM的语法和结构与SystemVerilog相似,对于熟悉SystemVerilog的工程师来说,学习和使用UVM相对容易。
二、UVM验证方案的组成部分2.1 UVM基本组件UVM验证方案由以下几个基本组件组成:- Agent:负责生成和接收待验证模块的输入输出数据。
- Monitor:监控待验证模块的输出,并将其转化为可读的信号。
- Driver:将生成的输入数据发送给待验证模块。
- Sequencer:根据测试场景生成序列,控制Driver的数据发送。
- Scoreboard:对预期输出和实际输出进行比对,检测错误。
- Environment:提供测试环境的配置和管理。
2.2 UVM高级组件除了基本组件外,UVM还提供了一些高级组件,用于简化和优化验证工作:- Factory:用于动态创建和配置验证组件。
- Configuration:用于配置验证环境的参数和属性。
- Register:用于访问和配置芯片内部寄存器。
三、UVM验证方案的应用场景3.1 存储器验证在存储器验证中,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里的。
需要也是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寄存器模型的介绍中,会将之前的设计MCDF 中的寄存器模块简化出来,通过硬件的寄存器模型、访问的总线UVC 以及寄存器模型之间建立一个小的验证环境,以此贯穿本章的内容:•寄存器有关的工业流程。
•寄存器模型的UVM类和类之间的关系。
•如何将寄存器模型集成到现有环境,与总线UVC桥接,与DUT 模型绑定。
•寄存器模型的常用方法和预定义的sequence。
•寄存器测试和功能覆盖率的实际用例。
硬件中的各个功能模块都可以由处理器来配置功能以及访问状态,而与处理器的对话即是通过寄存器的读写来实现的。
寄存器的硬件实现是通过触发器,而每一个比特位的触发器都相应代表了寄存器功能描述(function specification)表上的一位。
一个寄存器一般由32个比特位构成,将单个寄存器拆分之后,又可以分为多个域(field),不同的域往往代表着某一项独立的功能。
单个的域可能由多个比特位构成,也可能由单一比特位构成,这取决于该域的功能模式可配置的数目。
而不同的域,对于外部的读写而言,又大致可以分为WO (write-only,只写),RO(read-only,只读)和RW(read andwrite,读写),除过这些常见的操作属性以外,还有一些特殊行为(quirky)的寄存器,例如写后擦除模式(clean-on-read,RC),只写一次模式(write-one-to-set,W1S)。
uvm知识点UVM知识点UVM(Universal Verification Methodology)是一种用于硬件验证的标准方法学。
它提供了一套完整的验证框架和库,可用于设计和验证工程师开发的各种硬件设计。
UVM的主要目标是提高验证效率、加速验证流程,并提供一种可重用性的验证方法。
下面将介绍UVM的几个重要知识点。
1. UVM中的基本概念UVM中有几个基本概念需要理解。
首先是UVM Testbench,它是一个验证环境的集合,包括UVM Agent、UVM Sequence、UVM Driver、UVM Monitor等组件。
UVM Agent是验证环境中的一个重要组成部分,负责模拟设计中的一个或多个接口,并与设计进行通信。
UVM Sequence是一个用于生成测试向量的对象,它通过UVM Driver将测试向量发送给设计。
UVM Monitor是用于监控设计中信号变化的组件。
2. UVM中的消息和日志在UVM中,消息和日志用于记录验证过程中的重要信息。
UVM提供了几种不同级别的消息,包括FATAL、ERROR、WARNING、INFO和DEBUG。
开发人员可以根据需要选择适当的级别来记录不同类型的消息。
UVM还提供了灵活的消息过滤机制,可以根据需求过滤和控制消息的输出。
3. UVM中的事务和序列事务是在UVM中用于描述和传输数据的基本单元。
它包含了一些用于描述数据的字段,例如地址、数据和控制信号等。
事务通常由UVM Sequence生成,并通过UVM Driver发送给设计。
序列是一组事务的集合,用于描述测试向量的生成方式。
UVM提供了丰富的序列控制机制,可以灵活地生成各种测试向量。
4. UVM中的环境配置UVM提供了一种灵活的配置机制,可以在运行时配置验证环境的各个组件。
通过使用UVM的配置对象,可以在运行时修改和控制环境中的各种参数和属性。
这种配置机制可以大大提高验证环境的灵活性和可重用性。
UVM方法学在核安全级可编程逻辑仿真验证中的应用张运涛;宋立新;曹宗生;边庆杰【摘要】核电DCS系统中大量应用CPLD及FPGA产品,可编程逻辑产品的仿真验证是保证产品质量的重要环节.本文不同于传统的验证方法,首次将UVM验证方法应用于核安全级DCS产品可编程逻辑验证.采用独立开发的测试IP,通过灵活复用,为搭建仿真测试环境带来方便,简化了过程.采用受约束随机激励及自动检查保证测试的准确性及充分性,避免单纯用人工检查,在保证覆盖率指标的基础上,提高了测试自动化水平.目前,此方法已经用于DCS系统通信路由以及优选装置的逻辑验证.【期刊名称】《自动化博览》【年(卷),期】2016(000)011【总页数】6页(P61-65,69)【关键词】UVM方法学;核安全级;可编程逻辑;仿真验证【作者】张运涛;宋立新;曹宗生;边庆杰【作者单位】北京广利核系统工程有限公司;北京广利核系统工程有限公司;北京广利核系统工程有限公司;北京广利核系统工程有限公司【正文语种】中文FPGA及CPLD在核电DCS领域被大量应用。
可编程逻辑产品的验证是保证产品安全性、正确性的重要环节[1,2]。
针对可编程逻辑产品,采用行为仿真是保障产品安全性的重要验证方法。
当前对于核电DCS可编程逻辑产品仿真常用的方法是先根据测试大纲编写测试用例,所有测试用例专家评审通过后,通过编写定向测试激励进行功能仿真。
这种方法的局限性是针对每个测试用例都要重新编写测试环境,测试代码的更改量大,可复用性不高。
UVM (Universal Verification Methodology)是ASIC领域新兴的一种验证方法,主要用于IC芯片验证[3]。
它是一种面向对象的方法,由于它具备良好的可复用性及灵活性,UVM已经广泛用于国内外众多芯片厂商[3,4]。
本文介绍UVM方法在DCS系统可编程逻辑产品验证中的应用。
在通信路由板卡的可编程逻辑验证工作中引入UVM验证方法,在能保证与传统方法同等覆盖率指标的基础上,提高了Testbench的复用性及验证效率。
谈UVM之sequence/item见解sequencer特性及应用(下)本文将接着分享sequencer的相关知识,对于sequencer的仲裁特性有几种可选,UVM_SEQ_ARB_FIFO ;UVM_SEQ_ARB_WEIGHTED;UVM_SEQ_ARB_RANDOM ;UVM_SEQ_ARB_STRICT_FIFO等。
出其中三种需要特别区分外其它的模式可以满足绝大多数的仲裁需求。
sequencer的仲裁特性及应用在之前我们就谈到了,uvm_sequencer类自建了仲裁机制用来保证多个sequence同时挂载到sequencer时,可以按照规则允许特定的sequence中的item 优先通过。
在实际使用中,我们可以通过uvm_sequencer::set_arbitration (UVM_SEQ_ARB_TYPE val)来设置仲裁模式。
这里的仲裁模式UVM_SEQ_ARB_TYPE 有下面几种值可以选择:
UVM_SEQ_ARB_FIFO :默认模式。
来自于sequences的发送请求,按照FIFO先进先出的方式被依次授权,和优先级没有关系。
UVM_SEQ_ARB_WEIGHTED:不同sequence的发送请求,将按照它们的优先级被随机授权。
UVM_SEQ_ARB_RANDOM :不同的请求会被随机授权,而无视它们的抵达顺序和优先级。
UVM_SEQ_ARB_STRICT_FIFO:不同的请求,会按照它们的优先级以及抵达顺序来依次授权,因此与优先级和抵达时间都有关。
UVM_SEQ_ARB_STRICT_RANDOM:不同的请求,会按照它们最高的优先级被随机授权,与抵达时间无关。
UVM_SEQ_ARB_USER:用户可以自仲裁机制方法user_priority_arbitration()来裁定哪个sequence的请求优先被授权。
在上面的仲裁模式中,与priority有关的模式有UVM_SEQ_ARB_WEIGHTED、UVM_SEQ_ARB_STRICT_FIFO和UVM_SEQ_ARB_STRICT_RANDOM。
这三种模式的区别在于,UVM_SEQ_ARB_WEIGHTED的授权会落到各个优先级的请求上面,而。