我想创建一个全局常量,它可以被所有模块看到。我尝试过不同的方法来在顶层模块中声明一个变量。但其他模块不能识别它。Verilog中的全局常量
在我最模块我有以下几点:
`define MODELSIM 0
当我在赛灵思的时候,我将设置MODELSIM为0。当我在我的ModelSim,我将其设置为1
在其他文件等模块,我有以下几点:
if(MODELSIM)
,使不同的事情将取决于我是否在的ModelSim或赛灵思是发生。
我想创建一个全局常量,它可以被所有模块看到。我尝试过不同的方法来在顶层模块中声明一个变量。但其他模块不能识别它。Verilog中的全局常量
在我最模块我有以下几点:
`define MODELSIM 0
当我在赛灵思的时候,我将设置MODELSIM为0。当我在我的ModelSim,我将其设置为1
在其他文件等模块,我有以下几点:
if(MODELSIM)
,使不同的事情将取决于我是否在的ModelSim或赛灵思是发生。
只需以顶级模块的名称作为前缀即可。
module top;
integer myglobalvar;
endmodule
module any;
initial $display(top.myglobalvar);
endmodule
这适用于modelsim,但不适用于Xilinx。 – neuromancer 2011-05-15 12:08:54
然后赛灵思不支持标准的Verilog。如果您询问Xilinx,那么您应该在问题中提到这一点。 – mark4o 2011-05-15 14:16:42
模块外引用通常是不可合成的。 – Marty 2011-05-15 15:22:15
有几件事要注意。获取简单的一出的第一方式,用Verilog到预处理宏引用必须用反引号为前缀,即:
if (`MODELSIM)
Verilog的标准规定,蜱定义具有全局作用域,这意味着如果你定义MODELSIM
在编译的第一个文件中,该定义将应用于所有后续文件。但是,我相信Modelsim会将每个文件编译到单独的编译单元中,因此最安全的做法是在每个verilog文件中创建一个包含宏定义的头文件mydesign.vh
和`include
。 `define
适用于源文本的级别。 `define
与特定模块之间没有关联,也无法按范围访问`define
。
一些文体笔记:
如果你正试图使仿真和综合之间的区别,它是标准的使用SYNTHESIS
宏这一点。许多综合工具将自动定义它。谨慎处理合成条件。由于它有意让您的模拟与您的综合结果有所不同,因此这是一种在脚中拍摄自己的简单方法。
对于简单的标志,最好使用1/undef而不是1/0的值。如果您稍后编写`ifdef MACRO
,将事情定义为零可能会导致问题。
你准备怎么做?如果它是一个常量,那么可以考虑使用'define statement – Marty 2011-05-15 13:50:41
我试图设置一个常量,因为有部分代码在Modelsim中可用,但在Xilinx中不可用。我希望能够使用全局常量,以便可以控制这些部分并根据我是在Modelsim还是Xilinx中来设置常量。 – neuromancer 2011-05-15 20:41:03
这听起来像你想'定义 – 2011-05-15 20:47:18