19.3 `define and `undef
提供了文本宏替换功能,可以使用有意义的名称来表示常用的文本片段。例如,在整个描述中重复使用一个常数的情况下,文本宏是有用的,如果常数的值需要改变,因为它只需要更改源描述中的一个位置。
文本宏工具不受编译器指令`resetall的影响。
19.3.1 `define
指令define为文本替换创建了一个宏。这个指令可以在模块定义的内部和外部使用。一个文本宏定义以后,通过使用(`)字符,后面跟着宏的名字,它可以在源代码描述中使用。编译器应该用宏的文本替换字符串`text_macro_name和它后面的实际任何参数。所有的编译指令都应该被认为是预定义的宏名;将编译器指令重定义为宏名是非法的。
文本宏可以用参数定义。这允许为每次使用分别定制宏。
文本宏定义的语法见语法19-2。

宏文本可以是与文本宏名在同一行指定的任意文本。如果需要多行来指定文本,换行符必须在前加反斜杠(\)。第一个不带反斜杠的换行符将结束宏文本。在扩展宏中,前面有反斜杠的换行符将被替换为换行符(但前面没有反斜杠字符)。
当形式化参数被用来定义文本宏时,形式化参数的范围应该扩展到宏文本的末尾。在宏文本中,形式参数可以像标识符一样使用。
如果使用了形式参数,则形式参数名称的列表应括在宏名称后面的括号中。形式参数名应该是simple_identifiers,由逗号和可选的空格分隔。左括号紧跟文本宏名,中间没有空格。
如果文本中包含了单行注释(即用字符//指定的注释),那么该注释将不会成为替换文本的一部分。宏文本可以为空,在这种情况下,文本宏被定义为空,并且在使用宏时不替换任何文本。
使用文本宏的语法见语法19-3。

本文介绍了Verilog HDL中的`define和`undef指令,如何使用宏定义替换常用文本片段,参数化宏,以及如何取消已定义的宏。理解这些概念有助于提高代码可维护性和灵活性。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



