1. 包的定义
- 在大型的验证项目中,很容易出现模块重名的情况
- 对于重名的硬件模块我们可以将它们置入到不同的编译库中
- 对于重名的软件类、方法等,我们可以将它们置入到不同的包中
- 我们可能使用不同的验证IP,我们也无法预测这些类名是否可能重名
- 通过包package可以将关联的类和方法并入到同一个逻辑集合中
- 为了使得可以在多个模块(硬件)或者类(软件)之间共享用户定义的类型,SV添加了包package
- 用户自定义的类型譬如类,方法、变量、结构体、枚举等都可以在package…endpackage中定义
2. 导出包的内容
- module、interface、class等可以使用包中定义或者声明的内容
- 可以通过域的索引符::号直接引用
definitions::parameter
definitions::instruction_t inst - 可以指定索引一些需要的包中定义的类型指定的域中
module M;
import definitions::instruction_t;
instruction_t inst;
endmodule - 通过通配符来将包中所有的类别导入到指定的域中
module M;
import defintions::;
instructjion_t inst;
endmodule
3.包与库的区分
- package这个容器可以对类型做一个隔离作用
- package的意义在于将软件(类、类型、方法等)封装在不同的域中,以此来与全局的域进行隔离
- 库是编译的产物,硬件(module、interface、program)都会编译到库中,如果不指定编译库的话,会被编译进入默认库中
- 库可以容纳硬件类型,也可以容纳软件类型,例如类、方法和包
- 包只能容纳软件类型例如类、方法和参数