System verilog 不同的UVM包装方法有什么区别?

System verilog 不同的UVM包装方法有什么区别?,system-verilog,uvm,System Verilog,Uvm,我想知道使用这两个有什么区别 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 function void do_pack(uvm_packer packe

我想知道使用这两个有什么区别

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

function void do_pack(uvm_packer packer);
  super.do_pack(packer); 
  `uvm_pack_intN(correct_data_in);
  `uvm_pack_intN(valid_in);
endfunction
如果我们不打包/解包信号并直接将其驱动至DUT,会发生什么情况


此外,我们什么时候使用pack()和do_pack()。请举例说明。

通常,在总线协议中,特定总线事务上会有大量数据,因此很难从该总线事务中提取特定字段值

因此,您可以在更高的级别上使用类,以便通过使用不同的字段,可以轻松地控制这些字段的值

但在真正的硬件中,一切都是以位模式的形式进行的,因此您需要根据协议将类字段转换为有效的位模式,并沿总线传输它们

为此,您需要
pack
unpack
方法。您可以
在发送器侧包装
物品,并
在接收器侧打开
物品