在UVM中有许多自带的功能,可以方便我们调用完成print、copy、pack等功能.今天我们就来介绍下UVM_PACK功能调用关系及如何使用.
1.uvm_object定义了do_pack.
do_pack作为自定义的hook,可以方便用户实现定制的pack方式.
2.uvm_obejct定义了pack、pack_bytes、pack_ints分别用来将数据流打包成bit、byte、int的类型.
3.在uvm_packer定义了pack_field、pack_field_int函数
pack_filed入口参数是uvm_bitstream_t和数据的size,其中:uvm_bitstream_t代表一个数据位宽最大是4096bit的数据;
pack_field_int入口参数是数据位宽最大是64bit的数据和数据位宽大小;
这两个函数作用都是将数据转化bit的类型,只是传入数据的最大位宽不一样.
4.uvm_object中定义get_bits、get_bytes、get_ints函数用来获取对应位宽的数据.
5.在uvm_object中定义了m_pack,用来获取packer,并且会调用自定义的do_pack,将数据实现bit流的转换;
6.实例化完xaction后,调用pack、pack_bytes、pack_ints便可将对应的数据打包完成.
1.定义一个简单的xaction,将类成员注册到uvm_field_int等宏定义中:
在类中定义do_pack函数,继承原来的do_pack,没有添加自定义的情况.
2.用例中调用pack_bytes
3.效果如下
从log中可以看出,调用pack_bytes之后将类成员都打包成byte的形式,默认是按照大端的形式处理的.
uvm_field_automation:UVM_PACK(一)
最新推荐文章于 2024-07-06 16:22:29 发布