Я пытаюсь изучить случай, ссылаясь на https://verificationacademy.com/courses/systemverilog-oop-for-uvm-verification
Чтобы понять '$ cast', я реализовал следующее:
class A;
int v=1;
endclass
class F extends A;
int w=2;
endclass
class B extends A;
int x=3;
endclass
class G extends B;
int y=4;
endclass
class C extends B;
int z=5;
endclass
module test;
initial begin
A a_h = new();
B b_h;
G g_h;
C c_h;
F f_h;
$display(a_h.v);
if ( $cast(c_h, a_h) )
$display(c_h.z);
else if ( $cast(g_h, a_h) )
$display(g_h.y);
end
endmodule
Но у меня естьтолько только
'1'
Я думаю, что приведенный ниже код не работает.
if ( $cast(c_h, a_h) )
$display(c_h.z);
else if ( $cast(g_h, a_h) )
$display(g_h.y);
Не могли бы вы помочь мне с тем, что в нем произошла ошибка при поиске компонента иерархического имени?
обновление 2
Если я хочу привести G к классу А, что я должен делать?
кастинг
I 'При реализации я получил сообщение об ошибке, как показано ниже
module test;
B b_h = new();
G g_h = new();
C c_h = new();
F f_h = new();
A a_h = new();
initial begin
$cast(c_h, a_h);
$display(c_h.z);
$display(b_h.x);
$display(a_h.v);
Сообщения об ошибках
$cast(c_h, a_h);
|
ncsim: *E,BCLCST (./test1.sv,33|5): Invalid cast: a value with the class datatype '$unit_0x118af7fb::A' cannot be assigned to a class variable with the datatype '$unit_0x118af7fb::C'.
5
3
1
Как видите, у меня есть 5, 3, 1 значения, но также и сообщение об ошибке,Пожалуйста, дайте мне знать, почему я получаю это сообщение об ошибке?