SystemVerilog packages提供了对于许多不同数据类型的封装,包括变量、task、function、assertion等等,以至于可以在多个module中共享。
简单来说,package就是一个命名空间。
package myPack;
typedef struct {
int i;
int j;
} cStruct;
function cStruct add (cStruct a , b);
add.i = a.i + b.i;
add.j = a.j + b.j;
endfunction
endpackage
module top (
//referencing package item 'cStruct' of myPack
output myPack::cStruct cout,
input myPack::cStruct a , b
);
//referencing 'add' function of myPack
assign cout = myPack::add(a , b);
endmodule
在上面的例子中,我们声明了一个package “myPack” ,其中声明了一个struct数据类型“cStruct”和一个function “add.” 在module “top”中,我们使用package中的“cStruct”数据类型作为module的输入输出。
我们在引用package中成员使用了:
myPack::**
另外一种方式就是import了,import之后就无需在引用package中的成员时使用“myPack::”
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !