简单写一下uvm_transaction的写法

本文档介绍了一个UVM序列项类的实现,包括`xx_transaction`类的定义,其中包含随机变量id和signal_A。约束条件确保signal_A默认为0。通过`uvm_object_utils`宏开启变量的打印功能。类还包含用于比较数据的函数,确保ID和信号数据的一致性。该类在验证环境中用于模型和监视器之间的交易比较。
摘要由CSDN通过智能技术生成

开头老是想打Hi,就像写信一样,

class xx_transaction extends uvm_sequence_item;
    rand int                        id                                  ;
    rand bit [xx:0]              signal_A                       ;
    
    constraint con_init {
        soft (signal_A== xx'b0);
    }
    
	把id和我们期望看到的信号放到下面这个里面,然后我们调用tr.print函数就可以打印出来,如果只在上面定义,不放这的话,是打印不出来的
	并且UVM_ALL_ON要加上,这个UVM_ALL_ON就是把变量的comp/pack/print等功能打开
    `uvm_object_utils_begin(spd_det_transaction)
        `uvm_field_int          (id                                     , UVM_ALL_ON)
        `uvm_field_int          (signal_A                          , UVM_ALL_ON)
    `uvm_object_utils_end

    function new(string name = "xx_transaction");
        super.new(name);
    endfunction
    
    function bit compare_data(bit [xx:0] cur, exp);//比较函数,比较成功返回1,失败返回0
        compare_data = (cur==exp);
    endfunction

function bit [15:0] compare_tr(spd_det_transaction mdl_tr);
	bit result=1'b1;
	if (mdl_tr==null) `uvm_fatal(get_type_name(), "mdl_tr is null")

    if (mdl_tr.id==id)  这个是确认数据包ID一致
        `uvm_info (get_type_name(), $sformatf("compare mon_tr_%0d with mdl_tr_%0d", id, mdl_tr.id), UVM_HIGH)
    else
        `uvm_fatal(get_type_name(), $sformatf("compare mon_tr_%0d with mdl_tr_%0d, id not match", id, mdl_tr.id))

	if(!compare_data(xx, mdl_tr.xx))begin   这个是比较数据包,一个来自model一个来自monitor
		result=0
		打印相关信息
	end

endfunction

endclass
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值