在VHDL中等效的#ifdef用于模拟/合成分离?

时间:2011-02-25 14:27:20

标签: vhdl

为了简化模拟波的视觉阅读,我想将一些信号分配给“XXXX”,但仅在模拟时,因此我希望逻辑综合工具(在我的情况下是ISE)跳过这些指令

这里有两个问题:

  1. 是否存在#ifdef SIMULATION_TIME的等效技术,如C?
  2. 对“XXXX”的分配是否会对逻辑合成产生影响(重置为0?警告?没有?)。如果它根本没有影响,那么我的问题就得到了回答。如果没有,我仍然需要分配给“XXXX”......
  3. 感谢。

4 个答案:

答案 0 :(得分:6)

(1)您正在寻找

--pragma synthesis_off
  -- your simulation-only code
--pragma synthesis_on

(2)您可能会从ISE收到一些警告,特别是当这些信号驱动逻辑时。在使用之前,请确保信号具有定义的值。这个方法也应该适用。

答案 1 :(得分:6)

如果您发现自己想要使用ifdef进行任意代码选择,那么您可以使用VHDL关键字如果生成

label: if SOME_OPTION = SOME_VALUE generate
  some VHDL here
end generate;

如果您需要选择性地包含一些代码,这很方便,但如果选择是在模拟和合成之间,那么合成开/关会被更广泛地使用。

答案 2 :(得分:6)

另一个与乔治的答案相关的技巧 - 如果你想要in_synthesis的布尔值说:

constant in_simulation : boolean := false
--pragma synthesis_off
                                    or true
--pragma synthesis_on
;
constant in_synthesis : boolean := not in_simulation;

答案 3 :(得分:0)

正如其他人所提到的,通常有一种方法可以关闭与工具相关的综合(查看ISE文档)。

当我需要更复杂的东西时,我会进行预处理。通常,我使用makefile和各种* nix风格的文本处理工具(sed,awk,perl和c)。这可以根据需要简单或复杂。开始作为解开模拟与合成的不同代码块的方法现在提取寄存器文档并为SW团队自动生成C头文件。

如果您不想“自己动手”,可以将许多预先存在的实现之一(C预处理器,m4宏语言和& c)应用到构建过程中。