如果我没记错的话,一旦分析了软件包,它的可见性就是全局的(例如,像模块一样)。
如果设计和验证团队各自有自己的“ common_pkg”软件包,是否可以通过某种方式对它们进行编译,并使用设计的common_pkg进行设计和使用common_pkg进行验证?
我的想法是通过将它们封装在设计/验证包中来限制它们的范围,例如:
package design_pkg;
package common_pkg;
typedef enum {<something>} my_type;
endpackage : common_pkg
endpackage : design_pkg
package verification_pkg;
package common_pkg;
typedef enum {<something_else>} my_type;
endpackage : common_pkg
endpackage : design_pkg
// In design:
design_pkg::common_pkg::my_type my_design_var;
// In verification:
verification_pkg::common_pkg::my_type my_verification_var;
但是,似乎在systemverilog中软件包嵌套是非法的,这很奇怪,因为可以嵌套模块定义。
除了重命名软件包并避免使用过于“宽泛”的名称(如“ common_pkg”)之外,还有其他解决方案吗?
答案 0 :(得分:0)
如果工程团队可以一起工作,并且common_pkg真的意味着所有人都通用的软件包,那不是很好吗?
SystemVerilog没有内置的方式来拥有多个具有相同名称的软件包。即使您可以嵌套软件包,该软件包的可见性也将限于其中包含的软件包。
某些工具可能允许您使用其软件包来编译和优化设计,然后将设计单元作为一个整体进行绑定。
答案 1 :(得分:0)
欢迎使用系统Verilog :-(.。不幸的是,SV没有为包名冲突提供任何解决方案,也没有为全局范围内的任何其他类型的命名冲突提供任何好的方法。
这就是为什么您可能会从某些公司听到“统一”一词的原因。这实际上意味着以自动化的方式修改源代码,以唯一命名全局作用域项,例如包,模块,宏等,以用于来自多个团队(IP)的Verilog构建基块。
因此,最好的解决方案是让您的团队互相交谈并就名称的使用达成一致。