System verilog UVM打印配置不显示值
我试图调试一些遗留的UVM代码,但无法确定发生了什么。无论如何,在我的工作中,我遇到了这个函数-print_config(1),它应该递归地打印配置数据库。出于某种原因,当我获取层次结构时,打印输出不会显示存储的值。我只得到:System verilog UVM打印配置不显示值,system-verilog,uvm,System Verilog,Uvm,我试图调试一些遗留的UVM代码,但无法确定发生了什么。无论如何,在我的工作中,我遇到了这个函数-print_config(1),它应该递归地打印配置数据库。出于某种原因,当我获取层次结构时,打印输出不会显示存储的值。我只得到: # resources that are visible in uvm_test_top.env.raster_stroke_agent.driver.sqr_pull_port # vif [/^.*\.env\.raster_stroke_agent\..*$/] :
# resources that are visible in uvm_test_top.env.raster_stroke_agent.driver.sqr_pull_port
# vif [/^.*\.env\.raster_stroke_agent\..*$/] : ?
# -
# th_testset_path [/^.*$/] : ?
# -
# th_testset_name [/^.*$/] : ?
# -
# th_testset_exp_path [/^.*$/] : ?
# -
# th_number_of_images [/^.*$/] : ?
# -
# th_cgs_red_lut_cfg_file_name [/^.*$/] : ?
# -
# th_cgs_green_lut_cfg_file_name [/^.*$/] : ?
# -
# th_cgs_blue_lut_cfg_file_name [/^.*$/] : ?
为什么我会得到这个?而不是实际值
编辑:所以我遇到的基本问题是,当试图读取字段“testset_name”时,我得到了不同的值。这就是它的结构:
基本测试:设置配置字符串(“,测试集名称,“ABC”)
子测试:set\u config\u字符串(“,testset\u名称,“JFK”)
孙子测试:set\u config\u字符串(“*”,testset\u名称,“XYZ”)
现在,当我试图从序列中访问这个变量时,我得到了“ABC”。
如果我取出孙子测试“set\u config\u string”,我会得到“JFK”
我不是应该得到“XYZ”吗
更奇怪的是打印配置打印输出:
# resources that are visible in uvm_test_top.env.raster_stroke_agent.driver
# vif [/^.*\.env\.raster_stroke_agent\..*$/] : ?
# -
# th_testset_path [/^.*$/] : ?
# -
# th_testset_name [/^.*$/] : ?
# -
# th_testset_exp_path [/^.*$/] : ?
# -
# th_number_of_images [/^.*$/] : ?
# -
# testset_path [/^uvm_test_top\..*$/] : ?
# -
# testset_name [/^uvm_test_top\..*$/] : ?
# -
# testset_name [/^uvm_test_top\..*$/] : ?
为什么在同一个组件下有两个testset name条目?我猜testset\u name有两个条目,因为您对该组件设置了两个set\u config\u字符串(…,“testset\u name”,…) 本文提到,从层次结构的最高级别调用set_config_*是成功的。在您的情况下,两个(或所有3个)调用都处于相同的层次结构级别,因此我假设最后一个调用获胜。Last one是指被称为Last的一个(可能在您的子类中,您在构建阶段调用set_config_*,但在基类中,您在精化阶段的末尾调用它;我假设精化阶段的末尾调用会赢-解释,这样我们就不会混淆继承和调用顺序的概念)。在调用get_config_*时也要小心,因为如果在_精化的末尾再次设置它,但在构建中获取它,那么第二个设置将不会有任何效果
本文在理解配置数据库方面也很有帮助。它提出了另一种调试方法,将plusarg+UVM_CONFIG_DB_跟踪添加到模拟器调用中。这将向您显示设置和获取的确切顺序,这可能比使用+UVM\u config\u DB\u TRACE的
print\u config()
更有用,因为它不需要修改代码,比如插入对print\u config()
的调用。您说所有3个调用都来自同一层次结构。但他们是在基地,孩子和孙子。那么,当你说最高级别的层次结构获胜时,那是否意味着基类设置将获胜?我检查了,它们都是在构建阶段设置的。不要混淆类层次结构(继承树)和对象层次结构(实例树)。我的意思是对象层次结构,即父对象的设置战胜子对象(通过代理测试环境-谁实例化谁)。