gpt4 book ai didi

system-verilog - SystemVerilog 中的向上转型

转载 作者:行者123 更新时间:2023-12-05 04:26:40 24 4
gpt4 key购买 nike

我正在尝试理解 SystemVerilog 中的向上转型和向下转型。向上转型是转换为父类(super class)型,而向下转型是转换为子类型。向上转型总是被允许的,但向下转型涉及类型检查。

所以我做了一个简单的向上转型和向下转型的测试代码。

1.向上转换测试。

class animal;
function void eat();
$display("eat");
endfunction
endclass

class dog extends animal;
function void bark();
$display("woof");
endfunction
endclass

class cat extends animal;
function void meow();
$display("meow");
endfunction
endclass

module test;
animal a1,a2;
dog d1, d2;
cat c1, c2;
initial begin

a1=new();
d1=new();
c1=new();

d1.eat();
c1.eat();

d1.bark();
c1.meow();

c1 = d1;
c1.bark(); //bark is not a class item.

d1 = c1;
d1.meow(); //meow is not a class item.

a1 = d1;
a1.bark(); //bark is not a class item.

a1 = c1;
a1.meow(); //meow is not a class item.


end
endmodule

在 animal、dog 和 cat 类中,我需要使用派生的 dogmeow 的 barkmeow 函数 类。所以我声明如下但我得到了编译错误

    c1 = d1;
c1.bark(); //bark is not a class item.
d1 = c1;
d1.meow(); //meow is not a class item.
a1 = d1;
a1.bark(); //bark is not a class item.
a1 = c1;
a1.meow(); //meow is not a class item.

据我所知,基类想要/需要来自派生类的属性,然后我们进行向上转型。如何获取c1's bark()d1's meow()a1's bark()a1.meow()?

最佳答案

如果您注释掉 c1 = d1; 之后的所有行,您会得到更有用的错误消息:

    c1 = d1;
|
xmvlog: *E,TYCMPAT: assignment operator type check failed
(expecting datatype compatible with 'class $unit::cat' but found
'class $unit::dog' instead).

这为您提供了为什么 bark 不是类项目的原因:赋值失败,因为 c1type 不同>d1.

VCS 模拟器的行为方式相同,并产生类似的编译错误。

关于system-verilog - SystemVerilog 中的向上转型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73001505/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com