【问题标题】:Automatic flag for compiler directive based on synthesis/simulation for xilinx/modelsim?基于 xilinx/modelsim 的综合/仿真的编译器指令的自动标志?
【发布时间】:2013-05-24 23:04:08
【问题描述】:

我有一个大型 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?非常感谢!

【问题讨论】:

  • @CliffordVienna 和 dwikle 解决方案都运行良好。根据您的工具链,一个或两个解决方案都可以很好地工作。

标签: simulation verilog fpga xilinx modelsim


【解决方案1】:

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

所以你可以这样做:

`ifdef MODEL_TECH
  // code for simulation with modelsim
`else
  // code for synthesis
`endif

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      尝试将+define+SIMULATION 作为命令行参数传递给 vlog。

      【讨论】:

      • 感谢您的信息。你知道这是否会导致永久定义,或者我每次打开 modelsim 时都必须这样做吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-26
      • 2014-07-28
      相关资源
      最近更新 更多