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条评论
快来发表一下你的评论吧 !