새로운 구성 시스템을 통해 UVM을 더 빠르게 만들기 - Semiwiki

새로운 구성 시스템을 통해 UVM을 더 빠르게 만들기 – Semiwiki

소스 노드 : 3036575

UVM(Universal Verification Methodology)은 SystemVerilog 설계를 검증하는 데 도움이 되는 널리 사용되는 방법이며 다음을 포함합니다. 구성 시스템 불행히도 속도와 사용에 문제가 있습니다. Siemens EDA의 Rich Edelman은 이러한 문제를 방지하는 방법에 대한 주제로 20페이지 분량의 상세한 문서를 작성했으며, 이를 통해 주요 내용을 요약했습니다. 검증 엔지니어는 UVM 구성 데이터베이스를 사용하여 값을 설정한 다음 나중에 UVM 테스트에서 값을 가져옵니다. 값 'T'를 설정하고 가져오는 한 가지 예는 다음과 같습니다.

uvm_config#(T)::set(범위, 인스턴스_경로_이름, 필드_이름, 값); uvm_config#(T)::get(범위, 인스턴스_경로_이름, 필드_이름, 값);

UVM 테스트벤치를 테스트 대상 장치에 연결하면 구성 데이터베이스를 사용하여 가상 인터페이스를 전달합니다. UVM 구성을 사용하는 데에는 세 가지 문제가 있습니다.

  • 큰 코드, 약 2,600줄의 코드
  • 정확한 유형 일치가 필요하므로 'int'와 'bit'는 동일하지 않습니다.
  • 느린 코드

느린 코드의 경우를 생각해 보십시오. 와일드카드가 포함된 이름을 사용하여 set()을 수천 번 호출하면 'set' 및 'get' 단계를 완료하는 데 최대 30분이 걸릴 수 있습니다.

경과 시간(분)

Rich는 비교하면 몇 초밖에 걸리지 않는 훨씬 더 빠른 속도를 가진 UVM 구성에 대한 새로운 솔루션을 제안합니다.

새로운 솔루션 분

UVM 코드에서 와일드카드 사용을 피하고 'set' 명령이 거의 없으면 코드가 더 빠르게 실행됩니다.

UVM 구성 문제에 대한 가능한 해결 방법은 다음과 같습니다.

  • 대신 전역 변수를 사용하세요
  • 하나의 set()으로 UVM 구성 사용
  • 몇 가지 set()과 함께 UVM 구성 사용
  • 구성 트리 사용
  • 다른 것을 시도하십시오

다른 것을 시도하는 마지막 접근 방식은 새로운 솔루션이며 계속해서 set() 및 get() API를 사용한 다음 구성의 매개변수화를 제거하여 단순화하고 우선 순위를 제거하며 조회 알고리즘 변경을 제거합니다. 이 새로운 접근 방식의 결과는 빠른 속도입니다.

새 구성 항목은 'config_item'의 파생 클래스에 정의되어 있으며 아래 예에서는 설정되는 속성으로 'int value'를 보여줍니다. 디버그 목적으로 예쁜 인쇄 기능을 추가합니다.

my_special_config_item 클래스는 config_item을 확장합니다. function new(문자열 이름 = "my_special_config_item"); super.new(이름); endfunction int 값; 가상 함수 문자열 Convert2string(); return $sformatf("%s - value=%0d <%s>", get_name(), value, super.convert2string()); endfunction endclass

'config_item'에는 name 속성이 있으며 이 이름과 인스턴스 이름이 함께 조회됩니다. 구성 객체에는 이름을 반환하는 get_name() 함수도 있습니다. "instance_name.field_name"을 찾기 위해 구성 데이터베이스는 빠른 조회 및 생성 속도를 위해 연관 배열을 사용합니다.
추적성을 위해 파일 이름과 줄 번호는 set() 및 get() 함수 호출의 필드이기 때문에 누가 get을 설정하고 호출했는지 알 수 있습니다.

set(null, "top.ab*", "SPEED", my_speed_config, `__FILE__, `__LINE__) get(null, "top.abcdmonitor1", "SPEED", speedconfig, `__FILE__, `__LINE__)

누가 set() 및 get()을 호출했는지 확인하기 위해 디버그 중에 접근자 대기열을 인쇄할 수 있습니다.

와일드카드를 지원하려면 컨테이너를 사용하여 조회 메커니즘을 추가해야 했습니다. 인스턴스 이름 'top.abcd*_0'을 고려하세요.

컨테이너 트리 분
컨테이너 트리

인스턴스 이름의 와일드카드 부분은 연관 배열 대신 컨테이너 트리를 사용하여 처리됩니다.

요약

UVM 테스트벤치의 모듈/인스턴스와 클래스 기반 세계 간의 데이터 공유는 UVM 구성 데이터베이스를 사용하여 수행할 수 있지만 속도 저하에 유의하세요. 방법론에서 많은 구성을 사용하는 경우 UVM 구성 데이터베이스 파일의 300줄 코드 대신 약 2,600줄의 코드를 사용하는 패키지가 포함된 새로운 접근 방식을 사용하는 것이 좋습니다.

20페이지 분량의 전체 논문을 읽어보세요. 광란적인 구성을 피하는 쉬운 방법 지멘스 EDA에서.

관련 블로그

다음을 통해이 게시물 공유 :

타임 스탬프 :

더보기 세미위키