System verilog 使用相同的名称编译systemverilog包

System verilog 使用相同的名称编译systemverilog包,system-verilog,System Verilog,如果我没有弄错的话,一旦分析了一个包,它的可见性就是全局的(比如模块的可见性) 如果设计和验证团队都有自己的“common_pkg”包,是否可以以某种方式编译它们并使用design的common_pkg进行设计和验证的common_pkg进行验证 我的想法是通过将其封装在设计/验证包中来限制其范围,如下所示: package design_pkg; package common_pkg; typedef enum {<something>} my_type; endp

如果我没有弄错的话,一旦分析了一个包,它的可见性就是全局的(比如模块的可见性)

如果设计和验证团队都有自己的“common_pkg”包,是否可以以某种方式编译它们并使用design的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;
包装设计;
通用包装;
typedef enum{}my_type;
endpackage:common_包装
最终包装:设计包
包装验证;
通用包装;
typedef enum{}my_type;
endpackage:common_包装
最终包装:设计包
//在设计上:
设计包::公共设计包::我的类型我的设计包;
//核实:
验证\打包::通用\打包::我的\类型我的\验证\变量;
但是,在systemverilog中,包嵌套似乎是非法的,这很奇怪,因为模块定义可以嵌套


除了重命名软件包和避免过于“宽泛”的名称(如“common_-pkg”)可能与其他领域发生冲突之外,有没有解决此问题的方法?

如果工程团队能够一起工作,common_-pkg真的意味着一个所有人都通用的软件包,这不是很好吗

SystemVerilog没有内置的方式来拥有多个同名包。即使您可以嵌套包,包的可见性也将限于它所包含的包


某些工具可能允许您编译和优化设计及其包,然后将设计单元作为一个整体绑定

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

这就是为什么你可能会从一些公司听到术语“uniquification”。它实际上意味着以一种自动化的方式修改源代码,以便为来自多个团队(IP)的verilog构建块唯一命名全局范围项,如包、模块、宏等

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