不同的 UVM 包装方法之间有什么区别?
What are the differences between different UVM packing approaches?
我想知道使用这两个有什么区别
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
如果我们不 pack/unpack 信号并直接将它们驱动到 DUT 会怎样?
此外,我们什么时候使用 pack() 和 do_pack()。有人可以举例说明吗
通常在总线协议中,您将拥有大量关于特定总线事务的数据,因此很难从该总线事务中提取特定字段值。
因此您在更高级别上使用 classes,这样通过使用不同的字段,您可以轻松控制这些字段的值。
但在真实的硬件中,一切都按照位模式进行,因此您需要根据您的协议将 class 字段转换为有效的位模式,并沿着总线传输它们。
为此,您需要 pack
和 unpack
方法。您 pack
在发射端填充,unpack
在接收器端填充。
我想知道使用这两个有什么区别
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
如果我们不 pack/unpack 信号并直接将它们驱动到 DUT 会怎样?
此外,我们什么时候使用 pack() 和 do_pack()。有人可以举例说明吗
通常在总线协议中,您将拥有大量关于特定总线事务的数据,因此很难从该总线事务中提取特定字段值。
因此您在更高级别上使用 classes,这样通过使用不同的字段,您可以轻松控制这些字段的值。
但在真实的硬件中,一切都按照位模式进行,因此您需要根据您的协议将 class 字段转换为有效的位模式,并沿着总线传输它们。
为此,您需要 pack
和 unpack
方法。您 pack
在发射端填充,unpack
在接收器端填充。