我们使用[延迟]语句来提供延迟,并且我们可以在模拟中进行分析。但是当我们将这个模型加载到FPGA中时,由VHDL代码生成的实际硬件会影响延迟,或者这种延迟仅限于模拟?在[延迟第二秒]语句后仅在模拟中还是在实际合成模型中提供延迟才能在VHDL中加载到fpga中?
a <= not b after 1s;
因此,假设我连一个开关到b
,并导致a
所以我会得到在按下开关和更新LED状态之间一秒的延迟?
我们使用[延迟]语句来提供延迟,并且我们可以在模拟中进行分析。但是当我们将这个模型加载到FPGA中时,由VHDL代码生成的实际硬件会影响延迟,或者这种延迟仅限于模拟?在[延迟第二秒]语句后仅在模拟中还是在实际合成模型中提供延迟才能在VHDL中加载到fpga中?
a <= not b after 1s;
因此,假设我连一个开关到b
,并导致a
所以我会得到在按下开关和更新LED状态之间一秒的延迟?
当你模拟你需要提供事情发生和输入发生了什么。在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;
简而言之,'wait''和'after'语句不能合成。 –
那么我怎么能产生可以合成的延迟? –
@NeilTerminator使用时钟信号来实现定时器。还有其他的问题。 –
如之前所说,在等待语句不能合成,只会影响仿真。但是,我应该补充一点,即使在模拟中,您可能得不到您的期望。请允许我解释一下。
VHDL提供2种延迟模型:传输延迟和惯性延迟,后者是默认值,您选择时不指定使用哪种模型。
如果b在延迟过程中发生不稳定的情况,比如每隔500ms切换一次,a不会按照您的意愿切换。要真正引入纯滞后,选择传输延迟模型如下:
当然,同样,这不能合成,仅供模拟的目的。
那将在'1秒后'; –
你认为你的合成器会产生什么硬件来在1秒后实现'a <=不是b;'? –
我看到了合成后的硬件,它只生成了与b相连的一个;确切地说, –