我在一个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
答案 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