Systemerilog中有没有办法知道数据类型是对象类型还是其他基本类型?

问题描述 投票:0回答:1

我正在尝试学习 System Verilog 课程。我创建了一个参数化类,其中参数之一影响其中一个字段的数据类型。

    class Node  #(parameter type T = int, parameter BASIC_TYPE = 1);
        T data;

我想在这个 Node 类中创建一个复制函数,以便复制数据。数据可以是任何类型,例如它可以是位或类的对象。如果数据是一个对象,它应该在其上实现复制,所以像

data.copy()
这样的事情应该会起作用;

但是我正在考虑使用位的情况,这会导致错误。我想到了向类

BASIC_TYPE
添加一个参数,它的使用方式如下:

void function copy(node target);
if(BASIC_TYPE==0)
data.copy(target.data);
else
target.data = node.data;
endfunction

我想知道是否有一些内置函数可以用来检查变量是否是对象或者是否在其上实现了副本,而不是依赖于传递的参数。

system-verilog
1个回答
0
投票

您可以使用

type()
运算符测试变量的类型

if (type(target.data)==type(int)) target.data = node.data;

但是问题在于,如果变量不是类,您就无法拥有直接调用类的

copy()
方法的代码,即使该代码不可访问。

有一个解决方案,使用所谓的“政策或策略设计模式”。基本上,您可以创建另一个对象,其唯一目的是实现所需类型的复制变量。这对于初学者来说更复杂,但这里有来自 DVCon 论文的两个参考文献

SystemVerilog 1800-2012 支持的 SystemVerilog 验证环境的设计模式示例

通过可重用随机化策略类进行 SystemVerilog 约束分层

© www.soinside.com 2019 - 2024. All rights reserved.