UVM聚合参数类
<<UVM实战>>读书笔记
1、config_db配置参数聚合类
对于一个大的项目来说,要配置的参数可能有千百个。如果全部使用config_db的写法,就会比较繁琐。
classs base_test extends uvm_test; function void build_phase(uvm_phase phase); super.build_phase(phase); uvm_config_db#(int)::set(this, "path1", "var1", 7); ...... uvm_config_db#(int)::set(this, "path1000", "var1000", 999); endfunction endclass
一种比较好的方法就是将这1000个变量放在一个专门的类里面来实现:
class my_config extends uvm_object; rand int var1; ...... rand int var1000; constraint default_cons{ var1 = 7; ...... var1000 = 999; } uvm_object_utils_begin(my_config) `uvm_field_int(var1, UVM_ALL_ON) ...... `uvm_field_int(var1000, UVM_ALL_ON) `uvm_object_utils_end endclass
在base_test中通过config_db方式set 这个聚合类到各个需要的组件中:
classs base_test extends uvm_test; my_config cfg; function void build_phase(uvm_phase phase); super.build_phase(phase); cfg = my_config::type_id::create("cfg"); uvm_config_db#(my_config)::set(this, "env.i_agt.drv", "cfg", cfg); uvm_config_db#(my_config)::set(this, "env.i_agt.mon", "cfg", cfg); ...... endfunction endclass
每个需要参数类的组件中通过注册的方式,省去get的语句:
class my_driver extends uvm_driver#(my_transaction); my_config cfg; `uvm_component_utils_begin(my_driver) `uvm_field_object(cfg, UVM_ALL_ON | UVM_REFERENCE) `uvm_component_utils_end extern task main_phase(uvm_phase phase); endclass task my_driver::main_phase(uvm_phase phase); while(1) begin seq_item_port.get_next_item(req); pre_num = $urand_range(cfg.pre_num_min, cfg.pre_num_max); ...//drive this pkt, and the number of preamble is pre_num seq_item_port.item_done(); end endtask
在某个测试用例中想要改变某个变量的值,只需要在派生的test 的build_phase阶段修改变量的值:
class case100 extends base_test; function void build_phase(uvm_phase phase); super.build_phase(phase); cfg.pre_num_max = 100; cfg.pre_num_min = 8; ... endfunction endclass
2、virtual sequence中实时配置参数聚合类,实现动态配置参数。
使用聚合参数后,可以将此参数类的指针放在virtual sequencer中:
这样,当sequence要动态地改变某个验证平台中的变量值时,可以使用如下的方式:
3、一些启发:
1.可以将验证场景相关的控制变量放到cfg object中,这样便于集中管理这些变量,而不是每个component中一些独立的控制变量,这样就避免了增减控制变量时的传递语句的书写过程
2.可以定义多个cfg类,每个agnet最好都有一个这样的cfg类,然后最顶层有个大的cfg类用来管理各个agnet的cfg类。
本文来自博客园,作者:hematologist,转载请注明原文链接:https://www.cnblogs.com/littleMa/p/10454753.html
posted on 2019-03-01 09:54 hematologist 阅读(1146) 评论(0) 编辑 收藏 举报