Pass cfg from cmd to test
- [1 Pass cfg from sh to case](#1 Pass cfg from sh to case)
- [1.1 v a l u e value valueplusargs()`](#1.1 v a l u e value valueplusargs()`)
- [1.2 uvm_config_int::get()<--->uvm_set_config_int/string/](#1.2 uvm_config_int::get()<--->uvm_set_config_int/string/)
The article's purpose is to solve the flexity; you can pass cfg to test by cmd directly; this is convinent for you to control or constraint the case;
Now,there are two common ways to do it;
1 Pass cfg from sh to case
1.1 v a l u e value valueplusargs()`
In any compenent,you use the usage;
sv
function void base_test:build_phase();
super.build_phase(phase);
if(!$value$plusargs("mask_mode=%0d",mask_mode)) begin
`uvm_error("base_test","mask_mode is set to default");
end
endfunction:build_phase
sh
#在末尾添加参数run_opt;
-run_opt +mask_mode=9
1.2 uvm_config_int::get()<--->uvm_set_config_int/string/
In any component,you should code in it; Principle: It will creats a diction,then put it in pool; you will use get it at any time;
you can put the code anywhere;
sv
function void base_test:build_phase();
super.build_phase(phase);
if(!uvm_config_int::get(this,"","mask_mode",mask_mode)) begin
`uvm_error("base_test","mask_mode is set to default");
end
endfunction:build_phase
sh
#末尾添加参数
-run_opt +uvm_set_config_int="uvm_test_top,mask_mode,12" &
Note the difference between the two ways;
Advantage: you can use it even under regression;
regression
# Add in the regression.txt
TESTS += xx_test;+uvm_set_config_int="uvm_test_top,mask_mode,12"