System verilog Systemverilog:文本替换宏的范围
我读到文本替换宏在“verilog”中具有全局作用域。SystemVerilog是如何工作的?我想在两个不同的SystemVerilog文件中使用同一文本宏的两个不同定义-可以吗?在SystemVerilog中,宏定义仅限于编译单元范围,但具体定义取决于工具配置。根据规范: 定义构成编译的文件的确切机制 单元是特定于工具的。但是,合规工具应提供使用 允许以下两种情况的模型: a) 给定编译命令行上的所有文件构成一个 编译单元(在这种情况下,这些文件中的声明 可在整个过程中按照正常的可见性规则访问 整个文件集) b) 每个文件都是一个单独的编译单元(在这种情况下 每个编译单元范围中的声明只能访问 在其相应的文件中) 因此,如果对Modelsim使用多个文件编译单元(System verilog Systemverilog:文本替换宏的范围,system-verilog,System Verilog,我读到文本替换宏在“verilog”中具有全局作用域。SystemVerilog是如何工作的?我想在两个不同的SystemVerilog文件中使用同一文本宏的两个不同定义-可以吗?在SystemVerilog中,宏定义仅限于编译单元范围,但具体定义取决于工具配置。根据规范: 定义构成编译的文件的确切机制 单元是特定于工具的。但是,合规工具应提供使用 允许以下两种情况的模型: a) 给定编译命令行上的所有文件构成一个 编译单元(在这种情况下,这些文件中的声明 可在整个过程中按照正常的可见性规则访问
-mfcu
),则会发生冲突,因为宏命名空间将具有全局范围。但是,规范明确允许重新定义,因此在这种情况下,您可能不会得到错误(或警告),除非您的工具支持它
文本宏名称空间在编译单元中是全局的。
因为文本宏名称是引入的,并与前导字符一起使用
字符,它们与任何其他名称空间保持明确。正文
宏名称是按集合中出现的线性顺序定义的
组成编译单元的输入文件的类型。后来的
相同名称的定义将替代以前的定义
输入文件的平衡
取决于您使用宏的方式,您可能需要考虑使用参数。参数本质上是比预处理器指令范围更有限的常量。它们还可以用于使用generate构造选择性地实例化代码
您可以免费获得SV规范。在SystemVerilog中,宏定义仅限于编译单元范围,但具体定义取决于工具配置。根据规范: 定义构成编译的文件的确切机制 单元是特定于工具的。但是,合规工具应提供使用 允许以下两种情况的模型: a) 给定编译命令行上的所有文件构成一个 编译单元(在这种情况下,这些文件中的声明 可在整个过程中按照正常的可见性规则访问 整个文件集) b) 每个文件都是一个单独的编译单元(在这种情况下 每个编译单元范围中的声明只能访问 在其相应的文件中) 因此,如果对Modelsim使用多个文件编译单元(
-mfcu
),则会发生冲突,因为宏命名空间将具有全局范围。但是,规范明确允许重新定义,因此在这种情况下,您可能不会得到错误(或警告),除非您的工具支持它
文本宏名称空间在编译单元中是全局的。
因为文本宏名称是引入的,并与前导字符一起使用
字符,它们与任何其他名称空间保持明确。正文
宏名称是按集合中出现的线性顺序定义的
组成编译单元的输入文件的类型。后来的
相同名称的定义将替代以前的定义
输入文件的平衡
取决于您使用宏的方式,您可能需要考虑使用参数。参数本质上是比预处理器指令范围更有限的常量。它们还可以用于使用generate构造选择性地实例化代码
您可以免费获得SV规范。如果所需的宏具有模拟结构/格式,则可以使用带参数的宏。见IEEE1800-2012第22.5.1节
`define myMacro(arg1,arg2) \
prefix_``arg1 = arg2``_postfix
如果所需的宏定义仅在其受尊重的文件中且唯一,则可以执行以下操作。所有其他文件都不会有可调用的`mymacro
<代码>`undf来自Verilog,IEEE1364-1995第16.3.2节,并已包含在SystemVerilog中。您可以在最新版本中阅读有关`unde
的更多信息;IEEE1800-2012第22.5.2节
file1.sv:
`define mymacro abcd
/* SystemVerilog code */
`undef mymacro
file2.sv:
`define mymacro wxyz
/* SystemVerilog code */
`undef mymacro
如果所需宏具有模拟结构/格式,则可以使用带参数的宏。见IEEE1800-2012第22.5.1节
`define myMacro(arg1,arg2) \
prefix_``arg1 = arg2``_postfix
如果所需的宏定义仅在其受尊重的文件中且唯一,则可以执行以下操作。所有其他文件都不会有可调用的`mymacro
<代码>`undf来自Verilog,IEEE1364-1995第16.3.2节,并已包含在SystemVerilog中。您可以在最新版本中阅读有关`unde
的更多信息;IEEE1800-2012第22.5.2节
file1.sv:
`define mymacro abcd
/* SystemVerilog code */
`undef mymacro
file2.sv:
`define mymacro wxyz
/* SystemVerilog code */
`undef mymacro
谢谢你的详细回复。我认为使用parameter/generate方法的选择性实例化代码需要在语法上完整,以避免编译错误。但是对于文本宏,它可以是一个片段,只有在适当的上下文中使用时才会编译。这就是我需要的能力。谢谢你的详细回复。我认为使用parameter/generate方法的选择性实例化代码需要在语法上完整,以避免编译错误。但是对于文本宏,它可以是一个片段,只有在适当的上下文中使用时才会编译。这就是我需要的能力。