- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试理解 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 类中,我需要使用派生的 dog
和 meow 的
类。所以我声明如下但我得到了编译错误bark
和 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.
据我所知,基类想要/需要来自派生类的属性,然后我们进行向上转型
。如何获取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
不是类项目的原因:赋值失败,因为 c1
与 的type 不同>d1
.
VCS 模拟器的行为方式相同,并产生类似的编译错误。
关于system-verilog - SystemVerilog 中的向上转型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73001505/
我为连接编写了如下代码,但显示错误: module main ; bit [4:0] a; reg b,c,d; initial begin b = 0; c =
我正在尝试创建一个 for 循环,在给定循环迭代的情况下将不同的值分配给逻辑数组。 因此,例如,假设我正在尝试实例化两个不同的积木,宽度均为 10,高度均为 5。我们还假设这些值中的每一个都是 10
我有一个 systemverilog 模块,它引用一个生成的头文件,其中包含各种类型定义和函数。这是可合成的代码。该模块之前工作正常,因为头文件是使用预处理器包含的。 现在我的架构发生了变化,我需要实
我将两种设计组合成一个单芯片设计。 RTL 代码是用 SystemVerilog 编写的,用于综合。不幸的是,这两种设计包含许多名称相同但逻辑略有不同的模块。 SystemVerilog 中是否有 n
我正在尝试在系统verilog中随机化3个不同的变量,但以循环方式。我的意思是,我有以下 3 个变量 rand int a; rand int b; rand int c; constraint c_
默认情况下,SystemVerilog 是按值还是按引用传递数组? 例如: int array[5] = '{0,1,2,3,4}; some_function(array); // <-- val
SystemVerilog 是否支持向下转型(将基础对象转型为派生对象)?如果是这样,怎么办? 下面的沮丧示例不起作用: class base; int a = 5; endclass class
这是设计代码: module mul_clock (input clkA, clkB, in, output out); bit temp; reg x[2:0]; always @ (p
我有 Verilog-95 背景,我正在尝试找出我不再需要跳过的 Verilog-95 障碍。 在 Verilog-95 中编写具有异步设置和复位功能的触发器的明显方法是: always @(pose
我在寄存器 block Regblock 中实例化了寄存器,如下所示: DUT.Regblock.Register1 DUT.Regblock.RegisterA DUT.Regblock.Regis
我正在尝试理解 SystemVerilog 中的向上转型和向下转型。向上转型是转换为父类(super class)型,而向下转型是转换为子类型。向上转型总是被允许的,但向下转型涉及类型检查。 所以我做
在 SystemVerilog 中有没有一种方法可以分析压缩结构并确定它的整体大小(以位为单位)? typedef struct packed unsigned { logic [15:0]
我经常使用 systemverilog。 我正在使用 UltraEdit 作为文本编辑器。我也使用 VIM。 有时我必须从其他地方复制代码并将其粘贴到我的代码中。 它可能没有正确缩进。再次正确缩进是一
我有两个打包的信号数组,我需要为该属性创建一个属性和关联的断言,以证明这两个数组在某些条件下是相同的。我正在正式验证并且该工具无法在单个属性中证明两个完整数组,因此我需要将其拆分为单个元素。那么有没有
有什么方法可以获取它在 SystemVerilog 中操作的对象的名称? 就像实现 object1.printName() 应该打印字符串 object1 最佳答案 不,语言中没有为类执行此操作的机
我正在尝试创建一个像这样的解包数组: logic [3:0] AAA[0:9]; 我想将此数组初始化为以下值: AAA = '{1, 1, 1, 1, 2, 2, 2, 3, 3, 4}; 为了提高效
我将一些 systermverilog 代码重写为 chisel,但我找不到在 chisel 中表达 systemverilog 的打包联合的好方法。例如, typedef struct packed
我正在尝试了解在 SystemVerilog 中应如何定义引脚。 我有: 一个普通的dataBus 一个 ramController 模块,可以在其 ioData 引脚上发送或接收数据。 一个可以写入
以下两个属性有何不同? property p1; @(posedge clk) disable iff (Reset) b ##1 c; endproperty property p2;
我正在尝试将一些 SystemVerilog 代码移植到 C++/SystemC,并且在我看到奇怪的数组索引的几行上有点卡住了。这是我所看到的简化版本。 typedef enum bit [2:0]
我是一名优秀的程序员,十分优秀!