지노랩 /JinoLab

[SystemVerilog] 4.5객체 지향 프로그래밍(OOP) 용어 정리 본문

SystemVerilog검증/4. 객체지향 OOP 기초

[SystemVerilog] 4.5객체 지향 프로그래밍(OOP) 용어 정리

지노랩/JinoLab 2025. 2. 25. 11:07

4.5 OOP Terminology (객체 지향 프로그래밍 용어 정리)

SystemVerilog에서 객체 지향 프로그래밍(Object-Oriented Programming, OOP)은
효율적인 테스트벤치(Testbench) 설계를 가능하게 하는 중요한 개념이다.

초보자와 전문가의 차이는 OOP 개념과 용어를 얼마나 잘 이해하고 활용하는지에서 비롯된다.
이 글에서는 Verilog 및 SystemVerilog에서 사용하는 주요 OOP 개념과 그에 대한 설명을 제공한다.


1. SystemVerilog에서 사용되는 주요 OOP 개념

① 클래스(Class)

  • 클래스는 객체를 생성하는 기본적인 설계 단위이다.
  • 내부에 변수(데이터)와 함수(루틴)를 포함한다.
  • Verilog에서 모듈(Module)과 유사한 개념이다.

② 객체(Object)

  • 클래스의 인스턴스(Instance, 실체화된 개체)
  • Verilog에서 모듈을 인스턴스화하여 사용하는 것과 유사하다.
  • 즉, 클래스를 정의한 후, 이를 기반으로 실제 사용 가능한 객체를 생성해야 한다.

③ 핸들(Handle)

  • 객체에 대한 포인터(Pointer) 또는 참조(Reference)
  • Verilog에서는 모듈 인스턴스의 이름을 사용하여 신호나 메서드에 접근하지만,
    OOP에서는 핸들을 이용해 객체를 동적으로 관리할 수 있다.
  • 객체의 메모리 주소를 저장하는 역할을 하며, 한 번에 한 개의 타입만 가리킬 수 있다.

④ 속성(Property)

  • 클래스 내에 포함된 변수(Variable)로, 데이터를 저장하는 역할을 한다.
  • Verilog에서는 **레지스터(Register)나 와이어(Wire)와 같은 신호(Signal)**가 속성과 유사하다.

⑤ 메서드(Method)

  • 객체 내에서 데이터를 조작하는 프로시저(Procedure) 코드
  • Verilog에서는 **태스크(Task)와 함수(Function)**가 동일한 역할을 수행한다.
  • SystemVerilog 클래스 내부에서는 태스크와 함수를 **메서드(Method)**라고 부른다.

⑥ 프로토타입(Prototype)

  • 루틴의 **이름(Name), 타입(Type), 인자 리스트(Argument List)**를 정의하는 선언부(Declaration).
  • 루틴의 본문(Body)에는 실행할 코드가 포함된다.
  • Verilog에서는 태스크와 함수의 선언부에 해당한다.

2. SystemVerilog vs Verilog의 용어 차이

이 책에서는 Verilog에서 사용하던 기존의 용어를 유지하는 방식을 따르고 있다.
즉, Verilog에서 사용하던 **"변수(Variable)"와 "루틴(Routine)"**이라는 용어를 그대로 사용하며,
OOP에서 일반적으로 쓰이는 **"속성(Property)"와 "메서드(Method)"**라는 용어는 사용하지 않는다.

만약 OOP 개념이 익숙하다면, 이 장을 간략하게 훑어봐도 된다.


3. OOP 개념을 쉽게 이해하는 비유: 집과 설계도

객체 지향 프로그래밍 개념을 쉽게 이해하기 위해, 집과 설계도(blueprint)의 관계를 예로 들 수 있다.

  • 클래스(Class) = 집의 설계도(BluePrint)
    • 설계도는 집의 구조를 설명하지만, 실제로 사람이 거주할 수 있는 형태가 아니다.
    • 하나의 설계도로 여러 개의 집(객체)을 지을 수 있다.
  • 객체(Object) = 실제 집(House)
    • 설계도를 바탕으로 실제 존재하는 개체(Instance)가 만들어진다.
    • 같은 설계도를 사용하더라도, 서로 다른 위치에 여러 개의 집이 존재할 수 있다.
  • 핸들(Handle) = 집 주소(Address)
    • 핸들은 객체를 참조하는 역할을 한다.
    • 주소(Address)를 통해 특정 집을 가리키듯이, 핸들은 특정 객체를 가리킨다.
  • 속성(Property) = 집 내부의 상태
    • 집 안에 있는 조명(On/Off), 가구의 위치, 온도 등의 상태 정보
    • 클래스의 변수(데이터 멤버)와 동일한 개념이다.
  • 메서드(Method) = 집 안에서 수행할 수 있는 동작
    • 조명을 켜거나(turn_on_light()), 난방을 조절하는(set_temperature()) 기능
    • 클래스의 함수(메서드)와 동일한 개념이다.
class House;
    bit porch_light; // 속성: 현관등 상태 (0=OFF, 1=ON)

    function void turn_on_porch_light();
        porch_light = 1; // 메서드: 현관등을 켜는 기능
    endfunction
endclass

위의 House 클래스에서, turn_on_porch_light() 메서드를 호출하면 현관등을 켜는 동작이 수행된다.


4. SystemVerilog에서 OOP를 활용하는 방법

Verilog에서 복잡한 설계를 만들 때는 모듈(Module)을 계층적으로 구성한다.
SystemVerilog에서는 이를 객체(Object) 기반으로 설계하여 계층적인 구조를 유지할 수 있다.

  1. Verilog 방식:
    • 모듈(Module)을 계층적으로 설계
    • 모듈 인스턴스화(Instantiation) 사용
    • 태스크(Task)와 함수(Function) 활용
  2. SystemVerilog OOP 방식:
    • 클래스(Class) 기반 설계
    • 객체(Object)를 동적으로 생성 및 관리
    • 속성(Property)과 메서드(Method)를 활용하여 모듈화

이처럼 SystemVerilog에서 객체 지향 개념을 활용하면 코드의 유지보수성과 확장성을 향상시킬 수 있다.


결론

SystemVerilog에서 객체 지향 프로그래밍(OOP)은 테스트벤치 및 설계 구조를 더욱 체계적으로 조직하는 데 중요한 역할을 한다.
이를 이해하고 활용하면 보다 강력하고 유연한 테스트 환경을 구축할 수 있다.

  • 클래스(Class): 객체를 정의하는 기본 단위
  • 객체(Object): 클래스의 인스턴스
  • 핸들(Handle): 객체를 가리키는 포인터
  • 속성(Property): 객체의 데이터
  • 메서드(Method): 객체의 동작을 정의하는 함수
  • 프로토타입(Prototype): 함수의 선언부

이러한 개념을 잘 이해하고 적용하면, SystemVerilog 기반의 검증 환경을 더욱 효과적으로 구축할 수 있다.

 

 

 

 

Chris Spear 저자님의

SystemVerilog For Verification

A Guide to Learning the Testbench Language Features

내용을 기본으로 작성되었습니다.