在verilog文件中定义的宏,但错误在modelsim中显示未分解的宏

时间:2012-12-23 13:12:14

标签: modelsim

我在一个verilog文件中定义了所有verilog文件的宏,比如FabScalarParam.v 然后我先在system.do文件中编译FabScalarParam.v,然后编译其他verilog文件。

但是当我运行“do system.do”来编译设计时,它会向我显示这样的错误,

# ** Error: I:/programming/EDK/project_4/pcores/instruction_side_v1_00_a/hdl/verilog/StallUnit.v(6): (vlog-2163) Macro `MAX_STALL_CYCLES_LOG is undefined.

它表示某些宏未定义。是否有任何方法可以在modelsim的编译列表中选择FabScalarParam.v作为全局文件?由于宏的数量很多,我无法使用以下方法指定所有宏:compile - >编译选项 - > verilog& system verilog - >其他verilog选项 - >宏。

我使用modelsim 6.5,xilinx edk 12.4

4 个答案:

答案 0 :(得分:2)

这与编译顺序有关。包含宏的编译器指令由编译器线性处理。有关更多详细信息,请参阅IEEE1364-2001第19节或IEEE1800-2009第22节。确保宏文件是编译的第一个文件。

手动添加`include也有效,但是你的编译器可能会给出宏重新定义的警告。建议将宏定义封装在`ifdef /`ifndef中。这样做可以解决宏定义的警告问题。如果多个文件引用相同的`include,那么宏的封装也可以提高编译器的性能。请参阅以下示例。

macros.vh:

`ifndef macros_vh
// NOTE: for Verilog 1995 `ifndef is not supported use `ifdef macros_vh `else
`define macros_vh
/**************
* your macros *
* `define ... *
***************/
`endif

然后在你的verilog文件(* .v / * .sv)

`include "macro.vh"
/*************
 * your code *
 *************/

答案 1 :(得分:1)

我在Internet上找不到任何有用的东西来在modelsim的编译列表中设置全局文件。所以,我只需在每个文件中手动添加`include ...来解决问题。虽然它很愚蠢,但它运作正常。

如果有人知道如何在modelsim的编译列表中设置全局文件,请更新它。 :-) 谢谢。

答案 2 :(得分:0)

我用脚本编译项目时遇到了同样的问题 最后,我发现你不能在不同的范围内编译宏和verilog文件 EX:

vlog -work work macro.v  
vlog -work work project.v  

你必须:

vlog -work work macro.v project.v

在一个vlog命令中编译它们可以解决问题。

答案 3 :(得分:0)

您可以通过向vlog添加以下选项来编译verilog文件并定义将应用于此文件的预编译器宏:

+define+<macro_name>[=<macro_text>]

与编译器指令相同:`define macro_name macro_text

例如:

vlog +define+macro_name -work work project.v