[英]Simple oscillator in VHDL
我刚开始使用VHDL,但在理解过程如何精确运行方面存在问题。 这是一个简单振荡器的示例:
timer_1Hz: process(clk) is
variable timer : integer := 0;
constant period : integer := 50E6;
begin
--if rising_edge(clk) then
timer := (timer+1) rem period;
if (timer=0) then
led <= not led;
end if;
--end if;
end process timer_1Hz;
clk是具有50 MHz频率和50%占空比的输入(时钟)信号。
现在,据我所知, clk
信号的任何变化(无论是从0
到1
还是从1
到0
的转变)都会触发流程timer_1Hz
。
从上面的示例中,我期望以0.5 Hz
的频率对LED进行闪烁,因为注释掉了rising_edge
测试。 换句话说,我希望在一个时钟周期内,在上升沿和下降沿触发两次该主体。 但是,这似乎不起作用,即LED永远不会打开。
如果我包括了rising_edge
测试,LED rising_edge
以1 Hz的频率闪烁,正如我所期望的那样。
有人可以解释一下意外情况下我缺少的内容吗?
没有删除的上升沿部分,代码将无法工作。 它可能在仿真中起作用,但在实际的fpga板上却不起作用。 为什么? 因为灵敏度列表对于仿真而言(主要)是重要的,而对于合成而言则不那么重要。
出于综合目的,您必须始终考虑要实现的硬件。 从实际意义上讲,当某些事件发生时,流程不是“运行”的。
如果您确实想要0.5 Hz的输出,只需使用25E6而不是原始代码的50E6。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.