1

我已经在一个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作为全局文件?由于宏的数量很多,我无法指定所有的宏使用方法:编译-->编译选项-->verilog &系统verilog-->其他verilog选项-->宏。

我使用modelsim 6.5,xilinx edk 12.4

4

5 回答 5

2

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

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

宏.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 *
 *************/
于 2013-01-08T23:54:55.660 回答
1

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

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

于 2012-12-25T11:09:30.753 回答
1

当我用脚本编译我的项目时,我遇到了同样的问题。
最后,我发现您无法在不同的范围内编译宏和 verilog 文件。
前任:

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

你必须:

vlog -work work macro.v project.v

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

于 2014-12-21T00:18:51.167 回答
0

这是我的解决方法,没有在每个需要宏的文件中添加 `include

vlog -mfcu -y <path/to/source/files> +libext+.v+.sv <源文件 1> <源文件 2> <... 源文件 N>

-mfcu 让 vlog 将一个命令行中的所有源文件视为一个编译单元。如果在 <source file 1> 中定义了宏,那么它们对它之后的所有源文件都是可见的。

于 2021-12-12T01:25:41.797 回答
0

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

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

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

例如:

vlog +define+macro_name -work work project.v
于 2015-09-16T13:59:51.363 回答