【学习记录丨UVM】1.3信息包/事务/交易transaction

《UVM白皮书》关于transaction的介绍

transaction是UVM中信息交互的基本单元。可以理解为信息包,信息帧。

举例:物理协议中的数据交换都是以帧或者数据包为单位的,在帧/数据包中定义好了各项信息参数。在UVM验证中transaction就是在模拟这个帧/数据包。 

一、 transaction举例

class my_transaction extends uvm_sequence_item;
 rand bit[47:0] dmac;
 rand byte      pload[];
 rand bit[31:0] crc;

 `uvm_object_utils(my_transaction)//factory机制,注意这里是object不是component

 constraint pload_cons{
      pload.size >= 46;
      pload.size <= 1500;
  } //约束pload的大小在46~1500byte pload_cons是约束的名字,自定义
 
 function void post_randomize();
   crc = 0;//随便写的,不必在意
 endfunction

 function new (string name = "my_transaction");
   super.new(name); //写作super.new();也是可以的
 endfunction
 
endclass

在上边的transaction举例中, 

  1. UVM中所有的transaction都是派生自uvm_sequence_item,后续transaction才能使用UVMsequence机制。
  2. 根据UVM类的继承关系(可见UVM常用类及树形结构_uvm树-CSDN博客),uvm_transaction继承自uvm_object,对于继承自uvm_object的类,其factory机制都是使用`uvm_object_utils()注册。
  3. post_randomize()是Systemverilog中提供的一个函数,在class被实例化之后调用其randomize函数,post_randomize会紧随其后无条件地被调用。

二、传递transaction的driver举例 

那么现在在my_driver里基于transaction实现驱动:

task my_driver::main_phase(uvm_phase phase);
  my_transaction tr;
  ...
  tr=new("tr");
  ...
endtask

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值