在[some delay in second]语句之后,只在仿真或实际合成模型中提供延迟,并在VHDL中加载到fpga中



我们使用after [some delay]语句来提供延迟,我们可以在仿真中进行分析。但是当我们将这个模型加载到FPGA中时,那么在实际硬件中由VHDL代码制作的延迟会有影响还是这种延迟仅限于仿真?

a <=   not b after 1s;

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

如前所述,等待语句不能合成,只会影响模拟。然而,我应该补充一点,即使在模拟中,您也可能无法得到您所期望的结果。请允许我解释一下。

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

如果b碰巧在延迟过程中不稳定,假设它每500ms切换一次,则a不会像您希望的那样切换。要真正引入纯延迟,请按如下方式选择传输延迟模型:

a <=  transport not b after 1s;

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

当您进行模拟时,您需要提供事情发生的时间以及输入发生的情况。在FPGA上实现后,外部事件创建输入,仿真与之无关。

如果我对你的问题理解正确的话,是的,你所显示的延迟只会影响模拟。

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

Not-so-Pseudo代码:

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;

相关内容

最新更新