欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SV---包的使用

程序员文章站 2022-05-07 20:13:32
...

1.包的意义

SV---包的使用

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.包和库的区分

SV---包的使用 

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.包的使用 

SV---包的使用

例题

SV---包的使用

解析:包中编译的类可以导入到其他域中,其中域包括module interface program class package。对于C,因为包也是一个域,所以可以导入其他包定义的类。所以ABCD都对。

 

相关标签: SV