【问题标题】:Why is import package outside module visible from other files/modules?为什么从其他文件/模块中可以看到模块外部的导入包?
【发布时间】:2021-07-08 13:35:07
【问题描述】:
  • 文件 A
`timescale 1ns/10ps
import mypkg::*;
module test_A (
...
);

  • 文件 B:
`timescale 1ns/10ps
module test_B (
...
);

  • 为什么mypkg 的typedef 在文件B 中可见? 它不应该是每个编译单元(=此处的文件)吗?

【问题讨论】:

    标签: system-verilog


    【解决方案1】:
    IEEE 1800-2017 SystemVerilog LRM

    3.12.1 编译单元 节为工具提供了将每个文件作为单独的编译单元处理的选择,就像在 C/C++ 中一样,或者在命令行上编译的每个文件都作为一个像 Verilog 一样的编译单元。如果使用单独的命令行编译,所有工具都将每个文件视为单独的编译单元。

    很遗憾,没有标准的默认选择;您需要阅读工具的用户手册。

    我知道 Modelsim/Questa 默认将每个 SystemVerilog 文件视为一个单独的编译单元。

    【讨论】:

    • 好吧.. Vivado 似乎将它们视为全局的,并且在模块声明之外的文件中找出哪个文件声明了导入并不容易。谢谢!
    • synopsys 肯定不会将文件视为单独的编译单元,所有宏定义、全局范围内的声明(包括导入结果)都是粘性的,并且在命令行后面的文件中可见。跨度>
    • 我会避免在编译单元全局范围内声明这样的导入。
    猜你喜欢
    • 1970-01-01
    • 2017-10-05
    • 2019-11-19
    • 2019-07-18
    • 2011-09-11
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    相关资源
    最近更新 更多