我对UVM非常陌生。请指导我一个关于如何使用驱动程序打包数据包成员并将其传递给驱动程序DUT接口的很好例子。直到现在,我一直在做没有包和共享驱动器的代码废料(运行阶段)对象的包装和传递给UVM中的驱动程序
task run_phase(uvm_phase phase);
begin
Packet simple_seq;
forever begin
seq_item_port.get_next_item(simple_seq);
drive_item(simple_seq);
seq_item_port.item_done();
end
endtask
task drive_item(input Packet pkt)
begin
@(dut_if.master_cb);
dut_if.master_cb.Data_in_08p <= pkt.correct_data_in;
dut_if.master_cb.Data_valid_08p <= pkt.valid_in;
end
endtask
而不是做drive_item,我想先收拾对象,然后调用do_pack在驱动程序将它传递接口,但不知道如何去做。我do_pack功能
function void do_pack(uvm_packer packer);
super.do_pack(packer);
packer.pack_field_int(correct_data_in,$bits(correct_data_in));
packer.pack_field_int(valid_in,$bits(valid_in));
endfunction : do_pack
如何司机将使用此do_pack功能就能满足我一个很好的例子。这只是为了练习。
因此,1)不使用UVM_NOPACK和直接驱动信号到接口和2)使用UVM_NOPACK和do_pack函数有什么区别? –
另外,这里num_bits的用途是什么? –
能否请您详细说明驱动器任务,比如在打包到比特流后应该在rhs上应该如何处理[],即@(dut_if.master_cb); dut_if.master_cb.Data_in_08p <= ?? –