当前位置:主页 > 技术文档 > UVM 下载

The UVM Primer(UVM指南) 完整版

  • 更新:2020-10-08 14:15:49
  • 大小:18.7 MB
  • 热度:554
  • 审核:许端静
  • 类别:技术文章
  • 格式:PDF

  • 资源介绍
  • 相关推荐

The UVM Primer中文(UVM指南)是一逃用于介绍UVM入门的最佳用书,形象介绍了UVM必要的组件,并结合简单的实验进行实现。非常基础,适合没基础的人,需要的朋友可下载试试!

从UVM的源码分析 ,为什么UVM要这样写;让你知其然,更知其所以然。文档是中文翻译过的,更有利于初学者学习。

本书的优点如下:

1. DUT复杂度适中, 因此很多特性(特别是sequence, 特别是Fibonacci数列sequence)都是言之有物的, 相比之下UVM实战中的DUT太简单了, 对于验证菜鸟来讲很多特性讲起来就体会不了这么深;
2. 包含了覆盖率的内容, 这是很多UVM读物里都不会涉及的东西, 结合上一点来讲, 这个覆盖率部分写的很好, 展示了完整的从bin的定义到采集的过程, 我当时就是看了这个, 对于Functional Coverage这个概念有了顿悟的感觉;
3. 对OOP有着恰到好处(也许是对我这个OOP门外汉来讲是恰到好处的, 蛤蛤)的讲解. 由于作者有着Java的背景, 对于Systemverilog的理解的高度是很高的, 一些语法结构的编译时行为和运行时行为都信手拈来让人膜拜, 设计模式的讲解也很到位. 其中对多态和泛型(参数化类)的讲解是很重要的, 个人感觉掌握这两个语法对UVM源码的学习是很关键的.
4. 一些编程思想和规范的传达, 比如要强调模块化和复用, 一个模块只完成简单的任务, 不要复制代码(DRY, Don't Reapeat Yourself)等.
5. 内容丰富但是篇幅短小, 英文版200页出头, 中文版140页

资源下载

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

网友留言

uvm实用指南
任新翰

UVM基础

UVM的全程为,Universal Verification Methodology,意为通用验证方法学,前身是OVM,貌似是mentor弄的一套东西,本质上,验证方法学只是对systemverilog进行一些常用类的封装,按照一套统一的流程,进行验证活动,经过多次对比之后,发现方法学只是各个验证公司间博弈的产物,eetop上有人说过真正牛逼的验证应该是自己有一套合适的验证方法,鉴于他的名字已经叫“通用”了,所以应该对各个验证结构来说是比较通用的。

UVM_PHASE

UVM的流程核心是phase,phase的中文意思是相,跟VMM1.1的九步法比起来,是要繁琐很多,但是用起来才发现这些隔离的phase是非常方便对于仿真的精确控制的,粗略来说,分为头4、尾4共8个function类型的phase,只干事,不消耗时间,中间有一个run_phase还有个4x3个小phase,run_phase和这12个phase是并行的,只是run_phase自己独成一派,而其他的12个就要乖乖的顺序执行了,用一些伪代码来表示这个过程更加明确一些

fork
    begin
        run_phase();
    end
    begin
        phase1();
        phase2();
        ……
        phase12();
    end
join_none

核心流程对于理解各个组件之间的仿真顺序至关重要,现在我们知道了phase这个玩意儿,就要说说UVM中包含的验证组件了,其实还有更重要的一个机制对于phase的控制非常精细,这个就是uvm_objection,不过这个在这里讲的话可能没什么概念

uvm实战指南
印灵阳

UVM(universal verification method)作为通用验证方法学,解决了什么问题?

验证平台的规范化

验证环境包括激励输入和输出数据的比对。UVM将激励、比对、reference model分别实现为不同的类。在子IP验证环境中使用的组件,可以在IP验证环境中复用。

对System Verilog的封装

System Verilog引入了类似C++,java的语法,可以实现为类。类给我们带来的好处就是封装、继承、多态。

展开说一下,

UVM环境

UVM的整体环境封装在uvm_env中,这可以看作是与真正实例化module的tb同级的环境。

UVM Sequence

UVM Sequence是负责发送transaction包的激励来源。

比如axi总线的一个transaction,在真正的verilog中,是按照clock的一拍一拍的数据和地址,在UVM中,可以定义一个uvm_sequence_item,将这一整包的数据和地址封装为成员为int address, int data[]的类;sequence就是负责产生各种各样的transaction。

注意:

1)并不是验证环境中只有一个sequence,而是可能会存在多个sequence。

比如存在以下三种sequence:

专门发送长包的sequence

专门发送短包的sequence

发送存在错包的sequence

将这三种sequence包装为一个virtual sequence,即可复用其他的验证环境,发送随机间隔的长包、短包、错包sequence。

2)sequence和transaction都是uvm_sequencet_item类型,都是object,而非component。

UVM Sequencer

UVM Sequencer主要负责将Sequence产生的transaction,转发给driver。

在case中可以通过设置*sequence.start(*sequencer)指明特定sequence是运行在哪个sequencer上的。

在sequence中包括m_sequencer成员,在调用sequence的start方法时,会调用set_item_context方法,而这个方法又进一步调用了set_sequencer方法,将uvm_sequence_item中的m_sequencer成员指定了sequencer。

通过m_sequencer这个方式,sequence可以明确当前运行在哪个sequencer上,获取sequencer的信息(需要将m_sequencer通过cast转换为扩展类sequencer类型)。

UVM Driver

UVM Driver的作用:

将transaction类分解为具体的时序信号,传递到interface接口上;

完成与sequencer的握手,即来自sequencer的request,driver将会返回response;