在UVM中环境中,在我们执行simulation的过程中,会在命令行添加一些simulation args。比如
./simv –l vcs_run.log +UVM_TESTNAME=my_test
在UVM世界中,有一个class专门来处理这些参数。这个类就是uvm_cmdline_processor
类的继承关系是:
uvm_object->uvm_report_object->uvm_cmdline_processor,这个类与factory相似,均是single模式的类,静态方法get_inst拿到唯一的对象。比如uvm_cmdline_processor cpl= uvm_cmdline_processor::get_inst();
在这个类中有3个重要的变量(队列)
1:string
m_argv[$] //存放所有cmdline参数,m_argv[0]=./simv
2:string
m_plus_argv[$]//存放所有cmdline参数中以+为开头的参数
3:string
m_uvm_argv[$]//存放所有cmdline参数中以+UVM*,+uvm或者-UVM*,-uvm为开头的参数
比如./simv –l vcs_run.log +UVM_TESTNAME=my_test
m_argv[$]有4个参数
m_plus_argv[$]有1个参数
m_uvm_argv[$]有1个参数
这个类中封装了相应的方法来获取上述3个队列的元素,(由于上述3个队列的protected属性)
get_args(output string args[$])
get_plusargs(output string plusargs[$])
get_uvm_args(output string uvm_args[$])
这个类中还有方法
get_tool_name//获取仿真器的名字
get_tool_version//获取仿真器的版本
方法:
get_arg_matches(string match,ref string args[$])//获取m_argv与string
match匹配的参数个数
get_arg_value(string match,ref string args)// 获取m_argv与string
match 最先匹配的参数个数
get_arg_values(string match,ref string args)// 获取m_argv与string
match 所有匹配的参数个数
其实uvm_cmdline_procesor只是一种实现方式,用户也可以直接使用SV自带的方法,比如valuepluson等命令行传参的方式,但是基于复用性以及集成性的角度,还是使用已经封装好的uvm_cmdline_processor来实现命令行参数的传递,这样也便于命令行传参的集中管理。
uvm_cmdline_processor的架构图