编译具有相同名称的systemverilog软件包

时间:2018-10-19 14:07:47

标签: system-verilog

如果我没记错的话,一旦分析了软件包,它的可见性就是全局的(例如,像模块一样)。

如果设计和验证团队各自有自己的“ 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”)之外,还有其他解决方案吗?

2 个答案:

答案 0 :(得分:0)

如果工程团队可以一起工作,并且common_pkg真的意味着所有人都通用的软件包,那不是很好吗?

SystemVerilog没有内置的方式来拥有多个具有相同名称的软件包。即使您可以嵌套软件包,该软件包的可见性也将限于其中包含的软件包。

某些工具可能允许您使用其软件包来编译和优化设计,然后将设计单元作为一个整体进行绑定。

答案 1 :(得分:0)

欢迎使用系统Verilog :-(.。不幸的是,SV没有为包名冲突提供任何解决方案,也没有为全局范围内的任何其他类型的命名冲突提供任何好的方法。

这就是为什么您可能会从某些公司听到“统一”一词的原因。这实际上意味着以自动化的方式修改源代码,以唯一命名全局作用域项,例如包,模块,宏等,以用于来自多个团队(IP)的Verilog构建基块。

因此,最好的解决方案是让您的团队互相交谈并就名称的使用达成一致。