SystemVerilog DPI

SystemVerilog DPI

SystemVerilog DPI(Direct Programming Interface)는 SystemVerilog를 외국어와 인터페이스하기 위해 사용할 수 있는 인터페이스입니다.이러한 외국어는 C, C++, SystemC 및 기타 언어일 수 있습니다.DPI는 SystemVerilog 레이어와 외국어 레이어의 2개의 레이어로 구성됩니다.두 층 모두 서로 격리되어 있습니다.어떤 프로그래밍 언어가 실제로 외국어로 사용되는지는 투과적이며 이 인터페이스의 System-Verilog 측과 관련이 없습니다.SystemVerilog 컴파일러도 외국어 컴파일러도 다른 언어의 소스 코드를 분석할 필요가 없습니다.동일한 온전한 SystemVerilog 계층에서 서로 다른 프로그래밍 언어를 사용하고 지원할 수 있습니다.그러나 현재 SystemVerilog는 C 프로그래밍 언어에 대해서만 외국어 계층을 정의합니다.

이 인터페이스의 동기는 두 가지입니다.방법론적인 요건은 인터페이스가 SystemVerilog(이하 외국어) 이외의 언어(또는 그 이상의 언어)로 작성할 수 있는 이종 시스템(설계 또는 테스트벤치)을 구축할 수 있도록 해야 한다는 것입니다.한편, PLI 또는 VPI의 지식이나 오버헤드를 사용하지 않고, 통상 C 또는 C++로 기술된 기존 코드를 쉽고 효율적으로 연결할 수 있는 방법도 필요합니다.DPI는 블랙박스의 원리를 따릅니다.즉, 컴포넌트의 사양과 실장은 명확하게 분리되어 있으며, 실제 실장은 시스템의 나머지 부분에 대해 투명합니다.따라서, 구현의 실제 프로그래밍 언어 또한 투명하지만, 이 표준은 C 링크 의미론만을 정의한다.SystemVerilog 코드와 외국어의 구분은 SystemVerilog의 자연 캡슐화 유닛으로서 함수를 사용하는 것에 근거하고 있습니다.대체로 어떤 함수도 블랙박스로 취급할 수 있으며 콜을 변경하지 않고 SystemVerilog 또는 외국어로 투과적으로 구현할 수 있습니다.

설명.

Direct Programming Interface(DPI; 다이렉트프로그래밍 인터페이스)를 사용하면 SystemVerilog와 Foreign Language 간의 직접 언어 간 함수 호출이 가능합니다.외국어로 구현된 함수는 SystemVerilog에서 호출할 수 있으며 이러한 함수를 Import 함수라고 합니다.마찬가지로 SystemVerilog에서 구현된 함수는 Foreign Language(C/C++ 또는 System C)에서 호출할 수 있습니다.이러한 함수는 Export 함수라고 불립니다.DPI를 사용하면 함수 인수를 통해 두 도메인 간에 데이터를 전송하고 반환할 수 있습니다.

함수 Import 및 내보내기

1) 함수 Import:- 외국어로 구현된 기능을 SystemVerilog에서 Import하여 사용할 수 있습니다.SystemVerilog에서 사용되는 외국어 함수를 Import 함수라고 합니다.

가져온 기능 및 태스크 속성

  1. Import 함수는 즉시 실행을 완료하고 시뮬레이션 시간을 0으로 해야 합니다.가져온 작업은 시간이 걸릴 수 있습니다.
  2. Import된 함수에는 input 인수, output 인수 및 inout 인수를 사용할 수 있습니다.
    • 형식 입력 인수는 수정할 수 없습니다.그러한 인수가 함수 내에서 변경되는 경우, 변경은 함수 외부에서 보이지 않아야 한다.
    • Import된 함수는 형식 출력 인수의 초기 값을 가정하지 않아야 합니다.출력 인수의 초기값은 결정되지 않았으며 구현에 따라 달라집니다.
    • Import된 함수는 정식 inout 인수의 초기값에 액세스할 수 있습니다.Import 함수가 정식 inout 인수에 가한 변경은 함수 외부에서 확인할 수 있어야 합니다.
  3. Import 함수는 SystemVerilog 코드에 의해 할당된 메모리를 해방하거나 SystemVerilog 코드가 Foreign 코드 또는 (Foreign Compiler)에 의해 할당된 메모리를 해방할 것으로 예상해서는 안 됩니다.
  4. Import된 태스크에 호출하면 현재 실행 중인 스레드가 일시 중단될 수 있습니다.이 문제는 Import된 태스크가 내보내기된 태스크를 호출하고 내보내기된 태스크가 지연 제어, 이벤트 제어 또는 대기 문을 실행할 때 발생합니다.따라서 Import된 태스크는 여러 실행 스레드에서 동시에 활성화될 수 있습니다.
  5. Import된 함수 또는 태스크에는 pure 또는 context라는 특수 속성을 사용할 수 있습니다.

순수하고 컨텍스트적인 태스크와 기능

순수 함수

결과가 부작용 없이 입력 인수의 값에만 의존하는 함수를 순수 함수라고 합니다.

순수함수의 특성

  1. 출력 또는 입력이 없는 비포이드 함수만 Pure 함수로 호출할 수 있습니다.
  2. Pure로 지정된 함수는 부작용이 없어야 하며, 그 결과는 입력 인수의 값에만 의존해야 합니다.
  3. Pure 함수 호출은 결과가 필요하지 않거나 같은 값의 입력 인수에 대한 결과를 재계산하지 않고 재사용할 수 있는 경우 안전하게 제거할 수 있습니다.
  4. 순수 함수는 직접 또는 간접적으로 다음을 수행하지 않는 것으로 가정합니다.
    1. 임의의 파일 조작을 실행합니다.
    2. 환경변수, 공유 메모리, 소켓 등의 읽기 또는 쓰기
    3. Global 또는 Static 변수와 같은 영구 데이터에 액세스합니다.
  5. 가져온 태스크는 순수 태스크로 선언할 수 없습니다.

컨텍스트 태스크 및 기능

"내보낸" 태스크 또는 함수를 호출하거나 실제 인수 이외의 SystemVerilog 데이터 개체에 액세스하는 Import된 태스크 또는 함수를 컨텍스트 태스크 또는 함수라고 합니다.

컨텍스트 태스크 및 기능의 속성

1) 컨텍스트 Import 태스크 또는 함수는 호출(PLI/VPI) 또는 내보내기 태스크 또는 함수를 호출하여 SystemVerilog 데이터 개체에 액세스(읽기 또는 쓰기)할 수 있습니다.따라서 컨텍스트 태스크 또는 함수에 대한 호출은 SystemVerilog 컴파일러 최적화의 장벽이 됩니다.

수입신고

수입품 "DPI-C" 함수 int calc_discl (입력 int a); 

수출신고

수출. 'DPI-C' my_cfunction(기능) = 기능. 기능; 

Unix 함수 호출

SystemVerilog 코드는 UNIX 함수를 래퍼 없이 Import하여 직접 호출할 수 있습니다.

DPI의 예

SystemVerilog에서 'C' 함수를 호출합니다.

C - 코드 파일

#실패하다 <stdio.h> #실패하다 <stdlib.h>  외부 인트 더하다() {   인트 a = 10, b = 20;   a = a + b;    인쇄물("추가 성공 및 결과 = %d\n", a);   돌아가다 a; } 

SystemVerilog 코드 파일

모듈 tb_dpi;    수입품 "DPI-C" 함수 int add();   수입품 "DPI-C" 함수 int sleep (입력 int secs);   인트 j;      초기의   시작한다.     $표시("SystemVerilog 초기 블록에 들어가는 중");     #20     j = 더하다();     $표시("J 값 = %d", j);     $표시("유닉스 기능으로 3초간 절전");     수면.(3);     $표시("SystemVerilog 초기 블록에서 종료 중");     #5 $끝내라.;   끝.    엔드 모듈 

레퍼런스

  • Gopi Krishna (2005-11-09). "SystemVerilog DPI Tutorial".
  • 프로젝트 VeriPage의 SystemVerilog DPI 튜토리얼