SV---包的使用
程序员文章站
2022-05-07 20:13:32
...
1.包的意义
2.包的定义
package regs_pkg;
`include "stimulator.sv"
`include "monitor.sv"
`inclide "chker.sv"
`include "env.sv"
endpackage
package arb_pkg;
`include "stimulator.sv"
`include "monitor.sv"
`inclide "chker.sv"
`include "env.sv"
endpackage
module mcdf_tb;
regs_pkg :: monitor mon1 = new();
arb_pkg :: monitor mon2 = new();
endmodule
package是将命名空间分隔开来,当使用不同package中的同名类,只需要注明是使用哪个package中的。
只需要通过xxx_pkg :: 进行索引即可。
`include的作用是把各个sv的代码复制到package中。
3.包和库的区分
4.包的命名规则
package以及其内部定义的类名称尽量加前缀。
这样的好处是不同package中定义的class也不同,在顶层的引用也可以通过“import pkg_name :: *”的形式,来表示在module mcdf_tb中引用的类,如果在当前域(mcdf内部)中没有定义的话,会搜寻regs_pkg和arb_pkg的定义的类,又由于它们各自包含的类名不相同,因此无需担心下面的搜寻会遇到同名类发生冲突的问题。
package regs_pkg;
`include "regs_stm.sv"
`include "regs_mon.sv"
`inclide "regs_chk.sv"
`include "regs_env.sv"
endpackage
package arb_pkg;
`include "arb_stm.sv"
`include "arb_mon.sv"
`inclide "arb_chk.sv"
`include "arb_env.sv"
endpackage
module mcdf_tb;
import regs_pkg :: *; //引用regs_pkg
import arb_pkg :: *; //引用arb_pkg
regs_mon mon1 = new();
arb_mon mon2 = new(); //添加前缀regs和_arb_ ,这样mon1和mon2就不会冲突
endmodule
5.包的使用
例题
解析:包中编译的类可以导入到其他域中,其中域包括module interface program class package。对于C,因为包也是一个域,所以可以导入其他包定义的类。所以ABCD都对。
上一篇: PHP单双引号的关系与区别