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