我在那里类param0
和param1
声明一个包。 有人能解释我为什么这些类系统的Verilog:一包的实例化对象
(ex:param0 = new())
的实例应该在顶层模块上进行,并包本身不直接里面?
我想在包内部做的原因是在类param1
中使用param0
类的一些参数。
我在那里类param0
和param1
声明一个包。 有人能解释我为什么这些类系统的Verilog:一包的实例化对象
(ex:param0 = new())
的实例应该在顶层模块上进行,并包本身不直接里面?
我想在包内部做的原因是在类param1
中使用param0
类的一些参数。
包仅用于声明,不能包含任何过程,棋子之外。由于new类是一个特殊的函数调用,因此它必须在进程上下文中使用,因此不能在包中使用。
可以使用的Class1 ::参数1直接引用类成员的参数。
我使用VCS
,我不明白为什么类对象不能在包分配。以下代码在VCS
和ncverilog
中工作。
package pkg;
class Base;
int x;
function new();
x=1;
endfunction
function int value();
return x;
endfunction
endclass : Base
class C;
Base b;
function new();
b = new;
endfunction
function get();
return b.value();
endfunction
endclass : C
C d = new;
endpackage
pkg::C e = new;
module top;
import pkg::*;
C c;
initial begin
c = new;
$display("c=%d", c.get());
$display("d=%d", d.get());
$display("e=%d", e.get());
end
endmodule
但是,在包中声明这样的全局变量或实例并不是一种好的编码风格。该包只能用于编写声明。即使你不这样做的包,但宣布他们module
/program
/package
外,它属于$unit
包。当然,您可以使用类实例的任何new
操作编写类函数体定义,函数或任务。包的概念只是声明,所以任何类,函数,任务,网络/变量都将被导入到模块或程序中。
一个问题,在一个包实例化对象是个问题,如果没有人使用(进口)的软件包,并在对象仍然得到需要得到建设? SystemVerilog标准没有回答这个问题,而是留给工具供应商。所以你更安全,把它们从你的包里拿出来。