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

Aur*_*bon 5 vhdl

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

这里有两个问题:

  1. 是否存在#ifdef SIMULATION_TIME的等效技术,就像在C中一样?
  2. 对"XXXX"的赋值是否会对逻辑综合有任何影响(重置为0?警告?没有?).如果它根本没有影响,那么我的问题就得到了回答.如果没有,我仍然需要分配给"XXXX"......

谢谢.

Dev*_*eve 6

(1)你在找

--pragma synthesis_off
  -- your simulation-only code
--pragma synthesis_on
Run Code Online (Sandbox Code Playgroud)

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


Geo*_*rge 6

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

label: if SOME_OPTION = SOME_VALUE generate
  some VHDL here
end generate;
Run Code Online (Sandbox Code Playgroud)

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


Mar*_*son 6

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

constant in_simulation : boolean := false
--pragma synthesis_off
                                    or true
--pragma synthesis_on
;
constant in_synthesis : boolean := not in_simulation;
Run Code Online (Sandbox Code Playgroud)