2016-08-25 30 views
0

我们使用[延迟]语句来提供延迟,并且我们可以在模拟中进行分析。但是当我们将这个模型加载到FPGA中时,由VHDL代码生成的实际硬件会影响延迟,或者这种延迟仅限于模拟?在[延迟第二秒]语句后仅在模拟中还是在实际合成模型中提供延迟才能在VHDL中加载到fpga中?

a <= not b after 1s; 

因此,假设我连一个开关到b,并导致a所以我会得到在按下开关和更新LED状态之间一秒的延迟?

+2

那将在'1秒后'; –

+1

你认为你的合成器会产生什么硬件来在1秒后实现'a <=不是b;'? –

+0

我看到了合成后的硬件,它只生成了与b相连的一个;确切地说, –

回答

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; 
+1

简而言之,'wait''和'after'语句不能合成。 –

+0

那么我怎么能产生可以合成的延迟? –

+2

@NeilTerminator使用时钟信号来实现定时器。还有其他的问题。 –

1

如之前所说,在等待语句不能合成,只会影响仿真。但是,我应该补充一点,即使在模拟中,您可能得不到您的期望。请允许我解释一下。

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

如果b在延迟过程中发生不稳定的情况,比如每隔500ms切换一次,a不会按照您的意愿切换。要真正引入纯滞后,选择传输延迟模型如下:

​​

当然,同样,这不能合成,仅供模拟的目的。