본문 바로가기

SystemVerilog

[SystemVerilog] DPI의 심화 - Chandle이란?

 

 

Chandle이란? 

외부 C/C++ 자료구조에 access하기 위한 (sv에서 사용되는) pointer이다. 

systemverilog 디자인에서 다른언어의 data 구조를 조작하기 위해 사용되는 pointer이다. 

Chandle은 사용전에 반드시 null로 initialize 되어야 한다.

 

 

chandle 선언 및 초기화 

chandle myPointer = null;

 

Chandle의 사용

myPointer = some_dpi_function();

some_dpi_function이라는 dpi 함수를 호출하고, 

그 함수가 반환하느 pointer를 myPointer라는 chandle pointer var에 assign 함.

 

이제 이 pointer를 사용해서 c자료구조의 값을 바꿔볼 것임.

(* (my_data_type *) myPointer).my_data_member = 42;

위 예시에서 보면

myPointer를 사용해서 my_data_type 스트럭쳐 타입의 멤버인 my_data_member에  access를 하였다.

chandle이라는 일반적인 type의 myPointer를 my_data_type을 핸들링할 수 있는 포인터 핸들로 다시 type casting 한 것임.

 

 

결론

chandle은 systemverilog에서 꽤나 중요한 data type이다. 

DPI를 통해 전달되는 pointer를 담을 수 있는 핸들이기 때문이다.

chandle data type을 사용함으로써, external language나 library와 시스템베릴로그 디자인을 인터페이싱할 수 있으며

모델링, 테스트벤치의 성능을 향상시킬 수 있다.

다만 chandle을 사용하기 전에 앞서 null로 초기화할 것을 유념하자!