基于 xilinx/modelsim 的综合/仿真的编译器指令的自动标志?

Doo*_*oov 0 simulation verilog fpga modelsim xilinx

我有一个大型 verilog 项目,我正在将它合成到 xilinx fpga 上并在 modelsim 中进行模拟。有几个模块,我想在其中模拟所述模块的一个版本并合成另一个版本。例如,我有一个参数化的重置去抖动器,它计算几毫秒。显然,对于模拟来说,这很烦人,所以在我模拟之前,我将去抖动计数更改为 10 个时钟周期。目前我有一个标志(`define SIMULATION),我将其注释掉以进行综合。然后在我的模块中,我利用诸如 'ifdef 之类的编译器指令根据合成/模拟来编译不同版本的 deouncer:

 `ifdef SIMULATION
   button_debouncer #(1,5, 24)
`else
   button_debouncer #(1,12000000,24)
`endif
   resetdebounce(/**/
         // Outputs
         .debounced     (reset),
         // Inputs
         .clk           (clk),
         .button        (~reset_button));
Run Code Online (Sandbox Code Playgroud)

虽然这行得通,但它要求我每次从 modlesim 切换到 ISE 时都注释输入/输出`define SIMULATION。我经常忘记,浪费时间等等。

是否有自动确定正在使用的工具的方法?例如,我可以说ifdef XILINX orifdef MODELSIM 之类的东西,而不是我的 `ifdef SIMULATION hack?非常感谢!

dwi*_*kle 5

Mentor Graphics 模拟器(ModelSim 和 Questa)将定义MODEL_TECH预处理器宏。

所以你可以这样做:

`ifdef MODEL_TECH
  // code for simulation with modelsim
`else
  // code for synthesis
`endif
Run Code Online (Sandbox Code Playgroud)