
UVM
文章平均质量分 70
程序员Marshall
IC工程师 健身教练
公众号:程序员Marshall 小马街头健身
展开
-
芯片验证系列课程(涵盖Verilog,SystemVerilog,UVM以及脚本)
芯片验证系列课程(涵盖Verilog,SystemVerilog,UVM以及脚本)原创 2022-07-09 18:54:24 · 829 阅读 · 1 评论 -
关于如何自学数字验证+SystemVerilog+UVM,该怎么进行?
首先我们来看自学的路径:第一阶段首先你需要有基本的数电基础,明白数字电路运行的原理和一些基本的常识,这个时候推荐你看《数字电路基础》第二阶段在懂得了基础的数字电路原理和常识之后,你需要将该数字电路转换成实际的硬件,即需要用硬件描述语言去把这个电路给实现出来,市面上用的最多的还是Verilog,此时需要学习如何用Verilog硬件描述语言与一个具体的数字电路联系起来,需要建立硬件设计的思维和概念,学习基础的语法,并试着要用Verilog写一个简单的设计,如一个二分频电路,简单的加减法器等,并且用Ve原创 2021-01-22 12:53:34 · 9094 阅读 · 4 评论 -
可重用的UVM验证平台
基本思路开发一个可重用的UVM验证平台,一般按照如下顺序进行:对数据元素进行建模开发事务级组件开发driver开发sequencer连接driver和sequencer开发monitor例化上述组件开发agent开发env启动场景创建控制仿真结束功能检查并搜集覆盖率下面就按照这个思路走一遍。对数据元素进行建模查阅文档,根据数据格式要求进行开发从uvm_sequence_item基类中继承定义数据构造器添加控制字来对数据格式进行配置使用UVM 域原创 2020-10-24 17:39:27 · 1919 阅读 · 0 评论 -
UVM事务级模型
TLM使用事务级模型非常重要,因为任何事情在某一个抽象层面的思考会比陷入一堆琐碎的细节里效率要高得多。UVM提供了TLM的接口从而可以将各个组件通过事务级的方式连接在一起。Transaction两个组件之间事务处理所需要的封装数据包。TLM-1基本的TLM通信producer产生transaction并通过put端口发送给consumer。class producer extends uvm_component; uvm_blocking_put_port #(simple_trans)原创 2020-10-21 15:21:08 · 782 阅读 · 0 评论 -
UVM基本概念
UVM验证平台的典型结构典型的UVM验证平台一般即例化DUT和UVM类库并配置其中的连接关系。UVM动态例化,可以一次编译完成多个测试用例的测试。UVM TESTUVM TEST是UVM的顶层Component组件,主要完成例化和配置顶层env,并通过env调用sequence产生激励从而给到DUT。一般情况下,会有一个基本的base_test用于对env的例化以及其他共同的UVM元素组件的生成例化。然后其他的test则继承该base_test并有针对性地配置env或者选择不同的sequence来测原创 2020-10-19 18:15:16 · 5950 阅读 · 0 评论 -
UVM高级应用之interface
1.interface中除了可以定义变量,还可以定义任务和函数。还可以在其中使用always和initial语句。interface可以代替driver做很多事情,但是并不能代替driver做所有的事情。interface只适用于做一些低层次的转换,如8b10b转换、曼彻斯特编码等。这些转换动作是与transaction完全无关的。使用interface代替driver的第一个好处是可以让driver从底层繁杂的数据处理中解脱出来,更加专注于处理高层数据。第二个好处是有更多的数据出现在interfac原创 2020-10-16 11:39:05 · 4434 阅读 · 0 评论 -
UVM中代码的可重用性
callback机制1.在UVM验证平台中,callback机制的最大用处就是提高验证平台的可重用性。如果把两个项目不同的地方使用callback函数来做,而把相同的地方写成一个完整的env,这样重用时,只要改变相关的callback函数env可完全的重用。除了提高可重用性外,callback机制还用于构建异常的测试用例,只是在UVM中,构建异常的测试用例有很多种方式,如factory机制的重载,callback机制只是其中的一种。post_randomize函数是SystemVerilog提供的广原创 2020-10-16 10:16:49 · 1013 阅读 · 0 评论 -
UVM中的factory机制
SystemVerilog对重载的支持1.SystemVerilog是一种面向对象的语言。面向对象语言都有一大特征:重载。当在父类中定义一个函数/任务时,如果将其设置为virtual类型,那么就可以在子类中重载这个函数/任务:class bird extends uvm_object; virtual function void hungry(); $display("I am a bird, I am hungry"); endfunction function void hungry2(原创 2020-10-15 19:44:16 · 2417 阅读 · 2 评论 -
UVM中的寄存器模型
寄存器模型简介1.通常来说,DUT中会有一组控制端口,通过控制端口,可以配置DUT中的寄存器,DUT可以根据寄存器的值来改变其行为。这组控制端口就是寄存器配置总线。在没有寄存器模型之前,只能启动sequence通过前门(FRONTDOOR)访问的方式来读取寄存器,局限较大,在scoreboard(或者其他component)中难以控制。而有了寄存器模型之后,scoreboard只与寄存器模型打交道,无论是发送读的指令还是获取读操作的返回值,都可以由寄存器模型完成。有了寄存器模型后,可以在任何耗费时间原创 2020-10-15 15:45:03 · 5405 阅读 · 6 评论 -
UVM中的sequence
sequence基础1.如果将激励放在driver的main_phase中,是可行的,但是如果要对激励作修改,那么扩展性较差,所以我们将激励改为放在sequence中去写。driver就负责驱动激励就好了,而具体是什么样的激励,应该由sequence去完成。2.当定义完一个sequence后,可以使用start任务将其启动。my_sequence my_seq;my_seq = my_sequence::type_id::create("my_seq");my_seq.start(seque原创 2020-10-14 10:41:33 · 3156 阅读 · 0 评论 -
UVM验证平台的运行
phase机制1.task_phase消耗仿真时间,而function_phase则不消耗仿真时间。上图中的phase自上而下运行,其中灰色的部分为task_phase。最常用的是是build_phase、connect_phase和main_phase2.run_phase中的reset、configure、main、shutdown四个phase是核心,分别完成对DUT的复位、配置、运行和关闭等操作。function_phase基本都是自下而上执行的,当然这不包括build_phase,因原创 2020-10-10 22:32:23 · 2128 阅读 · 0 评论 -
UVM通信
3.UVM中的TLM1.0通信TLM1.01.如果要在两个uvm_component之间通信,如一个monitor向一个scoreboard传递一个数据,你可以采用下图中的方法:当然也可以从uvm_object派生出一个参数类config_object,在此类中有monitor要传给scoreboard的变量。在base_test中,实例化这个config_object,并将其指针通过config_db#(config_object)::set传递scoreboard和monitor。当monit原创 2020-10-09 23:08:25 · 1467 阅读 · 0 评论 -
UVM基础
uvm_component与uvm_object1.几乎所有的类都派生于uvm_object,包括uvm_component。uvm_component有两大特性是uvm_object所没有的:一是通过在new的时候指定parent参数来形成一种树形的组织结构;二是有phase的自动执行特点。下图是常用的UVM继承关系:从图中可以看出,从uvm_object派生出了两个分支,所有的UVM树的结点都是由uvm_component组成的,只有基于uvm_component派生的类才可能成为UV原创 2020-10-08 21:13:47 · 3136 阅读 · 2 评论 -
一个简单的UVM验证平台
1.SystemC是基于C++的,用户需要自己管理内存,容易发生内存泄漏[^内存泄漏指的是程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃]。而SystemVerilog则不存在这个问题,而且与Verilog完全兼容,提供DPI接口,而且本身自带内存管理机制,不用担心内存泄漏问题。还支持系统函数调用,可以直接调用可执行程序,即外部已经用C写好的参考模型。2.验证平台大致包括如下几个部分driver:实现激励。scoreboar原创 2020-09-29 19:33:06 · 4394 阅读 · 1 评论