自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 UVM实验教程-从平台、脚本到方法学全代码解析-王建利

这本书主要介绍了基于UVM 方法学的验证平台搭建、验证平台脚本编写以及 UVM方法学的学习研究。书中通过具体的实验代码进行学习深化,并对代码进行了详细解析,适合初学或想要进阶学习的验证工程师阅读。

2024-10-18 14:21:13 2562 7

原创 UVM初学篇 -(25)UVM验证平台文件的布局

在dv/dadd/agent/dadd_loc下是dadd_loc接口协议下的文件,包含了dadd_iagent.sv,dadd_driver.sv,dadd_imonitor,dadd_sequencer,dadd_sequence.sv,dadd_oagent.sv,dadd_omonitor.sv以及include文件dadd_include.svh。对dadd_loc输入接口协议相关组件的封装,包括dadd_driver,dadd_monitr.sv,dadd_sequencer。

2024-10-24 11:27:44 686

原创 UVM初学篇 -(24)UVM callback 回调机制

在dadd验证平台中,在dadd_driver中用uvm_register_cb注册driver_callback,并在get_next_item(seq)后面用`uvm_do_callbacks注册定义的虚方法pre_send()。在dadd平台中定义dadd_driver_callback继承于driver_callback,并重载pre_send函数,使得它在发包的时候插入一些32’h5a5a的数据包。1,定义一个callback的类,继承于uvm_callback,内部需要定义虚方法。

2024-10-24 11:24:52 1442

原创 UVM初学篇 -(23)UVM event 事件机制

在事件触发的建立中,在dadd_rand_test会声明uvm_event_pool ,并在build_phase中调用get_global_pool()来对event_pool实例化,并通过env,oagent传输给omonitor。uvm_event_pool是uvm_events的关联数组构建的一个单例类,该关联数组的索引是一个字符串,uvm_event_pool在整个验证环境中的组件之间共享项。UVM中event中有两个常用的概念:uvm_event和uvm_event_pool。

2024-10-23 14:25:14 1288

原创 UVM初学篇 -(22)UVM field_automation 域的自动化机制

field_automation机制是域的自动化的机制,这个机制的最大的优点是可以对一些变量进行批量的处理,比如对象拷贝、克隆、打印之类的变量。

2024-10-23 14:22:27 2584

原创 UVM初学篇 -(21)UVM 打印信息机制

在system verilog中,display作为打印信息的函数,UVM对$display进行了封装,对功能进行了加强,这就是uvm打印机制。uvm的`uvm_info宏的定义为:ID是作为message的标记符MSG就是真正要打印的文本1, 打印等级VERBOSITY用于传递uvm_verbosity枚举类型的数字。VERBOSITY为设置的打印的等级,从上到下一次为:UVM_NONE,UVM_LOW,UVM_MEDIUM,UVM_HIGH,UVM_FULL,UVM_DEBUG。

2024-10-22 14:51:19 1465

原创 UVM初学篇 -(20)UVM config_db配置数据机制

UVM验证平台中通信的方式很多,但是由于验证平台的复杂性,使得平台的通信变得繁琐,UVM提供了一种简单高效的通讯方式,就是config_db。例如在DADD验证平台中,平台driver中是通过层次化的访问去驱动interface的,但是对于复杂的DUT来讲,例化层次比较多,改动起来比较繁琐,这种方法显然是不可行了,config_db是一种很好的方法。

2024-10-22 14:48:40 1626

原创 UVM初学篇 -(19)UVM sequence激励产生与交互执行机制(三)

执行之后,通过波形发现在lock()执行随机发送add_rand_sequence,dadd_addr_5a5a_sequence,dadd_addr_a5a5_sequence,当lock()之后只发送dadd_addr_5a5a_sequence,unlock()之后又随机发送add_rand_sequence,dadd_addr_5a5a_sequence,dadd_addr_a5a5_sequence。这对于需要在sequence中控制不同的sequencer的行为或设置非常有用。

2024-10-18 11:37:40 1079

原创 UVM初学篇 -(18)UVM sequence激励产生与交互执行机制(二)

如果是手动启动sequence, starting_phase的值是null,这就需要通过对starting_phase赋值的方式让staring_phase指向当前启动sequence的phase,然后用starting_phase.raise_objection和starting_phase.drop_objection控制平台的关闭。在body函数中就可以用starting_phase.raise_objection和starting_phase.drop_objection控制平台的关闭。

2024-10-18 11:32:10 771

原创 UVM初学篇 -(17)UVM sequence激励产生与交互执行机制(一)

为了使激励的产生,发送和驱动分工更加的明确,分为了driver, sequencer和sequnce。而uvm中的sequence机制使得激励的产生和约束变得更加灵活。sequence机制是一种与sequencer,driver交互的过程,概括为:1,通过sequence发送层次化、随机化的激励。2,sequencer对sequence进行仲裁。3,driver接受sequencer传递来的sequence(req)并按照时序激励发送到DUT,而后driver等待从端口返回信号和状态。

2024-10-18 10:48:33 1843 1

原创 UVM初学篇 -(16)UVM phase 阶段运行机制

UVM phase根据是否消耗时间分为function phase和task phase,function phase和task phase都是UVM平台自动执行的。(1)build_phase 实例化各个组件,生成验证环境的树形结构,用config_db完成virtual interface的传递等。(2)connect_phase 建立component之间的连接,例如TLM等。

2024-10-16 11:10:26 2359

原创 UVM初学篇 -(15) UVM factory 工厂机制

工厂机制不是UVM独有的机制,这是面向对象语言特有的机制。在面向对象中工厂中角色就是两个:工厂和产品,工厂机制的意思在于将创建某一类对象的任务交给对应的工厂类统一管理,构建对象体系。工厂模式提供了一种灵活和可扩展的方式来创建对象,使代码更易于维护和扩展。通过将对象的创建逻辑封装在工厂中,可以隐藏对象的实现细节,提高代码复用性,并简化对象的创建过程,同时实现了对象之间的解耦。而UVM中工厂机制也是同样的道理,目的是为了更好的注册实例和方便地替换已经注册的实例。

2024-10-16 11:03:48 1401

原创 UVM初学篇 -(14) UVM environment环境封装器

part1/environment是UVM environment的实验,代码2.22是environment的代码,对iagent,oagent,reference model,scoreboard以及analysis FIFO进行了封装,并对analysis FIFO进行了端口连接。在此,整个UVM环境搭建完成,我们通过UVM提供的function uvm_top.print_topology ()打印出整个验证环境的结构,注意需要在验证环境构建之后打印。sim.log打印出PASS。

2024-10-15 11:41:07 363

原创 UVM初学篇 -(13) UVM scoreboard计分板

part1/scoreboard是UVM scoreboard的实验,代码2.20是scoreboard的代码,在main_phase中获取reference model和scoreboard的数据包,然后进行比较,如果错误输出错误的数据包,正确则输出PASS。它会把DUT接口输出的数据包与reference model的数据包进行对比,完成平台自动化校验的最后一步。代码2.20 scoreboard加入后dadd_scoreboard中的代码。执行Makefile 脚本。

2024-10-15 11:38:32 542

原创 UVM初学篇 -(12) UVM reference model参考模型

在reference model声明了端口uvm_blocking_get_port,在get_dadd_pkt获取iagent送入的数据包,在main_phase中完成加1的操作。part1/reference是UVM reference的实验,代码2.16是dadd_imonotor通过TLM把数据发送给reference model。代码2.16 reference model加入后dadd_imonitor中采样的数据通过tlm port发送给refrence model的代码。

2024-10-14 11:14:14 1234

原创 UVM初学篇 -(11) UVM agent 代理器

agent是代理器,继承于uvm_component,作用是完成对driver,sequencer和monitor的封装,及完成接口的数据的发送,驱动和采样。在复杂的验证环境中会涉及到多种协议的接口,不同的接口协议分成不同的agent,便于环境的管理和环境的规范化,part1/agent是UVM agent的实验,代码2.14是iagent的代码,里面封装了sequencer,driver,imonitor。代码2.15是oagent的代码,里面封装了omonitor。

2024-10-14 11:11:00 400

原创 UVM初学篇 -(10) UVM monitor 监视器

monitor可分为两种monitor,一种是采样输入接口的数据给reference model,我们叫imonitor,这里为什么不用driver的数据包直接给refrence model?part1/monitor是UVM monitor的实验,代码2.12是dadd_imonitor的代码,在main_phase中首先等reset_n信号为高,为高之后再采样DADD模块输入接口的数据。1,driver中数据包随机的数据不一定直接给的接口,随机之后可能做其他的处理,用monitor采样更合理。

2024-10-14 11:08:15 587

原创 UVM初学篇 -(9) UVM sequencer发射器

在dadd_driver代码中,seq_item_port是uvm_driver基类中定义的一个端口,这个端口需要在上层与sequencer的seq_item_export通过connect函数连接(seq_item_export是uvm_sequencer基类中定义的一个端口)。2,driver的seq_item_export和sequencer的seq_item_port是UVM基类中已经定义好的,用户无需自己定义。代码2.8 sequencer加入后dadd_rand_sequencer代码。

2024-10-12 16:11:42 968

原创 UVM初学篇 -(8) UVM driver驱动器

在dadd_test.sv文件中编写test:dadd_rand_test,在代码2.7可以看出在dadd_rand_test通过new函数对driver进行了实例化,在main_phase中通过phase.raise_objection(this)和phase.drop_objection(this)控制平台的结束。代码2.7 driver加入后dadd_rand_test中main_phase的代码。在Makefile中仿真中加入+UVM_TESTNAME=dadd_rand_test。

2024-10-12 16:03:14 749

原创 UVM初学篇 -(7) UVM通信组件TLM

UVM各个组件在运行时是不同的线程并同时执行的,各个组件是需要相互通信传输数据的。在1.2.3 system verilog验证平台中使用mailbox完成了monitor到checker和driver到checker的数据通信,而在UVM中就会用到TLM(Transaction Level model),TLM 为事务级建模,通俗讲就是数据包的通信机制。TLM的通信端口可分为:port、export、imp、analysis_port、analysis_export。

2024-10-12 11:40:34 1326

原创 UVM初学篇 -(6) UVM的框架

(1)UVM结构的基类(uvm_void为空),uvm_object是具有uvm共有的属性和方法,例如task create(),copy(), pack/unpack(), compare(), print(),get_name(), get_type_name(),,get_full_name() 等。图2.1就是UVM各个class的继承关系图,为了更好的理解UVM中的各个class,在UVM验证环境中,各个组件的作用和相互关系可以比作一幢大楼的不同部分和功能。

2024-10-11 10:09:42 1062

原创 UVM初学篇 -(5) UVM验证平台-hello world

在我们环境的顶层tb中调用了run_test(),run_test()是uvm的一个task用于启动uvm环境,run_test传入hello_world_test 就执行了hello_world_test里面的task main_phase()。hello_world_test中的`uvm_component_utils(hello_world)是一个宏,在这里调用这个宏之后才能使用run_test(“hello_world_test”)。这是UVM中的一个文件,里面包含了众多的宏定义,只需要包含一次。

2024-10-10 15:42:11 409

原创 UVM初学篇 -(4) system verilog验证平台

以上就是通过面向对象的语言system verilog搭建的一个验证平台,system verilog是verilog的扩展,它引入了面向对象技术和更健全的随机化方法,使得验证人员可以从更高的抽象层次对RTL进行验证,从而更方便地提高验证覆盖率。代码1.5是Check task check_data的代码,从代码中看出代码中while(1)会一直判断mailbox monitor_to_checker和driver_to_checker是否为空,不为空就会比较driver和monitor中采样的数据。

2024-10-10 15:32:46 1221

原创 UVM初学篇 -(3)verilog验证平台

以上的验证平台是由verilog搭建的一个比较简单的验证平台,在基于verilog或VHDL的验证平台中,验证平台和DUT(待测设备)连接在一起,在仿真开始时,DUT和验证平台就被加载到仿真器的内存中,并在整个仿真期间一直存在,都是静态对象。设计人员在编写DADD模块verilog代码时需要编写一个简单的验证平台来验证verilog的逻辑的正确性,图就是DADD模块verilog语言验证平台框图,这个结构比较简单只有激励的输入。代码1.1 DADD模块verilog验证平台激励输入代码。

2024-10-10 15:29:03 455

原创 UVM初学篇 -(2)DUT简介

搭建一个验证平台需要理解DUT(design under test)的设计,这是验证工程师开始芯片验证的第一步。我们就从一个简单的DUT说起。DADD模块,是完成数据加1的操作,以下是DADD的介绍。1,DADD简介DADD 是完成对输入的有效数据进行加1操作,完成之后,再按照输出接口协议输出。2,模块架构图1.2 DADD模块框图从框图中可以看出DADD模块内部有一个adder完成数据加1的操作。3,功能描述完成数据的加1操作并输出。4,接口描述接口名称信号位宽输入输出。

2024-10-10 11:52:46 740

原创 UVM初学篇 -(1)UVM概述

UVM 工作组,整合了 OVM 和 VMM 等方法,并基于 system verilog 语言开发了 UVM。尽管如此, UVM 仍然是目前硬件验证领域中最流行和广泛应用的验证方法学之一,1.模块化: UVM 采用了模块化的设计理念,将验证环境划分为若干个独立的模块,可重用组件可以构建具有 标准化层次结构和接口的功能验证环境,它在硬件验证领域中。3.结构化: UVM 定义了一套规范和建议,对验证环境的结构进行了明确的规定。借助这些规范,开发人员可以更加方便地设计和组织验证环境,提高代码的可读性和可。

2024-10-07 11:00:15 988

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除