uvm_sequence_library

编写测试用例时,针对不同的场景构造不同的sequence.功能测试稳定后,可以将不同的测试场景组合起来构造新的测试场景,在这里将可以用到uvm_sequence_library.
1.uvm_sequence_library
顾名思义,uvm_sequence_library是uvm_sequence的集合,它也派生于uvm_sequence;本质上也是uvm_sequence;不过它可以根据不同的算法,选择要执行的sequence.
2.注册
a.在构造uvm_sequence_library时,需要制定它所产生的xaction类型;在new函数中添加init_sequence_library;调用uvm_sequece_library_utils注册;不要定义空的body函数,定义空的body函数会导致任何数据都不会发送;
b.在uvm_sequence中调用uvm_add_seq_lib将此sequence添加到对应的uvm_sequence_library中;
3.控制选择算法
uvm_sequence_library支持的控制算法有4种,分别是UVM_SEQ_LIB_RAND、UVM_SEQ_LIB_RANDC、UVM_SEQ_LIB_ITEM、UVM_SEQ_LIB_USER;
UVM_SEQ_LIB_RAND:随机选择sequence;
UVM_SEQ_LIB_RANDC:将加入的sequence随机排列顺序,按照此顺序执行,在此顺序执行完成之前,执行过的sequence不会执行第二次;
UVM_SEQ_LIB_USER:用户自定义的顺序,需要在uvm_sequence_library中重写select_sequence;
UVM_SEQ_LIB_ITEM:将uvm_sequence_library当做一般的sequence使用.
4.select_sequence
a.获取注册的sequence数量
uvm_sequence_library定义了sequences变量,可以通过sequences.size()获取对应的个数
b.get_type_name
借助于sequences[i].get_type_nane获取对应sequence的名字,方便后续做灵活处理.
uvm_sequence_library_第1张图片
5.uvm_sequence_library_cfg
uvm_sequence_library_cfg定义了min_random_count、max_random_count和selection_mode;可以单独利用uvm_config_db对相应参数设置,也可以通过实例化uvm_sequence_library_cfg对其中的参数修改之后,借助于uvm_config_db将uvm_sequence_library_cfg传递到uvm_sequence_library,实现参数的设置.
uvm_sequence_library_第2张图片

6.示例
构造两个sequence,分别发送长包和短包,图一是UVM_SEQ_LIB_RAND,可以看出长包和短包随机调度,会出现连续三个短包的情况;图而是UVM_SEQ_LIB_RANDC,可以看出长包和短包循环调度,每次调度时隙内,短包和长包各会调度一次,调度完成后再修改调度顺序,最多出现连续两个长包或者两个短包的情况.
uvm_sequence_library_第3张图片
在这里插入图片描述

uvm_sequence_library_第4张图片
uvm_sequence_library_第5张图片

你可能感兴趣的:(uvm_sequence)