2014-06-18 4 views
0

일부 기존 UVM 코드를 디버그하려고하는데 무슨 일이 일어나고 있는지 알 수 없습니다. 어쨌든, 필자의 노력으로이 기능 (print_config (1))을 보았습니다.이 기능은 config 데이터베이스를 재귀 적으로 출력해야합니다. 웬일인지, 내가 계층을 얻는 동안, 인쇄물은 저장된 값을 보여주지 않는다. 나는 단지 얻는다 :UVM print_config가 값을 표시하지 않습니다.

# 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 [/^.*$/] : ? 

나는 무엇을 얻는다? 실제 값 대신에?

EDIT : 필자가 가지고있는 기본적인 문제는 "testset_name"필드를 읽으려고 할 때 다른 값을 얻는 것입니다. 그래서 이것은 구성 방식이다

베이스 테스트 : set_config_string (""testset_name, "ABC") 아이 테스트 : set_config_string (""testset_name "JFK") 손자 시험 : set_config_string (" * ", testset_name,"XYZ ")

이제 시퀀스에서이 변수에 액세스하려고하면"ABC "가 표시됩니다. 손자 테스트 "set_config_string"을 꺼내면 "JFK"가 나옵니다.

"XYZ"를 가져 오지 않아야합니까?

더 이상 무엇은 print_config의 출력입니다 :

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

왜 같은 구성 요소에서 테스트 세트 이름이 개 항목이 ???

답변

1

두 구성 요소에 대해 set_config_string (..., "testset_name", ...)을 수행하기 때문에 testset_name에 2 개의 항목이 있다고 생각합니다.

이 문서 https://www.doulos.com/knowhow/sysverilog/uvm/easier_uvm/configuration/에는 최상위 계층 구조의 set_config_ * 호출이 성공했다고 언급되어 있습니다. 귀하의 경우 두 가지 (또는 모두 3) 통화가 동일한 계층 구조에 있으므로 마지막 통화가 승리한다고 가정합니다. 마지막 하나는 마지막으로 호출 된 것을 의미합니다 (자식 클래스에서 빌드 단계에서 set_config_ *를 호출 할 수도 있지만 end_of_elaboration 단계에서 호출하는 기본 클래스에서 end_of_elaboration에서 호출한다고 가정합니다 - 설명 그래서 우리는 상속의 개념과 호출 순서를 뒤섞 지 않는다). 또한 end_of_elaboration에서 다시 설정했지만 빌드 할 때 get_config_ *가 호출되면주의를 기울여야합니다. 그러면 두 번째 집합이 아무런 영향을 미치지 않기 때문입니다.

이 신문 http://www.verilab.com/files/configdb_dvcon2014.pdf도 설정 DB를 잘 이해하고 있습니다. plusarg + UVM_CONFIG_DB_TRACE를 시뮬레이터 호출에 추가하여 디버깅하는 다른 방법을 제안합니다. 그러면 정확한 순서와 세트가 표시되며 print_config()보다 도움이 될 수 있습니다.

+1

+ UVM_CONFIG_DB_TRACE를 사용하면 'print_config()'에 대한 호출 삽입과 같이 코드를 수정하지 않아도되므로 더 깨끗합니다. –

+0

3 개의 호출이 모두 동일한 계층 구조에 있다고 가정 해보십시오. 그러나 그들은 기초, 자녀, 손자녀로 설정되어 있습니다. 따라서 최고 수준의 계층 구조가 승리한다고 말하면 기본 클래스 설정이 이깁니다. 나는 이것들을 체크했다. 그것들은 모두 build_phase에 설정되어있다. – noobuntu

+1

클래스 계층 구조 (상속 트리)를 객체 계층 구조 (인스턴스 트리)와 혼동하지 마십시오. 내가 의미 한 것은 객체 계층 구조였습니다. 부모 객체의 설정이 자식 객체에 대해 이깁니다 (에이전트를 통한 env 테스트 - 누구를 인스턴스화하는지). –

관련 문제