0

我有一个大型 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));

虽然这行得通,但每次从 modlesim 切换到 ISE 时,我都需要注释掉“定义仿真”。我经常忘记,浪费时间等等。

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

4

3 回答 3

5

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

所以你可以这样做:

`ifdef MODEL_TECH
  // code for simulation with modelsim
`else
  // code for synthesis
`endif
于 2013-05-25T00:20:03.317 回答
4

根据 Xilinx ISIm 用户指南(UG660,v14.3,第 44 页),isim 预定义了宏 XILINX_ISIM(值为 1)。所以只需使用 XILINX_ISIM 而不是 SIMULATION。

于 2013-05-26T09:08:04.500 回答
0

尝试将+define+SIMULATIONvlog 作为命令行参数传递。

于 2013-05-25T00:42:02.600 回答