的范围,我读了文本替换宏在“Verilog的”全球范围。 SystemVerilog如何工作?我想在2个不同的SystemVerilog文件中使用2个不同的相同文本宏的定义 - 可以吗?的SystemVerilog:文本替换宏
回答
在SystemVerilog中,宏定义仅限于编译单元范围,但是那是什么取决于工具的配置。从规范:
定义哪些文件构成编译的确切机制 单位是工具特定的。然而,标准的工具应提供使用 模式,使双方的下列情况:
一)给定的编译命令行上的所有文件进行单 编译单元(在这种情况下,这些文件 中的声明,都可以访问以下正常的可见性规则贯穿整个文件集)。 b)每个文件是一个单独的编译单元(在这种情况下,每个编译单元范围内的 声明在其相应文件中只能访问 )。
因此,如果您使用多个文件编译单元(-mfcu
为的ModelSim),就会出现冲突,因为宏命名空间将具有全局作用域。然而,规范明确允许重新定义,所以在这种情况下您可能不会收到错误(或警告),除非您的工具支持它。
的文本宏的名称空间是编译单元内全球。 因为文本宏的名字被引入,并与一家领先的“ 字符使用,但仍明确与任何其他名称空间。文本 宏名在外观上的线性顺序定义输入文件构成编译单元的集合 。随后的 相同名称的定义会覆盖输入文件的以前定义的 余额。
根据您如何使用宏,您可能需要考虑使用参数。参数本质上是常量,比预处理器指令的范围更受限制。它们也可以用来选择性地使用生成结构实例化代码。
你可以得到SV规范here是免费的。
如果所需的宏具有相似的结构/格式,那么您可以使用带参数的宏。参见IEEE1800-2012第22.5.1节。
`define myMacro(arg1,arg2) \
prefix_``arg1 = arg2``_postfix
如果所需的宏定义是只在其推崇的文件,独特的,那么你就可以做到以下几点。所有其他文件将不会有可以调用的`mymacro
。 `undef
来自Verilog,IEEE1364-1995第16.3.2节,并且已包含在SystemVerilog中。您可以在最新版本中阅读有关`undef
的更多信息; IEEE1800-2012第22.5.2节。
file1。SV:
`define mymacro abcd
/* SystemVerilog code */
`undef mymacro
file2.sv:
`define mymacro wxyz
/* SystemVerilog code */
`undef mymacro
- 1. 在Systemverilog文本替换宏中防止参数替换
- 2. 文本替换宏
- 3. 有条件的宏文本替换
- 4. vba - 扫描文件的宏和替换宏文本?
- 5. LINQ的宏替换
- 6. 如何导入SystemVerilog宏?
- 7. LibreOffice的Python宏 - 替换文本中的字符串
- 8. 替换文本
- 9. 文本替换
- 10. 文本替换
- 11. BYTE C宏的C++替换
- 12. c中的宏替换#
- 13. Excel的自动替换宏
- 14. 高级查找和替换/文本扩大/宏
- 15. Confluence蓝图替换在纯文本体宏中不起作用
- 16. LibreOffice替换宏 - 只替换一次并用格式替换
- 17. 六,替换文本
- 18. 替换XML文本
- 19. JS替换文本
- 20. 宏替换,-E选项GCC
- 21. 替换使用Visual Studio宏
- 22. 用宏替换缺失值
- 23. Excel查找并替换宏
- 24. 替换文本框中的文本
- 25. SED替换文本的文本变量
- 26. 替换swiffy中的文本
- 27. 替换PHP中的文本?
- 28. 替换Python中的文本
- 29. 替换CSS中的文本
- 30. 替换PDF中的文本
感谢您的详细响应。我认为使用参数/生成方法的选择性实例代码需要在语法上完成以避免编译错误。但是对于文本宏,它可以是仅在正确的上下文中使用才能编译的片段。这是我需要的能力。 – user2292757 2013-04-21 03:19:59