编译具有相同名称的系统验证日志包



如果我没记错的话,一旦一个包被分析出来,它的可见性就是全局的(例如,一个模块的可见性(。

如果设计和验证团队都有自己的"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;

但是,似乎包嵌套在系统verilog中是非法的,这很奇怪,因为模块定义可以嵌套。

除了重命名软件包并避免可能与其他区域冲突的"common_pkg"等过于"宽泛"的名称之外,是否有解决此问题的方法?

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

这就是为什么您可能会从某些公司那里听到"单一化"一词的原因。这实际上意味着以自动方式修改源代码以唯一命名全局范围项,如包、模块、宏......适用于来自多个团队 (IP( 的 verilog 构建块。

因此,最好的解决方案是让您的团队相互交谈并同意使用名称。

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

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

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

最新更新