지노랩 /JinoLab

[SystemVerilog] 2.7 연결 리스트 (Linked Lists) 본문

SystemVerilog검증/2. Data Type

[SystemVerilog] 2.7 연결 리스트 (Linked Lists)

지노랩/JinoLab 2025. 2. 23. 09:21

SystemVerilog은 표준 템플릿 라이브러리(STL)의 리스트 컨테이너와 유사한 연결 리스트(Linked List) 자료 구조를 제공한다. 이 컨테이너는 **파라미터화된 클래스(parameterized class)**로 정의되며, 이를 통해 다양한 유형의 데이터를 저장하도록 맞춤 설정할 수 있다.

2.7.1 SystemVerilog에서의 연결 리스트 개념

연결 리스트는 노드(Node)와 포인터(Pointer)로 이루어진 동적 자료 구조로, 각 노드는 데이터와 다음 노드를 가리키는 포인터를 포함한다. 이를 통해 연속적인 메모리 공간을 필요로 하지 않으며, 삽입과 삭제가 용이하다는 장점이 있다. 하지만 SystemVerilog에서는 이 자료 구조를 적극적으로 사용하는 것이 권장되지 않는다.

2.7.2 SystemVerilog에서 연결 리스트를 피해야 하는 이유

SystemVerilog에서 연결 리스트를 사용할 수 있음에도 불구하고, 큐(Queue)를 더 효율적인 대안으로 추천한다. 그 이유는 다음과 같다.

  1. SystemVerilog의 큐(Queue) 기능이 더 효율적임
    • 연결 리스트는 개별적인 노드를 동적으로 할당하고 포인터를 관리해야 하므로, 추가적인 메모리 오버헤드가 발생한다.
    • 반면, SystemVerilog의 **큐(Queue)**는 내부적으로 효율적인 데이터 관리가 가능하도록 설계되어 있어, 더 빠른 성능을 제공한다.
  2. 연결 리스트는 복잡한 메모리 관리가 필요함
    • C++과 같은 언어에서는 연결 리스트를 수동으로 관리해야 하지만, SystemVerilog에서는 큐를 사용하면 자동으로 메모리 관리를 수행한다.
  3. 큐(Queue)가 사용하기 쉬움
    • 연결 리스트를 사용하려면 직접 노드를 생성하고 포인터를 관리해야 하지만, 큐는 기본적으로 제공되는 API를 통해 간단하게 사용 가능하다.

2.7.3 C++ STL과 비교

C++ 프로그래머는 STL에서 제공하는 std::list와 유사한 기능을 기대할 수 있지만, SystemVerilog에서는 STL의 연결 리스트를 직접 구현할 필요가 없다. SystemVerilog의 큐(Queue)는 더 나은 성능을 제공하며, 코드의 복잡도를 줄이는 데 도움이 된다. 따라서, SystemVerilog 환경에서는 연결 리스트보다 큐(Queue)를 활용하는 것이 일반적으로 더 바람직하다.

 

 

 

Chris Spear 저자님의

SystemVerilog For Verification

A Guide to Learning the Testbench Language Features

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