Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
System verilog UVM打印配置不显示值_System Verilog_Uvm - Fatal编程技术网

System verilog UVM打印配置不显示值

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\..*$/] :

我试图调试一些遗留的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\..*$/] : ?
# -  
# 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个调用都来自同一层次结构。但他们是在基地,孩子和孙子。那么,当你说最高级别的层次结构获胜时,那是否意味着基类设置将获胜?我检查了,它们都是在构建阶段设置的。不要混淆类层次结构(继承树)和对象层次结构(实例树)。我的意思是对象层次结构,即父对象的设置战胜子对象(通过代理测试环境-谁实例化谁)。