uvm中获取cmdlind内容 | 您所在的位置:网站首页 › uvm_cmdline_processor使用示例 › uvm中获取cmdlind内容 |
UVM中,会从cmdline中,获取内容。比如+UVM_TESTNAME,得到要执行的testcase的名字。 一、uvm_cmdline_processor类uvm通过uvm_cmdline_processor类,来实现读取cmdline的内容。 在这个类中,定义了3个队列。 m_argv: 保存cmdline的传参 m_plus_argv: 保存以+开头的cmdline参数 m_uvm_argc: 保存以 -uvm,+uvm,-UVM,+UVM开头的cmdline参数 二、参数获取流程uvm_cmdline_processor类的new函数,通过调用uvm_dpi_get_next_arg函数,获取cmdline的一个参数,如果获取的参数不为空,那么就保存到m_argv队列中。如果参数以+开头,保存到m_plus_argv队列中。如果参数是以-uvm,+uvm,-UVM,+UVM开头的参数,保存到m_uvm_argv队列中。 UVM可以识别的参数: 参数 说明 +UVM_DUMP_CMDLINE_ARGS 将cmdline的参数,都打印出来 +UVM_TESTNAME 指定testcase +UVM_VERBOSITY 指定打印级别 +uvm_set_verbosity 设置指定组件,id,phase,时间的打印级别 +uvm_set_verbosity=,,, +uvm_set_verbosity=,,,,time, +uvm_set_action provides the equivalent of various uvm_report_object's set_report_*_action APIs+uvm_set_action=,,, +UVM_TIMEOUT 设置超时时间 +UVM_TIMEOUT=, +UVM_MAX_QUIT_COUNT 指定最大退出时间的打印个数+UVM_MAX_QUIT_COUNT=, +UVM_PHASE_TRACE 使能phase执行信息打印 +UVM_OBJECTION_TRACE 使能objection行为信息打印 +UVM_RESOURCE_DB_TRACE 使能resource DB访问信息打印 +UVM_CONFIG_DB_TRACE 使能配置DB信息打印 +uvm_set_inst_override 设置组件的重载+uvm_set_inst_override=,, +uvm_set_config_int +uvm_set_config_string 传参 +uvm_set_config_int=,, +uvm_set_config_string=,, +uvm_set_default_sequence 设置sequence +uvm_set_default_sequence=,, 关键是uvm_dpi_get_next_arg,这个是在uvm_svcmd_dpi.svh中,定义的一个函数。因为没有定义UVM_CMDLINE_NO_DPI这个宏,所以选择上面部分的代码。 其实是调用c实现的函数,uvm_dpi_get_next_arg_c函数。 而uvm_dpi_get_next_arg这个函数,定义在uvm_svcmd_dpi.c这个文件中,内部调用了vpi_get_vlod_info函数,得到s_vpi_vlog_info类型的info变量。而这个info变量,就保存了cmdline的所有参数。 vpi_user.h文件中,定义了 s_vpi_vlog_info结构体,这个结构体,保存了cmdline的所有参数。 这个uvm_dpi_get_next_arg_c函数,如果参数为1,表示从最开始获取,通过vpi_get_vlog_info函数,获取到cmdline的所有参数,然后通过walk_level函数,获取到总共有多少个有效的cmdline参数(不包含 –f 文件 的参数),保存到argc_total中。接着申请一块空间,使用walk_level函数,将有效的cmdline参数,保存到argc_ptr中。 以下是walk_level函数的具体实现。判断参数是否是-f或者是-F,如果是,跳过这个参数和后面的一个参数,如果不是,保存到argv_ptr中。 而 vpi_get_vlog_info 这个函数,是定义在外部的函数。 这个函数的实现,没有找到,应该是EDA工具内置的。 查cadence的VPI手册,有提到这个函数,返回工具的调用信息。 VPI(verilog procedural interface),以下是VPI的介绍。其实就是c的一个接口,用于和HDL语言进行通信的接口。 通过以上代码,uvm_cmdline_processor类,就能将cmdline中参数,保存到自己的队列变量中。外部通过下面的三个函数,获取到命令行参数,然后再进行处理。 在这个类中,还提供获取指定参数值的函数,本质上,是使用正则表达式进行匹配。而正则表达式实现,实现原理还是调用c实现的dpi。 1、get_arg_valueget_arg_value, 获取指定参数的值。比如获取+UVM_TESTNAME=hello中的UVM_TESTNAME参数值,该函数,就可以返回hello。该函数只能获取一个值,如果后面有重复的参数,那么取后面的参数值。 即,获取+UVM_TESTNAME=hello +UVM_TESTNAME=world中的UVM_TESTNAME的参数值,就得到world。 get_arg_values, 获取指定参数的所有值。比如获取+UVM_TESTNAME=hello +UVM_TESTNAME=world中的UVM_TESTNAME的参数值,就得到hello和world。保存在values队列中,并返回个数。 |
CopyRight 2018-2019 实验室设备网 版权所有 |