[SystemVerilog] 다이나믹 캐스팅 (dynamic casting) 이란? | $cast(), 캐스팅 반환 값
2024. 5. 30. 22:28ㆍ(System)Verilog 시스템 베릴로그
반응형
시스템 베릴로그는 하드웨어 설계와 검증을 위한 강력한 언어로 다양한 기능을 제공하는데, 그중 다이나믹 캐스팅 (dynamic casting)은 객체 지향 프로그래밍(OOP)에서 중요한 역할을 한다.
다이나믹 캐스팅이란?
다이나믹 캐스팅 (dynamic casting)은 객체 지향 프로그래밍에서 객체를 하나의 타입에서 다른 타입으로 변환하는 방법이다.
시스템 베릴로그에서 다이나믹 캐스팅은 주로 클래스의 상속 관계에서 부모 클래스의 포인터를 자식 클래스의 포인터로 변환할때 사용된다.
다이나믹 캐스팅이 중요한 이유
- 유연성 : 상속 관계에 있는 클래스 간의 타입 변환을 가능하게 해 코드의 유연성을 높임
- 안전성 : 런타임에 타입을 확인하고 변환하여 잘못된 타입 변환을 방지
- 다이나믹 캐스팅의 기본 구문
- $cast(dest, source) : source의 타입을 dest의 타입으로 변환.
- 캐스팅이 실패하면, 0을 반환
$cast(dest, source);
- 다이나믹 캐스팅 예시
먼저, 부모 클래스 'Animal'과 자식 클래스 'Dog'를 정의하였다.
class Animal;
// Animal 클래스 멤버
function void speak();
$display("Animal speaks");
endfunction
endclass
class Dog extends Animal;
// Dog 클래스 멤버
function void speak();
$display("Dog barks");
endfunction
function void fetch();
$display("Dog fetches the ball");
endfunction
endclass
그다음 다이나믹 캐스팅을 사용하여 타입을 변환하는 예시이다.
module dynamic_cast_example;
Animal animal;
Dog dog;
Dog casted_dog;
initial begin
// Dog 객체 생성
dog = new();
dog.speak(); // 출력: Dog barks
// Animal 포인터로 Dog 객체 참조
animal = dog;
animal.speak(); // 출력: Dog barks
// 다이나믹 캐스팅
if ($cast(casted_dog, animal)) begin
$display("Cast successful");
casted_dog.fetch(); // 출력: Dog fetches the ball
end else begin
$display("Cast failed");
end
end
endmodule
이 예제에서 Animal 클래스의 포인터 animal 이 Dog 객체를 참조하고, $cast를 사용하여 animal을 Dog 타입으로 캐스팅한다.
캐스팅이 성공하면 casted_dog는 Dog 타입이 되어 fetch() 메소드를 호출할 수 있다.
반응형