在[第二次延迟]语句之后是否仅在模拟中提供延迟或在VHDL中加载到fpga的实际合成模型中?

时间:2016-08-25 09:20:51

标签: vhdl fpga xilinx xilinx-ise

在提供延迟的[延迟]声明之后使用,能在模拟中分析。但是当我们将这个模型加载到FPGA中时,由VHDL代码生成的实际硬件会产生延迟影响,或者这种延迟仅限于模拟?

a <=   not b after 1s;

假设我将一个开关连接到b并将LED连接到a,那么在按下开关和更新LED状态之间会有一秒延迟吗?

2 个答案:

答案 0 :(得分:1)

如前所述,wait语句无法合成,只会影响模拟。但是,我应该补充一点,即使在模拟中你也可能达不到你的期望。请允许我解释一下。

VHDL提供2种延迟模型:传输延迟和惯性延迟,后者是默认值,您通过不指定要使用的模型来选择。

如果b在延迟过程中发生不稳定,说它每500ms切换一次,就不会像你想要的那样切换。要真正引入纯延迟,请按如下方式选择传输延迟模型:

a <=  transport not b after 1s;

当然,再次,这不能合成,仅用于模拟目的。

答案 1 :(得分:0)

当你在模拟时,你需要在事情发生时提供以及输入会发生什么。在FPGA上实现后,外部事件会创建输入,模拟与此无关。

因此,如果我理解你的问题,是的,你所展示的延迟只会影响模拟。

编辑: 关于定时器,您知道FPGA的时钟频率。所以你可以创建一个变量并在每个clk_up上增加它(我使用CLK = '1' and CLK'Event但有更好的方法),当它达到与时钟频率相同的值时,1秒已经过去

不那么伪代码:

signal clock: unsigned (9 downto 0);
if CLK = '1' and CLK'Event then
   clock<= clock + 1;
   if clock = "1100100000" then --clock frequency (this is an example)
       clock <= "0000000000"
       -- 1 secound passed!
   end if;
end if;