【UVM源码学习】uvm_packer
uvm_packer,基类,提供了⼀系列适⽤于uvm的数据打包(pack)、解包(unpack)⽅法。
序
号
⽅法描述
给我五分钟1pack_field 对uvm_bitstram_t类型的value进⾏打包,默认⼤端模式,打包size默认最⼤4096 (单位bit,最⼤size取决于宏UVM_MAX_STREAMBITS),打包数据放在uvm_pack_bitstream_t类型的m_bits中(最⼤
size=UVM_MAX_STREAMBITS*8)
2pack_field_int实现⽅式与pack_field完全相同,唯⼀的不同是value的数据类型为uvm_interal_t,打包size默认最⼤64 bits
艺术品的英文3pack_bits 实现⽅式与pack_field基本相同,区别在于pack_bits会对指定的打包size进⾏判断,默认是采
⽤value的size,若指定的size ⽐value实际size⼤则报错。pack_field与pack_field_int这两个本⾝有size的上限,pack_bit没有4096或64这种固定限,上限取决于数组value的实际size
4pack_bytes与pack_bits的区别在于,打包的数组是byte类型的,size默认值及上限是value.size*8 5pack_ints与pack_bytes的区别在于,打包的数组是int类型的
6pack_string把字符串打包放进m_bits中,⽆需指定size,以字符串实际size为准
遨游宇宙7pack_time调⽤pack_field_int把time类型的value进⾏打包,size指定为64
8pack_real 调⽤pack_field_int把real类型的value进⾏打包,实际打包的数据是系统函数$realtobits(value)数据类型转换后的value,size指定为64
9pack_object 打包uvm_object类型的value,实现⽅式:_name⼊栈,uvm_field_automation注册
杀鸡
UVM_PACK,value.do_pack(this)打包,出栈。在字符串之前会插⼊4bit header来指⽰字符串bit长度。还没看懂,等把uvm_object看懂再来解释。mezzo
10is_null如果m_bits接下来4 bits为0则返回1,unpack_object时会⽤到该⽅法,⽤于判定是否需要新
分配⼀个object 11unpack_field pack_field的逆过程,解包前先判断m_bits中是否有⾜够当前解包类型的余量
12unpack_field_int pack_field_int的逆过程,解包前先判断m_bits中是否有⾜够当前解包类型的余量
13unpack_bits pack_bits的逆过程,解包前先判断m_bits中是否有⾜够当前解包类型的余量
14unpack_bytes pack_bytes的逆过程,解包前先判断m_bits中是否有⾜够当前解包类型的余量
15unpack_ints pack_ints的逆过程,解包前先判断m_bits中是否有⾜够当前解包类型的余量
16unpack_string pack_string的逆过程,解包前先判断m_bits中是否有⾜够当前解包类型的余量
17unpack_time pack_time的逆过程,解包前先判断m_bits中是否有⾜够当前解包类型的余量
18unpack_real pack_real的逆过程,解包前先判断m_bits中是否有⾜够当前解包类型的余量
19unpack_object pack_object的逆过程
20get_packed_size返回已打包数据的bit size
21unpack_object_ext unpack_onject的扩展⽅法,输⼊参数是inout uvm_object类型
22get_packed_bits返回已打包数据m_bits
23get_bit获取m_bits中指定位置的bit数据值
幸福在远方
24get_byte获取m_bits中指定位置的byte数据值
25get_int获取m_bits中指定位置的int数据值
26get_bits获取m_bits值存⼊bit类型数组
27get_bytes获取m_bits值存⼊byte类型数组
28get_ints 获取m_bits值存⼊int类型数组29put_bits bit类型数据打包放进m_bits,与pack_bits的区别在于,put_bits⽆需指定size,存放的位置是从0开始放,pack_bits是接着企业服务理念
之前的位置往后放
30put_bytes byte类型数据打包放进m_bits,与pack_bits的区别在于,put_bits⽆需指定size,存放的位置是从0开始放,pack_bits是接着之前的位置往后放
31put_ints int类型数据打包放进m_bits,与pack_bits的区别在于,put_bits⽆需指定size,存放的位置
是从0开始放,pack_bits是接着之前的位置往后放
32t_packed_size 获取已打包数据的size并赋给m_packed_size变量
定期存款利息33index_error 打印索引错误的信息,⽤于指⽰get_int/get_byte/get_int⽅法要get的位置是否合法
34enough_bits 解包时⽤于判断是否有⾜够的数据
35ret 清空count、m_bits及m_packed_size 序
号
⽅法描述