我對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 <= ?? –