본문 바로가기

SystemVerilog

(7)
[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_..
[SystemVerilog] DPI의 심화(3) - data exchange SystemVerilog와 C 사이의 data exchange는 DPI-C interface를 통해 이루어진다. 이번 게시글에서는 SV가 C 함수를 호출한다는 것 자체보다, SV에서 C로 함수 호출시 argument를 건네줌으로써 data를 교환할 수 있다는 데에 초점을 맞추어서 본다!! Data Mapping between SV and C 대부분의 SystemVerilog Data Type들은 C언어와 직접 대응되는 data type이 있는 반면, 그렇지 않은 데이터 타입들(4 state variable이나 array)들은 DPI-C나 API에 define된 특정 type을 필요로 한다.. ( 기존의 SystemVerilog Data Type이 아니라, user-defined? DPI에서 새롭게 정의된..
[SystemVerilog] DPI의 심화(2) - pure와 context의 의미 SystemVerilog DPI 심화 개념 Pure Import한 function을 pure로 선언하면 여러모로 최적화된 사용이 가능하다. 시뮬레이션 성능이 개선될 수 있으나 몇몇 제한이 걸린다. Function은 아래 조건을 충족할 때만 pure 선언이 가능하다. 1) 함수의 result가 오직 input에만 관계 있다. 2) 함수를 호출해도 side effect가 없다. 값을 직간접적으로 바꾸지 않는다. 다른 함수를 호출하지 않는다. File operation을 하지 않는다. Read/Write 동작이 없다. 3) output이나 inout argument가 없다. output이나 inout argument가 있을 경우, 이 함수는 output/inout argument를 바꿀 수 있으므로 side ..
[SystemVerilog] DPI의 개념 (1) DPI 란? Direct Programming Interface. SystemVerilog와 다른 프로그래밍 언어(C, C++ SystemC등) 간 통신을 할 수 있도록 도와주는 인터페이스이다. DPI Import and Export Methods Import Method 다른 프로그래밍 언어로 구현된 함수를 SV 코드에서 호출하는 메소드 Export Method SV로 구현된 메소드를 다른 프로그래밍 언어에서 호출하는 메소드. 의의 : 위 메소드들에 argument를 pass & return함으로써, 서로 다른 두 언어간 data를 주고 받을 수 있다.!! Import Declaration import "DPI-C" function int calc_parity(input int a); systemver..
[SystemVerilog/UVM] Factory Pattern (팩토리 패턴)에 관하여. Factory Pattern은 디자인 패턴이다. 0. 잡소리 ( 바쁘면 읽지 마세요 TMI 대잔치) 요즘은 UVM에 관해 구글링 하면 익사이팅(?)이라는 한 개인 블로그를 찾을 수 있어 자주 참고하지만 그때는 한국어로 작성된 UVM자료가 지금보다 더, 더, 더 희박했기 때문에.. 열심히 번역해도 모르는 개념이 있으면 알지 못한 채로 넘어가거나, 추측하는 수밖에 없었다. UVM 관련 웹사이트에 기재된 포스팅을 공부하면서 컴포넌트, 시퀀스 등에 관해서는 약간의 감을 잡을 수 있었지만, UVM factory에 관해서는 정말 오리무중이었다. 뭐하자는 건지 알 수 없었다. 대충 'new를 직접 호출하지 않고, UVM에서 제공되는 어떤 특별한 메서드를 호출해야 한다.' 정도로만 이해했었다. 2020년 봄.. 이전 ..
[ SystemVerilog ] static변수와 함수의 의미, protected란? systemverilog에서 static 변수란, globa variable과 비슷한 의미이다. 만약 class 변수를 static으로 선언한다면 여러 class object들, 혹은 코드 여러 곳에서 바라본 이 variable이, 단 하나의 data member copy임을 의미한다. 그러니까 쉽게 말해, one and only~! 실제 객체는 하나뿐이며, 이 객체가 할당된 메모리 한 곳만을 모두가 바라본다는 사실~ 그럼, 클래스 하나로 여러개의 인스턴스를 생성했을 때, 모든 인스턴스의 static member는 같은 레퍼런스이며, 한 곳에서 수정되면 다른 모든 곳에서 수정된다는 뜻이다. 마치 global variable처럼 말이다. 원래 우리는 programming 할때 global variable ..
[SystemVerilog] Packed 와 Unpacked는 무슨 의미일까? bit [A:B] x; bit y [A:B]; x가 packed이고, y는 unpacked array라는 사실은 누구나 다 안다. 하지만 packed와 unpacked의 진짜 의미는 무엇일까? 1. Array란? - 동일한 type 변수들의 collection - 근데, 변수 이름과 인덱스로 접근 가능한. Verilog-2001 (표준?)에서는 vector와 array로 구분함. vector와 array의 차이점이라 하면 vector는 하나의 single unit으로서 한 번에 assign될 수 있고, array는 element 각각을 procedural statement 에서 하나씩 따로 접근할 수 있다. - array element로는 모든 data type이 가능하다. - vector-width로는..