베릴로그 6

Direct Programming Interface (DPI) 개념 및 사용법

0. Direct Programming Interface (DPI) 란? Direct Programming Interface (DPI)란 system verilog와 C (혹은 C++)간의 인터페이스로, 상호 간 task 혹은 function을 export/import 하여 사용할 수 있도록 하는 인터페이스이다. 하드웨어 설계 후 검증을 위해 system verilog를 가장 많이 사용할 것이다. C 언어만을 사용하여 하드웨어를 제어하는 데에는 보통 아래와 같은 어려움이 있다. 하드웨어 접근 (access) 자체가 어렵다. Delay를 모델링할 수 없다. 이러한 C언어의 제약사항을 DPI를 사용하여 극복할 수 있다. C 코드에서 verilog로 작성된 task를 호출하여 사용하고, 혹은 그 반대, 즉 s..

하드웨어 검증 언어, System Verilog 란? - Testbench, DUT

회로설계 엔지니어라면 System Verilog가 익숙할 것이라 생각된다. System Verilog는 하드웨어 검증용 프로그래밍 언어이다. Verilog, VHDL과 같은 hardware description language (HDL)로 설계된 하드웨어 설계물을 검증하기 위한 객체 지향 기반 프로그래밍 언어 (Object-Oriented Programming) 이다. 본 포스팅에서는 System Verilog의 기초에 대해 알아보도록 하자. 0. 개요 Verilog, VHDL과 같은 hardware description language를 통해 설계된 하드웨어 모델을 HDL을 사용하여 검증하는 데에는 한계가 있다. 설계에서 검증의 중요성이 커짐에 따라 이를 위해 기존 verilog가 확장된 System ..

[Verilog] reg vs wire - reg와 wire의 차이점

Verilog 언어의 reg와 wire 자료형에 대해 알아보자. 1. reg " Data를 저장하기 위한 변수 " Reg는 data를 저장하기 위한 변수로 다음 값이 할당되기 전까지 현재 값을 유지하므로 procedural assignment를 구현할 때 사용된다. Initial/always block 구문 내에서 출력으로는 반드시 reg를 사용해야 한다. Combinational logic과 sequential logic을 구현할 때 모두 사용 가능하다. 하지만 reg를 사용하여 combinational logic을 구현하면 현재 값을 유지할 필요가 없기 때문에 wire처럼 합성된다. ※ reg과 register는 같은 말이다? reg와 register의 개념이 동일한 것은 아니다. reg라는 자료형을..

[Verilog] Blocking Assignment vs Non-Blocking Assignment - 베릴로그 절차형 할당문의 종류

Procedural assignment의 종류에는 blocking assignment와 non-blocking assignment가 있다. 각 할당문과 그 차이에 대해 알아보자. 1. Blocking Assignment " 기술된 순서대로 동작하는 할당문 " Blocking assignment는 그 이름에서도 알 수 있듯, 현재 statement가 수행되는 동안 block 처리가 되어 다음 statement가 수행되지 않는다. 따라서, 다음 statement에서는 업데이트된 값을 사용하며, 기본적으로 zero-delay를 갖는다. 할당 연산자 = 을 사용한다. 2. Non-Blocking Assignment " 기술 순서와 무관하게 동시에 수행되는 할당문 " Non-Blocking assignment는 ..

[Verilog] Continuous Assignment vs Procedural Assignment - 베릴로그 연속 할당 vs 절차형 할당

Verilog에서 값을 할당하는 구문은 Continuous Assignment와 Procedural Assignment 두 가지가 있다. 각 할당문과 그 차이에 대해서 알아보자. 1. Continuous Assignment - 연속 할당 " Net형 객체에 값을 할당하는 구문 " Continuous assignment 연속 할당문은 assign문을 통해 net형 객체에 값을 할당한다. =의 우변에 값의 변화가 생기면, 즉 이벤트가 발생하면 좌변의 객체에 그 값을 할당하게 된다. 모든 continuous assignment는 우선순위가 없이 우변의 이벤트에 따라 수행되기 때문에, 할당문의 기술순서가 시뮬레이션 결과에 영향을 끼치치 않는다. 연속 할당문을 사용하여 조합논리회로인 combinational lo..