Verilog 全局变量的使用
Verilog Global Variable Usage
我正在尝试构建一个从定义文件导入全局定义的 Verilog 文件,这样我就可以在一个地方跟踪我的所有 FPGA 端点。在 my_defines 文件中,我有一个变量列表,如下所示:
`定义 PipeA 8'hA1
我使用 `include "my_defines.v"
将此文件导入主文件 top_module
当我在 top_module 文件中实例化变量时,我注意到您必须使用 `PipeA
作为变量名称而不是 PipeA。如果我已经导入了这个,为什么还需要 `?
`include
和 import
有很大区别。 import
是只有 SystemVerilog 允许的。 `define
的使用是预处理步骤中的文本替换,无需理解任何 Verilog 语法。 `PipeA
调用文本替换宏,它不是变量名。就 Verilog 而言,没有全局命名空间。
SystemVerilog 有一个 package
你可以定义它是一个可以导入模块(或另一个包)的命名空间。
`include
是一种 verilog 语法,它指示编译器在编译时包含其他文件的内容。它与C
中的#include
非常相似。
`define
定义了一个命名的文本替换(宏),类似于C
.
中的#define
因此, `define PipeA 8'hA1
定义了名为 PipeA
的宏,并将 8'h1
作为上下文。要在程序中使用它,您需要遵循 verilog 规则并使用 '`' 语法,如下所示: `PipeA
.
一个例子
assign myVar[7:0] = `PipeA;
预处理器会将 `PipeA
替换为其定义中的文本:
assign myVar[7:0] = 8'h1;
上面的结果会被verilog解析
宏定义被认为是全局的。定义解释发生在任何 verilog 分析之前,并且与范围规则正交。因此,无论您在何处定义宏,在范围内还是范围外,它仍然会在 compilation unit.
内的任何地方定义
此外,标准Verilog 没有任何导入的概念。 System verilog有,但是跟上面没有关系
我正在尝试构建一个从定义文件导入全局定义的 Verilog 文件,这样我就可以在一个地方跟踪我的所有 FPGA 端点。在 my_defines 文件中,我有一个变量列表,如下所示:
`定义 PipeA 8'hA1
我使用 `include "my_defines.v"
将此文件导入主文件 top_module当我在 top_module 文件中实例化变量时,我注意到您必须使用 `PipeA
作为变量名称而不是 PipeA。如果我已经导入了这个,为什么还需要 `?
`include
和 import
有很大区别。 import
是只有 SystemVerilog 允许的。 `define
的使用是预处理步骤中的文本替换,无需理解任何 Verilog 语法。 `PipeA
调用文本替换宏,它不是变量名。就 Verilog 而言,没有全局命名空间。
SystemVerilog 有一个 package
你可以定义它是一个可以导入模块(或另一个包)的命名空间。
`include
是一种 verilog 语法,它指示编译器在编译时包含其他文件的内容。它与C
中的#include
非常相似。
`define
定义了一个命名的文本替换(宏),类似于C
.
#define
因此, `define PipeA 8'hA1
定义了名为 PipeA
的宏,并将 8'h1
作为上下文。要在程序中使用它,您需要遵循 verilog 规则并使用 '`' 语法,如下所示: `PipeA
.
一个例子
assign myVar[7:0] = `PipeA;
预处理器会将 `PipeA
替换为其定义中的文本:
assign myVar[7:0] = 8'h1;
上面的结果会被verilog解析
宏定义被认为是全局的。定义解释发生在任何 verilog 分析之前,并且与范围规则正交。因此,无论您在何处定义宏,在范围内还是范围外,它仍然会在 compilation unit.
内的任何地方定义此外,标准Verilog 没有任何导入的概念。 System verilog有,但是跟上面没有关系