지노랩 /JinoLab
[SystemVerilog] 2.10 typedef를 사용한 새로운 데이터 타입 생성 본문
[SystemVerilog] 2.10 typedef를 사용한 새로운 데이터 타입 생성
지노랩/JinoLab 2025. 2. 23. 09:33SystemVerilog에서는 typedef 문을 사용하여 새로운 데이터 타입을 정의할 수 있다.
예를 들어, ALU(Arithmetic Logic Unit)가 8비트, 16비트, 24비트, 32비트와 같이 여러 크기의 피연산자를 지원해야 한다면, Verilog에서는 매크로를 사용하여 각 피연산자 크기를 정의해야 했다.
2.10.1 Verilog에서 매크로를 사용한 사용자 정의 타입
기존 Verilog 스타일에서는 다음과 같이 매크로를 정의하여 데이터를 처리했다.
// Old Verilog style
`define OPSIZE 8
`define OPREG reg [`OPSIZE-1:0]
`OPREG op_a, op_b;
이 방법은 실제로 새로운 타입을 생성하는 것이 아니라 **텍스트 치환(text substitution)**을 수행하는 방식이다. 따라서 코드 유지보수성과 가독성이 떨어질 수 있다.
2.10.2 SystemVerilog에서 typedef를 사용한 사용자 정의 타입
SystemVerilog에서는 typedef 문을 활용하여 보다 직관적인 방식으로 새로운 데이터 타입을 정의할 수 있다.
// New SystemVerilog style
parameter OPSIZE = 8;
typedef reg [OPSIZE-1:0] opreg_t;
opreg_t op_a, op_b;
위 코드에서 typedef를 사용하면 opreg_t라는 새로운 데이터 타입이 정의되며, 이후 변수를 선언할 때 opreg_t를 사용하여 일관성을 유지할 수 있다.
2.10.3 typedef와 parameter의 활용
SystemVerilog에서는 기본적인 데이터 타입 간의 복사가 가능하며, 크기가 맞지 않을 경우 자동으로 확장 또는 잘림(truncation)이 발생한다.
또한, parameter 및 typedef 문을 $root에 정의하여 글로벌(global) 변수로 설정하면, 시뮬레이션 전체에서 사용할 수 있다.
2.10.4 uint 타입 정의
SystemVerilog에서 가장 유용한 타입 중 하나는 부호 없는(unsigned), 2-상태(2-state), 32비트 정수이다.
테스트벤치에서 필드 길이(field length)나 트랜잭션(transaction) 수를 다룰 때 주로 사용된다.
typedef bit [31:0] uint; // 32비트 부호 없는 2-상태 정수
typedef int unsigned uint; // 동등한 정의
이와 같이 typedef를 사용하면 보다 직관적인 타입 정의가 가능하며, 향후 유지보수성을 높일 수 있다.
Chris Spear 저자님의
SystemVerilog For Verification
A Guide to Learning the Testbench Language Features
내용을 기본으로 작성되었습니다.
'SystemVerilog검증 > 2. Data Type' 카테고리의 다른 글
[SystemVerilog] 2.12 열거형(Enum) 타입 (0) | 2025.02.23 |
---|---|
[SystemVerilog] 2.11 사용자 정의 구조체 (User-Defined Structures) (0) | 2025.02.23 |
[SystemVerilog] 2.9 저장소 유형 선택 (Choosing a Storage Type) (0) | 2025.02.23 |
[SystemVerilog] 2.8 배열 연산 메서드 (0) | 2025.02.23 |
[SystemVerilog] 2.7 연결 리스트 (Linked Lists) (0) | 2025.02.23 |