VHDL中的简单振荡器

时间:2017-11-04 14:31:37

标签: process vhdl fpga clock

我刚刚开始使用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%。

现在,据我所知,timer_1Hz信号的任何变化都会触发流程clk,无论是从0过渡到1,或者从10

由于0.5 Hz测试被注释掉,我从上面的示例中期望闪烁频率为rising_edge的LED。换句话说,我预计在一个时钟周期内,在上升沿和下降沿将触发主体两次。但是,这似乎不起作用,即LED永远不会打开。

如果我包含rising_edge测试,LED会以1 Hz的频率闪烁,就像我预期的那样。

有人可以解释在意外情况下我错过了什么。

1 个答案:

答案 0 :(得分:1)

如果没有删除上升边缘部分,代码将无法运行。它可能适用于模拟,但不适用于真正的fpga板。为什么?因为灵敏度列表(大部分)对于模拟而言非常重要,而不是(对于合成而言)非常重要。

出于综合目的,您必须始终考虑要实施的硬件。从实际意义上说,一个过程不是'#34;运行&#34;当某些事件发生时。

如果您真的想要0.5 Hz输出,只需使用25E6而不是原始代码50E6 ..