K-3L

...

寄存器模型实例 | UVM笔记10

一个DMA DUT中有如下的寄存器: register address field INTR h400 MASK(31:16), SATUS(15:0) CTRL h404 RESVD(31:10),IO__MEM...

UVM验证平台搭建案例2 | UVM笔记9

这段时间将SystemVerilog及UVM复习了一遍,完成了一些练习,对验证平台的搭建也有了更深的掌握与理解。 下面将之前一个验证平台改造成基于UVM的验证平台。 代码 driver 对于driver,删掉原来用于与generator通讯的mailbox。因为UVM的driver类,提供了TLM通讯接口seq_item_port,与sequencer的seq_item_export...

UVM复习

uvm_transaction, uvm_seq_item,uvm_object,uvm_component 都是uvm中的类,uvm_object是其中最基本的类,其他根源上来说都是派生于次;uvm_transaction也是一个类,和uvm_object一样是个虚类;uvm_seq_item派生自ufm_transaction,在基础上添加了了一些属性和方法,便于对DUT中传输的数...

SystemVerilog 复习

Initial block和final block有什么区别? Initial block在仿真开始时即运行,final block在仿真结束时运行。initial block内部可以有延时语句,可以消耗时间,而final block不行。final block通常用于在结束仿真时,显示一些信息。 Simulation phases of SystemVerilog verificati...

UVM验证平台搭建案例1 | UVM笔记 8

搭建一个简单DUT的验证平台,该DUT实现接收数据与发送数据的功能。验证平台的架构如图所示。 这是已经搭建好的平台内部的树结构。 top文件 `timescale 1ns/1ps `include "uvm_macros.svh" `include "dut.sv" import uvm_pkg::*; `include "my_if.sv" `include "my_tran...

UVM中的寄存器模型(下) | UVM笔记 7

复杂的寄存器模型 在实际构建寄存器模型中,通常构建层次化的模型,比如将uvm_reg_block加入uvm_reg_block中。要实现这种模型,一般要遵循以下步骤: class global_blk extends uvm_reg_block; /*子block*/ endclass class reg_model extends uvm_reg_block; rand...

UVM中的寄存器模型(上) | UVM笔记 6

寄存器模型 对于包含寄存器的DUT,就需要在验证时建立寄存器模型。因为,参考模型想要读取寄存器信息,就需要启动sequence来读取寄存器的值,如何启动,如何获得值都是要解决的问题。所以,采用寄存器模型,让参考模型与寄存器模型的通信代替与DUT中寄存器的通信,可以方便地解决这些问题。一个寄存器模型里,包含以下几个部分。 /* uvm_reg_field:寄存器模型的最小单位 uvm_re...

UVM中的factory机制及callback机制 | UVM笔记 5

SystemVerilog 对重载的支持 在SystemVerilog中,给函数或者任务前添加virtual关键字,就能够在子类中重载这个函数或者任务。重载的优势在于,可以让子类的指针以父类的类型传递时,仍然保持子类的行为。 class bird extends uvm_object; virtual function void hungry(); $displa...

UVM中的sequence | UVM笔记 4

sequence 基础 sequence机制用于生成激励,提高代码重用性,使得进行新的测试变得更加方便。 sequence的启动主要有以下几种。 /*一 使用start任务*/ my_sequence my_seq; my_seq = my_sequence::type_id::create("my_seq"); my_seq.start(sequencer);/*指定接收的seque...

UVM验证平台的运行 | UVM笔记 3

phase机制 UVM中的phase,按照是否消耗仿真时间的特性,分为function phase以及task phase。以下灰色部分即为消耗时间的task phase。task phase是动态运行,即启动后同时运行。而function phase则是一次只有一个运行。高亮为常用的phase。 phase的执行顺序主要有自上而下和自下而上(相对树结构而言)。自上而下用于build...